+ updateEditMenuBar();\r
+\r
+ viewport.firePropertyChange("alignment", null,\r
+ viewport.getAlignment().getSequences());\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param up DOCUMENT ME!\r
+ */\r
+ public void moveSelectedSequences(boolean up)\r
+ {\r
+ SequenceGroup sg = viewport.getSelectionGroup();\r
+\r
+ if (sg == null)\r
+ {\r
+ return;\r
+ }\r
+\r
+ if (up)\r
+ {\r
+ for (int i = 1; i < viewport.alignment.getHeight(); i++)\r
+ {\r
+ SequenceI seq = viewport.alignment.getSequenceAt(i);\r
+\r
+ if (!sg.sequences.contains(seq))\r
+ {\r
+ continue;\r
+ }\r
+\r
+ SequenceI temp = viewport.alignment.getSequenceAt(i - 1);\r
+\r
+ if (sg.sequences.contains(temp))\r
+ {\r
+ continue;\r
+ }\r
+\r
+ viewport.alignment.getSequences().setElementAt(temp, i);\r
+ viewport.alignment.getSequences().setElementAt(seq, i - 1);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)\r
+ {\r
+ SequenceI seq = viewport.alignment.getSequenceAt(i);\r
+\r
+ if (!sg.sequences.contains(seq))\r
+ {\r
+ continue;\r
+ }\r
+\r
+ SequenceI temp = viewport.alignment.getSequenceAt(i + 1);\r
+\r
+ if (sg.sequences.contains(temp))\r
+ {\r
+ continue;\r
+ }\r
+\r
+ viewport.alignment.getSequences().setElementAt(temp, i);\r
+ viewport.alignment.getSequences().setElementAt(seq, i + 1);\r
+ }\r
+ }\r
+\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param e DOCUMENT ME!\r
+ */\r
+ protected void copy_actionPerformed(ActionEvent e)\r
+ {\r
+ if (viewport.getSelectionGroup() == null)\r
+ {\r
+ return;\r
+ }\r
+\r
+ SequenceGroup sg = viewport.getSelectionGroup();\r
+\r
+ Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
+ StringBuffer buffer = new StringBuffer();\r
+\r
+ Hashtable orderedSeqs = new Hashtable();\r
+\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
+ int index = 0, startRes, endRes;\r
+ char ch;\r
+\r
+ for (int i = 0; i < sg.getSize(); i++)\r
+ {\r
+ SequenceI seq = null;\r
+\r
+ while (seq == null)\r
+ {\r
+ if (orderedSeqs.containsKey(index + ""))\r
+ {\r
+ seq = (SequenceI) orderedSeqs.get(index + "");\r
+ index++;\r
+\r
+ break;\r
+ }\r
+ else\r
+ {\r
+ index++;\r
+ }\r
+ }\r
+ //FIND START RES\r
+ //Returns residue following index if gap\r
+ startRes = seq.findPosition(sg.getStartRes());\r
+\r
+ //FIND END RES\r
+ //Need to find the residue preceeding index if gap\r
+ endRes = 0;\r
+\r
+ for (int j = 0; j < sg.getEndRes() + 1 && j < seq.getLength(); j++)\r
+ {\r
+ ch = seq.getCharAt(j);\r
+ if (!jalview.util.Comparison.isGap( (ch)))\r
+ {\r
+ endRes++;\r
+ }\r
+ }\r
+\r
+ if (endRes > 0)\r
+ {\r
+ endRes += seq.getStart() - 1;\r
+ }\r
+\r
+ buffer.append(seq.getName() + "\t" +\r
+ startRes + "\t" +\r
+ endRes + "\t" +\r
+ seq.getSequence(sg.getStartRes(),\r
+ sg.getEndRes() + 1) + "\n");\r
+ }\r
+\r
+ c.setContents(new StringSelection(buffer.toString()), null);\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param e DOCUMENT ME!\r
+ */\r
+ protected void pasteNew_actionPerformed(ActionEvent e)\r
+ {\r
+ paste(true);\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param e DOCUMENT ME!\r
+ */\r
+ protected void pasteThis_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment,\r
+ HistoryItem.PASTE));\r
+ paste(false);\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param newAlignment DOCUMENT ME!\r
+ */\r
+ void paste(boolean newAlignment)\r
+ {\r
+ try\r
+ {\r
+ Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
+ Transferable contents = c.getContents(this);\r
+\r
+ if (contents == null)\r
+ {\r
+ return;\r
+ }\r
+\r
+ String str = (String) contents.getTransferData(DataFlavor.stringFlavor);\r
+ StringTokenizer st = new StringTokenizer(str);\r
+ ArrayList seqs = new ArrayList();\r
+\r
+ while (st.hasMoreElements())\r
+ {\r
+ String name = st.nextToken();\r
+ int start = Integer.parseInt(st.nextToken());\r
+ int end = Integer.parseInt(st.nextToken());\r
+ Sequence sequence = new Sequence(name, st.nextToken(), start,\r
+ end);\r
+\r
+ if (!newAlignment)\r
+ {\r
+ viewport.alignment.addSequence(sequence);\r
+ }\r
+ else\r
+ {\r
+ seqs.add(sequence);\r
+ }\r
+ }\r
+\r
+ if (newAlignment)\r
+ {\r
+ SequenceI[] newSeqs = new SequenceI[seqs.size()];\r
+ seqs.toArray(newSeqs);\r
+\r
+ AlignFrame af = new AlignFrame(new Alignment(newSeqs));\r
+ String newtitle = new String("Copied sequences");\r
+\r
+ if (title.startsWith("Copied sequences"))\r
+ {\r
+ newtitle = title;\r
+ }\r
+ else\r
+ {\r
+ newtitle = newtitle.concat("- from " + title);\r
+ }\r
+\r
+ Desktop.addInternalFrame(af, newtitle, NEW_WINDOW_WIDTH,\r
+ NEW_WINDOW_HEIGHT);\r
+ }\r
+ else\r
+ {\r
+ viewport.setEndSeq(viewport.alignment.getHeight());\r
+ viewport.alignment.getWidth();\r
+ viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
+ }\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ // could be anything being pasted in here\r
+ }\r
+\r