Commit 3b68a46b authored by Tobias Hunger's avatar Tobias Hunger

TextEditor: Add methods to query the first, last and center line

... that are currently visible on the screen.

Change-Id: I6c56f376f1a34a7314584df057cf03a8e5387a08
Reviewed-by: default avatarDavid Schulz <david.schulz@theqtcompany.com>
parent be88c38e
......@@ -7084,6 +7084,27 @@ void TextEditorWidget::inSnippetMode(bool *active)
*active = d->m_snippetOverlay->isVisible();
}
QTextBlock TextEditorWidget::blockForVisibleRow(int row) const
{
const int count = rowCount();
if (row < 0 && row >= count)
return QTextBlock();
QTextBlock block = firstVisibleBlock();
for (int i = 0; i < count; ++i) {
if (!block.isValid() || i == row)
return block;
while (block.isValid()) {
block = block.next();
if (block.isVisible())
break;
}
}
return QTextBlock();
}
void TextEditorWidget::invokeAssist(AssistKind kind, IAssistProvider *provider)
{
if (kind == QuickFix && d->m_snippetOverlay->isVisible()) {
......@@ -7213,6 +7234,33 @@ void TextEditorWidget::configureGenericHighlighter()
updateEditorInfoBar(this);
}
int TextEditorWidget::lineForVisibleRow(int row) const
{
QTextBlock block = blockForVisibleRow(row);
return block.isValid() ? block.blockNumber() : -1;
}
int TextEditorWidget::firstVisibleLine() const
{
return lineForVisibleRow(0);
}
int TextEditorWidget::lastVisibleLine() const
{
QTextBlock block = blockForVisibleRow(rowCount() - 1);
if (!block.isValid())
block.previous();
return block.isValid() ? block.blockNumber() : -1;
}
int TextEditorWidget::centerVisibleLine() const
{
QTextBlock block = blockForVisibleRow(rowCount() / 2);
if (!block.isValid())
block.previous();
return block.isValid() ? block.blockNumber() : -1;
}
bool TextEditorWidget::isMissingSyntaxDefinition() const
{
return d->m_isMissingSyntaxDefinition;
......
......@@ -466,6 +466,21 @@ public:
Q_INVOKABLE void inSnippetMode(bool *active); // Used by FakeVim.
/*! Returns the document line number for the visible \a row.
*
* The first visible row is 0, the last visible row is rowCount() - 1.
*
* Any invalid row will return -1 as line number.
*/
int lineForVisibleRow(int row) const;
/*! Returns the first visible line of the document. */
int firstVisibleLine() const;
/*! Returns the last visible line of the document. */
int lastVisibleLine() const;
/*! Returns the line visible closest to the vertical center of the editor. */
int centerVisibleLine() const;
signals:
void assistFinished(); // Used in tests.
void readOnlyChanged();
......@@ -475,6 +490,7 @@ signals:
void requestBlockUpdate(const QTextBlock &);
protected:
QTextBlock blockForVisibleRow(int row) const;
bool event(QEvent *e);
void inputMethodEvent(QInputMethodEvent *e);
void keyPressEvent(QKeyEvent *e);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment