X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FSeqPanel.java;fp=src%2Fjalview%2Fappletgui%2FSeqPanel.java;h=02172d655327c6c8fffed55b3c532dd9a5ececf1;hb=55639a28eb522f3db27009cb6ac66e46dc9e111f;hp=31bf6a48af3a14ba96afd2d99d026c0171919f19;hpb=4aae950e66ed30fb4ac50dcbae4257bfda2518fc;p=jalview.git diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 31bf6a4..02172d6 100644 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -919,6 +919,21 @@ public class SeqPanel extends Panel implements MouseMotionListener, Tooltip tooltip; + /** + * set when the current UI interaction has resulted in a change that requires + * overview shading to be recalculated. this could be changed to something + * more expressive that indicates what actually has changed, so selective + * redraws can be applied + */ + private boolean needOverviewUpdate; // TODO: refactor to avcontroller + + /** + * set if av.getSelectionGroup() refers to a group that is defined on the + * alignment view, rather than a transient selection + */ + private boolean editingDefinedGroup = false; // TODO: refactor to avcontroller + // or viewModel + @Override public void mouseDragged(MouseEvent evt) { @@ -1421,10 +1436,12 @@ public class SeqPanel extends Panel implements MouseMotionListener, && res < stretchGroup.getEndRes()) { av.setSelectionGroup(stretchGroup); + editingDefinedGroup = true; } else { stretchGroup = null; + editingDefinedGroup = false; } } @@ -1444,6 +1461,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, && allGroups[i].getEndRes() >= res) { stretchGroup = allGroups[i]; + editingDefinedGroup = true; break; } } @@ -1499,6 +1517,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, sg.setEndRes(res); sg.addSequence(sequence, false); av.setSelectionGroup(sg); + editingDefinedGroup = false; stretchGroup = sg; if (av.getConservationSelected()) @@ -1521,9 +1540,10 @@ public class SeqPanel extends Panel implements MouseMotionListener, { return; } - - stretchGroup.recalcConservation(); // always do this - annotation has own - // state + // always do this - annotation has own state + // but defer colourscheme update until hidden sequences are passed in + boolean vischange = stretchGroup.recalcConservation(true); + needOverviewUpdate |= vischange && editingDefinedGroup; if (stretchGroup.cs != null) { stretchGroup.cs.alignmentChanged(stretchGroup, @@ -1540,11 +1560,13 @@ public class SeqPanel extends Panel implements MouseMotionListener, stretchGroup.getName()); } } + PaintRefresher.Refresh(ap, av.getSequenceSetId()); + ap.paintAlignment(needOverviewUpdate); + needOverviewUpdate =false; + editingDefinedGroup = false; changeEndRes = false; changeStartRes = false; stretchGroup = null; - PaintRefresher.Refresh(ap, av.getSequenceSetId()); - ap.paintAlignment(true); av.sendSelection(); } @@ -1596,6 +1618,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (res > (stretchGroup.getStartRes() - 1)) { stretchGroup.setEndRes(res); + needOverviewUpdate |= editingDefinedGroup; } } else if (changeStartRes) @@ -1603,6 +1626,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (res < (stretchGroup.getEndRes() + 1)) { stretchGroup.setStartRes(res); + needOverviewUpdate |= editingDefinedGroup; } } @@ -1636,6 +1660,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (stretchGroup.getSequences(null).contains(nextSeq)) { stretchGroup.deleteSequence(seq, false); + needOverviewUpdate |= editingDefinedGroup; } else { @@ -1645,6 +1670,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, } stretchGroup.addSequence(nextSeq, false); + needOverviewUpdate |= editingDefinedGroup; } }