added mechanism to initiate DAS feature fetching programmatically from jalview.bin...
[jalview.git] / src / jalview / appletgui / APopupMenu.java
index a103073..803f323 100755 (executable)
@@ -28,6 +28,7 @@ import jalview.analysis.*;
 import jalview.commands.*;\r
 import jalview.datamodel.*;\r
 import jalview.schemes.*;\r
+import jalview.io.AppletFormatAdapter;\r
 \r
 public class APopupMenu\r
     extends java.awt.PopupMenu implements ActionListener, ItemListener\r
@@ -68,6 +69,8 @@ public class APopupMenu
   MenuItem hideSeqs = new MenuItem();\r
   MenuItem repGroup = new MenuItem();\r
   MenuItem sequenceName = new MenuItem("Edit Name/Description");\r
+  MenuItem sequenceFeature = new MenuItem("Create Sequence Feature");\r
+  MenuItem editSequence = new MenuItem("Edit Sequence");\r
 \r
   Sequence seq;\r
   MenuItem revealAll = new MenuItem();\r
@@ -302,12 +305,12 @@ public class APopupMenu
           getGroup().getDescription(),\r
           "       Group Name",\r
           "Group Description",\r
-          ap,\r
-          "Edit Group Name / Description");\r
+          ap.alignFrame,\r
+          "Edit Group Name / Description",\r
+          500,100, true);\r
 \r
       if (dialog.accept)\r
       {\r
-\r
         getGroup().setName(dialog.getName().replace(' ', '_'));\r
         getGroup().setDescription(dialog.getDescription());\r
       }\r
@@ -321,6 +324,42 @@ public class APopupMenu
     {\r
       ap.alignFrame.cut_actionPerformed();\r
     }\r
+    else if(source == editSequence)\r
+    {\r
+      SequenceGroup sg = ap.av.getSelectionGroup();\r
+\r
+      if(sg!=null)\r
+      {\r
+        if (seq == null)\r
+          seq = (Sequence) sg.getSequenceAt(0);\r
+\r
+        EditNameDialog dialog = new EditNameDialog(seq.getSequenceAsString(\r
+            sg.getStartRes(),\r
+            sg.getEndRes() + 1),\r
+                                                   null,\r
+                                                   "Edit Sequence ",\r
+                                                   null,\r
+\r
+                                                   ap.alignFrame,\r
+                                                   "Edit Sequence",\r
+                                                   500, 100, true);\r
+\r
+        if (dialog.accept)\r
+        {\r
+          EditCommand editCommand = new EditCommand(\r
+              "Edit Sequences", EditCommand.REPLACE,\r
+              dialog.getName().replace(' ', ap.av.getGapCharacter()),\r
+              sg.getSequencesAsArray(ap.av.hiddenRepSequences),\r
+              sg.getStartRes(), sg.getEndRes()+1, ap.av.alignment\r
+              );\r
+\r
+          ap.alignFrame.addHistoryItem(editCommand);\r
+\r
+          ap.av.firePropertyChange("alignment", null,\r
+                                 ap.av.getAlignment().getSequences());\r
+        }\r
+      }\r
+    }\r
     else if (source == toUpper || source == toLower || source == toggleCase)\r
     {\r
       SequenceGroup sg = ap.av.getSelectionGroup();\r
@@ -398,6 +437,35 @@ public class APopupMenu
 \r
       }\r
     }\r
+    else if(source == sequenceFeature)\r
+    {\r
+      SequenceGroup sg = ap.av.getSelectionGroup();\r
+      if (sg == null)\r
+      {\r
+        return;\r
+      }\r
+\r
+      int gSize = sg.getSize();\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);\r
+        int start = sg.getSequenceAt(i).findPosition(sg.getStartRes());\r
+        int end = sg.findEndRes(sg.getSequenceAt(i));\r
+        features[i] = new SequenceFeature(null, null, null, start, end,\r
+                                          "Jalview");\r
+      }\r
+\r
+      if (ap.seqPanel.seqCanvas.getFeatureRenderer()\r
+          .amendFeatures(seqs, features, true, ap))\r
+      {\r
+        ap.alignFrame.sequenceFeatures.setState(true);\r
+        ap.av.showSequenceFeatures(true);\r
+        ap.highlightSearchResults(null);\r
+      }\r
+    }\r
     else\r
     {\r
       outputText(evt);\r
@@ -429,8 +497,9 @@ public class APopupMenu
         seq.getDescription(),\r
         "       Sequence Name",\r
         "Sequence Description",\r
-        ap,\r
-        "Edit Sequence Name / Description");\r
+        ap.alignFrame,\r
+        "Edit Sequence Name / Description",\r
+        500,100, true);\r
 \r
     if (dialog.accept)\r
     {\r
@@ -442,12 +511,33 @@ public class APopupMenu
 \r
   void addPDB()\r
   {\r
-    CutAndPasteTransfer cap = new CutAndPasteTransfer(true, ap.alignFrame);\r
-    cap.setText("Paste your PDB file here.");\r
-    cap.setPDBImport(seq);\r
-    Frame frame = new Frame();\r
-    frame.add(cap);\r
-    jalview.bin.JalviewLite.addFrame(frame, "Paste PDB file ", 400, 300);\r
+    if(seq.getPDBId()!=null)\r
+    {\r
+      PDBEntry entry = (PDBEntry)seq.getPDBId().firstElement();\r
+\r
+      if ( ap.av.applet.jmolAvailable )\r
+       new jalview.appletgui.AppletJmol(entry,\r
+                                        new Sequence[]{seq},\r
+                                        null,\r
+                                        ap,\r
+                                        AppletFormatAdapter.URL);\r
+     else\r
+       new MCview.AppletPDBViewer(entry,\r
+                                  new Sequence[]{seq},\r
+                                  null,\r
+                                  ap,\r
+                                  AppletFormatAdapter.URL);\r
+\r
+    }\r
+    else\r
+    {\r
+      CutAndPasteTransfer cap = new CutAndPasteTransfer(true, ap.alignFrame);\r
+      cap.setText("Paste your PDB file here.");\r
+      cap.setPDBImport(seq);\r
+      Frame frame = new Frame();\r
+      frame.add(cap);\r
+      jalview.bin.JalviewLite.addFrame(frame, "Paste PDB file ", 400, 300);\r
+    }\r
   }\r
 \r
   private void jbInit()\r
@@ -455,6 +545,7 @@ public class APopupMenu
   {\r
     groupMenu.setLabel("Group");\r
     groupMenu.setLabel("Selection");\r
+    sequenceFeature.addActionListener(this);\r
 \r
     editGroupName.addActionListener(this);\r
     unGroupMenuItem.setLabel("Remove Group");\r
@@ -488,7 +579,9 @@ public class APopupMenu
     groupMenu.add(editGroupName);\r
     groupMenu.add(editMenu);\r
     groupMenu.add(outputmenu);\r
+    groupMenu.add(sequenceFeature);\r
     groupMenu.add(menu1);\r
+\r
     colourMenu.add(noColourmenuItem);\r
     colourMenu.add(clustalColour);\r
     colourMenu.add(BLOSUM62Colour);\r
@@ -539,6 +632,10 @@ public class APopupMenu
     copy.addActionListener(this);\r
     editMenu.add(cut);\r
     cut.addActionListener(this);\r
+\r
+    editMenu.add(editSequence);\r
+    editSequence.addActionListener(this);\r
+\r
     editMenu.add(toUpper);\r
     toUpper.addActionListener(this);\r
     editMenu.add(toLower);\r