1 Clazz.declarePackage ("jalview.controller");
\r
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 () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
4 this.viewport = null;
\r
5 this.alignPanel = null;
\r
7 Clazz.instantialize (this, arguments);
\r
8 }, jalview.controller, "AlignViewController", null, jalview.api.AlignViewControllerI);
\r
9 Clazz.overrideMethod (c$, "finalize",
\r
11 this.viewport = null;
\r
12 this.alignPanel = null;
\r
15 Clazz.makeConstructor (c$,
\r
16 function (alignFrame, viewport, alignPanel) {
\r
17 this.avcg = alignFrame;
\r
18 this.viewport = viewport;
\r
19 this.alignPanel = alignPanel;
\r
20 }, "jalview.api.AlignViewControllerGuiI,jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
\r
21 Clazz.overrideMethod (c$, "setViewportAndAlignmentPanel",
\r
22 function (viewport, alignPanel) {
\r
23 this.alignPanel = alignPanel;
\r
24 this.viewport = viewport;
\r
25 }, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
\r
26 Clazz.overrideMethod (c$, "makeGroupsFromSelection",
\r
28 var sg = this.viewport.getSelectionGroup ();
\r
29 var cs = this.viewport.getColumnSelection ();
\r
31 if (sg != null && (cs == null || cs.getSelected () == null || cs.size () == 0)) {
\r
32 gps = jalview.analysis.Grouping.makeGroupsFrom (this.viewport.getSequenceSelection (), this.viewport.getAlignmentView (true).getSequenceStrings (this.viewport.getGapCharacter ()), this.viewport.getAlignment ().getGroups ());
\r
35 gps = jalview.analysis.Grouping.makeGroupsFromCols ((sg == null) ? this.viewport.getAlignment ().getSequencesArray () : sg.getSequences ().toArray ( new Array (0)), cs, this.viewport.getAlignment ().getGroups ());
\r
36 }}if (gps != null) {
\r
37 this.viewport.getAlignment ().deleteAllGroups ();
\r
38 this.viewport.clearSequenceColours ();
\r
39 this.viewport.setSelectionGroup (null);
\r
40 for (var g = 0; g < gps.length; g++) {
\r
41 gps[g].setshowSequenceLogo (this.viewport.isShowSequenceLogo ());
\r
42 this.viewport.getAlignment ().addGroup (gps[g]);
\r
43 var col = new java.awt.Color (Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255));
\r
44 col = col.brighter ();
\r
45 for (var sq, $sq = gps[g].getSequences (null).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
\r
46 this.viewport.setSequenceColour (sq, col);
\r
52 Clazz.overrideMethod (c$, "createGroup",
\r
54 var sg = this.viewport.getSelectionGroup ();
\r
56 this.viewport.getAlignment ().addGroup (sg);
\r
60 Clazz.overrideMethod (c$, "unGroup",
\r
62 var sg = this.viewport.getSelectionGroup ();
\r
64 this.viewport.getAlignment ().deleteGroup (sg);
\r
68 Clazz.overrideMethod (c$, "deleteGroups",
\r
70 if (this.viewport.getAlignment ().getGroups () != null && this.viewport.getAlignment ().getGroups ().size () > 0) {
\r
71 this.viewport.getAlignment ().deleteAllGroups ();
\r
72 this.viewport.clearSequenceColours ();
\r
73 this.viewport.setSelectionGroup (null);
\r
77 Clazz.overrideMethod (c$, "markColumnsContainingFeatures",
\r
78 function (invert, extendCurrent, toggle, featureType) {
\r
79 var bs = new java.util.BitSet ();
\r
82 var sqcol = (this.viewport.getSelectionGroup () == null ? this.viewport.getAlignment () : this.viewport.getSelectionGroup ());
\r
83 alStart = sqcol.getStartRes ();
\r
84 alw = sqcol.getEndRes () + 1;
\r
85 var seqs = sqcol.getSequences ();
\r
87 for (var sq, $sq = seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
\r
90 var sf = sq.getSequenceFeatures ();
\r
92 var ist = sq.findIndex (sq.getStart ());
\r
93 var iend = sq.findIndex (sq.getEnd ());
\r
94 if (iend < alStart || ist > alw) {
\r
96 }for (var sfpos, $sfpos = 0, $$sfpos = sf; $sfpos < $$sfpos.length && ((sfpos = $$sfpos[$sfpos]) || true); $sfpos++) {
\r
97 if (sfpos != null && (featureType.equals (sfpos.getType ()))) {
\r
99 var i = sq.findIndex (sfpos.getBegin ());
\r
100 var j = sq.findIndex (sfpos.getEnd ());
\r
101 if (j < alStart || i > alw) {
\r
103 }if (i < alStart) {
\r
109 }for (; i <= j; i++) {
\r
116 var cs = this.viewport.getColumnSelection ();
\r
117 if (bs.cardinality () > 0 || invert) {
\r
119 cs = new jalview.datamodel.ColumnSelection ();
\r
121 if (!extendCurrent) {
\r
124 for (var i = bs.nextClearBit (alStart), ibs = bs.nextSetBit (alStart); i >= alStart && i < (alw); ) {
\r
125 if (ibs < 0 || i < ibs) {
\r
126 if (toggle && cs.contains (i)) {
\r
127 cs.removeElement (i++);
\r
129 cs.addElement (i++);
\r
131 i = bs.nextClearBit (ibs);
\r
132 ibs = bs.nextSetBit (i);
\r
135 for (var i = bs.nextSetBit (alStart); i >= alStart; i = bs.nextSetBit (i + 1)) {
\r
136 if (toggle && cs.contains (i)) {
\r
137 cs.removeElement (i);
\r
141 }this.viewport.setColumnSelection (cs);
\r
142 this.alignPanel.paintAlignment (true);
\r
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 ()])));
\r
146 this.avcg.setStatus (jalview.util.MessageManager.formatMessage ("label.no_feature_of_type_found", Clazz.newArray (-1, [featureType])));
\r
147 if (!extendCurrent && cs != null) {
\r
149 this.alignPanel.paintAlignment (true);
\r
151 }}, "~B,~B,~B,~S");
\r
152 Clazz.overrideMethod (c$, "sortAlignmentByFeatureDensity",
\r
154 this.sortBy (typ, "Sort by Density", jalview.analysis.AlignmentSorter.FEATURE_DENSITY);
\r
156 Clazz.defineMethod (c$, "sortBy",
\r
157 function (typ, methodText, method) {
\r
158 var fr = this.alignPanel.getFeatureRenderer ();
\r
160 typ = fr == null ? null : fr.getDisplayedFeatureTypes ();
\r
162 gps = fr == null ? null : fr.getDisplayedFeatureGroups ();
\r
164 var types = new java.util.ArrayList ();
\r
165 for (var i = 0; i < typ.length; i++) {
\r
166 if (typ[i] != null) {
\r
167 types.add (typ[i]);
\r
168 }typ = new Array (types.size ());
\r
169 types.toArray (typ);
\r
171 }if (gps != null) {
\r
172 var grps = new java.util.ArrayList ();
\r
173 for (var i = 0; i < gps.length; i++) {
\r
174 if (gps[i] != null) {
\r
177 gps = new Array (grps.size ());
\r
178 grps.toArray (gps);
\r
179 }var al = this.viewport.getAlignment ();
\r
182 var sg = this.viewport.getSelectionGroup ();
\r
184 start = sg.getStartRes ();
\r
185 stop = sg.getEndRes ();
\r
188 stop = al.getWidth ();
\r
189 }var oldOrder = al.getSequencesArray ();
\r
190 jalview.analysis.AlignmentSorter.sortByFeature (typ, gps, start, stop, al, method);
\r
191 this.avcg.addHistoryItem ( new jalview.commands.OrderCommand (methodText, oldOrder, this.viewport.getAlignment ()));
\r
192 this.alignPanel.paintAlignment (true);
\r
194 Clazz.overrideMethod (c$, "sortAlignmentByFeatureScore",
\r
196 this.sortBy (typ, "Sort by Feature Score", jalview.analysis.AlignmentSorter.FEATURE_SCORE);
\r
198 Clazz.overrideMethod (c$, "parseFeaturesFile",
\r
199 function (file, protocol, relaxedIdMatching) {
\r
200 var featuresFile = false;
\r
202 featuresFile = new jalview.io.FeaturesFile (file, protocol).parse (this.viewport.getAlignment ().getDataset (), this.alignPanel.getFeatureRenderer ().getFeatureColours (), false, relaxedIdMatching);
\r
204 if (Clazz.exceptionOf (ex, Exception)) {
\r
205 ex.printStackTrace ();
\r
210 if (featuresFile) {
\r
211 this.avcg.refreshFeatureUI (true);
\r
212 if (this.alignPanel.getFeatureRenderer () != null) {
\r
213 this.alignPanel.getFeatureRenderer ().findAllFeatures (true);
\r
214 }if (this.avcg.getFeatureSettingsUI () != null) {
\r
215 this.avcg.getFeatureSettingsUI ().discoverAllFeatureData ();
\r
216 }this.alignPanel.paintAlignment (true);
\r
217 }return featuresFile;
\r