import jalview.jbgui.*;
import jalview.schemes.*;
import jalview.util.ShiftList;
+import jalview.commands.*;
import jalview.ws.*;
import java.awt.dnd.*;
-import org.biojava.dasobert.eventmodel.*;
/**
* DOCUMENT ME!
*/
void updateEditMenuBar()
{
- /* if (historyList.size() > 0)
+ if (historyList.size() > 0)
{
undoMenuItem.setEnabled(true);
- HistoryItem hi = (HistoryItem) historyList.peek();
- undoMenuItem.setText("Undo " + hi.getDescription());
+ CommandI command = (CommandI) historyList.peek();
+ undoMenuItem.setText("Undo " + command.getDescription());
}
else
{
{
redoMenuItem.setEnabled(true);
- HistoryItem hi = (HistoryItem) redoList.peek();
- redoMenuItem.setText("Redo " + hi.getDescription());
+ CommandI command = (CommandI) redoList.peek();
+ redoMenuItem.setText("Redo " + command.getDescription());
}
else
{
redoMenuItem.setEnabled(false);
redoMenuItem.setText("Redo");
- }*/
+ }
}
- /**
- * DOCUMENT ME!
- *
- * @param hi DOCUMENT ME!
- */
- public void addHistoryItem(HistoryItem hi)
+
+ public void addHistoryItem(CommandI command)
{
- historyList.push(hi);
+ historyList.push(command);
redoList.clear();
updateEditMenuBar();
}
+
+
/**
* DOCUMENT ME!
*
*/
protected void undoMenuItem_actionPerformed(ActionEvent e)
{
- HistoryItem nh,hi = (HistoryItem) historyList.pop();
- redoList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment,
- HistoryItem.HIDE));
- if (hi.alColumnChanges!=null)
- nh.alColumnChanges = hi.alColumnChanges.getInverse();
- restoreHistoryItem(hi);
+ CommandI command = (CommandI)historyList.pop();
+ redoList.push(command);
+ command.undoCommand();
+
+ // HistoryItem nh,hi = (HistoryItem) historyList.pop();
+ // redoList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment,
+ // HistoryItem.HIDE));
+ // if (hi.alColumnChanges!=null)
+ // nh.alColumnChanges = hi.alColumnChanges.getInverse();
+ // restoreHistoryItem(hi);
+ updateEditMenuBar();
viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
}
*/
protected void redoMenuItem_actionPerformed(ActionEvent e)
{
- HistoryItem nh,hi = (HistoryItem) redoList.pop();
- historyList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment,
- HistoryItem.HIDE));
- if (hi.alColumnChanges!=null)
- nh.alColumnChanges=hi.alColumnChanges.getInverse();
- restoreHistoryItem(hi);
+ CommandI command = (CommandI) redoList.pop();
+ historyList.push(command);
+ command.doCommand();
+
+ // HistoryItem nh,hi = (HistoryItem) redoList.pop();
+ // historyList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment,
+ // HistoryItem.HIDE));
+ // if (hi.alColumnChanges!=null)
+ // nh.alColumnChanges=hi.alColumnChanges.getInverse();
+ // restoreHistoryItem(hi);
updateEditMenuBar();
viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
}
- // used by undo and redo
- void restoreHistoryItem(HistoryItem hi)
- {
-
- hi.restore(viewport.getColumnSelection());
-
- updateEditMenuBar();
-
- viewport.firePropertyChange("alignment", null,
- viewport.getAlignment().getSequences());
- }
/**
* DOCUMENT ME!
*/
protected void pasteThis_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,
- HistoryItem.PASTE));
paste(false);
}
alignment = viewport.getAlignment();
//!newAlignment
+ SequenceI [] newseqs = new SequenceI[sequences.length];
for (int i = 0; i < sequences.length; i++)
{
- Sequence newseq = new Sequence(sequences[i].getName(),
+ newseqs[i] = new Sequence(sequences[i].getName(),
sequences[i].getSequence(), sequences[i].getStart(),
sequences[i].getEnd());
- alignment.addSequence(newseq);
+ alignment.addSequence(newseqs[i]);
PaintRefresher.Refresh(alignPanel,
alignPanel.av.getSequenceSetId(),
- null,newseq);
+ null,newseqs[i]);
}
+ /*
+ //ADD HISTORY ITEM
+ */
+ addHistoryItem(new EditCommand(
+ "Add sequences",
+ EditCommand.PASTE,
+ newseqs,
+ 0,
+ alignment.getWidth(),
+ alignment)
+ );
+
+
viewport.setEndSeq(alignment.getHeight());
alignment.getWidth();
viewport.firePropertyChange("alignment", null, alignment.getSequences());
protected void delete_actionPerformed(ActionEvent e)
{
- if (viewport.getSelectionGroup() == null)
+ SequenceGroup sg = viewport.getSelectionGroup();
+ if (sg == null)
{
return;
}
+ Vector seqs = new Vector();
+ int cutLength = sg.getEndRes()-sg.getStartRes()+1;
+ SequenceI seq;
+ for (int i = 0; i < sg.getSize(false); i++)
+ {
+ seq = sg.getSequenceAt(i);
+ seqs.addElement(seq);
+ if(seq.getLength()<=cutLength)
+ PaintRefresher.Refresh(alignPanel,
+ alignPanel.av.getSequenceSetId(),
+ seq,
+ null);
+ }
- SequenceGroup sg = viewport.getSelectionGroup();
-
-
- addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment,
- HistoryItem.HIDE));
+ // If the cut affects all sequences, remove highlighted columns
+ if (sg.getSize(false) == viewport.alignment.getHeight())
+ {
+ viewport.getColumnSelection().removeElements(sg.getStartRes(),
+ sg.getEndRes() + 1);
+ }
- for (int i = 0; i < sg.getSize(false); i++)
- {
- SequenceI seq = sg.getSequenceAt(i);
- seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1);
+ SequenceI [] cut = new SequenceI[seqs.size()];
+ for(int i=0; i<seqs.size(); i++)
+ cut[i] = (SequenceI)seqs.elementAt(i);
- // If the cut affects all sequences, remove highlighted columns
- if (sg.getSize(false) == viewport.alignment.getHeight())
- {
- viewport.getColumnSelection().removeElements(sg.getStartRes(),
- sg.getEndRes() + 1);
- }
- if (seq.getSequence().length() < 1)
- {
- viewport.getAlignment().deleteSequence(seq);
- PaintRefresher.Refresh(alignPanel,alignPanel.av.getSequenceSetId(),seq,null);
- }
- }
+ /*
+ //ADD HISTORY ITEM
+ */
+ addHistoryItem(new EditCommand("Cut Sequences",
+ EditCommand.CUT,
+ cut,
+ sg.getStartRes(),
+ sg.getEndRes()-sg.getStartRes()+1,
+ viewport.alignment));
viewport.setSelectionGroup(null);
viewport.alignment.deleteGroup(sg);
viewport.firePropertyChange("alignment", null,
viewport.getAlignment().getSequences());
-
-
if (viewport.getAlignment().getHeight() < 1)
{
try
*/
public void remove2LeftMenuItem_actionPerformed(ActionEvent e)
{
- ColumnSelection colSel = viewport.getColumnSelection();
-
- if (colSel.size() > 0)
- {
- HistoryItem edit;
- addHistoryItem(edit=new HistoryItem("Remove Left", viewport.alignment,
- HistoryItem.HIDE));
-
- int min = colSel.getMin();
- viewport.getAlignment().trimLeft(min);
- colSel.compensateForEdit(0, min);
- edit.addShift(0,min);
- if (viewport.getSelectionGroup() != null)
- {
- viewport.getSelectionGroup().adjustForRemoveLeft(min);
- }
-
- Vector groups = viewport.alignment.getGroups();
-
- for (int i = 0; i < groups.size(); i++)
- {
- SequenceGroup sg = (SequenceGroup) groups.get(i);
-
- if (!sg.adjustForRemoveLeft(min))
- {
- viewport.alignment.deleteGroup(sg);
- }
- }
-
- viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
- }
+ trimAlignment(true);
}
/**
*/
public void remove2RightMenuItem_actionPerformed(ActionEvent e)
{
+ trimAlignment(false);
+ }
+
+ void trimAlignment(boolean trimLeft)
+ {
ColumnSelection colSel = viewport.getColumnSelection();
+ int column;
if (colSel.size() > 0)
{
- addHistoryItem(new HistoryItem("Remove Right", viewport.alignment,
- HistoryItem.HIDE));
+ if(trimLeft)
+ column = colSel.getMin();
+ else
+ column = colSel.getMax();
- int max = colSel.getMax();
- viewport.getAlignment().trimRight(max);
- // TODO: delete hidden column entries in colSel to right of max
- // TODO: record hidden columns in history for undo.
- if (viewport.getSelectionGroup() != null)
+ SequenceI [] seqs;
+ if(viewport.getSelectionGroup()!=null)
+ seqs = viewport.getSelectionGroup().getSequencesAsArray(true);
+ else
+ seqs = viewport.alignment.getSequencesArray();
+
+
+ TrimRegionCommand trimRegion;
+
+ if(trimLeft)
{
- viewport.getSelectionGroup().adjustForRemoveRight(max);
+ trimRegion = new TrimRegionCommand("Remove Left",
+ TrimRegionCommand.TRIM_LEFT,
+ seqs,
+ column,
+ viewport.alignment,
+ viewport.colSel);
+
+ colSel.compensateForEdit(0, column);
+
+ //AW edit.addShift(0,min);
+ if (viewport.getSelectionGroup() != null)
+ {
+ viewport.getSelectionGroup().adjustForRemoveLeft(column);
+ }
}
+ else
+ {
+ trimRegion = new TrimRegionCommand("Remove Left",
+ TrimRegionCommand.TRIM_RIGHT,
+ seqs,
+ column,
+ viewport.alignment,
+ viewport.colSel);
+ // TODO: delete hidden column entries in colSel to right of max
+ // TODO: record hidden columns in history for undo.
+ if (viewport.getSelectionGroup() != null)
+ {
+ viewport.getSelectionGroup().adjustForRemoveRight(column);
+ }
+ }
+
+ addHistoryItem(trimRegion);
Vector groups = viewport.alignment.getGroups();
{
SequenceGroup sg = (SequenceGroup) groups.get(i);
- if (!sg.adjustForRemoveRight(max))
+ if ( (trimLeft && !sg.adjustForRemoveLeft(column))
+ || (!trimLeft && !sg.adjustForRemoveRight(column)))
{
viewport.alignment.deleteGroup(sg);
}
*/
public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)
{
- HistoryItem edit;
- addHistoryItem(edit=new HistoryItem("Remove Gapped Columns",
- viewport.alignment, HistoryItem.HIDE));
+ int start = 0, end = viewport.alignment.getWidth();
+
+ SequenceI[] seqs;
+ if (viewport.getSelectionGroup() != null)
+ {
+ seqs = viewport.getSelectionGroup().getSequencesAsArray(true);
+ start = viewport.getSelectionGroup().getStartRes();
+ end = viewport.getSelectionGroup().getEndRes();
+ }
+ else
+ seqs = viewport.alignment.getSequencesArray();
+
+
+ addHistoryItem(new RemoveGapColCommand("Remove Gapped Columns",
+ seqs,
+ start, end,
+ viewport.getGapCharacter()));
//This is to maintain viewport position on first residue
//of first sequence
SequenceI seq = viewport.alignment.getSequenceAt(0);
int startRes = seq.findPosition(viewport.startRes);
- ShiftList shifts;
- viewport.getAlignment().removeGaps(shifts=new ShiftList());
- edit.alColumnChanges=shifts.getInverse();
- if (viewport.hasHiddenColumns)
- viewport.getColumnSelection().compensateForEdits(shifts);
- viewport.setStartRes(seq.findIndex(startRes)-1);
+ // ShiftList shifts;
+ // viewport.getAlignment().removeGaps(shifts=new ShiftList());
+ // edit.alColumnChanges=shifts.getInverse();
+ // if (viewport.hasHiddenColumns)
+ // viewport.getColumnSelection().compensateForEdits(shifts);
+ viewport.setStartRes(seq.findIndex(startRes)-1);
viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
}
*/
public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)
{
- // TODO: hidden regions should not be touched by removeAllGaps - a minimal number of gaps will remain in alignment segments containing uneven length subsequences
- // TODO: columnSelection.compensateforedits should be called (and passed to history item)
- addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment,
- HistoryItem.HIDE));
+ int start = 0, end = viewport.alignment.getWidth();
+
+ SequenceI[] seqs;
+ if (viewport.getSelectionGroup() != null)
+ {
+ seqs = viewport.getSelectionGroup().getSequencesAsArray(true);
+ start = viewport.getSelectionGroup().getStartRes();
+ end = viewport.getSelectionGroup().getEndRes();
+ }
+ else
+ seqs = viewport.alignment.getSequencesArray();
//This is to maintain viewport position on first residue
//of first sequence
SequenceI seq = viewport.alignment.getSequenceAt(0);
int startRes = seq.findPosition(viewport.startRes);
-
- SequenceI current;
-
- Vector seqs = null;
-
- int start = 0;
- int end = viewport.alignment.getWidth();
-
- if (viewport.getSelectionGroup() != null
- && viewport.getSelectionGroup().getSequences(true) != null
- && viewport.getSelectionGroup().getSize(true) > 0)
- {
- seqs = viewport.getSelectionGroup().getSequences(true);
- start = viewport.getSelectionGroup().getStartRes();
- end = viewport.getSelectionGroup().getEndRes()+1;
- }
- else
- {
- seqs = viewport.alignment.getSequences();
- }
- /* Commented out regions below are partial implementation of todo above.
- * divide start,end into visible chunks, and for each:
- int diff=end-start+1;
- int diffmax=0;
- int dr[] = new int[seqs.size()];
- */
- for (int i = 0; i < seqs.size(); i++)
- {
- current = (SequenceI) seqs.elementAt(i);
- //dr[i]=
- current.removeGaps(start, end);
- /*if (d<diff) // can only shift
- diff=d;
- if (diffmax<d)
- diffmax=d;
- */
- }
- /* // after the end of each chunk -
- * if (diff>0) {
- // record shift for history.
- editgaps.addShift(start, diff);
- if (viewport.hasHiddenColumns && diffmax>diff) {
- // pad sequence
- StringBuffer gaps=new StringBuffer(diffmax);
- for (int i=0,j=diffmax-diff; i<j; i++)
- gaps.append(viewport.getGapCharacter());
- for (int i=0, j=seqs.size(); i<j; i++) {
- current = (SequenceI) seqs.elementAt(i);
- if (dr[i]-diff>0) {
- String sq = current.getSequence();
- current.setSequence(sq.substring(0, hcend-dr[i])+gaps.substring(0, dr[i]-diff)+sq.substring());
- }
- }
- }
- }*/
+ addHistoryItem(new RemoveGapsCommand("Remove Gaps",
+ seqs,
+ start, end,
+ viewport.getGapCharacter()));
viewport.setStartRes(seq.findIndex(startRes)-1);
ap = (AlignmentPanel) alignPanels.elementAt(i);
av = ap.av;
- if (av.padGaps)
+ if (av.padGaps)
av.getAlignment().padGaps();
if (av.hconsensus != null && av.autoCalculateConsensus)
*/
public void padGapsMenuitem_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
- HistoryItem.HIDE));
+ // addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment,
+ // HistoryItem.HIDE));
viewport.padGaps = padGapsMenuitem.isSelected();
*/
public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment,
- HistoryItem.SORT));
+ SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray();
AlignmentSorter.sortByPID(viewport.getAlignment(),
viewport.getAlignment().getSequenceAt(0));
+ addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, viewport.alignment));
alignPanel.repaint();
}
*/
public void sortIDMenuItem_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("ID Sort", viewport.alignment,
- HistoryItem.SORT));
+ SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray();
AlignmentSorter.sortByID(viewport.getAlignment());
+ addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment));
alignPanel.repaint();
}
*/
public void sortGroupMenuItem_actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Group Sort", viewport.alignment,
- HistoryItem.SORT));
-
+ SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray();
AlignmentSorter.sortByGroup(viewport.getAlignment());
+ addHistoryItem(new OrderCommand("Group Sort", oldOrder, viewport.alignment));
+
alignPanel.repaint();
}
{
public void actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Sort", viewport.alignment,
- HistoryItem.SORT));
+ SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray();
// TODO: JBPNote - have to map order entries to curent SequenceI pointers
AlignmentSorter.sortBy(viewport.getAlignment(), order);
+
+ addHistoryItem(new OrderCommand(order.getName(), oldOrder, viewport.alignment));
+
alignPanel.repaint();
}
});
{
public void actionPerformed(ActionEvent e)
{
- addHistoryItem(new HistoryItem("Tree Sort",
- viewport.alignment, HistoryItem.SORT));
+ SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray();
AlignmentSorter.sortByTree(viewport.getAlignment(),
treePanel.getTree());
+
+ addHistoryItem(new OrderCommand("Tree Sort", oldOrder, viewport.alignment));
+
+
alignPanel.repaint();
}
});