bugfix for vamsas demo and IO rearrangement for AMSAFile output
[jalview.git] / src / jalview / gui / CutAndPasteTransfer.java
index 175a609..a3fa7c7 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
  * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
  *\r
  * This program is free software; you can redistribute it and/or\r
  * modify it under the terms of the GNU General Public License\r
@@ -27,30 +27,117 @@ import jalview.datamodel.*;
 import jalview.io.*;\r
 import jalview.jbgui.*;\r
 \r
+/**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
 public class CutAndPasteTransfer\r
     extends GCutAndPasteTransfer\r
 {\r
-  public void setForInput()\r
+\r
+  AlignViewport viewport;\r
+\r
+  public CutAndPasteTransfer()\r
+  {\r
+    SwingUtilities.invokeLater(new Runnable()\r
+    {\r
+      public void run()\r
+      {\r
+        textarea.requestFocus();\r
+      }\r
+    });\r
+\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   */\r
+  public void setForInput(AlignViewport viewport)\r
   {\r
+    this.viewport = viewport;\r
+    if (viewport != null)\r
+    {\r
+      ok.setText("Add");\r
+    }\r
+\r
     getContentPane().add(inputButtonPanel, java.awt.BorderLayout.SOUTH);\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @return DOCUMENT ME!\r
+   */\r
   public String getText()\r
   {\r
     return textarea.getText();\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param text DOCUMENT ME!\r
+   */\r
   public void setText(String text)\r
   {\r
     textarea.setText(text);\r
   }\r
 \r
+  public void appendText(String text)\r
+  {\r
+    textarea.append(text);\r
+  }\r
+\r
+  public void save_actionPerformed(ActionEvent e)\r
+  {\r
+    JalviewFileChooser chooser = new JalviewFileChooser(\r
+        jalview.bin.Cache.getProperty(\r
+            "LAST_DIRECTORY"));\r
+\r
+    chooser.setAcceptAllFileFilterUsed(false);\r
+    chooser.setFileView(new JalviewFileView());\r
+    chooser.setDialogTitle("Save Text to File");\r
+    chooser.setToolTipText("Save");\r
+\r
+    int value = chooser.showSaveDialog(this);\r
+\r
+    if (value == JalviewFileChooser.APPROVE_OPTION)\r
+    {\r
+      try\r
+      {\r
+        java.io.PrintWriter out = new java.io.PrintWriter(\r
+            new java.io.FileWriter(chooser.getSelectedFile()));\r
+\r
+        out.print(getText());\r
+        out.close();\r
+      }\r
+      catch (Exception ex)\r
+      {\r
+        ex.printStackTrace();\r
+      }\r
+\r
+    }\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param e DOCUMENT ME!\r
+   */\r
   public void copyItem_actionPerformed(ActionEvent e)\r
   {\r
+    textarea.getSelectedText();\r
     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
-    c.setContents(new StringSelection(textarea.getText()), null);\r
+    c.setContents(new StringSelection(textarea.getSelectedText()), null);\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param e DOCUMENT ME!\r
+   */\r
   public void pasteMenu_actionPerformed(ActionEvent e)\r
   {\r
     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
@@ -63,7 +150,7 @@ public class CutAndPasteTransfer
 \r
     try\r
     {\r
-      textarea.setText( (String) contents.getTransferData(\r
+      textarea.append( (String) contents.getTransferData(\r
           DataFlavor.stringFlavor));\r
     }\r
     catch (Exception ex)\r
@@ -71,52 +158,71 @@ public class CutAndPasteTransfer
     }\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param e DOCUMENT ME!\r
+   */\r
   public void ok_actionPerformed(ActionEvent e)\r
   {\r
-    String format = IdentifyFile.Identify(getText(), "Paste");\r
-    SequenceI[] sequences = null;\r
-\r
-    if (FormatAdapter.formats.contains(format))\r
-    {\r
-      sequences = FormatAdapter.readFile(getText(), "Paste", format);\r
-    }\r
+    String format = new IdentifyFile().Identify(getText(), "Paste");\r
+    Alignment al = null;\r
 \r
-    if (sequences != null)\r
+    if (FormatAdapter.isValidFormat(format))\r
     {\r
-      AlignFrame af = new AlignFrame(new Alignment(sequences));\r
-      af.currentFileFormat = format;\r
-      Desktop.addInternalFrame(af, "Cut & Paste input - " + format,\r
-                               AlignFrame.NEW_WINDOW_WIDTH,\r
-                               AlignFrame.NEW_WINDOW_HEIGHT);\r
-      af.statusBar.setText("Successfully pasted alignment file");\r
-\r
       try\r
       {\r
-        af.setMaximum(Preferences.showFullscreen);\r
+        al = new FormatAdapter().readFile(getText(), "Paste", format);\r
       }\r
-      catch (Exception ex)\r
+      catch (java.io.IOException ex)\r
       {\r
+        JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
+                                              "Couldn't read the pasted text.\n" +\r
+                                              ex.toString(),\r
+                                              "Error parsing text",\r
+                                              JOptionPane.WARNING_MESSAGE);\r
       }\r
+    }\r
 \r
-      try\r
+    if (al != null)\r
+    {\r
+      if (viewport != null)\r
       {\r
-        this.setClosed(true);\r
+        for (int i = 0; i < al.getHeight(); i++)\r
+        {\r
+          viewport.getAlignment().addSequence(al.getSequenceAt(i));\r
+        }\r
+\r
+        viewport.firePropertyChange("alignment", null,\r
+                                    viewport.getAlignment().getSequences());\r
       }\r
-      catch (Exception ex)\r
+      else\r
       {\r
+        AlignFrame af = new AlignFrame(al,\r
+                                       AlignFrame.DEFAULT_WIDTH,\r
+                                       AlignFrame.DEFAULT_HEIGHT);\r
+        af.currentFileFormat = format;\r
+        Desktop.addInternalFrame(af, "Cut & Paste input - " + format,\r
+                                 AlignFrame.DEFAULT_WIDTH,\r
+                                 AlignFrame.DEFAULT_HEIGHT);\r
+        af.statusBar.setText("Successfully pasted alignment file");\r
+\r
+        try\r
+        {\r
+          af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));\r
+        }\r
+        catch (Exception ex)\r
+        {\r
+        }\r
       }\r
     }\r
-    else\r
-    {\r
-      JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
-                                            "Couldn't read the pasted text.\n" +\r
-                                            "Formats currently supported are\n" +\r
-                                            "Fasta, MSF, Clustal, BLC, PIR, MSP, and PFAM",\r
-                                            "Error parsing text",\r
-                                            JOptionPane.WARNING_MESSAGE);\r
-    }\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param e DOCUMENT ME!\r
+   */\r
   public void cancel_actionPerformed(ActionEvent e)\r
   {\r
     try\r
@@ -127,4 +233,33 @@ public class CutAndPasteTransfer
     {\r
     }\r
   }\r
+\r
+  public void textarea_mousePressed(MouseEvent e)\r
+  {\r
+    if (SwingUtilities.isRightMouseButton(e))\r
+    {\r
+      JPopupMenu popup = new JPopupMenu("Edit");\r
+      JMenuItem item = new JMenuItem("Copy");\r
+      item.addActionListener(new ActionListener()\r
+      {\r
+        public void actionPerformed(ActionEvent e)\r
+        {\r
+          copyItem_actionPerformed(e);\r
+        }\r
+      });\r
+      popup.add(item);\r
+      item = new JMenuItem("Paste");\r
+      item.addActionListener(new ActionListener()\r
+      {\r
+        public void actionPerformed(ActionEvent e)\r
+        {\r
+          pasteMenu_actionPerformed(e);\r
+        }\r
+      });\r
+      popup.add(item);\r
+      popup.show(this, e.getX() + 10, e.getY() + textarea.getY() + 40);\r
+\r
+    }\r
+  }\r
+\r
 }\r