JAL-1010 write validated value back to text field to ensure parameter value is always...
[jalview.git] / src / jalview / gui / OptsAndParamsPage.java
index 106c3b7..0f6126c 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************
  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  *
  * This file is part of Jalview.
  *
@@ -125,14 +125,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 +169,7 @@ public class OptsAndParamsPage
       }
       else
       {
-        notmod &= initVal == null;
+        notmod &= (initVal!=null) ? initVal.equals(val.getSelectedItem()) : val.getSelectedItem()!=initVal;
       }
       poparent.argSetModified(this, !notmod);
     }
@@ -181,10 +181,19 @@ 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;
     }
@@ -241,7 +250,7 @@ public class OptsAndParamsPage
       }
       else
       {
-        initVal = (initEnabled) ? option.getValue() : null;
+        initVal = (initEnabled) ? (String)val.getSelectedItem() : null;
       }
     }
 
@@ -651,6 +660,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 +680,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 +688,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 +697,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)
           {