tidied up system.out messages and moved many to stderr.
[jalview.git] / src / jalview / appletgui / AlignFrame.java
index e73854f..78c956b 100755 (executable)
@@ -101,75 +101,94 @@ public class AlignFrame extends GAlignFrame
   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
@@ -222,10 +241,30 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -241,7 +280,7 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -273,7 +312,12 @@ public class AlignFrame extends GAlignFrame
          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
@@ -297,7 +341,7 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -330,23 +374,6 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -387,10 +414,11 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -412,10 +440,11 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -438,7 +467,9 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -447,7 +478,9 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -486,7 +519,7 @@ public class AlignFrame extends GAlignFrame
   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
@@ -835,21 +868,21 @@ public class AlignFrame extends GAlignFrame
 \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
@@ -951,7 +984,8 @@ public class AlignFrame extends GAlignFrame
     {\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
@@ -986,7 +1020,7 @@ public class AlignFrame extends GAlignFrame
         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
@@ -997,7 +1031,7 @@ public class AlignFrame extends GAlignFrame
     }\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