X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FRotatableCanvas.java;h=a2463e87d7a44c80e61fb26a8f884c5f8c3cc2d1;hb=94e19634c669879ab63bbb82d5489c200cdb18f8;hp=8d22f375f1593a0d9653023d2bd9dc8de8fe0f68;hpb=4ebc6d5b362bc093c39312aa1a69836e3dd6ae84;p=jalview.git diff --git a/src/jalview/appletgui/RotatableCanvas.java b/src/jalview/appletgui/RotatableCanvas.java index 8d22f37..a2463e8 100755 --- a/src/jalview/appletgui/RotatableCanvas.java +++ b/src/jalview/appletgui/RotatableCanvas.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -32,12 +32,12 @@ public class RotatableCanvas extends Panel implements MouseListener, MouseMotionListener, KeyListener -//RubberbandListener, -//SequenceSelectionListener { RotatableMatrix idmat = new RotatableMatrix(3, 3); RotatableMatrix objmat = new RotatableMatrix(3, 3); RotatableMatrix rotmat = new RotatableMatrix(3, 3); + String tooltip; + int toolx, tooly; //RubberbandRectangle rubberband; @@ -82,17 +82,25 @@ public class RotatableCanvas float scalefactor = 1; AlignViewport av; -// Controller controller; + boolean showLabels = false; + public RotatableCanvas(AlignViewport av) + { + this.av = av; + } + + public void showLabels(boolean b) + { + showLabels = b; + repaint(); + } - public RotatableCanvas(AlignViewport av, - Vector points, int npoint) + public void setPoints(Vector points, int npoint) { this.points = points; this.npoint = npoint; - this.av = av; - PaintRefresher.Register(this); -// + PaintRefresher.Register(this, av.getSequenceSetId()); + prefsize = getPreferredSize(); orig = new float[npoint][3]; @@ -285,31 +293,51 @@ public class RotatableCanvas return getPreferredSize(); } + public void update(Graphics g) + { + paint(g); + } + public void paint(Graphics g) { - //Only create the image at the beginning - - if ( (img == null) || (prefsize.width != getSize().width) || - (prefsize.height != getSize().height)) + if (points == null) + { + g.setFont(new Font("Verdana", Font.PLAIN, 18)); + g.drawString("Calculating PCA....", 20, getSize().height / 2); + } + else { - prefsize.width = getSize().width; - prefsize.height = getSize().height; - scale = findScale(); + //Only create the image at the beginning - + if ( (img == null) || (prefsize.width != getSize().width) || + (prefsize.height != getSize().height)) + { + prefsize.width = getSize().width; + prefsize.height = getSize().height; - // System.out.println("New scale = " + scale); - img = createImage(getSize().width, getSize().height); - ig = img.getGraphics(); + scale = findScale(); - } + // System.out.println("New scale = " + scale); + img = createImage(getSize().width, getSize().height); + ig = img.getGraphics(); - drawBackground(ig, Color.black); - drawScene(ig); - if (drawAxes == true) - { - drawAxes(ig); - } + } + + drawBackground(ig, Color.black); + drawScene(ig); + if (drawAxes == true) + { + drawAxes(ig); + } - g.drawImage(img, 0, 0, this); + if (tooltip != null) + { + ig.setColor(Color.red); + ig.drawString(tooltip, toolx, tooly); + } + + g.drawImage(img, 0, 0, this); + } } public void drawAxes(Graphics g) @@ -332,7 +360,7 @@ public class RotatableCanvas public void drawScene(Graphics g) { - boolean darker = false; + //boolean darker = false; int halfwidth = getSize().width / 2; int halfheight = getSize().height / 2; @@ -344,18 +372,19 @@ public class RotatableCanvas int y = (int) ( (float) (sp.coord[1] - centre[1]) * scale) + halfheight; float z = sp.coord[1] - centre[2]; - if (sp.sequence.getColor() == Color.black) + if (av.getSequenceColour(sp.sequence) == Color.black) { g.setColor(Color.white); } else { - g.setColor(sp.sequence.getColor()); + g.setColor(av.getSequenceColour(sp.sequence)); } if (av.getSelectionGroup() != null) { - if (av.getSelectionGroup().sequences.contains( ( (SequencePoint) points. + if (av.getSelectionGroup().getSequences(null).contains( ( ( + SequencePoint) points. elementAt(i)).sequence)) { g.setColor(Color.gray); @@ -367,14 +396,14 @@ public class RotatableCanvas } g.fillRect(x - 3, y - 3, 6, 6); - g.setColor(Color.red); + if (showLabels) + { + g.setColor(Color.red); + g.drawString( ( (SequencePoint) points.elementAt(i)).sequence. + getName(), + x - 3, y - 4); + } } -// //Now the rectangle -// if (rectx2 != -1 && recty2 != -1) { -// g.setColor(Color.white); -// -// g.drawRect(rectx1,recty1,rectx2-rectx1,recty2-recty1); -// } } public Dimension minimumsize() @@ -395,7 +424,6 @@ public class RotatableCanvas public void keyPressed(KeyEvent evt) { - requestFocus(); if (evt.getKeyCode() == KeyEvent.VK_UP) { scalefactor = (float) (scalefactor * 1.1); @@ -471,76 +499,75 @@ public class RotatableCanvas if (av.getSelectionGroup() != null) { av.getSelectionGroup().addOrRemove(found, true); - PaintRefresher.Refresh(this); + av.getSelectionGroup().setEndRes(av.alignment.getWidth() - 1); + PaintRefresher.Refresh(this, av.getSequenceSetId()); } else { av.setSelectionGroup(new SequenceGroup()); av.getSelectionGroup().addOrRemove(found, true); - av.getSelectionGroup().setEndRes(av.alignment.getWidth()); + av.getSelectionGroup().setEndRes(av.alignment.getWidth() - 1); } } repaint(); } - // private void fireSequenceSelectionEvent(Selection sel) { - // controller.handleSequenceSelectionEvent(new SequenceSelectionEvent(this,sel)); - //} - public void mouseMoved(MouseEvent evt) { - // SequenceI found = findPoint(evt.getX(), evt.getY()); + SequenceI found = findPoint(evt.getX(), evt.getY()); + if (found == null) + { + tooltip = null; + } + else + { + tooltip = found.getName(); + toolx = evt.getX(); + tooly = evt.getY(); + } + repaint(); } public void mouseDragged(MouseEvent evt) { mx = evt.getX(); my = evt.getY(); - //Check if this is a rectangle drawing drag - if ( (evt.getModifiers() & InputEvent.BUTTON2_MASK) != 0) - { -// rectx2 = evt.getX(); -// recty2 = evt.getY(); - } - else - { - rotmat.setIdentity(); - rotmat.rotate( (float) (my - omy), 'x'); - rotmat.rotate( (float) (mx - omx), 'y'); + rotmat.setIdentity(); - for (int i = 0; i < npoint; i++) - { - SequencePoint sp = (SequencePoint) points.elementAt(i); - sp.coord[0] -= centre[0]; - sp.coord[1] -= centre[1]; - sp.coord[2] -= centre[2]; - - //Now apply the rotation matrix - sp.coord = rotmat.vectorMultiply(sp.coord); - - //Now translate back again - sp.coord[0] += centre[0]; - sp.coord[1] += centre[1]; - sp.coord[2] += centre[2]; - } + rotmat.rotate( (float) (my - omy), 'x'); + rotmat.rotate( (float) (mx - omx), 'y'); - for (int i = 0; i < 3; i++) - { - axes[i] = rotmat.vectorMultiply(axes[i]); - } - omx = mx; - omy = my; + for (int i = 0; i < npoint; i++) + { + SequencePoint sp = (SequencePoint) points.elementAt(i); + sp.coord[0] -= centre[0]; + sp.coord[1] -= centre[1]; + sp.coord[2] -= centre[2]; - paint(this.getGraphics()); + //Now apply the rotation matrix + sp.coord = rotmat.vectorMultiply(sp.coord); + + //Now translate back again + sp.coord[0] += centre[0]; + sp.coord[1] += centre[1]; + sp.coord[2] += centre[2]; } + for (int i = 0; i < 3; i++) + { + axes[i] = rotmat.vectorMultiply(axes[i]); + } + omx = mx; + omy = my; + + paint(this.getGraphics()); } public void rectSelect(int x1, int y1, int x2, int y2) { - boolean changedSel = false; + //boolean changedSel = false; for (int i = 0; i < npoint; i++) { SequencePoint sp = (SequencePoint) points.elementAt(i); @@ -553,7 +580,7 @@ public class RotatableCanvas { if (av != null) { - if (!av.getSelectionGroup().sequences.contains(sp.sequence)) + if (!av.getSelectionGroup().getSequences(null).contains(sp.sequence)) { av.getSelectionGroup().addSequence(sp.sequence, true); } @@ -591,26 +618,5 @@ public class RotatableCanvas return null; } } - /* public boolean handleRubberbandEvent(RubberbandEvent evt) { - System.out.println("Rubberband handler called in RotatableCanvas with " + - evt.getBounds()); - - Rubberband rb = (Rubberband)evt.getSource(); - - // Clear the current selection (instance variable) - //if ((rb.getModifiers() & Event.SHIFT_MASK) == 0) { - // clearSelection(); - //} - - if (rb.getComponent() == this) { - Rectangle bounds = evt.getBounds(); - rectSelect(bounds.x,bounds.y,bounds.x+bounds.width,bounds.y+bounds.height); - } - - redrawneeded = true; - paint(this.getGraphics()); - - return true; - }*/ }