X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=997966fa97e8e0fc17bc886afcfced1ff2b4512f;hb=ff2e8d0b23e91c4d7f19dd1922e48e5a718ee0f1;hp=0808f17a877b838a479974a27152947717afa930;hpb=84c61d64775f38d2354a420bafef9e68e3a0bad7;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 0808f17..997966f 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -8,6 +8,14 @@ import java.awt.*; import java.awt.event.*; import java.awt.print.*; +import com.sun.image.codec.jpeg.*; +import java.io.*; +import java.awt.image.*; + +import org.jibble.epsgraphics.*; +import javax.imageio.*; + + public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListener, Printable { @@ -26,13 +34,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 +67,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() @@ -60,8 +77,8 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene { switch(evt.getKeyCode()) { - case 27: // escape key - av.setRubberbandGroup(null); + case 27: // escape key + av.setSelectionGroup(null); RefreshPanels(); break; case KeyEvent.VK_X: @@ -76,22 +93,53 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene case KeyEvent.VK_A: alignFrame.selectAllSequenceMenuItem_actionPerformed(null); break; - + case KeyEvent.VK_DOWN: + alignFrame.moveSelectedSequences(false); + break; + case KeyEvent.VK_UP: + alignFrame.moveSelectedSequences(true); + break; + case KeyEvent.VK_F: + alignFrame.findMenuItem_actionPerformed(null); + break; } - - /* public void doKeyPressed(KeyEvent evt) - { - - if (evt.isControlDown() && evt.getKeyChar() == 'f') - findMenuItem_actionPerformed(null); - }*/ - } }); + } + + 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) { seqPanel.seqCanvas.highlightSearchResults( results ); @@ -175,34 +223,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) { @@ -246,14 +335,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 { @@ -266,24 +347,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); @@ -316,17 +399,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; @@ -414,7 +483,11 @@ 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)); } @@ -425,10 +498,81 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene 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 width, int height) + { + 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 width, int height) + { + 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(); + } + } + } +