TextEditor: Move DisplaySettings closer to new code layout

Change-Id: Ibf095a52f6c689a9f36caf6183e6737bae4e68bf
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-02-10 11:46:56 +01:00
parent 691fd203db
commit 45e6a9af8b
2 changed files with 95 additions and 110 deletions

View File

@@ -33,58 +33,49 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <QPointer>
namespace TextEditor { namespace TextEditor {
struct DisplaySettingsPage::DisplaySettingsPagePrivate class DisplaySettingsPagePrivate
{ {
public:
DisplaySettingsPagePrivate(); DisplaySettingsPagePrivate();
QPointer<QWidget> m_widget;
Internal::Ui::DisplaySettingsPage *m_page = nullptr;
DisplaySettings m_displaySettings; DisplaySettings m_displaySettings;
MarginSettings m_marginSettings; MarginSettings m_marginSettings;
QString m_settingsPrefix; QString m_settingsPrefix;
}; };
DisplaySettingsPage::DisplaySettingsPagePrivate::DisplaySettingsPagePrivate() DisplaySettingsPagePrivate::DisplaySettingsPagePrivate()
{ {
m_settingsPrefix = QLatin1String("text"); m_settingsPrefix = QLatin1String("text");
m_displaySettings.fromSettings(m_settingsPrefix, Core::ICore::settings()); m_displaySettings.fromSettings(m_settingsPrefix, Core::ICore::settings());
m_marginSettings.fromSettings(m_settingsPrefix, Core::ICore::settings()); m_marginSettings.fromSettings(m_settingsPrefix, Core::ICore::settings());
} }
DisplaySettingsPage::DisplaySettingsPage() class DisplaySettingsWidget final : public Core::IOptionsPageWidget
: d(new DisplaySettingsPagePrivate)
{ {
setId(Constants::TEXT_EDITOR_DISPLAY_SETTINGS); Q_DECLARE_TR_FUNCTIONS(TextEditor::DisplaySettingsPage)
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);
}
DisplaySettingsPage::~DisplaySettingsPage() public:
DisplaySettingsWidget(DisplaySettingsPagePrivate *data)
: m_data(data)
{ {
delete d; m_ui.setupUi(this);
}
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);
settingsToUI(); 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; DisplaySettings newDisplaySettings;
MarginSettings newMarginSettings; MarginSettings newMarginSettings;
@@ -92,73 +83,64 @@ void DisplaySettingsPage::apply()
setDisplaySettings(newDisplaySettings, newMarginSettings); setDisplaySettings(newDisplaySettings, newMarginSettings);
} }
void DisplaySettingsPage::finish() void DisplaySettingsWidget::settingsFromUI(DisplaySettings &displaySettings,
{
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 MarginSettings &marginSettings) const
{ {
displaySettings.m_displayLineNumbers = d->m_page->displayLineNumbers->isChecked(); displaySettings.m_displayLineNumbers = m_ui.displayLineNumbers->isChecked();
displaySettings.m_textWrapping = d->m_page->enableTextWrapping->isChecked(); displaySettings.m_textWrapping = m_ui.enableTextWrapping->isChecked();
marginSettings.m_showMargin = d->m_page->showWrapColumn->isChecked(); marginSettings.m_showMargin = m_ui.showWrapColumn->isChecked();
marginSettings.m_marginColumn = d->m_page->wrapColumn->value(); marginSettings.m_marginColumn = m_ui.wrapColumn->value();
displaySettings.m_visualizeWhitespace = d->m_page->visualizeWhitespace->isChecked(); displaySettings.m_visualizeWhitespace = m_ui.visualizeWhitespace->isChecked();
displaySettings.m_displayFoldingMarkers = d->m_page->displayFoldingMarkers->isChecked(); displaySettings.m_displayFoldingMarkers = m_ui.displayFoldingMarkers->isChecked();
displaySettings.m_highlightCurrentLine = d->m_page->highlightCurrentLine->isChecked(); displaySettings.m_highlightCurrentLine = m_ui.highlightCurrentLine->isChecked();
displaySettings.m_highlightBlocks = d->m_page->highlightBlocks->isChecked(); displaySettings.m_highlightBlocks = m_ui.highlightBlocks->isChecked();
displaySettings.m_animateMatchingParentheses = d->m_page->animateMatchingParentheses->isChecked(); displaySettings.m_animateMatchingParentheses = m_ui.animateMatchingParentheses->isChecked();
displaySettings.m_highlightMatchingParentheses = d->m_page->highlightMatchingParentheses->isChecked(); displaySettings.m_highlightMatchingParentheses = m_ui.highlightMatchingParentheses->isChecked();
displaySettings.m_markTextChanges = d->m_page->markTextChanges->isChecked(); displaySettings.m_markTextChanges = m_ui.markTextChanges->isChecked();
displaySettings.m_autoFoldFirstComment = d->m_page->autoFoldFirstComment->isChecked(); displaySettings.m_autoFoldFirstComment = m_ui.autoFoldFirstComment->isChecked();
displaySettings.m_centerCursorOnScroll = d->m_page->centerOnScroll->isChecked(); displaySettings.m_centerCursorOnScroll = m_ui.centerOnScroll->isChecked();
displaySettings.m_openLinksInNextSplit = d->m_page->openLinksInNextSplit->isChecked(); displaySettings.m_openLinksInNextSplit = m_ui.openLinksInNextSplit->isChecked();
displaySettings.m_displayFileEncoding = d->m_page->displayFileEncoding->isChecked(); displaySettings.m_displayFileEncoding = m_ui.displayFileEncoding->isChecked();
displaySettings.m_scrollBarHighlights = d->m_page->scrollBarHighlights->isChecked(); displaySettings.m_scrollBarHighlights = m_ui.scrollBarHighlights->isChecked();
displaySettings.m_animateNavigationWithinFile = d->m_page->animateNavigationWithinFile->isChecked(); displaySettings.m_animateNavigationWithinFile = m_ui.animateNavigationWithinFile->isChecked();
displaySettings.m_displayAnnotations = d->m_page->displayAnnotations->isChecked(); displaySettings.m_displayAnnotations = m_ui.displayAnnotations->isChecked();
if (d->m_page->leftAligned->isChecked()) if (m_ui.leftAligned->isChecked())
displaySettings.m_annotationAlignment = AnnotationAlignment::NextToContent; displaySettings.m_annotationAlignment = AnnotationAlignment::NextToContent;
else if (d->m_page->atMargin->isChecked()) else if (m_ui.atMargin->isChecked())
displaySettings.m_annotationAlignment = AnnotationAlignment::NextToMargin; displaySettings.m_annotationAlignment = AnnotationAlignment::NextToMargin;
else if (d->m_page->rightAligned->isChecked()) else if (m_ui.rightAligned->isChecked())
displaySettings.m_annotationAlignment = AnnotationAlignment::RightSide; displaySettings.m_annotationAlignment = AnnotationAlignment::RightSide;
else if (d->m_page->betweenLines->isChecked()) else if (m_ui.betweenLines->isChecked())
displaySettings.m_annotationAlignment = AnnotationAlignment::BetweenLines; displaySettings.m_annotationAlignment = AnnotationAlignment::BetweenLines;
} }
void DisplaySettingsPage::settingsToUI() void DisplaySettingsWidget::settingsToUI()
{ {
const DisplaySettings &displaySettings = d->m_displaySettings; const DisplaySettings &displaySettings = m_data->m_displaySettings;
const MarginSettings &marginSettings = d->m_marginSettings; const MarginSettings &marginSettings = m_data->m_marginSettings;
d->m_page->displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers); m_ui.displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers);
d->m_page->enableTextWrapping->setChecked(displaySettings.m_textWrapping); m_ui.enableTextWrapping->setChecked(displaySettings.m_textWrapping);
d->m_page->showWrapColumn->setChecked(marginSettings.m_showMargin); m_ui.showWrapColumn->setChecked(marginSettings.m_showMargin);
d->m_page->wrapColumn->setValue(marginSettings.m_marginColumn); m_ui.wrapColumn->setValue(marginSettings.m_marginColumn);
d->m_page->visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace); m_ui.visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace);
d->m_page->displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers); m_ui.displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers);
d->m_page->highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine); m_ui.highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine);
d->m_page->highlightBlocks->setChecked(displaySettings.m_highlightBlocks); m_ui.highlightBlocks->setChecked(displaySettings.m_highlightBlocks);
d->m_page->animateMatchingParentheses->setChecked(displaySettings.m_animateMatchingParentheses); m_ui.animateMatchingParentheses->setChecked(displaySettings.m_animateMatchingParentheses);
d->m_page->highlightMatchingParentheses->setChecked(displaySettings.m_highlightMatchingParentheses); m_ui.highlightMatchingParentheses->setChecked(displaySettings.m_highlightMatchingParentheses);
d->m_page->markTextChanges->setChecked(displaySettings.m_markTextChanges); m_ui.markTextChanges->setChecked(displaySettings.m_markTextChanges);
d->m_page->autoFoldFirstComment->setChecked(displaySettings.m_autoFoldFirstComment); m_ui.autoFoldFirstComment->setChecked(displaySettings.m_autoFoldFirstComment);
d->m_page->centerOnScroll->setChecked(displaySettings.m_centerCursorOnScroll); m_ui.centerOnScroll->setChecked(displaySettings.m_centerCursorOnScroll);
d->m_page->openLinksInNextSplit->setChecked(displaySettings.m_openLinksInNextSplit); m_ui.openLinksInNextSplit->setChecked(displaySettings.m_openLinksInNextSplit);
d->m_page->displayFileEncoding->setChecked(displaySettings.m_displayFileEncoding); m_ui.displayFileEncoding->setChecked(displaySettings.m_displayFileEncoding);
d->m_page->scrollBarHighlights->setChecked(displaySettings.m_scrollBarHighlights); m_ui.scrollBarHighlights->setChecked(displaySettings.m_scrollBarHighlights);
d->m_page->animateNavigationWithinFile->setChecked(displaySettings.m_animateNavigationWithinFile); m_ui.animateNavigationWithinFile->setChecked(displaySettings.m_animateNavigationWithinFile);
d->m_page->displayAnnotations->setChecked(displaySettings.m_displayAnnotations); m_ui.displayAnnotations->setChecked(displaySettings.m_displayAnnotations);
switch (displaySettings.m_annotationAlignment) { switch (displaySettings.m_annotationAlignment) {
case AnnotationAlignment::NextToContent: d->m_page->leftAligned->setChecked(true); break; case AnnotationAlignment::NextToContent: m_ui.leftAligned->setChecked(true); break;
case AnnotationAlignment::NextToMargin: d->m_page->atMargin->setChecked(true); break; case AnnotationAlignment::NextToMargin: m_ui.atMargin->setChecked(true); break;
case AnnotationAlignment::RightSide: d->m_page->rightAligned->setChecked(true); break; case AnnotationAlignment::RightSide: m_ui.rightAligned->setChecked(true); break;
case AnnotationAlignment::BetweenLines: d->m_page->betweenLines->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; return d->m_marginSettings;
} }
void DisplaySettingsPage::setDisplaySettings(const DisplaySettings &newDisplaySettings, void DisplaySettingsWidget::setDisplaySettings(const DisplaySettings &newDisplaySettings,
const MarginSettings &newMarginSettings) const MarginSettings &newMarginSettings)
{ {
if (newDisplaySettings != d->m_displaySettings) { if (newDisplaySettings != m_data->m_displaySettings) {
d->m_displaySettings = newDisplaySettings; m_data->m_displaySettings = newDisplaySettings;
d->m_displaySettings.toSettings(d->m_settingsPrefix, Core::ICore::settings()); m_data->m_displaySettings.toSettings(m_data->m_settingsPrefix, Core::ICore::settings());
emit TextEditorSettings::instance()->displaySettingsChanged(newDisplaySettings); emit TextEditorSettings::instance()->displaySettingsChanged(newDisplaySettings);
} }
if (newMarginSettings != d->m_marginSettings) { if (newMarginSettings != m_data->m_marginSettings) {
d->m_marginSettings = newMarginSettings; m_data->m_marginSettings = newMarginSettings;
d->m_marginSettings.toSettings(d->m_settingsPrefix, Core::ICore::settings()); m_data->m_marginSettings.toSettings(m_data->m_settingsPrefix, Core::ICore::settings());
emit TextEditorSettings::instance()->marginSettingsChanged(newMarginSettings); 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 } // TextEditor

View File

@@ -25,37 +25,24 @@
#pragma once #pragma once
#include "texteditor_global.h"
#include <coreplugin/dialogs/ioptionspage.h> #include <coreplugin/dialogs/ioptionspage.h>
namespace TextEditor { namespace TextEditor {
class DisplaySettings; class DisplaySettings;
class MarginSettings; class MarginSettings;
class DisplaySettingsPagePrivate;
class DisplaySettingsPage : public Core::IOptionsPage class DisplaySettingsPage : public Core::IOptionsPage
{ {
Q_OBJECT
public: public:
DisplaySettingsPage(); DisplaySettingsPage();
~DisplaySettingsPage() override; ~DisplaySettingsPage() override;
// IOptionsPage
QWidget *widget() override;
void apply() override;
void finish() override;
const DisplaySettings &displaySettings() const; const DisplaySettings &displaySettings() const;
const MarginSettings &marginSettings() const; const MarginSettings &marginSettings() const;
private: private:
void settingsFromUI(DisplaySettings &displaySettings, MarginSettings &marginSettings) const;
void settingsToUI();
void setDisplaySettings(const DisplaySettings &, const MarginSettings &newMarginSettings);
struct DisplaySettingsPagePrivate;
DisplaySettingsPagePrivate *d; DisplaySettingsPagePrivate *d;
}; };