/*\r
* Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2007 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
\r
SequenceNode highlightNode;\r
\r
-\r
public TreeCanvas(AlignViewport av, ScrollPane scroller)\r
{\r
this.av = av;\r
addMouseMotionListener(this);\r
setLayout(null);\r
\r
- PaintRefresher.Register(this, av.alignment);\r
+ PaintRefresher.Register(this, av.getSequenceSetId());\r
}\r
\r
public void treeSelectionChanged(SequenceI sequence)\r
av.setSelectionGroup(selected);\r
}\r
\r
- selected.setEndRes(av.alignment.getWidth()-1);\r
+ selected.setEndRes(av.alignment.getWidth() - 1);\r
selected.addOrRemove(sequence, true);\r
}\r
\r
\r
if (node.element() instanceof SequenceI)\r
{\r
- if ( ( (SequenceI) ( (SequenceNode) node).element()).getColor() ==\r
- Color.white)\r
+ SequenceI seq = (SequenceI) ( (SequenceNode) node).element();\r
+\r
+ if (av.getSequenceColour(seq) == Color.white)\r
{\r
g.setColor(Color.black);\r
}\r
else\r
{\r
- g.setColor( ( (SequenceI) ( (SequenceNode) node).element()).getColor().\r
- darker());\r
+ g.setColor(av.getSequenceColour(seq).darker());\r
}\r
\r
}\r
}\r
if (!nodeLabel.equals(""))\r
{\r
- g.drawString(nodeLabel, xstart+2, ypos - 2);\r
+ g.drawString(nodeLabel, xstart + 2, ypos - 2);\r
}\r
\r
String name = (markPlaceholders && node.isPlaceholder()) ?\r
// Colour selected leaves differently\r
SequenceGroup selected = av.getSelectionGroup();\r
if (selected != null &&\r
- selected.getSequences(false).contains( (SequenceI) node.element()))\r
+ selected.getSequences(null).contains( (SequenceI) node.element()))\r
{\r
g.setColor(Color.gray);\r
\r
// Draw horizontal line\r
g.drawLine(xstart, ypos, xend, ypos);\r
if (node == highlightNode)\r
+ {\r
g.fillRect(xend - 3, ypos - 3, 6, 6);\r
+ }\r
else\r
+ {\r
g.fillRect(xend - 2, ypos - 2, 4, 4);\r
+ }\r
\r
int ystart = (int) ( ( (SequenceNode) node.left()).ycount * chunk) + offy;\r
int yend = (int) ( ( (SequenceNode) node.right()).ycount * chunk) + offy;\r
\r
if (showDistances && node.dist > 0)\r
{\r
- g.drawString(new Format("%-.2f").form(node.dist), xstart+2, ypos - 2);\r
+ g.drawString(new Format("%-.2f").form(node.dist), xstart + 2, ypos - 2);\r
}\r
\r
}\r
\r
if (node.element() instanceof SequenceI)\r
{\r
- ( (SequenceI) node.element()).setColor(c);\r
+ av.setSequenceColour( (SequenceI) node.element(), c);\r
}\r
}\r
else\r
paint(g);\r
}\r
\r
- Image offscreen;\r
- public void paint(Graphics g1)\r
+ public void paint(Graphics g)\r
{\r
-\r
- if(tree==null)\r
+ if (tree == null)\r
+ {\r
return;\r
+ }\r
\r
if (nameHash.size() == 0)\r
{\r
repaint();\r
}\r
\r
- FontMetrics fm = g1.getFontMetrics(font);\r
-\r
int width = scrollPane.getSize().width;\r
int height = scrollPane.getSize().height;\r
- if(!fitToWindow)\r
- height = fm.getHeight() * nameHash.size();\r
-\r
+ if (!fitToWindow)\r
+ {\r
+ height = g.getFontMetrics(font).getHeight() * nameHash.size();\r
+ }\r
\r
- if(offscreen==null || offscreen.getWidth(this)!=width\r
- || offscreen.getHeight(this)!=height)\r
- offscreen = createImage(width, height);\r
+ if (getSize().width > width)\r
+ {\r
+ setSize(new Dimension(width, height));\r
+ scrollPane.validate();\r
+ return;\r
+ }\r
\r
- Graphics g = offscreen.getGraphics();\r
+ setSize(new Dimension(width, height));\r
\r
g.setFont(font);\r
\r
- if (fitToWindow ||\r
- (!fitToWindow &&\r
- scrollPane.getSize().height > fm.getHeight() * nameHash.size() + offy))\r
- {\r
- draw(g, scrollPane.getSize().width, scrollPane.getSize().height);\r
- }\r
- else\r
- {\r
- setSize(new Dimension(scrollPane.getSize().width,\r
- fm.getHeight() * nameHash.size()));\r
- draw(g, scrollPane.getSize().width, fm.getHeight() * nameHash.size());\r
- }\r
+ draw(g, width, height);\r
\r
- g1.drawImage(offscreen, 0, 0, this);\r
- scrollPane.validate();\r
}\r
\r
-\r
public void draw(Graphics g, int width, int height)\r
{\r
- offy = font.getSize()+10;\r
+ offy = font.getSize() + 10;\r
\r
g.setColor(Color.white);\r
g.fillRect(0, 0, width, height);\r
}\r
}\r
\r
- PaintRefresher.Refresh(this, av.alignment);\r
+ PaintRefresher.Refresh(this, av.getSequenceSetId());\r
repaint();\r
}\r
}\r
public void mouseDragged(MouseEvent ect)\r
{}\r
\r
-\r
public void mouseMoved(MouseEvent evt)\r
{\r
av.setCurrentTree(tree);\r
if (ob instanceof SequenceI)\r
{\r
treeSelectionChanged( (Sequence) ob);\r
- PaintRefresher.Refresh(this, av.alignment);\r
+ PaintRefresher.Refresh(this, av.getSequenceSetId());\r
repaint();\r
return;\r
}\r
- else if ( !(ob instanceof SequenceNode))\r
+ else if (! (ob instanceof SequenceNode))\r
{\r
// Find threshold\r
\r
\r
av.setSelectionGroup(null);\r
av.alignment.deleteAllGroups();\r
+ av.sequenceColours = null;\r
\r
colourGroups();\r
\r
}\r
}\r
\r
- PaintRefresher.Refresh(this, av.alignment);\r
+ PaintRefresher.Refresh(this, av.getSequenceSetId());\r
repaint();\r
\r
}\r
void colourGroups()\r
{\r
for (int i = 0; i < tree.getGroups().size(); i++)\r
- {\r
+ {\r
\r
- Color col = new Color( (int) (Math.random() * 255),\r
- (int) (Math.random() * 255),\r
- (int) (Math.random() * 255));\r
- setColor( (SequenceNode) tree.getGroups().elementAt(i), col.brighter());\r
+ Color col = new Color( (int) (Math.random() * 255),\r
+ (int) (Math.random() * 255),\r
+ (int) (Math.random() * 255));\r
+ setColor( (SequenceNode) tree.getGroups().elementAt(i), col.brighter());\r
\r
- Vector l = tree.findLeaves( (SequenceNode) tree.getGroups().elementAt(\r
- i), new Vector());\r
+ Vector l = tree.findLeaves( (SequenceNode) tree.getGroups().elementAt(\r
+ i), new Vector());\r
\r
- Vector sequences = new Vector();\r
- for (int j = 0; j < l.size(); j++)\r
- {\r
- SequenceI s1 = (SequenceI) ( (SequenceNode) l.elementAt(j)).element();\r
- if(!sequences.contains(s1))\r
- sequences.addElement(s1);\r
- }\r
+ Vector sequences = new Vector();\r
+ for (int j = 0; j < l.size(); j++)\r
+ {\r
+ SequenceI s1 = (SequenceI) ( (SequenceNode) l.elementAt(j)).element();\r
+ if (!sequences.contains(s1))\r
+ {\r
+ sequences.addElement(s1);\r
+ }\r
+ }\r
\r
- ColourSchemeI cs = null;\r
+ ColourSchemeI cs = null;\r
\r
- if (av.getGlobalColourScheme() != null)\r
- {\r
- if (av.getGlobalColourScheme() instanceof UserColourScheme)\r
- {\r
- cs = new UserColourScheme(\r
- ( (UserColourScheme) av.getGlobalColourScheme()).getColours());\r
-\r
- }\r
- else\r
- cs = ColourSchemeProperty.getColour(sequences,\r
- av.alignment.getWidth(),\r
- ColourSchemeProperty.getColourName(\r
- av.getGlobalColourScheme()));\r
-\r
- cs.setThreshold(av.getGlobalColourScheme().getThreshold(),\r
- av.getIgnoreGapsConsensus());\r
- }\r
+ if (av.getGlobalColourScheme() != null)\r
+ {\r
+ if (av.getGlobalColourScheme() instanceof UserColourScheme)\r
+ {\r
+ cs = new UserColourScheme(\r
+ ( (UserColourScheme) av.getGlobalColourScheme()).getColours());\r
\r
- SequenceGroup sg = new SequenceGroup(sequences, "TreeGroup",\r
- cs, true, true,\r
- false, 0, av.alignment.getWidth()-1);\r
+ }\r
+ else\r
+ {\r
+ cs = ColourSchemeProperty.getColour(sequences,\r
+ av.alignment.getWidth(),\r
+ ColourSchemeProperty.\r
+ getColourName(\r
+ av.getGlobalColourScheme()));\r
+ }\r
\r
+ cs.setThreshold(av.getGlobalColourScheme().getThreshold(),\r
+ av.getIgnoreGapsConsensus());\r
+ }\r
\r
- if ( av.getGlobalColourScheme()!=null\r
- && av.getGlobalColourScheme().conservationApplied())\r
- {\r
- Conservation c = new Conservation("Group",\r
- ResidueProperties.propHash, 3,\r
- sg.getSequences(false),\r
- sg.getStartRes(),\r
- sg.getEndRes());\r
+ SequenceGroup sg = new SequenceGroup(sequences, "",\r
+ cs, true, true,\r
+ false, 0,\r
+ av.alignment.getWidth() - 1);\r
\r
- c.calculate();\r
- c.verdict(false, av.ConsPercGaps);\r
- cs.setConservation(c);\r
+ sg.setName("JTreeGroup:" + sg.hashCode());\r
\r
- sg.cs = cs;\r
+ if (av.getGlobalColourScheme() != null\r
+ && av.getGlobalColourScheme().conservationApplied())\r
+ {\r
+ Conservation c = new Conservation("Group",\r
+ ResidueProperties.propHash, 3,\r
+ sg.getSequences(null),\r
+ sg.getStartRes(),\r
+ sg.getEndRes());\r
\r
- }\r
+ c.calculate();\r
+ c.verdict(false, av.ConsPercGaps);\r
+ cs.setConservation(c);\r
\r
- av.alignment.addGroup(sg);\r
+ sg.cs = cs;\r
\r
- }\r
+ }\r
+\r
+ av.alignment.addGroup(sg);\r
+\r
+ }\r
\r
}\r
\r