sequences are private in SequenceGroup
[jalview.git] / src / jalview / appletgui / RotatableCanvas.java
index 8d22f37..f6cbddd 100755 (executable)
@@ -32,12 +32,12 @@ public class RotatableCanvas
     extends Panel implements MouseListener,\r
     MouseMotionListener,\r
     KeyListener\r
-//RubberbandListener,\r
-//SequenceSelectionListener\r
 {\r
   RotatableMatrix idmat = new RotatableMatrix(3, 3);\r
   RotatableMatrix objmat = new RotatableMatrix(3, 3);\r
   RotatableMatrix rotmat = new RotatableMatrix(3, 3);\r
+  String tooltip;\r
+  int toolx, tooly;\r
 \r
   //RubberbandRectangle rubberband;\r
 \r
@@ -82,17 +82,25 @@ public class RotatableCanvas
   float scalefactor = 1;\r
 \r
   AlignViewport av;\r
-//  Controller    controller;\r
+  boolean showLabels = false;\r
 \r
+  public RotatableCanvas(AlignViewport av)\r
+  {\r
+    this.av = av;\r
+  }\r
 \r
-  public RotatableCanvas(AlignViewport av,\r
-                         Vector points, int npoint)\r
+  public void showLabels(boolean b)\r
+  {\r
+    showLabels = b;\r
+    repaint();\r
+  }\r
+\r
+  public void setPoints(Vector points, int npoint)\r
   {\r
     this.points = points;\r
     this.npoint = npoint;\r
-    this.av = av;\r
-    PaintRefresher.Register(this);\r
-//\r
+    PaintRefresher.Register(this, av.alignment);\r
+\r
     prefsize = getPreferredSize();\r
     orig = new float[npoint][3];\r
 \r
@@ -285,31 +293,50 @@ public class RotatableCanvas
     return getPreferredSize();\r
   }\r
 \r
+  public void update(Graphics g)\r
+  {\r
+    paint(g);\r
+  }\r
   public void paint(Graphics g)\r
   {\r
-    //Only create the image at the beginning -\r
-    if ( (img == null) || (prefsize.width != getSize().width) ||\r
-        (prefsize.height != getSize().height))\r
+    if (points == null)\r
+    {\r
+      g.setFont(new Font("Verdana", Font.PLAIN, 18));\r
+      g.drawString("Calculating PCA....", 20, getSize().height / 2);\r
+    }\r
+    else\r
     {\r
-      prefsize.width = getSize().width;\r
-      prefsize.height = getSize().height;\r
 \r
-      scale = findScale();\r
+      //Only create the image at the beginning -\r
+      if ( (img == null) || (prefsize.width != getSize().width) ||\r
+          (prefsize.height != getSize().height))\r
+      {\r
+        prefsize.width = getSize().width;\r
+        prefsize.height = getSize().height;\r
 \r
-      //      System.out.println("New scale = " + scale);\r
-      img = createImage(getSize().width, getSize().height);\r
-      ig = img.getGraphics();\r
+        scale = findScale();\r
 \r
-    }\r
+        //      System.out.println("New scale = " + scale);\r
+        img = createImage(getSize().width, getSize().height);\r
+        ig = img.getGraphics();\r
 \r
-    drawBackground(ig, Color.black);\r
-    drawScene(ig);\r
-    if (drawAxes == true)\r
-    {\r
-      drawAxes(ig);\r
-    }\r
+      }\r
+\r
+      drawBackground(ig, Color.black);\r
+      drawScene(ig);\r
+      if (drawAxes == true)\r
+      {\r
+        drawAxes(ig);\r
+      }\r
+\r
+      if(tooltip!=null)\r
+      {\r
+        ig.setColor(Color.red);\r
+        ig.drawString(tooltip, toolx, tooly);\r
+      }\r
 \r
-    g.drawImage(img, 0, 0, this);\r
+      g.drawImage(img, 0, 0, this);\r
+    }\r
   }\r
 \r
   public void drawAxes(Graphics g)\r
@@ -332,7 +359,7 @@ public class RotatableCanvas
 \r
   public void drawScene(Graphics g)\r
   {\r
-    boolean darker = false;\r
+    //boolean darker = false;\r
 \r
     int halfwidth = getSize().width / 2;\r
     int halfheight = getSize().height / 2;\r
@@ -355,7 +382,7 @@ public class RotatableCanvas
 \r
       if (av.getSelectionGroup() != null)\r
       {\r
-        if (av.getSelectionGroup().sequences.contains( ( (SequencePoint) points.\r
+        if (av.getSelectionGroup().getSequences(false).contains( ( (SequencePoint) points.\r
             elementAt(i)).sequence))\r
         {\r
           g.setColor(Color.gray);\r
@@ -367,14 +394,14 @@ public class RotatableCanvas
       }\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
-//    //Now the rectangle\r
-//    if (rectx2 != -1 && recty2 != -1) {\r
-//      g.setColor(Color.white);\r
-//\r
-//      g.drawRect(rectx1,recty1,rectx2-rectx1,recty2-recty1);\r
-//    }\r
   }\r
 \r
   public Dimension minimumsize()\r
@@ -395,7 +422,6 @@ public class RotatableCanvas
 \r
   public void keyPressed(KeyEvent evt)\r
   {\r
-    requestFocus();\r
     if (evt.getKeyCode() == KeyEvent.VK_UP)\r
     {\r
       scalefactor = (float) (scalefactor * 1.1);\r
@@ -471,40 +497,40 @@ public class RotatableCanvas
       if (av.getSelectionGroup() != null)\r
       {\r
         av.getSelectionGroup().addOrRemove(found, true);\r
-        PaintRefresher.Refresh(this);\r
+        av.getSelectionGroup().setEndRes(av.alignment.getWidth()-1);\r
+        PaintRefresher.Refresh(this, av.alignment);\r
       }\r
       else\r
       {\r
         av.setSelectionGroup(new SequenceGroup());\r
         av.getSelectionGroup().addOrRemove(found, true);\r
-        av.getSelectionGroup().setEndRes(av.alignment.getWidth());\r
+        av.getSelectionGroup().setEndRes(av.alignment.getWidth()-1);\r
 \r
       }\r
     }\r
     repaint();\r
   }\r
 \r
-  // private void fireSequenceSelectionEvent(Selection sel) {\r
-  //   controller.handleSequenceSelectionEvent(new SequenceSelectionEvent(this,sel));\r
-  //}\r
 \r
   public void mouseMoved(MouseEvent evt)\r
   {\r
-    // SequenceI found = findPoint(evt.getX(), evt.getY());\r
+     SequenceI found = findPoint(evt.getX(), evt.getY());\r
+     if(found==null)\r
+       tooltip = null;\r
+     else\r
+     {\r
+       tooltip = found.getName();\r
+       toolx = evt.getX();\r
+       tooly = evt.getY();\r
+     }\r
+     repaint();\r
   }\r
 \r
   public void mouseDragged(MouseEvent evt)\r
   {\r
     mx = evt.getX();\r
     my = evt.getY();\r
-    //Check if this is a rectangle drawing drag\r
-    if ( (evt.getModifiers() & InputEvent.BUTTON2_MASK) != 0)\r
-    {\r
-//      rectx2 = evt.getX();\r
-//      recty2 = evt.getY();\r
-    }\r
-    else\r
-    {\r
+\r
       rotmat.setIdentity();\r
 \r
       rotmat.rotate( (float) (my - omy), 'x');\r
@@ -534,13 +560,11 @@ public class RotatableCanvas
       omy = my;\r
 \r
       paint(this.getGraphics());\r
-    }\r
-\r
   }\r
 \r
   public void rectSelect(int x1, int y1, int x2, int y2)\r
   {\r
-    boolean changedSel = false;\r
+    //boolean changedSel = false;\r
     for (int i = 0; i < npoint; i++)\r
     {\r
       SequencePoint sp = (SequencePoint) points.elementAt(i);\r
@@ -553,7 +577,7 @@ public class RotatableCanvas
       {\r
         if (av != null)\r
         {\r
-          if (!av.getSelectionGroup().sequences.contains(sp.sequence))\r
+          if (!av.getSelectionGroup().getSequences(false).contains(sp.sequence))\r
           {\r
             av.getSelectionGroup().addSequence(sp.sequence, true);\r
           }\r
@@ -591,26 +615,5 @@ public class RotatableCanvas
       return null;\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
 \r
 }\r