From bb37069205fda3ca45b41b02a368abc96cc359da Mon Sep 17 00:00:00 2001
From: juanf <juanf>
Date: Tue, 28 May 2013 08:21:40 +0000
Subject: [PATCH] SP-640 BIS-436: New vocabulary registration pop up used at
 the new property type pop up.

SVN: 29231
---
 .../ui/AbstractRegistrationForm.java          | 80 ++++++++++++++-----
 .../ui/vocabulary/AddVocabularyDialog.java    | 70 ++++++++++++++++
 .../VocabularyRegistrationForm.java           | 41 ++++++++--
 .../vocabulary/VocabularySelectionWidget.java | 27 +++++--
 .../application/ui/widget/DropDownList.java   | 40 +++++-----
 5 files changed, 204 insertions(+), 54 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/AddVocabularyDialog.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java
index 72b2cd0a71f..b078605887b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractRegistrationForm.java
@@ -19,6 +19,24 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
 import java.util.ArrayList;
 import java.util.List;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ICallbackListener;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.InfoBoxCallbackListener;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IComponentWithCloseConfirmation;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations.IConfirmation;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations.IConfirmationChain;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ConfirmationDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FormPanelWithSavePoint;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FormPanelWithSavePoint.DirtyChangeEvent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.InfoBox;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
+
 import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
 import com.extjs.gxt.ui.client.Style.Scroll;
 import com.extjs.gxt.ui.client.event.ButtonEvent;
@@ -39,23 +57,6 @@ import com.google.gwt.core.client.JavaScriptException;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.InfoBoxCallbackListener;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IComponentWithCloseConfirmation;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations.IConfirmation;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ButtonWithConfirmations.IConfirmationChain;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ConfirmationDialog;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FormPanelWithSavePoint;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FormPanelWithSavePoint.DirtyChangeEvent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.InfoBox;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
-
 /**
  * An <i>abstract</i> registration form.
  * 
@@ -113,17 +114,31 @@ public abstract class AbstractRegistrationForm extends ContentPanel implements
 
     private boolean dirtyCheckEnabled = true;
 
+    protected final boolean isPopUp;
+
     protected AbstractRegistrationForm(final IMessageProvider messageProvider, final String id)
     {
-        this(messageProvider, id, DEFAULT_LABEL_WIDTH, DEFAULT_FIELD_WIDTH);
+        this(messageProvider, id, DEFAULT_LABEL_WIDTH, DEFAULT_FIELD_WIDTH, false);
     }
 
     protected AbstractRegistrationForm(final IMessageProvider messageProvider, final String id,
             final int labelWidth, final int fieldWidth)
+    {
+        this(messageProvider, id, labelWidth, fieldWidth, false);
+    }
+
+    protected AbstractRegistrationForm(final IMessageProvider messageProvider, final String id, final boolean isPopUp)
+    {
+        this(messageProvider, id, DEFAULT_LABEL_WIDTH, DEFAULT_FIELD_WIDTH, isPopUp);
+    }
+
+    protected AbstractRegistrationForm(final IMessageProvider messageProvider, final String id,
+            final int labelWidth, final int fieldWidth, final boolean isPopUp)
     {
         this.messageProvider = messageProvider;
         this.labelWidth = labelWidth;
         this.fieldWidth = fieldWidth;
+        this.isPopUp = isPopUp;
         setHeaderVisible(false);
         setLayout(new FlowLayout(5));
         setBodyBorder(false);
@@ -131,12 +146,25 @@ public abstract class AbstractRegistrationForm extends ContentPanel implements
         setScrollMode(Scroll.AUTO);
         setId(id);
         add(infoBox = createInfoBox(messageProvider));
+        if (isPopUp)
+        {
+            infoBox.setVisible(false);
+        }
         add(loadingInfo = createLoadingInfo());
         add(WidgetUtils.inRow(formPanel = createFormPanel(), rightPanel = createAdditionalPanel()));
+        if (isPopUp)
+        {
+            rightPanel.setVisible(false);
+        }
         formPanel.setId("registration-panel-" + id);
         add(unsavedChangesInfo = createUnsavedChangesInfo());
     }
 
+    public FormPanel getFormPanel()
+    {
+        return formPanel;
+    }
+
     private LayoutContainer createAdditionalPanel()
     {
         LayoutContainer c = new LayoutContainer();
@@ -342,9 +370,13 @@ public abstract class AbstractRegistrationForm extends ContentPanel implements
                 }
             });
 
-        panel.addButton(resetButton);
-        panel.addButton(revertButton);
-        panel.addButton(saveButton);
+        if (false == isPopUp)
+        {
+            panel.addButton(resetButton);
+            panel.addButton(revertButton);
+            panel.addButton(saveButton);
+        }
+
         return panel;
     }
 
@@ -420,6 +452,12 @@ public abstract class AbstractRegistrationForm extends ContentPanel implements
             setUploadEnabled(false);
         }
 
+        protected AbstractRegistrationCallback(final IViewContext<?> viewContext, final ICallbackListener<T> listener)
+        {
+            super(viewContext, listener);
+            setUploadEnabled(false);
+        }
+
         //
         // AbstractAsyncCallback
         //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/AddVocabularyDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/AddVocabularyDialog.java
new file mode 100644
index 00000000000..cd9ac3a029f
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/AddVocabularyDialog.java
@@ -0,0 +1,70 @@
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.CallbackListenerAdapter;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.VocabularyRegistrationForm.VocabularyRegistrationCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
+
+import com.extjs.gxt.ui.client.widget.MessageBox;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+public class AddVocabularyDialog extends AbstractRegistrationDialog
+{
+
+    private final VocabularyRegistrationForm vocabularyRegistrationForm;
+
+    public class VocabularyPopUpCallbackListener extends CallbackListenerAdapter<Void>
+    {
+        @Override
+        public void onFailureOf(final IMessageProvider messageProvider,
+                final AbstractAsyncCallback<Void> callback, final String failureMessage,
+                final Throwable throwable)
+        {
+            MessageBox.alert("Error", failureMessage, null);
+        }
+
+        @Override
+        public void finishOnSuccessOf(final AbstractAsyncCallback<Void> callback, final Void result)
+        {
+            VocabularyRegistrationCallback vocabularyCallback = (VocabularyRegistrationCallback) callback;
+            MessageBox.info("Success", vocabularyCallback.createSuccessfullRegistrationInfo(null), null);
+            hide();
+        }
+
+    }
+
+    public AddVocabularyDialog(IViewContext<ICommonClientServiceAsync> viewContext, IDelegatedAction postRegistrationCallback)
+    {
+        super(viewContext, "Register Vocabulary", postRegistrationCallback);
+        vocabularyRegistrationForm = new VocabularyRegistrationForm(viewContext, true, new VocabularyPopUpCallbackListener());
+        addField(vocabularyRegistrationForm);
+    }
+
+    @Override
+    protected void afterRender()
+    {
+        super.afterRender();
+
+        this.getFormPanel().layout();
+        this.layout();
+
+        vocabularyRegistrationForm.getBody().setStyleAttribute("background-color", "transparent");
+        vocabularyRegistrationForm.getFormPanel().getBody().setStyleAttribute("background-color", "transparent");
+        int innerWidth = AbstractRegistrationForm.DEFAULT_LABEL_WIDTH + AbstractRegistrationForm.DEFAULT_FIELD_WIDTH + 111;
+        int innerHeight = 400;
+        vocabularyRegistrationForm.getFormPanel().setSize(innerWidth, innerHeight);
+        this.setSize(innerWidth - 30, innerHeight + 80);
+        this.center();
+    }
+
+    @Override
+    protected void register(AsyncCallback<Void> registrationCallback)
+    {
+        vocabularyRegistrationForm.submitValidForm();
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyRegistrationForm.java
index 6d55e033bc2..f4183e99cd0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyRegistrationForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyRegistrationForm.java
@@ -16,18 +16,20 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary;
 
-import com.extjs.gxt.ui.client.event.ButtonEvent;
-import com.extjs.gxt.ui.client.event.Events;
-import com.extjs.gxt.ui.client.event.SelectionListener;
-
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.FormPanelListener;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ICallbackListener;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.AddVocabularyDialog.VocabularyPopUpCallbackListener;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewVocabulary;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 
+import com.extjs.gxt.ui.client.event.ButtonEvent;
+import com.extjs.gxt.ui.client.event.Events;
+import com.extjs.gxt.ui.client.event.SelectionListener;
+
 /**
  * Form allowing to register new vocabularies.
  * 
@@ -47,9 +49,18 @@ public final class VocabularyRegistrationForm extends AbstractRegistrationForm
 
     protected final VocabularyRegistrationFieldSet vocabularyRegistrationFieldSet;
 
+    private final VocabularyPopUpCallbackListener dialogCallback;
+
     public VocabularyRegistrationForm(final IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        super(viewContext, ID);
+        this(viewContext, false, null);
+    }
+
+    public VocabularyRegistrationForm(final IViewContext<ICommonClientServiceAsync> viewContext, final boolean isPopUp,
+            VocabularyPopUpCallbackListener dialogCallback)
+    {
+        super(viewContext, ID, isPopUp);
+        this.dialogCallback = dialogCallback;
         setResetButtonVisible(true);
         this.viewContext = viewContext;
         termsSessionKey = ID + "_terms";
@@ -64,11 +75,18 @@ public final class VocabularyRegistrationForm extends AbstractRegistrationForm
     protected final void submitValidForm()
     {
         final NewVocabulary vocabulary = vocabularyRegistrationFieldSet.createVocabulary();
-        viewContext.getService().registerVocabulary(termsSessionKey, vocabulary,
-                new VocabularyRegistrationCallback(viewContext, vocabulary));
+        VocabularyRegistrationCallback asyncCallback;
+        if (isPopUp)
+        {
+            asyncCallback = new VocabularyRegistrationCallback(viewContext, vocabulary, dialogCallback);
+        } else
+        {
+            asyncCallback = new VocabularyRegistrationCallback(viewContext, vocabulary);
+        }
+        viewContext.getService().registerVocabulary(termsSessionKey, vocabulary, asyncCallback);
     }
 
-    private final class VocabularyRegistrationCallback extends
+    final class VocabularyRegistrationCallback extends
             AbstractRegistrationForm.AbstractRegistrationCallback<Void>
     {
         private final Vocabulary vocabulary;
@@ -80,6 +98,13 @@ public final class VocabularyRegistrationForm extends AbstractRegistrationForm
             this.vocabulary = vocabulary;
         }
 
+        VocabularyRegistrationCallback(final IViewContext<?> viewContext,
+                final Vocabulary vocabulary, final ICallbackListener<Void> listener)
+        {
+            super(viewContext, listener);
+            this.vocabulary = vocabulary;
+        }
+
         @Override
         protected String createSuccessfullRegistrationInfo(Void result)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java
index 1d6ed746400..89b18c42c6b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java
@@ -19,10 +19,6 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabu
 import java.util.ArrayList;
 import java.util.List;
 
-import com.extjs.gxt.ui.client.data.BaseModelData;
-import com.extjs.gxt.ui.client.widget.form.ComboBox;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
@@ -37,6 +33,13 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKin
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 
+import com.extjs.gxt.ui.client.data.BaseModelData;
+import com.extjs.gxt.ui.client.event.BaseEvent;
+import com.extjs.gxt.ui.client.event.Events;
+import com.extjs.gxt.ui.client.event.Listener;
+import com.extjs.gxt.ui.client.widget.form.ComboBox;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
 /**
  * A {@link ComboBox} extension for selecting a {@link Vocabulary}.
  * 
@@ -52,9 +55,20 @@ public class VocabularySelectionWidget extends DropDownList<BaseModelData, Vocab
     public VocabularySelectionWidget(final IViewContext<ICommonClientServiceAsync> viewContext)
     {
         super(viewContext, PREFIX, Dict.VOCABULARY, ModelDataPropertyNames.CODE, viewContext
-                .getMessage(Dict.VOCABULARY), viewContext.getMessage(Dict.VOCABULARY));
+                .getMessage(Dict.VOCABULARY), viewContext.getMessage(Dict.VOCABULARY), true);
         this.viewContext = viewContext;
         setWidth(100);
+
+        this.addListener(Events.TwinTriggerClick, new AddVocabularyListener());
+    }
+
+    private class AddVocabularyListener implements Listener<BaseEvent>
+    {
+        public void handleEvent(BaseEvent be)
+        {
+            AddVocabularyDialog dialog = new AddVocabularyDialog(viewContext, null);
+            dialog.show();
+        };
     }
 
     //
@@ -125,7 +139,6 @@ public class VocabularySelectionWidget extends DropDownList<BaseModelData, Vocab
     @Override
     public DatabaseModificationKind[] getRelevantModifications()
     {
-        return new DatabaseModificationKind[]
-            { DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY) };
+        return new DatabaseModificationKind[]  { DatabaseModificationKind.createOrDelete(ObjectKind.VOCABULARY) };
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java
index 07d171f300a..08cd7cf800b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java
@@ -21,6 +21,17 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 
+import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.VoidAsyncCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
+
 import com.extjs.gxt.ui.client.GXT;
 import com.extjs.gxt.ui.client.core.El;
 import com.extjs.gxt.ui.client.data.ModelData;
@@ -37,17 +48,6 @@ import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
 
-import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.VoidAsyncCallback;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
-
 /**
  * @author Izabela Adamczyk
  */
@@ -100,12 +100,18 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i
     protected El span;
 
     public DropDownList(final IViewContext<?> viewContext, String idSuffix, String labelDictCode,
-            String displayField, String chooseSuffix, String nothingFoundSuffix)
+            String displayField, String chooseSuffix, String nothingFoundSuffix, boolean twinTriggerEnabled)
     {
         this(idSuffix, displayField, viewContext.getMessage(labelDictCode), viewContext.getMessage(
                 Dict.COMBO_BOX_CHOOSE, chooseSuffix), viewContext.getMessage(Dict.COMBO_BOX_EMPTY,
                 nothingFoundSuffix), viewContext
-                .getMessage(Dict.COMBO_BOX_EXPECTED_VALUE_FROM_THE_LIST), true, viewContext, true);
+                .getMessage(Dict.COMBO_BOX_EXPECTED_VALUE_FROM_THE_LIST), true, viewContext, true, twinTriggerEnabled);
+    }
+
+    public DropDownList(final IViewContext<?> viewContext, String idSuffix, String labelDictCode,
+            String displayField, String chooseSuffix, String nothingFoundSuffix)
+    {
+        this(viewContext, idSuffix, labelDictCode, displayField, chooseSuffix, nothingFoundSuffix, false);
     }
 
     public DropDownList(String idSuffix, String displayField, String label, String chooseMsg,
@@ -246,9 +252,8 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i
     }
 
     /**
-     * Refreshes the whole store of the combobox. If the previously chosen value is no longer
-     * present in the store, it will be changed to empty. Otherwise the previous selection will be
-     * preserved.
+     * Refreshes the whole store of the combobox. If the previously chosen value is no longer present in the store, it will be changed to empty.
+     * Otherwise the previous selection will be preserved.
      */
     public void refreshStore()
     {
@@ -473,8 +478,7 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i
 
     /**
      * @return true if anything has been selected. <br>
-     *         Note that the result can be different from tryGetSelected() != null if there are null
-     *         values in the model.
+     *         Note that the result can be different from tryGetSelected() != null if there are null values in the model.
      */
     protected boolean isAnythingSelected()
     {
-- 
GitLab