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

... that are currently visible on the screen.

Change-Id: I6c56f376f1a34a7314584df057cf03a8e5387a08
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Tobias Hunger
2015-04-16 15:05:53 +02:00
parent be88c38e42
commit 3b68a46ba1
2 changed files with 64 additions and 0 deletions

View File

@@ -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;