From 890bd0eac47a4b0f55bd062a359c16a43c3780a0 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Tue, 27 Feb 2007 13:39:19 +0000 Subject: [PATCH] Use paintAlignment --- src/jalview/appletgui/APopupMenu.java | 10 +- src/jalview/appletgui/AlignFrame.java | 158 ++++++++++++--- src/jalview/appletgui/AlignViewport.java | 10 +- src/jalview/appletgui/AlignmentPanel.java | 37 +++- src/jalview/appletgui/AnnotationColourChooser.java | 18 +- src/jalview/appletgui/AnnotationLabels.java | 4 +- src/jalview/appletgui/CutAndPasteTransfer.java | 22 +- src/jalview/appletgui/FeatureSettings.java | 2 +- src/jalview/appletgui/FontChooser.java | 2 +- src/jalview/appletgui/IdPanel.java | 6 +- src/jalview/appletgui/OverviewPanel.java | 11 +- src/jalview/appletgui/RedundancyPanel.java | 2 +- src/jalview/appletgui/ScalePanel.java | 14 +- src/jalview/appletgui/SeqCanvas.java | 10 - src/jalview/appletgui/SeqPanel.java | 92 +++++++-- src/jalview/appletgui/SliderPanel.java | 5 +- src/jalview/appletgui/UserDefinedColours.java | 7 +- src/jalview/gui/AlignFrame.java | 211 +++++++++++++++----- src/jalview/gui/AlignViewport.java | 55 ++++- src/jalview/gui/AlignmentPanel.java | 87 ++------ src/jalview/gui/AnnotationColourChooser.java | 13 +- src/jalview/gui/AnnotationLabels.java | 4 +- src/jalview/gui/AnnotationPanel.java | 6 +- src/jalview/gui/FeatureSettings.java | 6 +- src/jalview/gui/FontChooser.java | 4 +- src/jalview/gui/IdPanel.java | 22 +- src/jalview/gui/IdwidthAdjuster.java | 2 +- src/jalview/gui/OverviewPanel.java | 9 - src/jalview/gui/PopupMenu.java | 77 +++---- src/jalview/gui/RedundancyPanel.java | 2 +- src/jalview/gui/ScalePanel.java | 14 +- src/jalview/gui/SeqCanvas.java | 10 - src/jalview/gui/SeqPanel.java | 104 ++++++---- src/jalview/gui/SliderPanel.java | 10 +- src/jalview/gui/TextColourChooser.java | 6 +- src/jalview/gui/UserDefinedColours.java | 4 +- src/jalview/io/DasSequenceFeatureFetcher.java | 2 +- src/jalview/io/WSWUBlastClient.java | 2 +- 38 files changed, 674 insertions(+), 386 deletions(-) diff --git a/src/jalview/appletgui/APopupMenu.java b/src/jalview/appletgui/APopupMenu.java index fde6bb8..a103073 100755 --- a/src/jalview/appletgui/APopupMenu.java +++ b/src/jalview/appletgui/APopupMenu.java @@ -436,7 +436,7 @@ public class APopupMenu { seq.setName(dialog.getName()); seq.setDescription(dialog.getDescription()); - ap.repaint(); + ap.paintAlignment(false); } } @@ -561,11 +561,7 @@ public class APopupMenu void refresh() { - ap.seqPanel.seqCanvas.repaint(); - if (ap.overviewPanel != null) - { - ap.overviewPanel.updateOverviewImage(); - } + ap.paintAlignment(true); } protected void clustalColour_actionPerformed() @@ -739,7 +735,7 @@ public class APopupMenu SequenceGroup sg = ap.av.getSelectionGroup(); ap.av.alignment.deleteGroup(sg); ap.av.setSelectionGroup(null); - ap.repaint(); + ap.paintAlignment(true); } public void showColourText_itemStateChanged() diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index a076345..b3296c7 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -137,7 +137,7 @@ public class AlignFrame DEFAULT_HEIGHT); } alignPanel.validate(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public AlignViewport getAlignViewport() @@ -183,7 +183,7 @@ public class AlignFrame } viewport.showSequenceFeatures = true; sequenceFeatures.setState(true); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } } @@ -253,18 +253,21 @@ public class AlignFrame break; case KeyEvent.VK_LEFT: - if (viewport.cursorMode) - { + if (evt.isAltDown() || !viewport.cursorMode) + slideSequences(false, + alignPanel.seqPanel.getKeyboardNo1()); + else alignPanel.seqPanel.moveCursor( -1, 0); - } break; case KeyEvent.VK_RIGHT: - if (viewport.cursorMode) - { - alignPanel.seqPanel.moveCursor(1, 0); - } - break; + if (evt.isAltDown() || !viewport.cursorMode) + slideSequences(true, + alignPanel.seqPanel.getKeyboardNo1()); + else + alignPanel.seqPanel.moveCursor( 1, 0); + break; + case KeyEvent.VK_SPACE: if (viewport.cursorMode) { @@ -476,7 +479,7 @@ public class AlignFrame break; } - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void keyReleased(KeyEvent evt) @@ -550,7 +553,7 @@ public class AlignFrame viewport.autocalculateConsensus = autoCalculate.getState(); } - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void actionPerformed(ActionEvent evt) @@ -652,7 +655,7 @@ public class AlignFrame else if (source == invertColSel) { viewport.invertColumnSelection(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } else if (source == remove2LeftMenuItem) { @@ -685,7 +688,7 @@ public class AlignFrame else if (source == showColumns) { viewport.showAllHiddenColumns(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } else if (source == showSeqs) { @@ -694,7 +697,7 @@ public class AlignFrame else if (source == hideColumns) { viewport.hideSelectedColumns(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } else if (source == hideSequences && viewport.getSelectionGroup() != null) { @@ -1177,7 +1180,101 @@ public class AlignFrame } } - alignPanel.repaint(); + alignPanel.paintAlignment(true); + } + + synchronized void slideSequences(boolean right, int size) + { + if(viewport.hasHiddenColumns) + { + System.out.println("Slide Sequences not available with hidden columns"); + return; + } + Vector sg = new Vector(); + if(viewport.cursorMode) + { + sg.addElement(viewport.alignment.getSequenceAt( + alignPanel.seqPanel.seqCanvas.cursorY)); + } + else if(viewport.getSelectionGroup()!=null + && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight()) + { + sg = viewport.getSelectionGroup().getSequences( + viewport.hiddenRepSequences); + } + + if(sg.size()<1) + { + return; + } + + Vector invertGroup = new Vector(); + + for (int i = 0; i < viewport.alignment.getHeight(); i++) + { + if(!sg.contains(viewport.alignment.getSequenceAt(i))) + invertGroup.add(viewport.alignment.getSequenceAt(i)); + } + + SequenceI[] seqs1 = new SequenceI[sg.size()]; + for (int i = 0; i < sg.size(); i++) + seqs1[i] = (SequenceI) sg.elementAt(i); + + SequenceI[] seqs2 = new SequenceI[invertGroup.size()]; + for (int i = 0; i < invertGroup.size(); i++) + seqs2[i] = (SequenceI) invertGroup.elementAt(i); + + SlideSequencesCommand ssc; + if (right) + ssc = new SlideSequencesCommand("Slide Sequences", + seqs2, seqs1, size, + viewport.getGapCharacter() + ); + else + ssc = new SlideSequencesCommand("Slide Sequences", + seqs1, seqs2, size, + viewport.getGapCharacter() + ); + + int groupAdjustment = 0; + if (ssc.getGapsInsertedBegin() && right) + { + if (viewport.cursorMode) + alignPanel.seqPanel.moveCursor(size, 0); + else + groupAdjustment = size; + } + else if (!ssc.getGapsInsertedBegin() && !right) + { + if (viewport.cursorMode) + alignPanel.seqPanel.moveCursor( -size, 0); + else + groupAdjustment = -size; + } + + if (groupAdjustment != 0) + { + viewport.getSelectionGroup().setStartRes( + viewport.getSelectionGroup().getStartRes() + groupAdjustment); + viewport.getSelectionGroup().setEndRes( + viewport.getSelectionGroup().getEndRes() + groupAdjustment); + } + + + boolean appendHistoryItem = false; + if(viewport.historyList!=null + && viewport.historyList.size()>0 + && viewport.historyList.peek() instanceof SlideSequencesCommand) + { + appendHistoryItem = ssc.appendSlideCommand( + (SlideSequencesCommand)viewport.historyList.peek()) + ; + } + + if(!appendHistoryItem) + addHistoryItem(ssc); + + repaint(); } static StringBuffer copiedSequences; @@ -1433,7 +1530,7 @@ public class AlignFrame viewport.sequenceColours = null; viewport.setSelectionGroup(null); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void selectAllSequenceMenuItem_actionPerformed() @@ -1445,7 +1542,7 @@ public class AlignFrame } sg.setEndRes(viewport.alignment.getWidth() - 1); viewport.setSelectionGroup(sg); - alignPanel.repaint(); + alignPanel.paintAlignment(true); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } @@ -1461,7 +1558,7 @@ public class AlignFrame viewport.setSelectionGroup(null); alignPanel.idPanel.idCanvas.searchResults = null; alignPanel.seqPanel.seqCanvas.highlightSearchResults(null); - alignPanel.repaint(); + alignPanel.paintAlignment(true); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } @@ -1700,13 +1797,13 @@ public class AlignFrame { viewport.setShowJVSuffix(seqLimits.getState()); alignPanel.fontChanged(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } protected void colourTextMenuItem_actionPerformed() { viewport.setColourText(colourTextMenuItem.getState()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } protected void wrapMenuItem_actionPerformed() @@ -1716,7 +1813,7 @@ public class AlignFrame scaleAbove.setEnabled(wrapMenuItem.getState()); scaleLeft.setEnabled(wrapMenuItem.getState()); scaleRight.setEnabled(wrapMenuItem.getState()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void overviewMenuItem_actionPerformed() @@ -1863,7 +1960,10 @@ public class AlignFrame alignPanel.getOverviewPanel().updateOverviewImage(); } - alignPanel.repaint(); + jalview.structure.StructureSelectionManager.getStructureSelectionManager() + .sequenceColoursChanged(alignPanel); + + alignPanel.paintAlignment(true); } protected void modifyPID_actionPerformed() @@ -1917,7 +2017,7 @@ public class AlignFrame viewport.getAlignment().getSequenceAt(0)); addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, viewport.alignment)); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void sortIDMenuItem_actionPerformed() @@ -1925,7 +2025,7 @@ public class AlignFrame // addHistoryItem(new HistoryItem("ID Sort", viewport.alignment, // HistoryItem.SORT)); AlignmentSorter.sortByID(viewport.getAlignment()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void sortGroupMenuItem_actionPerformed() @@ -1933,7 +2033,7 @@ public class AlignFrame // addHistoryItem(new HistoryItem("Group Sort", viewport.alignment, // HistoryItem.SORT)); AlignmentSorter.sortByGroup(viewport.getAlignment()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } @@ -1971,7 +2071,7 @@ public class AlignFrame current.insertCharAt(Width - 1, viewport.getGapCharacter()); } } - alignPanel.repaint(); + alignPanel.paintAlignment(true); } if ( (viewport.getSelectionGroup() != null && @@ -2030,7 +2130,7 @@ public class AlignFrame current.insertCharAt(Width - 1, viewport.getGapCharacter()); } } - alignPanel.repaint(); + alignPanel.paintAlignment(true); } @@ -2080,7 +2180,7 @@ public class AlignFrame // addHistoryItem(new HistoryItem("Sort", viewport.alignment, // HistoryItem.SORT)); AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } }); diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index 4e1da95..43831a2 100755 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -276,7 +276,7 @@ public class AlignViewport { if (ap != null) { - ap.repaint(); + ap.paintAlignment(true); } Thread.sleep(200); } @@ -393,7 +393,7 @@ public class AlignViewport if (ap != null) { - ap.repaint(); + ap.paintAlignment(true); } } @@ -454,7 +454,7 @@ public class AlignViewport { if (ap != null) { - ap.repaint(); + ap.paintAlignment(true); } Thread.sleep(200); @@ -532,7 +532,7 @@ public class AlignViewport if (ap != null) { - ap.repaint(); + ap.paintAlignment(true); } } } @@ -1032,7 +1032,7 @@ public class AlignViewport public void hideAllSelectedSeqs() { - if (selectionGroup == null) + if (selectionGroup == null || selectionGroup.getSize()<1) { return; } diff --git a/src/jalview/appletgui/AlignmentPanel.java b/src/jalview/appletgui/AlignmentPanel.java index db3cb8c..2b9e4e6 100755 --- a/src/jalview/appletgui/AlignmentPanel.java +++ b/src/jalview/appletgui/AlignmentPanel.java @@ -28,7 +28,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener { - AlignViewport av; + public AlignViewport av; OverviewPanel overviewPanel; SeqPanel seqPanel; IdPanel idPanel; @@ -115,6 +115,16 @@ public class AlignmentPanel } + public SequenceRenderer getSequenceRenderer() + { + return seqPanel.seqCanvas.sr; + } + + public FeatureRenderer getFeatureRenderer() + { + return seqPanel.seqCanvas.fr; + } + public void alignmentChanged() { av.alignmentChanged(this); @@ -502,6 +512,22 @@ public class AlignmentPanel } + public void paintAlignment(boolean updateOverview) + { + repaint(); + + if(updateOverview) + { + jalview.structure.StructureSelectionManager.getStructureSelectionManager() + .sequenceColoursChanged(this); + + if (overviewPanel != null) + { + overviewPanel.updateOverviewImage(); + } + } + } + public void update(Graphics g) { paint(g); @@ -548,15 +574,6 @@ public class AlignmentPanel scalePanel.repaint(); annotationPanel.repaint(); idPanel.idCanvas.repaint(); - - if (getBounds() == g.getClipBounds()) - { - if (overviewPanel != null) - { - overviewPanel.updateOverviewImage(); - } - } - } protected Panel sequenceHolderPanel = new Panel(); diff --git a/src/jalview/appletgui/AnnotationColourChooser.java b/src/jalview/appletgui/AnnotationColourChooser.java index 80d39e8..430bf65 100755 --- a/src/jalview/appletgui/AnnotationColourChooser.java +++ b/src/jalview/appletgui/AnnotationColourChooser.java @@ -28,7 +28,7 @@ import jalview.schemes.*; public class AnnotationColourChooser extends Panel implements ActionListener, - AdjustmentListener, ItemListener + AdjustmentListener, ItemListener, MouseListener { Frame frame; AlignViewport av; @@ -63,6 +63,7 @@ public class AnnotationColourChooser this.ap = ap; slider.addAdjustmentListener(this); + slider.addMouseListener(this); if (av.alignment.getAlignmentAnnotation() == null) { @@ -214,7 +215,7 @@ public class AnnotationColourChooser else if (evt.getSource() == cancel) { reset(); - ap.repaint(); + ap.paintAlignment(true); frame.setVisible(false); } @@ -253,7 +254,7 @@ public class AnnotationColourChooser } currentAnnotation.threshold.value = (float) slider.getValue() / 1000f; - ap.repaint(); + ap.paintAlignment(false); } } @@ -410,7 +411,7 @@ public class AnnotationColourChooser } } - ap.repaint(); + ap.paintAlignment(false); } void reset() @@ -426,8 +427,15 @@ public class AnnotationColourChooser sg.cs = (ColourSchemeI) oldgroupColours.get(sg); } } - ap.repaint(); + ap.paintAlignment(true); } + public void mouseClicked(MouseEvent evt){} + public void mousePressed(MouseEvent evt){} + public void mouseReleased(MouseEvent evt){ ap.paintAlignment(true);} + public void mouseEntered(MouseEvent evt){} + public void mouseExited(MouseEvent evt){} + + } diff --git a/src/jalview/appletgui/AnnotationLabels.java b/src/jalview/appletgui/AnnotationLabels.java index bf6d38d..cb17e64 100755 --- a/src/jalview/appletgui/AnnotationLabels.java +++ b/src/jalview/appletgui/AnnotationLabels.java @@ -148,7 +148,7 @@ public class AnnotationLabels ap.annotationPanel.adjustPanelHeight(); setSize(getSize().width, ap.annotationPanel.getSize().height); ap.validate(); - ap.repaint(); + ap.paintAlignment(true); } public void mouseMoved(MouseEvent evt) @@ -224,7 +224,7 @@ public class AnnotationLabels public void itemStateChanged(ItemEvent e) { ap.av.setIgnoreGapsConsensus(cbmi.getState()); - ap.repaint(); + ap.paintAlignment(true); } }); pop.add(cbmi); diff --git a/src/jalview/appletgui/CutAndPasteTransfer.java b/src/jalview/appletgui/CutAndPasteTransfer.java index b6e7460..2506752 100755 --- a/src/jalview/appletgui/CutAndPasteTransfer.java +++ b/src/jalview/appletgui/CutAndPasteTransfer.java @@ -31,7 +31,7 @@ public class CutAndPasteTransfer boolean pdbImport = false; boolean treeImport = false; boolean annotationImport = false; - Sequence seq; + Sequence seq; AlignFrame alignFrame; public CutAndPasteTransfer(boolean forImport, AlignFrame alignFrame) @@ -123,9 +123,23 @@ public class CutAndPasteTransfer if (pdbImport) { - new MCview.AppletPDBViewer(text, AppletFormatAdapter.PASTE, - seq, - alignFrame.getSeqcanvas()); + PDBEntry pdb = new PDBEntry(); + pdb.setFile(text); + + if ( alignFrame.alignPanel.av.applet.jmolAvailable ) + new jalview.appletgui.AppletJmol(pdb, + new Sequence[] + {seq}, + alignFrame.alignPanel, + AppletFormatAdapter.PASTE); + else + + new MCview.AppletPDBViewer(pdb, + new Sequence[] + {seq}, + alignFrame.alignPanel, + AppletFormatAdapter.PASTE); + } else if (treeImport) { diff --git a/src/jalview/appletgui/FeatureSettings.java b/src/jalview/appletgui/FeatureSettings.java index 9e40b1a..bb1394a 100755 --- a/src/jalview/appletgui/FeatureSettings.java +++ b/src/jalview/appletgui/FeatureSettings.java @@ -476,7 +476,7 @@ public class FeatureSettings fr.setColour(feature, col); featurePanel.removeAll(); resetTable(false); - ap.repaint(); + ap.paintAlignment(true); } public void mouseEntered(MouseEvent evt) diff --git a/src/jalview/appletgui/FontChooser.java b/src/jalview/appletgui/FontChooser.java index 112e1d4..87fa50f 100755 --- a/src/jalview/appletgui/FontChooser.java +++ b/src/jalview/appletgui/FontChooser.java @@ -138,7 +138,7 @@ public class FontChooser if (ap != null) { ap.av.setFont(oldFont); - ap.repaint(); + ap.paintAlignment(true); } else if (tp != null) { diff --git a/src/jalview/appletgui/IdPanel.java b/src/jalview/appletgui/IdPanel.java index 2acfa39..fee5dd4 100755 --- a/src/jalview/appletgui/IdPanel.java +++ b/src/jalview/appletgui/IdPanel.java @@ -117,7 +117,7 @@ public class IdPanel } lastid = seq; - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void mouseClicked(MouseEvent e) @@ -224,7 +224,7 @@ public class IdPanel selectSeq(seq); } - alignPanel.repaint(); + alignPanel.paintAlignment(true); } void selectSeq(int seq) @@ -340,7 +340,7 @@ public class IdPanel running = false; } - alignPanel.repaint(); + alignPanel.paintAlignment(true); try { Thread.sleep(100); diff --git a/src/jalview/appletgui/OverviewPanel.java b/src/jalview/appletgui/OverviewPanel.java index 0f70a51..7265489 100755 --- a/src/jalview/appletgui/OverviewPanel.java +++ b/src/jalview/appletgui/OverviewPanel.java @@ -192,7 +192,7 @@ public class OverviewPanel } ap.setScrollValues(col, row); - ap.repaint(); + ap.paintAlignment(false); } /** @@ -444,15 +444,6 @@ public class OverviewPanel og.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2); g.drawImage(offscreen, 0, 0, this); } - else - { - g.setColor(Color.white); - g.fillRect(0, 0, getSize().width, getSize().height); - g.setColor(Color.black); - g.setFont(new Font("Verdana", Font.BOLD, 15)); - g.drawString("Recalculating", 5, sequencesHeight / 2); - g.drawString("Overview.....", 5, (sequencesHeight / 2) + 20); - } } } diff --git a/src/jalview/appletgui/RedundancyPanel.java b/src/jalview/appletgui/RedundancyPanel.java index d2d4384..23180ce 100755 --- a/src/jalview/appletgui/RedundancyPanel.java +++ b/src/jalview/appletgui/RedundancyPanel.java @@ -276,7 +276,7 @@ public class RedundancyPanel ap.alignFrame.updateEditMenuBar(); } - ap.repaint(); + ap.paintAlignment(true); if (historyList.size() == 0) { diff --git a/src/jalview/appletgui/ScalePanel.java b/src/jalview/appletgui/ScalePanel.java index 07e83e7..b35fa6c 100755 --- a/src/jalview/appletgui/ScalePanel.java +++ b/src/jalview/appletgui/ScalePanel.java @@ -80,7 +80,7 @@ public class ScalePanel { av.showColumn(reveal[0]); reveal = null; - ap.repaint(); + ap.paintAlignment(true); if (ap.overviewPanel != null) { ap.overviewPanel.updateOverviewImage(); @@ -98,7 +98,7 @@ public class ScalePanel { av.showAllHiddenColumns(); reveal = null; - ap.repaint(); + ap.paintAlignment(true); if (ap.overviewPanel != null) { ap.overviewPanel.updateOverviewImage(); @@ -125,7 +125,7 @@ public class ScalePanel av.setSelectionGroup(null); } - ap.repaint(); + ap.paintAlignment(true); if (ap.overviewPanel != null) { ap.overviewPanel.updateOverviewImage(); @@ -168,7 +168,7 @@ public class ScalePanel } } - ap.repaint(); + ap.paintAlignment(true); } public void mouseReleased(MouseEvent evt) @@ -189,7 +189,7 @@ public class ScalePanel if (!stretchingGroup) { - ap.repaint(); + ap.paintAlignment(true); return; } @@ -206,7 +206,7 @@ public class ScalePanel } stretchingGroup = false; - ap.repaint(); + ap.paintAlignment(true); } public void mouseDragged(MouseEvent evt) @@ -271,7 +271,7 @@ public class ScalePanel } } - ap.repaint(); + ap.paintAlignment(true); } } diff --git a/src/jalview/appletgui/SeqCanvas.java b/src/jalview/appletgui/SeqCanvas.java index b9d3dfe..5fb956c 100755 --- a/src/jalview/appletgui/SeqCanvas.java +++ b/src/jalview/appletgui/SeqCanvas.java @@ -60,17 +60,11 @@ public class SeqCanvas return fr; } - MCview.AppletPDBCanvas pdbCanvas; public SequenceRenderer getSequenceRenderer() { return sr; } - public void setPDBCanvas(MCview.AppletPDBCanvas pc) - { - pdbCanvas = pc; - } - void drawNorthScale(Graphics g, int startx, int endx, int ypos) { int scalestartx = startx - startx % 10 + 10; @@ -319,10 +313,6 @@ public class SeqCanvas g.drawImage(img, 0, 0, this); - if (pdbCanvas != null) - { - pdbCanvas.updateSeqColours(); - } } int LABEL_WEST, LABEL_EAST; diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index b954608..f4f2cfd 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -27,9 +27,11 @@ import java.awt.event.*; import jalview.commands.*; import jalview.datamodel.*; import jalview.schemes.*; +import jalview.structure.SequenceListener; +import jalview.structure.StructureSelectionManager; public class SeqPanel - extends Panel implements MouseMotionListener, MouseListener + extends Panel implements MouseMotionListener, MouseListener, SequenceListener { public SeqCanvas seqCanvas; @@ -63,6 +65,9 @@ public class SeqPanel EditCommand editCommand; + StructureSelectionManager ssm; + + public SeqPanel(AlignViewport avp, AlignmentPanel p) { this.av = avp; @@ -75,6 +80,8 @@ public class SeqPanel seqCanvas.addMouseMotionListener(this); seqCanvas.addMouseListener(this); + ssm = StructureSelectionManager.getStructureSelectionManager(); + ssm.addStructureViewerListener(this); seqCanvas.repaint(); } @@ -99,13 +106,13 @@ public class SeqPanel void setCursorRow() { - seqCanvas.cursorY = getKeyboardNo(keyboardNo1) - 1; + seqCanvas.cursorY = getKeyboardNo1() - 1; scrollToVisible(); } void setCursorColumn() { - seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1; + seqCanvas.cursorX = getKeyboardNo1() - 1; scrollToVisible(); } @@ -117,8 +124,8 @@ public class SeqPanel } else { - seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1; - seqCanvas.cursorY = getKeyboardNo(keyboardNo2) - 1; + seqCanvas.cursorX = getKeyboardNo1() - 1; + seqCanvas.cursorY = getKeyboardNo2() - 1; scrollToVisible(); } } @@ -129,7 +136,7 @@ public class SeqPanel (Sequence) av.getAlignment().getSequenceAt(seqCanvas.cursorY); seqCanvas.cursorX = sequence.findIndex( - getKeyboardNo(keyboardNo1) - 1 + getKeyboardNo1() - 1 ); scrollToVisible(); } @@ -287,7 +294,7 @@ public class SeqPanel av.setSelectionGroup(sg); } - ap.repaint(); + ap.paintAlignment(false); } void insertGapAtCursor(boolean group) @@ -295,7 +302,7 @@ public class SeqPanel groupEditing = group; startseq = seqCanvas.cursorY; lastres = seqCanvas.cursorX; - editSequence(true, seqCanvas.cursorX + getKeyboardNo(keyboardNo1)); + editSequence(true, seqCanvas.cursorX + getKeyboardNo1()); endEditing(); } @@ -303,7 +310,7 @@ public class SeqPanel { groupEditing = group; startseq = seqCanvas.cursorY; - lastres = seqCanvas.cursorX + getKeyboardNo(keyboardNo1); + lastres = seqCanvas.cursorX + getKeyboardNo1(); editSequence(false, seqCanvas.cursorX); endEditing(); } @@ -325,18 +332,31 @@ public class SeqPanel } } - int getKeyboardNo(StringBuffer kb) + int getKeyboardNo1() { - if (kb == null) - { + if (keyboardNo1 == null) return 1; + else + { + int value = Integer.parseInt(keyboardNo1.toString()); + keyboardNo1 = null; + return value; } + } + + int getKeyboardNo2() + { + if (keyboardNo2 == null) + return 1; else { - return Integer.parseInt(kb.toString()); + int value = Integer.parseInt(keyboardNo2.toString()); + keyboardNo2 = null; + return value; } } + void setStatusMessage(SequenceI sequence, int res, int seq) { StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " + @@ -434,6 +454,7 @@ public class SeqPanel { mouseDragging = false; mouseWheelPressed = false; + ap.paintAlignment(true); if (!editingSeqs) { @@ -442,7 +463,7 @@ public class SeqPanel } endEditing(); - ap.repaint(); + } int startWrapBlock = -1; @@ -558,6 +579,34 @@ public class SeqPanel return; } + + String lastMessage; + public void mouseOverSequence(SequenceI sequence, int index) + { + String tmp = sequence.hashCode()+index+""; + if (lastMessage == null || !lastMessage.equals(tmp)) + ssm.mouseOverSequence(sequence, index); + + lastMessage = tmp; + } + + + public void highlightSequence(jalview.datamodel.SequenceI seq, int index) + { + if(av.alignment.findIndex(seq)>-1) + { + SearchResults highlight = new SearchResults(); + highlight.addResult(seq,index,index); + seqCanvas.highlightSearchResults(highlight); + } + } + + public void updateColours(SequenceI seq, int index) + { + System.out.println("update the seqPanel colours"); + //repaint(); + } + public void mouseMoved(MouseEvent evt) { int res = findRes(evt); @@ -582,6 +631,11 @@ public class SeqPanel return; } + + if (ssm != null) + mouseOverSequence(sequence, sequence.findPosition(res)); + + StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " + sequence.getName()); @@ -612,11 +666,6 @@ public class SeqPanel } } - if (seqCanvas.pdbCanvas != null && sequence == seqCanvas.pdbCanvas.sequence) - { - seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res)); - } - ap.alignFrame.statusBar.setText(text.toString()); StringBuffer tooltipText = new StringBuffer(); @@ -764,7 +813,7 @@ public class SeqPanel lastMousePress = evt.getPoint(); - ap.repaint(); + ap.paintAlignment(false); ap.annotationPanel.image = null; return; } @@ -1293,7 +1342,6 @@ public class SeqPanel APopupMenu popup = new APopupMenu(ap, null, links); this.add(popup); popup.show(this, evt.getX(), evt.getY()); - ap.repaint(); return; } @@ -1371,7 +1419,7 @@ public class SeqPanel changeStartRes = false; stretchGroup = null; PaintRefresher.Refresh(ap, av.getSequenceSetId()); - ap.repaint(); + ap.paintAlignment(true); } public void doMouseDraggedDefineMode(MouseEvent evt) diff --git a/src/jalview/appletgui/SliderPanel.java b/src/jalview/appletgui/SliderPanel.java index c87f7c2..8507331 100755 --- a/src/jalview/appletgui/SliderPanel.java +++ b/src/jalview/appletgui/SliderPanel.java @@ -349,10 +349,7 @@ public class SliderPanel public void mouseReleased(MouseEvent evt) { - if (ap.overviewPanel != null) - { - ap.overviewPanel.updateOverviewImage(); - } + ap.paintAlignment(true); } public void mouseClicked(MouseEvent evt) diff --git a/src/jalview/appletgui/UserDefinedColours.java b/src/jalview/appletgui/UserDefinedColours.java index af08b75..de1cff7 100755 --- a/src/jalview/appletgui/UserDefinedColours.java +++ b/src/jalview/appletgui/UserDefinedColours.java @@ -343,12 +343,11 @@ public class UserDefinedColours ap.av.setGlobalColourScheme(ucs); } ap.seqPanel.seqCanvas.img = null; - ap.repaint(); + ap.paintAlignment(true); } else if (pdbcanvas != null) { - pdbcanvas.pdb.setColours(ucs); - pdbcanvas.updateSeqColours(); + pdbcanvas.setColours(ucs); } } @@ -397,7 +396,7 @@ public class UserDefinedColours { ap.av.setGlobalColourScheme(ucs); } - ap.repaint(); + ap.paintAlignment(true); } else if (pdbcanvas != null) { diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index ae814c1..8c9246b 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -183,39 +183,36 @@ public class AlignFrame break; case KeyEvent.VK_DOWN: - if (viewport.cursorMode) - { - alignPanel.seqPanel.moveCursor(0, 1); - } - else - { + if (evt.isAltDown() || !viewport.cursorMode) moveSelectedSequences(false); - } + if(viewport.cursorMode) + alignPanel.seqPanel.moveCursor(0, 1); break; case KeyEvent.VK_UP: - if (viewport.cursorMode) - { - alignPanel.seqPanel.moveCursor(0, -1); - } - else - { + if (evt.isAltDown() || !viewport.cursorMode) moveSelectedSequences(true); - } + if(viewport.cursorMode) + alignPanel.seqPanel.moveCursor(0, -1); + break; case KeyEvent.VK_LEFT: - if (viewport.cursorMode) - { + if (evt.isAltDown() || !viewport.cursorMode) + slideSequences(false, + alignPanel.seqPanel.getKeyboardNo1()); + else alignPanel.seqPanel.moveCursor( -1, 0); - } + + break; case KeyEvent.VK_RIGHT: - if (viewport.cursorMode) - { - alignPanel.seqPanel.moveCursor(1, 0); - } + if (evt.isAltDown() || !viewport.cursorMode) + slideSequences(true, + alignPanel.seqPanel.getKeyboardNo1()); + else + alignPanel.seqPanel.moveCursor( 1, 0); break; case KeyEvent.VK_SPACE: @@ -376,6 +373,24 @@ public class AlignFrame break; } } + + public void keyReleased(KeyEvent evt) + { + switch(evt.getKeyCode()) + { + case KeyEvent.VK_LEFT: + if (evt.isAltDown() || !viewport.cursorMode) + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); + break; + + case KeyEvent.VK_RIGHT: + if (evt.isAltDown() || !viewport.cursorMode) + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); + break; + } + } }); } @@ -1158,9 +1173,108 @@ public class AlignFrame } } - alignPanel.repaint(); + alignPanel.paintAlignment(true); } + + synchronized void slideSequences(boolean right, int size) + { + if(viewport.hasHiddenColumns) + { + JOptionPane.showInternalMessageDialog(Desktop.desktop, + "Slide Sequences not available with hidden columns", + "Slide Sequence not Available", + JOptionPane.WARNING_MESSAGE); + return; + } + Vector sg = new Vector(); + if(viewport.cursorMode) + { + sg.addElement(viewport.alignment.getSequenceAt( + alignPanel.seqPanel.seqCanvas.cursorY)); + } + else if(viewport.getSelectionGroup()!=null + && viewport.getSelectionGroup().getSize()!=viewport.alignment.getHeight()) + { + sg = viewport.getSelectionGroup().getSequences( + viewport.hiddenRepSequences); + } + + if(sg.size()<1) + { + return; + } + + Vector invertGroup = new Vector(); + + for (int i = 0; i < viewport.alignment.getHeight(); i++) + { + if(!sg.contains(viewport.alignment.getSequenceAt(i))) + invertGroup.add(viewport.alignment.getSequenceAt(i)); + } + + SequenceI[] seqs1 = new SequenceI[sg.size()]; + for (int i = 0; i < sg.size(); i++) + seqs1[i] = (SequenceI) sg.elementAt(i); + + SequenceI[] seqs2 = new SequenceI[invertGroup.size()]; + for (int i = 0; i < invertGroup.size(); i++) + seqs2[i] = (SequenceI) invertGroup.elementAt(i); + + SlideSequencesCommand ssc; + if (right) + ssc = new SlideSequencesCommand("Slide Sequences", + seqs2, seqs1, size, + viewport.getGapCharacter() + ); + else + ssc = new SlideSequencesCommand("Slide Sequences", + seqs1, seqs2, size, + viewport.getGapCharacter() + ); + + int groupAdjustment = 0; + if (ssc.getGapsInsertedBegin() && right) + { + if (viewport.cursorMode) + alignPanel.seqPanel.moveCursor(size, 0); + else + groupAdjustment = size; + } + else if (!ssc.getGapsInsertedBegin() && !right) + { + if (viewport.cursorMode) + alignPanel.seqPanel.moveCursor( -size, 0); + else + groupAdjustment = -size; + } + + if (groupAdjustment != 0) + { + viewport.getSelectionGroup().setStartRes( + viewport.getSelectionGroup().getStartRes() + groupAdjustment); + viewport.getSelectionGroup().setEndRes( + viewport.getSelectionGroup().getEndRes() + groupAdjustment); + } + + + boolean appendHistoryItem = false; + if(viewport.historyList!=null + && viewport.historyList.size()>0 + && viewport.historyList.peek() instanceof SlideSequencesCommand) + { + appendHistoryItem = ssc.appendSlideCommand( + (SlideSequencesCommand)viewport.historyList.peek()) + ; + } + + if(!appendHistoryItem) + addHistoryItem(ssc); + + repaint(); + } + + /** * DOCUMENT ME! * @@ -1531,7 +1645,7 @@ public class AlignFrame viewport.sequenceColours = null; viewport.setSelectionGroup(null); PaintRefresher.Refresh(this, viewport.getSequenceSetId()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -1551,7 +1665,7 @@ public class AlignFrame sg.setEndRes(viewport.alignment.getWidth() - 1); viewport.setSelectionGroup(sg); - alignPanel.repaint(); + alignPanel.paintAlignment(true); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } @@ -1572,7 +1686,7 @@ public class AlignFrame viewport.setSelectionGroup(null); alignPanel.seqPanel.seqCanvas.highlightSearchResults(null); alignPanel.idPanel.idCanvas.searchResults = null; - alignPanel.repaint(); + alignPanel.paintAlignment(true); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } @@ -1598,7 +1712,7 @@ public class AlignFrame sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false); } - alignPanel.repaint(); + alignPanel.paintAlignment(true); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } @@ -1606,7 +1720,7 @@ public class AlignFrame public void invertColSel_actionPerformed(ActionEvent e) { viewport.invertColumnSelection(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -1888,13 +2002,13 @@ public class AlignFrame viewport.setShowJVSuffix(seqLimits.isSelected()); alignPanel.idPanel.idCanvas.setPreferredSize(alignPanel.calculateIdWidth()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void idRightAlign_actionPerformed(ActionEvent e) { viewport.rightAlignIds = idRightAlign.isSelected(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -1905,7 +2019,7 @@ public class AlignFrame protected void colourTextMenuItem_actionPerformed(ActionEvent e) { viewport.setColourText(colourTextMenuItem.isSelected()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -1936,13 +2050,13 @@ public class AlignFrame public void hideSelSequences_actionPerformed(ActionEvent e) { viewport.hideAllSelectedSeqs(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void hideSelColumns_actionPerformed(ActionEvent e) { viewport.hideSelectedColumns(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public void hiddenMarkers_actionPerformed(ActionEvent e) @@ -1959,7 +2073,7 @@ public class AlignFrame protected void scaleAbove_actionPerformed(ActionEvent e) { viewport.setScaleAboveWrapped(scaleAbove.isSelected()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -1970,7 +2084,7 @@ public class AlignFrame protected void scaleLeft_actionPerformed(ActionEvent e) { viewport.setScaleLeftWrapped(scaleLeft.isSelected()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -1981,7 +2095,7 @@ public class AlignFrame protected void scaleRight_actionPerformed(ActionEvent e) { viewport.setScaleRightWrapped(scaleRight.isSelected()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -1992,7 +2106,7 @@ public class AlignFrame public void viewBoxesMenuItem_actionPerformed(ActionEvent e) { viewport.setShowBoxes(viewBoxesMenuItem.isSelected()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -2003,7 +2117,7 @@ public class AlignFrame public void viewTextMenuItem_actionPerformed(ActionEvent e) { viewport.setShowText(viewTextMenuItem.isSelected()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -2014,7 +2128,7 @@ public class AlignFrame protected void renderGapsMenuItem_actionPerformed(ActionEvent e) { viewport.setRenderGaps(renderGapsMenuItem.isSelected()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } public FeatureSettings featureSettings; @@ -2036,7 +2150,7 @@ public class AlignFrame public void showSeqFeatures_actionPerformed(ActionEvent evt) { viewport.setShowSequenceFeatures(showSeqFeatures.isSelected()); - alignPanel.repaint(); + alignPanel.paintAlignment(true); if (alignPanel.getOverviewPanel() != null) { alignPanel.getOverviewPanel().updateOverviewImage(); @@ -2334,7 +2448,10 @@ public class AlignFrame alignPanel.getOverviewPanel().updateOverviewImage(); } - alignPanel.repaint(); + + + + alignPanel.paintAlignment(true); } /** @@ -2526,7 +2643,7 @@ public class AlignFrame viewport.getAlignment().getSequenceAt(0)); addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, viewport.alignment)); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -2539,7 +2656,7 @@ public class AlignFrame SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByID(viewport.getAlignment()); addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment)); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -2553,7 +2670,7 @@ public class AlignFrame AlignmentSorter.sortByGroup(viewport.getAlignment()); addHistoryItem(new OrderCommand("Group Sort", oldOrder, viewport.alignment)); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -2766,7 +2883,7 @@ public class AlignFrame addHistoryItem(new OrderCommand(order.getName(), oldOrder, viewport.alignment)); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } }); } @@ -2822,7 +2939,7 @@ public class AlignFrame oldOrder, viewport.alignment)); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } }); @@ -3254,7 +3371,7 @@ public class AlignFrame { viewport.showSequenceFeatures = true; showSeqFeatures.setSelected(true); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } return featuresFile; @@ -3366,7 +3483,7 @@ public class AlignFrame viewport.getAlignment(), 0, false); alignPanel.adjustAnnotationHeight(); - alignPanel.repaint(); + alignPanel.paintAlignment(true); } else { diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index cfffbb9..fa458a6 100755 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -292,7 +292,7 @@ public class AlignViewport { if (ap != null) { - ap.repaint(); + ap.paintAlignment(true); } Thread.sleep(200); } @@ -425,7 +425,7 @@ public class AlignViewport if (ap != null) { - ap.repaint(); + ap.paintAlignment(true); } } @@ -486,7 +486,7 @@ public class AlignViewport { if (ap != null) { - ap.repaint(); + ap.paintAlignment(true); } Thread.sleep(200); @@ -577,7 +577,7 @@ public class AlignViewport if (ap != null) { - ap.repaint(); + ap.paintAlignment(true); } } } @@ -1334,7 +1334,7 @@ public class AlignViewport public void hideAllSelectedSeqs() { - if (selectionGroup == null) + if (selectionGroup == null || selectionGroup.getSize()<1) { return; } @@ -1629,6 +1629,51 @@ public class AlignViewport return selection; } + public int [][] getVisibleRegionBoundaries(int min, int max) + { + Vector regions = new Vector(); + int start = min; + int end = max; + + do + { + if (hasHiddenColumns) + { + if (start == 0) + { + start = colSel.adjustForHiddenColumns(start); + } + + end = colSel.getHiddenBoundaryRight(start); + if (start == end) + { + end = max; + } + if (end > max) + { + end = max; + } + } + + regions.addElement(new int[] + {start, end}); + + if (hasHiddenColumns) + { + start = colSel.adjustForHiddenColumns(end); + start = colSel.getHiddenBoundaryLeft(start) + 1; + } + } + while (end < max); + + int[][] startEnd = new int[regions.size()][2]; + + regions.copyInto(startEnd); + + return startEnd; + + } + public boolean getShowHiddenMarkers() { return showHiddenMarkers; diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 62ee200..cdff8a3 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -558,6 +558,22 @@ public class AlignmentPanel } } + public void paintAlignment(boolean updateOverview) + { + repaint(); + + if(updateOverview) + { + jalview.structure.StructureSelectionManager.getStructureSelectionManager() + .sequenceColoursChanged(this); + + if (overviewPanel != null) + { + overviewPanel.updateOverviewImage(); + } + } + } + /** * DOCUMENT ME! * @@ -598,12 +614,6 @@ public class AlignmentPanel { setScrollValues(av.getStartRes(), av.getStartSeq()); } - - if (this.getVisibleRect().getBounds() == g.getClipBounds() - && overviewPanel != null) - { - overviewPanel.updateOverviewImage(); - } } /** @@ -1190,69 +1200,4 @@ public class AlignmentPanel return height; } - - /** - * DOCUMENT ME! - * - * @author $author$ - * @version $Revision$ - */ - class Preview - extends JFrame - { - /** - * Creates a new Preview object. - * - * @param image DOCUMENT ME! - */ - public Preview(Image image) - { - setResizable(true); - setSize(image.getWidth(this), image.getHeight(this)); - setVisible(true); - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(new PreviewPanel(image), BorderLayout.CENTER); - validate(); - repaint(); - } - } - - /** - * DOCUMENT ME! - * - * @author $author$ - * @version $Revision$ - */ - class PreviewPanel - extends JPanel - { - Image image; - - /** - * Creates a new PreviewPanel object. - * - * @param image DOCUMENT ME! - */ - public PreviewPanel(Image image) - { - this.image = image; - } - - /** - * DOCUMENT ME! - * - * @param g DOCUMENT ME! - */ - public void paintComponent(Graphics g) - { - if (image != null) - { - g.drawImage(image, 0, 0, this); - } - else - { - System.out.println("DEBUG:image is null"); - } - } - } } diff --git a/src/jalview/gui/AnnotationColourChooser.java b/src/jalview/gui/AnnotationColourChooser.java index ba76858..31c7ba7 100755 --- a/src/jalview/gui/AnnotationColourChooser.java +++ b/src/jalview/gui/AnnotationColourChooser.java @@ -39,7 +39,7 @@ public class AnnotationColourChooser jalview.datamodel.AlignmentAnnotation currentAnnotation; boolean adjusting = false; - public AnnotationColourChooser(AlignViewport av, AlignmentPanel ap) + public AnnotationColourChooser(AlignViewport av, final AlignmentPanel ap) { oldcs = av.getGlobalColourScheme(); if (av.alignment.getGroups() != null) @@ -81,6 +81,13 @@ public class AnnotationColourChooser } } }); + slider.addMouseListener(new MouseAdapter() + { + public void mouseReleased(MouseEvent evt) + { + ap.paintAlignment(true); + } + }); if (av.alignment.getAlignmentAnnotation() == null) { @@ -405,7 +412,7 @@ public class AnnotationColourChooser } } - ap.repaint(); + ap.paintAlignment(false); } public void ok_actionPerformed(ActionEvent e) @@ -480,7 +487,7 @@ public class AnnotationColourChooser } currentAnnotation.threshold.value = (float) slider.getValue() / 1000f; - ap.repaint(); + ap.paintAlignment(false); } public void currentColours_actionPerformed(ActionEvent e) diff --git a/src/jalview/gui/AnnotationLabels.java b/src/jalview/gui/AnnotationLabels.java index 3f8478a..81a3cd2 100755 --- a/src/jalview/gui/AnnotationLabels.java +++ b/src/jalview/gui/AnnotationLabels.java @@ -221,7 +221,7 @@ public class AnnotationLabels ap.annotationPanel.adjustPanelHeight(); ap.annotationScroller.validate(); - ap.repaint(); + ap.paintAlignment(true); } /** @@ -345,7 +345,7 @@ public class AnnotationLabels d = ap.annotationSpaceFillerHolder.getPreferredSize(); ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension( d.width, d.height - dif)); - ap.repaint(); + ap.paintAlignment(true); } ap.addNotify(); diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 895d196..ecc1d29 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -383,7 +383,7 @@ public class AnnotationPanel av.setSelectionGroup(sg); } - ap.repaint(); + ap.paintAlignment(true); } @@ -442,7 +442,7 @@ public class AnnotationPanel } graphStretchY = evt.getY(); adjustPanelHeight(); - ap.repaint(); + ap.paintAlignment(true); } else { @@ -495,7 +495,7 @@ public class AnnotationPanel } } - ap.repaint(); + ap.paintAlignment(true); } } diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 955684c..63b02cb 100755 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -376,7 +376,7 @@ public class FeatureSettings } setTableData(); - af.alignPanel.repaint(); + af.alignPanel.paintAlignment(true); } catch (Exception ex) { @@ -456,7 +456,7 @@ public class FeatureSettings public void updateFeatureRenderer(Object[][] data) { fr.setFeaturePriority(data); - af.alignPanel.repaint(); + af.alignPanel.paintAlignment(true); if (af.alignPanel.overviewPanel != null) { @@ -539,7 +539,7 @@ public class FeatureSettings public void stateChanged(ChangeEvent evt) { fr.setTransparency( (float) (100 - transparency.getValue()) / 100f); - af.alignPanel.repaint(); + af.alignPanel.paintAlignment(true); } }); diff --git a/src/jalview/gui/FontChooser.java b/src/jalview/gui/FontChooser.java index 0263836..aaf0abc 100755 --- a/src/jalview/gui/FontChooser.java +++ b/src/jalview/gui/FontChooser.java @@ -117,7 +117,7 @@ public class FontChooser { ap.av.antiAlias = smoothFont.isSelected(); ap.annotationPanel.image = null; - ap.repaint(); + ap.paintAlignment(true); } /** @@ -154,7 +154,7 @@ public class FontChooser if (ap != null) { ap.av.setFont(oldFont); - ap.repaint(); + ap.paintAlignment(true); } else if (tp != null) { diff --git a/src/jalview/gui/IdPanel.java b/src/jalview/gui/IdPanel.java index e3a81dc..d80c4b8 100755 --- a/src/jalview/gui/IdPanel.java +++ b/src/jalview/gui/IdPanel.java @@ -32,7 +32,7 @@ import jalview.datamodel.*; */ public class IdPanel extends JPanel implements MouseListener, - MouseMotionListener + MouseMotionListener, MouseWheelListener { protected IdCanvas idCanvas; protected AlignViewport av; @@ -58,6 +58,7 @@ public class IdPanel add(idCanvas, BorderLayout.CENTER); addMouseListener(this); addMouseMotionListener(this); + addMouseWheelListener(this); ToolTipManager.sharedInstance().registerComponent(this); } @@ -136,7 +137,20 @@ public class IdPanel } lastid = seq; - alignPanel.repaint(); + alignPanel.paintAlignment(true); + } + + public void mouseWheelMoved(MouseWheelEvent e) + { + e.consume(); + if (e.getWheelRotation() > 0) + { + alignPanel.scrollUp(false); + } + else + { + alignPanel.scrollUp(true); + } } /** @@ -267,7 +281,7 @@ public class IdPanel selectSeq(seq); } - alignPanel.repaint(); + alignPanel.paintAlignment(true); } /** @@ -407,7 +421,7 @@ public class IdPanel running = false; } - alignPanel.repaint(); + alignPanel.paintAlignment(true); try { diff --git a/src/jalview/gui/IdwidthAdjuster.java b/src/jalview/gui/IdwidthAdjuster.java index fc732ad..1c7d215 100755 --- a/src/jalview/gui/IdwidthAdjuster.java +++ b/src/jalview/gui/IdwidthAdjuster.java @@ -116,7 +116,7 @@ public class IdwidthAdjuster { ap.idPanel.idCanvas.setPreferredSize(new Dimension(d.width + dif, d.height)); - ap.repaint(); + ap.paintAlignment(true); } oldX = evt.getX(); diff --git a/src/jalview/gui/OverviewPanel.java b/src/jalview/gui/OverviewPanel.java index 7500a93..aa3c9ae 100755 --- a/src/jalview/gui/OverviewPanel.java +++ b/src/jalview/gui/OverviewPanel.java @@ -433,15 +433,6 @@ public class OverviewPanel { g.drawImage(miniMe, 0, 0, this); } - else - { - g.setColor(Color.white); - g.fillRect(0, 0, getWidth(), getHeight()); - g.setColor(Color.black); - g.setFont(new Font("Verdana", Font.BOLD, 15)); - g.drawString("Recalculating", 5, sequencesHeight / 2); - g.drawString("Overview.....", 5, (sequencesHeight / 2) + 20); - } g.setColor(Color.red); g.drawRect(boxX, boxY, boxWidth, boxHeight); diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index f1a38f5..09e2c01 100755 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -160,7 +160,32 @@ public class PopupMenu { public void actionPerformed(ActionEvent e) { - new PDBViewer(pdb, sequence, ap.seqPanel.seqCanvas); + + Vector seqs = new Vector(); + for (int i = 0; i < ap.av.alignment.getHeight(); i++) + { + Vector pdbs = ap.av.alignment.getSequenceAt(i).getDatasetSequence().getPDBId(); + if(pdbs==null) + continue; + + for(int p=0; p sg.getEndRes()) - { - end = sg.getEndRes() + 1; - } - } - - regions.addElement(new int[] - {start, end}); - - if (ap.av.hasHiddenColumns) - { - start = ap.av.colSel.adjustForHiddenColumns(end); - start = ap.av.colSel.getHiddenBoundaryLeft(start) + 1; - } - } - while (end < sg.getEndRes()); - - int[][] startEnd = new int[regions.size()][2]; - for (int i = 0; i < regions.size(); i++) - { - startEnd[i] = (int[]) regions.elementAt(i); - } + int[][] startEnd = ap.av.getVisibleRegionBoundaries( + sg.getStartRes(), sg.getEndRes() + 1); String description; int caseChange; diff --git a/src/jalview/gui/RedundancyPanel.java b/src/jalview/gui/RedundancyPanel.java index aa73383..6f5b09d 100755 --- a/src/jalview/gui/RedundancyPanel.java +++ b/src/jalview/gui/RedundancyPanel.java @@ -306,7 +306,7 @@ public class RedundancyPanel af.updateEditMenuBar(); } - ap.repaint(); + ap.paintAlignment(true); if (historyList.size() == 0) { diff --git a/src/jalview/gui/ScalePanel.java b/src/jalview/gui/ScalePanel.java index ebf25bf..36b414f 100755 --- a/src/jalview/gui/ScalePanel.java +++ b/src/jalview/gui/ScalePanel.java @@ -88,7 +88,7 @@ public class ScalePanel { av.showColumn(reveal[0]); reveal = null; - ap.repaint(); + ap.paintAlignment(true); if (ap.overviewPanel != null) { ap.overviewPanel.updateOverviewImage(); @@ -106,7 +106,7 @@ public class ScalePanel { av.showAllHiddenColumns(); reveal = null; - ap.repaint(); + ap.paintAlignment(true); if (ap.overviewPanel != null) { ap.overviewPanel.updateOverviewImage(); @@ -131,7 +131,7 @@ public class ScalePanel av.setSelectionGroup(null); } - ap.repaint(); + ap.paintAlignment(true); if (ap.overviewPanel != null) { ap.overviewPanel.updateOverviewImage(); @@ -174,7 +174,7 @@ public class ScalePanel } - ap.repaint(); + ap.paintAlignment(true); } /** @@ -200,7 +200,7 @@ public class ScalePanel if (!stretchingGroup) { - ap.repaint(); + ap.paintAlignment(true); return; } @@ -219,7 +219,7 @@ public class ScalePanel } } stretchingGroup = false; - ap.repaint(); + ap.paintAlignment(true); } /** @@ -289,7 +289,7 @@ public class ScalePanel } } - ap.repaint(); + ap.paintAlignment(true); } } diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index 6a41772..ec55600 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -63,7 +63,6 @@ public class SeqCanvas setBackground(Color.white); } - MCview.PDBCanvas pdbCanvas; public SequenceRenderer getSequenceRenderer() { return sr; @@ -74,11 +73,6 @@ public class SeqCanvas return fr; } - public void setPDBCanvas(MCview.PDBCanvas pc) - { - pdbCanvas = pc; - } - public AlignViewport getViewport() { return av; @@ -377,10 +371,6 @@ public class SeqCanvas g.drawImage(img, 0, 0, this); - if (pdbCanvas != null) - { - pdbCanvas.updateSeqColours(); - } } diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index a20165a..0b9af01 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -27,6 +27,7 @@ import javax.swing.*; import jalview.commands.*; import jalview.datamodel.*; import jalview.schemes.*; +import jalview.structure.*; /** * DOCUMENT ME! @@ -36,7 +37,7 @@ import jalview.schemes.*; */ public class SeqPanel extends JPanel implements MouseListener, - MouseMotionListener, MouseWheelListener + MouseMotionListener, MouseWheelListener, SequenceListener { /** DOCUMENT ME!! */ @@ -76,6 +77,9 @@ public class SeqPanel EditCommand editCommand; + StructureSelectionManager ssm; + + /** * Creates a new SeqPanel object. * @@ -102,6 +106,8 @@ public class SeqPanel addMouseMotionListener(this); addMouseListener(this); addMouseWheelListener(this); + ssm = StructureSelectionManager.getStructureSelectionManager(); + ssm.addStructureViewerListener(this); } } @@ -258,13 +264,13 @@ public class SeqPanel void setCursorRow() { - seqCanvas.cursorY = getKeyboardNo(keyboardNo1) - 1; + seqCanvas.cursorY = getKeyboardNo1() - 1; scrollToVisible(); } void setCursorColumn() { - seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1; + seqCanvas.cursorX = getKeyboardNo1() - 1; scrollToVisible(); } @@ -276,8 +282,8 @@ public class SeqPanel } else { - seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1; - seqCanvas.cursorY = getKeyboardNo(keyboardNo2) - 1; + seqCanvas.cursorX = getKeyboardNo1() - 1; + seqCanvas.cursorY = getKeyboardNo2() - 1; scrollToVisible(); } } @@ -288,7 +294,7 @@ public class SeqPanel (Sequence) av.getAlignment().getSequenceAt(seqCanvas.cursorY); seqCanvas.cursorX = sequence.findIndex( - getKeyboardNo(keyboardNo1) - 1 + getKeyboardNo1() - 1 ); scrollToVisible(); } @@ -449,7 +455,7 @@ public class SeqPanel av.setSelectionGroup(sg); } - ap.repaint(); + ap.paintAlignment(false); } void insertGapAtCursor(boolean group) @@ -457,7 +463,7 @@ public class SeqPanel groupEditing = group; startseq = seqCanvas.cursorY; lastres = seqCanvas.cursorX; - editSequence(true, seqCanvas.cursorX + getKeyboardNo(keyboardNo1)); + editSequence(true, seqCanvas.cursorX + getKeyboardNo1()); endEditing(); } @@ -465,7 +471,7 @@ public class SeqPanel { groupEditing = group; startseq = seqCanvas.cursorY; - lastres = seqCanvas.cursorX + getKeyboardNo(keyboardNo1); + lastres = seqCanvas.cursorX + getKeyboardNo1(); editSequence(false, seqCanvas.cursorX); endEditing(); } @@ -487,15 +493,27 @@ public class SeqPanel } } - int getKeyboardNo(StringBuffer kb) + int getKeyboardNo1() { - if (kb == null) - { + if (keyboardNo1 == null) return 1; + else + { + int value = Integer.parseInt(keyboardNo1.toString()); + keyboardNo1 = null; + return value; } + } + + int getKeyboardNo2() + { + if (keyboardNo2 == null) + return 1; else { - return Integer.parseInt(kb.toString()); + int value = Integer.parseInt(keyboardNo2.toString()); + keyboardNo2 = null; + return value; } } @@ -517,7 +535,7 @@ public class SeqPanel endEditing(); - ap.repaint(); + ap.paintAlignment(true); } /** @@ -573,6 +591,33 @@ public class SeqPanel return; } + String lastMessage; + public void mouseOverSequence(SequenceI sequence, int index) + { + String tmp = sequence.hashCode()+index+""; + if (lastMessage == null || !lastMessage.equals(tmp)) + ssm.mouseOverSequence(sequence, index); + + lastMessage = tmp; + } + + + public void highlightSequence(jalview.datamodel.SequenceI seq, int index) + { + if(av.alignment.findIndex(seq)>-1) + { + SearchResults highlight = new SearchResults(); + highlight.addResult(seq,index,index); + seqCanvas.highlightSearchResults(highlight); + } + } + + public void updateColours(SequenceI seq, int index) + { + System.out.println("update the seqPanel colours"); + //repaint(); + } + /** * DOCUMENT ME! * @@ -602,10 +647,8 @@ public class SeqPanel return; } - if (seqCanvas.pdbCanvas != null && sequence == seqCanvas.pdbCanvas.sequence) - { - seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res)); - } + if (ssm != null) + mouseOverSequence(sequence, sequence.findPosition(res)); setStatusMessage(sequence, res, seq); @@ -837,7 +880,7 @@ public class SeqPanel av.charWidth++; } - ap.repaint(); + ap.paintAlignment(false); } FontMetrics fm = getFontMetrics(av.getFont()); @@ -881,9 +924,10 @@ public class SeqPanel { scrollThread.setEvent(evt); } - } + + synchronized void editSequence(boolean insertGap, int startres) { int fixedLeft = -1; @@ -1355,23 +1399,6 @@ public class SeqPanel public void mouseWheelMoved(MouseWheelEvent e) { e.consume(); - /* if (mouseWheelPressed) - { - Font font = av.getFont(); - int fontSize = font.getSize(); - if (e.getWheelRotation() > 0 && fontSize < 51) - fontSize++; - else if (fontSize > 1) - fontSize--; - - - - av.setFont(new Font(font.getName(), font.getStyle(), fontSize)); - - ap.fontChanged(); - } - else*/ - { if (e.getWheelRotation() > 0) { ap.scrollUp(false); @@ -1380,8 +1407,6 @@ public class SeqPanel { ap.scrollUp(true); } - } - } /** @@ -1575,6 +1600,7 @@ public class SeqPanel stretchGroup = null; PaintRefresher.Refresh(this, av.getSequenceSetId()); + ap.paintAlignment(true); } /** diff --git a/src/jalview/gui/SliderPanel.java b/src/jalview/gui/SliderPanel.java index 98579eb..23b76e3 100755 --- a/src/jalview/gui/SliderPanel.java +++ b/src/jalview/gui/SliderPanel.java @@ -51,7 +51,7 @@ public class SliderPanel * @param forConserve DOCUMENT ME! * @param cs DOCUMENT ME! */ - public SliderPanel(AlignmentPanel ap, int value, boolean forConserve, + public SliderPanel(final AlignmentPanel ap, int value, boolean forConserve, ColourSchemeI cs) { this.ap = ap; @@ -82,6 +82,14 @@ public class SliderPanel } }); + slider.addMouseListener(new MouseAdapter() + { + public void mouseReleased(MouseEvent evt) + { + ap.paintAlignment(true); + } + }); + slider.setValue(value); valueField.setText(value + ""); } diff --git a/src/jalview/gui/TextColourChooser.java b/src/jalview/gui/TextColourChooser.java index 504e1d5..8dd9d49 100644 --- a/src/jalview/gui/TextColourChooser.java +++ b/src/jalview/gui/TextColourChooser.java @@ -153,7 +153,7 @@ public class TextColourChooser sg.textColour = col; } - ap.repaint(); + ap.paintAlignment(true); } void colour2Changed(Color col) @@ -171,7 +171,7 @@ public class TextColourChooser sg.textColour2 = col; } - ap.repaint(); + ap.paintAlignment(true); } void thresholdChanged(int value) @@ -189,7 +189,7 @@ public class TextColourChooser sg.thresholdTextColour = value; } - ap.repaint(); + ap.paintAlignment(true); } void setGroupTextColour() diff --git a/src/jalview/gui/UserDefinedColours.java b/src/jalview/gui/UserDefinedColours.java index 001b232..d5a9211 100755 --- a/src/jalview/gui/UserDefinedColours.java +++ b/src/jalview/gui/UserDefinedColours.java @@ -418,7 +418,7 @@ public class UserDefinedColours if (seqGroup != null) { seqGroup.cs = ucs; - ap.repaint(); + ap.paintAlignment(true); } else if (ap != null) { @@ -789,7 +789,7 @@ public class UserDefinedColours { ap.av.setGlobalColourScheme(oldColourScheme); } - ap.repaint(); + ap.paintAlignment(true); } if (pdbcanvas != null) diff --git a/src/jalview/io/DasSequenceFeatureFetcher.java b/src/jalview/io/DasSequenceFeatureFetcher.java index fbd7442..ca11852 100755 --- a/src/jalview/io/DasSequenceFeatureFetcher.java +++ b/src/jalview/io/DasSequenceFeatureFetcher.java @@ -240,7 +240,7 @@ public class DasSequenceFeatureFetcher if (seq == af.getViewport().getAlignment().getSequenceAt(index).getDatasetSequence()) { - af.alignPanel.repaint(); + af.alignPanel.paintAlignment(true); break; } } diff --git a/src/jalview/io/WSWUBlastClient.java b/src/jalview/io/WSWUBlastClient.java index e1798e3..1d42620 100755 --- a/src/jalview/io/WSWUBlastClient.java +++ b/src/jalview/io/WSWUBlastClient.java @@ -168,7 +168,7 @@ public class WSWUBlastClient } } } - ap.repaint(); + ap.paintAlignment(true); } -- 1.7.10.2