SequenceListener, SelectionListener
{
/*
+ *
* a class that holds computed mouse position
* - column of the alignment (0...)
* - sequence offset (0...)
*/
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);
int alignmentHeight = av.getAlignment().getHeight();
if (av.getWrapAlignment())
{
- seqCanvas.calculateWrappedGeometry(seqCanvas.getWidth(),
- seqCanvas.getHeight());
+ seqCanvas.calculateWrappedGeometry();
/*
* yPos modulo height of repeating width
return new MousePos(col, seqIndex, annIndex);
}
-
/**
* Returns the aligned sequence position (base 0) at the mouse position, or
* the closest visible one
if (editCommand != null && editCommand.getSize() > 0)
{
ap.alignFrame.addHistoryItem(editCommand);
- av.firePropertyChange("alignment", null,
- av.getAlignment().getSequences());
+ ap.av.notifyAlignment();
}
} finally
{
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();
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;
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);
}
}
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.
*
if (av.getAlignment().getHiddenColumns().isVisible(seqCanvas.cursorX))
{
setStatusMessage(av.getAlignment().getSequenceAt(seqCanvas.cursorY),
- seqCanvas.cursorX, seqCanvas.cursorY);
+ seqCanvas.cursorX, seqCanvas.cursorY);
}
if (repaintNeeded)
}
}
+
void setSelectionAreaAtCursor(boolean topLeft)
{
SequenceI sequence = av.getAlignment().getSequenceAt(seqCanvas.cursorY);
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)
{
List<SequenceFeature> 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
pos);
if (mf != null)
{
- unshownFeatures += seqARep.appendFeatures(tooltipText, pos, mf,
- fr2, MAX_TOOLTIP_LENGTH);
+ unshownFeatures += seqARep.appendFeatures(tooltipText,
+ pos, mf, fr2, MAX_TOOLTIP_LENGTH);
}
}
}
if (!textString.equals(lastTooltip))
{
lastTooltip = textString;
- lastFormattedTooltip = JvSwingUtils.wrapTooltip(true, textString);
+ lastFormattedTooltip = JvSwingUtils.wrapTooltip(true,
+ textString);
setToolTipText(lastFormattedTooltip);
}
}
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
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?
* 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
* 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;
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)
{
{
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;
* 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);
/*
return;
}
- res = Math.min(res, av.getAlignment().getWidth() - 1);
+ res = Math.min(res, av.getAlignment().getWidth()-1);
if (stretchGroup.getEndRes() == res)
{
{
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);
+ }
}