summaryrefslogtreecommitdiff
path: root/src/plugins/texteditor
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/texteditor')
-rw-r--r--src/plugins/texteditor/markdowneditor.cpp70
1 files changed, 50 insertions, 20 deletions
diff --git a/src/plugins/texteditor/markdowneditor.cpp b/src/plugins/texteditor/markdowneditor.cpp
index b6993dacd5..afdda1bfb4 100644
--- a/src/plugins/texteditor/markdowneditor.cpp
+++ b/src/plugins/texteditor/markdowneditor.cpp
@@ -65,46 +65,76 @@ public:
setContext(Core::Context(MARKDOWNVIEWER_ID));
setWidget(&m_widget);
+ auto togglePreviewVisible = new QToolButton;
+ togglePreviewVisible->setText(Tr::tr("Show Preview"));
+ togglePreviewVisible->setCheckable(true);
+ togglePreviewVisible->setChecked(true);
+
auto toggleEditorVisible = new QToolButton;
- toggleEditorVisible->setText(Tr::tr("Hide Editor"));
+ toggleEditorVisible->setText(Tr::tr("Show Editor"));
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);
+ auto toolbarLayout = new QHBoxLayout(&m_toolbar);
+ toolbarLayout->setSpacing(0);
+ toolbarLayout->setContentsMargins(0, 0, 0, 0);
+ toolbarLayout->addStretch();
+ if (textEditorRight) {
+ toolbarLayout->addWidget(togglePreviewVisible);
+ toolbarLayout->addWidget(toggleEditorVisible);
+ } else {
+ toolbarLayout->addWidget(toggleEditorVisible);
+ toolbarLayout->addWidget(togglePreviewVisible);
+ }
+ toolbarLayout->addWidget(swapViews);
connect(m_document.data(), &TextDocument::mimeTypeChanged,
m_document.data(), &TextDocument::changed);
+ const auto viewToggled =
+ [swapViews](QWidget *view, bool visible, QWidget *otherView, QToolButton *otherButton) {
+ if (view->isVisible() == visible)
+ return;
+ view->setVisible(visible);
+ if (visible) {
+ view->setFocus();
+ } else if (otherView->isVisible()) {
+ otherView->setFocus();
+ } else {
+ // make sure at least one view is visible
+ otherButton->toggle();
+ }
+ swapViews->setEnabled(view->isVisible() && otherView->isVisible());
+ };
+
connect(toggleEditorVisible,
&QToolButton::toggled,
- m_textEditorWidget,
- [this, browser, toggleEditorVisible](bool editorVisible) {
- if (m_textEditorWidget->isVisible() == editorVisible)
- return;
- m_textEditorWidget->setVisible(editorVisible);
- if (editorVisible)
- m_textEditorWidget->setFocus();
- else
- browser->setFocus();
-
- toggleEditorVisible->setText(editorVisible ? Tr::tr("Hide Editor")
- : Tr::tr("Show Editor"));
+ this,
+ [this, browser, togglePreviewVisible, viewToggled](bool visible) {
+ viewToggled(m_textEditorWidget, visible, browser, togglePreviewVisible);
+ });
+ connect(togglePreviewVisible,
+ &QToolButton::toggled,
+ this,
+ [this, browser, toggleEditorVisible, viewToggled](bool visible) {
+ viewToggled(browser, visible, m_textEditorWidget, toggleEditorVisible);
});
- connect(swapViews, &QToolButton::clicked, m_textEditorWidget, [this] {
+ connect(swapViews, &QToolButton::clicked, m_textEditorWidget, [this, toolbarLayout] {
QTC_ASSERT(m_widget.count() > 1, return);
+ // switch views
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);
+ // switch buttons
+ const int rightIndex = toolbarLayout->count() - 2;
+ QLayoutItem *right = toolbarLayout->takeAt(rightIndex);
+ toolbarLayout->insertItem(rightIndex - 1, right);
+ // save settings
Utils::QtcSettings *s = Core::ICore::settings();
s->setValueWithDefault(MARKDOWNVIEWER_TEXTEDITOR_RIGHT,
!s->value(MARKDOWNVIEWER_TEXTEDITOR_RIGHT,