X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=775e954551d1bbb6e6ea3c88fd23da18a00f6db5;hb=5f7d80cd8b01e051a6175b0ce8db0ad94d73df2f;hp=53f65d8bdd2e2baf0b664a6dd550d248878d5701;hpb=faa7925a6bfe13bf2ca5f2f2ac3c7afa3027828b;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 53f65d8..775e954 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -1,11 +1,12 @@ package jalview.gui; import jalview.jbgui.GAlignmentPanel; +import jalview.schemes.*; +import jalview.analysis.*; +import jalview.datamodel.*; import java.awt.*; -import java.awt.image.*; import java.awt.event.*; import java.awt.print.*; -import javax.swing.*; public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListener, Printable { @@ -14,21 +15,22 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene OverviewPanel overviewPanel; SeqPanel seqPanel; IdPanel idPanel; + SecondaryStructurePanel ssPanel; public AlignFrame alignFrame; ScalePanel scalePanel; ScorePanel scorePanel; - public boolean groupEdit = false; - - public AlignmentPanel(AlignFrame af, AlignViewport av) + public AlignmentPanel(AlignFrame af, final AlignViewport av) { alignFrame = af; this.av = av; seqPanel = new SeqPanel (av, this); idPanel = new IdPanel (av, this); - scalePanel = new ScalePanel(av); + 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(); scalePanelHolder.add(scalePanel, BorderLayout.CENTER); @@ -38,7 +40,6 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene hscroll.addAdjustmentListener(this); vscroll.addAdjustmentListener(this); - selectAll(false); addComponentListener(new ComponentAdapter() { @@ -48,27 +49,40 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene } }); - } + hscroll.setFocusable(false); + vscroll.setFocusable(false); + setFocusable(true); + + addKeyListener(new KeyAdapter() + { + public void keyPressed(KeyEvent evt) + { + if(evt.getKeyCode()==27) + { + av.setRubberbandGroup(null); + RefreshPanels(); + } + } + }); - public int countSelected() - { - return av.getSelection().size(); - } - public void selectAll(boolean flag) { - int i = 0; - if (flag) { - while (i < av.getAlignment().getHeight()) { - if (! av.getSelection().contains(av.getAlignment().getSequenceAt(i))) { - av.getSelection().addElement(av.getAlignment().getSequenceAt(i)); - } - i++; - } - } else { - av.getSelection().clear(); - } } + public void highlightSearchResults(int [] results) + { + seqPanel.seqCanvas.highlightSearchResults( results ); + + // do we need to scroll the panel? + if(results!=null && (av.getStartSeq()>results[0] + || av.getEndSeq()results[1] + || av.getEndRes() av.getAlignment().getWidth()) @@ -146,7 +199,8 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene hscroll.setValues(x,hextent,0,av.getAlignment().getWidth()); vscroll.setValues(y,vextent,0,av.getAlignment().getHeight() ); - seqPanel.seqCanvas.paintFlag = true; + + repaint(); } @@ -159,41 +213,62 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene { int x = hscroll.getValue(); av.setStartRes(x); - av.setEndRes(x + (int)(seqPanel.seqCanvas.getWidth()/av.getCharWidth()-1)); + av.setEndRes(x + seqPanel.seqCanvas.getWidth()/av.getCharWidth()-1); } if (evt.getSource() == vscroll) { - int offy = vscroll.getValue(); + int offy = vscroll.getValue(); + 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 + { av.setStartSeq(offy); - av.setEndSeq(offy + seqPanel.seqCanvas.getHeight()/av.getCharHeight()); + av.setEndSeq(offy + seqPanel.seqCanvas.getHeight() / av.getCharHeight()); + } } if(overviewPanel!=null) overviewPanel.setBoxPosition(); - + seqPanel.seqCanvas.paintFlag=true; repaint(); } - public int print(Graphics g, PageFormat pf, int pi) throws PrinterException + + 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(); - BufferedImage printImage = new BufferedImage(pwidth,pheight,BufferedImage.TYPE_INT_RGB); - Graphics pg = printImage.getGraphics(); + pg.setColor(Color.white); pg.fillRect(0,0,pwidth, pheight); pg.setFont( av.getFont() ); //////////////////////////////////// /// How many sequences and residues can we fit on a printable page? - int totalRes = (int)((pwidth - idWidth)/av.getCharWidth()); + int totalRes = (pwidth - idWidth)/av.getCharWidth(); int totalSeq = (int)((pheight - 30)/av.getCharHeight())-1; int pagesWide = av.getAlignment().getWidth() / totalRes +1; int pagesHigh = av.getAlignment().getHeight() / totalSeq +1; @@ -240,7 +315,7 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene pg.setColor(currentColor); pg.fillRect(0, jalview.analysis.AlignmentUtil.getPixelHeight(startSeq, i, av.getCharHeight()), - getWidth(), + idWidth, av.getCharHeight()); pg.setColor(currentTextColor); @@ -252,36 +327,84 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene // draw main sequence panel pg.translate(idWidth,0); + pg.setClip(0,0,pwidth-idWidth, pheight); seqPanel.seqCanvas.drawPanel(pg,startRes,endRes,startSeq,endSeq,startRes,startSeq,0); - - g.drawImage( printImage, (int)pf.getImageableX (), (int)pf.getImageableY(), this); - - /* JFrame frame = new JFrame("preview"); - javax.swing.JPanel p = new preview(printImage); - frame.getContentPane().setLayout(new BorderLayout()); - frame.getContentPane().add(p, java.awt.BorderLayout.CENTER); - frame.setVisible(true); - frame.setSize(pwidth, pheight); - - frame.validate();*/ - return Printable.PAGE_EXISTS; } -} -class preview extends javax.swing.JPanel -{ - Image i=null; - public preview(Image image) + class VPanel extends javax.swing.JPanel { - i = image; + Image image; + public VPanel(Image i) + { + image = i; + repaint(); + } + public void paintComponent(Graphics g) + { + if(image!=null) + g.drawImage(image,0,0,this); + } + } - public void paint(Graphics g) + public int PrintWrappedAlignment(Graphics pg, PageFormat pf, int pi) { - if(g!=null) - g.drawImage(i, 0,0,null); + 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(); + + if( seqPanel.seqCanvas.getWidth() < pwidth-idWidth) + pwidth = seqPanel.seqCanvas.getWidth() + idWidth; + + pg.setColor(Color.white); + pg.fillRect(0,0,pwidth, pheight); + pg.setFont( av.getFont() ); + + //////////////////////////////////// + /// How many sequences and residues can we fit on a printable page? + AlignmentI da = av.alignment; + int endy = da.getHeight(); + int chunkHeight = (da.getHeight() + 2)*av.charHeight; + int chunkWidth = (pwidth-idWidth)/av.charWidth; + + int noChunksOnPage = pheight / chunkHeight; + int totalChunks = endy / chunkHeight; + + if ( pi*noChunksOnPage > totalChunks ) + return Printable.NO_SUCH_PAGE; + + //////////////// + // Draw the ids + pg.setClip(0,0,pwidth, noChunksOnPage*chunkHeight); + + int row = pi*noChunksOnPage; + pg.setColor(Color.black); + for(int ypos=2*av.charHeight; + ypos <= pheight && row*chunkWidth