Mouse wheel to zoom
[jalview.git] / src / jalview / gui / RotatableCanvas.java
index 3fcfd3d..9007e4f 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,11 +72,38 @@ public class RotatableCanvas extends JPanel implements MouseListener,
     int recty2;\r
     float scalefactor = 1;\r
     AlignViewport av;\r
+    boolean showLabels = false;\r
+    Color bgColour = Color.black;\r
 \r
     //  Controller    controller;\r
     public RotatableCanvas(AlignViewport av)\r
     {\r
       this.av = av;\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
+    {\r
+      showLabels = b;\r
+      repaint();\r
     }\r
 \r
     public void setPoints(Vector points, int npoint)\r
@@ -88,7 +113,7 @@ 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
+        PaintRefresher.Register(this, av.getSequenceSetId());\r
 \r
         prefsize = getPreferredSize();\r
         orig = new float[npoint][3];\r
@@ -132,7 +157,6 @@ public class RotatableCanvas extends JPanel implements MouseListener,
         scale = findScale();\r
 \r
         addMouseListener(this);\r
-        addKeyListener(this);\r
 \r
         addMouseMotionListener(this);\r
 \r
@@ -295,8 +319,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
@@ -318,7 +347,8 @@ public class RotatableCanvas extends JPanel implements MouseListener,
           ig = img.getGraphics();\r
         }\r
 \r
-        drawBackground(ig, Color.black);\r
+\r
+        drawBackground(ig, bgColour);\r
         drawScene(ig);\r
 \r
         if (drawAxes == true)\r
@@ -337,6 +367,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
      */\r
     public void drawAxes(Graphics g)\r
     {\r
+\r
         g.setColor(Color.yellow);\r
 \r
         for (int i = 0; i < 3; i++)\r
@@ -364,9 +395,14 @@ public class RotatableCanvas extends JPanel implements MouseListener,
      *\r
      * @param g DOCUMENT ME!\r
      */\r
-    public void drawScene(Graphics g)\r
+    public void drawScene(Graphics g1)\r
     {\r
-        boolean darker = false;\r
+\r
+      Graphics2D g = (Graphics2D) g1;\r
+\r
+      g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
+                         RenderingHints.VALUE_ANTIALIAS_ON);\r
+\r
 \r
         int halfwidth = getWidth() / 2;\r
         int halfheight = getHeight() / 2;\r
@@ -380,18 +416,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
@@ -404,7 +440,13 @@ public class RotatableCanvas extends JPanel implements MouseListener,
             }\r
 \r
             g.fillRect(x - 3, y - 3, 6, 6);\r
-            g.setColor(Color.red);\r
+            if(showLabels)\r
+            {\r
+              g.setColor(Color.red);\r
+              g.drawString( ( (SequencePoint) points.elementAt(i)).sequence.\r
+                           getName(),\r
+                           x - 3, y - 4);\r
+            }\r
         }\r
 \r
         //    //Now the rectangle\r
@@ -460,8 +502,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
@@ -485,24 +525,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
@@ -572,7 +594,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
             if (av.getSelectionGroup() != null)\r
             {\r
                 av.getSelectionGroup().addOrRemove(found, true);\r
-                PaintRefresher.Refresh(this, av.alignment);\r
+                PaintRefresher.Refresh(this, av.getSequenceSetId());\r
             }\r
             else\r
             {\r
@@ -663,8 +685,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
@@ -677,9 +697,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