Use paintAlignment
[jalview.git] / src / jalview / appletgui / AlignFrame.java
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