/*
* if not wrapped, don't leave white space at the right margin
*/
- if (!wrappedMode && (start > getVisibleAlignmentWidth() - 1))
+ int lastColumn = getVisibleAlignmentWidth() - 1;
+ if (!wrappedMode && (start > lastColumn))
{
- startRes = Math.max(getVisibleAlignmentWidth() - 1, 0);
+ startRes = Math.max(lastColumn, 0);
}
else if (start < 0)
{
{
endRes = 0;
}
- else if (!wrappedMode && (end > getVisibleAlignmentWidth() - 1))
+ else if (!wrappedMode && (end > lastColumn))
{
- endRes = Math.max(getVisibleAlignmentWidth() - 1, 0);
+ endRes = Math.max(lastColumn, 0);
}
else
{
}
/**
- * Set last residue visible in the viewport. Fires a property change event.
- *
- * @param res
- * residue position
- */
- public void setEndRes(int res)
- {
- int startres = res;
- int width = getViewportWidth();
-
- /*
- * if not wrapped, don't leave white space at the right margin
- */
- if (!wrappedMode)
- {
- if (startres + width - 1 > getVisibleAlignmentWidth() - 1)
- {
- startres = getVisibleAlignmentWidth() - width;
- }
- }
- setStartEndRes(startres - width + 1, startres);
- }
-
- /**
* Set the first sequence visible in the viewport, maintaining the height. If
* the viewport would extend past the last sequence, sets the viewport so it
* sits at the bottom of the alignment. Fires a property change event.
public void setStartEndSeq(int start, int end)
{
int oldstartseq = this.startSeq;
- if (start > getVisibleAlignmentHeight() - 1)
+ int visibleHeight = getVisibleAlignmentHeight();
+ if (start > visibleHeight - 1)
{
- startSeq = Math.max(getVisibleAlignmentHeight() - 1, 0);
+ startSeq = Math.max(visibleHeight - 1, 0);
}
else if (start < 0)
{
}
int oldendseq = this.endSeq;
- if (end >= getVisibleAlignmentHeight())
+ if (end >= visibleHeight)
{
- endSeq = Math.max(getVisibleAlignmentHeight() - 1, 0);
+ endSeq = Math.max(visibleHeight - 1, 0);
}
else if (end < 0)
{
wrappedMode = wrapped;
}
+ public boolean isWrappedMode()
+ {
+ return wrappedMode;
+ }
+
/**
* Answers the vertical scroll position (0..) to set, given the visible column
- * that is at top left. Note that if called with the total visible width of
- * the alignment, this gives the maximum cursor scroll value.
+ * that is at top left.
*
* <pre>
* Example:
* viewport width 40 columns (0-39, 40-79, 80-119...)
* column 0 returns scroll position 0
- * columns 0-40 return scroll position 1
+ * columns 1-40 return scroll position 1
* columns 41-80 return scroll position 2
* etc
* </pre>
* visible whole widths
*/
int scroll = topLeftColumn / w;
+
+ /*
+ * add 1 for a part width if there is one
+ */
scroll += topLeftColumn % w > 0 ? 1 : 0;
return scroll;
}
+
+ /**
+ * Answers the maximum wrapped vertical scroll value, given the column
+ * position (0..) to show at top left of the visible region.
+ *
+ * @param topLeftColumn
+ * @return
+ */
+ public int getWrappedMaxScroll(int topLeftColumn)
+ {
+ int scrollPosition = getWrappedScrollPosition(topLeftColumn);
+
+ /*
+ * how many more widths could be drawn after this one?
+ */
+ int columnsRemaining = getVisibleAlignmentWidth() - topLeftColumn;
+ int width = getViewportWidth();
+ int widthsRemaining = columnsRemaining / width
+ + (columnsRemaining % width > 0 ? 1 : 0) - 1;
+ int maxScroll = scrollPosition + widthsRemaining;
+
+ return maxScroll;
+ }
}