Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / jalview / controller / AlignViewController.js
1 Clazz.declarePackage ("jalview.controller");
2 Clazz.load (["jalview.api.AlignViewControllerI"], "jalview.controller.AlignViewController", ["jalview.analysis.AlignmentSorter", "$.Grouping", "jalview.commands.OrderCommand", "jalview.datamodel.ColumnSelection", "jalview.io.FeaturesFile", "jalview.util.MessageManager", "java.awt.Color", "java.util.ArrayList", "$.BitSet"], function () {
3 c$ = Clazz.decorateAsClass (function () {
4 this.viewport = null;
5 this.alignPanel = null;
6 this.avcg = null;
7 Clazz.instantialize (this, arguments);
8 }, jalview.controller, "AlignViewController", null, jalview.api.AlignViewControllerI);
9 Clazz.overrideMethod (c$, "finalize", 
10 function () {
11 this.viewport = null;
12 this.alignPanel = null;
13 this.avcg = null;
14 });
15 Clazz.makeConstructor (c$, 
16 function (alignFrame, viewport, alignPanel) {
17 this.avcg = alignFrame;
18 this.viewport = viewport;
19 this.alignPanel = alignPanel;
20 }, "jalview.api.AlignViewControllerGuiI,jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
21 Clazz.overrideMethod (c$, "setViewportAndAlignmentPanel", 
22 function (viewport, alignPanel) {
23 this.alignPanel = alignPanel;
24 this.viewport = viewport;
25 }, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
26 Clazz.overrideMethod (c$, "makeGroupsFromSelection", 
27 function () {
28 var sg = this.viewport.getSelectionGroup ();
29 var cs = this.viewport.getColumnSelection ();
30 var gps = null;
31 if (sg != null && (cs == null || cs.getSelected () == null || cs.size () == 0)) {
32 gps = jalview.analysis.Grouping.makeGroupsFrom (this.viewport.getSequenceSelection (), this.viewport.getAlignmentView (true).getSequenceStrings (this.viewport.getGapCharacter ()), this.viewport.getAlignment ().getGroups ());
33 } else {
34 if (cs != null) {
35 gps = jalview.analysis.Grouping.makeGroupsFromCols ((sg == null) ? this.viewport.getAlignment ().getSequencesArray () : sg.getSequences ().toArray ( new Array (0)), cs, this.viewport.getAlignment ().getGroups ());
36 }}if (gps != null) {
37 this.viewport.getAlignment ().deleteAllGroups ();
38 this.viewport.clearSequenceColours ();
39 this.viewport.setSelectionGroup (null);
40 for (var g = 0; g < gps.length; g++) {
41 gps[g].setshowSequenceLogo (this.viewport.isShowSequenceLogo ());
42 this.viewport.getAlignment ().addGroup (gps[g]);
43 var col =  new java.awt.Color (Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255));
44 col = col.brighter ();
45 for (var sq, $sq = gps[g].getSequences (null).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
46 this.viewport.setSequenceColour (sq, col);
47 }
48 }
49 return true;
50 }return false;
51 });
52 Clazz.overrideMethod (c$, "createGroup", 
53 function () {
54 var sg = this.viewport.getSelectionGroup ();
55 if (sg != null) {
56 this.viewport.getAlignment ().addGroup (sg);
57 return true;
58 }return false;
59 });
60 Clazz.overrideMethod (c$, "unGroup", 
61 function () {
62 var sg = this.viewport.getSelectionGroup ();
63 if (sg != null) {
64 this.viewport.getAlignment ().deleteGroup (sg);
65 return true;
66 }return false;
67 });
68 Clazz.overrideMethod (c$, "deleteGroups", 
69 function () {
70 if (this.viewport.getAlignment ().getGroups () != null && this.viewport.getAlignment ().getGroups ().size () > 0) {
71 this.viewport.getAlignment ().deleteAllGroups ();
72 this.viewport.clearSequenceColours ();
73 this.viewport.setSelectionGroup (null);
74 return true;
75 }return false;
76 });
77 Clazz.overrideMethod (c$, "markColumnsContainingFeatures", 
78 function (invert, extendCurrent, toggle, featureType) {
79 var bs =  new java.util.BitSet ();
80 var alw;
81 var alStart;
82 var sqcol = (this.viewport.getSelectionGroup () == null ? this.viewport.getAlignment () : this.viewport.getSelectionGroup ());
83 alStart = sqcol.getStartRes ();
84 alw = sqcol.getEndRes () + 1;
85 var seqs = sqcol.getSequences ();
86 var nseq = 0;
87 for (var sq, $sq = seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
88 var tfeat = 0;
89 if (sq != null) {
90 var sf = sq.getSequenceFeatures ();
91 if (sf != null) {
92 var ist = sq.findIndex (sq.getStart ());
93 var iend = sq.findIndex (sq.getEnd ());
94 if (iend < alStart || ist > alw) {
95 continue;
96 }for (var sfpos, $sfpos = 0, $$sfpos = sf; $sfpos < $$sfpos.length && ((sfpos = $$sfpos[$sfpos]) || true); $sfpos++) {
97 if (sfpos != null && (featureType.equals (sfpos.getType ()))) {
98 tfeat++;
99 var i = sq.findIndex (sfpos.getBegin ());
100 var j = sq.findIndex (sfpos.getEnd ());
101 if (j < alStart || i > alw) {
102 continue;
103 }if (i < alStart) {
104 i = alStart;
105 }if (i < ist) {
106 i = ist;
107 }if (j > alw) {
108 j = alw;
109 }for (; i <= j; i++) {
110 bs.set (i - 1);
111 }
112 }}
113 }if (tfeat > 0) {
114 nseq++;
115 }}}
116 var cs = this.viewport.getColumnSelection ();
117 if (bs.cardinality () > 0 || invert) {
118 if (cs == null) {
119 cs =  new jalview.datamodel.ColumnSelection ();
120 } else {
121 if (!extendCurrent) {
122 cs.clear ();
123 }}if (invert) {
124 for (var i = bs.nextClearBit (alStart), ibs = bs.nextSetBit (alStart); i >= alStart && i < (alw); ) {
125 if (ibs < 0 || i < ibs) {
126 if (toggle && cs.contains (i)) {
127 cs.removeElement (i++);
128 } else {
129 cs.addElement (i++);
130 }} else {
131 i = bs.nextClearBit (ibs);
132 ibs = bs.nextSetBit (i);
133 }}
134 } else {
135 for (var i = bs.nextSetBit (alStart); i >= alStart; i = bs.nextSetBit (i + 1)) {
136 if (toggle && cs.contains (i)) {
137 cs.removeElement (i);
138 } else {
139 cs.addElement (i);
140 }}
141 }this.viewport.setColumnSelection (cs);
142 this.alignPanel.paintAlignment (true);
143 this.avcg.setStatus (jalview.util.MessageManager.formatMessage ("label.view_controller_toggled_marked",  Clazz.newArray (-1, [(toggle ? jalview.util.MessageManager.getString ("label.toggled") : jalview.util.MessageManager.getString ("label.marked")), (invert ? (Integer.$valueOf ((alw - alStart) - bs.cardinality ()).toString ()) : (Integer.$valueOf (bs.cardinality ()).toString ())), featureType, Integer.$valueOf (nseq).toString ()])));
144 return true;
145 } else {
146 this.avcg.setStatus (jalview.util.MessageManager.formatMessage ("label.no_feature_of_type_found",  Clazz.newArray (-1, [featureType])));
147 if (!extendCurrent && cs != null) {
148 cs.clear ();
149 this.alignPanel.paintAlignment (true);
150 }return false;
151 }}, "~B,~B,~B,~S");
152 Clazz.overrideMethod (c$, "sortAlignmentByFeatureDensity", 
153 function (typ) {
154 this.sortBy (typ, "Sort by Density", jalview.analysis.AlignmentSorter.FEATURE_DENSITY);
155 }, "~A");
156 Clazz.defineMethod (c$, "sortBy", 
157 function (typ, methodText, method) {
158 var fr = this.alignPanel.getFeatureRenderer ();
159 if (typ == null) {
160 typ = fr == null ? null : fr.getDisplayedFeatureTypes ();
161 }var gps = null;
162 gps = fr == null ? null : fr.getDisplayedFeatureGroups ();
163 if (typ != null) {
164 var types =  new java.util.ArrayList ();
165 for (var i = 0; i < typ.length; i++) {
166 if (typ[i] != null) {
167 types.add (typ[i]);
168 }typ =  new Array (types.size ());
169 types.toArray (typ);
170 }
171 }if (gps != null) {
172 var grps =  new java.util.ArrayList ();
173 for (var i = 0; i < gps.length; i++) {
174 if (gps[i] != null) {
175 grps.add (gps[i]);
176 }}
177 gps =  new Array (grps.size ());
178 grps.toArray (gps);
179 }var al = this.viewport.getAlignment ();
180 var start;
181 var stop;
182 var sg = this.viewport.getSelectionGroup ();
183 if (sg != null) {
184 start = sg.getStartRes ();
185 stop = sg.getEndRes ();
186 } else {
187 start = 0;
188 stop = al.getWidth ();
189 }var oldOrder = al.getSequencesArray ();
190 jalview.analysis.AlignmentSorter.sortByFeature (typ, gps, start, stop, al, method);
191 this.avcg.addHistoryItem ( new jalview.commands.OrderCommand (methodText, oldOrder, this.viewport.getAlignment ()));
192 this.alignPanel.paintAlignment (true);
193 }, "~A,~S,~S");
194 Clazz.overrideMethod (c$, "sortAlignmentByFeatureScore", 
195 function (typ) {
196 this.sortBy (typ, "Sort by Feature Score", jalview.analysis.AlignmentSorter.FEATURE_SCORE);
197 }, "~A");
198 Clazz.overrideMethod (c$, "parseFeaturesFile", 
199 function (file, protocol, relaxedIdMatching) {
200 var featuresFile = false;
201 try {
202 featuresFile =  new jalview.io.FeaturesFile (file, protocol).parse (this.viewport.getAlignment ().getDataset (), this.alignPanel.getFeatureRenderer ().getFeatureColours (), false, relaxedIdMatching);
203 } catch (ex) {
204 if (Clazz.exceptionOf (ex, Exception)) {
205 ex.printStackTrace ();
206 } else {
207 throw ex;
208 }
209 }
210 if (featuresFile) {
211 this.avcg.refreshFeatureUI (true);
212 if (this.alignPanel.getFeatureRenderer () != null) {
213 this.alignPanel.getFeatureRenderer ().findAllFeatures (true);
214 }if (this.avcg.getFeatureSettingsUI () != null) {
215 this.avcg.getFeatureSettingsUI ().discoverAllFeatureData ();
216 }this.alignPanel.paintAlignment (true);
217 }return featuresFile;
218 }, "~S,~S,~B");
219 });