+ return featuresAdded;
+
+ }
+
+ /**
+ *
+ * Add highlighted sequences to selected rows. Exclude highlighted sequences
+ * from selected rows. toggle inclusion or exclusion of highlighted sequences.
+ * or add/exclude/toggle for sequences not highlighted.
+ *
+ * @param invert
+ * - when true, sequences that are not highlighted are added/removed
+ * from selection
+ * @param extendCurrent
+ * - normally true , the current selected group is modified.
+ * Otherwise a new selection is created
+ * @param toggle
+ * - toggle selection status for highlighted/not highlighted sequence
+ * @return
+ */
+ public boolean selectHighlightedSequences(boolean invert,
+ boolean extendCurrent, boolean toggle)
+ {
+ List<SequenceI> results = alignPanel.getAlignViewport()
+ .getHighlightedSeqs();
+
+ SequenceGroup sq = (extendCurrent
+ && viewport.getSelectionGroup() != null)
+ ? viewport.getSelectionGroup()
+ : new SequenceGroup();
+
+ SearchResultsI searchResults = viewport.getSearchResults();
+ if (invert)
+ {
+ List<SequenceI> nothighlighted = new ArrayList();
+ for (SequenceI seq : alignPanel.getAlignViewport().getAlignment()
+ .getSequences())
+ {
+ if (!results.contains(seq) && (searchResults == null
+ || !searchResults.involvesSequence(seq)))
+ {
+ nothighlighted.add(seq);
+ }
+ }
+ results = nothighlighted;
+ }
+ else
+ {
+ // copy list and add in search results
+ results = new ArrayList(results);
+ if (searchResults != null)
+ {
+ for (SequenceI seq : alignPanel.getAlignViewport().getAlignment()
+ .getSequences())
+ {
+ if (searchResults.involvesSequence(seq))
+ {
+ results.add(seq);
+ }
+ }
+ }
+ }
+
+ if (results == null || results.size() == 0)
+ {
+ // do nothing if no selection exists
+ // unless toggle ??
+ return false;
+ }
+
+ boolean changed = false;
+
+ for (SequenceI seq : results)
+ {
+ int size = sq.getSize();
+ if (toggle)
+ {
+ sq.addOrRemove(seq, false);
+ }
+ else
+ {
+ sq.addSequence(seq, false);
+ }
+ changed |= size != sq.getSize();
+ }
+
+ if (sq.getSize() == 0)
+ {
+ viewport.setSelectionGroup(null);
+ }
+ else
+ {
+ if (sq != viewport.getSelectionGroup())
+ {
+ sq.setStartRes(0);
+ sq.setEndRes(viewport.getRanges().getAbsoluteAlignmentWidth());
+ }
+ viewport.setSelectionGroup(sq);
+ }
+
+ alignPanel.paintAlignment(false, false);