Markdown: Use regular text editor's toolbar

This allows to have custom toolbar actions while preserving the regular
text editor actions.

Fixes: QTCREATORBUG-30166
Change-Id: I4a22f415d05d80355cfdbe4a2c61501af2292e85
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Mathias Hasselmann
2024-01-06 16:44:13 +01:00
parent e8904041c2
commit a63368efdd

View File

@@ -15,6 +15,7 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/minisplitter.h> #include <coreplugin/minisplitter.h>
#include <utils/ranges.h>
#include <utils/qtcsettings.h> #include <utils/qtcsettings.h>
#include <utils/qtcsettings.h> #include <utils/qtcsettings.h>
#include <utils/stringutils.h> #include <utils/stringutils.h>
@@ -26,6 +27,7 @@
#include <QScrollBar> #include <QScrollBar>
#include <QTextBrowser> #include <QTextBrowser>
#include <QTimer> #include <QTimer>
#include <QToolBar>
#include <QToolButton> #include <QToolButton>
#include <optional> #include <optional>
@@ -98,7 +100,6 @@ public:
context->setWidget(m_textEditorWidget); context->setWidget(m_textEditorWidget);
context->setContext(Context(MARKDOWNVIEWER_TEXT_CONTEXT)); context->setContext(Context(MARKDOWNVIEWER_TEXT_CONTEXT));
ICore::addContextObject(context); ICore::addContextObject(context);
m_lineColumnButton = new LineColumnButton(m_textEditorWidget);
m_splitter->addWidget(m_textEditorWidget); // sets splitter->focusWidget() on non-Windows m_splitter->addWidget(m_textEditorWidget); // sets splitter->focusWidget() on non-Windows
m_splitter->addWidget(m_previewWidget); m_splitter->addWidget(m_previewWidget);
@@ -131,7 +132,6 @@ public:
m_toggleEditorVisible->setCheckable(true); m_toggleEditorVisible->setCheckable(true);
m_toggleEditorVisible->setChecked(showEditor); m_toggleEditorVisible->setChecked(showEditor);
m_textEditorWidget->setVisible(showEditor); m_textEditorWidget->setVisible(showEditor);
m_lineColumnButton->setVisible(showEditor);
auto button = new CommandButton(EMPHASIS_ACTION); auto button = new CommandButton(EMPHASIS_ACTION);
button->setText("i"); button->setText("i");
@@ -157,21 +157,16 @@ public:
button->setVisible(false); button->setVisible(false);
} }
for (auto button : m_markDownButtons | Utils::views::reverse)
m_textEditorWidget->insertExtraToolBarWidget(TextEditorWidget::Left, button);
m_swapViews = new CommandButton(SWAPVIEWS_ACTION); m_swapViews = new CommandButton(SWAPVIEWS_ACTION);
m_swapViews->setText(m_swapViews->toolTipBase()); m_swapViews->setText(m_swapViews->toolTipBase());
m_swapViews->setEnabled(showEditor && showPreview); m_swapViews->setEnabled(showEditor && showPreview);
m_toolbarLayout = new QHBoxLayout(&m_toolbar); m_swapViewsAction = m_textEditorWidget->insertExtraToolBarWidget(TextEditorWidget::Right, m_swapViews);
m_toolbarLayout->setSpacing(0); m_toggleEditorVisibleAction = m_textEditorWidget->insertExtraToolBarWidget(TextEditorWidget::Right, m_toggleEditorVisible);
m_toolbarLayout->setContentsMargins(0, 0, 0, 0); m_togglePreviewVisibleAction = m_textEditorWidget->insertExtraToolBarWidget(TextEditorWidget::Right, m_togglePreviewVisible);
for (auto button : m_markDownButtons)
m_toolbarLayout->addWidget(button);
m_toolbarLayout->addStretch();
m_toolbarLayout->addWidget(m_lineColumnButton);
m_toolbarLayout->addWidget(m_togglePreviewVisible);
m_toolbarLayout->addWidget(m_toggleEditorVisible);
m_toolbarLayout->addWidget(m_swapViews);
setWidgetOrder(textEditorRight); setWidgetOrder(textEditorRight);
connect(m_document.data(), connect(m_document.data(),
@@ -248,7 +243,6 @@ public:
m_togglePreviewVisible); m_togglePreviewVisible);
for (auto button : m_markDownButtons) for (auto button : m_markDownButtons)
button->setVisible(visible); button->setVisible(visible);
m_lineColumnButton->setVisible(visible);
saveViewSettings(); saveViewSettings();
}); });
connect(m_togglePreviewVisible, connect(m_togglePreviewVisible,
@@ -351,14 +345,13 @@ public:
m_splitter->insertWidget(0, left); m_splitter->insertWidget(0, left);
m_splitter->insertWidget(1, right); m_splitter->insertWidget(1, right);
// buttons // buttons
QWidget *leftButton = textEditorRight ? m_togglePreviewVisible : m_toggleEditorVisible; const auto leftAction = textEditorRight ? m_togglePreviewVisibleAction : m_toggleEditorVisibleAction;
QWidget *rightButton = textEditorRight ? m_toggleEditorVisible : m_togglePreviewVisible; const auto rightAction = textEditorRight ? m_toggleEditorVisibleAction : m_togglePreviewVisibleAction;
const int rightIndex = m_toolbarLayout->count() - 2; m_textEditorWidget->toolBar()->insertAction(m_swapViewsAction, leftAction);
m_toolbarLayout->insertWidget(rightIndex, leftButton); m_textEditorWidget->toolBar()->insertAction(m_swapViewsAction, rightAction);
m_toolbarLayout->insertWidget(rightIndex, rightButton);
} }
QWidget *toolBar() override { return &m_toolbar; } QWidget *toolBar() override { return m_textEditorWidget->toolBarWidget(); }
IDocument *document() const override { return m_document.data(); } IDocument *document() const override { return m_document.data(); }
TextEditorWidget *textEditorWidget() const { return m_textEditorWidget; } TextEditorWidget *textEditorWidget() const { return m_textEditorWidget; }
@@ -479,13 +472,13 @@ private:
QTextBrowser *m_previewWidget; QTextBrowser *m_previewWidget;
TextEditorWidget *m_textEditorWidget; TextEditorWidget *m_textEditorWidget;
TextDocumentPtr m_document; TextDocumentPtr m_document;
QWidget m_toolbar;
QHBoxLayout *m_toolbarLayout;
QList<QToolButton *> m_markDownButtons; QList<QToolButton *> m_markDownButtons;
LineColumnButton *m_lineColumnButton;
CommandButton *m_toggleEditorVisible; CommandButton *m_toggleEditorVisible;
CommandButton *m_togglePreviewVisible; CommandButton *m_togglePreviewVisible;
CommandButton *m_swapViews; CommandButton *m_swapViews;
QAction *m_toggleEditorVisibleAction;
QAction *m_togglePreviewVisibleAction;
QAction *m_swapViewsAction;
std::optional<QPoint> m_previewRestoreScrollPosition; std::optional<QPoint> m_previewRestoreScrollPosition;
}; };