+
+ /**
+ * modify current selection according to a received message.
+ */
+ public void selection(SequenceGroup seqsel, ColumnSelection colsel,
+ SelectionSource source)
+ {
+ // TODO: fix this hack - source of messages is align viewport, but SeqPanel
+ // handles selection messages...
+ if (av == source)
+ {
+ return;
+ }
+ // do we want to thread this ? (contention with seqsel and colsel locks, I
+ // suspect)
+ boolean repaint = false;
+ if (av.followSelection)
+ {
+ if (av.selectionGroup == null || !av.isSelectionGroupChanged())
+ {
+ SequenceGroup sgroup = null;
+ if (seqsel != null)
+ {
+ if (av.alignment==null)
+ {
+ jalview.bin.Cache.log.warn("alignviewport av SeqSetId="+av.getSequenceSetId()+" ViewId="+av.getViewId()+" 's alignment is NULL! returning immediatly.");
+ return;
+ }
+ sgroup = seqsel.intersect(av.alignment,
+ (av.hasHiddenRows) ? av.hiddenRepSequences : null);
+ }
+ if (sgroup != null && sgroup.getSize() > 0)
+ {
+ av.setSelectionGroup(sgroup);
+ }
+ else
+ {
+ av.setSelectionGroup(null);
+ }
+ repaint = av.isSelectionGroupChanged();
+ }
+ if (av.colSel == null || !av.isColSelChanged())
+ {
+ // Check to see if the current selection is from a previous message
+ if (colsel == null || colsel.size() == 0)
+ {
+ av.colSel.clear();
+ }
+ else
+ {
+ av.colSel = new ColumnSelection(colsel);
+ }
+ repaint |= av.isColSelChanged();
+ }
+ }
+ if (repaint)
+ {
+ // probably finessing with multiple redraws here
+ PaintRefresher.Refresh(this, av.getSequenceSetId());
+ // ap.paintAlignment(false);
+ }
+ }