diff org.eclipse.jface/src/org/eclipse/jface/viewers/ComboViewer.d @ 12:bc29606a740c

Added dwt-addons in original directory structure of eclipse.org
author Frank Benoit <benoit@tionex.de>
date Sat, 14 Mar 2009 18:23:29 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.eclipse.jface/src/org/eclipse/jface/viewers/ComboViewer.d	Sat Mar 14 18:23:29 2009 +0100
@@ -0,0 +1,242 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 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
+ *     Sebastian Davids - bug 69254
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
+ *******************************************************************************/
+
+module org.eclipse.jface.viewers.ComboViewer;
+
+import org.eclipse.jface.viewers.AbstractListViewer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.core.runtime.Assert;
+
+import java.lang.all;
+import java.util.Set;
+
+/**
+ * A concrete viewer based either on an SWT <code>Combo</code> control or <code>CCombo</code>
+ * control. This class is intended as an alternative to the JFace <code>ListViewer</code>, which displays
+ * its content in a combo box rather than a list. Wherever possible, this class attempts to behave
+ * like ListViewer. <p>
+ *
+ * This class is designed to be instantiated with a pre-existing SWT combo control
+ * and configured with a domain-specific content provider, label provider, element
+ * filter (optional), and element sorter (optional).
+ * </p>
+ *
+ * @see org.eclipse.jface.viewers.ListViewer
+ * @since 3.0 (made non-final in 3.4)
+ */
+public class ComboViewer : AbstractListViewer {
+
+    /**
+     * This viewer's list control if this viewer is instantiated with a combo control; otherwise
+     * <code>null</code>.
+     *
+     * @see #ComboViewer(Combo)
+     */
+    private Combo combo;
+
+    /**
+     * This viewer's list control if this viewer is instantiated with a CCombo control; otherwise
+     * <code>null</code>.
+     *
+     * @see #ComboViewer(CCombo)
+     * @since 3.3
+     */
+    private CCombo ccombo;
+
+    /**
+     * Creates a combo viewer on a newly-created combo control under the given parent.
+     * The viewer has no input, no content provider, a default label provider,
+     * no sorter, and no filters.
+     *
+     * @param parent the parent control
+     */
+    public this(Composite parent) {
+        this(parent, SWT.READ_ONLY | SWT.BORDER);
+    }
+
+    /**
+     * Creates a combo viewer on a newly-created combo control under the given parent.
+     * The combo control is created using the given SWT style bits.
+     * The viewer has no input, no content provider, a default label provider,
+     * no sorter, and no filters.
+     *
+     * @param parent the parent control
+     * @param style the SWT style bits
+     */
+    public this(Composite parent, int style) {
+        this(new Combo(parent, style));
+    }
+
+    /**
+     * Creates a combo viewer on the given combo control.
+     * The viewer has no input, no content provider, a default label provider,
+     * no sorter, and no filters.
+     *
+     * @param list the combo control
+     */
+    public this(Combo list) {
+        this.combo = list;
+        hookControl(list);
+    }
+
+    /**
+     * Creates a combo viewer on the given CCombo control.
+     * The viewer has no input, no content provider, a default label provider,
+     * no sorter, and no filters.
+     *
+     * @param list the CCombo control
+     * @since 3.3
+     */
+    public this(CCombo list) {
+        this.ccombo = list;
+        hookControl(list);
+    }
+
+    protected override void listAdd(String string, int index) {
+        if (combo is null) {
+            ccombo.add(string, index);
+        } else {
+            combo.add(string, index);
+        }
+    }
+
+    protected override void listSetItem(int index, String string) {
+        if (combo is null) {
+            ccombo.setItem(index, string);
+        } else {
+            combo.setItem(index, string);
+        }
+    }
+
+    protected override int[] listGetSelectionIndices() {
+        if (combo is null) {
+            return [ ccombo.getSelectionIndex() ];
+        } else {
+            return [ combo.getSelectionIndex() ];
+        }
+    }
+
+    protected override int listGetItemCount() {
+        if (combo is null) {
+            return ccombo.getItemCount();
+        } else {
+            return combo.getItemCount();
+        }
+    }
+
+    protected override void listSetItems(String[] labels) {
+        if (combo is null) {
+            ccombo.setItems(labels);
+        } else {
+            combo.setItems(labels);
+        }
+    }
+
+    protected override void listRemoveAll() {
+        if (combo is null) {
+            ccombo.removeAll();
+        } else {
+            combo.removeAll();
+        }
+    }
+
+    protected override void listRemove(int index) {
+        if (combo is null) {
+            ccombo.remove(index);
+        } else {
+            combo.remove(index);
+        }
+    }
+
+    /* (non-Javadoc)
+     * Method declared on Viewer.
+     */
+    public override Control getControl() {
+        if (combo is null) {
+            return ccombo;
+        } else {
+            return combo;
+        }
+    }
+
+    /**
+     * Returns this list viewer's list control. If the viewer was not created on
+     * a CCombo control, some kind of unchecked exception is thrown.
+     *
+     * @return the list control
+     * @since 3.3
+     */
+    public CCombo getCCombo() {
+        Assert.isNotNull(ccombo);
+        return ccombo;
+    }
+
+    /**
+     * Returns this list viewer's list control. If the viewer was not created on
+     * a Combo control, some kind of unchecked exception is thrown.
+     *
+     * @return the list control
+     */
+    public Combo getCombo() {
+        Assert.isNotNull(combo);
+        return combo;
+    }
+
+    /*
+     * Do nothing -- combos only display the selected element, so there is no way
+     * we can ensure that the given element is visible without changing the selection.
+     * Method defined on StructuredViewer.
+     */
+    public override void reveal(Object element) {
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.AbstractListViewer#listSetSelection(int[])
+     */
+    protected override void listSetSelection(int[] ixs) {
+        if (combo is null) {
+            for (int idx = 0; idx < ixs.length; idx++) {
+                ccombo.select(ixs[idx]);
+            }
+        } else {
+            for (int idx = 0; idx < ixs.length; idx++) {
+                combo.select(ixs[idx]);
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.AbstractListViewer#listDeselectAll()
+     */
+    protected override void listDeselectAll() {
+        if (combo is null) {
+            ccombo.deselectAll();
+            ccombo.clearSelection();
+        } else {
+            combo.deselectAll();
+            combo.clearSelection();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.AbstractListViewer#listShowSelection()
+     */
+    protected override void listShowSelection() {
+    }
+}