diff examples/clipboard/ClipboardExample.d @ 78:4a04b6759f98

Clean up directory names
author John Reimer <terminal.node@gmail.com>
date Sat, 10 May 2008 13:32:45 -0700
parents
children be3a48f1d596
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/clipboard/ClipboardExample.d	Sat May 10 13:32:45 2008 -0700
@@ -0,0 +1,495 @@
+/*******************************************************************************
+ * 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;
+
+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);
+         //TODO: Doesn't work
+//       createRTFTransfer(copyGroup, pasteGroup);
+         createHTMLTransfer(copyGroup, pasteGroup);
+         //TODO: Doesn't work
+//       createFileTransfer(copyGroup, pasteGroup);
+         createMyTransfer(copyGroup, pasteGroup);
+         createControlTransfer(controlGroup);
+         //TODO: Causes Segfault
+//       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
+                         //auto separator = System.getProperty("file.separator");
+                         version(linux) {
+                            auto separator = "/";
+                         }
+                         version(Windows) {
+                            auto separator = "\\";
+                         }
+                         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);
+    }
+    void createAvailableTypes(Composite parent){
+         final List 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() {
+     Stdout.formatln( "The ClipboardExample: still work left" );
+    Stdout.formatln( "todo: RTF, File Transfer, Available types");
+    Stdout.formatln( "line 300, there might be a better way to do" );
+    Stdout.formatln( "system independent path seperators in tango" );
+    Stdout.formatln( "" );
+
+
+    Display display = new Display();
+    (new ClipboardExample()).open(display);
+    display.dispose();
+}
+