diff options
author | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2009-01-27 15:12:32 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2009-01-27 15:23:19 +0100 |
commit | 5dbcc615c210ad24a9abff4c7340ae64a65b75ec (patch) | |
tree | 8959257c912d418ed10cb79c4f38ae2574030746 /src/plugins/texteditor/behaviorsettingspage.cpp | |
parent | e33c21934a9a42fdd6938094cdeb8e9882e8847e (diff) | |
download | qt-creator-5dbcc615c210ad24a9abff4c7340ae64a65b75ec.tar.gz |
Split up general text editor settings
The page had grown too large so now the display settings have been split
off onto their own page.
Diffstat (limited to 'src/plugins/texteditor/behaviorsettingspage.cpp')
-rw-r--r-- | src/plugins/texteditor/behaviorsettingspage.cpp | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/src/plugins/texteditor/behaviorsettingspage.cpp b/src/plugins/texteditor/behaviorsettingspage.cpp new file mode 100644 index 0000000000..be3cf2ddf2 --- /dev/null +++ b/src/plugins/texteditor/behaviorsettingspage.cpp @@ -0,0 +1,187 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +#include "behaviorsettingspage.h" +#include "interactionsettings.h" +#include "storagesettings.h" +#include "tabsettings.h" +#include "ui_behaviorsettingspage.h" + +#include <coreplugin/icore.h> + +#include <QtCore/QSettings> + +using namespace TextEditor; + +struct BehaviorSettingsPage::BehaviorSettingsPagePrivate +{ + explicit BehaviorSettingsPagePrivate(const BehaviorSettingsPageParameters &p); + + const BehaviorSettingsPageParameters m_parameters; + Ui::BehaviorSettingsPage m_page; + TabSettings m_tabSettings; + StorageSettings m_storageSettings; + InteractionSettings m_interactionSettings; +}; + +BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate + (const BehaviorSettingsPageParameters &p) + : m_parameters(p) +{ + if (const QSettings *s = Core::ICore::instance()->settings()) { + m_tabSettings.fromSettings(m_parameters.settingsPrefix, s); + m_storageSettings.fromSettings(m_parameters.settingsPrefix, s); + m_interactionSettings.fromSettings(m_parameters.settingsPrefix, s); + } +} + +BehaviorSettingsPage::BehaviorSettingsPage(const BehaviorSettingsPageParameters &p, + QObject *parent) + : Core::IOptionsPage(parent), + m_d(new BehaviorSettingsPagePrivate(p)) +{ +} + +BehaviorSettingsPage::~BehaviorSettingsPage() +{ + delete m_d; +} + +QString BehaviorSettingsPage::name() const +{ + return m_d->m_parameters.name; +} + +QString BehaviorSettingsPage::category() const +{ + return m_d->m_parameters.category; +} + +QString BehaviorSettingsPage::trCategory() const +{ + return m_d->m_parameters.trCategory; +} + +QWidget *BehaviorSettingsPage::createPage(QWidget *parent) +{ + QWidget *w = new QWidget(parent); + m_d->m_page.setupUi(w); + settingsToUI(); + return w; +} + +void BehaviorSettingsPage::apply() +{ + TabSettings newTabSettings; + StorageSettings newStorageSettings; + InteractionSettings newInteractionSettings; + + settingsFromUI(newTabSettings, newStorageSettings, newInteractionSettings); + + Core::ICore *core = Core::ICore::instance(); + QSettings *s = core->settings(); + + if (newTabSettings != m_d->m_tabSettings) { + m_d->m_tabSettings = newTabSettings; + if (s) + m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s); + + emit tabSettingsChanged(newTabSettings); + } + + if (newStorageSettings != m_d->m_storageSettings) { + m_d->m_storageSettings = newStorageSettings; + if (s) + m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s); + + emit storageSettingsChanged(newStorageSettings); + } + + if (newInteractionSettings != m_d->m_interactionSettings) { + m_d->m_interactionSettings = newInteractionSettings; + if (s) + m_d->m_interactionSettings.toSettings(m_d->m_parameters.settingsPrefix, s); + } +} + +void BehaviorSettingsPage::settingsFromUI(TabSettings &tabSettings, + StorageSettings &storageSettings, + InteractionSettings &interactionSettings) const +{ + tabSettings.m_spacesForTabs = m_d->m_page.insertSpaces->isChecked(); + tabSettings.m_autoIndent = m_d->m_page.autoIndent->isChecked(); + tabSettings.m_smartBackspace = m_d->m_page.smartBackspace->isChecked(); + tabSettings.m_tabSize = m_d->m_page.tabSize->value(); + tabSettings.m_indentSize = m_d->m_page.indentSize->value(); + + storageSettings.m_cleanWhitespace = m_d->m_page.cleanWhitespace->isChecked(); + storageSettings.m_inEntireDocument = m_d->m_page.inEntireDocument->isChecked(); + storageSettings.m_cleanIndentation = m_d->m_page.cleanIndentation->isChecked(); + storageSettings.m_addFinalNewLine = m_d->m_page.addFinalNewLine->isChecked(); + + interactionSettings.m_useVim = m_d->m_page.useVim->isChecked(); +} + +void BehaviorSettingsPage::settingsToUI() +{ + const TabSettings &tabSettings = m_d->m_tabSettings; + m_d->m_page.insertSpaces->setChecked(tabSettings.m_spacesForTabs); + m_d->m_page.autoIndent->setChecked(tabSettings.m_autoIndent); + m_d->m_page.smartBackspace->setChecked(tabSettings.m_smartBackspace); + m_d->m_page.tabSize->setValue(tabSettings.m_tabSize); + m_d->m_page.indentSize->setValue(tabSettings.m_indentSize); + + const StorageSettings &storageSettings = m_d->m_storageSettings; + m_d->m_page.cleanWhitespace->setChecked(storageSettings.m_cleanWhitespace); + m_d->m_page.inEntireDocument->setChecked(storageSettings.m_inEntireDocument); + m_d->m_page.cleanIndentation->setChecked(storageSettings.m_cleanIndentation); + m_d->m_page.addFinalNewLine->setChecked(storageSettings.m_addFinalNewLine); + + const InteractionSettings &interactionSettings = m_d->m_interactionSettings; + m_d->m_page.useVim->setChecked(interactionSettings.m_useVim); +} + +TabSettings BehaviorSettingsPage::tabSettings() const +{ + return m_d->m_tabSettings; +} + +StorageSettings BehaviorSettingsPage::storageSettings() const +{ + return m_d->m_storageSettings; +} + +InteractionSettings BehaviorSettingsPage::interactionSettings() const +{ + return m_d->m_interactionSettings; +} |