ref #7040 Replace Combo with CCombo which renders faster
authorPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 27 Oct 2017 21:13:29 +0000 (23:13 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 27 Oct 2017 21:13:29 +0000 (23:13 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/AbstractComboElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/TermComboElement.java

index 130a0994e421ea531e6d417e20f2b73a337b0d91..a69f639c0890278a3fb0752ba8acbdbac1294a7c 100644 (file)
@@ -8,14 +8,13 @@
 */
 package eu.etaxonomy.taxeditor.ui.combo;
 
-import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 
@@ -45,7 +44,7 @@ DisposeListener {
 
     protected Label label;
 
-    protected final Combo combo;
+    protected final CCombo combo;
 
 
     public AbstractComboElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
@@ -55,8 +54,7 @@ DisposeListener {
         addControl(label);
 
         // create combo
-        ComboViewer viewer = new ComboViewer(getLayoutComposite(), SWT.BORDER | SWT.READ_ONLY );
-        combo = viewer.getCombo();
+        combo = new CCombo(getLayoutComposite(), SWT.READ_ONLY);
         addControl(combo);
         TableWrapData fill_HORIZONTALLY = LayoutConstants.FILL_HORIZONTALLY();
         combo.setLayoutData(fill_HORIZONTALLY);
index 8f0d39a2d15e537343e20b58d539de73e3ab2980..d5dee1d87637afa13985dd1d5ed1adc1ac402675 100644 (file)
@@ -49,9 +49,9 @@ public class TermComboElement<T extends DefinedTermBase>
        public void setTermComparator(Comparator<T> termComparator) {
                this.termComparator = termComparator;
                List<T> termsWithoutNull = terms.subList(1, terms.size());
-               
+
                populateTerms(termsWithoutNull);
-               
+
        }
 
        private final TermType termType;
@@ -181,6 +181,9 @@ public class TermComboElement<T extends DefinedTermBase>
                if (termComparator != null) {
                        Collections.sort(preferredTerms, termComparator);
                }
+               terms.addAll(preferredTerms);
+
+               List<String> labels = new ArrayList<>();
                for (T term : preferredTerms) {
                        String label = getLabel(term);
                        if (label == null) {
@@ -198,8 +201,7 @@ public class TermComboElement<T extends DefinedTermBase>
 
                        }
 
-                       combo.add(label);
-                       terms.add(term);
+                       labels.add(label);
 
                        i++;
                        if (selection != null) {
@@ -209,11 +211,15 @@ public class TermComboElement<T extends DefinedTermBase>
                        }
                }
 
-               if (selection != null && index == 0) {
+               String[] items = labels.toArray(new String[0]);
+        combo.setItems(items);
+       
+        if (selection != null && index == 0) {
                        createTermNotInPreferredTerms(selection);
                }
 
                combo.select(index);
+
        }
 
        protected List<T> getPreferredTerms(){