try
{
- int aWidth = alignment.getWidth();
+ int aWidth = (alignment!=null) ? alignment.getWidth() : 0; // null pointer possibility here.
if(aWidth<0)
{
return;
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)
* 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()
{
return sequences;
}
+
/**
* get the currently selected sequence objects or all the sequences in the alignment.
* @return array of references to sequence objects
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;
+ }
}