X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FTreeCanvas.java;h=d4c88de7acb8c238b51d0079145034ce66379d4b;hb=9be2898dd1635c87539a90de321975f043d005f3;hp=de849020500b8c3405f72b7c4de928b1ec4f0a97;hpb=764f4139569c1135e41348b24943c3e6d22f74ef;p=jalview.git diff --git a/src/jalview/gui/TreeCanvas.java b/src/jalview/gui/TreeCanvas.java index de84902..d4c88de 100755 --- a/src/jalview/gui/TreeCanvas.java +++ b/src/jalview/gui/TreeCanvas.java @@ -27,14 +27,13 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print int offx = 20; int offy = 20; - int threshold; + float threshold; String longestName; int labelLength=-1; //RubberbandRectangle rubberband; - Selection selected; Vector listeners; Hashtable nameHash = new Hashtable(); @@ -44,7 +43,6 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print { this.av = av; this.tree = tree; - selected = av.getSelection(); scrollPane = scroller; addMouseListener(this); tree.findHeight(tree.getTopNode()); @@ -54,23 +52,22 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print } public void TreeSelectionChanged(Sequence sequence) { - selected = av.getSelection(); + SequenceGroup selected = av.getSelectionGroup(); + if(selected == null) + { + selected = new SequenceGroup(); + av.setSelectionGroup(selected); + } + + selected.setEndRes(av.alignment.getWidth()); + selected.addOrRemove(sequence); - if (selected.contains(sequence)) - selected.removeElement(sequence); - else - selected.addElement(sequence); - setSelected(selected); PaintRefresher.Refresh(this); repaint(); } - public void setSelected(Selection selected) - { - this.selected = selected; - } public void setTree(NJTree tree) { this.tree = tree; @@ -136,7 +133,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print nameHash.put((SequenceI)node.element(),rect); - if (selected.contains((SequenceI)node.element())) { + SequenceGroup selected = av.getSelectionGroup(); + if (selected!=null && selected.sequences.contains((SequenceI)node.element())) { g.setColor(Color.gray); g.fillRect(xend + 10, ypos - charHeight + 3,charWidth,charHeight); @@ -203,7 +201,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print } - public void pickNodes(Rectangle pickBox, Selection sel) { + public void pickNodes(Rectangle pickBox) { int width = getWidth(); int height = getHeight(); @@ -216,10 +214,10 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print } float chunk = (float)(height-offy*2)/top.count; - pickNode(pickBox,sel,top,chunk,wscale,width,offx,offy); + pickNode(pickBox,top,chunk,wscale,width,offx,offy); } - public void pickNode(Rectangle pickBox, Selection sel, SequenceNode node, float chunk, float scale, int width,int offx, int offy) { + public void pickNode(Rectangle pickBox, SequenceNode node, float chunk, float scale, int width,int offx, int offy) { if (node == null) { return; } @@ -236,16 +234,14 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print if (pickBox.contains(new Point(xend,ypos))) { if (node.element() instanceof SequenceI) { SequenceI seq = (SequenceI)node.element(); - if (sel.contains(seq)) { - sel.removeElement(seq); - } else { - sel.addElement(seq); - } + SequenceGroup sg = av.getSelectionGroup(); + if(sg!=null) + sg.addOrRemove(seq); } } } else { - pickNode(pickBox,sel,(SequenceNode)node.left(), chunk,scale,width,offx,offy); - pickNode(pickBox,sel,(SequenceNode)node.right(),chunk,scale,width,offx,offy); + pickNode(pickBox,(SequenceNode)node.left(), chunk,scale,width,offx,offy); + pickNode(pickBox,(SequenceNode)node.right(),chunk,scale,width,offx,offy); } } @@ -279,6 +275,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print { PrinterJob printJob = PrinterJob.getPrinterJob(); PageFormat pf = printJob.pageDialog(printJob.defaultPage()); + printJob.setPrintable(this, pf); if (printJob.printDialog()) { @@ -296,26 +293,41 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print public int print(Graphics pg, PageFormat pf, int pi) throws PrinterException { - font = new Font("Verdana",Font.PLAIN,fontSize); - pg.setFont(font); - FontMetrics fm = pg.getFontMetrics(font); + pg.setFont(font); pg.translate((int)pf.getImageableX(), (int)pf.getImageableY()); - int pwidth = (int) pf.getImageableWidth(); int pheight = (int) pf.getImageableHeight(); - // adjust pheight to row height - pheight -= (pheight%fm.getHeight()); - pg.setClip(0,0, pwidth, pheight); - - int noPages = (fm.getHeight() * nameHash.size()) / pheight; - + int noPages = getHeight() / pheight; if(pi>noPages) return Printable.NO_SUCH_PAGE; - pg.translate(0, -pheight*pi ); - draw(pg, pwidth, fm.getHeight() * nameHash.size()); + + if (pwidth > getWidth()) + pwidth = getWidth(); + + if(fitToWindow) + { + if (pheight > getHeight()) + pheight = getHeight(); + + noPages = 0; + } + else + { + + FontMetrics fm = pg.getFontMetrics(font); + int height = fm.getHeight() * nameHash.size(); + pg.translate(0, -pi*pheight ); + pg.setClip(0,pi*pheight, pwidth,pi*pheight + pheight); + // translate number of pages, + // height is screen size as this is the + // non overlapping text size + pheight = height; + } + + draw(pg, pwidth, pheight); return Printable.PAGE_EXISTS; @@ -323,6 +335,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print public void paintComponent(Graphics g) { + font = new Font("Verdana",Font.PLAIN,fontSize); g.setFont(font); @@ -343,13 +356,6 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print draw( g,scrollPane.getWidth(), fm.getHeight() * nameHash.size()); } - - if (threshold != 0) - { - g.setColor(Color.red); - g.drawLine(threshold,0,threshold,getHeight()); - } - scrollPane.revalidate(); } public int getFontSize() { @@ -359,12 +365,15 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print this.fontSize = fontSize; repaint(); } - public void draw(Graphics g, int width, int height) { - g.setColor(Color.white); - g.fillRect(0,0,width,height); + public void draw(Graphics g1, int width, int height) { + + Graphics2D g2 = (Graphics2D)g1; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.setColor(Color.white); + g2.fillRect(0,0,width,height); - labelLength = g.getFontMetrics(font).stringWidth(longestName)+ 20;//20 allows for scrollbar + labelLength = g2.getFontMetrics(font).stringWidth(longestName)+ 20;//20 allows for scrollbar float wscale =(float)(width - labelLength -offx*2)/tree.getMaxHeight(); @@ -375,7 +384,20 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print } float chunk = (float)(height-offy*2)/top.count ; - drawNode(g,tree.getTopNode(),chunk,wscale,width,offx,offy); + drawNode(g2,tree.getTopNode(),chunk,wscale,width,offx,offy); + + if (threshold != 0) + { + if(av.getCurrentTree() == tree) + g2.setColor(Color.red); + else + g2.setColor(Color.gray); + + int x = (int)( threshold * (float)(getWidth()-labelLength - 2*offx) +offx ) ; + + g2.drawLine(x,0,x,getHeight()); + } + } public void mouseReleased(MouseEvent e) { } @@ -385,6 +407,9 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print } public void mousePressed(MouseEvent e) { + + av.setCurrentTree(tree); + int x = e.getX(); int y = e.getY(); @@ -405,13 +430,13 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print // Find threshold if (tree.getMaxHeight() != 0) { - float fthreshold = (float)(x - offx)/(float)(getWidth()-labelLength - 2*offx); - this.threshold = x; + threshold = (float)(x - offx)/(float)(getWidth()-labelLength - 2*offx); + tree.getGroups().removeAllElements(); - tree.groupNodes(tree.getTopNode(),fthreshold); + tree.groupNodes(tree.getTopNode(),threshold); setColor(tree.getTopNode(),Color.black); - av.sel.clear(); + av.setSelectionGroup(null); av.alignment.deleteAllGroups(); for (int i=0; i < tree.getGroups().size(); i++) @@ -428,7 +453,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print { SequenceNode sn = (SequenceNode) l.elementAt(j); if(sg==null) - sg = new SequenceGroup("TreeGroup", av.getGlobalColourScheme(), true, true,false,0,av.alignment.getWidth()); + sg = new SequenceGroup("TreeGroup", av.getGlobalColourScheme(), true, true,false,0,av.alignment.getWidth()); sg.addSequence( (Sequence) sn.element()); } @@ -442,7 +467,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable, Print sg.getEndRes()); c.calculate(); - c.verdict(false, 100); + c.verdict(false, av.ConsPercGaps); ccs = new ConservationColourScheme(c, ccs.cs); sg.cs = ccs;