JAL-633, JAL-591 - refactored ArgumentI.getValue from jabaws .getDefaultValue
authorjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 29 Aug 2011 14:41:22 +0000 (15:41 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 29 Aug 2011 14:41:22 +0000 (15:41 +0100)
Introduced 'compact' parameter display mode and more refactoring

src/jalview/gui/OptsAndParamsPage.java
src/jalview/gui/WsJobParameters.java

index f0fd3a7..e4782a0 100644 (file)
@@ -1,22 +1,25 @@
 package jalview.gui;
 
+import jalview.ws.params.ArgumentI;
 import jalview.ws.params.OptionI;
 import jalview.ws.params.ParameterI;
 import jalview.ws.params.ValueConstrainI;
+import jalview.ws.params.ValueConstrainI.ValueType;
 
 import java.awt.BorderLayout;
 import java.awt.Component;
-import java.awt.Container;
 import java.awt.Dimension;
-import java.awt.FlowLayout;
 import java.awt.Font;
 import java.awt.GridLayout;
 import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -37,15 +40,22 @@ import javax.swing.border.TitledBorder;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
-import compbio.metadata.ValueConstrain.Type;
+import net.miginfocom.swing.MigLayout;
 
 /**
- * GUI generator/manager for options and parameters. Originally abstracted from the WsJobParameters dialog box.
- * @author jprocter 
- *
+ * GUI generator/manager for options and parameters. Originally abstracted from
+ * the WsJobParameters dialog box.
+ * 
+ * @author jprocter
+ * 
  */
 public class OptsAndParamsPage
 {
+  /**
+   * compact or verbose style parameters
+   */
+  boolean compact = false;
+
   public class OptionBox extends JPanel implements MouseListener,
           ActionListener
   {
@@ -75,20 +85,27 @@ public class OptsAndParamsPage
       enabled.setText(opt.getName());
       enabled.addActionListener(this);
       finfo = option.getFurtherDetails();
+      String desc = opt.getDescription();
       if (finfo != null)
       {
         hasLink = true;
+
         enabled.setToolTipText("<html>"
-                + JvSwingUtils.wrapTooltip(opt.getDescription()
-                        + "<br><img src=\"" + linkImageURL + "\"/>")
+                + JvSwingUtils
+                        .wrapTooltip(((desc == null) ? "see further details by right-clicking"
+                                : desc)
+                                + "<br><img src=\"" + linkImageURL + "\"/>")
                 + "</html>");
         enabled.addMouseListener(this);
       }
       else
       {
-        enabled.setToolTipText("<html>"
-                + JvSwingUtils.wrapTooltip(opt.getDescription())
-                + "</html>");
+        if (desc != null)
+        {
+          enabled.setToolTipText("<html>"
+                  + JvSwingUtils.wrapTooltip(opt.getDescription())
+                  + "</html>");
+        }
       }
       add(enabled, BorderLayout.NORTH);
       if (opt.getPossibleValues().size() > 1)
@@ -98,7 +115,7 @@ public class OptsAndParamsPage
         {
           val.addItem((String) str);
         }
-        val.setSelectedItem((String) opt.getDefaultValue());
+        val.setSelectedItem((String) opt.getValue());
         val.addActionListener(this);
         add(val, BorderLayout.SOUTH);
       }
@@ -129,8 +146,8 @@ public class OptsAndParamsPage
         else
         {
           // compare against default service setting
-          notmod &= option.getDefaultValue() == null
-                  || option.getDefaultValue().equals(val.getSelectedItem());
+          notmod &= option.getValue() == null
+                  || option.getValue().equals(val.getSelectedItem());
         }
       }
       else
@@ -150,7 +167,7 @@ public class OptsAndParamsPage
 
       if (val.getSelectedItem() != null)
       {
-        opt.setDefaultValue((String) val.getSelectedItem());
+        opt.setValue((String) val.getSelectedItem());
       }
       return opt;
     }
@@ -193,7 +210,7 @@ public class OptsAndParamsPage
       if (option.isRequired())
       {
         // Apply default value
-        selectOption(option, option.getDefaultValue());
+        selectOption(option, option.getValue());
       }
     }
 
@@ -207,7 +224,7 @@ public class OptsAndParamsPage
       }
       else
       {
-        initVal = (initEnabled) ? option.getDefaultValue() : null;
+        initVal = (initEnabled) ? option.getValue() : null;
       }
     }
 
@@ -253,6 +270,59 @@ public class OptsAndParamsPage
     public ParamBox(final OptsParametersContainerI pmlayout, ParameterI parm)
     {
       pmdialogbox = pmlayout;
+      finfo = parm.getFurtherDetails();
+      validator = parm.getValidValue();
+      parameter = parm;
+      if (validator != null)
+      {
+        integ = validator.getType() == ValueType.Integer;
+      }
+      else
+      {
+        if (parameter.getPossibleValues() != null)
+        {
+          choice = true;
+        }
+      }
+      
+      if (!compact)
+      {
+        makeExpanderParam(parm);
+      }
+      else
+      {
+        makeCompactParam(parm);
+
+      }
+    }
+
+    private void makeCompactParam(ParameterI parm)
+    {
+      setLayout(new MigLayout("","[][grow]"));
+
+      String ttipText=null;
+
+      controlPanel.setLayout(new BorderLayout());
+
+      if (parm.getDescription() != null
+              && parm.getDescription().trim().length() > 0)
+      {
+        // Only create description boxes if there actually is a description.
+        ttipText = ("<html>"
+                  + JvSwingUtils
+                          .wrapTooltip(parm.getDescription()+(finfo!=null ?"<br><img src=\""
+                                  + linkImageURL
+                                  + "\"/> Right click for further information.":""))
+                  + "</html>");
+      }
+      
+      JvSwingUtils.mgAddtoLayout(this, ttipText, new JLabel(parm.getName()),controlPanel, "");
+      updateControls(parm);
+      validate();
+    }
+
+    private void makeExpanderParam(ParameterI parm)
+    {
       setPreferredSize(new Dimension(PARAM_WIDTH, PARAM_CLOSEDHEIGHT));
       setBorder(new TitledBorder(parm.getName()));
       setLayout(null);
@@ -263,62 +333,68 @@ public class OptsAndParamsPage
 
       string.setEditable(false);
       descPanel.getViewport().setView(string);
-      
+
       descPanel.setVisible(false);
-      
-      final ParamBox me = this;
-      finfo = parm.getFurtherDetails();
-      if (finfo != null)
-      {
-        showDesc.setToolTipText("<html>"
-                + JvSwingUtils
-                        .wrapTooltip("Click to show brief description<br><img src=\""
-                                + linkImageURL
-                                + "\"/> Right click for further information.")
-                + "</html>");
-        showDesc.addMouseListener(this);
-      }
-      else
-      {
-        showDesc.setToolTipText("<html>"
-                + JvSwingUtils
-                        .wrapTooltip("Click to show brief description.")
-                + "</html>");
-      }
-      showDesc.addActionListener(new ActionListener()
-      {
 
-        public void actionPerformed(ActionEvent e)
-        {
-          descisvisible = !descisvisible;
-          descPanel.setVisible(descisvisible);
-          descPanel.getVerticalScrollBar().setValue(0);
-          me.setPreferredSize(new Dimension(PARAM_WIDTH,
-                  (descisvisible) ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT));
-          me.validate();
-          pmlayout.refreshParamLayout();
-        }
-      });
-      string.setWrapStyleWord(true);
-      string.setLineWrap(true);
-      string.setColumns(32);
-      string.setText(parm.getDescription());
       JPanel firstrow = new JPanel();
       firstrow.setLayout(null);
       controlPanel.setLayout(new BorderLayout());
       controlPanel.setBounds(new Rectangle(39, 10, PARAM_WIDTH - 70,
               PARAM_CLOSEDHEIGHT - 50));
-      showDesc.setBounds(new Rectangle(10, 10, 16, 16));
-      firstrow.add(showDesc);
       firstrow.add(controlPanel);
       firstrow.setBounds(new Rectangle(10, 20, PARAM_WIDTH - 30,
               PARAM_CLOSEDHEIGHT - 30));
+
+      final ParamBox me = this;
+
+      if (parm.getDescription() != null
+              && parm.getDescription().trim().length() > 0)
+      {
+        // Only create description boxes if there actually is a description.
+        if (finfo != null)
+        {
+          showDesc.setToolTipText("<html>"
+                  + JvSwingUtils
+                          .wrapTooltip("Click to show brief description<br><img src=\""
+                                  + linkImageURL
+                                  + "\"/> Right click for further information.")
+                  + "</html>");
+          showDesc.addMouseListener(this);
+        }
+        else
+        {
+          showDesc.setToolTipText("<html>"
+                  + JvSwingUtils
+                          .wrapTooltip("Click to show brief description.")
+                  + "</html>");
+        }
+        showDesc.addActionListener(new ActionListener()
+        {
+
+          public void actionPerformed(ActionEvent e)
+          {
+            descisvisible = !descisvisible;
+            descPanel.setVisible(descisvisible);
+            descPanel.getVerticalScrollBar().setValue(0);
+            me.setPreferredSize(new Dimension(PARAM_WIDTH,
+                    (descisvisible) ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT));
+            me.validate();
+            pmdialogbox.refreshParamLayout();
+          }
+        });
+        string.setWrapStyleWord(true);
+        string.setLineWrap(true);
+        string.setColumns(32);
+        string.setText(parm.getDescription());
+        showDesc.setBounds(new Rectangle(10, 10, 16, 16));
+        firstrow.add(showDesc);
+      }
       add(firstrow);
       validator = parm.getValidValue();
       parameter = parm;
       if (validator != null)
       {
-        integ = validator.getType() == Type.Integer;
+        integ = validator.getType() == ValueType.Integer;
       }
       else
       {
@@ -370,15 +446,18 @@ public class OptsAndParamsPage
     }
 
     @Override
-    public int getBaseline(int width, int height) {
-        return 0;
+    public int getBaseline(int width, int height)
+    {
+      return 0;
     }
 
-    // from http://stackoverflow.com/questions/2743177/top-alignment-for-flowlayout
+    // from
+    // http://stackoverflow.com/questions/2743177/top-alignment-for-flowlayout
     // helpful hint of using the Java 1.6 alignBaseLine property of FlowLayout
     @Override
-    public Component.BaselineResizeBehavior getBaselineResizeBehavior() {
-        return Component.BaselineResizeBehavior.CONSTANT_ASCENT;
+    public Component.BaselineResizeBehavior getBaselineResizeBehavior()
+    {
+      return Component.BaselineResizeBehavior.CONSTANT_ASCENT;
     }
 
     public int getBoxHeight()
@@ -391,11 +470,11 @@ public class OptsAndParamsPage
       ParameterI prm = parameter.copy();
       if (choice)
       {
-        prm.setDefaultValue((String) choicebox.getSelectedItem());
+        prm.setValue((String) choicebox.getSelectedItem());
       }
       else
       {
-        prm.setDefaultValue(valueField.getText());
+        prm.setValue(valueField.getText());
       }
       return prm;
     }
@@ -449,6 +528,7 @@ public class OptsAndParamsPage
       }
 
     }
+
     public void updateControls(ParameterI parm)
     {
       adjusting = true;
@@ -467,6 +547,28 @@ public class OptsAndParamsPage
           slider.addChangeListener(this);
           valueField = new JTextField();
           valueField.addActionListener(this);
+          valueField.addKeyListener(new KeyListener()
+          {
+            
+            @Override
+            public void keyTyped(KeyEvent e)
+            {
+            }
+            
+            @Override
+            public void keyReleased(KeyEvent e)
+            {
+              if (valueField.getText().trim().length()>0)
+                {
+                actionPerformed(null);
+                }
+            }
+            
+            @Override
+            public void keyPressed(KeyEvent e)
+            {
+            }
+          });
           valueField.setPreferredSize(new Dimension(60, 25));
           controlPanel.add(slider, BorderLayout.WEST);
           controlPanel.add(valueField, BorderLayout.EAST);
@@ -487,14 +589,14 @@ public class OptsAndParamsPage
             }
           }
 
-          if (parm.getDefaultValue() != null)
+          if (parm.getValue() != null)
           {
-            choicebox.setSelectedItem(parm.getDefaultValue());
+            choicebox.setSelectedItem(parm.getValue());
           }
         }
         else
         {
-          valueField.setText(parm.getDefaultValue());
+          valueField.setText(parm.getValue());
         }
       }
       lastVal = updateSliderFromValueField();
@@ -601,14 +703,20 @@ public class OptsAndParamsPage
     }
   }
 
-  static final int PARAM_WIDTH = 340;
+  public static final int PARAM_WIDTH = 340;
+
+  public static final int PARAM_HEIGHT = 150;
 
-  private static final int PARAM_HEIGHT = 150;
+  public static final int PARAM_CLOSEDHEIGHT = 80;
 
-  static final int PARAM_CLOSEDHEIGHT = 80;
-  public OptsAndParamsPage(OptsParametersContainerI wsJobParameters)
+  public OptsAndParamsPage(OptsParametersContainerI paramContainer)
+  {
+    this(paramContainer,false);
+  }
+  public OptsAndParamsPage(OptsParametersContainerI paramContainer, boolean compact)
   {
-    poparent = wsJobParameters;
+    poparent = paramContainer;
+    this.compact=compact;
   }
 
   public static void showUrlPopUp(JComponent invoker, final String finfo,
@@ -631,7 +739,6 @@ public class OptsAndParamsPage
     mnu.show(invoker, x, y);
   }
 
-
   URL linkImageURL = getClass().getResource("/images/link.gif");
 
   Map<String, OptionBox> optSet = new Hashtable<String, OptionBox>();
@@ -658,7 +765,6 @@ public class OptsAndParamsPage
     this.paramSet = paramSet;
   }
 
-
   OptsParametersContainerI poparent;
 
   OptionBox addOption(OptionI opt)
@@ -680,7 +786,7 @@ public class OptsAndParamsPage
     {
       pb = new ParamBox(poparent, arg);
       paramSet.put(arg.getName(), pb);
-//      paramList.add(pb);
+      // paramList.add(pb);
     }
     pb.init();
     // take the defaults from the parameter
@@ -729,5 +835,32 @@ public class OptsAndParamsPage
 
   }
 
+  /**
+   * recover options and parameters from GUI
+   * 
+   * @return
+   */
+  public List<ArgumentI> getCurrentSettings()
+  {
+    List<ArgumentI> argSet = new ArrayList<ArgumentI>();
+    for (OptionBox opts : getOptSet().values())
+    {
+      OptionI opt = opts.getOptionIfEnabled();
+      if (opt != null)
+      {
+        argSet.add(opt);
+      }
+    }
+    for (ParamBox parambox : getParamSet().values())
+    {
+      ParameterI parm = parambox.getParameter();
+      if (parm != null)
+      {
+        argSet.add(parm);
+      }
+    }
+
+    return argSet;
+  }
 
 }
index 2529de9..ca5e8b1 100644 (file)
@@ -637,7 +637,7 @@ public class WsJobParameters extends JPanel implements ItemListener,
             // System.out.println("Setting option "
             // + System.identityHashCode(arg) + ":" + arg.getName()
             // + " with " + arg.getDefaultValue());
-            opanp.selectOption((OptionI) arg, arg.getDefaultValue());
+            opanp.selectOption((OptionI) arg, arg.getValue());
           }
         }
 
@@ -1073,26 +1073,7 @@ public class WsJobParameters extends JPanel implements ItemListener,
 
   public List<ArgumentI> getJobParams()
   {
-    List<ArgumentI> argSet = new ArrayList<ArgumentI>();
-    // recover options and parameters from GUI
-    for (OptionBox opts : opanp.getOptSet().values())
-    {
-      OptionI opt = opts.getOptionIfEnabled();
-      if (opt != null)
-      {
-        argSet.add(opt);
-      }
-    }
-    for (ParamBox parambox : opanp.getParamSet().values())
-    {
-      ParameterI parm = parambox.getParameter();
-      if (parm != null)
-      {
-        argSet.add(parm);
-      }
-    }
-
-    return argSet;
+    return opanp.getCurrentSettings();
   }
 
   String lastParmSet = null;