import jalview.datamodel.*;
import jalview.schemes.*;
+import jalview.structure.StructureSelectionManager;
/**
* DOCUMENT ME!
11f,
AlignmentAnnotation.BAR_GRAPH);
conservation.hasText = true;
- conservation.autoCalculated = true;
+ conservation.autoCalculated=true;
if (Cache.getDefault("SHOW_CONSERVATION", true))
11f,
AlignmentAnnotation.BAR_GRAPH);
quality.hasText = true;
- quality.autoCalculated = true;
+ quality.autoCalculated=true;
alignment.addAnnotation(quality);
}
new Annotation[1], 0f, 100f,
AlignmentAnnotation.BAR_GRAPH);
consensus.hasText = true;
- consensus.autoCalculated = true;
+ consensus.autoCalculated=true;
if (Cache.getDefault("SHOW_IDENTITY", true))
{
{
if (ap != null)
{
- ap.paintAlignment(true);
+ ap.paintAlignment(false);
}
Thread.sleep(200);
}
{
if (ap != null)
{
- ap.paintAlignment(true);
+ ap.paintAlignment(false);
}
Thread.sleep(200);
try
{
- int aWidth = alignment.getWidth();
+ int aWidth = (alignment!=null) ? alignment.getWidth() : 0; // null pointer possibility here.
if(aWidth<0)
{
return;
*/
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());
+ }
}
/**
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)
}
/**
- * This method returns the a new SequenceI [] with
- * the selection sequence and start and end points adjusted
- * @return String[]
+ * This method returns an array of new SequenceI objects
+ * 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 selection as new sequenceI objects
*/
public SequenceI[] getSelectionAsNewSequence()
{
if (selectionGroup == null)
{
sequences = alignment.getSequencesArray();
+ AlignmentAnnotation[] annots = alignment.getAlignmentAnnotation();
+ for (int i=0; i<sequences.length; i++)
+ {
+ sequences[i] = new Sequence(sequences[i], annots); // construct new sequence with subset of visible annotation
+ }
}
else
{
return sequences;
}
-
+
+ /**
+ * get the currently selected sequence objects or all the sequences in the alignment.
+ * @return array of references to sequence objects
+ */
+ public SequenceI[] getSequenceSelection()
+ {
+ SequenceI[] sequences;
+ if (selectionGroup==null)
+ {
+ sequences = alignment.getSequencesArray();
+ }
+ else
+ {
+ sequences = selectionGroup.getSequencesInOrder(alignment);
+ }
+ return sequences;
+ }
/**
* This method returns the visible alignment as text, as
* seen on the GUI, ie if columns are hidden they will not
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;
+ }
}