X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;fp=src%2Fjalview%2Fgui%2FSeqPanel.java;h=c8a2ec90ef9b6646fd22d77ec69ccb030ed0d602;hb=d043ce47fc710d3eb2629ba926a8a7417bd67d8c;hp=111b4c0112b6fec9a47ad37b7a90535fbb99f171;hpb=04c8f7bff663aa469127e9eed4164e02933782f1;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 111b4c0..c8a2ec9 100644 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -87,6 +87,7 @@ public class SeqPanel extends JPanel SequenceListener, SelectionListener { /* + * * a class that holds computed mouse position * - column of the alignment (0...) * - sequence offset (0...) @@ -242,11 +243,13 @@ public class SeqPanel extends JPanel */ public SeqPanel(AlignViewport viewport, AlignmentPanel alignPanel) { + setName("SeqPanel"); seqARep = new SequenceAnnotationReport(true); ToolTipManager.sharedInstance().registerComponent(this); ToolTipManager.sharedInstance().setInitialDelay(0); ToolTipManager.sharedInstance().setDismissDelay(10000); - + + this.av = viewport; setBackground(Color.white); @@ -292,8 +295,7 @@ public class SeqPanel extends JPanel int alignmentHeight = av.getAlignment().getHeight(); if (av.getWrapAlignment()) { - seqCanvas.calculateWrappedGeometry(seqCanvas.getWidth(), - seqCanvas.getHeight()); + seqCanvas.calculateWrappedGeometry(); /* * yPos modulo height of repeating width @@ -341,7 +343,6 @@ public class SeqPanel extends JPanel return new MousePos(col, seqIndex, annIndex); } - /** * Returns the aligned sequence position (base 0) at the mouse position, or * the closest visible one @@ -429,8 +430,7 @@ public class SeqPanel extends JPanel if (editCommand != null && editCommand.getSize() > 0) { ap.alignFrame.addHistoryItem(editCommand); - av.firePropertyChange("alignment", null, - av.getAlignment().getSequences()); + ap.av.notifyAlignment(); } } finally { @@ -483,9 +483,8 @@ public class SeqPanel extends JPanel void moveCursor(int dx, int dy) { - moveCursor(dx, dy, false); + moveCursor(dx, dy,false); } - void moveCursor(int dx, int dy, boolean nextWord) { HiddenColumns hidden = av.getAlignment().getHiddenColumns(); @@ -493,13 +492,11 @@ public class SeqPanel extends JPanel if (nextWord) { int maxWidth = av.getAlignment().getWidth(); - int maxHeight = av.getAlignment().getHeight(); - SequenceI seqAtRow = av.getAlignment() - .getSequenceAt(seqCanvas.cursorY); + int maxHeight=av.getAlignment().getHeight(); + SequenceI seqAtRow = av.getAlignment().getSequenceAt(seqCanvas.cursorY); // look for next gap or residue - boolean isGap = Comparison - .isGap(seqAtRow.getCharAt(seqCanvas.cursorX)); - int p = seqCanvas.cursorX, lastP, r = seqCanvas.cursorY, lastR; + boolean isGap = Comparison.isGap(seqAtRow.getCharAt(seqCanvas.cursorX)); + int p = seqCanvas.cursorX,lastP,r=seqCanvas.cursorY,lastR; do { lastP = p; @@ -520,23 +517,19 @@ public class SeqPanel extends JPanel p = nextVisible(hidden, maxWidth, p, dx); } while ((dx != 0 ? p != lastP : r != lastR) && isGap == Comparison.isGap(seqAtRow.getCharAt(p))); - seqCanvas.cursorX = p; - seqCanvas.cursorY = r; - } - else - { + seqCanvas.cursorX=p; + seqCanvas.cursorY=r; + } else { int maxWidth = av.getAlignment().getWidth(); - seqCanvas.cursorX = nextVisible(hidden, maxWidth, seqCanvas.cursorX, - dx); + seqCanvas.cursorX = nextVisible(hidden, maxWidth, seqCanvas.cursorX, dx); seqCanvas.cursorY += dy; } scrollToVisible(false); } - private int nextVisible(HiddenColumns hidden, int maxWidth, int original, - int dx) + private int nextVisible(HiddenColumns hidden,int maxWidth, int original, int dx) { - int newCursorX = original + dx; + int newCursorX=original+dx; if (av.hasHiddenColumns() && !hidden.isVisible(newCursorX)) { int visx = hidden.absoluteToVisibleColumn(newCursorX - dx); @@ -557,13 +550,13 @@ public class SeqPanel extends JPanel } } newCursorX = (newCursorX < 0) ? 0 : newCursorX; - if (newCursorX >= maxWidth || !hidden.isVisible(newCursorX)) + if (newCursorX >= maxWidth + || !hidden.isVisible(newCursorX)) { newCursorX = original; } return newCursorX; } - /** * Scroll to make the cursor visible in the viewport. * @@ -619,7 +612,7 @@ public class SeqPanel extends JPanel if (av.getAlignment().getHiddenColumns().isVisible(seqCanvas.cursorX)) { setStatusMessage(av.getAlignment().getSequenceAt(seqCanvas.cursorY), - seqCanvas.cursorX, seqCanvas.cursorY); + seqCanvas.cursorX, seqCanvas.cursorY); } if (repaintNeeded) @@ -628,6 +621,7 @@ public class SeqPanel extends JPanel } } + void setSelectionAreaAtCursor(boolean topLeft) { SequenceI sequence = av.getAlignment().getSequenceAt(seqCanvas.cursorY); @@ -966,7 +960,8 @@ public class SeqPanel extends JPanel SequenceI seq = match.getSequence(); SequenceI ds = seq.getDatasetSequence() == null ? seq : seq.getDatasetSequence(); - MappedFeatures mf = fr2.findComplementFeaturesAtResidue(ds, pos); + MappedFeatures mf = fr2 + .findComplementFeaturesAtResidue(ds, pos); if (mf != null) { for (SequenceFeature sf : mf.features) @@ -1109,8 +1104,9 @@ public class SeqPanel extends JPanel { List features = ap.getFeatureRenderer() .findFeaturesAtColumn(sequence, column + 1); - unshownFeatures = seqARep.appendFeatures(tooltipText, pos, features, - this.ap.getSeqPanel().seqCanvas.fr, MAX_TOOLTIP_LENGTH); + unshownFeatures = seqARep.appendFeatures(tooltipText, pos, + features, this.ap.getSeqPanel().seqCanvas.fr, + MAX_TOOLTIP_LENGTH); /* * add features in CDS/protein complement at the corresponding @@ -1128,8 +1124,8 @@ public class SeqPanel extends JPanel pos); if (mf != null) { - unshownFeatures += seqARep.appendFeatures(tooltipText, pos, mf, - fr2, MAX_TOOLTIP_LENGTH); + unshownFeatures += seqARep.appendFeatures(tooltipText, + pos, mf, fr2, MAX_TOOLTIP_LENGTH); } } } @@ -1157,7 +1153,8 @@ public class SeqPanel extends JPanel if (!textString.equals(lastTooltip)) { lastTooltip = textString; - lastFormattedTooltip = JvSwingUtils.wrapTooltip(true, textString); + lastFormattedTooltip = JvSwingUtils.wrapTooltip(true, + textString); setToolTipText(lastFormattedTooltip); } } @@ -1184,8 +1181,8 @@ public class SeqPanel extends JPanel String tooltip = AnnotationPanel.buildToolTip(anns[rowIndex], column, anns); - if (tooltip == null ? tooltip != lastTooltip - : !tooltip.equals(lastTooltip)) + boolean tooltipChanged = tooltip == null ? lastTooltip != null : !tooltip.equals(lastTooltip); + if (tooltipChanged) { lastTooltip = tooltip; lastFormattedTooltip = tooltip == null ? null @@ -1241,8 +1238,8 @@ public class SeqPanel extends JPanel tempTip.setTipText(lastFormattedTooltip); int tipWidth = (int) tempTip.getPreferredSize().getWidth(); - - // was x += (w - x < 200) ? -(w / 2) : 5; + + // was x += (w - x < 200) ? -(w / 2) : 5; x = (x + tipWidth < w ? x + 10 : w - tipWidth); Point p = new Point(x, y + av.getCharHeight()); // BH 2018 was - 20? @@ -1256,8 +1253,7 @@ public class SeqPanel extends JPanel * changed, so selective redraws can be applied (ie. only structures, only * overview, etc) */ - private boolean updateOverviewAndStructs = false; // TODO: refactor to - // avcontroller + private boolean updateOverviewAndStructs = false; // TODO: refactor to avcontroller /** * set if av.getSelectionGroup() refers to a group that is defined on the @@ -1319,7 +1315,8 @@ public class SeqPanel extends JPanel * Sequence number (if known), and sequence name. */ String seqno = seqIndex == -1 ? "" : " " + (seqIndex + 1); - text.append("Sequence").append(seqno).append(" ID: ").append(seqName); + text.append("Sequence").append(seqno).append(" ID: ") + .append(seqName); String residue = null; @@ -1578,12 +1575,12 @@ public class SeqPanel extends JPanel String label = null; if (groupEditing) { - message.append("Edit group:"); + message.append("Edit group:"); label = MessageManager.getString("action.edit_group"); } else { - message.append("Edit sequence: " + seq.getName()); + message.append("Edit sequence: " + seq.getName()); label = seq.getName(); if (label.length() > 10) { @@ -1775,7 +1772,8 @@ public class SeqPanel extends JPanel { for (int j = 0; j < startres - editLastRes; j++) { - if (!Comparison.isGap(groupSeqs[g].getCharAt(fixedRight - j))) + if (!Comparison + .isGap(groupSeqs[g].getCharAt(fixedRight - j))) { blank = false; break; @@ -2167,8 +2165,8 @@ public class SeqPanel extends JPanel * highlight the first feature at the position on the alignment */ SearchResultsI highlight = new SearchResults(); - highlight.addResult(sequence, features.get(0).getBegin(), - features.get(0).getEnd()); + highlight.addResult(sequence, features.get(0).getBegin(), features + .get(0).getEnd()); seqCanvas.highlightSearchResults(highlight, true); /* @@ -2432,7 +2430,7 @@ public class SeqPanel extends JPanel return; } - res = Math.min(res, av.getAlignment().getWidth() - 1); + res = Math.min(res, av.getAlignment().getWidth()-1); if (stretchGroup.getEndRes() == res) { @@ -2942,4 +2940,44 @@ public class SeqPanel extends JPanel { return lastSearchResults; } + + /** + * scroll to the given row/column - or nearest visible location + * + * @param row + * @param column + */ + public void scrollTo(int row, int column) + { + + row = row < 0 ? ap.av.getRanges().getStartSeq() : row; + column = column < 0 ? ap.av.getRanges().getStartRes() : column; + ap.scrollTo(column, column, row, true, true); + } + + /** + * scroll to the given row - or nearest visible location + * + * @param row + */ + public void scrollToRow(int row) + { + + row = row < 0 ? ap.av.getRanges().getStartSeq() : row; + ap.scrollTo(ap.av.getRanges().getStartRes(), + ap.av.getRanges().getStartRes(), row, true, true); + } + + /** + * scroll to the given column - or nearest visible location + * + * @param column + */ + public void scrollToColumn(int column) + { + + column = column < 0 ? ap.av.getRanges().getStartRes() : column; + ap.scrollTo(column, column, ap.av.getRanges().getStartSeq(), true, + true); + } }