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;
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;
/**
* @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;
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(), "");
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) {
}
}
- /** {@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());
combo.removeSelectionListener(listener);
}
- /** {@inheritDoc} */
@Override
public void widgetDisposed(DisposeEvent e) {
PreferencesUtil.getPreferenceStore().removePropertyChangeListener(this);
return combo.isEnabled();
}
- /** {@inheritDoc} */
@Override
public void setEnabled(boolean enabled) {
combo.setEnabled(enabled);
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
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]);
};
}
-}
+ @Override
+ public String toString() {
+ if (label != null){
+ return CdmUtils.concat("", "ComboElement[", label.getText(),"]");
+ }else{
+ return super.toString();
+ }
+ }
+}
\ No newline at end of file