X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fcontroller%2FAlignViewController.java;h=24439caa05355860b5d9d2d67950d19bf0c23643;hb=1070450e1afee97a5b4567416f5b7655fbfa59f1;hp=1b7ee71bc0b2084e0c43524a9572b8a4ab07d182;hpb=a218846f58ddfd7c6503f79a61f55fddb9ec016e;p=jalview.git diff --git a/src/jalview/controller/AlignViewController.java b/src/jalview/controller/AlignViewController.java index 1b7ee71..24439ca 100644 --- a/src/jalview/controller/AlignViewController.java +++ b/src/jalview/controller/AlignViewController.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,11 +20,6 @@ */ package jalview.controller; -import java.awt.Color; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.List; - import jalview.analysis.AlignmentSorter; import jalview.api.AlignViewControllerGuiI; import jalview.api.AlignViewControllerI; @@ -38,6 +33,12 @@ import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; +import jalview.io.FeaturesFile; +import jalview.util.MessageManager; + +import java.awt.Color; +import java.util.BitSet; +import java.util.List; public class AlignViewController implements AlignViewControllerI { @@ -78,14 +79,28 @@ public class AlignViewController implements AlignViewControllerI @Override public boolean makeGroupsFromSelection() { - - if (viewport.getSelectionGroup() != null) + SequenceGroup sg = viewport.getSelectionGroup(); + ColumnSelection cs = viewport.getColumnSelection(); + SequenceGroup[] gps = null; + if (sg != null && (cs == null || cs.isEmpty())) + { + gps = jalview.analysis.Grouping.makeGroupsFrom(viewport + .getSequenceSelection(), viewport.getAlignmentView(true) + .getSequenceStrings(viewport.getGapCharacter()), viewport + .getAlignment().getGroups()); + } + else + { + if (cs != null) + { + gps = jalview.analysis.Grouping.makeGroupsFromCols( + (sg == null) ? viewport.getAlignment().getSequencesArray() + : sg.getSequences().toArray(new SequenceI[0]), cs, + viewport.getAlignment().getGroups()); + } + } + if (gps != null) { - SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( - viewport.getSequenceSelection(), - viewport.getAlignmentView(true).getSequenceStrings( - viewport.getGapCharacter()), viewport.getAlignment() - .getGroups()); viewport.getAlignment().deleteAllGroups(); viewport.clearSequenceColours(); viewport.setSelectionGroup(null); @@ -99,7 +114,9 @@ public class AlignViewController implements AlignViewControllerI (int) (Math.random() * 255), (int) (Math.random() * 255)); col = col.brighter(); for (SequenceI sq : gps[g].getSequences(null)) + { viewport.setSequenceColour(sq, col); + } } return true; } @@ -164,13 +181,7 @@ public class AlignViewController implements AlignViewControllerI int tfeat = 0; if (sq != null) { - SequenceI dsq = sq.getDatasetSequence(); - while (dsq.getDatasetSequence() != null) - { - dsq = dsq.getDatasetSequence(); - } - ; - SequenceFeature[] sf = dsq.getSequenceFeatures(); + SequenceFeature[] sf = sq.getSequenceFeatures(); if (sf != null) { int ist = sq.findIndex(sq.getStart()); @@ -227,6 +238,7 @@ public class AlignViewController implements AlignViewControllerI ColumnSelection cs = viewport.getColumnSelection(); if (bs.cardinality() > 0 || invert) { + boolean changed = false; if (cs == null) { cs = new ColumnSelection(); @@ -235,6 +247,7 @@ public class AlignViewController implements AlignViewControllerI { if (!extendCurrent) { + changed = !cs.isEmpty(); cs.clear(); } } @@ -246,6 +259,7 @@ public class AlignViewController implements AlignViewControllerI { if (ibs < 0 || i < ibs) { + changed = true; if (toggle && cs.contains(i)) { cs.removeElement(i++); @@ -267,6 +281,7 @@ public class AlignViewController implements AlignViewControllerI for (int i = bs.nextSetBit(alStart); i >= alStart; i = bs .nextSetBit(i + 1)) { + changed = true; if (toggle && cs.contains(i)) { cs.removeElement(i); @@ -277,68 +292,54 @@ public class AlignViewController implements AlignViewControllerI } } } - viewport.setColumnSelection(cs); - alignPanel.paintAlignment(true); - avcg.setStatus((toggle ? "Toggled " : "Marked ") - + (invert ? (alw - alStart) - bs.cardinality() : bs - .cardinality()) + " columns " - + (invert ? "not " : "") + "containing features of type " - + featureType + " across " + nseq + " sequence(s)"); - return true; + if (changed) + { + viewport.setColumnSelection(cs); + alignPanel.paintAlignment(true); + avcg.setStatus(MessageManager.formatMessage( + "label.view_controller_toggled_marked", + new String[] { + (toggle ? MessageManager.getString("label.toggled") + : MessageManager.getString("label.marked")), + (invert ? (Integer.valueOf((alw - alStart) + - bs.cardinality()).toString()) : (Integer + .valueOf(bs.cardinality()).toString())), + featureType, Integer.valueOf(nseq).toString() })); + return true; + } } else { - avcg.setStatus("No features of type " + featureType + " found."); + avcg.setStatus(MessageManager.formatMessage( + "label.no_feature_of_type_found", + new String[] { featureType })); if (!extendCurrent && cs != null) { cs.clear(); alignPanel.paintAlignment(true); } - return false; } + return false; } @Override - public void sortAlignmentByFeatureDensity(String[] typ) + public void sortAlignmentByFeatureDensity(List typ) { sortBy(typ, "Sort by Density", AlignmentSorter.FEATURE_DENSITY); } - protected void sortBy(String[] typ, String methodText, final String method) + protected void sortBy(List typ, String methodText, + final String method) { FeatureRenderer fr = alignPanel.getFeatureRenderer(); - if (typ == null) + if (typ == null && fr != null) { - typ = fr==null ? null : fr.getDisplayedFeatureTypes(); + typ = fr.getDisplayedFeatureTypes(); } - String gps[] = null; - gps = fr==null ? null : fr.getDisplayedFeatureGroups(); - if (typ != null) + List gps = null; + if (fr != null) { - ArrayList types = new ArrayList(); - for (int i = 0; i < typ.length; i++) - { - if (typ[i] != null) - { - types.add(typ[i]); - } - typ = new String[types.size()]; - types.toArray(typ); - } - } - if (gps != null) - { - ArrayList grps = new ArrayList(); - - for (int i = 0; i < gps.length; i++) - { - if (gps[i] != null) - { - grps.add(gps[i]); - } - } - gps = new String[grps.size()]; - grps.toArray(gps); + gps = fr.getDisplayedFeatureGroups(); } AlignmentI al = viewport.getAlignment(); @@ -363,8 +364,42 @@ public class AlignViewController implements AlignViewControllerI } @Override - public void sortAlignmentByFeatureScore(String[] typ) + public void sortAlignmentByFeatureScore(List typ) { sortBy(typ, "Sort by Feature Score", AlignmentSorter.FEATURE_SCORE); } + + @Override + public boolean parseFeaturesFile(String file, String protocol, + boolean relaxedIdMatching) + { + boolean featuresFile = false; + try + { + featuresFile = new FeaturesFile(false, file, protocol).parse(viewport + .getAlignment().getDataset(), alignPanel.getFeatureRenderer() + .getFeatureColours(), false, relaxedIdMatching); + } catch (Exception ex) + { + ex.printStackTrace(); + } + + if (featuresFile) + { + avcg.refreshFeatureUI(true); + if (alignPanel.getFeatureRenderer() != null) + { + // update the min/max ranges where necessary + alignPanel.getFeatureRenderer().findAllFeatures(true); + } + if (avcg.getFeatureSettingsUI() != null) + { + avcg.getFeatureSettingsUI().discoverAllFeatureData(); + } + alignPanel.paintAlignment(true); + } + + return featuresFile; + + } }