forked from qt-creator/qt-creator
Make LineColumnButton re-usable
Change-Id: I34e755018eef41e7e7cf254ccba72a1ec5a1c5ff Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -148,30 +148,40 @@ using ListTransformationMethod = void(QStringList &);
|
||||
|
||||
static constexpr char dropProperty[] = "dropProp";
|
||||
|
||||
class LineColumnButton : public QToolButton
|
||||
class LineColumnButtonPrivate
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
LineColumnButton(TextEditorWidget *parent)
|
||||
QSize m_maxSize;
|
||||
TextEditorWidget *m_editor;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
LineColumnButton::LineColumnButton(TextEditorWidget *parent)
|
||||
: QToolButton(parent)
|
||||
, m_editor(parent)
|
||||
{
|
||||
connect(m_editor, &QPlainTextEdit::cursorPositionChanged, this, &LineColumnButton::update);
|
||||
connect(this, &QToolButton::pressed, ActionManager::instance(), [this] {
|
||||
emit m_editor->activateEditor(EditorManager::IgnoreNavigationHistory);
|
||||
QMetaObject::invokeMethod(ActionManager::instance(), [] {
|
||||
, m_d(new LineColumnButtonPrivate)
|
||||
{
|
||||
m_d->m_editor = parent;
|
||||
connect(m_d->m_editor, &QPlainTextEdit::cursorPositionChanged, this, &LineColumnButton::update);
|
||||
connect(this, &QToolButton::clicked, ActionManager::instance(), [this] {
|
||||
emit m_d->m_editor->activateEditor(EditorManager::IgnoreNavigationHistory);
|
||||
QMetaObject::invokeMethod(
|
||||
ActionManager::instance(),
|
||||
[] {
|
||||
if (Command *cmd = ActionManager::command(Core::Constants::GOTO)) {
|
||||
if (QAction *act = cmd->action())
|
||||
act->trigger();
|
||||
}
|
||||
}, Qt::QueuedConnection);
|
||||
},
|
||||
Qt::QueuedConnection);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void update()
|
||||
{
|
||||
const Utils::MultiTextCursor &cursors = m_editor->multiTextCursor();
|
||||
LineColumnButton::~LineColumnButton() = default;
|
||||
|
||||
void LineColumnButton::update()
|
||||
{
|
||||
const Utils::MultiTextCursor &cursors = m_d->m_editor->multiTextCursor();
|
||||
QString text;
|
||||
if (cursors.hasMultipleCursors()) {
|
||||
text = Tr::tr("Cursors: %2").arg(cursors.cursorCount());
|
||||
@@ -179,7 +189,7 @@ private:
|
||||
const QTextCursor cursor = cursors.mainCursor();
|
||||
const QTextBlock block = cursor.block();
|
||||
const int line = block.blockNumber() + 1;
|
||||
const TabSettings &tabSettings = m_editor->textDocument()->tabSettings();
|
||||
const TabSettings &tabSettings = m_d->m_editor->textDocument()->tabSettings();
|
||||
const int column = tabSettings.columnAt(block.text(), cursor.positionInBlock()) + 1;
|
||||
text = Tr::tr("Line: %1, Col: %2").arg(line).arg(column);
|
||||
const QString toolTipText = Tr::tr("Cursor position: %1");
|
||||
@@ -191,16 +201,16 @@ private:
|
||||
if (selection > 0)
|
||||
text += " " + Tr::tr("(Sel: %1)").arg(selection);
|
||||
setText(text);
|
||||
}
|
||||
}
|
||||
|
||||
bool event(QEvent *event) override
|
||||
{
|
||||
bool LineColumnButton::event(QEvent *event)
|
||||
{
|
||||
if (event->type() != QEvent::ToolTip)
|
||||
return QToolButton::event(event);
|
||||
|
||||
QString tooltipText = "<table cellpadding='2'>\n";
|
||||
|
||||
const MultiTextCursor multiCursor = m_editor->multiTextCursor();
|
||||
const MultiTextCursor multiCursor = m_d->m_editor->multiTextCursor();
|
||||
const QList<QTextCursor> cursors = multiCursor.cursors().mid(0, 15);
|
||||
|
||||
tooltipText += "<tr>";
|
||||
@@ -220,7 +230,7 @@ private:
|
||||
|
||||
addRow(Tr::tr("Line:"), [](const QTextCursor &c) { return c.blockNumber() + 1; });
|
||||
|
||||
const TabSettings &tabSettings = m_editor->textDocument()->tabSettings();
|
||||
const TabSettings &tabSettings = m_d->m_editor->textDocument()->tabSettings();
|
||||
addRow(Tr::tr("Column:"), [&](const QTextCursor &c) {
|
||||
return tabSettings.columnAt(c.block().text(), c.positionInBlock()) + 1;
|
||||
});
|
||||
@@ -234,28 +244,22 @@ private:
|
||||
|
||||
tooltipText += "</table>\n";
|
||||
|
||||
ToolTip::show(static_cast<const QHelpEvent *>(event)->globalPos(),
|
||||
tooltipText,
|
||||
Qt::RichText);
|
||||
ToolTip::show(static_cast<const QHelpEvent *>(event)->globalPos(), tooltipText, Qt::RichText);
|
||||
event->accept();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
QSize sizeHint() const override
|
||||
{
|
||||
QSize LineColumnButton::sizeHint() const
|
||||
{
|
||||
const QSize size = QToolButton::sizeHint();
|
||||
auto wider = [](const QSize &left, const QSize &right) {
|
||||
return left.width() < right.width();
|
||||
};
|
||||
if (m_editor->multiTextCursor().hasSelection())
|
||||
return std::max(m_maxSize, size, wider); // do not save the size if we have a selection
|
||||
m_maxSize = std::max(m_maxSize, size, wider);
|
||||
return m_maxSize;
|
||||
}
|
||||
auto wider = [](const QSize &left, const QSize &right) { return left.width() < right.width(); };
|
||||
if (m_d->m_editor->multiTextCursor().hasSelection())
|
||||
return std::max(m_d->m_maxSize, size, wider); // do not save the size if we have a selection
|
||||
m_d->m_maxSize = std::max(m_d->m_maxSize, size, wider);
|
||||
return m_d->m_maxSize;
|
||||
}
|
||||
|
||||
mutable QSize m_maxSize;
|
||||
TextEditorWidget *m_editor;
|
||||
};
|
||||
namespace Internal {
|
||||
|
||||
class TextEditorAnimator : public QObject
|
||||
{
|
||||
|
@@ -22,6 +22,7 @@
|
||||
|
||||
#include <QPlainTextEdit>
|
||||
#include <QSharedPointer>
|
||||
#include <QToolButton>
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
@@ -56,6 +57,7 @@ using TextMarks = QList<TextMark *>;
|
||||
|
||||
namespace Internal {
|
||||
class BaseTextEditorPrivate;
|
||||
class LineColumnButtonPrivate;
|
||||
class TextEditorFactoryPrivate;
|
||||
class TextEditorWidgetPrivate;
|
||||
class TextEditorOverlay;
|
||||
@@ -699,6 +701,21 @@ private:
|
||||
Internal::TextEditorFactoryPrivate *d;
|
||||
};
|
||||
|
||||
class TEXTEDITOR_EXPORT LineColumnButton : public QToolButton
|
||||
{
|
||||
public:
|
||||
LineColumnButton(TextEditorWidget *parent);
|
||||
~LineColumnButton();
|
||||
|
||||
private:
|
||||
void update();
|
||||
bool event(QEvent *event) override;
|
||||
QSize sizeHint() const override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<Internal::LineColumnButtonPrivate> m_d;
|
||||
};
|
||||
|
||||
} // namespace TextEditor
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
Reference in New Issue
Block a user