diff options
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r-- | src/plugins/cpptools/cppcodestylepreferences.cpp | 32 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylepreferences.h | 15 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylepreferencesfactory.cpp (renamed from src/plugins/cpptools/cppcodestylesettingsfactory.cpp) | 77 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylepreferencesfactory.h (renamed from src/plugins/cpptools/cppcodestylesettingsfactory.h) | 16 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylesettingspage.cpp | 199 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylesettingspage.h | 21 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylesettingspage.ui | 74 | ||||
-rw-r--r-- | src/plugins/cpptools/cppqtstyleindenter.cpp | 12 | ||||
-rw-r--r-- | src/plugins/cpptools/cppqtstyleindenter.h | 5 | ||||
-rw-r--r-- | src/plugins/cpptools/cpprefactoringchanges.cpp | 2 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptools.pro | 4 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptoolsplugin.cpp | 16 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptoolssettings.cpp | 197 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptoolssettings.h | 8 |
14 files changed, 417 insertions, 261 deletions
diff --git a/src/plugins/cpptools/cppcodestylepreferences.cpp b/src/plugins/cpptools/cppcodestylepreferences.cpp index 5e3e27a8aa..e23dfdf591 100644 --- a/src/plugins/cpptools/cppcodestylepreferences.cpp +++ b/src/plugins/cpptools/cppcodestylepreferences.cpp @@ -36,10 +36,8 @@ using namespace CppTools; static const char *settingsSuffixKey = "CodeStyleSettings"; -static const char *currentFallbackKey = "CurrentFallback"; - -CppCodeStylePreferences::CppCodeStylePreferences(const QList<TextEditor::IFallbackPreferences *> &fallbacks, QObject *parent) : - IFallbackPreferences(fallbacks, parent) +CppCodeStylePreferences::CppCodeStylePreferences(QObject *parent) : + ICodeStylePreferences(parent) { connect(this, SIGNAL(currentValueChanged(QVariant)), this, SLOT(slotCurrentValueChanged(QVariant))); @@ -48,7 +46,7 @@ CppCodeStylePreferences::CppCodeStylePreferences(const QList<TextEditor::IFallba QVariant CppCodeStylePreferences::value() const { QVariant v; - v.setValue(settings()); + v.setValue(codeStyleSettings()); return v; } @@ -57,15 +55,15 @@ void CppCodeStylePreferences::setValue(const QVariant &data) if (!data.canConvert<CppCodeStyleSettings>()) return; - setSettings(data.value<CppCodeStyleSettings>()); + setCodeStyleSettings(data.value<CppCodeStyleSettings>()); } -CppCodeStyleSettings CppCodeStylePreferences::settings() const +CppCodeStyleSettings CppCodeStylePreferences::codeStyleSettings() const { return m_data; } -void CppCodeStylePreferences::setSettings(const CppCodeStyleSettings &data) +void CppCodeStylePreferences::setCodeStyleSettings(const CppCodeStyleSettings &data) { if (m_data == data) return; @@ -75,13 +73,13 @@ void CppCodeStylePreferences::setSettings(const CppCodeStyleSettings &data) QVariant v; v.setValue(data); emit valueChanged(v); - emit settingsChanged(m_data); - if (!currentFallback()) { + emit codeStyleSettingsChanged(m_data); + if (!currentDelegate()) { emit currentValueChanged(v); } } -CppCodeStyleSettings CppCodeStylePreferences::currentSettings() const +CppCodeStyleSettings CppCodeStylePreferences::currentCodeStyleSettings() const { QVariant v = currentValue(); if (!v.canConvert<CppCodeStyleSettings>()) { @@ -96,7 +94,7 @@ void CppCodeStylePreferences::slotCurrentValueChanged(const QVariant &value) if (!value.canConvert<CppCodeStyleSettings>()) return; - emit currentSettingsChanged(value.value<CppCodeStyleSettings>()); + emit currentCodeStyleSettingsChanged(value.value<CppCodeStyleSettings>()); } QString CppCodeStylePreferences::settingsSuffix() const @@ -106,13 +104,19 @@ QString CppCodeStylePreferences::settingsSuffix() const void CppCodeStylePreferences::toMap(const QString &prefix, QVariantMap *map) const { + ICodeStylePreferences::toMap(prefix, map); + if (currentDelegate()) + return; + m_data.toMap(prefix, map); - map->insert(prefix + QLatin1String(currentFallbackKey), currentFallbackId()); } void CppCodeStylePreferences::fromMap(const QString &prefix, const QVariantMap &map) { + ICodeStylePreferences::fromMap(prefix, map); + if (currentDelegate()) + return; + m_data.fromMap(prefix, map); - setCurrentFallback(map.value(prefix + QLatin1String(currentFallbackKey), QLatin1String("Global")).toString()); } diff --git a/src/plugins/cpptools/cppcodestylepreferences.h b/src/plugins/cpptools/cppcodestylepreferences.h index 022d623e5f..2e43a94e84 100644 --- a/src/plugins/cpptools/cppcodestylepreferences.h +++ b/src/plugins/cpptools/cppcodestylepreferences.h @@ -35,35 +35,34 @@ #include "cpptools_global.h" #include "cppcodestylesettings.h" -#include <texteditor/ifallbackpreferences.h> +#include <texteditor/icodestylepreferences.h> namespace CppTools { -class CPPTOOLS_EXPORT CppCodeStylePreferences : public TextEditor::IFallbackPreferences +class CPPTOOLS_EXPORT CppCodeStylePreferences : public TextEditor::ICodeStylePreferences { Q_OBJECT public: explicit CppCodeStylePreferences( - const QList<TextEditor::IFallbackPreferences *> &fallbacks, QObject *parent = 0); virtual QVariant value() const; virtual void setValue(const QVariant &); - CppCodeStyleSettings settings() const; + CppCodeStyleSettings codeStyleSettings() const; // tracks parent hierarchy until currentParentSettings is null - CppCodeStyleSettings currentSettings() const; + CppCodeStyleSettings currentCodeStyleSettings() const; virtual void toMap(const QString &prefix, QVariantMap *map) const; virtual void fromMap(const QString &prefix, const QVariantMap &map); public slots: - void setSettings(const CppTools::CppCodeStyleSettings &data); + void setCodeStyleSettings(const CppTools::CppCodeStyleSettings &data); signals: - void settingsChanged(const CppTools::CppCodeStyleSettings &); - void currentSettingsChanged(const CppTools::CppCodeStyleSettings &); + void codeStyleSettingsChanged(const CppTools::CppCodeStyleSettings &); + void currentCodeStyleSettingsChanged(const CppTools::CppCodeStyleSettings &); protected: virtual QString settingsSuffix() const; diff --git a/src/plugins/cpptools/cppcodestylesettingsfactory.cpp b/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp index 2374677ac4..29979c982c 100644 --- a/src/plugins/cpptools/cppcodestylesettingsfactory.cpp +++ b/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp @@ -30,18 +30,66 @@ ** **************************************************************************/ -#include "cppcodestylesettingsfactory.h" +#include "cppcodestylepreferencesfactory.h" #include "cppcodestylesettings.h" #include "cppcodestylesettingspage.h" #include "cppcodestylepreferences.h" #include "cpptoolsconstants.h" #include "cppqtstyleindenter.h" -#include <texteditor/tabpreferences.h> +#include <extensionsystem/pluginmanager.h> #include <texteditor/tabsettings.h> +#include <texteditor/snippets/isnippetprovider.h> +#include <cppeditor/cppeditorconstants.h> #include <QtGui/QLayout> using namespace CppTools; +static const char *defaultPreviewText = + "#include <math.h>\n" + "\n" + "class Complex\n" + " {\n" + "public:\n" + " Complex(double re, double im)\n" + " : _re(re), _im(im)\n" + " {}\n" + " double modulus() const\n" + " {\n" + " return sqrt(_re * _re + _im * _im);\n" + " }\n" + "private:\n" + " double _re;\n" + " double _im;\n" + " };\n" + "\n" + "void bar(int i)\n" + " {\n" + " static int counter = 0;\n" + " counter += i;\n" + " }\n" + "\n" + "namespace Foo\n" + " {\n" + " namespace Bar\n" + " {\n" + " void foo(int a, int b)\n" + " {\n" + " for (int i = 0; i < a; i++)\n" + " {\n" + " if (i < b)\n" + " bar(i);\n" + " else\n" + " {\n" + " bar(i);\n" + " bar(b);\n" + " }\n" + " }\n" + " }\n" + " } // namespace Bar\n" + " } // namespace Foo\n" + ; + + CppCodeStylePreferencesFactory::CppCodeStylePreferencesFactory() { } @@ -56,14 +104,12 @@ QString CppCodeStylePreferencesFactory::displayName() return Constants::CPP_SETTINGS_NAME; } -TextEditor::IFallbackPreferences *CppCodeStylePreferencesFactory::createPreferences( - const QList<TextEditor::IFallbackPreferences *> &fallbacks) const +TextEditor::ICodeStylePreferences *CppCodeStylePreferencesFactory::createCodeStyle() const { - return new CppCodeStylePreferences(fallbacks); + return new CppCodeStylePreferences(); } -QWidget *CppCodeStylePreferencesFactory::createEditor(TextEditor::IFallbackPreferences *preferences, - TextEditor::TabPreferences *tabPreferences, +QWidget *CppCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences, QWidget *parent) const { CppCodeStylePreferences *cppPreferences = qobject_cast<CppCodeStylePreferences *>(preferences); @@ -71,7 +117,7 @@ QWidget *CppCodeStylePreferencesFactory::createEditor(TextEditor::IFallbackPrefe return 0; Internal::CppCodeStylePreferencesWidget *widget = new Internal::CppCodeStylePreferencesWidget(parent); widget->layout()->setMargin(0); - widget->setPreferences(cppPreferences, tabPreferences); + widget->setCodeStyle(cppPreferences); return widget; } @@ -80,3 +126,18 @@ TextEditor::Indenter *CppCodeStylePreferencesFactory::createIndenter() const return new CppQtStyleIndenter(); } +TextEditor::ISnippetProvider *CppCodeStylePreferencesFactory::snippetProvider() const +{ + const QList<TextEditor::ISnippetProvider *> &providers = + ExtensionSystem::PluginManager::instance()->getObjects<TextEditor::ISnippetProvider>(); + foreach (TextEditor::ISnippetProvider *provider, providers) + if (provider->groupId() == QLatin1String(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID)) + return provider; + return 0; +} + +QString CppCodeStylePreferencesFactory::previewText() const +{ + return QLatin1String(defaultPreviewText); +} + diff --git a/src/plugins/cpptools/cppcodestylesettingsfactory.h b/src/plugins/cpptools/cppcodestylepreferencesfactory.h index cf99ecac81..5ebd052c4a 100644 --- a/src/plugins/cpptools/cppcodestylesettingsfactory.h +++ b/src/plugins/cpptools/cppcodestylepreferencesfactory.h @@ -30,8 +30,8 @@ ** **************************************************************************/ -#ifndef CPPCODESTYLESETTINGSFACTORY_H -#define CPPCODESTYLESETTINGSFACTORY_H +#ifndef CPPCODESTYLEPREFERENCESFACTORY_H +#define CPPCODESTYLEPREFERENCESFACTORY_H #include <texteditor/icodestylepreferencesfactory.h> @@ -44,14 +44,14 @@ public: virtual QString languageId(); virtual QString displayName(); - virtual TextEditor::IFallbackPreferences *createPreferences(const QList<TextEditor::IFallbackPreferences *> &fallbacks) const; - virtual QWidget *createEditor(TextEditor::IFallbackPreferences *settings, - TextEditor::TabPreferences *tabSettings, - QWidget *parent) const; + virtual TextEditor::ICodeStylePreferences *createCodeStyle() const; + virtual QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, + QWidget *parent) const; virtual TextEditor::Indenter *createIndenter() const; - + virtual TextEditor::ISnippetProvider *snippetProvider() const; + virtual QString previewText() const; }; } // namespace CppTools -#endif // CPPCODESTYLESETTINGSFACTORY_H +#endif // CPPCODESTYLEPREFERENCESFACTORY_H diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp index 426d3da5d2..cecdc5d48b 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.cpp +++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp @@ -41,7 +41,7 @@ #include <texteditor/displaysettings.h> #include <texteditor/texteditorsettings.h> #include <texteditor/tabsettings.h> -#include <texteditor/tabpreferences.h> +#include <texteditor/codestyleeditor.h> #include <extensionsystem/pluginmanager.h> #include <cppeditor/cppeditorconstants.h> #include <coreplugin/icore.h> @@ -209,8 +209,7 @@ namespace Internal { CppCodeStylePreferencesWidget::CppCodeStylePreferencesWidget(QWidget *parent) : QWidget(parent), - m_tabPreferences(0), - m_cppCodeStylePreferences(0), + m_preferences(0), m_ui(new Ui::CppCodeStyleSettingsPage), m_blockUpdates(false) { @@ -224,50 +223,51 @@ CppCodeStylePreferencesWidget::CppCodeStylePreferencesWidget(QWidget *parent) m_previews[i]->setPlainText(defaultCodeStyleSnippets[i]); } - TextEditor::TextEditorSettings *settings = TextEditorSettings::instance(); - decorateEditors(settings->fontSettings()); - connect(settings, SIGNAL(fontSettingsChanged(TextEditor::FontSettings)), + TextEditor::TextEditorSettings *textEditorSettings = TextEditorSettings::instance(); + decorateEditors(textEditorSettings->fontSettings()); + connect(textEditorSettings, SIGNAL(fontSettingsChanged(TextEditor::FontSettings)), this, SLOT(decorateEditors(TextEditor::FontSettings))); setVisualizeWhitespace(true); + connect(m_ui->tabSettingsWidget, SIGNAL(settingsChanged(TextEditor::TabSettings)), + this, SLOT(slotTabSettingsChanged(TextEditor::TabSettings))); connect(m_ui->indentBlockBraces, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentBlockBody, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentClassBraces, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentNamespaceBraces, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentEnumBraces, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentNamespaceBody, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentSwitchLabels, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentCaseStatements, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentCaseBlocks, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentCaseBreak, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentAccessSpecifiers, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentDeclarationsRelativeToAccessSpecifiers, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentFunctionBody, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->indentFunctionBraces, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->extraPaddingConditions, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); connect(m_ui->alignAssignments, SIGNAL(toggled(bool)), - this, SLOT(slotCppCodeStyleSettingsChanged())); + this, SLOT(slotCodeStyleSettingsChanged())); m_ui->categoryTab->setCurrentIndex(0); - m_ui->tabPreferencesWidget->setFlat(true); - m_ui->fallbackWidget->setLabelText(tr("Code style settings:")); + m_ui->tabSettingsWidget->setFlat(true); } CppCodeStylePreferencesWidget::~CppCodeStylePreferencesWidget() @@ -275,27 +275,21 @@ CppCodeStylePreferencesWidget::~CppCodeStylePreferencesWidget() delete m_ui; } -void CppCodeStylePreferencesWidget::setPreferences(CppTools::CppCodeStylePreferences *codeStylePreferences, - TextEditor::TabPreferences *tabPreferences) +void CppCodeStylePreferencesWidget::setCodeStyle(CppTools::CppCodeStylePreferences *codeStylePreferences) { - // tab preferences - m_tabPreferences = tabPreferences; - m_ui->tabPreferencesWidget->setTabPreferences(tabPreferences); - connect(m_tabPreferences, SIGNAL(currentSettingsChanged(TextEditor::TabSettings)), - this, SLOT(updatePreview())); - // code preferences - m_cppCodeStylePreferences = codeStylePreferences; - m_ui->fallbackWidget->setFallbackPreferences(codeStylePreferences); - m_ui->fallbackContainer->setVisible(!m_ui->fallbackWidget->isHidden()); + m_preferences = codeStylePreferences; - connect(m_cppCodeStylePreferences, SIGNAL(currentSettingsChanged(CppTools::CppCodeStyleSettings)), - this, SLOT(setCppCodeStyleSettings(CppTools::CppCodeStyleSettings))); - connect(m_cppCodeStylePreferences, SIGNAL(currentPreferencesChanged(TextEditor::IFallbackPreferences*)), - this, SLOT(slotCurrentPreferencesChanged(TextEditor::IFallbackPreferences*))); + connect(m_preferences, SIGNAL(currentTabSettingsChanged(TextEditor::TabSettings)), + this, SLOT(setTabSettings(TextEditor::TabSettings))); + connect(m_preferences, SIGNAL(currentCodeStyleSettingsChanged(CppTools::CppCodeStyleSettings)), + this, SLOT(setCodeStyleSettings(CppTools::CppCodeStyleSettings))); + connect(m_preferences, SIGNAL(currentPreferencesChanged(TextEditor::ICodeStylePreferences*)), + this, SLOT(slotCurrentPreferencesChanged(TextEditor::ICodeStylePreferences*))); - setCppCodeStyleSettings(m_cppCodeStylePreferences->settings(), false); - slotCurrentPreferencesChanged(m_cppCodeStylePreferences->currentPreferences(), false); + setTabSettings(m_preferences->tabSettings()); + setCodeStyleSettings(m_preferences->codeStyleSettings(), false); + slotCurrentPreferencesChanged(m_preferences->currentPreferences(), false); updatePreview(); } @@ -324,7 +318,12 @@ CppCodeStyleSettings CppCodeStylePreferencesWidget::cppCodeStyleSettings() const return set; } -void CppCodeStylePreferencesWidget::setCppCodeStyleSettings(const CppCodeStyleSettings &s, bool preview) +void CppCodeStylePreferencesWidget::setTabSettings(const TextEditor::TabSettings &settings) +{ + m_ui->tabSettingsWidget->setTabSettings(settings); +} + +void CppCodeStylePreferencesWidget::setCodeStyleSettings(const CppCodeStyleSettings &s, bool preview) { const bool wasBlocked = m_blockUpdates; m_blockUpdates = true; @@ -349,9 +348,10 @@ void CppCodeStylePreferencesWidget::setCppCodeStyleSettings(const CppCodeStyleSe updatePreview(); } -void CppCodeStylePreferencesWidget::slotCurrentPreferencesChanged(TextEditor::IFallbackPreferences *preferences, bool preview) +void CppCodeStylePreferencesWidget::slotCurrentPreferencesChanged(TextEditor::ICodeStylePreferences *preferences, bool preview) { - const bool enable = !preferences->isReadOnly() && m_cppCodeStylePreferences->isFallbackEnabled(m_cppCodeStylePreferences->currentFallback()); + const bool enable = !preferences->isReadOnly() && !m_preferences->currentDelegate(); + m_ui->tabSettingsWidget->setEnabled(enable); m_ui->contentGroupBox->setEnabled(enable); m_ui->bracesGroupBox->setEnabled(enable); m_ui->switchGroupBox->setEnabled(enable); @@ -365,8 +365,7 @@ QString CppCodeStylePreferencesWidget::searchKeywords() const QString rc; QLatin1Char sep(' '); QTextStream(&rc) - << sep << m_ui->tabPreferencesWidget->searchKeywords() - << sep << m_ui->fallbackWidget->searchKeywords() + << sep << m_ui->tabSettingsWidget->searchKeywords() << sep << m_ui->indentBlockBraces->text() << sep << m_ui->indentBlockBody->text() << sep << m_ui->indentClassBraces->text() @@ -394,15 +393,29 @@ QString CppCodeStylePreferencesWidget::searchKeywords() const return rc; } -void CppCodeStylePreferencesWidget::slotCppCodeStyleSettingsChanged() +void CppCodeStylePreferencesWidget::slotCodeStyleSettingsChanged() { if (m_blockUpdates) return; - if (m_cppCodeStylePreferences) { - CppCodeStylePreferences *current = qobject_cast<CppCodeStylePreferences *>(m_cppCodeStylePreferences->currentPreferences()); + if (m_preferences) { + CppCodeStylePreferences *current = qobject_cast<CppCodeStylePreferences *>(m_preferences->currentPreferences()); if (current) - current->setSettings(cppCodeStyleSettings()); + current->setCodeStyleSettings(cppCodeStyleSettings()); + } + + updatePreview(); +} + +void CppCodeStylePreferencesWidget::slotTabSettingsChanged(const TextEditor::TabSettings &settings) +{ + if (m_blockUpdates) + return; + + if (m_preferences) { + CppCodeStylePreferences *current = qobject_cast<CppCodeStylePreferences *>(m_preferences->currentPreferences()); + if (current) + current->setTabSettings(settings); } updatePreview(); @@ -410,30 +423,24 @@ void CppCodeStylePreferencesWidget::slotCppCodeStyleSettingsChanged() void CppCodeStylePreferencesWidget::updatePreview() { + CppCodeStylePreferences *cppCodeStylePreferences = m_preferences + ? m_preferences + : CppToolsSettings::instance()->cppCodeStyle(); + const CppCodeStyleSettings ccss = cppCodeStylePreferences->currentCodeStyleSettings(); + const TextEditor::TabSettings ts = cppCodeStylePreferences->currentTabSettings(); + QtStyleCodeFormatter formatter(ts, ccss); foreach (TextEditor::SnippetEditorWidget *preview, m_previews) { - QTextDocument *doc = preview->document(); - - const TextEditor::TabSettings ts = m_tabPreferences - ? m_tabPreferences->currentSettings() - : CppToolsSettings::instance()->tabPreferences()->settings(); - CppCodeStylePreferences *cppCodeStylePreferences = m_cppCodeStylePreferences - ? m_cppCodeStylePreferences - : CppToolsSettings::instance()->cppCodeStylePreferences(); - const CppCodeStyleSettings ccss = cppCodeStylePreferences->currentSettings(); preview->setTabSettings(ts); - preview->setCodeStylePreferences(cppCodeStylePreferences); - QtStyleCodeFormatter formatter(ts, ccss); + preview->setCodeStyle(cppCodeStylePreferences); + + QTextDocument *doc = preview->document(); formatter.invalidateCache(doc); QTextBlock block = doc->firstBlock(); QTextCursor tc = preview->textCursor(); tc.beginEditBlock(); while (block.isValid()) { - int indent; - int padding; - formatter.indentFor(block, &indent, &padding); - ts.indentLine(block, indent + padding, padding); - formatter.updateLineStateChange(block); + preview->indenter()->indentBlock(doc, block, QChar::Null, ts); block = block.next(); } @@ -475,7 +482,7 @@ void CppCodeStylePreferencesWidget::setVisualizeWhitespace(bool on) CppCodeStyleSettingsPage::CppCodeStyleSettingsPage( QWidget *parent) : Core::IOptionsPage(parent), - m_pageTabPreferences(0) + m_pageCppCodeStylePreferences(0) { } @@ -510,33 +517,18 @@ QIcon CppCodeStyleSettingsPage::categoryIcon() const QWidget *CppCodeStyleSettingsPage::createPage(QWidget *parent) { - m_widget = new CppCodeStylePreferencesWidget(parent); - - TextEditor::TabPreferences *originalTabPreferences - = CppToolsSettings::instance()->tabPreferences(); - QList<TextEditor::IFallbackPreferences *> originalTabFallbacks = originalTabPreferences->fallbacks(); - m_pageTabPreferences = new TextEditor::TabPreferences(originalTabFallbacks, m_widget); - for (int i = 0; i < originalTabFallbacks.count(); i++) { - TextEditor::IFallbackPreferences *fallback = originalTabFallbacks.at(i); - m_pageTabPreferences->setFallbackEnabled(fallback, originalTabPreferences->isFallbackEnabled(fallback)); - } - m_pageTabPreferences->setSettings(originalTabPreferences->settings()); - m_pageTabPreferences->setCurrentFallback(originalTabPreferences->currentFallback()); - CppCodeStylePreferences *originalCodeStylePreferences - = CppToolsSettings::instance()->cppCodeStylePreferences(); - QList<TextEditor::IFallbackPreferences *> originalCodeStyleFallbacks = originalCodeStylePreferences->fallbacks(); - m_pageCppCodeStylePreferences = new CppCodeStylePreferences(originalCodeStyleFallbacks, m_widget); - for (int i = 0; i < originalCodeStyleFallbacks.count(); i++) { - TextEditor::IFallbackPreferences *fallback = originalCodeStyleFallbacks.at(i); - m_pageCppCodeStylePreferences->setFallbackEnabled(fallback, originalCodeStylePreferences->isFallbackEnabled(fallback)); - } - m_pageCppCodeStylePreferences->setSettings(originalCodeStylePreferences->settings()); - m_pageCppCodeStylePreferences->setCurrentFallback(originalCodeStylePreferences->currentFallback()); - m_widget->setPreferences(m_pageCppCodeStylePreferences, m_pageTabPreferences); + = CppToolsSettings::instance()->cppCodeStyle(); + m_pageCppCodeStylePreferences = new CppCodeStylePreferences(m_widget); + m_pageCppCodeStylePreferences->setDelegatingPool(originalCodeStylePreferences->delegatingPool()); + m_pageCppCodeStylePreferences->setCodeStyleSettings(originalCodeStylePreferences->codeStyleSettings()); + m_pageCppCodeStylePreferences->setCurrentDelegate(originalCodeStylePreferences->currentDelegate()); + // we set id so that it won't be possible to set delegate to the original prefs + m_pageCppCodeStylePreferences->setId(originalCodeStylePreferences->id()); + TextEditorSettings *settings = TextEditorSettings::instance(); + m_widget = new CodeStyleEditor(settings->codeStyleFactory(CppTools::Constants::CPP_SETTINGS_ID), + m_pageCppCodeStylePreferences, parent); - if (m_searchKeywords.isEmpty()) - m_searchKeywords = m_widget->searchKeywords(); return m_widget; } @@ -545,26 +537,19 @@ void CppCodeStyleSettingsPage::apply() if (m_widget) { QSettings *s = Core::ICore::instance()->settings(); - TextEditor::TabPreferences *originalTabPreferences = CppToolsSettings::instance()->tabPreferences(); - if (originalTabPreferences->settings() != m_pageTabPreferences->settings()) { - originalTabPreferences->setSettings(m_pageTabPreferences->settings()); - if (s) - originalTabPreferences->toSettings(CppTools::Constants::CPP_SETTINGS_ID, s); - } - if (originalTabPreferences->currentFallback() != m_pageTabPreferences->currentFallback()) { - originalTabPreferences->setCurrentFallback(m_pageTabPreferences->currentFallback()); + CppCodeStylePreferences *originalCppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStyle(); + if (originalCppCodeStylePreferences->codeStyleSettings() != m_pageCppCodeStylePreferences->codeStyleSettings()) { + originalCppCodeStylePreferences->setCodeStyleSettings(m_pageCppCodeStylePreferences->codeStyleSettings()); if (s) - originalTabPreferences->toSettings(CppTools::Constants::CPP_SETTINGS_ID, s); + originalCppCodeStylePreferences->toSettings(CppTools::Constants::CPP_SETTINGS_ID, s); } - - CppCodeStylePreferences *originalCppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStylePreferences(); - if (originalCppCodeStylePreferences->settings() != m_pageCppCodeStylePreferences->settings()) { - originalCppCodeStylePreferences->setSettings(m_pageCppCodeStylePreferences->settings()); + if (originalCppCodeStylePreferences->tabSettings() != m_pageCppCodeStylePreferences->tabSettings()) { + originalCppCodeStylePreferences->setTabSettings(m_pageCppCodeStylePreferences->tabSettings()); if (s) originalCppCodeStylePreferences->toSettings(CppTools::Constants::CPP_SETTINGS_ID, s); } - if (originalCppCodeStylePreferences->currentFallback() != m_pageCppCodeStylePreferences->currentFallback()) { - originalCppCodeStylePreferences->setCurrentFallback(m_pageCppCodeStylePreferences->currentFallback()); + if (originalCppCodeStylePreferences->currentDelegate() != m_pageCppCodeStylePreferences->currentDelegate()) { + originalCppCodeStylePreferences->setCurrentDelegate(m_pageCppCodeStylePreferences->currentDelegate()); if (s) originalCppCodeStylePreferences->toSettings(CppTools::Constants::CPP_SETTINGS_ID, s); } diff --git a/src/plugins/cpptools/cppcodestylesettingspage.h b/src/plugins/cpptools/cppcodestylesettingspage.h index dce545eede..48cb8402f2 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.h +++ b/src/plugins/cpptools/cppcodestylesettingspage.h @@ -48,9 +48,9 @@ namespace TextEditor { class FontSettings; class TabSettings; - class TabPreferences; - class IFallbackPreferences; + class ICodeStylePreferences; class SnippetEditorWidget; + class CodeStyleEditor; } namespace CppTools { @@ -70,24 +70,24 @@ public: explicit CppCodeStylePreferencesWidget(QWidget *parent = 0); virtual ~CppCodeStylePreferencesWidget(); - void setPreferences(CppTools::CppCodeStylePreferences *codeStylePreferences, - TextEditor::TabPreferences *tabPreferences); + void setCodeStyle(CppTools::CppCodeStylePreferences *codeStylePreferences); QString searchKeywords() const; private slots: void decorateEditors(const TextEditor::FontSettings &fontSettings); void setVisualizeWhitespace(bool on); - void slotCppCodeStyleSettingsChanged(); + void slotTabSettingsChanged(const TextEditor::TabSettings &settings); + void slotCodeStyleSettingsChanged(); void updatePreview(); - void setCppCodeStyleSettings(const CppTools::CppCodeStyleSettings &settings, bool preview = true); - void slotCurrentPreferencesChanged(TextEditor::IFallbackPreferences *, bool preview = true); + void setTabSettings(const TextEditor::TabSettings &settings); + void setCodeStyleSettings(const CppTools::CppCodeStyleSettings &settings, bool preview = true); + void slotCurrentPreferencesChanged(TextEditor::ICodeStylePreferences *, bool preview = true); private: CppCodeStyleSettings cppCodeStyleSettings() const; - TextEditor::TabPreferences *m_tabPreferences; - CppCodeStylePreferences *m_cppCodeStylePreferences; + CppCodeStylePreferences *m_preferences; Ui::CppCodeStyleSettingsPage *m_ui; QList<TextEditor::SnippetEditorWidget *> m_previews; bool m_blockUpdates; @@ -115,9 +115,8 @@ public: private: QString m_searchKeywords; - TextEditor::TabPreferences *m_pageTabPreferences; CppCodeStylePreferences *m_pageCppCodeStylePreferences; - QPointer<CppCodeStylePreferencesWidget> m_widget; + QPointer<TextEditor::CodeStyleEditor> m_widget; }; } // namespace Internal diff --git a/src/plugins/cpptools/cppcodestylesettingspage.ui b/src/plugins/cpptools/cppcodestylesettingspage.ui index aef035423e..0946e9ab7f 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.ui +++ b/src/plugins/cpptools/cppcodestylesettingspage.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>757</width> - <height>465</height> + <width>463</width> + <height>314</height> </rect> </property> <property name="windowTitle"> @@ -15,54 +15,48 @@ </property> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> - <widget class="QWidget" name="fallbackContainer" native="true"> - <layout class="QHBoxLayout" name="fallbackLayout"> - <property name="margin"> - <number>0</number> - </property> - <item> - <widget class="TextEditor::FallbackSelectorWidget" name="fallbackWidget" native="true"/> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - <item> <widget class="QTabWidget" name="categoryTab"> <property name="currentIndex"> - <number>4</number> + <number>0</number> </property> <widget class="QWidget" name="generalTab"> <attribute name="title"> <string>General</string> </attribute> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="TextEditor::TabPreferencesWidget" name="tabPreferencesWidget" native="true"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="TextEditor::TabSettingsWidget" name="tabSettingsWidget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="focusPolicy"> <enum>Qt::TabFocus</enum> </property> </widget> </item> - <item> + <item row="0" column="1" rowspan="2"> <widget class="TextEditor::SnippetEditorWidget" name="previewTextEditGeneral"> <property name="plainText"> <string/> </property> </widget> </item> + <item row="1" column="0"> + <spacer name="verticalSpacer_5"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>347</height> + </size> + </property> + </spacer> + </item> </layout> </widget> <widget class="QWidget" name="contentTab"> @@ -414,21 +408,15 @@ if they would align to the next line</string> </widget> <customwidgets> <customwidget> - <class>TextEditor::SnippetEditorWidget</class> - <extends>QPlainTextEdit</extends> - <header location="global">texteditor/snippets/snippeteditor.h</header> - </customwidget> - <customwidget> - <class>TextEditor::TabPreferencesWidget</class> + <class>TextEditor::TabSettingsWidget</class> <extends>QWidget</extends> - <header location="global">texteditor/tabpreferenceswidget.h</header> + <header location="global">texteditor/tabsettingswidget.h</header> <container>1</container> </customwidget> <customwidget> - <class>TextEditor::FallbackSelectorWidget</class> - <extends>QWidget</extends> - <header location="global">texteditor/fallbackselectorwidget.h</header> - <container>1</container> + <class>TextEditor::SnippetEditorWidget</class> + <extends>QPlainTextEdit</extends> + <header location="global">texteditor/snippets/snippeteditor.h</header> </customwidget> </customwidgets> <resources/> diff --git a/src/plugins/cpptools/cppqtstyleindenter.cpp b/src/plugins/cpptools/cppqtstyleindenter.cpp index 64ac333e96..654b3ebe9e 100644 --- a/src/plugins/cpptools/cppqtstyleindenter.cpp +++ b/src/plugins/cpptools/cppqtstyleindenter.cpp @@ -51,7 +51,7 @@ CppQtStyleIndenter::CppQtStyleIndenter() { // Just for safety. setCodeStylePreferences should be called when the editor the // indenter belongs to gets initialized. - m_cppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStylePreferences(); + m_cppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStyle(); } CppQtStyleIndenter::~CppQtStyleIndenter() @@ -148,7 +148,7 @@ void CppQtStyleIndenter::indent(QTextDocument *doc, } } -void CppQtStyleIndenter::setCodeStylePreferences(TextEditor::IFallbackPreferences *preferences) +void CppQtStyleIndenter::setCodeStylePreferences(TextEditor::ICodeStylePreferences *preferences) { CppTools::CppCodeStylePreferences *cppCodeStylePreferences = qobject_cast<CppTools::CppCodeStylePreferences *>(preferences); @@ -156,9 +156,15 @@ void CppQtStyleIndenter::setCodeStylePreferences(TextEditor::IFallbackPreference m_cppCodeStylePreferences = cppCodeStylePreferences; } +void CppQtStyleIndenter::invalidateCache(QTextDocument *doc) +{ + CppTools::QtStyleCodeFormatter formatter; + formatter.invalidateCache(doc); +} + CppCodeStyleSettings CppQtStyleIndenter::codeStyleSettings() const { if (m_cppCodeStylePreferences) - return m_cppCodeStylePreferences->currentSettings(); + return m_cppCodeStylePreferences->currentCodeStyleSettings(); return CppCodeStyleSettings(); } diff --git a/src/plugins/cpptools/cppqtstyleindenter.h b/src/plugins/cpptools/cppqtstyleindenter.h index b4fb2ee657..ee5f6027b3 100644 --- a/src/plugins/cpptools/cppqtstyleindenter.h +++ b/src/plugins/cpptools/cppqtstyleindenter.h @@ -39,7 +39,7 @@ namespace TextEditor { -class IFallbackPreferences; +class ICodeStylePreferences; } namespace CppTools { @@ -63,7 +63,8 @@ public: const QChar &typedChar, const TextEditor::TabSettings &tabSettings); - virtual void setCodeStylePreferences(TextEditor::IFallbackPreferences *preferences); + virtual void setCodeStylePreferences(TextEditor::ICodeStylePreferences *preferences); + virtual void invalidateCache(QTextDocument *doc); private: CppCodeStyleSettings codeStyleSettings() const; CppCodeStylePreferences *m_cppCodeStylePreferences; diff --git a/src/plugins/cpptools/cpprefactoringchanges.cpp b/src/plugins/cpptools/cpprefactoringchanges.cpp index af73d52d69..f84bf10abd 100644 --- a/src/plugins/cpptools/cpprefactoringchanges.cpp +++ b/src/plugins/cpptools/cpprefactoringchanges.cpp @@ -72,7 +72,7 @@ public: ProjectExplorer::actualTabSettings(fileName, textEditor); // TODO: add similar method like above one CppTools::QtStyleCodeFormatter codeFormatter(tabSettings, - CppToolsSettings::instance()->cppCodeStylePreferences()->settings()); + CppToolsSettings::instance()->cppCodeStyle()->codeStyleSettings()); codeFormatter.updateStateUntil(block); do { diff --git a/src/plugins/cpptools/cpptools.pro b/src/plugins/cpptools/cpptools.pro index 2821429df6..f03dac7d32 100644 --- a/src/plugins/cpptools/cpptools.pro +++ b/src/plugins/cpptools/cpptools.pro @@ -33,7 +33,7 @@ HEADERS += completionsettingspage.h \ cppcodestylesettingspage.h \ cpptoolssettings.h \ cppcodestylesettings.h \ - cppcodestylesettingsfactory.h \ + cppcodestylepreferencesfactory.h \ cppcodestylepreferences.h \ cpptoolsreuse.h @@ -60,7 +60,7 @@ SOURCES += completionsettingspage.cpp \ cppcodestylesettingspage.cpp \ cpptoolssettings.cpp \ cppcodestylesettings.cpp \ - cppcodestylesettingsfactory.cpp \ + cppcodestylepreferencesfactory.cpp \ cppcodestylepreferences.cpp \ cpptoolsreuse.cpp diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index 86484822ef..51a72835b1 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -43,8 +43,6 @@ #include "symbolsfindfilter.h" #include "cppcompletionassist.h" #include "cpptoolssettings.h" -#include "cppcodestylesettingsfactory.h" -#include "cppcodestylesettings.h" #include <extensionsystem/pluginmanager.h> @@ -59,9 +57,6 @@ #include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/vcsmanager.h> #include <coreplugin/filemanager.h> -#include <texteditor/texteditorsettings.h> -#include <texteditor/tabsettings.h> -#include <texteditor/codestylepreferencesmanager.h> #include <cppeditor/cppeditorconstants.h> #include <QtCore/QtConcurrentRun> @@ -107,8 +102,6 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) Q_UNUSED(arguments) Q_UNUSED(error) - qRegisterMetaType<CppTools::CppCodeStyleSettings>("CppTools::CppCodeStyleSettings"); - Core::ICore *core = Core::ICore::instance(); Core::ActionManager *am = core->actionManager(); @@ -134,9 +127,6 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) addAutoReleasedObject(new SymbolsFindFilter(m_modelManager)); addAutoReleasedObject(new CppCodeStyleSettingsPage); - TextEditor::CodeStylePreferencesManager::instance()->registerFactory( - new CppTools::CppCodeStylePreferencesFactory()); - // Menus Core::ActionContainer *mtools = am->actionContainer(Core::Constants::M_TOOLS); Core::ActionContainer *mcpptools = am->createMenu(CppTools::Constants::M_TOOLS_CPP); @@ -154,12 +144,6 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) mcpptools->addAction(command); connect(switchAction, SIGNAL(triggered()), this, SLOT(switchHeaderSource())); - TextEditor::TextEditorSettings *ts = TextEditor::TextEditorSettings::instance(); - ts->registerMimeTypeForLanguageId(QLatin1String(Constants::C_SOURCE_MIMETYPE), Constants::CPP_SETTINGS_ID); - ts->registerMimeTypeForLanguageId(QLatin1String(Constants::C_HEADER_MIMETYPE), Constants::CPP_SETTINGS_ID); - ts->registerMimeTypeForLanguageId(QLatin1String(Constants::CPP_SOURCE_MIMETYPE), Constants::CPP_SETTINGS_ID); - ts->registerMimeTypeForLanguageId(QLatin1String(Constants::CPP_HEADER_MIMETYPE), Constants::CPP_SETTINGS_ID); - return true; } diff --git a/src/plugins/cpptools/cpptoolssettings.cpp b/src/plugins/cpptools/cpptoolssettings.cpp index 957a2d9c18..6000d25838 100644 --- a/src/plugins/cpptools/cpptoolssettings.cpp +++ b/src/plugins/cpptools/cpptoolssettings.cpp @@ -33,10 +33,14 @@ #include "cpptoolssettings.h" #include "cpptoolsconstants.h" #include "cppcodestylepreferences.h" +#include "cppcodestylepreferencesfactory.h" #include <texteditor/texteditorsettings.h> -#include <texteditor/tabpreferences.h> +#include <texteditor/texteditorsettings.h> +#include <texteditor/tabsettings.h> +#include <texteditor/codestylepool.h> +#include <utils/settingsutils.h> #include <utils/qtcassert.h> #include <coreplugin/icore.h> #include <QtCore/QSettings> @@ -44,15 +48,34 @@ static const char *idKey = "CppGlobal"; using namespace CppTools; +using TextEditor::TabSettings; namespace CppTools { namespace Internal { +class LegacySettings +{ +public: + LegacySettings() + : m_legacyTransformed(false) + { } + void fromMap(const QString &prefix, const QVariantMap &map) + { + m_fallbackId = map.value(prefix + QLatin1String("CurrentFallback")).toString(); + m_legacyTransformed = map.value(prefix + QLatin1String("LegacyTransformed"), false).toBool(); + } + void toMap(const QString &prefix, QVariantMap *map) const + { + map->insert(prefix + QLatin1String("LegacyTransformed"), true); + } + QString m_fallbackId; + bool m_legacyTransformed; +}; + class CppToolsSettingsPrivate { public: - CppCodeStylePreferences *m_cppCodeStylePreferences; - TextEditor::TabPreferences *m_tabPreferences; + CppCodeStylePreferences *m_globalCodeStyle; }; } // namespace Internal @@ -66,27 +89,145 @@ CppToolsSettings::CppToolsSettings(QObject *parent) { QTC_ASSERT(!m_instance, return); m_instance = this; - - if (const QSettings *s = Core::ICore::instance()->settings()) { - TextEditor::TextEditorSettings *textEditorSettings = TextEditor::TextEditorSettings::instance(); - TextEditor::TabPreferences *tabPrefs = textEditorSettings->tabPreferences(); - d->m_tabPreferences - = new TextEditor::TabPreferences(QList<TextEditor::IFallbackPreferences *>() - << tabPrefs, this); - d->m_tabPreferences->setCurrentFallback(tabPrefs); - d->m_tabPreferences->setFallbackEnabled(tabPrefs, false); - d->m_tabPreferences->fromSettings(CppTools::Constants::CPP_SETTINGS_ID, s); - d->m_tabPreferences->setDisplayName(tr("Global C++", "Settings")); - d->m_tabPreferences->setId(idKey); - textEditorSettings->registerLanguageTabPreferences(CppTools::Constants::CPP_SETTINGS_ID, d->m_tabPreferences); - - d->m_cppCodeStylePreferences - = new CppCodeStylePreferences(QList<TextEditor::IFallbackPreferences *>(), this); - d->m_cppCodeStylePreferences->fromSettings(CppTools::Constants::CPP_SETTINGS_ID, s); - d->m_cppCodeStylePreferences->setDisplayName(tr("Global C++", "Settings")); - d->m_cppCodeStylePreferences->setId(idKey); - textEditorSettings->registerLanguageCodeStylePreferences(CppTools::Constants::CPP_SETTINGS_ID, d->m_cppCodeStylePreferences); + qRegisterMetaType<CppTools::CppCodeStyleSettings>("CppTools::CppCodeStyleSettings"); + + TextEditor::TextEditorSettings *textEditorSettings = TextEditor::TextEditorSettings::instance(); + + // code style factory + TextEditor::ICodeStylePreferencesFactory *factory = new CppTools::CppCodeStylePreferencesFactory(); + textEditorSettings->registerCodeStyleFactory(factory); + + // code style pool + TextEditor::CodeStylePool *pool = new TextEditor::CodeStylePool(factory, this); + textEditorSettings->registerCodeStylePool(Constants::CPP_SETTINGS_ID, pool); + + // global code style settings + d->m_globalCodeStyle = new CppCodeStylePreferences(this); + d->m_globalCodeStyle->setDelegatingPool(pool); + d->m_globalCodeStyle->setDisplayName(tr("Global", "Settings")); + d->m_globalCodeStyle->setId(idKey); + pool->addCodeStyle(d->m_globalCodeStyle); + textEditorSettings->registerCodeStyle(CppTools::Constants::CPP_SETTINGS_ID, d->m_globalCodeStyle); + + /* + For every language we have exactly 1 pool. The pool contains: + 1) All built-in code styles (Qt/GNU) + 2) All custom code styles (which will be added dynamically) + 3) A global code style + + If the code style gets a pool (setCodeStylePool()) it means it can behave + like a proxy to one of the code styles from that pool + (ICodeStylePreferences::setCurrentDelegate()). + That's why the global code style gets a pool (it can point to any code style + from the pool), while built-in and custom code styles don't get a pool + (they can't point to any other code style). + + The instance of the language pool is shared. The same instance of the pool + is used for all project code style settings and for global one. + Project code style can point to one of built-in or custom code styles + or to the global one as well. That's why the global code style is added + to the pool. The proxy chain can look like: + ProjectCodeStyle -> GlobalCodeStyle -> BuildInCodeStyle (e.g. Qt). + + With the global pool there is an exception - it gets a pool + in which it exists itself. The case in which a code style point to itself + is disallowed and is handled in ICodeStylePreferences::setCurrentDelegate(). + */ + + // built-in settings + // Qt style + CppCodeStylePreferences *qtCodeStyle = new CppCodeStylePreferences(); + qtCodeStyle->setId(QLatin1String("qt")); + qtCodeStyle->setDisplayName(tr("Qt")); + qtCodeStyle->setReadOnly(true); + TabSettings qtTabSettings; + qtTabSettings.m_tabPolicy = TabSettings::SpacesOnlyTabPolicy; + qtTabSettings.m_tabSize = 4; + qtTabSettings.m_indentSize = 4; + qtTabSettings.m_continuationAlignBehavior = TabSettings::ContinuationAlignWithIndent; + qtCodeStyle->setTabSettings(qtTabSettings); + pool->addCodeStyle(qtCodeStyle); + + // GNU style + CppCodeStylePreferences *gnuCodeStyle = new CppCodeStylePreferences(); + gnuCodeStyle->setId(QLatin1String("gnu")); + gnuCodeStyle->setDisplayName(tr("GNU")); + gnuCodeStyle->setReadOnly(true); + TabSettings gnuTabSettings; + gnuTabSettings.m_tabPolicy = TabSettings::MixedTabPolicy; + gnuTabSettings.m_tabSize = 8; + gnuTabSettings.m_indentSize = 2; + gnuTabSettings.m_continuationAlignBehavior = TabSettings::ContinuationAlignWithIndent; + gnuCodeStyle->setTabSettings(gnuTabSettings); + CppCodeStyleSettings gnuCodeStyleSettings; + gnuCodeStyleSettings.indentNamespaceBody = true; + gnuCodeStyleSettings.indentBlockBraces = true; + gnuCodeStyleSettings.indentSwitchLabels = true; + gnuCodeStyleSettings.indentBlocksRelativeToSwitchLabels = true; + gnuCodeStyle->setCodeStyleSettings(gnuCodeStyleSettings); + pool->addCodeStyle(gnuCodeStyle); + + // default delegate for global preferences + d->m_globalCodeStyle->setCurrentDelegate(qtCodeStyle); + + pool->loadCustomCodeStyles(); + + // load global settings (after built-in settings are added to the pool) + if (QSettings *s = Core::ICore::instance()->settings()) { + d->m_globalCodeStyle->fromSettings(CppTools::Constants::CPP_SETTINGS_ID, s); + + // legacy handling start (Qt Creator <= 2.3) + Internal::LegacySettings legacySettings; + + TabSettings legacyTabSettings; + Utils::fromSettings(QLatin1String("TabPreferences"), + QLatin1String("Cpp"), s, &legacySettings); + if (legacySettings.m_fallbackId == QLatin1String("CppGlobal")) { + Utils::fromSettings(QLatin1String("TabPreferences"), + QLatin1String("Cpp"), s, &legacyTabSettings); + } else { + legacyTabSettings = textEditorSettings->codeStyle()->currentTabSettings(); + } + + CppCodeStyleSettings legacyCodeStyleSettings; + Utils::fromSettings(QLatin1String("CodeStyleSettings"), + QLatin1String("Cpp"), s, &legacySettings); + if (!legacySettings.m_legacyTransformed + && legacySettings.m_fallbackId == QLatin1String("CppGlobal")) { + Utils::fromSettings(QLatin1String("CodeStyleSettings"), + QLatin1String("Cpp"), s, &legacyCodeStyleSettings); + // create custom code style out of old settings + QVariant v; + v.setValue(legacyCodeStyleSettings); + TextEditor::ICodeStylePreferences *oldCreator = pool->createCodeStyle( + QLatin1String("legacy"), legacyTabSettings, + v, tr("Old Creator")); + // change the current delegate and save + d->m_globalCodeStyle->setCurrentDelegate(oldCreator); + d->m_globalCodeStyle->toSettings(CppTools::Constants::CPP_SETTINGS_ID, s); + + // mark old settings as transformed, + // we create only once "Old Creator" custom settings + Utils::toSettings(QLatin1String("CodeStyleSettings"), + QLatin1String("Cpp"), s, &legacySettings); + } + // legacy handling stop } + + + // mimetypes to be handled + textEditorSettings->registerMimeTypeForLanguageId( + QLatin1String(Constants::C_SOURCE_MIMETYPE), + Constants::CPP_SETTINGS_ID); + textEditorSettings->registerMimeTypeForLanguageId( + QLatin1String(Constants::C_HEADER_MIMETYPE), + Constants::CPP_SETTINGS_ID); + textEditorSettings->registerMimeTypeForLanguageId( + QLatin1String(Constants::CPP_SOURCE_MIMETYPE), + Constants::CPP_SETTINGS_ID); + textEditorSettings->registerMimeTypeForLanguageId( + QLatin1String(Constants::CPP_HEADER_MIMETYPE), + Constants::CPP_SETTINGS_ID); } CppToolsSettings::~CppToolsSettings() @@ -101,14 +242,8 @@ CppToolsSettings *CppToolsSettings::instance() return m_instance; } -CppCodeStylePreferences *CppToolsSettings::cppCodeStylePreferences() const +CppCodeStylePreferences *CppToolsSettings::cppCodeStyle() const { - return d->m_cppCodeStylePreferences; + return d->m_globalCodeStyle; } -TextEditor::TabPreferences *CppToolsSettings::tabPreferences() const -{ - return d->m_tabPreferences; -} - - diff --git a/src/plugins/cpptools/cpptoolssettings.h b/src/plugins/cpptools/cpptoolssettings.h index 8b9cbb5cba..3bc310076d 100644 --- a/src/plugins/cpptools/cpptoolssettings.h +++ b/src/plugins/cpptools/cpptoolssettings.h @@ -37,11 +37,6 @@ #include <QtCore/QObject> -namespace TextEditor -{ -class TabPreferences; -} - namespace CppTools { class CppCodeStylePreferences; @@ -65,8 +60,7 @@ public: static CppToolsSettings *instance(); - CppCodeStylePreferences *cppCodeStylePreferences() const; - TextEditor::TabPreferences *tabPreferences() const; + CppCodeStylePreferences *cppCodeStyle() const; private: Internal::CppToolsSettingsPrivate *d; |