JAL-2504 use (and update) defaults for new feature only if not supplied
[jalview.git] / src / jalview / gui / FeatureRenderer.java
index 0921a48..2f12eef 100644 (file)
@@ -66,6 +66,14 @@ import javax.swing.event.DocumentListener;
 public class FeatureRenderer extends
         jalview.renderer.seqfeatures.FeatureRenderer
 {
+  /*
+   * defaults for creating a new feature are the last created
+   * feature type and group
+   */
+  static String lastFeatureAdded = "feature_1";
+
+  static String lastFeatureGroupAdded = "Jalview";
+
   Color resBoxColour;
 
   AlignmentPanel ap;
@@ -87,16 +95,6 @@ public class FeatureRenderer extends
     }
   }
 
-  // // /////////////
-  // // Feature Editing Dialog
-  // // Will be refactored in next release.
-
-  static String lastFeatureAdded;
-
-  static String lastFeatureGroupAdded;
-
-  static String lastDescriptionAdded;
-
   FeatureColourI oldcol, fcol;
 
   int featureIndex = 0;
@@ -109,27 +107,25 @@ public class FeatureRenderer extends
    * <li>Create sequence feature from pop-up menu on selected region</li>
    * <li>Create features for pattern matches from Find</li>
    * </ul>
+   * If the supplied feature type is null, show (and update on confirm) the type
+   * and group of the last new feature created (with initial defaults of
+   * "feature_1" and "Jalview").
    * 
    * @param sequences
    *          the sequences features are to be created on (if creating
    *          features), or a single sequence (if amending features)
    * @param features
    *          the current features at the position (if amending), or template
-   *          new features with start/end position set (if creating)
+   *          new feature(s) with start/end position set (if creating)
    * @param create
    *          true to create features, false to amend or delete
-   * @param featureType
-   *          the feature type to set on new features; if null, defaults to the
-   *          type of the last new feature created if any, failing that to
-   *          "feature_1"
    * @param alignPanel
    * @return
    */
   protected boolean amendFeatures(final List<SequenceI> sequences,
           final List<SequenceFeature> features, boolean create,
-          final AlignmentPanel alignPanel, String featureType)
+          final AlignmentPanel alignPanel)
   {
-
     featureIndex = 0;
 
     final JPanel mainPanel = new JPanel(new BorderLayout());
@@ -344,48 +340,18 @@ public class FeatureRenderer extends
       mainPanel.add(descriptionPanel, BorderLayout.CENTER);
     }
 
+    /*
+     * default feature type and group to that of the first feature supplied,
+     * or to the last feature created if not supplied (null value) 
+     */
     SequenceFeature firstFeature = features.get(0);
-    if (featureType != null)
-    {
-      lastFeatureAdded = featureType;
-    }
-    else
-    {
-      if (lastFeatureAdded == null)
-      {
-        if (firstFeature.type != null)
-        {
-          lastFeatureAdded = firstFeature.type;
-        }
-        else
-        {
-          lastFeatureAdded = "feature_1";
-        }
-      }
-    }
-
-    if (lastFeatureGroupAdded == null)
-    {
-      if (firstFeature.featureGroup != null)
-      {
-        lastFeatureGroupAdded = firstFeature.featureGroup;
-      }
-      else
-      {
-        lastFeatureGroupAdded = "Jalview";
-      }
-    }
-
-    if (create)
-    {
-      name.setText(lastFeatureAdded);
-      group.setText(lastFeatureGroupAdded);
-    }
-    else
-    {
-      name.setText(firstFeature.getType());
-      group.setText(firstFeature.getFeatureGroup());
-    }
+    boolean useLastDefaults = firstFeature.getType() == null;
+    final String featureType = useLastDefaults ? lastFeatureAdded
+            : firstFeature.getType();
+    final String featureGroup = useLastDefaults ? lastFeatureGroupAdded
+            : firstFeature.getFeatureGroup();
+    name.setText(featureType);
+    group.setText(featureGroup);
 
     start.setValue(new Integer(firstFeature.getBegin()));
     end.setValue(new Integer(firstFeature.getEnd()));
@@ -422,13 +388,18 @@ public class FeatureRenderer extends
 
     if (reply == JvOptionPane.OK_OPTION && name.getText().length() > 0)
     {
-      lastFeatureAdded = name.getText().trim();
-      lastFeatureGroupAdded = group.getText().trim();
-      lastDescriptionAdded = description.getText().replaceAll("\n", " ");
-      // TODO: determine if the null feature group is valid
-      if (lastFeatureGroupAdded.length() < 1)
+      /*
+       * update default values only if creating using default values
+       */
+      if (useLastDefaults)
       {
-        lastFeatureGroupAdded = null;
+        lastFeatureAdded = name.getText().trim();
+        lastFeatureGroupAdded = group.getText().trim();
+        // TODO: determine if the null feature group is valid
+        if (lastFeatureGroupAdded.length() < 1)
+        {
+          lastFeatureGroupAdded = null;
+        }
       }
     }
 
@@ -449,13 +420,14 @@ public class FeatureRenderer extends
       {
         /*
          * YES_OPTION corresponds to the Amend button
+         * need to refresh Feature Settings if type, group or colour changed
          */
-        boolean refreshSettings = (!lastFeatureAdded.equals(sf.type) || !lastFeatureGroupAdded
+        sf.type = name.getText().trim();
+        sf.featureGroup = group.getText().trim();
+        sf.description = description.getText().replaceAll("\n", " ");
+        boolean refreshSettings = (!featureType.equals(sf.type) || !featureGroup
                 .equals(sf.featureGroup));
         refreshSettings |= (fcol != oldcol);
-        sf.type = lastFeatureAdded;
-        sf.featureGroup = lastFeatureGroupAdded;
-        sf.description = lastDescriptionAdded;
 
         setColour(sf.type, fcol);
 
@@ -482,10 +454,10 @@ public class FeatureRenderer extends
         for (int i = 0; i < sequences.size(); i++)
         {
           SequenceFeature sf = features.get(i);
-          sf.type = lastFeatureAdded;
+          sf.type = name.getText().trim();
           // fix for JAL-1538 - always set feature group here
-          sf.featureGroup = lastFeatureGroupAdded;
-          sf.description = lastDescriptionAdded;
+          sf.featureGroup = group.getText().trim();
+          sf.description = description.getText().replaceAll("\n", " ");
           sequences.get(i).addSequenceFeature(sf);
           ffile.parseDescriptionHTML(sf, false);
         }