X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=15f1a1f86d8a6dfb77fe4af25a6e9421cf4ec5d1;hb=577f505f54fe343e89f581461e780ea8308c20ec;hp=fcb5a57a4849009c96b240c5f8ce0ffc9b584276;hpb=bfdb9a55949b38a89878959278a8b8ed82a55e49;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index fcb5a57..15f1a1f 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -8,6 +8,11 @@ import java.awt.*; import java.awt.event.*; import java.awt.print.*; +import com.sun.image.codec.jpeg.*; +import java.io.*; +import java.awt.image.*; + + public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListener, Printable { @@ -15,11 +20,12 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene OverviewPanel overviewPanel; SeqPanel seqPanel; IdPanel idPanel; + SecondaryStructurePanel ssPanel; public AlignFrame alignFrame; ScalePanel scalePanel; ScorePanel scorePanel; - public AlignmentPanel(AlignFrame af, AlignViewport av) + public AlignmentPanel(AlignFrame af, final AlignViewport av) { alignFrame = af; this.av = av; @@ -27,7 +33,9 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene 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(); scalePanelHolder.add(scalePanel, BorderLayout.CENTER); @@ -40,13 +48,54 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene addComponentListener(new ComponentAdapter() { - public void componentResized(ComponentEvent evt) + public void componentResized(ComponentEvent evt) { RefreshPanels(); } }); + + + // hscroll.setFocusable(false); + // vscroll.setFocusable(false); + setFocusable(true); + + addKeyListener(new KeyAdapter() + { + public void keyPressed(KeyEvent evt) + { + switch(evt.getKeyCode()) + { + case 27: // escape key + av.setSelectionGroup(null); + RefreshPanels(); + break; + case KeyEvent.VK_X: + alignFrame.cut_actionPerformed(null); + break; + case KeyEvent.VK_C: + alignFrame.copy_actionPerformed(null); + break; + case KeyEvent.VK_V: + alignFrame.paste(true); + break; + 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 highlightSearchResults(int [] results) { seqPanel.seqCanvas.highlightSearchResults( results ); @@ -75,19 +124,33 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene public void setGraphPanelVisible(boolean b) { - scorePanelHolder.setVisible(b); idSpaceFillerPanel.setVisible(b); + scorePanelHolder.setVisible(b); + + RefreshPanels(); + // bit annoying to call this twice, can you do better? + RefreshPanels(); + } + + public void setSecondaryStructureVisible(boolean b) + { + secondaryPanelHolder.setVisible(b); RefreshPanels(); } public void setWrapAlignment(boolean wrap) { - scalePanelHolder.setVisible(!wrap); - scorePanelHolder.setVisible(!wrap); + scorePanelHolder.setVisible(!wrap); + scalePanelHolder.setVisible(!wrap); + secondaryPanelHolder.setVisible(!wrap); + + hscroll.setVisible(!wrap); + + idSpaceFillerPanel.setVisible(!wrap); + idSpaceFillerPanel1.setVisible(!wrap); + + RefreshPanels(); - hscroll.setVisible(!wrap); - idSpaceFillerPanel.setVisible(!wrap); - idSpaceFillerPanel1.setVisible(!wrap); } @@ -98,8 +161,8 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene if(av.getConservationSelected()) { - Alignment al = (Alignment)av.getAlignment(); - Conservation c = new Conservation("All", + Alignment al = (Alignment)av.getAlignment(); + Conservation c = new Conservation("All", ResidueProperties.propHash, 3, al.getSequences(), 0, al.getWidth() ); @@ -110,175 +173,89 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene av.setGlobalColourScheme( ccs ); } - seqPanel.seqCanvas.paintFlag = true; - repaint(); - } - /* - seqCanvas.paintFlag = true; - if (av.getSelection().size() == 0) - { - seqCanvas.globalColorScheme = cs; - for (int i = 0; i < av.alignment.getGroups().size();i++) - { - SequenceGroup sg = (SequenceGroup)av.alignment.getGroups().elementAt(i); - sg.cs = cs; - if(!showConservation - && !(sg.cs instanceof Blosum62ColourScheme) - && sg.cs instanceof ConservationColourScheme) - { - // remove ConservationColouring from existing Conservation group - ConservationColourScheme ccs = (ConservationColourScheme)sg.cs; - sg.cs = ccs.cs; - } - else if(showConservation && !(sg.cs instanceof ConservationColourScheme)) - { - // add ConservationColouring to new group - Conservation c = sg.getConservation(); - Alignment al = (Alignment) av.getAlignment(); - c = new Conservation("All", al.cons, - ResidueProperties.propHash, 3, sg.sequences, 0, - al.getWidth() ); - c.calculate(); - c.verdict(false, 100); - sg.setConservation(c); - sg.cs = new ConservationColourScheme(sg); - } - } - } - else - { - SequenceGroup sg = av.alignment.findGroup((Sequence)av.sel.sequenceAt(0)); - - if( isNewSelection(sg) ) - { - sg = av.getAlignment().addGroup(); - for (int i=0; i < av.getSelection().size(); i++) - { - av.alignment.removeFromGroup(av.alignment.findGroup( (Sequence) av. - sel.sequenceAt(i)), - (Sequence) av.sel.sequenceAt(i)); - av.alignment.addToGroup(sg, (Sequence) av.sel.sequenceAt(i)); - } - } - - sg.cs = cs; - - // Selection is made, we only want to change the conservationColour for selected group - if( showConservation - && !(sg.cs instanceof ConservationColourScheme) - && !(sg.cs instanceof Blosum62ColourScheme)) - { - Conservation c = sg.getConservation(); - Alignment al = (Alignment) av.getAlignment(); - - c = new Conservation("All", al.cons, - ResidueProperties.propHash, 3, sg.sequences, 0, - al.getWidth() ); - c.calculate(); - c.verdict(false, 100); - sg.setConservation(c); - sg.cs = new ConservationColourScheme(sg); - } - else if( !showConservation && sg.cs instanceof ConservationColourScheme) - { - ConservationColourScheme ccs = (ConservationColourScheme)sg.cs; - sg.cs = ccs.cs; - } - } - repaint(); + RefreshPanels(); } - boolean isNewSelection(SequenceGroup sg) + public void RefreshPanels() { - if(sg==null) - return true; - - if(sg.getSize()!=av.getSelection().size()) - return true; - - for(int i=0; i0) - return av.alignment.findGroup((Sequence)av.sel.sequenceAt(0)).cs; + if(up) + { + if(vscroll.getValue()<1) + return false; + vscroll.setValue(vscroll.getValue() - 1); + } else - return seqCanvas.globalColorScheme; - } -*/ - -/* public void setColourScheme(jalview.schemes.ColourSchemeI cs, boolean conservation) - { - seqPanel.setColourScheme(cs, conservation); - - av.setGlobalColourScheme(cs); + { + if(vextent+vscroll.getValue() >= av.getAlignment().getHeight()) + return false; + vscroll.setValue(vscroll.getValue() + 1); + } - if(overviewPanel!=null) - overviewPanel.updateOverviewImage(); + return true; } - void updateResidueView() - { - if (viewport.getSelection().size() == 0) - { - for (int i = 0; i < viewport.alignment.getGroups().size(); i++) - { - SequenceGroup sg = (SequenceGroup) viewport.alignment.getGroups().elementAt(i); - sg.setDisplayBoxes( viewBoxesMenuItem.isSelected() ); - sg.setDisplayText( viewTextMenuItem.isSelected() ); - sg.setColourText( colourTextMenuItem.isSelected() ); - } - } - else - { - SequenceGroup sg = viewport.alignment.findGroup( (Sequence) viewport.sel.sequenceAt(0)); - if (alignPanel.seqPanel.isNewSelection(sg)) - { - sg = viewport.getAlignment().addGroup(); - for (int i = 0; i < viewport.getSelection().size(); i++) - { - viewport.alignment.removeFromGroup(viewport.alignment.findGroup( ( - Sequence) viewport.sel.sequenceAt(i)), - (Sequence) viewport.sel.sequenceAt( - i)); - viewport.alignment.addToGroup(sg, - (Sequence) viewport.sel.sequenceAt(i)); - } - } - - sg.setDisplayBoxes(viewBoxesMenuItem.isSelected()); - sg.setDisplayText(viewTextMenuItem.isSelected()); - sg.setColourText(colourTextMenuItem.isSelected()); - } - alignPanel.RefreshPanels(); - }*/ - - - - public void RefreshPanels() + public boolean scrollRight(boolean right) { - invalidate(); - seqPanel.seqCanvas.paintFlag = true; - idPanel.idCanvas.paintFlag = true; - idPanelHolder.setPreferredSize( idPanel.idCanvas.getPreferredSize() ); - setScrollValues(av.getStartRes(), av.getStartSeq()); - av.getConsensus(true); - validate(); - repaint(); - if(overviewPanel!=null) - overviewPanel.updateOverviewImage(); + 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) { @@ -299,6 +276,8 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene hscroll.setValues(x,hextent,0,av.getAlignment().getWidth()); vscroll.setValues(y,vextent,0,av.getAlignment().getHeight() ); + + repaint(); } @@ -316,29 +295,44 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene if (evt.getSource() == vscroll) { - int offy = vscroll.getValue(); + int offy = vscroll.getValue(); + if (av.getWrapAlignment()) + { + av.setStartRes( vscroll.getValue() * av.getChunkWidth()); + } + 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 pg, PageFormat pf, int pi) throws PrinterException { - pg.translate((int)pf.getImageableX(), (int)pf.getImageableY()); - int pwidth = (int)pf.getImageableWidth(); - int pheight = (int)pf.getImageableHeight(); + 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 = (int)idPanel.idCanvas.getLabelWidth().getWidth(); + pg.setColor(Color.white); pg.fillRect(0,0,pwidth, pheight); pg.setFont( av.getFont() ); @@ -370,7 +364,7 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene //////////////// //draw Scale pg.translate(idWidth,0); - scalePanel.scaleCanvas.drawScale(pg, startRes, endRes, pwidth-idWidth); + scalePanel.drawScale(pg, startRes, endRes, pwidth-idWidth); pg.translate(-idWidth, 30); //////////////// @@ -379,7 +373,7 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene Color currentTextColor=null; for(int i=startSeq; i 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