Mercurial > projects > dwt-samples
view examples/clipboard/ClipboardExample.d @ 123:698e70d0dca3
Fix build for non-TANGOSVN
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 21 Jul 2008 20:28:53 +0200 |
parents | be3a48f1d596 |
children | ae94c6a65f9e |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * D Port: * Jesse Phillips <Jesse.K.Phillips+D> gmail.com *******************************************************************************/ module examples.clipboard.ClipboardExample; import dwt.DWT; import dwt.custom.ScrolledComposite; import dwt.custom.StyledText; import dwt.dnd.Clipboard; import dwt.dnd.FileTransfer; import dwt.dnd.HTMLTransfer; import dwt.dnd.RTFTransfer; import dwt.dnd.TextTransfer; import dwt.dnd.Transfer; import dwt.events.SelectionAdapter; import dwt.events.SelectionEvent; import dwt.graphics.Point; import dwt.graphics.Rectangle; import dwt.layout.FillLayout; import dwt.layout.GridData; import dwt.layout.GridLayout; import dwt.widgets.Button; import dwt.widgets.Combo; import dwt.widgets.Composite; import dwt.widgets.DirectoryDialog; import dwt.widgets.Display; import dwt.widgets.FileDialog; import dwt.widgets.Group; import dwt.widgets.Label; import dwt.widgets.List; import dwt.widgets.Shell; import dwt.widgets.Table; import dwt.widgets.TableItem; import dwt.widgets.Text; import dwt.dwthelper.utils; import tango.io.Stdout; version(JIVE) import jive.stacktrace; version(TANGOSVN){ import tango.io.model.IFile; } else{ import tango.io.FileConst; } class ClipboardExample { static const int SIZE = 60; Clipboard clipboard; Shell shell; Text copyText; Text pasteText; Text copyRtfText; Text pasteRtfText; Text copyHtmlText; Text pasteHtmlText; Table copyFileTable; Table pasteFileTable; Text text; Combo combo; StyledText styledText; Label status; public void open(Display display) { clipboard = new Clipboard(display); shell = new Shell (display); shell.setText("DWT Clipboard"); shell.setLayout(new FillLayout()); ScrolledComposite sc = new ScrolledComposite(shell, DWT.H_SCROLL | DWT.V_SCROLL); Composite parent = new Composite(sc, DWT.NONE); sc.setContent(parent); parent.setLayout(new GridLayout(2, true)); Group copyGroup = new Group(parent, DWT.NONE); copyGroup.setText("Copy From:"); GridData data = new GridData(GridData.FILL_BOTH); copyGroup.setLayoutData(data); copyGroup.setLayout(new GridLayout(3, false)); Group pasteGroup = new Group(parent, DWT.NONE); pasteGroup.setText("Paste To:"); data = new GridData(GridData.FILL_BOTH); pasteGroup.setLayoutData(data); pasteGroup.setLayout(new GridLayout(3, false)); Group controlGroup = new Group(parent, DWT.NONE); controlGroup.setText("Control API:"); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; controlGroup.setLayoutData(data); controlGroup.setLayout(new GridLayout(5, false)); /* Enable with Available Types */ Group typesGroup = new Group(parent, DWT.NONE); typesGroup.setText("Available Types"); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; typesGroup.setLayoutData(data); typesGroup.setLayout(new GridLayout(2, false)); /**/ status = new Label(parent, DWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; data.heightHint = 60; status.setLayoutData(data); createTextTransfer(copyGroup, pasteGroup); createRTFTransfer(copyGroup, pasteGroup); createHTMLTransfer(copyGroup, pasteGroup); createFileTransfer(copyGroup, pasteGroup); createMyTransfer(copyGroup, pasteGroup); createControlTransfer(controlGroup); createAvailableTypes(typesGroup); sc.setMinSize(parent.computeSize(DWT.DEFAULT, DWT.DEFAULT)); sc.setExpandHorizontal(true); sc.setExpandVertical(true); Point size = shell.computeSize(DWT.DEFAULT, DWT.DEFAULT); Rectangle monitorArea = shell.getMonitor().getClientArea(); shell.setSize(Math.min(size.x, monitorArea.width - 20), Math.min(size.y, monitorArea.height - 20)); shell.open(); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } clipboard.dispose(); } void createTextTransfer(Composite copyParent, Composite pasteParent) { // TextTransfer Label l = new Label(copyParent, DWT.NONE); l.setText("TextTransfer:"); //$NON-NLS-1$ copyText = new Text(copyParent, DWT.MULTI | DWT.BORDER | DWT.V_SCROLL | DWT.H_SCROLL); copyText.setText("some\nplain\ntext"); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; copyText.setLayoutData(data); Button b = new Button(copyParent, DWT.PUSH); b.setText("Copy"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { auto data = copyText.getText(); if (data.length > 0) { status.setText(""); auto obj = new Object[1]; auto trans = new TextTransfer[1]; obj[0] = cast(Object) new ArrayWrapperString(data); trans[0] = TextTransfer.getInstance(); clipboard.setContents(obj, trans); } else { status.setText("nothing to copy"); } } }); l = new Label(pasteParent, DWT.NONE); l.setText("TextTransfer:"); //$NON-NLS-1$ pasteText = new Text(pasteParent, DWT.READ_ONLY | DWT.MULTI | DWT.BORDER | DWT.V_SCROLL | DWT.H_SCROLL); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; pasteText.setLayoutData(data); b = new Button(pasteParent, DWT.PUSH); b.setText("Paste"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { auto data = cast(ArrayWrapperString) clipboard.getContents(TextTransfer.getInstance()); if (data !is null) { status.setText(""); pasteText.setText("begin paste>"~data.array~"<end paste"); } else { status.setText("nothing to paste"); } } }); } void createRTFTransfer(Composite copyParent, Composite pasteParent){ // RTF Transfer Label l = new Label(copyParent, DWT.NONE); l.setText("RTFTransfer:"); //$NON-NLS-1$ copyRtfText = new Text(copyParent, DWT.MULTI | DWT.BORDER | DWT.V_SCROLL | DWT.H_SCROLL); copyRtfText.setText("some\nrtf\ntext"); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; copyRtfText.setLayoutData(data); Button b = new Button(copyParent, DWT.PUSH); b.setText("Copy"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { auto data = copyRtfText.getText(); if (data.length > 0) { status.setText(""); data = "{\\rtf1{\\colortbl;\\red255\\green0\\blue0;}\\uc1\\b\\i " ~ data ~ "}"; auto obj = new Object[1]; auto trans = new Transfer[1]; obj[0] = cast(Object) new ArrayWrapperString(data); trans[0] = RTFTransfer.getInstance(); clipboard.setContents(obj, trans); } else { status.setText("nothing to copy"); } } }); l = new Label(pasteParent, DWT.NONE); l.setText("RTFTransfer:"); //$NON-NLS-1$ pasteRtfText = new Text(pasteParent, DWT.READ_ONLY | DWT.MULTI | DWT.BORDER | DWT.V_SCROLL | DWT.H_SCROLL); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; pasteRtfText.setLayoutData(data); b = new Button(pasteParent, DWT.PUSH); b.setText("Paste"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { auto data = cast(ArrayWrapperString) clipboard.getContents(RTFTransfer.getInstance()); if (data !is null) { status.setText(""); pasteRtfText.setText("begin paste>"~data.array~"<end paste"); } else { status.setText("nothing to paste"); } } }); } void createHTMLTransfer(Composite copyParent, Composite pasteParent){ // HTML Transfer Label l = new Label(copyParent, DWT.NONE); l.setText("HTMLTransfer:"); //$NON-NLS-1$ copyHtmlText = new Text(copyParent, DWT.MULTI | DWT.BORDER | DWT.V_SCROLL | DWT.H_SCROLL); copyHtmlText.setText("<b>Hello World</b>"); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; copyHtmlText.setLayoutData(data); Button b = new Button(copyParent, DWT.PUSH); b.setText("Copy"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { auto data = copyHtmlText.getText(); if (data.length > 0) { status.setText(""); auto obj = new Object[1]; auto trans = new Transfer[1]; obj[0] = cast(Object) new ArrayWrapperString(data); trans[0] = HTMLTransfer.getInstance(); clipboard.setContents(obj, trans); } else { status.setText("nothing to copy"); } } }); l = new Label(pasteParent, DWT.NONE); l.setText("HTMLTransfer:"); //$NON-NLS-1$ pasteHtmlText = new Text(pasteParent, DWT.READ_ONLY | DWT.MULTI | DWT.BORDER | DWT.V_SCROLL | DWT.H_SCROLL); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; pasteHtmlText.setLayoutData(data); b = new Button(pasteParent, DWT.PUSH); b.setText("Paste"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { auto data = cast(ArrayWrapperString) clipboard.getContents(HTMLTransfer.getInstance()); if (data !is null) { status.setText(""); pasteHtmlText.setText("begin paste>"~data.array~"<end paste"); } else { status.setText("nothing to paste"); } } }); } void createFileTransfer(Composite copyParent, Composite pasteParent){ //File Transfer Label l = new Label(copyParent, DWT.NONE); l.setText("FileTransfer:"); //$NON-NLS-1$ Composite c = new Composite(copyParent, DWT.NONE); c.setLayout(new GridLayout(2, false)); GridData data = new GridData(GridData.FILL_HORIZONTAL); c.setLayoutData(data); copyFileTable = new Table(c, DWT.MULTI | DWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; data.horizontalSpan = 2; copyFileTable.setLayoutData(data); Button b = new Button(c, DWT.PUSH); b.setText("Select file(s)"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(shell, DWT.OPEN | DWT.MULTI); auto result = dialog.open(); if (result !is null && result.length > 0){ //copyFileTable.removeAll(); //This cannot be used version(TANGOSVN){ auto separator = tango.io.model.IFile.FileConst.PathSeparatorString; } else{ auto separator = tango.io.FileConst.FileConst.PathSeparatorString; } auto path = dialog.getFilterPath(); auto names = dialog.getFileNames(); for (int i = 0; i < names.length; i++) { TableItem item = new TableItem(copyFileTable, DWT.NONE); item.setText(path~separator~names[i]); } } } }); b = new Button(c, DWT.PUSH); b.setText("Select directory"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { DirectoryDialog dialog = new DirectoryDialog(shell, DWT.OPEN); auto result = dialog.open(); if (result !is null && result.length > 0){ //copyFileTable.removeAll(); TableItem item = new TableItem(copyFileTable, DWT.NONE); item.setText(result); } } }); b = new Button(copyParent, DWT.PUSH); b.setText("Copy"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { TableItem[] items = copyFileTable.getItems(); if (items.length > 0){ status.setText(""); auto data = new char[][items.length]; for (int i = 0; i < data.length; i++) { data[i] = items[i].getText(); } auto obj = new Object[1]; auto trans = new Transfer[1]; obj[0] = cast(Object) new ArrayWrapperString2(data); trans[0] = FileTransfer.getInstance(); clipboard.setContents(obj, trans); } else { status.setText("nothing to copy"); } } }); l = new Label(pasteParent, DWT.NONE); l.setText("FileTransfer:"); //$NON-NLS-1$ pasteFileTable = new Table(pasteParent, DWT.MULTI | DWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; pasteFileTable.setLayoutData(data); b = new Button(pasteParent, DWT.PUSH); b.setText("Paste"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { auto data = cast(ArrayWrapperString2) clipboard.getContents(FileTransfer.getInstance()); if (data !is null && data.array.length > 0) { status.setText(""); pasteFileTable.removeAll(); foreach (s; data.array) { TableItem item = new TableItem(pasteFileTable, DWT.NONE); item.setText(s); } } else { status.setText("nothing to paste"); } } }); } void createMyTransfer(Composite copyParent, Composite pasteParent){ // MyType Transfer // TODO } void createControlTransfer(Composite parent){ Label l = new Label(parent, DWT.NONE); l.setText("Text:"); Button b = new Button(parent, DWT.PUSH); b.setText("Cut"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { text.cut(); } }); b = new Button(parent, DWT.PUSH); b.setText("Copy"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { text.copy(); } }); b = new Button(parent, DWT.PUSH); b.setText("Paste"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { text.paste(); } }); text = new Text(parent, DWT.BORDER | DWT.MULTI | DWT.H_SCROLL | DWT.V_SCROLL); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; text.setLayoutData(data); l = new Label(parent, DWT.NONE); l.setText("Combo:"); b = new Button(parent, DWT.PUSH); b.setText("Cut"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { combo.cut(); } }); b = new Button(parent, DWT.PUSH); b.setText("Copy"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { combo.copy(); } }); b = new Button(parent, DWT.PUSH); b.setText("Paste"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { combo.paste(); } }); combo = new Combo(parent, DWT.NONE); char[][] str = new char[][4]; str[0] = "Item 1"; str[1] = "Item 2"; str[2] = "Item 3"; str[3] = "A longer Item"; combo.setItems(str); l = new Label(parent, DWT.NONE); l.setText("StyledText:"); l = new Label(parent, DWT.NONE); l.setVisible(false); b = new Button(parent, DWT.PUSH); b.setText("Copy"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { styledText.copy(); } }); b = new Button(parent, DWT.PUSH); b.setText("Paste"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { styledText.paste(); } }); styledText = new StyledText(parent, DWT.BORDER | DWT.MULTI | DWT.H_SCROLL | DWT.V_SCROLL); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = data.widthHint = SIZE; styledText.setLayoutData(data); } List list; void createAvailableTypes(Composite parent){ list = new List(parent, DWT.BORDER | DWT.H_SCROLL | DWT.V_SCROLL); GridData data = new GridData(GridData.FILL_BOTH); data.heightHint = 100; list.setLayoutData(data); Button b = new Button(parent, DWT.PUSH); b.setText("Get Available Types"); b.addSelectionListener(new class SelectionAdapter { public void widgetSelected(SelectionEvent e) { list.removeAll(); auto names = clipboard.getAvailableTypeNames(); for (int i = 0; i < names.length; i++) { list.add(names[i]); } } }); } } void main() { Display display = new Display(); (new ClipboardExample()).open(display); display.dispose(); }