diff examples/addressbook/DataEntryDialog.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 9c2803aea121
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/addressbook/DataEntryDialog.d	Sat May 10 13:32:45 2008 -0700
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 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
+ *******************************************************************************/
+module examples.addressbook.DataEntryDialog;
+
+import dwt.DWT;
+import dwt.events.ModifyEvent;
+import dwt.events.ModifyListener;
+import dwt.events.SelectionAdapter;
+import dwt.events.SelectionEvent;
+import dwt.layout.GridData;
+import dwt.layout.GridLayout;
+import dwt.widgets.Button;
+import dwt.widgets.Composite;
+import dwt.widgets.Display;
+import dwt.widgets.Label;
+import dwt.widgets.Shell;
+import dwt.widgets.Text;
+
+import dwt.dwthelper.ResourceBundle;
+import dwt.dwthelper.utils;
+
+/**
+ * DataEntryDialog class uses <code>org.eclipse.swt</code>
+ * libraries to implement a dialog that accepts basic personal information that
+ * is added to a <code>Table</code> widget or edits a <code>TableItem</code> entry
+ * to represent the entered data.
+ */
+public class DataEntryDialog {
+
+    private static ResourceBundle resAddressBook;
+
+    Shell shell;
+    char[][] values;
+    char[][] labels;
+
+public this(Shell parent) {
+    if( resAddressBook is null ){
+        resAddressBook = ResourceBundle.getBundle("examples_addressbook");
+    }
+    shell = new Shell(parent, DWT.DIALOG_TRIM | DWT.PRIMARY_MODAL);
+    shell.setLayout(new GridLayout());
+}
+
+private void addTextListener(Text text) {
+    text.addModifyListener(new class(text) ModifyListener {
+        Text text;
+        this( Text text ){ this.text = text; }
+        public void modifyText(ModifyEvent e){
+            Integer index = cast(Integer)(this.text.getData("index"));
+            values[index.intValue()] = this.text.getText();
+        }
+    });
+}
+private void createControlButtons() {
+    Composite composite = new Composite(shell, DWT.NONE);
+    composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
+    GridLayout layout = new GridLayout();
+    layout.numColumns = 2;
+    composite.setLayout(layout);
+
+    Button okButton = new Button(composite, DWT.PUSH);
+    okButton.setText(resAddressBook.getString("OK"));
+    okButton.addSelectionListener(new class() SelectionAdapter {
+        public void widgetSelected(SelectionEvent e) {
+            shell.close();
+        }
+    });
+
+    Button cancelButton = new Button(composite, DWT.PUSH);
+    cancelButton.setText(resAddressBook.getString("Cancel"));
+    cancelButton.addSelectionListener(new class() SelectionAdapter {
+        public void widgetSelected(SelectionEvent e) {
+            values = null;
+            shell.close();
+        }
+    });
+
+    shell.setDefaultButton(okButton);
+}
+
+private void createTextWidgets() {
+    if (labels is null) return;
+
+    Composite composite = new Composite(shell, DWT.NONE);
+    composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    GridLayout layout= new GridLayout();
+    layout.numColumns = 2;
+    composite.setLayout(layout);
+
+    if (values is null)
+        values = new char[][labels.length];
+
+    for (int i = 0; i < labels.length; i++) {
+        Label label = new Label(composite, DWT.RIGHT);
+        label.setText(labels[i]);
+        Text text = new Text(composite, DWT.BORDER);
+        GridData gridData = new GridData();
+        gridData.widthHint = 400;
+        text.setLayoutData(gridData);
+        if (values[i] !is null) {
+            text.setText(values[i]);
+        }
+        text.setData("index", new Integer(i));
+        addTextListener(text);
+    }
+}
+
+public char[][] getLabels() {
+    return labels;
+}
+public char[] getTitle() {
+    return shell.getText();
+}
+/**
+ * Returns the contents of the <code>Text</code> widgets in the dialog in a
+ * <code>char[]</code> array.
+ *
+ * @return  char[][]
+ *          The contents of the text widgets of the dialog.
+ *          May return null if all text widgets are empty.
+ */
+public char[][] getValues() {
+    return values;
+}
+/**
+ * Opens the dialog in the given state.  Sets <code>Text</code> widget contents
+ * and dialog behaviour accordingly.
+ *
+ * @param   dialogState int
+ *                  The state the dialog should be opened in.
+ */
+public char[][] open() {
+    createTextWidgets();
+    createControlButtons();
+    shell.pack();
+    shell.open();
+    Display display = shell.getDisplay();
+    while(!shell.isDisposed()){
+        if(!display.readAndDispatch())
+            display.sleep();
+    }
+
+    return getValues();
+}
+public void setLabels(char[][] labels) {
+    this.labels = labels;
+}
+public void setTitle(char[] title) {
+    shell.setText(title);
+}
+/**
+ * Sets the values of the <code>Text</code> widgets of the dialog to
+ * the values supplied in the parameter array.
+ *
+ * @param   itemInfo    char[][]
+ *                      The values to which the dialog contents will be set.
+ */
+public void setValues(char[][] itemInfo) {
+    if (labels is null) return;
+
+    if (values is null)
+        values = new char[][labels.length];
+
+    int numItems = Math.min(values.length, itemInfo.length);
+    for(int i = 0; i < numItems; i++) {
+        values[i] = itemInfo[i];
+    }
+}
+}