+
+ /**
+ * If this panel is a 'slave' of the selection source, tries to map the source
+ * selection to a local one, and returns true. Else returns false.
+ *
+ * @param seqsel
+ * @param colsel
+ * @param source
+ */
+ protected boolean selectionAsSlave(SequenceGroup seqsel,
+ ColumnSelection colsel, SelectionSource source)
+ {
+ if (!(source instanceof AlignViewportI)) {
+ return false;
+ }
+ final AlignViewportI sourceAv = (AlignViewportI) source;
+ if (sourceAv.getSlave() != av)
+ {
+ return false;
+ }
+
+ /*
+ * Map sequence selection. Note the SequenceGroup holds aligned sequences,
+ * the mappings hold dataset sequences.
+ */
+ AlignedCodonFrame[] codonFrames = sourceAv.getAlignment()
+ .getCodonFrames();
+ SequenceGroup sg = new SequenceGroup();
+ for (SequenceI selected : seqsel.getSequences())
+ {
+ for (AlignedCodonFrame acf : codonFrames)
+ {
+ SequenceI dnaSeq = acf.getDnaForAaSeq(selected);
+ if (dnaSeq != null)
+ {
+ for (SequenceI seq : av.getAlignment().getSequences())
+ {
+ if (seq.getDatasetSequence() == dnaSeq)
+ {
+ sg.addSequence(seq, false);
+ break;
+ }
+ }
+ }
+ }
+ }
+ av.setSelectionGroup(sg);
+ av.isSelectionGroupChanged(true);
+ // ((AlignmentViewport) slave).firePropertyChange("alignment", null, slave
+ // .getAlignment()
+ // .getSequences());
+
+ /*
+ * Map column selection
+ */
+ // TODO
+
+ AlignmentPanel ap = av.getAlignPanel();
+ PaintRefresher.Refresh(this, av.getSequenceSetId());
+
+ return true;
+ }