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 <QPointer>
namespace TextEditor {
struct DisplaySettingsPage::DisplaySettingsPagePrivate
class DisplaySettingsPagePrivate
{
public:
DisplaySettingsPagePrivate();
QPointer<QWidget> 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

View File

@@ -25,37 +25,24 @@
#pragma once
#include "texteditor_global.h"
#include <coreplugin/dialogs/ioptionspage.h>
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;
};