JAL-2504 allow feature type to be specified for Create Features dialog
[jalview.git] / src / jalview / appletgui / FeatureRenderer.java
index 3f87549..be027ec 100644 (file)
@@ -22,11 +22,12 @@ package jalview.appletgui;
 
 import jalview.api.FeatureColourI;
 import jalview.datamodel.SearchResults;
+import jalview.datamodel.SearchResultsI;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.io.FeaturesFile;
 import jalview.schemes.FeatureColour;
-import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
 
@@ -70,8 +71,8 @@ public class FeatureRenderer extends
    */
   public FeatureRenderer(AlignmentViewport av)
   {
-    super();
-    this.av = av;
+    super(av);
+
   }
 
   static String lastFeatureAdded;
@@ -164,9 +165,20 @@ public class FeatureRenderer extends
 
   }
 
+  /**
+   * Shows a dialog allowing the user to create, or amend or delete, sequence
+   * features.
+   * 
+   * @param sequences
+   * @param features
+   * @param create
+   * @param ap
+   * @param featureType
+   * @return
+   */
   boolean amendFeatures(final SequenceI[] sequences,
-          final SequenceFeature[] features, boolean newFeatures,
-          final AlignmentPanel ap)
+          final SequenceFeature[] features, boolean create,
+          final AlignmentPanel ap, String featureType)
   {
     Panel bigPanel = new Panel(new BorderLayout());
     final TextField name = new TextField(16);
@@ -189,7 +201,7 @@ public class FeatureRenderer extends
 
     // /////////////////////////////////////
     // /MULTIPLE FEATURES AT SELECTED RESIDUE
-    if (!newFeatures && features.length > 1)
+    if (!create && features.length > 1)
     {
       panel = new Panel(new GridLayout(4, 1));
       tmp = new Panel();
@@ -225,7 +237,7 @@ public class FeatureRenderer extends
             start.setText(features[index].getBegin() + "");
             end.setText(features[index].getEnd() + "");
 
-            SearchResults highlight = new SearchResults();
+            SearchResultsI highlight = new SearchResults();
             highlight.addResult(sequences[0], features[index].getBegin(),
                     features[index].getEnd());
 
@@ -235,7 +247,7 @@ public class FeatureRenderer extends
           FeatureColourI col = getFeatureStyle(name.getText());
           if (col == null)
           {
-            Color generatedColour = UserColourScheme
+            Color generatedColour = ColorUtils
                     .createColourFromName(name.getText());
             col = new FeatureColour(generatedColour);
           }
@@ -251,33 +263,36 @@ public class FeatureRenderer extends
 
     tmp = new Panel();
     panel.add(tmp);
-    tmp.add(new Label("Name: ", Label.RIGHT));
+    tmp.add(new Label(MessageManager.getString("label.name:"), Label.RIGHT));
     tmp.add(name);
 
     tmp = new Panel();
     panel.add(tmp);
-    tmp.add(new Label("Group: ", Label.RIGHT));
+    tmp.add(new Label(MessageManager.getString("label.group:"), Label.RIGHT));
     tmp.add(source);
 
     tmp = new Panel();
     panel.add(tmp);
-    tmp.add(new Label("Colour: ", Label.RIGHT));
+    tmp.add(new Label(MessageManager.getString("label.colour"), Label.RIGHT));
     tmp.add(colourPanel);
 
     bigPanel.add(panel, BorderLayout.NORTH);
 
     panel = new Panel();
-    panel.add(new Label("Description: ", Label.RIGHT));
+    panel.add(new Label(MessageManager.getString("label.description:"),
+            Label.RIGHT));
     panel.add(new ScrollPane().add(description));
 
-    if (!newFeatures)
+    if (!create)
     {
       bigPanel.add(panel, BorderLayout.SOUTH);
 
       panel = new Panel();
-      panel.add(new Label(" Start:", Label.RIGHT));
+      panel.add(new Label(MessageManager.getString("label.start"),
+              Label.RIGHT));
       panel.add(start);
-      panel.add(new Label("  End:", Label.RIGHT));
+      panel.add(new Label(MessageManager.getString("label.end"),
+              Label.RIGHT));
       panel.add(end);
       bigPanel.add(panel, BorderLayout.CENTER);
     }
@@ -286,15 +301,22 @@ public class FeatureRenderer extends
       bigPanel.add(panel, BorderLayout.CENTER);
     }
 
-    if (lastFeatureAdded == null)
+    if (featureType != null)
     {
-      if (features[0].type != null)
-      {
-        lastFeatureAdded = features[0].type;
-      }
-      else
+      lastFeatureAdded = featureType;
+    }
+    else
+    {
+      if (lastFeatureAdded == null)
       {
-        lastFeatureAdded = "feature_1";
+        if (features[0].type != null)
+        {
+          lastFeatureAdded = features[0].type;
+        }
+        else
+        {
+          lastFeatureAdded = "feature_1";
+        }
       }
     }
 
@@ -310,7 +332,7 @@ public class FeatureRenderer extends
       }
     }
 
-    String title = newFeatures ? MessageManager
+    String title = create ? MessageManager
             .getString("label.create_new_sequence_features")
             : MessageManager.formatMessage("label.amend_delete_features",
                     new String[] { sequences[0].getName() });
@@ -320,7 +342,7 @@ public class FeatureRenderer extends
 
     dialog.setMainPanel(bigPanel);
 
-    if (newFeatures)
+    if (create)
     {
       name.setText(lastFeatureAdded);
       source.setText(lastFeatureGroupAdded);
@@ -373,9 +395,6 @@ public class FeatureRenderer extends
 
     if (dialog.accept)
     {
-      // This ensures that the last sequence
-      // is refreshed and new features are rendered
-      lastSeq = null;
       lastFeatureAdded = name.getText().trim();
       lastFeatureGroupAdded = source.getText().trim();
       lastDescriptionAdded = description.getText().replace('\n', ' ');
@@ -386,7 +405,7 @@ public class FeatureRenderer extends
       lastFeatureGroupAdded = null;
     }
 
-    if (!newFeatures)
+    if (!create)
     {
 
       SequenceFeature sf = features[featureIndex];