Add features from Popupmenu
authoramwaterhouse <Andrew Waterhouse>
Thu, 12 Oct 2006 16:14:02 +0000 (16:14 +0000)
committeramwaterhouse <Andrew Waterhouse>
Thu, 12 Oct 2006 16:14:02 +0000 (16:14 +0000)
src/jalview/gui/FeatureRenderer.java
src/jalview/gui/Finder.java
src/jalview/gui/PopupMenu.java

index afe29a0..d20fa63 100755 (executable)
@@ -25,6 +25,10 @@ import java.awt.*;
 import java.util.*;\r
 \r
 import java.awt.image.*;\r
+import javax.swing.JComboBox;\r
+import javax.swing.JPanel;\r
+import javax.swing.JLabel;\r
+import javax.swing.JOptionPane;\r
 \r
 \r
 /**\r
@@ -413,17 +417,87 @@ public class FeatureRenderer
     }\r
 \r
 \r
-    public void addNewFeature(String name, Color col, String group)\r
+    static String lastFeatureAdded = "feature_1";\r
+    static String lastSourceAdded = "Jalview";\r
+\r
+    public boolean createNewFeatures(SequenceI[] sequences,\r
+                                  SequenceFeature [] features)\r
     {\r
 \r
-      setColour(name, col);\r
-      if(av.featuresDisplayed==null)\r
-        av.featuresDisplayed = new Hashtable();\r
+      JComboBox name = new JComboBox();\r
+      JComboBox source = new JComboBox();\r
+\r
+      JPanel panel = new JPanel(new GridLayout(2, 2));\r
+      panel.add(new JLabel("New Sequence Feature Name"));\r
+      panel.add(name);\r
+      panel.add(new JLabel("Source:"));\r
+      panel.add(source);\r
+     // name.setPreferredSize(new Dimension(300, 20));\r
+      name.setEditable(true);\r
+      source.setEditable(true);\r
+\r
+      Enumeration en;\r
+      if (av.featuresDisplayed != null)\r
+      {\r
+        en = av.featuresDisplayed.keys();\r
+        while (en.hasMoreElements())\r
+        {\r
+          name.addItem(en.nextElement().toString());\r
+        }\r
+      }\r
+\r
+      if (featureGroups != null)\r
+      {\r
+        en = featureGroups.keys();\r
+        while (en.hasMoreElements())\r
+        {\r
+          source.addItem(en.nextElement().toString());\r
+        }\r
+      }\r
+\r
+      name.setSelectedItem(lastFeatureAdded);\r
+      source.setSelectedItem(lastSourceAdded);\r
 \r
-      if(group == null)\r
-        group = "NOGROUP";\r
+      int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,\r
+          panel, "Create New Sequence Feature(s)",\r
+          JOptionPane.OK_CANCEL_OPTION);\r
+\r
+\r
+      if(reply==JOptionPane.OK_OPTION\r
+         && name.getSelectedItem()!=null\r
+         && source.getSelectedItem()!=null)\r
+      {\r
+        lastFeatureAdded = name.getSelectedItem().toString();\r
+        lastSourceAdded = source.getSelectedItem().toString();\r
+        for(int i=0; i<sequences.length; i++)\r
+        {\r
+          features[i].type = lastFeatureAdded;\r
+          features[i].featureGroup = lastSourceAdded;\r
+          sequences[i].addSequenceFeature(features[i]);\r
+        }\r
+\r
+        if (av.featuresDisplayed == null)\r
+          av.featuresDisplayed = new Hashtable();\r
+\r
+        if(featureGroups==null)\r
+          featureGroups = new Hashtable();\r
+\r
+        featureGroups.put(lastSourceAdded, new Boolean(true));\r
+\r
+        Color col = getColour(lastFeatureAdded);\r
+        if(col==null)\r
+        {\r
+          col = new Color(60, 160, 115);\r
+          setColour(lastFeatureAdded, col);\r
+        }\r
+\r
+        av.featuresDisplayed.put(lastSourceAdded, new Integer(col.getRGB()));\r
+        findAllFeatures();\r
+        return true;\r
+      }\r
+      else\r
+        return false;\r
 \r
-      av.featuresDisplayed.put(name, new Integer(col.getRGB()));\r
     }\r
 \r
     public void setColour(String featureType, Color col)\r
index e8c16d2..8697552 100755 (executable)
@@ -114,34 +114,29 @@ public class Finder extends GFinder
         panel.add(label, BorderLayout.NORTH);\r
         panel.add(textinput, BorderLayout.SOUTH);\r
 \r
-         int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,\r
-            panel, "New Sequence Feature Name",\r
-          JOptionPane.OK_CANCEL_OPTION );\r
 \r
-         if(reply != JOptionPane.OK_OPTION)\r
-           return;\r
+        SequenceI [] seqs = new SequenceI[searchResults.getSize()];\r
+        SequenceFeature [] features = new SequenceFeature[searchResults.getSize()];\r
+\r
 \r
         for (int i = 0; i < searchResults.getSize(); i ++ )\r
         {\r
-            SequenceI seq = searchResults.getResultSequence(i);\r
+            seqs[i] = searchResults.getResultSequence(i).getDatasetSequence();\r
 \r
-            SequenceFeature sf = new SequenceFeature(textinput.getText(),\r
+            features[i] = new SequenceFeature(textinput.getText(),\r
                 "Search Results", null,\r
                 searchResults.getResultStart(i),\r
-               searchResults.getResultEnd(i),\r
+                searchResults.getResultEnd(i),\r
                "Search Results");\r
-\r
-            ap.seqPanel.seqCanvas.getFeatureRenderer().addNewFeature(\r
-                textinput.getText(), new Color(60,160,115),\r
-                    "Search Results");\r
-\r
-            seq.getDatasetSequence().addSequenceFeature(sf);\r
         }\r
 \r
-        ap.seqPanel.seqCanvas.getFeatureRenderer().findAllFeatures();\r
-        ap.alignFrame.showSeqFeatures.setSelected(true);\r
-        av.setShowSequenceFeatures(true);\r
-        ap.highlightSearchResults(null);\r
+        if( ap.seqPanel.seqCanvas.getFeatureRenderer()\r
+            .createNewFeatures(seqs, features))\r
+        {\r
+          ap.alignFrame.showSeqFeatures.setSelected(true);\r
+          av.setShowSequenceFeatures(true);\r
+          ap.highlightSearchResults(null);\r
+        }\r
     }\r
 \r
     /**\r
index 88ea11b..c673af1 100755 (executable)
@@ -82,6 +82,7 @@ public class PopupMenu extends JPopupMenu
   JMenuItem enterPDB = new JMenuItem();\r
   JMenuItem discoverPDB = new JMenuItem();\r
   JMenu outputMenu = new JMenu();\r
+  JMenuItem sequenceFeature = new JMenuItem();\r
 \r
   /**\r
      * Creates a new PopupMenu object.\r
@@ -504,12 +505,22 @@ public class PopupMenu extends JPopupMenu
       }\r
     });\r
     outputMenu.setText("Output to Textbox...");\r
+    sequenceFeature.setText("Create Sequence Feature");\r
+    sequenceFeature.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent e)\r
+      {\r
+        sequenceFeature_actionPerformed(e);\r
+      }\r
+    });\r
     add(groupMenu);\r
 \r
     add(sequenceMenu);\r
     groupMenu.add(editMenu);\r
     groupMenu.add(outputMenu);\r
     groupMenu.addSeparator();\r
+    groupMenu.add(sequenceFeature);\r
+    groupMenu.addSeparator();\r
     groupMenu.add(groupName);\r
     groupMenu.add(unGroupMenuItem);\r
         groupMenu.add(colourMenu);\r
@@ -842,6 +853,7 @@ public class PopupMenu extends JPopupMenu
 \r
          sg.cs = udc;\r
        }\r
+       refresh();\r
      }\r
     /**\r
      * DOCUMENT ME!\r
@@ -1309,4 +1321,37 @@ public class PopupMenu extends JPopupMenu
     new jalview.io.DBRefFetcher(\r
              ap.av.getAlignment(), ap.alignFrame).fetchDBRefs(false);\r
   }\r
+\r
+  public void sequenceFeature_actionPerformed(ActionEvent e)\r
+  {\r
+    SequenceGroup sg = ap.av.getSelectionGroup();\r
+    if(sg==null)\r
+      return;\r
+\r
+    int gSize= sg.getSize(false);\r
+    SequenceI [] seqs = new SequenceI[gSize];\r
+    SequenceFeature [] features = new SequenceFeature[gSize];\r
+\r
+    for (int i = 0; i < gSize; i++)\r
+    {\r
+      seqs[i] = sg.getSequenceAt(i).getDatasetSequence();\r
+      int start = sg.getSequenceAt(i).findPosition(sg.getStartRes());\r
+      int end = sg.findEndRes(sg.getSequenceAt(i));\r
+\r
+      features[i] = new SequenceFeature(\r
+          "",\r
+          "Search Results", null,\r
+          start,\r
+          end,\r
+          "Search Results");\r
+    }\r
+\r
+    if (ap.seqPanel.seqCanvas.getFeatureRenderer()\r
+        .createNewFeatures(seqs, features))\r
+    {\r
+      ap.alignFrame.showSeqFeatures.setSelected(true);\r
+      ap.av.setShowSequenceFeatures(true);\r
+      ap.highlightSearchResults(null);\r
+    }\r
+  }\r
 }\r