Associate PCA with multiple views
[jalview.git] / src / jalview / gui / RotatableCanvas.java
index 92abbf6..be1d3f5 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
  * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
  *\r
  * This program is free software; you can redistribute it and/or\r
  * modify it under the terms of the GNU General Public License\r
@@ -22,8 +22,6 @@ import jalview.datamodel.*;
 \r
 import jalview.math.*;\r
 \r
-import jalview.util.*;\r
-\r
 import java.awt.*;\r
 import java.awt.event.*;\r
 \r
@@ -74,13 +72,35 @@ 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
+        public void mouseWheelMoved(MouseWheelEvent e)\r
+        {\r
+          if (e.getWheelRotation() > 0)\r
+          {\r
+            scale = (float) (scale * 1.1);\r
+            repaint();\r
+          }\r
+\r
+          else\r
+          {\r
+            scale = (float) (scale * 0.9);\r
+            repaint();\r
+          }\r
+        }\r
+      });\r
+\r
     }\r
 \r
     public void showLabels(boolean b)\r
@@ -96,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.alignment);\r
 \r
         prefsize = getPreferredSize();\r
         orig = new float[npoint][3];\r
@@ -140,7 +159,6 @@ public class RotatableCanvas extends JPanel implements MouseListener,
         scale = findScale();\r
 \r
         addMouseListener(this);\r
-        addKeyListener(this);\r
 \r
         addMouseMotionListener(this);\r
 \r
@@ -303,9 +321,13 @@ public class RotatableCanvas extends JPanel implements MouseListener,
      *\r
      * @param g DOCUMENT ME!\r
      */\r
-    public void paintComponent(Graphics g)\r
+    public void paintComponent(Graphics g1)\r
     {\r
 \r
+      Graphics2D g = (Graphics2D) g1;\r
+\r
+      g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
+                         RenderingHints.VALUE_ANTIALIAS_ON);\r
       if(points==null)\r
       {\r
         g.setFont(new Font("Verdana", Font.PLAIN, 18));\r
@@ -345,12 +367,8 @@ public class RotatableCanvas extends JPanel implements MouseListener,
      *\r
      * @param g DOCUMENT ME!\r
      */\r
-    public void drawAxes(Graphics g1)\r
+    public void drawAxes(Graphics g)\r
     {\r
-      Graphics2D g = (Graphics2D) g1;\r
-\r
-      g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
-                         RenderingHints.VALUE_ANTIALIAS_ON);\r
 \r
         g.setColor(Color.yellow);\r
 \r
@@ -400,18 +418,18 @@ public class RotatableCanvas extends JPanel implements MouseListener,
                 halfheight;\r
             float z = sp.coord[1] - centre[2];\r
 \r
-            if (sp.sequence.getColor() == Color.black)\r
+            if (av.getSequenceColour(sp.sequence) == Color.black)\r
             {\r
                 g.setColor(Color.white);\r
             }\r
             else\r
             {\r
-                g.setColor(sp.sequence.getColor());\r
+                g.setColor(av.getSequenceColour(sp.sequence));\r
             }\r
 \r
             if (av.getSelectionGroup() != null)\r
             {\r
-                if (av.getSelectionGroup().sequences.contains(\r
+                if (av.getSelectionGroup().getSequences(false).contains(\r
                             ((SequencePoint) points.elementAt(i)).sequence))\r
                 {\r
                     g.setColor(Color.gray);\r
@@ -486,8 +504,6 @@ public class RotatableCanvas extends JPanel implements MouseListener,
      */\r
     public void keyPressed(KeyEvent evt)\r
     {\r
-        requestFocus();\r
-\r
         if (evt.getKeyCode() == KeyEvent.VK_UP)\r
         {\r
             scalefactor = (float) (scalefactor * 1.1);\r
@@ -511,24 +527,6 @@ public class RotatableCanvas extends JPanel implements MouseListener,
         repaint();\r
     }\r
 \r
-    /**\r
-     * DOCUMENT ME!\r
-     */\r
-    public void printPoints()\r
-    {\r
-        for (int i = 0; i < npoint; i++)\r
-        {\r
-            SequencePoint sp = (SequencePoint) points.elementAt(i);\r
-            Format.print(System.out, "%5d ", i);\r
-\r
-            for (int j = 0; j < 3; j++)\r
-            {\r
-                Format.print(System.out, "%13.3f  ", sp.coord[j]);\r
-            }\r
-\r
-            System.out.println();\r
-        }\r
-    }\r
 \r
     /**\r
      * DOCUMENT ME!\r
@@ -595,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.alignment);\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
@@ -689,8 +694,6 @@ public class RotatableCanvas extends JPanel implements MouseListener,
      */\r
     public void rectSelect(int x1, int y1, int x2, int y2)\r
     {\r
-        boolean changedSel = false;\r
-\r
         for (int i = 0; i < npoint; i++)\r
         {\r
             SequencePoint sp = (SequencePoint) points.elementAt(i);\r
@@ -703,9 +706,8 @@ public class RotatableCanvas extends JPanel implements MouseListener,
             {\r
                 if (av != null)\r
                 {\r
-                    if (!av.getSelectionGroup().sequences.contains(sp.sequence))\r
+                    if (!av.getSelectionGroup().getSequences(false).contains(sp.sequence))\r
                     {\r
-                        changedSel = true;\r
                         av.getSelectionGroup().addSequence(sp.sequence, true);\r
                     }\r
                 }\r
@@ -756,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