X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=775e954551d1bbb6e6ea3c88fd23da18a00f6db5;hb=5f7d80cd8b01e051a6175b0ce8db0ad94d73df2f;hp=eda94a046dc545fda0470ac783de07a4eb213687;hpb=b455b63542dbdceadd35a6e1ba7a655aeebb410a;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index eda94a0..775e954 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -15,19 +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 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); @@ -45,6 +48,24 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene RefreshPanels(); } }); + + 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 void highlightSearchResults(int [] results) @@ -75,19 +96,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 +133,8 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene if(av.getConservationSelected()) { - Alignment al = (Alignment)av.getAlignment(); - Conservation c = new Conservation("All", al.cons, + Alignment al = (Alignment)av.getAlignment(); + Conservation c = new Conservation("All", ResidueProperties.propHash, 3, al.getSequences(), 0, al.getWidth() ); @@ -110,171 +145,36 @@ 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(); - } - - boolean isNewSelection(SequenceGroup sg) - { - 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; - else - return seqCanvas.globalColorScheme; - } -*/ - -/* public void setColourScheme(jalview.schemes.ColourSchemeI cs, boolean conservation) - { - seqPanel.setColourScheme(cs, conservation); - - av.setGlobalColourScheme(cs); - - if(overviewPanel!=null) - overviewPanel.updateOverviewImage(); + RefreshPanels(); } - 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() { + requestFocus(); invalidate(); seqPanel.seqCanvas.paintFlag = true; idPanel.idCanvas.paintFlag = true; idPanelHolder.setPreferredSize( idPanel.idCanvas.getPreferredSize() ); + + 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); - validate(); - repaint(); if(overviewPanel!=null) overviewPanel.updateOverviewImage(); + validate(); + repaint(); + } int hextent = 0; @@ -299,6 +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() ); + + repaint(); } @@ -316,9 +218,24 @@ 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()); + // 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()); + } } @@ -330,8 +247,13 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene } + 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()); @@ -339,6 +261,7 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene int pheight = (int)pf.getImageableHeight(); int idWidth = (int)idPanel.idCanvas.getLabelWidth().getWidth(); + pg.setColor(Color.white); pg.fillRect(0,0,pwidth, pheight); pg.setFont( av.getFont() ); @@ -410,6 +333,77 @@ public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListene return Printable.PAGE_EXISTS; } + class VPanel extends javax.swing.JPanel + { + Image image; + public VPanel(Image i) + { + image = i; + repaint(); + } + public void paintComponent(Graphics g) + { + if(image!=null) + g.drawImage(image,0,0,this); + } + + } + + public int PrintWrappedAlignment(Graphics pg, PageFormat pf, int 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(); + + 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