Keep startRes the same after removing columns
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index 83c66ec..dc8f72b 100755 (executable)
@@ -39,6 +39,25 @@ public class AlignFrame
   public static final int NEW_WINDOW_HEIGHT = 500;\r
   jalview.bin.JalviewLite applet;\r
 \r
+  public AlignFrame(AlignmentI al)\r
+  {\r
+    this.applet = null;\r
+    viewport = new AlignViewport(al, null);\r
+    alignPanel = new AlignmentPanel(this, viewport);\r
+    add(alignPanel);\r
+    alignPanel.validate();\r
+\r
+    this.addWindowListener(new WindowAdapter()\r
+    {\r
+      public void windowClosing(WindowEvent e)\r
+      {\r
+        closeMenuItem_actionPerformed(null);\r
+      }\r
+    });\r
+\r
+  }\r
+\r
+\r
   public AlignFrame(AlignmentI al, jalview.bin.JalviewLite applet)\r
   {\r
     this.applet = applet;\r
@@ -48,7 +67,6 @@ public class AlignFrame
     alignPanel.validate();\r
 \r
     String treeFile = applet.getParameter("treeFile");\r
-    TreePanel treepanel = null;\r
     if (treeFile != null)\r
     {\r
       try\r
@@ -489,7 +507,7 @@ public class AlignFrame
     {\r
       sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);\r
     }\r
-    sg.setEndRes(viewport.alignment.getWidth());\r
+    sg.setEndRes(viewport.alignment.getWidth()-1);\r
     viewport.setSelectionGroup(sg);\r
     alignPanel.repaint();\r
     PaintRefresher.Refresh(null, viewport.alignment);\r
@@ -578,9 +596,19 @@ public class AlignFrame
     addHistoryItem(new HistoryItem("Remove Gapped Columns",\r
                                    viewport.alignment,\r
                                    HistoryItem.HIDE));\r
+\r
+    //This is to maintain viewport position on first residue\r
+    //of first sequence\r
+    SequenceI seq = viewport.alignment.getSequenceAt(0);\r
+    int startRes = seq.findPosition(viewport.startRes);\r
+\r
     viewport.getAlignment().removeGaps();\r
+\r
+    viewport.setStartRes(seq.findIndex(startRes)-1);\r
+\r
     viewport.updateConservation();\r
     viewport.updateConsensus();\r
+    resetAllClustalSchemes();\r
     alignPanel.repaint();\r
   }\r
 \r
@@ -589,6 +617,11 @@ public class AlignFrame
     addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment,\r
                                    HistoryItem.HIDE));\r
 \r
+    //This is to maintain viewport position on first residue\r
+    //of first sequence\r
+    SequenceI seq = viewport.alignment.getSequenceAt(0);\r
+    int startRes = seq.findPosition(viewport.startRes);\r
+\r
     SequenceI current;\r
     int jSize;\r
 \r
@@ -626,11 +659,35 @@ public class AlignFrame
       while(j < end && j < jSize) ;\r
     }\r
 \r
+    viewport.setStartRes(seq.findIndex(startRes)-1);\r
+    resetAllClustalSchemes();\r
     viewport.updateConservation();\r
     viewport.updateConsensus();\r
     alignPanel.repaint();\r
   }\r
 \r
+  void resetAllClustalSchemes()\r
+  {\r
+    if(viewport.getGlobalColourScheme()!=null\r
+       && viewport.getGlobalColourScheme() instanceof ClustalxColourScheme)\r
+    {\r
+      ((ClustalxColourScheme)viewport.getGlobalColourScheme()).\r
+          resetClustalX(viewport.alignment.getSequences(),\r
+                        viewport.alignment.getWidth());\r
+    }\r
+\r
+    int s, sSize = viewport.alignment.getGroups().size();\r
+    for(s=0; s<sSize; s++)\r
+    {\r
+      SequenceGroup sg = (SequenceGroup)viewport.alignment.getGroups().elementAt(s);\r
+      if(sg.cs instanceof ClustalxColourScheme)\r
+      {\r
+        ((ClustalxColourScheme)sg.cs).resetClustalX(sg.sequences, sg.getWidth());\r
+      }\r
+    }\r
+  }\r
+\r
+\r
 \r
   public void findMenuItem_actionPerformed(ActionEvent e)\r
   {\r
@@ -900,6 +957,7 @@ public class AlignFrame
         else\r
         {\r
           sg.cs.setConservation(null);\r
+          sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus());\r
         }\r
 \r
       }\r