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 () {
5 this.alignPanel = null;
7 Clazz.instantialize (this, arguments);
8 }, jalview.controller, "AlignViewController", null, jalview.api.AlignViewControllerI);
9 Clazz.overrideMethod (c$, "finalize",
12 this.alignPanel = null;
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",
28 var sg = this.viewport.getSelectionGroup ();
29 var cs = this.viewport.getColumnSelection ();
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 ());
35 gps = jalview.analysis.Grouping.makeGroupsFromCols ((sg == null) ? this.viewport.getAlignment ().getSequencesArray () : sg.getSequences ().toArray ( new Array (0)), cs, this.viewport.getAlignment ().getGroups ());
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);
52 Clazz.overrideMethod (c$, "createGroup",
54 var sg = this.viewport.getSelectionGroup ();
56 this.viewport.getAlignment ().addGroup (sg);
60 Clazz.overrideMethod (c$, "unGroup",
62 var sg = this.viewport.getSelectionGroup ();
64 this.viewport.getAlignment ().deleteGroup (sg);
68 Clazz.overrideMethod (c$, "deleteGroups",
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);
77 Clazz.overrideMethod (c$, "markColumnsContainingFeatures",
78 function (invert, extendCurrent, toggle, featureType) {
79 var bs = new java.util.BitSet ();
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 ();
87 for (var sq, $sq = seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
90 var sf = sq.getSequenceFeatures ();
92 var ist = sq.findIndex (sq.getStart ());
93 var iend = sq.findIndex (sq.getEnd ());
94 if (iend < alStart || ist > alw) {
96 }for (var sfpos, $sfpos = 0, $$sfpos = sf; $sfpos < $$sfpos.length && ((sfpos = $$sfpos[$sfpos]) || true); $sfpos++) {
97 if (sfpos != null && (featureType.equals (sfpos.getType ()))) {
99 var i = sq.findIndex (sfpos.getBegin ());
100 var j = sq.findIndex (sfpos.getEnd ());
101 if (j < alStart || i > alw) {
109 }for (; i <= j; i++) {
116 var cs = this.viewport.getColumnSelection ();
117 if (bs.cardinality () > 0 || invert) {
119 cs = new jalview.datamodel.ColumnSelection ();
121 if (!extendCurrent) {
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++);
131 i = bs.nextClearBit (ibs);
132 ibs = bs.nextSetBit (i);
135 for (var i = bs.nextSetBit (alStart); i >= alStart; i = bs.nextSetBit (i + 1)) {
136 if (toggle && cs.contains (i)) {
137 cs.removeElement (i);
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 ()])));
146 this.avcg.setStatus (jalview.util.MessageManager.formatMessage ("label.no_feature_of_type_found", Clazz.newArray (-1, [featureType])));
147 if (!extendCurrent && cs != null) {
149 this.alignPanel.paintAlignment (true);
152 Clazz.overrideMethod (c$, "sortAlignmentByFeatureDensity",
154 this.sortBy (typ, "Sort by Density", jalview.analysis.AlignmentSorter.FEATURE_DENSITY);
156 Clazz.defineMethod (c$, "sortBy",
157 function (typ, methodText, method) {
158 var fr = this.alignPanel.getFeatureRenderer ();
160 typ = fr == null ? null : fr.getDisplayedFeatureTypes ();
162 gps = fr == null ? null : fr.getDisplayedFeatureGroups ();
164 var types = new java.util.ArrayList ();
165 for (var i = 0; i < typ.length; i++) {
166 if (typ[i] != null) {
168 }typ = new Array (types.size ());
172 var grps = new java.util.ArrayList ();
173 for (var i = 0; i < gps.length; i++) {
174 if (gps[i] != null) {
177 gps = new Array (grps.size ());
179 }var al = this.viewport.getAlignment ();
182 var sg = this.viewport.getSelectionGroup ();
184 start = sg.getStartRes ();
185 stop = sg.getEndRes ();
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);
194 Clazz.overrideMethod (c$, "sortAlignmentByFeatureScore",
196 this.sortBy (typ, "Sort by Feature Score", jalview.analysis.AlignmentSorter.FEATURE_SCORE);
198 Clazz.overrideMethod (c$, "parseFeaturesFile",
199 function (file, protocol, relaxedIdMatching) {
200 var featuresFile = false;
202 featuresFile = new jalview.io.FeaturesFile (file, protocol).parse (this.viewport.getAlignment ().getDataset (), this.alignPanel.getFeatureRenderer ().getFeatureColours (), false, relaxedIdMatching);
204 if (Clazz.exceptionOf (ex, Exception)) {
205 ex.printStackTrace ();
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;