JAL-1355 (basic i18n support)
[jalview.git] / src / jalview / gui / OptsAndParamsPage.java
index 106c3b7..4b96cb2 100644 (file)
@@ -1,22 +1,23 @@
-/*******************************************************************************
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
- *
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
+ * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * 
  * This file is part of Jalview.
- *
+ * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- *
+ *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
- *
+ * 
  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- *******************************************************************************/
+ */
 package jalview.gui;
 
+import jalview.util.MessageManager;
 import jalview.ws.params.ArgumentI;
 import jalview.ws.params.OptionI;
 import jalview.ws.params.ParameterI;
@@ -109,7 +110,7 @@ public class OptsAndParamsPage
 
         enabled.setToolTipText("<html>"
                 + JvSwingUtils
-                        .wrapTooltip(((desc == null) ? "see further details by right-clicking"
+                        .wrapTooltip(((desc == null || desc.trim().length()==0) ? "see further details by right-clicking"
                                 : desc)
                                 + "<br><img src=\"" + linkImageURL + "\"/>")
                 + "</html>");
@@ -117,7 +118,7 @@ public class OptsAndParamsPage
       }
       else
       {
-        if (desc != null)
+        if (desc != null && desc.trim().length()>0)
         {
           enabled.setToolTipText("<html>"
                   + JvSwingUtils.wrapTooltip(opt.getDescription())
@@ -125,14 +126,14 @@ public class OptsAndParamsPage
         }
       }
       add(enabled, BorderLayout.NORTH);
+      for (Object str : opt.getPossibleValues())
+      {
+        val.addItem((String) str);
+      }
+      val.setSelectedItem((String) opt.getValue());
       if (opt.getPossibleValues().size() > 1)
       {
         setLayout(new GridLayout(1, 2));
-        for (Object str : opt.getPossibleValues())
-        {
-          val.addItem((String) str);
-        }
-        val.setSelectedItem((String) opt.getValue());
         val.addActionListener(this);
         add(val, BorderLayout.SOUTH);
       }
@@ -169,7 +170,8 @@ public class OptsAndParamsPage
       }
       else
       {
-        notmod &= initVal == null;
+        notmod &= (initVal != null) ? initVal.equals(val.getSelectedItem())
+                : val.getSelectedItem() != initVal;
       }
       poparent.argSetModified(this, !notmod);
     }
@@ -181,11 +183,24 @@ public class OptsAndParamsPage
         return null;
       }
       OptionI opt = option.copy();
-
+      if (opt.getPossibleValues() != null
+              && opt.getPossibleValues().size() == 1)
+      {
+        // Hack to make sure the default value for an enabled option with only
+        // one value is actually returned
+        opt.setValue(opt.getPossibleValues().get(0));
+      }
       if (val.getSelectedItem() != null)
       {
         opt.setValue((String) val.getSelectedItem());
       }
+      else
+      {
+        if (option.getValue() != null)
+        {
+          opt.setValue(option.getValue());
+        }
+      }
       return opt;
     }
 
@@ -221,10 +236,11 @@ public class OptsAndParamsPage
 
     }
 
-    public void resetToDefault()
+
+    public void resetToDefault(boolean setDefaultParams)
     {
       enabled.setSelected(false);
-      if (option.isRequired())
+      if (option.isRequired() || (setDefaultParams && option.getValue()!=null))
       {
         // Apply default value
         selectOption(option, option.getValue());
@@ -241,10 +257,10 @@ public class OptsAndParamsPage
       }
       else
       {
-        initVal = (initEnabled) ? option.getValue() : null;
+        initVal = (initEnabled) ? (String) val.getSelectedItem() : null;
       }
     }
-
+    
   }
 
   public class ParamBox extends JPanel implements ChangeListener,
@@ -301,7 +317,7 @@ public class OptsAndParamsPage
           choice = true;
         }
       }
-      
+
       if (!compact)
       {
         makeExpanderParam(parm);
@@ -315,9 +331,9 @@ public class OptsAndParamsPage
 
     private void makeCompactParam(ParameterI parm)
     {
-      setLayout(new MigLayout("","[][grow]"));
+      setLayout(new MigLayout("", "[][grow]"));
 
-      String ttipText=null;
+      String ttipText = null;
 
       controlPanel.setLayout(new BorderLayout());
 
@@ -326,14 +342,16 @@ public class OptsAndParamsPage
       {
         // 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
+                        .wrapTooltip(parm.getDescription()
+                                + (finfo != null ? "<br><img src=\""
+                                        + linkImageURL
+                                        + "\"/> Right click for further information."
+                                        : "")) + "</html>");
       }
-      
-      JvSwingUtils.mgAddtoLayout(this, ttipText, new JLabel(parm.getName()),controlPanel, "");
+
+      JvSwingUtils.mgAddtoLayout(this, ttipText,
+              new JLabel(parm.getName()), controlPanel, "");
       updateControls(parm);
       validate();
     }
@@ -566,21 +584,21 @@ public class OptsAndParamsPage
           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)
-                {
+              if (valueField.getText().trim().length() > 0)
+              {
                 actionPerformed(null);
-                }
+              }
             }
-            
+
             @Override
             public void keyPressed(KeyEvent e)
             {
@@ -651,6 +669,8 @@ public class OptsAndParamsPage
           {
           }
           ;
+          // update value field to reflect any bound checking we performed.
+          valueField.setText("" + iVal);
           if (validator.getMin() != null && validator.getMax() != null)
           {
             slider.getModel().setRangeProperties(iVal, 1,
@@ -669,6 +689,7 @@ public class OptsAndParamsPage
           fVal = 0f;
           try
           {
+            valueField.setText(valueField.getText().trim());
             fVal = Float.valueOf(valueField.getText());
             if (validator.getMin() != null
                     && validator.getMin().floatValue() > fVal)
@@ -676,6 +697,8 @@ public class OptsAndParamsPage
               fVal = validator.getMin().floatValue();
               // TODO: provide visual indication that hard limit was reached for
               // this parameter
+              // update value field to reflect any bound checking we performed.
+              valueField.setText("" + fVal);
             }
             if (validator.getMax() != null
                     && validator.getMax().floatValue() < fVal)
@@ -683,6 +706,8 @@ public class OptsAndParamsPage
               fVal = validator.getMax().floatValue();
               // TODO: provide visual indication that hard limit was reached for
               // this parameter
+              // update value field to reflect any bound checking we performed.
+              valueField.setText("" + fVal);
             }
           } catch (Exception e)
           {
@@ -728,12 +753,14 @@ public class OptsAndParamsPage
 
   public OptsAndParamsPage(OptsParametersContainerI paramContainer)
   {
-    this(paramContainer,false);
+    this(paramContainer, false);
   }
-  public OptsAndParamsPage(OptsParametersContainerI paramContainer, boolean compact)
+
+  public OptsAndParamsPage(OptsParametersContainerI paramContainer,
+          boolean compact)
   {
     poparent = paramContainer;
-    this.compact=compact;
+    this.compact = compact;
   }
 
   public static void showUrlPopUp(JComponent invoker, final String finfo,
@@ -741,7 +768,7 @@ public class OptsAndParamsPage
   {
 
     JPopupMenu mnu = new JPopupMenu();
-    JMenuItem mitem = new JMenuItem("View " + finfo);
+    JMenuItem mitem = new JMenuItem(MessageManager.formatMessage("label.view_params", new String[]{finfo}));
     mitem.addActionListener(new ActionListener()
     {
 
@@ -758,9 +785,9 @@ public class OptsAndParamsPage
 
   URL linkImageURL = getClass().getResource("/images/link.gif");
 
-  Map<String, OptionBox> optSet = new Hashtable<String, OptionBox>();
+  Map<String, OptionBox> optSet = new java.util.LinkedHashMap<String, OptionBox>();
 
-  Map<String, ParamBox> paramSet = new Hashtable<String, ParamBox>();
+  Map<String, ParamBox> paramSet = new java.util.LinkedHashMap<String, ParamBox>();
 
   public Map<String, OptionBox> getOptSet()
   {