latest quantum sources 2.3.2
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / widget / ComboViewer.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/widget/ComboViewer.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/widget/ComboViewer.java
new file mode 100644 (file)
index 0000000..7dd692a
--- /dev/null
@@ -0,0 +1,79 @@
+package com.quantum.view.widget;
+
+import org.eclipse.jface.viewers.ContentViewer;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * <p>A Combo viewer.
+ * 
+ * <p>In Eclipse version 3.0, a standard JFace ComboViewer class exists.
+ * 
+ * @author BC Holmes
+ */
+public class ComboViewer extends ContentViewer {
+
+       private Combo combo;
+
+       private Object[] objects = new Object[0];
+
+       public ComboViewer(Composite parent) {
+               this.combo = new Combo(parent, SWT.SIMPLE | SWT.DROP_DOWN | SWT.READ_ONLY);
+               this.combo.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent event) {
+                               ComboViewer.this.fireSelectionChanged(new SelectionChangedEvent(
+                                               ComboViewer.this, getSelection()) );
+                       }
+               });
+       }
+
+       public Control getControl() {
+               return this.combo;
+       }
+
+       public ISelection getSelection() {
+               int index = this.combo.getSelectionIndex();
+
+               return (this.objects == null || index >= this.objects.length || index < 0) 
+                               ? new StructuredSelection()
+                               : new StructuredSelection(this.objects[index]);
+       }
+
+       protected void inputChanged(Object input, Object oldInput) {
+               super.inputChanged(input, oldInput);
+
+               if (input == null) {
+                       this.objects = new Object[0];
+               } else {
+                       this.objects = ((IStructuredContentProvider) getContentProvider()).getElements(input);
+                       for (int i = 0, length = this.objects == null ? 0 : this.objects.length; i < length; i++) {
+                               String label = ((ILabelProvider) getLabelProvider()).getText(this.objects[i]);
+                               this.combo.add(label);
+                       }
+               }
+       }
+       public void refresh() {
+       }
+
+       public void setSelection(ISelection selection, boolean reveal) {
+               if (selection != null && selection instanceof IStructuredSelection) {
+                       Object object = ((IStructuredSelection) selection).getFirstElement();
+                       for (int i = 0, length = this.objects == null ? 0 : this.objects.length; 
+                                       object != null && i < length; i++) {
+                               if (this.objects[i] == object) {
+                                       this.combo.select(i);
+                               }
+                       }
+               }
+       }
+}
\ No newline at end of file