Stack redoList = new Stack();\r
\r
void updateEditMenuBar()\r
- {\r
- if(historyList.size()>0)\r
+ {\r
+ if(historyList.size()>0)\r
+ {\r
+ undoMenuItem.setEnabled(true);\r
+ HistoryItem hi = (HistoryItem)historyList.peek();\r
+ undoMenuItem.setLabel("Undo "+hi.getDescription());\r
+ }\r
+ else\r
{\r
- undoMenuItem.setEnabled(true);\r
- Object [] history = (Object[])historyList.elementAt(0);\r
- undoMenuItem.setLabel("Undo "+history[0]);\r
+ undoMenuItem.setEnabled(false);\r
+ undoMenuItem.setLabel("Undo");\r
}\r
- else\r
- {\r
- undoMenuItem.setEnabled(false);\r
- undoMenuItem.setLabel("Undo");\r
- }\r
\r
- if(redoList.size()>0)\r
+ if(redoList.size()>0)\r
+ {\r
+ redoMenuItem.setEnabled(true);\r
+ HistoryItem hi = (HistoryItem)redoList.peek();\r
+ redoMenuItem.setLabel("Redo "+hi.getDescription());\r
+ }\r
+ else\r
{\r
- redoMenuItem.setEnabled(true);\r
- Object [] history = (Object[])redoList.elementAt(0);\r
- redoMenuItem.setLabel("Redo "+history[0]);\r
+ redoMenuItem.setEnabled(false);\r
+ redoMenuItem.setLabel("Redo");\r
}\r
- else\r
- {\r
- redoMenuItem.setEnabled(false);\r
- redoMenuItem.setLabel("Redo");\r
- }\r
- }\r
+ }\r
\r
- public void addHistoryItem(String type)\r
- {\r
- // must make sure we add new sequence objects her, not refs to the existing sequences\r
- redoList.removeAllElements();\r
- SequenceI[] seq = new SequenceI[viewport.getAlignment().getHeight()];\r
- for(int i=0; i<viewport.getAlignment().getHeight(); i++)\r
- {\r
- seq[i] = new Sequence( viewport.getAlignment().getSequenceAt(i).getName(),\r
- viewport.getAlignment().getSequenceAt(i).getSequence());\r
- }\r
+ public void addHistoryItem(HistoryItem hi)\r
+ {\r
+ historyList.push(hi);\r
+ updateEditMenuBar();\r
+ }\r
\r
- historyList.addElement(new Object[]{type, seq} );\r
- updateEditMenuBar();\r
- }\r
+ protected void undoMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ HistoryItem hi = (HistoryItem)historyList.pop();\r
+ redoList.push(new HistoryItem(hi.getDescription(), viewport.alignment, HistoryItem.HIDE));\r
+ restoreHistoryItem(hi);\r
+ }\r
\r
- protected void undoMenuItem_actionPerformed(ActionEvent e)\r
- {\r
- Object [] history = (Object[])historyList.elementAt(0);\r
- historyList.removeElementAt(0);\r
- // add the redo state before continuing!!\r
- SequenceI[] seq = new SequenceI[viewport.getAlignment().getHeight()];\r
- for (int i = 0; i < viewport.getAlignment().getHeight(); i++)\r
- {\r
- seq[i] = new Sequence(viewport.getAlignment().getSequenceAt(i).getName(),\r
- viewport.getAlignment().getSequenceAt(i).\r
- getSequence());\r
- }\r
- /////////\r
+ protected void redoMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ HistoryItem hi = (HistoryItem)redoList.pop();\r
+ restoreHistoryItem(hi);\r
+ updateEditMenuBar();\r
+ viewport.updateConsensus();\r
+ alignPanel.repaint();\r
+ alignPanel.repaint();\r
+ }\r
\r
- redoList.addElement(new Object[] {history[0], seq});\r
\r
- seq = (SequenceI[]) history[1];\r
+ // used by undo and redo\r
+ void restoreHistoryItem(HistoryItem hi)\r
+ {\r
+ if(hi.getType()== HistoryItem.SORT)\r
+ {\r
+ for(int i=0; i<hi.getSequences().size(); i++)\r
+ viewport.alignment.getSequences().setElementAt(hi.getSequences().elementAt(i), i);\r
+ }\r
+ else\r
+ {\r
+ for (int i = 0; i < hi.getSequences().size(); i++)\r
+ {\r
+ SequenceI restore = (SequenceI) hi.getSequences().elementAt(i);\r
+ if(restore.getLength()==0)\r
+ {\r
+ // log.System.out.println(hi.getHidden().elementAt(i));\r
+ restore.setSequence(hi.getHidden().elementAt(i).toString());\r
+ viewport.alignment.getSequences().insertElementAt(\r
+ restore,\r
+ hi.getAlignIndex(i));\r
+ }\r
+ else\r
+ restore.setSequence(hi.getHidden().elementAt(i).toString());\r
+ }\r
+ if(hi.getType()==HistoryItem.PASTE)\r
+ {\r
+ for(int i=viewport.alignment.getHeight()-1;i>hi.getSequences().size()-1; i--)\r
+ viewport.alignment.deleteSequence(i);\r
+ }\r
+ }\r
\r
- AlignmentAnnotation[] old = viewport.alignment.getAlignmentAnnotation();\r
- viewport.setAlignment(new Alignment(seq));\r
- updateEditMenuBar();\r
- for (int i = 0; i < old.length; i++)\r
- viewport.alignment.addAnnotation(old[i]);\r
+ updateEditMenuBar();\r
+\r
+ viewport.updateConsensus();\r
+ viewport.updateConservation();\r
+ alignPanel.repaint();\r
+ }\r
\r
- viewport.updateConservation();\r
- viewport.updateConsensus();\r
- alignPanel.repaint();\r
- }\r
\r
public void moveSelectedSequences(boolean up)\r
{\r
\r
SequenceGroup sg = viewport.getSelectionGroup();\r
copiedSequences = new StringBuffer();\r
+ Hashtable orderedSeqs = new Hashtable();\r
+ for(int i=0; i<sg.getSize(); i++)\r
+ {\r
+ SequenceI seq = sg.getSequenceAt(i);\r
+ int index = viewport.alignment.findIndex(seq);\r
+ orderedSeqs.put(index+"", seq);\r
+ }\r
\r
- for(int i=0; i<sg.getSize(); i++)\r
+ int index=0;\r
+ for(int i=0; i<sg.getSize(); i++)\r
+ {\r
+ SequenceI seq = null;\r
+ while( seq == null )\r
+ {\r
+ if(orderedSeqs.containsKey(index+""))\r
{\r
- SequenceI seq = sg.getSequenceAt(i);\r
+ seq = (SequenceI) orderedSeqs.get(index + "");\r
+ index++;\r
+ break;\r
+ }\r
+ else\r
+ index++;\r
+ }\r
+\r
copiedSequences.append( seq.getName()+"\t"+seq.findPosition( sg.getStartRes() ) +"\t"\r
+seq.findPosition( sg.getEndRes() )+ "\t"\r
+sg.getSequenceAt(i).getSequence(sg.getStartRes(), sg.getEndRes()+1)+"\n");\r
\r
protected void pasteThis_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("Paste");\r
+ addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment, HistoryItem.PASTE));\r
paste(false);\r
}\r
\r
newSeqs[i] = (SequenceI)seqs.elementAt(i);\r
\r
AlignFrame af = new AlignFrame(new Alignment(newSeqs), applet);\r
- jalview.bin.JalviewLite.addFrame(af, "Copied sequences", NEW_WINDOW_WIDTH, NEW_WINDOW_HEIGHT);\r
+ String newtitle = new String("Copied sequences");\r
+ if( getTitle().startsWith("Copied sequences"))\r
+ newtitle = getTitle();\r
+ else\r
+ newtitle = newtitle.concat("- from "+getTitle());\r
+ jalview.bin.JalviewLite.addFrame(af, newtitle, NEW_WINDOW_WIDTH, NEW_WINDOW_HEIGHT);\r
}\r
else\r
{\r
\r
protected void delete_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("Delete");\r
+ addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment, HistoryItem.HIDE));\r
if (viewport.getSelectionGroup() == null)\r
return;\r
\r
\r
\r
\r
- protected void redoMenuItem_actionPerformed(ActionEvent e)\r
- {\r
- Object [] history = (Object[])redoList.pop();\r
- SequenceI[] seq = (SequenceI[]) history[1];\r
-\r
- AlignmentAnnotation[] old = viewport.alignment.getAlignmentAnnotation();\r
- viewport.setAlignment(new Alignment(seq));\r
- for (int i = 0; i < old.length; i++)\r
- viewport.alignment.addAnnotation(old[i]);\r
-\r
- viewport.updateConservation();\r
- viewport.updateConsensus();\r
- updateEditMenuBar();\r
- alignPanel.repaint();\r
- }\r
-\r
-\r
protected void deleteGroups_actionPerformed(ActionEvent e)\r
{\r
viewport.alignment.deleteAllGroups();\r
\r
public void remove2LeftMenuItem_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("delete columns");\r
ColumnSelection colSel = viewport.getColumnSelection();\r
if (colSel.size() > 0)\r
{\r
+ addHistoryItem(new HistoryItem("Remove Left",viewport.alignment,\r
+ HistoryItem.HIDE));\r
int min = colSel.getMin();\r
viewport.getAlignment().trimLeft(min);\r
colSel.compensateForEdit(0,min);\r
\r
public void remove2RightMenuItem_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("delete columns");\r
ColumnSelection colSel = viewport.getColumnSelection();\r
if (colSel.size() > 0)\r
{\r
+ addHistoryItem(new HistoryItem("Remove Right",viewport.alignment,\r
+ HistoryItem.HIDE));\r
int max = colSel.getMax();\r
viewport.getAlignment().trimRight(max);\r
if(viewport.getSelectionGroup()!=null)\r
\r
public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("delete gapped columns");\r
+ addHistoryItem(new HistoryItem("Remove Gapped Columns",\r
+ viewport.alignment,\r
+ HistoryItem.HIDE));\r
viewport.getAlignment().removeGaps();\r
viewport.updateConservation();\r
viewport.updateConsensus();\r
\r
public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("delete all gaps");\r
+ addHistoryItem(new HistoryItem("Remove Gaps",\r
+ viewport.alignment,\r
+ HistoryItem.HIDE));\r
SequenceI current;\r
int jSize;\r
for (int i=0; i < viewport.getAlignment().getSequences().size();i++)\r
protected void fullSeqId_actionPerformed(ActionEvent e)\r
{\r
viewport.setShowFullId( fullSeqId.getState() );\r
- alignPanel.idPanel.idCanvas.setSize( alignPanel.calculateIdWidth() );\r
+ alignPanel.fontChanged();\r
alignPanel.repaint();\r
}\r
\r
\r
public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("sort");\r
+ addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment, HistoryItem.SORT));\r
AlignmentSorter.sortByPID(viewport.getAlignment(), viewport.getAlignment().getSequenceAt(0));\r
alignPanel.repaint();\r
}\r
\r
public void sortIDMenuItem_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("sort");\r
+ addHistoryItem(new HistoryItem("ID Sort", viewport.alignment, HistoryItem.SORT));\r
AlignmentSorter.sortByID( viewport.getAlignment() );\r
alignPanel.repaint();\r
}\r
\r
public void sortGroupMenuItem_actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("sort");\r
+ addHistoryItem(new HistoryItem("Group Sort", viewport.alignment, HistoryItem.SORT));\r
AlignmentSorter.sortByGroup(viewport.getAlignment());\r
AlignmentSorter.sortGroups(viewport.getAlignment());\r
alignPanel.repaint();\r
{\r
public void actionPerformed(ActionEvent e)\r
{\r
- addHistoryItem("sort");\r
+ addHistoryItem(new HistoryItem("Sort", viewport.alignment,\r
+ HistoryItem.SORT));\r
AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree());\r
alignPanel.repaint();\r
}\r
int y=20, x=7;\r
g.setColor(Color.black);\r
g.setFont(new Font("Helvetica", Font.BOLD, 14));\r
- g.drawString("JalView 2005", 200,y+=fh);\r
+ g.drawString("JalView - Release 2.0", 200,y+=fh);\r
g.setFont(new Font("Helvetica", Font.PLAIN, 12));\r
g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",x,y+=fh*2);\r
g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",x,y+=fh);\r
}\r
Frame frame = new Frame();\r
frame.add(new AboutPanel());\r
- jalview.bin.JalviewLite.addFrame(frame, "Jalview 2005", 580,200);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Jalview", 580,200);\r
\r
\r
\r