Merge branch 'release/5.19.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / combo / AbstractComboElement.java
index aa9389551c7d8d952b852f1e4580c92c6b0fa651..193ad9ff29e0197c776060f82f1a50af1e101b4a 100644 (file)
@@ -11,7 +11,10 @@ package eu.etaxonomy.taxeditor.ui.combo;
 import java.util.ArrayList;
 
 import org.eclipse.equinox.internal.p2.ui.misc.StringMatcher;
+import org.eclipse.jface.fieldassist.ComboContentAdapter;
+import org.eclipse.jface.fieldassist.ContentProposalAdapter;
 import org.eclipse.jface.fieldassist.IContentProposal;
+import org.eclipse.jface.fieldassist.IContentProposalListener;
 import org.eclipse.jface.fieldassist.IContentProposalProvider;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeEvent;
@@ -23,11 +26,11 @@ import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.preference.Resources;
-import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.AbstractRelevanceFormElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
 import eu.etaxonomy.taxeditor.ui.element.ISelectable;
@@ -36,12 +39,11 @@ import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
 /**
  * @author pplitzner
  * @date Aug 11, 2016
- *
  */
-public abstract class AbstractComboElement<T> extends
-AbstractCdmFormElement implements SelectionListener,
-IEnableableFormElement, ISelectable,
-DisposeListener {
+public abstract class AbstractComboElement<T>
+               extends AbstractRelevanceFormElement
+               implements SelectionListener, IEnableableFormElement,
+                       ISelectable, DisposeListener {
 
     protected static final int DEFAULT_VISIBLE_ITEMS = 10;
 
@@ -49,12 +51,11 @@ DisposeListener {
 
     protected Label label;
 
-    protected final Combo combo;
+    protected Combo combo;
 
+    public boolean hasNullValue;
 
-
-
-    public AbstractComboElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
+    public AbstractComboElement(CdmFormFactory formFactory, ICdmFormElement formElement, boolean hasNullValue) {
         super(formFactory, formElement);
 
         label = formFactory.createLabel(getLayoutComposite(), "");
@@ -67,16 +68,16 @@ DisposeListener {
         TableWrapData fill_HORIZONTALLY = LayoutConstants.FILL_HORIZONTALLY();
         combo.setLayoutData(fill_HORIZONTALLY);
         fill_HORIZONTALLY.maxWidth = 50;
-        combo.setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
-
-
-
+//        combo.setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
         //disable mouse-wheel selection
         combo.addListener(SWT.MouseWheel, e->e.doit=false);
-//        combo.addListener(SWT.MouseUp, e->firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e)));
+        this.hasNullValue = hasNullValue;
+    }
+
+    public AbstractComboElement(CdmFormFactory formFactory, ICdmFormElement formElement){
+        this(formFactory, formElement, false);
     }
 
-    /** {@inheritDoc} */
     @Override
     public void setBackground(Color color) {
         if (label != null) {
@@ -84,25 +85,16 @@ DisposeListener {
         }
     }
 
-    /** {@inheritDoc} */
     @Override
-    public void setIrrelevant(boolean irrelevant) {
-        String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT
-                : Resources.COLOR_COMPOSITE_BACKGROUND;
-
-        Color color = AbstractUtility.getColor(colorId);
+    public void updateCacheRelevance() {
+        Color color = cacheRelevance().getColor();
         combo.setBackground(color);
-        if (label != null) {
-            label.setBackground(color);
-        }
-
     }
 
     public void setVisibleItemCount(int count){
         combo.setVisibleItemCount(count);
     }
 
-    /** {@inheritDoc} */
     @Override
     public void setSelected(boolean selected) {
         setBackground(selected ? SELECTED : getPersistentBackground());
@@ -120,7 +112,6 @@ DisposeListener {
         combo.removeSelectionListener(listener);
     }
 
-    /** {@inheritDoc} */
     @Override
     public void widgetDisposed(DisposeEvent e) {
         PreferencesUtil.getPreferenceStore().removePropertyChangeListener(this);
@@ -135,7 +126,6 @@ DisposeListener {
         return combo.isEnabled();
     }
 
-    /** {@inheritDoc} */
     @Override
     public void setEnabled(boolean enabled) {
         combo.setEnabled(enabled);
@@ -143,6 +133,26 @@ DisposeListener {
 
     public abstract void setSelection(T selection);
 
+    private AbstractComboElement<T> getComboElement(){
+        return this;
+    }
+
+    protected void addContentProposalAdapter() {
+        ContentProposalAdapter adapter;
+
+        adapter = new ContentProposalAdapter(combo, new ComboContentAdapter(), getProposalProvider(), null, null);
+        adapter.setPropagateKeys(true);
+        adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
+        adapter.addContentProposalListener(new IContentProposalListener() {
+            @SuppressWarnings("unchecked")
+            @Override
+            public void proposalAccepted(IContentProposal proposal) {
+                setSelection((T)combo.getData(proposal.getContent()));
+                firePropertyChangeEvent(new CdmPropertyChangeEvent(getComboElement(), null));
+            }
+        });
+    }
+
     IContentProposalProvider getProposalProvider() {
         return new IContentProposalProvider() {
             @Override
@@ -152,7 +162,7 @@ DisposeListener {
                     return new IContentProposal[0];
                 }
                 StringMatcher matcher = new StringMatcher("*" + contents + "*", true, false); //$NON-NLS-1$ //$NON-NLS-2$
-                ArrayList<String> matches = new ArrayList<String>();
+                ArrayList<String> matches = new ArrayList<>();
                 for (int i = 0; i < items.length; i++) {
                     if (matcher.match(items[i])) {
                         matches.add(items[i]);
@@ -204,4 +214,12 @@ DisposeListener {
         };
     }
 
-}
+    @Override
+    public String toString() {
+        if (label != null){
+            return CdmUtils.concat("", "ComboElement[", label.getText(),"]");
+        }else{
+            return super.toString();
+        }
+    }
+}
\ No newline at end of file