From 45e6a9af8b6e67c8f1bcaacfceaa0e84601ce67c Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 10 Feb 2020 11:46:56 +0100 Subject: [PATCH] TextEditor: Move DisplaySettings closer to new code layout Change-Id: Ibf095a52f6c689a9f36caf6183e6737bae4e68bf Reviewed-by: Christian Stenger --- .../texteditor/displaysettingspage.cpp | 190 +++++++++--------- src/plugins/texteditor/displaysettingspage.h | 15 +- 2 files changed, 95 insertions(+), 110 deletions(-) diff --git a/src/plugins/texteditor/displaysettingspage.cpp b/src/plugins/texteditor/displaysettingspage.cpp index 81423c84005..1894f511374 100644 --- a/src/plugins/texteditor/displaysettingspage.cpp +++ b/src/plugins/texteditor/displaysettingspage.cpp @@ -33,58 +33,49 @@ #include -#include - namespace TextEditor { -struct DisplaySettingsPage::DisplaySettingsPagePrivate +class DisplaySettingsPagePrivate { +public: DisplaySettingsPagePrivate(); - QPointer m_widget; - Internal::Ui::DisplaySettingsPage *m_page = nullptr; DisplaySettings m_displaySettings; MarginSettings m_marginSettings; QString m_settingsPrefix; }; -DisplaySettingsPage::DisplaySettingsPagePrivate::DisplaySettingsPagePrivate() +DisplaySettingsPagePrivate::DisplaySettingsPagePrivate() { m_settingsPrefix = QLatin1String("text"); m_displaySettings.fromSettings(m_settingsPrefix, Core::ICore::settings()); m_marginSettings.fromSettings(m_settingsPrefix, Core::ICore::settings()); } -DisplaySettingsPage::DisplaySettingsPage() - : d(new DisplaySettingsPagePrivate) +class DisplaySettingsWidget final : public Core::IOptionsPageWidget { - setId(Constants::TEXT_EDITOR_DISPLAY_SETTINGS); - setDisplayName(tr("Display")); - setCategory(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY); - setDisplayCategory(QCoreApplication::translate("TextEditor", "Text Editor")); - setCategoryIconPath(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON_PATH); -} + Q_DECLARE_TR_FUNCTIONS(TextEditor::DisplaySettingsPage) -DisplaySettingsPage::~DisplaySettingsPage() -{ - delete d; -} - -QWidget *DisplaySettingsPage::widget() -{ - if (!d->m_widget) { - d->m_widget = new QWidget; - d->m_page = new Internal::Ui::DisplaySettingsPage; - d->m_page->setupUi(d->m_widget); +public: + DisplaySettingsWidget(DisplaySettingsPagePrivate *data) + : m_data(data) + { + m_ui.setupUi(this); settingsToUI(); } - return d->m_widget; -} -void DisplaySettingsPage::apply() + void apply() final; + + void settingsFromUI(DisplaySettings &displaySettings, MarginSettings &marginSettings) const; + void settingsToUI(); + void setDisplaySettings(const DisplaySettings &, const MarginSettings &newMarginSettings); + + DisplaySettingsPagePrivate *m_data = nullptr; + Internal::Ui::DisplaySettingsPage m_ui; +}; + +void DisplaySettingsWidget::apply() { - if (!d->m_page) // page was never shown - return; DisplaySettings newDisplaySettings; MarginSettings newMarginSettings; @@ -92,73 +83,64 @@ void DisplaySettingsPage::apply() setDisplaySettings(newDisplaySettings, newMarginSettings); } -void DisplaySettingsPage::finish() +void DisplaySettingsWidget::settingsFromUI(DisplaySettings &displaySettings, + MarginSettings &marginSettings) const { - delete d->m_widget; - if (!d->m_page) // page was never shown - return; - delete d->m_page; - d->m_page = nullptr; -} - -void DisplaySettingsPage::settingsFromUI(DisplaySettings &displaySettings, - MarginSettings &marginSettings) const -{ - displaySettings.m_displayLineNumbers = d->m_page->displayLineNumbers->isChecked(); - displaySettings.m_textWrapping = d->m_page->enableTextWrapping->isChecked(); - marginSettings.m_showMargin = d->m_page->showWrapColumn->isChecked(); - marginSettings.m_marginColumn = d->m_page->wrapColumn->value(); - displaySettings.m_visualizeWhitespace = d->m_page->visualizeWhitespace->isChecked(); - displaySettings.m_displayFoldingMarkers = d->m_page->displayFoldingMarkers->isChecked(); - displaySettings.m_highlightCurrentLine = d->m_page->highlightCurrentLine->isChecked(); - displaySettings.m_highlightBlocks = d->m_page->highlightBlocks->isChecked(); - displaySettings.m_animateMatchingParentheses = d->m_page->animateMatchingParentheses->isChecked(); - displaySettings.m_highlightMatchingParentheses = d->m_page->highlightMatchingParentheses->isChecked(); - displaySettings.m_markTextChanges = d->m_page->markTextChanges->isChecked(); - displaySettings.m_autoFoldFirstComment = d->m_page->autoFoldFirstComment->isChecked(); - displaySettings.m_centerCursorOnScroll = d->m_page->centerOnScroll->isChecked(); - displaySettings.m_openLinksInNextSplit = d->m_page->openLinksInNextSplit->isChecked(); - displaySettings.m_displayFileEncoding = d->m_page->displayFileEncoding->isChecked(); - displaySettings.m_scrollBarHighlights = d->m_page->scrollBarHighlights->isChecked(); - displaySettings.m_animateNavigationWithinFile = d->m_page->animateNavigationWithinFile->isChecked(); - displaySettings.m_displayAnnotations = d->m_page->displayAnnotations->isChecked(); - if (d->m_page->leftAligned->isChecked()) + displaySettings.m_displayLineNumbers = m_ui.displayLineNumbers->isChecked(); + displaySettings.m_textWrapping = m_ui.enableTextWrapping->isChecked(); + marginSettings.m_showMargin = m_ui.showWrapColumn->isChecked(); + marginSettings.m_marginColumn = m_ui.wrapColumn->value(); + displaySettings.m_visualizeWhitespace = m_ui.visualizeWhitespace->isChecked(); + displaySettings.m_displayFoldingMarkers = m_ui.displayFoldingMarkers->isChecked(); + displaySettings.m_highlightCurrentLine = m_ui.highlightCurrentLine->isChecked(); + displaySettings.m_highlightBlocks = m_ui.highlightBlocks->isChecked(); + displaySettings.m_animateMatchingParentheses = m_ui.animateMatchingParentheses->isChecked(); + displaySettings.m_highlightMatchingParentheses = m_ui.highlightMatchingParentheses->isChecked(); + displaySettings.m_markTextChanges = m_ui.markTextChanges->isChecked(); + displaySettings.m_autoFoldFirstComment = m_ui.autoFoldFirstComment->isChecked(); + displaySettings.m_centerCursorOnScroll = m_ui.centerOnScroll->isChecked(); + displaySettings.m_openLinksInNextSplit = m_ui.openLinksInNextSplit->isChecked(); + displaySettings.m_displayFileEncoding = m_ui.displayFileEncoding->isChecked(); + displaySettings.m_scrollBarHighlights = m_ui.scrollBarHighlights->isChecked(); + displaySettings.m_animateNavigationWithinFile = m_ui.animateNavigationWithinFile->isChecked(); + displaySettings.m_displayAnnotations = m_ui.displayAnnotations->isChecked(); + if (m_ui.leftAligned->isChecked()) displaySettings.m_annotationAlignment = AnnotationAlignment::NextToContent; - else if (d->m_page->atMargin->isChecked()) + else if (m_ui.atMargin->isChecked()) displaySettings.m_annotationAlignment = AnnotationAlignment::NextToMargin; - else if (d->m_page->rightAligned->isChecked()) + else if (m_ui.rightAligned->isChecked()) displaySettings.m_annotationAlignment = AnnotationAlignment::RightSide; - else if (d->m_page->betweenLines->isChecked()) + else if (m_ui.betweenLines->isChecked()) displaySettings.m_annotationAlignment = AnnotationAlignment::BetweenLines; } -void DisplaySettingsPage::settingsToUI() +void DisplaySettingsWidget::settingsToUI() { - const DisplaySettings &displaySettings = d->m_displaySettings; - const MarginSettings &marginSettings = d->m_marginSettings; - d->m_page->displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers); - d->m_page->enableTextWrapping->setChecked(displaySettings.m_textWrapping); - d->m_page->showWrapColumn->setChecked(marginSettings.m_showMargin); - d->m_page->wrapColumn->setValue(marginSettings.m_marginColumn); - d->m_page->visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace); - d->m_page->displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers); - d->m_page->highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine); - d->m_page->highlightBlocks->setChecked(displaySettings.m_highlightBlocks); - d->m_page->animateMatchingParentheses->setChecked(displaySettings.m_animateMatchingParentheses); - d->m_page->highlightMatchingParentheses->setChecked(displaySettings.m_highlightMatchingParentheses); - d->m_page->markTextChanges->setChecked(displaySettings.m_markTextChanges); - d->m_page->autoFoldFirstComment->setChecked(displaySettings.m_autoFoldFirstComment); - d->m_page->centerOnScroll->setChecked(displaySettings.m_centerCursorOnScroll); - d->m_page->openLinksInNextSplit->setChecked(displaySettings.m_openLinksInNextSplit); - d->m_page->displayFileEncoding->setChecked(displaySettings.m_displayFileEncoding); - d->m_page->scrollBarHighlights->setChecked(displaySettings.m_scrollBarHighlights); - d->m_page->animateNavigationWithinFile->setChecked(displaySettings.m_animateNavigationWithinFile); - d->m_page->displayAnnotations->setChecked(displaySettings.m_displayAnnotations); + const DisplaySettings &displaySettings = m_data->m_displaySettings; + const MarginSettings &marginSettings = m_data->m_marginSettings; + m_ui.displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers); + m_ui.enableTextWrapping->setChecked(displaySettings.m_textWrapping); + m_ui.showWrapColumn->setChecked(marginSettings.m_showMargin); + m_ui.wrapColumn->setValue(marginSettings.m_marginColumn); + m_ui.visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace); + m_ui.displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers); + m_ui.highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine); + m_ui.highlightBlocks->setChecked(displaySettings.m_highlightBlocks); + m_ui.animateMatchingParentheses->setChecked(displaySettings.m_animateMatchingParentheses); + m_ui.highlightMatchingParentheses->setChecked(displaySettings.m_highlightMatchingParentheses); + m_ui.markTextChanges->setChecked(displaySettings.m_markTextChanges); + m_ui.autoFoldFirstComment->setChecked(displaySettings.m_autoFoldFirstComment); + m_ui.centerOnScroll->setChecked(displaySettings.m_centerCursorOnScroll); + m_ui.openLinksInNextSplit->setChecked(displaySettings.m_openLinksInNextSplit); + m_ui.displayFileEncoding->setChecked(displaySettings.m_displayFileEncoding); + m_ui.scrollBarHighlights->setChecked(displaySettings.m_scrollBarHighlights); + m_ui.animateNavigationWithinFile->setChecked(displaySettings.m_animateNavigationWithinFile); + m_ui.displayAnnotations->setChecked(displaySettings.m_displayAnnotations); switch (displaySettings.m_annotationAlignment) { - case AnnotationAlignment::NextToContent: d->m_page->leftAligned->setChecked(true); break; - case AnnotationAlignment::NextToMargin: d->m_page->atMargin->setChecked(true); break; - case AnnotationAlignment::RightSide: d->m_page->rightAligned->setChecked(true); break; - case AnnotationAlignment::BetweenLines: d->m_page->betweenLines->setChecked(true); break; + case AnnotationAlignment::NextToContent: m_ui.leftAligned->setChecked(true); break; + case AnnotationAlignment::NextToMargin: m_ui.atMargin->setChecked(true); break; + case AnnotationAlignment::RightSide: m_ui.rightAligned->setChecked(true); break; + case AnnotationAlignment::BetweenLines: m_ui.betweenLines->setChecked(true); break; } } @@ -172,22 +154,38 @@ const MarginSettings &DisplaySettingsPage::marginSettings() const return d->m_marginSettings; } -void DisplaySettingsPage::setDisplaySettings(const DisplaySettings &newDisplaySettings, - const MarginSettings &newMarginSettings) +void DisplaySettingsWidget::setDisplaySettings(const DisplaySettings &newDisplaySettings, + const MarginSettings &newMarginSettings) { - if (newDisplaySettings != d->m_displaySettings) { - d->m_displaySettings = newDisplaySettings; - d->m_displaySettings.toSettings(d->m_settingsPrefix, Core::ICore::settings()); + if (newDisplaySettings != m_data->m_displaySettings) { + m_data->m_displaySettings = newDisplaySettings; + m_data->m_displaySettings.toSettings(m_data->m_settingsPrefix, Core::ICore::settings()); emit TextEditorSettings::instance()->displaySettingsChanged(newDisplaySettings); } - if (newMarginSettings != d->m_marginSettings) { - d->m_marginSettings = newMarginSettings; - d->m_marginSettings.toSettings(d->m_settingsPrefix, Core::ICore::settings()); + if (newMarginSettings != m_data->m_marginSettings) { + m_data->m_marginSettings = newMarginSettings; + m_data->m_marginSettings.toSettings(m_data->m_settingsPrefix, Core::ICore::settings()); emit TextEditorSettings::instance()->marginSettingsChanged(newMarginSettings); } } +DisplaySettingsPage::DisplaySettingsPage() + : d(new DisplaySettingsPagePrivate) +{ + setId(Constants::TEXT_EDITOR_DISPLAY_SETTINGS); + setDisplayName(DisplaySettingsWidget::tr("Display")); + setCategory(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY); + setDisplayCategory(QCoreApplication::translate("TextEditor", "Text Editor")); + setCategoryIconPath(TextEditor::Constants::TEXT_EDITOR_SETTINGS_CATEGORY_ICON_PATH); + setWidgetCreator([this] { return new DisplaySettingsWidget(d); }); +} + +DisplaySettingsPage::~DisplaySettingsPage() +{ + delete d; +} + } // TextEditor diff --git a/src/plugins/texteditor/displaysettingspage.h b/src/plugins/texteditor/displaysettingspage.h index 7c1f91c4bc9..144cfe76c73 100644 --- a/src/plugins/texteditor/displaysettingspage.h +++ b/src/plugins/texteditor/displaysettingspage.h @@ -25,37 +25,24 @@ #pragma once -#include "texteditor_global.h" - #include namespace TextEditor { class DisplaySettings; class MarginSettings; +class DisplaySettingsPagePrivate; class DisplaySettingsPage : public Core::IOptionsPage { - Q_OBJECT - public: DisplaySettingsPage(); ~DisplaySettingsPage() override; - // IOptionsPage - QWidget *widget() override; - void apply() override; - void finish() override; - const DisplaySettings &displaySettings() const; const MarginSettings &marginSettings() const; private: - void settingsFromUI(DisplaySettings &displaySettings, MarginSettings &marginSettings) const; - void settingsToUI(); - void setDisplaySettings(const DisplaySettings &, const MarginSettings &newMarginSettings); - - struct DisplaySettingsPagePrivate; DisplaySettingsPagePrivate *d; };