X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=8ebcc87fca4edbd63a1626078ba7aecfc21962f0;hb=ebca5f7880f838a5564dd419274ad6025b456dab;hp=2d44a0f1fd8c86e70c6cb8772283c5d81c0bc046;hpb=2a5bc21c7dde626c7c99e98d5b8f6bfba736f738;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 2d44a0f..8ebcc87 100644 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -825,6 +825,20 @@ public class SeqPanel extends JPanel implements MouseListener, String lastTooltip; /** + * 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 = false; // 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 + + /** * Set status message in alignment panel * * @param sequence @@ -1568,10 +1582,12 @@ public class SeqPanel extends JPanel implements MouseListener, && (res < stretchGroup.getEndRes())) { av.setSelectionGroup(stretchGroup); + editingDefinedGroup = true; } else { stretchGroup = null; + editingDefinedGroup = false; } } else if (!stretchGroup.getSequences(null).contains(sequence) @@ -1590,6 +1606,7 @@ public class SeqPanel extends JPanel implements MouseListener, && (allGroups[i].getEndRes() >= res)) { stretchGroup = allGroups[i]; + editingDefinedGroup = true; break; } } @@ -1639,7 +1656,7 @@ public class SeqPanel extends JPanel implements MouseListener, sg.setEndRes(res); sg.addSequence(sequence, false); av.setSelectionGroup(sg); - + editingDefinedGroup = false; stretchGroup = sg; if (av.getConservationSelected()) @@ -1682,9 +1699,10 @@ public class SeqPanel extends JPanel implements MouseListener, { 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, @@ -1702,8 +1720,9 @@ public class SeqPanel extends JPanel implements MouseListener, } } PaintRefresher.Refresh(this, av.getSequenceSetId()); - ap.paintAlignment(true); - + ap.paintAlignment(needOverviewUpdate); + needOverviewUpdate =false; + editingDefinedGroup = false; changeEndRes = false; changeStartRes = false; stretchGroup = null; @@ -1757,6 +1776,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (res > (stretchGroup.getStartRes() - 1)) { stretchGroup.setEndRes(res); + needOverviewUpdate |= editingDefinedGroup; } } else if (changeStartRes) @@ -1764,6 +1784,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (res < (stretchGroup.getEndRes() + 1)) { stretchGroup.setStartRes(res); + needOverviewUpdate |= editingDefinedGroup; } } @@ -1797,6 +1818,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (stretchGroup.getSequences(null).contains(nextSeq)) { stretchGroup.deleteSequence(seq, false); + needOverviewUpdate |= editingDefinedGroup; } else { @@ -1806,6 +1828,7 @@ public class SeqPanel extends JPanel implements MouseListener, } stretchGroup.addSequence(nextSeq, false); + needOverviewUpdate |= editingDefinedGroup; } }