Use paintAlignment
authoramwaterhouse <Andrew Waterhouse>
Tue, 27 Feb 2007 13:39:19 +0000 (13:39 +0000)
committeramwaterhouse <Andrew Waterhouse>
Tue, 27 Feb 2007 13:39:19 +0000 (13:39 +0000)
38 files changed:
src/jalview/appletgui/APopupMenu.java
src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/AlignViewport.java
src/jalview/appletgui/AlignmentPanel.java
src/jalview/appletgui/AnnotationColourChooser.java
src/jalview/appletgui/AnnotationLabels.java
src/jalview/appletgui/CutAndPasteTransfer.java
src/jalview/appletgui/FeatureSettings.java
src/jalview/appletgui/FontChooser.java
src/jalview/appletgui/IdPanel.java
src/jalview/appletgui/OverviewPanel.java
src/jalview/appletgui/RedundancyPanel.java
src/jalview/appletgui/ScalePanel.java
src/jalview/appletgui/SeqCanvas.java
src/jalview/appletgui/SeqPanel.java
src/jalview/appletgui/SliderPanel.java
src/jalview/appletgui/UserDefinedColours.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java
src/jalview/gui/AlignmentPanel.java
src/jalview/gui/AnnotationColourChooser.java
src/jalview/gui/AnnotationLabels.java
src/jalview/gui/AnnotationPanel.java
src/jalview/gui/FeatureSettings.java
src/jalview/gui/FontChooser.java
src/jalview/gui/IdPanel.java
src/jalview/gui/IdwidthAdjuster.java
src/jalview/gui/OverviewPanel.java
src/jalview/gui/PopupMenu.java
src/jalview/gui/RedundancyPanel.java
src/jalview/gui/ScalePanel.java
src/jalview/gui/SeqCanvas.java
src/jalview/gui/SeqPanel.java
src/jalview/gui/SliderPanel.java
src/jalview/gui/TextColourChooser.java
src/jalview/gui/UserDefinedColours.java
src/jalview/io/DasSequenceFeatureFetcher.java
src/jalview/io/WSWUBlastClient.java

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