diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePairWidget.java @ 9227:84397da33d17

Allow to control specific behaviour in TwinDatacagePanel Implemented client logic of 'intelligent datacage filtering' for SINFO
author gernotbelger
date Wed, 04 Jul 2018 18:28:08 +0200
parents e3c2ae1887e8
children
line wrap: on
line diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePairWidget.java	Wed Jul 04 17:14:16 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePairWidget.java	Wed Jul 04 18:28:08 2018 +0200
@@ -25,8 +25,26 @@
  * Insert a record into a listgrid when add-this-button clicked.
  */
 public class DatacagePairWidget extends VLayout {
+
+    /**
+     * Allows for advanced controlling of the behavior of this pair widget.
+     */
+    public static interface IDatacagePairControler {
+        void setup(DatacageWidget leftWidget, DatacageWidget rightWidget, HLayout toolbarLayout);
+    }
+
+    /**
+     * {@link IDatacagePairControler} implementation that does nothing.
+     */
+    public static final IDatacagePairControler NIL_CONTROLER = new IDatacagePairControler() {
+        @Override
+        public void setup(final DatacageWidget leftWidget, final DatacageWidget rightWidget, final HLayout toolbarLayout) {
+            // does nothing
+        }
+    };
+
     /** i18n resource. */
-    private final FLYSConstants MSG = GWT.create(FLYSConstants.class);
+    private static final FLYSConstants MSG = GWT.create(FLYSConstants.class);
 
     /** The "remote" ListGrid to insert data to when add-button is clicked. */
     private final ListGrid grid;
@@ -43,8 +61,9 @@
     /** errorMsg maxCount */
     private final String msgMaxCount;
 
-    public DatacagePairWidget(final DatacageWidgetData leftData, final DatacageWidgetData rightData, final ListGrid grid, final int maxCount,
-            final String msgMaxCount) {
+    public DatacagePairWidget(final IDatacagePairControler controler, final DatacageWidgetData leftData, final DatacageWidgetData rightData,
+            final ListGrid grid, final int maxCount, final String msgMaxCount) {
+
         this.msgMaxCount = msgMaxCount;
         this.maxCount = maxCount;
         this.grid = grid;
@@ -60,7 +79,10 @@
         hLayout.addMember(this.firstDatacageWidget);
         hLayout.addMember(this.secondDatacageWidget);
 
-        final Button plusBtn = new Button(this.MSG.datacage_add_pair());
+        final HLayout toolbarLayout = new HLayout();
+        toolbarLayout.setAutoHeight();
+
+        final Button plusBtn = new Button(MSG.datacage_add_pair());
         plusBtn.setAutoFit(true);
         plusBtn.addClickHandler(new ClickHandler() {
             @Override
@@ -68,23 +90,26 @@
                 plusClicked();
             }
         });
+        toolbarLayout.addMember(plusBtn);
 
         addMember(hLayout);
-        addMember(plusBtn);
+        addMember(toolbarLayout);
+
+        controler.setup(this.firstDatacageWidget, this.secondDatacageWidget, toolbarLayout);
     }
 
     /**
      * Callback for add-button.
      * Fires to load for every selected element and handler.
      */
-    public void plusClicked() {
+    protected final void plusClicked() {
         final ToLoad toLoad1 = this.firstDatacageWidget.getSelection();
         final ToLoad toLoad2 = this.secondDatacageWidget.getSelection();
 
         // FIXME: allows to select folders... but it should not
 
         if (toLoad1 == null || toLoad2 == null || toLoad1.toRecommendations().isEmpty() || toLoad2.toRecommendations().isEmpty()) {
-            SC.say(this.MSG.warning_select_two_values());
+            SC.say(MSG.warning_select_two_values());
             return;
         }
 

http://dive4elements.wald.intevation.org