X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fcontroller%2FAlignViewController.java;h=443433134510475fc17e9ed5d4ee045d4f62f35b;hb=41fe43633ee3cc43a45a356176689731ff73ba67;hp=757558308463d4eab722e686f0491092de8cabd1;hpb=66993ec5b2bbc67ed10836d2288d938f6c368076;p=jalview.git diff --git a/src/jalview/controller/AlignViewController.java b/src/jalview/controller/AlignViewController.java index 7575583..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; @@ -168,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); @@ -207,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(); @@ -229,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; @@ -244,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) @@ -315,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) @@ -459,7 +462,8 @@ public class AlignViewController implements AlignViewControllerI } else { - avcg.setStatus(MessageManager.getString("label.no_highlighted_regions_marked")); + avcg.setStatus(MessageManager + .getString("label.no_highlighted_regions_marked")); if (!extendCurrent) { cs.clear(); @@ -469,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; + } }