summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r--src/plugins/cpptools/cppcodestylepreferences.cpp32
-rw-r--r--src/plugins/cpptools/cppcodestylepreferences.h15
-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.cpp199
-rw-r--r--src/plugins/cpptools/cppcodestylesettingspage.h21
-rw-r--r--src/plugins/cpptools/cppcodestylesettingspage.ui74
-rw-r--r--src/plugins/cpptools/cppqtstyleindenter.cpp12
-rw-r--r--src/plugins/cpptools/cppqtstyleindenter.h5
-rw-r--r--src/plugins/cpptools/cpprefactoringchanges.cpp2
-rw-r--r--src/plugins/cpptools/cpptools.pro4
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.cpp16
-rw-r--r--src/plugins/cpptools/cpptoolssettings.cpp197
-rw-r--r--src/plugins/cpptools/cpptoolssettings.h8
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;