Move line/column label functionality into single place

Create a LineColumnLabel class that aggregates the functionality that
was before spread through the editor widget and factory classes.

Change-Id: I6ba316174b2f690a0b146bdd606c6f8ed985ec20
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Eike Ziller
2017-12-01 13:29:12 +01:00
parent a6dfae7f10
commit 508a9bdb24
3 changed files with 48 additions and 25 deletions

View File

@@ -39,6 +39,7 @@ public:
explicit FixedSizeClickLabel(QWidget *parent = 0); explicit FixedSizeClickLabel(QWidget *parent = 0);
void setText(const QString &text, const QString &maxText); void setText(const QString &text, const QString &maxText);
using QLabel::setText;
QSize sizeHint() const; QSize sizeHint() const;
QString maxText() const; QString maxText() const;

View File

@@ -69,7 +69,6 @@
#include <coreplugin/actionmanager/actioncontainer.h> #include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/actionmanager/command.h> #include <coreplugin/actionmanager/command.h>
#include <coreplugin/coreconstants.h> #include <coreplugin/coreconstants.h>
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/infobar.h> #include <coreplugin/infobar.h>
#include <coreplugin/manhattanstyle.h> #include <coreplugin/manhattanstyle.h>
#include <coreplugin/find/basetextfind.h> #include <coreplugin/find/basetextfind.h>
@@ -170,6 +169,43 @@ static QString QString_toLower(const QString &str)
return str.toLower(); return str.toLower();
} }
class LineColumnLabel : public FixedSizeClickLabel
{
Q_OBJECT
public:
LineColumnLabel(TextEditorWidget *parent)
: FixedSizeClickLabel(parent)
, m_editor(parent)
{
setMaxText(TextEditorWidget::tr("Line: 9999, Col: 999"));
connect(m_editor, &QPlainTextEdit::cursorPositionChanged, this, &LineColumnLabel::update);
connect(this, &FixedSizeClickLabel::clicked, ActionManager::instance(), [this] {
emit m_editor->activateEditor(EditorManager::IgnoreNavigationHistory);
QTimer::singleShot(0, ActionManager::instance(), [] {
if (Command *cmd = ActionManager::command(Core::Constants::GOTO)) {
if (QAction *act = cmd->action())
act->trigger();
}
});
});
}
private:
void update()
{
const QTextCursor cursor = m_editor->textCursor();
const QTextBlock block = cursor.block();
const int line = block.blockNumber() + 1;
const int column = cursor.position() - block.position();
setText(
TextEditorWidget::tr("Line: %1, Col: %2")
.arg(line)
.arg(m_editor->textDocument()->tabSettings().columnAt(block.text(), column) + 1));
}
TextEditorWidget *m_editor;
};
class TextEditorAnimator : public QObject class TextEditorAnimator : public QObject
{ {
Q_OBJECT Q_OBJECT
@@ -566,7 +602,7 @@ public:
TextEditorWidget *q; TextEditorWidget *q;
QToolBar *m_toolBar = nullptr; QToolBar *m_toolBar = nullptr;
QWidget *m_stretchWidget = nullptr; QWidget *m_stretchWidget = nullptr;
FixedSizeClickLabel *m_cursorPositionLabel = nullptr; LineColumnLabel *m_cursorPositionLabel = nullptr;
FixedSizeClickLabel *m_fileEncodingLabel = nullptr; FixedSizeClickLabel *m_fileEncodingLabel = nullptr;
QAction *m_cursorPositionLabelAction = nullptr; QAction *m_cursorPositionLabelAction = nullptr;
QAction *m_fileEncodingLabelAction = nullptr; QAction *m_fileEncodingLabelAction = nullptr;
@@ -760,7 +796,7 @@ TextEditorWidgetPrivate::TextEditorWidgetPrivate(TextEditorWidget *parent)
m_toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); m_toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
m_toolBar->addWidget(m_stretchWidget); m_toolBar->addWidget(m_stretchWidget);
m_cursorPositionLabel = new FixedSizeClickLabel; m_cursorPositionLabel = new LineColumnLabel(q);
const int spacing = q->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2; const int spacing = q->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2;
m_cursorPositionLabel->setContentsMargins(spacing, 0, spacing, 0); m_cursorPositionLabel->setContentsMargins(spacing, 0, spacing, 0);
@@ -7854,18 +7890,8 @@ void BaseTextEditor::select(int toPos)
void TextEditorWidgetPrivate::updateCursorPosition() void TextEditorWidgetPrivate::updateCursorPosition()
{ {
const QTextCursor cursor = q->textCursor();
const QTextBlock block = cursor.block();
const int line = block.blockNumber() + 1;
const int column = cursor.position() - block.position();
m_cursorPositionLabel->show();
m_cursorPositionLabel->setText(TextEditorWidget::tr("Line: %1, Col: %2").arg(line)
.arg(q->textDocument()->tabSettings().columnAt(block.text(),
column)+1),
TextEditorWidget::tr("Line: 9999, Col: 999"));
m_contextHelpId.clear(); m_contextHelpId.clear();
if (!q->textCursor().block().isVisible())
if (!block.isVisible())
q->ensureCursorVisible(); q->ensureCursorVisible();
} }
@@ -8593,21 +8619,16 @@ BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentP
widget->d->m_codeAssistant.configure(widget); widget->d->m_codeAssistant.configure(widget);
widget->d->m_commentDefinition = m_commentDefinition; widget->d->m_commentDefinition = m_commentDefinition;
QObject::connect(widget, &TextEditorWidget::activateEditor, QObject::connect(widget,
[editor]() { EditorManager::activateEditor(editor); }); &TextEditorWidget::activateEditor,
[editor](EditorManager::OpenEditorFlags flags) {
EditorManager::activateEditor(editor, flags);
});
if (m_useGenericHighlighter) if (m_useGenericHighlighter)
widget->setupGenericHighlighter(); widget->setupGenericHighlighter();
widget->finalizeInitialization(); widget->finalizeInitialization();
editor->finalizeInitialization(); editor->finalizeInitialization();
QObject::connect(widget->d->m_cursorPositionLabel, &FixedSizeClickLabel::clicked, [editor] {
EditorManager::activateEditor(editor, EditorManager::IgnoreNavigationHistory);
if (Command *cmd = ActionManager::command(Core::Constants::GOTO)) {
if (QAction *act = cmd->action())
act->trigger();
}
});
return editor; return editor;
} }

View File

@@ -29,6 +29,7 @@
#include "blockrange.h" #include "blockrange.h"
#include "codeassist/assistenums.h" #include "codeassist/assistenums.h"
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h> #include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/editormanager/ieditorfactory.h> #include <coreplugin/editormanager/ieditorfactory.h>
@@ -566,7 +567,7 @@ signals:
void tooltipOverrideRequested(TextEditor::TextEditorWidget *widget, void tooltipOverrideRequested(TextEditor::TextEditorWidget *widget,
const QPoint &globalPos, int position, bool *handled); const QPoint &globalPos, int position, bool *handled);
void tooltipRequested(const QPoint &globalPos, int position); void tooltipRequested(const QPoint &globalPos, int position);
void activateEditor(); void activateEditor(Core::EditorManager::OpenEditorFlags flags = 0);
protected: protected:
virtual void slotCursorPositionChanged(); // Used in VcsBase virtual void slotCursorPositionChanged(); // Used in VcsBase