JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / appletgui / CutAndPasteTransfer.js
1 Clazz.declarePackage ("jalview.appletgui");\r
2 Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.MouseListener", "awt2swing.Button", "$.TextArea", "java.awt.BorderLayout"], "jalview.appletgui.CutAndPasteTransfer", ["awt2swing.Frame", "$.Label", "jalview.analysis.AlignmentUtils", "jalview.api.ComplexAlignFile", "jalview.appletgui.AlignFrame", "$.AppletJmol", "$.JVDialog", "$.SplitFrame", "jalview.datamodel.PDBEntry", "jalview.io.AnnotationFile", "$.AppletFormatAdapter", "$.IdentifyFile", "$.NewickFile", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.TCoffeeColourScheme", "jalview.util.MessageManager", "java.awt.Font"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.pdbImport = false;\r
5 this.treeImport = false;\r
6 this.annotationImport = false;\r
7 this.seq = null;\r
8 this.alignFrame = null;\r
9 this.source = null;\r
10 this.textarea = null;\r
11 this.accept = null;\r
12 this.addSequences = null;\r
13 this.$cancel = null;\r
14 this.buttonPanel = null;\r
15 this.borderLayout1 = null;\r
16 Clazz.instantialize (this, arguments);\r
17 }, jalview.appletgui, "CutAndPasteTransfer", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.MouseListener]);\r
18 Clazz.prepareFields (c$, function () {\r
19 this.textarea =  new awt2swing.TextArea ();\r
20 this.accept =  new awt2swing.Button ("New Window");\r
21 this.addSequences =  new awt2swing.Button ("Add to Current Alignment");\r
22 this.$cancel =  new awt2swing.Button ("Close");\r
23 this.buttonPanel =  new awt2swing.Panel ();\r
24 this.borderLayout1 =  new java.awt.BorderLayout ();\r
25 });\r
26 Clazz.makeConstructor (c$, \r
27 function (forImport, alignFrame) {\r
28 Clazz.superConstructor (this, jalview.appletgui.CutAndPasteTransfer, []);\r
29 try {\r
30 this.jbInit ();\r
31 } catch (e) {\r
32 if (Clazz.exceptionOf (e, Exception)) {\r
33 e.printStackTrace ();\r
34 } else {\r
35 throw e;\r
36 }\r
37 }\r
38 this.alignFrame = alignFrame;\r
39 if (!forImport) {\r
40 this.buttonPanel.setVisible (false);\r
41 }}, "~B,jalview.appletgui.AlignFrame");\r
42 Clazz.defineMethod (c$, "getText", \r
43 function () {\r
44 return this.textarea.getText ();\r
45 });\r
46 Clazz.defineMethod (c$, "setText", \r
47 function (text) {\r
48 this.textarea.setText (text);\r
49 }, "~S");\r
50 Clazz.defineMethod (c$, "setPDBImport", \r
51 function (seq) {\r
52 this.seq = seq;\r
53 this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));\r
54 this.addSequences.setVisible (false);\r
55 this.pdbImport = true;\r
56 }, "jalview.datamodel.SequenceI");\r
57 Clazz.defineMethod (c$, "setTreeImport", \r
58 function () {\r
59 this.treeImport = true;\r
60 this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));\r
61 this.addSequences.setVisible (false);\r
62 });\r
63 Clazz.defineMethod (c$, "setAnnotationImport", \r
64 function () {\r
65 this.annotationImport = true;\r
66 this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));\r
67 this.addSequences.setVisible (false);\r
68 });\r
69 Clazz.overrideMethod (c$, "actionPerformed", \r
70 function (evt) {\r
71 if (evt.getSource () === this.accept) {\r
72 this.ok (true);\r
73 } else if (evt.getSource () === this.addSequences) {\r
74 this.ok (false);\r
75 } else if (evt.getSource () === this.$cancel) {\r
76 this.cancel ();\r
77 }}, "java.awt.event.ActionEvent");\r
78 Clazz.defineMethod (c$, "ok", \r
79 function (newWindow) {\r
80 var text = this.getText ();\r
81 var length = text.length;\r
82 this.textarea.append ("\n");\r
83 if (this.textarea.getText ().length == length) {\r
84 var warning = "\n\n#################################################\nWARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n\nCAN\'T INPUT FULL ALIGNMENT\n\nYOU MUST DELETE THIS WARNING TO CONTINUE\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE\n#################################################\n";\r
85 this.textarea.setText (text.substring (0, text.length - warning.length) + warning);\r
86 this.textarea.setCaretPosition (text.length);\r
87 }if (this.pdbImport) {\r
88 this.openPdbViewer (text);\r
89 } else if (this.treeImport) {\r
90 if (!this.loadTree ()) {\r
91 return;\r
92 }} else if (this.annotationImport) {\r
93 this.loadAnnotations ();\r
94 } else if (this.alignFrame != null) {\r
95 this.loadAlignment (text, newWindow, this.alignFrame.getAlignViewport ());\r
96 }if (Clazz.instanceOf (this.getParent (), awt2swing.Frame)) {\r
97 (this.getParent ()).setVisible (false);\r
98 } else {\r
99 (this.getParent ()).setVisible (false);\r
100 }}, "~B");\r
101 Clazz.defineMethod (c$, "loadTree", \r
102 function () {\r
103 try {\r
104 var fin =  new jalview.io.NewickFile (this.textarea.getText (), "Paste");\r
105 fin.parse ();\r
106 if (fin.getTree () != null) {\r
107 this.alignFrame.loadTree (fin, "Pasted tree file");\r
108 return true;\r
109 }} catch (ex) {\r
110 if (Clazz.exceptionOf (ex, Exception)) {\r
111 this.textarea.setText (jalview.util.MessageManager.formatMessage ("label.could_not_parse_newick_file",  Clazz.newArray (-1, [ex.getMessage ()])));\r
112 return false;\r
113 } else {\r
114 throw ex;\r
115 }\r
116 }\r
117 return false;\r
118 });\r
119 Clazz.defineMethod (c$, "loadAlignment", \r
120 function (text, newWindow, viewport) {\r
121 var al = null;\r
122 var format =  new jalview.io.IdentifyFile ().Identify (text, jalview.io.AppletFormatAdapter.PASTE);\r
123 var afa =  new jalview.io.AppletFormatAdapter (this.alignFrame.alignPanel);\r
124 try {\r
125 al = afa.readFile (text, jalview.io.AppletFormatAdapter.PASTE, format);\r
126 this.source = afa.getAlignFile ();\r
127 } catch (ex) {\r
128 if (Clazz.exceptionOf (ex, java.io.IOException)) {\r
129 ex.printStackTrace ();\r
130 } else {\r
131 throw ex;\r
132 }\r
133 }\r
134 if (al != null) {\r
135 al.setDataset (null);\r
136 var allowSplitFrame = this.alignFrame.viewport.applet.getDefaultParameter ("enableSplitFrame", false);\r
137 if (allowSplitFrame && this.openSplitFrame (al, format)) {\r
138 return;\r
139 }if (newWindow) {\r
140 var af;\r
141 if (Clazz.instanceOf (this.source, jalview.api.ComplexAlignFile)) {\r
142 var colSel = (this.source).getColumnSelection ();\r
143 var hiddenSeqs = (this.source).getHiddenSequences ();\r
144 var showSeqFeatures = (this.source).isShowSeqFeatures ();\r
145 var cs = (this.source).getColourScheme ();\r
146 af =  new jalview.appletgui.AlignFrame (al, hiddenSeqs, colSel, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false);\r
147 af.getAlignViewport ().setShowSequenceFeatures (showSeqFeatures);\r
148 af.changeColour (cs);\r
149 } else {\r
150 af =  new jalview.appletgui.AlignFrame (al, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false);\r
151 }af.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_annotation_to_alignment"));\r
152 } else {\r
153 this.alignFrame.addSequences (al.getSequencesArray ());\r
154 this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_alignment_file"));\r
155 }}}, "~S,~B,jalview.appletgui.AlignViewport");\r
156 Clazz.defineMethod (c$, "openSplitFrame", \r
157 function (al, format) {\r
158 var thisAlignment = this.alignFrame.getAlignViewport ().getAlignment ();\r
159 if (thisAlignment.isNucleotide () == al.isNucleotide ()) {\r
160 return false;\r
161 }var protein = thisAlignment.isNucleotide () ? al : thisAlignment;\r
162 var dna = thisAlignment.isNucleotide () ? thisAlignment : al;\r
163 var mapped = jalview.analysis.AlignmentUtils.mapProteinToCdna (protein, dna);\r
164 if (!mapped) {\r
165 return false;\r
166 }var title = jalview.util.MessageManager.getString ("label.open_split_window");\r
167 var dialog =  new jalview.appletgui.JVDialog (this.getParent (), title, true, 100, 400);\r
168 dialog.ok.setLabel (jalview.util.MessageManager.getString ("action.yes"));\r
169 dialog.cancel.setLabel (jalview.util.MessageManager.getString ("action.no"));\r
170 var question =  new awt2swing.Panel ( new java.awt.BorderLayout ());\r
171 var text = jalview.util.MessageManager.getString ("label.open_split_window?");\r
172 question.add ( new awt2swing.Label (text, 0), "Center");\r
173 dialog.setMainPanel (question);\r
174 dialog.setVisible (true);\r
175 dialog.toFront ();\r
176 if (!dialog.accept) {\r
177 return false;\r
178 }var applet = this.alignFrame.viewport.applet;\r
179 var copyFrame =  new jalview.appletgui.AlignFrame (this.alignFrame.viewport.getAlignment (), applet, this.alignFrame.getTitle (), false, false);\r
180 var newFrame =  new jalview.appletgui.AlignFrame (al, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false, false);\r
181 var dnaFrame = al.isNucleotide () ? newFrame : copyFrame;\r
182 var proteinFrame = al.isNucleotide () ? copyFrame : newFrame;\r
183 var sf =  new jalview.appletgui.SplitFrame (dnaFrame, proteinFrame);\r
184 sf.addToDisplay (false, applet);\r
185 return true;\r
186 }, "jalview.datamodel.AlignmentI,~S");\r
187 Clazz.defineMethod (c$, "loadAnnotations", \r
188 function () {\r
189 var tcf = null;\r
190 try {\r
191 tcf = jalview.jsdev.GenericFileAdapter.getFile ("TCoffeeScoreFile", [this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE]);\r
192 if (tcf.isValid ()) {\r
193 if (tcf.annotateAlignment (this.alignFrame.viewport.getAlignment (), true)) {\r
194 this.alignFrame.tcoffeeColour.setEnabled (true);\r
195 this.alignFrame.alignPanel.fontChanged ();\r
196 this.alignFrame.changeColour ( new jalview.schemes.TCoffeeColourScheme (this.alignFrame.viewport.getAlignment ()));\r
197 this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_tcoffee_scores_to_alignment"));\r
198 } else {\r
199 this.alignFrame.setStatus (jalview.util.MessageManager.formatMessage ("label.failed_add_tcoffee_scores",  Clazz.newArray (-1, [(tcf.getWarningMessage () != null ? tcf.getWarningMessage () : "")])));\r
200 }} else {\r
201 tcf = null;\r
202 }} catch (x) {\r
203 if (Clazz.exceptionOf (x, Exception)) {\r
204 tcf = null;\r
205 } else {\r
206 throw x;\r
207 }\r
208 }\r
209 if (tcf == null) {\r
210 if ( new jalview.io.AnnotationFile ().annotateAlignmentView (this.alignFrame.viewport, this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE)) {\r
211 this.alignFrame.alignPanel.fontChanged ();\r
212 this.alignFrame.alignPanel.setScrollValues (0, 0);\r
213 this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_annotation_to_alignment"));\r
214 } else {\r
215 if (!this.alignFrame.parseFeaturesFile (this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE)) {\r
216 this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file"));\r
217 }}}});\r
218 Clazz.defineMethod (c$, "openPdbViewer", \r
219 function (text) {\r
220 var pdb =  new jalview.datamodel.PDBEntry ();\r
221 pdb.setFile (text);\r
222  new jalview.appletgui.AppletJmol (pdb,  Clazz.newArray (-1, [this.seq]), null, this.alignFrame.alignPanel, jalview.io.AppletFormatAdapter.PASTE);\r
223 }, "~S");\r
224 Clazz.defineMethod (c$, "cancel", \r
225 function () {\r
226 this.textarea.setText ("");\r
227 if (Clazz.instanceOf (this.getParent (), awt2swing.Frame)) {\r
228 (this.getParent ()).setVisible (false);\r
229 } else {\r
230 (this.getParent ()).setVisible (false);\r
231 }});\r
232 Clazz.defineMethod (c$, "jbInit", \r
233  function () {\r
234 this.textarea.setFont ( new java.awt.Font ("Monospaced", 0, 10));\r
235 this.textarea.setText (jalview.util.MessageManager.getString ("label.paste_your_alignment_file"));\r
236 this.textarea.addMouseListener (this);\r
237 this.setLayout (this.borderLayout1);\r
238 this.accept.addActionListener (this);\r
239 this.addSequences.addActionListener (this);\r
240 this.$cancel.addActionListener (this);\r
241 this.add (this.buttonPanel, "South");\r
242 this.buttonPanel.add (this.accept, null);\r
243 this.buttonPanel.add (this.addSequences);\r
244 this.buttonPanel.add (this.$cancel, null);\r
245 this.add (this.textarea, "Center");\r
246 });\r
247 Clazz.overrideMethod (c$, "mousePressed", \r
248 function (evt) {\r
249 if (this.textarea.getText ().startsWith (jalview.util.MessageManager.getString ("label.paste_your"))) {\r
250 this.textarea.setText ("");\r
251 }}, "java.awt.event.MouseEvent");\r
252 Clazz.overrideMethod (c$, "mouseReleased", \r
253 function (evt) {\r
254 }, "java.awt.event.MouseEvent");\r
255 Clazz.overrideMethod (c$, "mouseClicked", \r
256 function (evt) {\r
257 }, "java.awt.event.MouseEvent");\r
258 Clazz.overrideMethod (c$, "mouseEntered", \r
259 function (evt) {\r
260 }, "java.awt.event.MouseEvent");\r
261 Clazz.overrideMethod (c$, "mouseExited", \r
262 function (evt) {\r
263 }, "java.awt.event.MouseEvent");\r
264 });\r