X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FRotatableCanvas.java;h=32c4adc232bae8293503a87ec7102a68e70db549;hb=7bc226b58110fa26d9dbd3f0c78095d06909ffc3;hp=c89cd59244f787926d5697279a197b4fe3a8247b;hpb=92a3a0f396a86b2bc0a8d1a311680ceda4abec7b;p=jalview.git diff --git a/src/jalview/gui/RotatableCanvas.java b/src/jalview/gui/RotatableCanvas.java index c89cd59..32c4adc 100755 --- a/src/jalview/gui/RotatableCanvas.java +++ b/src/jalview/gui/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 @@ -26,13 +26,16 @@ import javax.swing.*; import jalview.datamodel.*; import jalview.math.*; -import jalview.util.*; +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ public class RotatableCanvas extends JPanel implements MouseListener, MouseMotionListener, KeyListener -//RubberbandListener, -//SequenceSelectionListener { RotatableMatrix idmat = new RotatableMatrix(3, 3); RotatableMatrix objmat = new RotatableMatrix(3, 3); @@ -67,17 +70,51 @@ public class RotatableCanvas int recty2; float scalefactor = 1; AlignViewport av; + AlignmentPanel ap; + boolean showLabels = false; + Color bgColour = Color.black; + boolean applyToAllViews = false; // Controller controller; - public RotatableCanvas(AlignViewport av, Vector points, int npoint) + public RotatableCanvas(AlignmentPanel ap) + { + this.av = ap.av; + this.ap = ap; + + addMouseWheelListener(new MouseWheelListener() + { + public void mouseWheelMoved(MouseWheelEvent e) + { + if (e.getWheelRotation() > 0) + { + scale = (float) (scale * 1.1); + repaint(); + } + + else + { + scale = (float) (scale * 0.9); + repaint(); + } + } + }); + + } + + public void showLabels(boolean b) + { + showLabels = b; + repaint(); + } + + public void setPoints(Vector points, int npoint) { this.points = points; this.npoint = npoint; - this.av = av; ToolTipManager.sharedInstance().registerComponent(this); - PaintRefresher.Register(this); + ToolTipManager.sharedInstance().setInitialDelay(0); + ToolTipManager.sharedInstance().setDismissDelay(10000); - // prefsize = getPreferredSize(); orig = new float[npoint][3]; @@ -119,31 +156,12 @@ public class RotatableCanvas scale = findScale(); - // System.out.println("Scale factor = " + scale); addMouseListener(this); - addKeyListener(this); - // if (getParent() != null) { - // getParent().addKeyListener(this); - //} addMouseMotionListener(this); - // Add rubberband - // rubberband = new RubberbandRectangle(this); - // rubberband.setActive(true); - // rubberband.addListener(this); } - /* public boolean handleSequenceSelectionEvent(SequenceSelectionEvent evt) { - redrawneeded = true; - repaint(); - return true; - } - - public void removeNotify() { - controller.removeListener(this); - super.removeNotify(); - }*/ public void initAxes() { for (int i = 0; i < 3; i++) @@ -162,6 +180,9 @@ public class RotatableCanvas } } + /** + * DOCUMENT ME! + */ public void findWidth() { max = new float[3]; @@ -215,6 +236,11 @@ public class RotatableCanvas //System.out.println("Maxwidth = " + maxwidth); } + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ public float findScale() { int dim; @@ -244,6 +270,9 @@ public class RotatableCanvas return (float) ( (dim * scalefactor) / (2 * maxwidth)); } + /** + * DOCUMENT ME! + */ public void findCentre() { //Find centre coordinate @@ -258,6 +287,11 @@ public class RotatableCanvas //System.out.println("Centre z " + centre[2]); } + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ public Dimension getPreferredSize() { if (prefsize != null) @@ -270,40 +304,69 @@ public class RotatableCanvas } } + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ public Dimension getMinimumSize() { return getPreferredSize(); } - public void paintComponent(Graphics g) + /** + * DOCUMENT ME! + * + * @param g DOCUMENT ME! + */ + public void paintComponent(Graphics g1) { - //Only create the image at the beginning - - if ( (img == null) || (prefsize.width != getWidth()) || - (prefsize.height != getHeight())) - { - prefsize.width = getWidth(); - prefsize.height = getHeight(); - scale = findScale(); + Graphics2D g = (Graphics2D) g1; - // System.out.println("New scale = " + scale); - img = createImage(getWidth(), getHeight()); - ig = img.getGraphics(); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + if (points == null) + { + g.setFont(new Font("Verdana", Font.PLAIN, 18)); + g.drawString("Calculating PCA....", 20, getHeight() / 2); } + else + { + //Only create the image at the beginning - + if ( (img == null) || (prefsize.width != getWidth()) || + (prefsize.height != getHeight())) + { + prefsize.width = getWidth(); + prefsize.height = getHeight(); - drawBackground(ig, Color.black); - drawScene(ig); + scale = findScale(); - if (drawAxes == true) - { - drawAxes(ig); - } + // System.out.println("New scale = " + scale); + img = createImage(getWidth(), getHeight()); + ig = img.getGraphics(); + } - g.drawImage(img, 0, 0, this); + drawBackground(ig, bgColour); + drawScene(ig); + + if (drawAxes == true) + { + drawAxes(ig); + } + + g.drawImage(img, 0, 0, this); + } } + /** + * DOCUMENT ME! + * + * @param g DOCUMENT ME! + */ public void drawAxes(Graphics g) { + g.setColor(Color.yellow); for (int i = 0; i < 3; i++) @@ -314,15 +377,30 @@ public class RotatableCanvas } } + /** + * DOCUMENT ME! + * + * @param g DOCUMENT ME! + * @param col DOCUMENT ME! + */ public void drawBackground(Graphics g, Color col) { g.setColor(col); g.fillRect(0, 0, prefsize.width, prefsize.height); } - public void drawScene(Graphics g) + /** + * DOCUMENT ME! + * + * @param g DOCUMENT ME! + */ + public void drawScene(Graphics g1) { - boolean darker = false; + + Graphics2D g = (Graphics2D) g1; + + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); int halfwidth = getWidth() / 2; int halfheight = getHeight() / 2; @@ -336,18 +414,18 @@ public class RotatableCanvas 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( + if (av.getSelectionGroup().getSequences(null).contains( ( (SequencePoint) points.elementAt(i)).sequence)) { g.setColor(Color.gray); @@ -360,7 +438,13 @@ 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 @@ -371,28 +455,51 @@ public class RotatableCanvas // } } + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ public Dimension minimumsize() { return prefsize; } + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ public Dimension preferredsize() { return prefsize; } + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void keyTyped(KeyEvent evt) { } + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void keyReleased(KeyEvent evt) { } + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void keyPressed(KeyEvent evt) { - requestFocus(); - if (evt.getKeyCode() == KeyEvent.VK_UP) { scalefactor = (float) (scalefactor * 1.1); @@ -416,38 +523,47 @@ public class RotatableCanvas repaint(); } - public void printPoints() - { - for (int i = 0; i < npoint; i++) - { - SequencePoint sp = (SequencePoint) points.elementAt(i); - Format.print(System.out, "%5d ", i); - - for (int j = 0; j < 3; j++) - { - Format.print(System.out, "%13.3f ", sp.coord[j]); - } - - System.out.println(); - } - } - + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void mouseClicked(MouseEvent evt) { } + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void mouseEntered(MouseEvent evt) { } + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void mouseExited(MouseEvent evt) { } + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void mouseReleased(MouseEvent evt) { } + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void mousePressed(MouseEvent evt) { int x = evt.getX(); @@ -472,17 +588,24 @@ public class RotatableCanvas if (found != null) { - if (av.getSelectionGroup() != null) - { - av.getSelectionGroup().addOrRemove(found, true); - PaintRefresher.Refresh(this); - } - else + AlignmentPanel[] aps = getAssociatedPanels(); + + for (int a = 0; a < aps.length; a++) { - av.setSelectionGroup(new SequenceGroup()); - av.getSelectionGroup().addOrRemove(found, true); - av.getSelectionGroup().setEndRes(av.alignment.getWidth()); + if (aps[a].av.getSelectionGroup() != null) + { + aps[a].av.getSelectionGroup().addOrRemove(found, true); + } + else + { + aps[a].av.setSelectionGroup(new SequenceGroup()); + aps[a].av.getSelectionGroup().addOrRemove(found, true); + aps[a].av.getSelectionGroup().setEndRes( + aps[a].av.alignment.getWidth() - 1); + } } + + PaintRefresher.Refresh(this, av.getSequenceSetId()); } repaint(); @@ -505,6 +628,11 @@ public class RotatableCanvas } } + /** + * DOCUMENT ME! + * + * @param evt DOCUMENT ME! + */ public void mouseDragged(MouseEvent evt) { mx = evt.getX(); @@ -551,10 +679,16 @@ public class RotatableCanvas } } + /** + * DOCUMENT ME! + * + * @param x1 DOCUMENT ME! + * @param y1 DOCUMENT ME! + * @param x2 DOCUMENT ME! + * @param y2 DOCUMENT ME! + */ public void rectSelect(int x1, int y1, int x2, int y2) { - boolean changedSel = false; - for (int i = 0; i < npoint; i++) { SequencePoint sp = (SequencePoint) points.elementAt(i); @@ -567,9 +701,8 @@ public class RotatableCanvas { if (av != null) { - if (!av.getSelectionGroup().sequences.contains(sp.sequence)) + if (!av.getSelectionGroup().getSequences(null).contains(sp.sequence)) { - changedSel = true; av.getSelectionGroup().addSequence(sp.sequence, true); } } @@ -581,6 +714,14 @@ public class RotatableCanvas // } } + /** + * DOCUMENT ME! + * + * @param x DOCUMENT ME! + * @param y DOCUMENT ME! + * + * @return DOCUMENT ME! + */ public SequenceI findPoint(int x, int y) { int halfwidth = getWidth() / 2; @@ -612,25 +753,17 @@ public class RotatableCanvas } } - /* 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; - }*/ + AlignmentPanel[] getAssociatedPanels() + { + if (applyToAllViews) + { + return PaintRefresher.getAssociatedPanels(av.getSequenceSetId()); + } + else + { + return new AlignmentPanel[] + { + ap}; + } + } }