X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=76fc8d5cc86f61268a43dbeb586c0616e30bfea6;hb=2b9c6a8948800edf58dd055631920654729fd675;hp=3ce9fa1e2a112b8050c2cc4b49781f757b21b1d5;hpb=fd4d7f8d455deb79c823a430364053564c23ca3c;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 3ce9fa1..76fc8d5 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -7,6 +7,12 @@ import jalview.datamodel.*; import java.awt.*; import java.awt.event.*; import java.awt.print.*; +import java.io.*; +import java.awt.image.*; +import org.jibble.epsgraphics.*; +import javax.imageio.*; + + public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListener, Printable { @@ -26,13 +32,22 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene this.av = av; seqPanel = new SeqPanel (av, this); idPanel = new IdPanel (av, this); + scalePanel = new ScalePanel(av, this); scorePanel = new ScorePanel(av); ssPanel = new SecondaryStructurePanel(av); secondaryPanelHolder.add(ssPanel, BorderLayout.CENTER); + idPanelHolder.add(idPanel, BorderLayout.CENTER); - idPanel.addNotify(); + IdwidthAdjuster iap = new IdwidthAdjuster(this); + idSpaceFillerPanel1.add(iap, BorderLayout.CENTER); + + Dimension d = calculateIdWidth(); + d.setSize( d.width+4, d.height); + idPanel.idCanvas.setPreferredSize( d ); + hscrollFillerPanel.setPreferredSize( d ); + scalePanelHolder.add(scalePanel, BorderLayout.CENTER); scorePanelHolder.add(scorePanel, BorderLayout.CENTER); seqPanelHolder.add(seqPanel, BorderLayout.CENTER); @@ -50,8 +65,8 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene }); - hscroll.setFocusable(false); - vscroll.setFocusable(false); + // hscroll.setFocusable(false); + // vscroll.setFocusable(false); setFocusable(true); addKeyListener(new KeyAdapter() @@ -61,7 +76,7 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene switch(evt.getKeyCode()) { case 27: // escape key - av.setRubberbandGroup(null); + av.setSelectionGroup(null); RefreshPanels(); break; case KeyEvent.VK_X: @@ -90,6 +105,38 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene }); } + Dimension calculateIdWidth() + { + Graphics g = this.getGraphics(); + if(g==null) + { + javax.swing.JFrame f = new javax.swing.JFrame(); + f.addNotify(); + g = f.getGraphics(); + } + + FontMetrics fm = g.getFontMetrics(av.font); + AlignmentI al = av.getAlignment(); + + int i = 0; + int idWidth = 0; + String id; + while (i < al.getHeight() && al.getSequenceAt(i) != null) + { + SequenceI s = al.getSequenceAt(i); + if(av.getShowFullId()) + id = s.getDisplayId(); + else + id = s.getName(); + + if (fm.stringWidth(id) > idWidth) + idWidth = fm.stringWidth(id); + i++; + } + + return new Dimension(idWidth, 12); + } + public void highlightSearchResults(int [] results) { @@ -174,34 +221,75 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene public void RefreshPanels() { - requestFocus(); - invalidate(); - seqPanel.seqCanvas.paintFlag = true; - idPanel.idCanvas.paintFlag = true; - idPanelHolder.setPreferredSize( idPanel.idCanvas.getPreferredSize() ); + requestFocus(); + invalidate(); + idPanelHolder.setPreferredSize(idPanel.idCanvas.getPreferredSize()); + if(idPanel.idCanvas.getPreferredSize()!=null) + hscrollFillerPanel.setPreferredSize(new Dimension(idPanel.idCanvas.getPreferredSize().width, 12)); + idSpaceFillerPanel1.setPreferredSize(new Dimension(500, + av.charHeight / 2 + 12)); + scalePanelHolder.setPreferredSize(new Dimension(500, + av.charHeight / 2 + 12)); + if (av.getWrapAlignment()) + { + int max = av.alignment.getWidth() / + (seqPanel.seqCanvas.getWidth() / av.charWidth) + 1; + + int h = (av.alignment.getHeight() + 2) * av.charHeight; + vextent = seqPanel.seqCanvas.getHeight() / h; + vscroll.setValues(0, vextent, 0, max); + } + else + + setScrollValues(av.getStartRes(), av.getStartSeq()); + av.getConsensus(true); + if (overviewPanel != null) + overviewPanel.updateOverviewImage(); + + validate(); + repaint(); + } + int hextent = 0; + int vextent = 0; - if(av.getWrapAlignment()) - { - int max = av.alignment.getWidth()/ (seqPanel.seqCanvas.getWidth()/av.charWidth)+1; - int h = (av.alignment.getHeight() + 2)*av.charHeight; - vextent = seqPanel.seqCanvas.getHeight()/h; - vscroll.setValues(0,vextent,0,max); + // return value is true if the scroll is valid + public boolean scrollUp(boolean up) + { + if(up) + { + if(vscroll.getValue()<1) + return false; + vscroll.setValue(vscroll.getValue() - 1); } else + { + if(vextent+vscroll.getValue() >= av.getAlignment().getHeight()) + return false; + vscroll.setValue(vscroll.getValue() + 1); + } - setScrollValues(av.getStartRes(), av.getStartSeq()); - av.getConsensus(true); - if(overviewPanel!=null) - overviewPanel.updateOverviewImage(); + return true; + } - validate(); - repaint(); + public boolean scrollRight(boolean right) + { + if(right) + { + if(hscroll.getValue()<1) + return false; + hscroll.setValue(hscroll.getValue() - 1); + } + else + { + if(hextent+hscroll.getValue() >= av.getAlignment().getWidth()) + return false; + hscroll.setValue(hscroll.getValue() + 1); + } - } + return true; + } - int hextent = 0; - int vextent = 0; public void setScrollValues(int x, int y) { @@ -245,14 +333,6 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene if (av.getWrapAlignment()) { av.setStartRes( vscroll.getValue() * av.getChunkWidth()); - // System.out.println(vscroll.getValue()+" "+ av.getChunkWidth()); - // int resSpan = av.alignment.getWidth()/ (seqPanel.seqCanvas.getWidth()/av.charWidth)+1; - // int h = (av.alignment.getHeight() + 2)*av.charHeight; - // vextent = seqPanel.seqCanvas.getHeight()/h; - // vscroll.setValues(0,vextent,0,max); - - - // av.setStartSeq( ); } else { @@ -265,24 +345,26 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene if(overviewPanel!=null) overviewPanel.setBoxPosition(); - seqPanel.seqCanvas.paintFlag=true; repaint(); } - - public int print(Graphics pg, PageFormat pf, int pi) throws PrinterException { - if(av.getWrapAlignment()) - { - return PrintWrappedAlignment(pg, pf, pi); - } - pg.translate((int)pf.getImageableX(), (int)pf.getImageableY()); - int pwidth = (int)pf.getImageableWidth(); - int pheight = (int)pf.getImageableHeight(); - int idWidth = (int)idPanel.idCanvas.getLabelWidth().getWidth(); + int pwidth = (int) pf.getImageableWidth(); + int pheight = (int) pf.getImageableHeight(); + + if (av.getWrapAlignment()) + return printWrappedAlignment(pg, pwidth,pheight, pi); + else + return printUnwrapped(pg,pwidth, pheight,pi); + } + + public int printUnwrapped(Graphics pg, int pwidth, int pheight, int pi) throws PrinterException + { + + int idWidth = calculateIdWidth().width; pg.setColor(Color.white); @@ -315,17 +397,17 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene //////////////// //draw Scale - pg.translate(idWidth,0); - scalePanel.scaleCanvas.drawScale(pg, startRes, endRes, pwidth-idWidth); + pg.translate(30,0); + scalePanel.drawScale(pg, startRes, endRes, pwidth-idWidth); - pg.translate(-idWidth, 30); + pg.translate(-30, 30); //////////////// // Draw the ids Color currentColor=null; Color currentTextColor=null; for(int i=startSeq; i totalChunks ) return Printable.NO_SUCH_PAGE; @@ -413,21 +481,116 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene for (int i = 0; i < endy; i++) { SequenceI s = da.getSequenceAt(i); - pg.drawString(s.getDisplayId(), 0, + String string = s.getName(); + if (av.getShowFullId()) + string = s.getDisplayId(); + + pg.drawString(string, 0, AlignmentUtil.getPixelHeight(0, i, av.charHeight) + ypos + av.charHeight - (av.charHeight / 5)); } } // draw main sequence panel - pg.translate(idWidth,0); + pg.translate(idWidth+4,0); seqPanel.seqCanvas.drawWrappedPanel(pg, pwidth-idWidth, pheight, pi*noChunksOnPage*chunkWidth); - return Printable.NO_SUCH_PAGE;//.PAGE_EXISTS; + return Printable.PAGE_EXISTS; + + } + + + public void makeEPS() + { + int height = (av.alignment.getWidth() / av.getChunkWidth() +1) * av.chunkHeight; + int width = seqPanel.getWidth() + idPanel.getWidth(); + + if (!av.getWrapAlignment()) + { + height = (av.alignment.getHeight()+1) * av.charHeight + 30; + width = idPanel.getWidth() + av.alignment.getWidth() * av.charWidth; + } + + try + { + jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty( + "LAST_DIRECTORY"), new String[]{"eps"}, "Encapsulated Postscript"); + chooser.setFileView(new jalview.io.JalviewFileView()); + chooser.setDialogTitle("Create EPS file from alignment"); + chooser.setToolTipText("Save"); + + int value = chooser.showSaveDialog(this); + if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION) + return; + + jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getPath()); + FileOutputStream out = new FileOutputStream(chooser.getSelectedFile()); + EpsGraphics2D pg = new EpsGraphics2D("Example", out, 0, 0, width, height); + + if (av.getWrapAlignment()) + printWrappedAlignment(pg, width, height, 0); + else + printUnwrapped(pg, width, height, 0); + + pg.flush(); + pg.close(); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + + public void makePNG() + { + int height = (av.alignment.getWidth() / av.getChunkWidth() +1) * av.chunkHeight; + int width = seqPanel.getWidth() + idPanel.getWidth(); + + if (!av.getWrapAlignment()) + { + height = (av.alignment.getHeight()+1) * av.charHeight + 30; + width = idPanel.getWidth() + av.alignment.getWidth() * av.charWidth; + } + + + + try + { + jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty( + "LAST_DIRECTORY"), new String[]{"png"}, "Portable network graphics"); + chooser.setFileView(new jalview.io.JalviewFileView()); + chooser.setDialogTitle("Create EPS file from alignment"); + chooser.setToolTipText("Save"); + + int value = chooser.showSaveDialog(this); + if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION) + return; + + jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getPath()); + FileOutputStream out = new FileOutputStream(chooser.getSelectedFile()); + + BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + Graphics png = bi.getGraphics(); + + + if (av.getWrapAlignment()) + printWrappedAlignment(png, width, height, 0); + else + printUnwrapped(png, width, height, 0); + + ImageIO.write(bi, "png", out); + out.close(); + } + catch (Exception ex) + { + ex.printStackTrace(); + } } + } +