Put alignmentProperties in scrollpane
[jalview.git] / src / jalview / gui / PopupMenu.java
index f1a38f5..64339b3 100755 (executable)
@@ -82,6 +82,11 @@ public class PopupMenu
   JMenuItem sequenceFeature = new JMenuItem();\r
   JMenuItem textColour = new JMenuItem();\r
   JMenu jMenu1 = new JMenu();\r
+  JMenu structureMenu = new JMenu();\r
+  JMenu viewStructureMenu = new JMenu();\r
+ // JMenu colStructureMenu = new JMenu();\r
+  JMenuItem editSequence = new JMenuItem();\r
+ // JMenuItem annotationMenuItem = new JMenuItem();\r
 \r
   /**\r
    * Creates a new PopupMenu object.\r
@@ -155,17 +160,56 @@ public class PopupMenu
           final PDBEntry pdb = (PDBEntry) e.nextElement();\r
 \r
           menuItem = new JMenuItem();\r
-          menuItem.setText("View PDB entry: " + pdb.getId());\r
+          menuItem.setText(pdb.getId());\r
           menuItem.addActionListener(new java.awt.event.ActionListener()\r
           {\r
             public void actionPerformed(ActionEvent e)\r
             {\r
-              new PDBViewer(pdb, sequence, ap.seqPanel.seqCanvas);\r
+              Vector seqs = new Vector();\r
+              for (int i = 0; i < ap.av.alignment.getHeight(); i++)\r
+              {\r
+                Vector pdbs = ap.av.alignment.getSequenceAt(i).getDatasetSequence().getPDBId();\r
+                if(pdbs==null)\r
+                  continue;\r
+\r
+                for(int p=0; p<pdbs.size(); p++)\r
+                {\r
+                  PDBEntry p1 = (PDBEntry)pdbs.elementAt(p);\r
+                  if(p1.getId().equals(pdb.getId()))\r
+                  {\r
+                    if (!seqs.contains(ap.av.alignment.getSequenceAt(i)))\r
+                        seqs.addElement(ap.av.alignment.getSequenceAt(i));\r
+\r
+                      continue;\r
+                  }\r
+                }\r
+              }\r
+\r
+              SequenceI [] seqs2 = new SequenceI[seqs.size()];\r
+              seqs.toArray(seqs2);\r
+\r
+              new AppJMol(pdb, seqs2, ap);\r
+            }\r
+          });\r
+          viewStructureMenu.add(menuItem);\r
+\r
+       /*   menuItem = new JMenuItem();\r
+          menuItem.setText(pdb.getId());\r
+          menuItem.addActionListener(new java.awt.event.ActionListener()\r
+          {\r
+            public void actionPerformed(ActionEvent e)\r
+            {\r
+              colourByStructure(pdb.getId());\r
             }\r
           });\r
-          sequenceMenu.add(menuItem);\r
+          colStructureMenu.add(menuItem);*/\r
         }\r
       }\r
+      else\r
+      {\r
+        structureMenu.remove(viewStructureMenu);\r
+       // structureMenu.remove(colStructureMenu);\r
+      }\r
 \r
       menuItem = new JMenuItem("Hide Sequences");\r
       menuItem.addActionListener(new java.awt.event.ActionListener()\r
@@ -309,7 +353,7 @@ public class PopupMenu
     if (seq == null)\r
     {\r
       sequenceMenu.setVisible(false);\r
-      pdbMenu.setVisible(false);\r
+      structureMenu.setVisible(false);\r
     }\r
 \r
     if (links != null && links.size() > 0)\r
@@ -526,15 +570,35 @@ public class PopupMenu
       }\r
     });\r
     jMenu1.setText("Group");\r
+    structureMenu.setText("Structure");\r
+    viewStructureMenu.setText("View Structure");\r
+  //  colStructureMenu.setText("Colour By Structure");\r
+    editSequence.setText("Edit Sequence...");\r
+    editSequence.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent actionEvent)\r
+      {\r
+        editSequence_actionPerformed(actionEvent);\r
+      }\r
+    });\r
+   /* annotationMenuItem.setText("By Annotation");\r
+    annotationMenuItem.addActionListener(new ActionListener()\r
+    {\r
+      public void actionPerformed(ActionEvent actionEvent)\r
+      {\r
+        annotationMenuItem_actionPerformed(actionEvent);\r
+      }\r
+    });*/\r
+\r
     add(groupMenu);\r
 \r
     add(sequenceMenu);\r
+    this.add(structureMenu);\r
     groupMenu.add(editMenu);\r
     groupMenu.add(outputMenu);\r
     groupMenu.add(sequenceFeature);\r
     groupMenu.add(jMenu1);\r
     sequenceMenu.add(sequenceName);\r
-    sequenceMenu.add(pdbMenu);\r
     colourMenu.add(textColour);\r
     colourMenu.add(noColourmenuItem);\r
     colourMenu.add(clustalColour);\r
@@ -573,8 +637,10 @@ public class PopupMenu
     colourMenu.addSeparator();\r
     colourMenu.add(abovePIDColour);\r
     colourMenu.add(conservationMenuItem);\r
+    //colourMenu.add(annotationMenuItem);\r
     editMenu.add(copy);\r
     editMenu.add(cut);\r
+    editMenu.add(editSequence);\r
     editMenu.add(upperCase);\r
     editMenu.add(lowerCase);\r
     editMenu.add(toggle);\r
@@ -588,6 +654,9 @@ public class PopupMenu
     jMenu1.add(showText);\r
     jMenu1.add(showColourText);\r
     jMenu1.add(outline);\r
+    structureMenu.add(pdbMenu);\r
+    structureMenu.add(viewStructureMenu);\r
+   // structureMenu.add(colStructureMenu);\r
     noColourmenuItem.setText("None");\r
     noColourmenuItem.addActionListener(new java.awt.event.ActionListener()\r
     {\r
@@ -708,10 +777,7 @@ public class PopupMenu
    */\r
   void refresh()\r
   {\r
-    if (ap.overviewPanel != null)\r
-    {\r
-      ap.overviewPanel.updateOverviewImage();\r
-    }\r
+    ap.paintAlignment(true);\r
 \r
     PaintRefresher.Refresh(this, ap.av.getSequenceSetId());\r
   }\r
@@ -958,6 +1024,23 @@ public class PopupMenu
     refresh();\r
   }\r
 \r
+  public void annotationMenuItem_actionPerformed(ActionEvent actionEvent)\r
+  {\r
+    SequenceGroup sg = getGroup();\r
+    if (sg == null)\r
+    {\r
+      return;\r
+    }\r
+\r
+    AnnotationColourGradient acg = new AnnotationColourGradient(\r
+        sequence.getAnnotation()[0], null, AnnotationColourGradient.NO_THRESHOLD);\r
+\r
+    acg.predefinedColours = true;\r
+    sg.cs = acg;\r
+\r
+    refresh();\r
+  }\r
+\r
   /**\r
    * DOCUMENT ME!\r
    *\r
@@ -1028,7 +1111,7 @@ public class PopupMenu
       }\r
 \r
       sequence.setName(dialog.getName().replace(' ', '_'));\r
-      ap.repaint();\r
+      ap.paintAlignment(false);\r
     }\r
 \r
     sequence.setDescription(dialog.getDescription());\r
@@ -1169,48 +1252,11 @@ public class PopupMenu
   {\r
     Object source = e.getSource();\r
     SequenceGroup sg = ap.av.getSelectionGroup();\r
-    Vector regions = new Vector();\r
+\r
     if (sg != null)\r
     {\r
-      int start = sg.getStartRes();\r
-      int end = sg.getEndRes() + 1;\r
-\r
-      do\r
-      {\r
-        if (ap.av.hasHiddenColumns)\r
-        {\r
-          if (start == 0)\r
-          {\r
-            start = ap.av.colSel.adjustForHiddenColumns(start);\r
-          }\r
-\r
-          end = ap.av.colSel.getHiddenBoundaryRight(start);\r
-          if (start == end)\r
-          {\r
-            end = sg.getEndRes() + 1;\r
-          }\r
-          if (end > sg.getEndRes())\r
-          {\r
-            end = sg.getEndRes() + 1;\r
-          }\r
-        }\r
-\r
-        regions.addElement(new int[]\r
-                           {start, end});\r
-\r
-        if (ap.av.hasHiddenColumns)\r
-        {\r
-          start = ap.av.colSel.adjustForHiddenColumns(end);\r
-          start = ap.av.colSel.getHiddenBoundaryLeft(start) + 1;\r
-        }\r
-      }\r
-      while (end < sg.getEndRes());\r
-\r
-      int[][] startEnd = new int[regions.size()][2];\r
-      for (int i = 0; i < regions.size(); i++)\r
-      {\r
-        startEnd[i] = (int[]) regions.elementAt(i);\r
-      }\r
+      int[][] startEnd = ap.av.getVisibleRegionBoundaries(\r
+          sg.getStartRes(), sg.getEndRes() + 1);\r
 \r
       String description;\r
       int caseChange;\r
@@ -1334,8 +1380,13 @@ public class PopupMenu
 \r
   public void discoverPDB_actionPerformed()\r
   {\r
-    new jalview.io.DBRefFetcher(\r
-        ap.av.getAlignment(), ap.alignFrame).fetchDBRefs(false);\r
+    SequenceI[] sequences =\r
+         ap.av.selectionGroup == null ?\r
+           new Sequence[]{sequence}\r
+         : ap.av.selectionGroup.getSequencesInOrder(ap.av.alignment);\r
+\r
+    new jalview.io.DBRefFetcher(sequences,\r
+        ap.alignFrame).fetchDBRefs(false);\r
   }\r
 \r
   public void sequenceFeature_actionPerformed()\r
@@ -1359,7 +1410,7 @@ public class PopupMenu
     }\r
 \r
     if (ap.seqPanel.seqCanvas.getFeatureRenderer()\r
-        .createNewFeatures(seqs, features))\r
+        .amendFeatures(seqs, features, true, ap))\r
     {\r
       ap.alignFrame.showSeqFeatures.setSelected(true);\r
       ap.av.setShowSequenceFeatures(true);\r
@@ -1375,4 +1426,60 @@ public class PopupMenu
       new TextColourChooser().chooseColour(ap, sg);\r
     }\r
   }\r
+\r
+  public void colourByStructure(String pdbid)\r
+  {\r
+    Annotation [] anots = jalview.structure.StructureSelectionManager.getStructureSelectionManager()\r
+        .colourSequenceFromStructure(sequence, pdbid);\r
+\r
+    AlignmentAnnotation an = new AlignmentAnnotation(\r
+      "Structure", "Coloured by "+pdbid, anots);\r
+\r
+    ap.av.alignment.addAnnotation(an);\r
+    an.createSequenceMapping(sequence, 0, true);\r
+    //an.adjustForAlignment();\r
+    ap.av.alignment.setAnnotationIndex(an,0);\r
+\r
+    ap.adjustAnnotationHeight();\r
+\r
+    sequence.addAlignmentAnnotation(an);\r
+\r
+    }\r
+\r
+  public void editSequence_actionPerformed(ActionEvent actionEvent)\r
+  {\r
+      SequenceGroup sg = ap.av.getSelectionGroup();\r
+\r
+      if(sg!=null)\r
+      {\r
+        if (sequence == null)\r
+          sequence = (Sequence) sg.getSequenceAt(0);\r
+\r
+        EditNameDialog dialog = new EditNameDialog(\r
+            sequence.getSequenceAsString(\r
+                sg.getStartRes(),\r
+                sg.getEndRes() + 1),\r
+            null,\r
+            "Edit Sequence ",\r
+            null,\r
+            "Edit Sequence");\r
+\r
+        if (dialog.accept)\r
+        {\r
+          EditCommand editCommand = new EditCommand(\r
+              "Edit Sequences", EditCommand.REPLACE,\r
+              dialog.getName(),\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
+\r
+\r
 }\r