X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fcontroller%2FAlignViewController.java;h=443433134510475fc17e9ed5d4ee045d4f62f35b;hb=c24ec44edbedba55005373c43bf712c047b56faa;hp=1fc194651420304580924613f7fd21dc3386c389;hpb=038cb9c86641c3de91d8f330c5e3267507c46643;p=jalview.git diff --git a/src/jalview/controller/AlignViewController.java b/src/jalview/controller/AlignViewController.java index 1fc1946..4434331 100644 --- a/src/jalview/controller/AlignViewController.java +++ b/src/jalview/controller/AlignViewController.java @@ -20,6 +20,10 @@ */ package jalview.controller; +import java.awt.Color; +import java.util.BitSet; +import java.util.List; + import jalview.analysis.AlignmentSorter; import jalview.api.AlignViewControllerGuiI; import jalview.api.AlignViewControllerI; @@ -29,19 +33,17 @@ import jalview.api.FeatureRenderer; import jalview.commands.OrderCommand; import jalview.datamodel.AlignmentI; import jalview.datamodel.ColumnSelection; +import jalview.datamodel.SearchResultsI; import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; +import jalview.gui.Desktop; import jalview.io.DataSourceType; import jalview.io.FeaturesFile; import jalview.schemes.ColourSchemeI; import jalview.util.MessageManager; -import java.awt.Color; -import java.util.BitSet; -import java.util.List; - public class AlignViewController implements AlignViewControllerI { AlignViewportI viewport = null; @@ -90,8 +92,7 @@ public class AlignViewController implements AlignViewControllerI gps = jalview.analysis.Grouping.makeGroupsFromCols( (sg == null) ? viewport.getAlignment().getSequencesArray() : sg.getSequences().toArray(new SequenceI[0]), - cs, viewport.getAlignment().getGroups(), - viewport.getAlignment().getHiddenColumns()); + cs, viewport.getAlignment().getGroups()); } } if (gps != null) @@ -169,8 +170,9 @@ public class AlignViewController implements AlignViewControllerI BitSet bs = new BitSet(); boolean searchSelection = viewport.getSelectionGroup() != null && !extendCurrent; - SequenceCollectionI sqcol = searchSelection ? viewport - .getSelectionGroup() : viewport.getAlignment(); + SequenceCollectionI sqcol = searchSelection + ? viewport.getSelectionGroup() + : viewport.getAlignment(); int nseq = findColumnsWithFeature(featureType, sqcol, bs); @@ -208,8 +210,9 @@ public class AlignViewController implements AlignViewControllerI { String key = searchSelection ? "label.no_feature_found_selection" : "label.no_feature_of_type_found"; - avcg.setStatus(MessageManager.formatMessage(key, - new String[] { featureType })); + avcg.setStatus( + MessageManager.formatMessage(key, new String[] + { featureType })); if (!extendCurrent) { cs.clear(); @@ -230,11 +233,11 @@ public class AlignViewController implements AlignViewControllerI * @param bs * @return */ - int findColumnsWithFeature(String featureType, - SequenceCollectionI sqcol, BitSet bs) + int findColumnsWithFeature(String featureType, SequenceCollectionI sqcol, + BitSet bs) { - FeatureRenderer fr = alignPanel == null ? null : alignPanel - .getFeatureRenderer(); + FeatureRenderer fr = alignPanel == null ? null + : alignPanel.getFeatureRenderer(); final int startColumn = sqcol.getStartRes() + 1; // converted to base 1 final int endColumn = sqcol.getEndRes() + 1; @@ -245,8 +248,8 @@ public class AlignViewController implements AlignViewControllerI if (sq != null) { // int ist = sq.findPosition(sqcol.getStartRes()); - List sfs = sq.findFeatures(startColumn, - endColumn, featureType); + List sfs = sq.findFeatures(startColumn, endColumn, + featureType); boolean found = false; for (SequenceFeature sf : sfs) @@ -316,17 +319,16 @@ public class AlignViewController implements AlignViewControllerI } /** - * Sorts the alignment (or current selection) by either average score or density - * of the specified feature types, and adds to the command history. If - * {@code types} is null, all visible feature types are used for the sort. If no - * feature types apply, does nothing. + * Sorts the alignment (or current selection) by either average score or + * density of the specified feature types, and adds to the command history. If + * {@code types} is null, all visible feature types are used for the sort. If + * no feature types apply, does nothing. * * @param types * @param methodText - * - text shown in Undo/Redo command + * - text shown in Undo/Redo command * @param method - * - passed to - * jalview.analysis.AlignmentSorter.sortByFeatures() + * - passed to jalview.analysis.AlignmentSorter.sortByFeatures() */ protected void sortByFeatures(List types, String methodText, final String method) @@ -375,7 +377,7 @@ public class AlignViewController implements AlignViewControllerI } @Override - public boolean parseFeaturesFile(String file, DataSourceType protocol, + public boolean parseFeaturesFile(Object file, DataSourceType protocol, boolean relaxedIdMatching) { boolean featuresAdded = false; @@ -461,7 +463,7 @@ public class AlignViewController implements AlignViewControllerI else { avcg.setStatus(MessageManager - .formatMessage("No highlighted regions marked")); + .getString("label.no_highlighted_regions_marked")); if (!extendCurrent) { cs.clear(); @@ -471,4 +473,31 @@ public class AlignViewController implements AlignViewControllerI return false; } + @Override + public boolean copyHighlightedRegionsToClipboard() + { + if (!viewport.hasSearchResults()) + { + // do nothing if no selection exists + return false; + } + + SearchResultsI searchResults = viewport.getSearchResults(); + if (searchResults.isEmpty()) + { + return false; // shouldn't happen + } + List seqs = searchResults.getMatchingSubSequences(); + + // TODO: pass in hiddenColumns according to intersection of searchResults + // and visible columns. Currently this isn't done, since each contig becomes + // a single subsequence + Desktop.jalviewClipboard = new Object[] { + seqs.toArray(new SequenceI[0]), + alignPanel.getAlignment().getDataset(), null }; + avcg.setStatus(MessageManager.formatMessage( + "label.copied_sequences_to_clipboard", seqs.size())); + // Technically we should return false, since view has not changed + return false; + } }