Associate PCA with multiple views
authoramwaterhouse <Andrew Waterhouse>
Thu, 23 Nov 2006 11:57:32 +0000 (11:57 +0000)
committeramwaterhouse <Andrew Waterhouse>
Thu, 23 Nov 2006 11:57:32 +0000 (11:57 +0000)
src/jalview/gui/AlignFrame.java
src/jalview/gui/PCAPanel.java
src/jalview/gui/RotatableCanvas.java
src/jalview/jbgui/GPCAPanel.java

index c1d1087..3291dca 100755 (executable)
@@ -2515,7 +2515,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
       return;
     }
 
-     new PCAPanel(viewport);
+     new PCAPanel(alignPanel);
   }
 
 
index 1abeb4f..90cd8e6 100755 (executable)
@@ -43,6 +43,7 @@ public class PCAPanel extends GPCAPanel implements Runnable
     PCA pca;\r
     int top;\r
     RotatableCanvas rc;\r
+    AlignmentPanel ap;\r
     AlignViewport av;\r
     AlignmentView seqstrings;\r
     SequenceI  [] seqs;\r
@@ -53,9 +54,10 @@ public class PCAPanel extends GPCAPanel implements Runnable
      * @param av DOCUMENT ME!\r
      * @param s DOCUMENT ME!\r
      */\r
-    public PCAPanel(AlignViewport av)\r
+    public PCAPanel(AlignmentPanel ap)\r
     {\r
-        this.av = av;\r
+        this.av = ap.av;\r
+        this.ap = ap;\r
 \r
         boolean sameLength = true;\r
 \r
@@ -97,7 +99,10 @@ public class PCAPanel extends GPCAPanel implements Runnable
                                400, 400);\r
 \r
 \r
-        rc = new RotatableCanvas(av);\r
+\r
+        PaintRefresher.Register(this, av.getSequenceSetId());\r
+\r
+        rc = new RotatableCanvas(ap);\r
         this.getContentPane().add(rc, BorderLayout.CENTER);\r
         Thread worker = new Thread(this);\r
         worker.start();\r
@@ -413,4 +418,68 @@ public class PCAPanel extends GPCAPanel implements Runnable
          im.writeImage();\r
        }\r
     }\r
+\r
+\r
+    public void viewMenu_menuSelected()\r
+    {\r
+      buildAssociatedViewMenu();\r
+    }\r
+\r
+\r
+    void buildAssociatedViewMenu()\r
+    {\r
+      AlignmentPanel [] aps = PaintRefresher.getAssociatedPanels(av.getSequenceSetId());\r
+      if(aps.length==1 && rc.av ==aps[0].av)\r
+      {\r
+        associateViewsMenu.setVisible(false);\r
+        return;\r
+      }\r
+\r
+      associateViewsMenu.setVisible(true);\r
+\r
+      if( (viewMenu.getItem(viewMenu.getItemCount()-2) instanceof JMenuItem))\r
+      {\r
+        viewMenu.insertSeparator(viewMenu.getItemCount()-1);\r
+      }\r
+\r
+      associateViewsMenu.removeAll();\r
+\r
+\r
+      JRadioButtonMenuItem item;\r
+      ButtonGroup buttonGroup = new ButtonGroup();\r
+      int i, iSize = aps.length;\r
+      final PCAPanel thisPCAPanel = this;\r
+      for(i=0; i<iSize; i++)\r
+      {\r
+          final AlignmentPanel ap = aps[i];\r
+          item = new JRadioButtonMenuItem(ap.av.viewName, ap.av==rc.av );\r
+          buttonGroup.add(item);\r
+          item.addActionListener(new ActionListener()\r
+              {\r
+                public void actionPerformed(ActionEvent evt)\r
+                {\r
+                  rc.applyToAllViews = false;\r
+                  rc.av = ap.av;\r
+                  rc.ap = ap;\r
+                  PaintRefresher.Register(thisPCAPanel, ap.av.getSequenceSetId());\r
+                }\r
+              });\r
+\r
+          associateViewsMenu.add(item);\r
+      }\r
+\r
+      final JRadioButtonMenuItem itemf =\r
+          new JRadioButtonMenuItem("All Views", rc.applyToAllViews);\r
+      buttonGroup.add(itemf);\r
+      itemf.addActionListener(new ActionListener()\r
+      {\r
+        public void actionPerformed(ActionEvent evt)\r
+        {\r
+          rc.applyToAllViews = itemf.isSelected();\r
+        }\r
+      });\r
+      associateViewsMenu.add(itemf);\r
+\r
+    }\r
+\r
   }\r
index 9007e4f..be1d3f5 100755 (executable)
@@ -72,13 +72,16 @@ public class RotatableCanvas extends JPanel implements MouseListener,
     int recty2;\r
     float scalefactor = 1;\r
     AlignViewport av;\r
+    AlignmentPanel ap;\r
     boolean showLabels = false;\r
     Color bgColour = Color.black;\r
+    boolean applyToAllViews = false;\r
 \r
     //  Controller    controller;\r
-    public RotatableCanvas(AlignViewport av)\r
+    public RotatableCanvas(AlignmentPanel ap)\r
     {\r
-      this.av = av;\r
+      this.av = ap.av;\r
+      this.ap = ap;\r
 \r
       addMouseWheelListener(new MouseWheelListener()\r
       {\r
@@ -113,7 +116,6 @@ public class RotatableCanvas extends JPanel implements MouseListener,
         ToolTipManager.sharedInstance().registerComponent(this);\r
         ToolTipManager.sharedInstance().setInitialDelay(0);\r
         ToolTipManager.sharedInstance().setDismissDelay(10000);\r
-        PaintRefresher.Register(this, av.getSequenceSetId());\r
 \r
         prefsize = getPreferredSize();\r
         orig = new float[npoint][3];\r
@@ -591,17 +593,24 @@ public class RotatableCanvas extends JPanel implements MouseListener,
 \r
         if (found != null)\r
         {\r
-            if (av.getSelectionGroup() != null)\r
+          AlignmentPanel[] aps = getAssociatedPanels();\r
+\r
+          for (int a = 0; a < aps.length; a++)\r
+          {\r
+            if (aps[a].av.getSelectionGroup() != null)\r
             {\r
-                av.getSelectionGroup().addOrRemove(found, true);\r
-                PaintRefresher.Refresh(this, av.getSequenceSetId());\r
+              aps[a].av.getSelectionGroup().addOrRemove(found, true);\r
             }\r
             else\r
             {\r
-                av.setSelectionGroup(new SequenceGroup());\r
-                av.getSelectionGroup().addOrRemove(found, true);\r
-                av.getSelectionGroup().setEndRes(av.alignment.getWidth()-1);\r
+              aps[a].av.setSelectionGroup(new SequenceGroup());\r
+              aps[a].av.getSelectionGroup().addOrRemove(found, true);\r
+              aps[a].av.getSelectionGroup().setEndRes(\r
+                  aps[a].av.alignment.getWidth() - 1);\r
             }\r
+          }\r
+\r
+          PaintRefresher.Refresh(this, av.getSequenceSetId());\r
         }\r
 \r
         repaint();\r
@@ -749,25 +758,14 @@ public class RotatableCanvas extends JPanel implements MouseListener,
         }\r
     }\r
 \r
-    /*  public boolean handleRubberbandEvent(RubberbandEvent evt) {\r
-        System.out.println("Rubberband handler called in RotatableCanvas with " +\r
-                           evt.getBounds());\r
-\r
-        Rubberband rb = (Rubberband)evt.getSource();\r
-\r
-        // Clear the current selection (instance variable)\r
-        //if ((rb.getModifiers() & Event.SHIFT_MASK) == 0) {\r
-        //   clearSelection();\r
-        //}\r
-\r
-        if (rb.getComponent() == this) {\r
-          Rectangle bounds = evt.getBounds();\r
-     rectSelect(bounds.x,bounds.y,bounds.x+bounds.width,bounds.y+bounds.height);\r
-        }\r
-\r
-        redrawneeded = true;\r
-        paint(this.getGraphics());\r
-\r
-        return true;\r
-      }*/\r
+    AlignmentPanel[] getAssociatedPanels()\r
+    {\r
+      if (applyToAllViews)\r
+      {\r
+        return PaintRefresher.getAssociatedPanels(av.getSequenceSetId());\r
+      }\r
+      else\r
+        return new AlignmentPanel[]\r
+            { ap };\r
+    }\r
 }\r
index 0f88b75..74182f3 100755 (executable)
@@ -21,6 +21,8 @@ package jalview.jbgui;
 import java.awt.*;\r
 import java.awt.event.*;\r
 import javax.swing.*;\r
+import javax.swing.event.MenuListener;\r
+import javax.swing.event.MenuEvent;\r
 \r
 public class GPCAPanel\r
     extends JInternalFrame\r
@@ -41,10 +43,11 @@ public class GPCAPanel
   JMenuItem png = new JMenuItem();\r
   JMenuItem print = new JMenuItem();\r
   JMenuItem outputValues = new JMenuItem();\r
-  JMenu viewMenu = new JMenu();\r
+  protected JMenu viewMenu = new JMenu();\r
   protected JCheckBoxMenuItem showLabels = new JCheckBoxMenuItem();\r
   JMenuItem bgcolour = new JMenuItem();\r
   JMenuItem originalSeqData = new JMenuItem();\r
+  protected JMenu associateViewsMenu = new JMenu();\r
 \r
   public GPCAPanel()\r
   {\r
@@ -139,6 +142,21 @@ public class GPCAPanel
       }\r
     });\r
     viewMenu.setText("View");\r
+    viewMenu.addMenuListener(new MenuListener()\r
+    {\r
+      public void menuSelected(MenuEvent e)\r
+      {\r
+        viewMenu_menuSelected();\r
+      }\r
+\r
+      public void menuDeselected(MenuEvent e)\r
+      {\r
+      }\r
+\r
+      public void menuCanceled(MenuEvent e)\r
+      {\r
+      }\r
+    });\r
     showLabels.setText("Show Labels");\r
     showLabels.addActionListener(new ActionListener()\r
     {\r
@@ -164,6 +182,7 @@ public class GPCAPanel
         originalSeqData_actionPerformed(e);\r
       }\r
     });\r
+    associateViewsMenu.setText("Associate Nodes With");\r
     this.getContentPane().add(jPanel2, BorderLayout.SOUTH);\r
     jPanel2.add(jLabel1, null);\r
     jPanel2.add(xCombobox, null);\r
@@ -181,6 +200,7 @@ public class GPCAPanel
     saveMenu.add(png);\r
     viewMenu.add(showLabels);\r
     viewMenu.add(bgcolour);\r
+    viewMenu.add(associateViewsMenu);\r
   }\r
 \r
   protected void xCombobox_actionPerformed(ActionEvent e)\r
@@ -229,4 +249,9 @@ public class GPCAPanel
   {\r
 \r
   }\r
+\r
+  public void viewMenu_menuSelected()\r
+  {\r
+\r
+  }\r
 }\r