X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FSeqPanel.java;h=02172d655327c6c8fffed55b3c532dd9a5ececf1;hb=4d74e766d77156f71533564b32006a06df8f01bd;hp=9870e68756f519e3e2c58bc43c7d93301946c7f2;hpb=4d7f98a6dd54d9863ba449ec79dcd95d25ed863d;p=jalview.git diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 9870e68..02172d6 100644 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -481,7 +481,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, * Convert position in sequence (base 1) to sequence character array * index (base 0) */ - int start = m.getStart() - 1; + int start = m.getStart() - m.getSequence().getStart(); setStatusMessage(seq, start, sequenceIndex); return true; } @@ -489,6 +489,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, return false; } + @Override public void mousePressed(MouseEvent evt) { lastMousePress = evt.getPoint(); @@ -539,6 +540,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, return; } + @Override public void mouseClicked(MouseEvent evt) { SequenceI sequence = av.getAlignment().getSequenceAt(findSeq(evt)); @@ -572,6 +574,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, } } + @Override public void mouseReleased(MouseEvent evt) { mouseDragging = false; @@ -715,6 +718,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, String lastMessage; + @Override public void mouseOverSequence(SequenceI sequence, int index, int pos) { String tmp = sequence.hashCode() + index + ""; @@ -726,6 +730,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, lastMessage = tmp; } + @Override public void highlightSequence(SearchResults results) { if (av.isFollowHighlight()) @@ -746,12 +751,14 @@ public class SeqPanel extends Panel implements MouseMotionListener, return this.ap == null ? null : this.ap.av; } + @Override public void updateColours(SequenceI seq, int index) { System.out.println("update the seqPanel colours"); // repaint(); } + @Override public void mouseMoved(MouseEvent evt) { int res = findRes(evt); @@ -912,6 +919,22 @@ 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) { if (mouseWheelPressed) @@ -1413,10 +1436,12 @@ public class SeqPanel extends Panel implements MouseMotionListener, && res < stretchGroup.getEndRes()) { av.setSelectionGroup(stretchGroup); + editingDefinedGroup = true; } else { stretchGroup = null; + editingDefinedGroup = false; } } @@ -1436,6 +1461,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, && allGroups[i].getEndRes() >= res) { stretchGroup = allGroups[i]; + editingDefinedGroup = true; break; } } @@ -1491,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()) @@ -1513,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, @@ -1532,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(); } @@ -1588,6 +1618,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (res > (stretchGroup.getStartRes() - 1)) { stretchGroup.setEndRes(res); + needOverviewUpdate |= editingDefinedGroup; } } else if (changeStartRes) @@ -1595,6 +1626,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (res < (stretchGroup.getEndRes() + 1)) { stretchGroup.setStartRes(res); + needOverviewUpdate |= editingDefinedGroup; } } @@ -1628,6 +1660,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (stretchGroup.getSequences(null).contains(nextSeq)) { stretchGroup.deleteSequence(seq, false); + needOverviewUpdate |= editingDefinedGroup; } else { @@ -1637,6 +1670,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, } stretchGroup.addSequence(nextSeq, false); + needOverviewUpdate |= editingDefinedGroup; } } @@ -1659,6 +1693,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, seqCanvas.repaint(); } + @Override public void mouseEntered(MouseEvent e) { if (oldSeq < 0) @@ -1673,6 +1708,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, } } + @Override public void mouseExited(MouseEvent e) { if (av.getWrapAlignment()) @@ -1732,6 +1768,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, running = false; } + @Override public void run() { running = true; @@ -1776,6 +1813,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, /** * modify current selection according to a received message. */ + @Override public void selection(SequenceGroup seqsel, ColumnSelection colsel, SelectionSource source) { @@ -1801,9 +1839,12 @@ public class SeqPanel extends Panel implements MouseMotionListener, // do we want to thread this ? (contention with seqsel and colsel locks, I // suspect) - // rules are: colsel is copied if there is a real intersection between - // sequence selection - boolean repaint = false, copycolsel = true; + /* + * only copy colsel if there is a real intersection between + * sequence selection and this panel's alignment + */ + boolean repaint = false; + boolean copycolsel = false; if (av.getSelectionGroup() == null || !av.isSelectionGroupChanged(true)) { SequenceGroup sgroup = null; @@ -1820,11 +1861,9 @@ public class SeqPanel extends Panel implements MouseMotionListener, } sgroup = seqsel.intersect(av.getAlignment(), (av.hasHiddenRows()) ? av.getHiddenRepSequences() : null); - if ((sgroup == null || sgroup.getSize() == 0) - && (colsel == null || colsel.size() == 0)) + if ((sgroup != null && sgroup.getSize() > 0)) { - // don't copy columns if the region didn't intersect. - copycolsel = false; + copycolsel = true; } } if (sgroup != null && sgroup.getSize() > 0) @@ -1843,7 +1882,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, { // the current selection is unset or from a previous message // so import the new colsel. - if (colsel == null || colsel.size() == 0) + if (colsel == null || colsel.isEmpty()) { if (av.getColumnSelection() != null) { @@ -1952,7 +1991,6 @@ public class SeqPanel extends Panel implements MouseMotionListener, ColumnSelection cs = MappingUtils.mapColumnSelection(colsel, sourceAv, av); av.setColumnSelection(cs); - av.isColSelChanged(true); ap.scalePanelHolder.repaint(); ap.repaint();