refactored invertColumnSelection as an object method
[jalview.git] / src / jalview / gui / AlignViewport.java
index cbb19fb..afdfd69 100755 (executable)
@@ -29,6 +29,7 @@ import jalview.bin.*;
 import jalview.datamodel.*;
 
 import jalview.schemes.*;
+import jalview.structure.StructureSelectionManager;
 
 /**
  * DOCUMENT ME!
@@ -916,7 +917,15 @@ public class AlignViewport
      */
     public void setAlignment(AlignmentI align)
     {
+      if (alignment!=null && alignment.getCodonFrames()!=null)
+      {
+        StructureSelectionManager.getStructureSelectionManager().removeMappings(alignment.getCodonFrames());
+      }
         this.alignment = align;
+        if (alignment.getCodonFrames()!=null)
+        {
+          StructureSelectionManager.getStructureSelectionManager().addMappings(alignment.getCodonFrames());
+        }
     }
 
     /**
@@ -1444,20 +1453,7 @@ public class AlignViewport
 
     public void invertColumnSelection()
     {
-      for(int i=0; i<alignment.getWidth(); i++)
-      {
-        if(colSel.contains(i))
-      {
-          colSel.removeElement(i);
-      }
-        else
-        {
-          if (!hasHiddenColumns || colSel.isVisible(i))
-          {
-            colSel.addElement(i);
-          }
-        }
-      }
+      colSel.invertColumnSelection(0,alignment.getWidth());
     }
 
     public int adjustForHiddenSeqs(int alignmentIndex)
@@ -1470,7 +1466,7 @@ public class AlignViewport
      * derived from the whole alignment or just the current
      * selection with start and end points adjusted
      * @note if you need references to the actual SequenceI objects in the alignment or currently selected then use getSequenceSelection()
-     * @return String[]
+     * @return selection as new sequenceI objects
      */
     public SequenceI[] getSelectionAsNewSequence()
     {
@@ -1492,6 +1488,7 @@ public class AlignViewport
 
       return sequences;
     }
+    
     /**
      * get the currently selected sequence objects or all the sequences in the alignment.
      * @return array of references to sequence objects
@@ -1862,6 +1859,38 @@ public class AlignViewport
       viscontigs = colSel.getVisibleContigs(start, end);
       return viscontigs;
     }
-
-
+    /**
+     * get hash of undo and redo list for the alignment
+     * @return long[] { historyList.hashCode, redoList.hashCode };
+     */
+    public long[] getUndoRedoHash()
+    {
+      if (historyList==null || redoList==null)
+        return new long[] { -1, -1};
+      return new long[] { historyList.hashCode(), this.redoList.hashCode() };
+    }
+    /**
+     * test if a particular set of hashcodes are different to the hashcodes for the undo and redo list.
+     * @param undoredo the stored set of hashcodes as returned by getUndoRedoHash
+     * @return true if the hashcodes differ (ie the alignment has been edited) or the stored hashcode array differs in size
+     */
+    public boolean isUndoRedoHashModified(long[] undoredo)
+    {
+      if (undoredo==null)
+      {
+        return true;
+      }
+      long[] cstate = getUndoRedoHash();
+      if (cstate.length!=undoredo.length)
+      {  return true; }
+      
+      for (int i=0; i<cstate.length; i++)
+      {
+        if (cstate[i]!=undoredo[i])
+        {
+          return true;
+        }
+      }
+      return false;
+    }
 }