Editor: add option to switch markdown viewer panes

Task-number: QTCREATORBUG-27883
Change-Id: I18daa688ff7751f984a95132737cfcc219b92108
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
David Schulz
2023-04-17 12:48:24 +02:00
parent 38d4f3fef3
commit 8745813721

View File

@@ -23,6 +23,8 @@ namespace TextEditor::Internal {
const char MARKDOWNVIEWER_ID[] = "Editors.MarkdownViewer";
const char MARKDOWNVIEWER_TEXT_CONTEXT[] = "Editors.MarkdownViewer.Text";
const char MARKDOWNVIEWER_MIME_TYPE[] = "text/markdown";
const char MARKDOWNVIEWER_TEXTEDITOR_RIGHT[] = "Markdown.TextEditorRight";
const bool kTextEditorRightDefault = true;
class MarkdownEditor : public Core::IEditor
{
@@ -32,14 +34,18 @@ public:
{
m_document->setMimeType(MARKDOWNVIEWER_MIME_TYPE);
QSettings *s = Core::ICore::settings();
const bool textEditorRight
= s->value(MARKDOWNVIEWER_TEXTEDITOR_RIGHT, kTextEditorRightDefault).toBool();
// Left side
auto browser = new QTextBrowser(&m_widget);
auto browser = new QTextBrowser();
browser->setOpenExternalLinks(true);
browser->setFrameShape(QFrame::NoFrame);
new Utils::MarkdownHighlighter(browser->document());
// Right side (hidable)
m_textEditorWidget = new TextEditorWidget(&m_widget);
m_textEditorWidget = new TextEditorWidget;
m_textEditorWidget->setTextDocument(m_document);
m_textEditorWidget->setupGenericHighlighter();
m_textEditorWidget->setMarksVisible(false);
@@ -48,6 +54,14 @@ public:
context->setContext(Core::Context(MARKDOWNVIEWER_TEXT_CONTEXT));
Core::ICore::addContextObject(context);
if (textEditorRight) {
m_widget.addWidget(browser);
m_widget.addWidget(m_textEditorWidget);
} else {
m_widget.addWidget(m_textEditorWidget);
m_widget.addWidget(browser);
}
setContext(Core::Context(MARKDOWNVIEWER_ID));
setWidget(&m_widget);
@@ -56,11 +70,15 @@ public:
toggleEditorVisible->setCheckable(true);
toggleEditorVisible->setChecked(true);
auto swapViews = new QToolButton;
swapViews->setText(Tr::tr("Swap Views"));
auto layout = new QHBoxLayout(&m_toolbar);
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
layout->addStretch();
layout->addWidget(toggleEditorVisible);
layout->addWidget(swapViews);
connect(m_document.data(), &TextDocument::mimeTypeChanged,
m_document.data(), &TextDocument::changed);
@@ -81,6 +99,20 @@ public:
: Tr::tr("Show Editor"));
});
connect(swapViews, &QToolButton::clicked, m_textEditorWidget, [this] {
QTC_ASSERT(m_widget.count() > 1, return);
auto placeholder = std::make_unique<QWidget>();
auto second = m_widget.replaceWidget(1, placeholder.get());
auto first = m_widget.replaceWidget(0, second);
m_widget.replaceWidget(1, first);
Utils::QtcSettings *s = Core::ICore::settings();
s->setValueWithDefault(MARKDOWNVIEWER_TEXTEDITOR_RIGHT,
!s->value(MARKDOWNVIEWER_TEXTEDITOR_RIGHT,
kTextEditorRightDefault)
.toBool(),
kTextEditorRightDefault);
});
connect(m_document->document(), &QTextDocument::contentsChanged, this, [this, browser] {
QHash<QScrollBar *, int> positions;
const auto scrollBars = browser->findChildren<QScrollBar *>();
@@ -123,4 +155,4 @@ MarkdownEditorFactory::MarkdownEditorFactory()
setEditorCreator([] { return new MarkdownEditor; });
}
} // TextEditor::Internal
} // namespace TextEditor::Internal