From 61325aae0da74e59f50c515ea33de4ce2bcc30ed Mon Sep 17 00:00:00 2001
From: Leandro Melo <leandro.melo@nokia.com>
Date: Tue, 31 May 2011 16:36:58 +0200
Subject: [PATCH] Editors: Make snippets and code style honor font settings
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Task-number: QTCREATORBUG-5007

Change-Id: Ied78ef17ea7a25d22c37d36fd4eb7257c6c9f4c0
Reviewed-on: http://codereview.qt.nokia.com/293
Reviewed-by: Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>
---
 .../cpptools/cppcodestylesettingspage.cpp     | 32 +++++++++++--------
 .../cpptools/cppcodestylesettingspage.h       |  2 +-
 .../snippets/snippetssettingspage.cpp         | 23 +++++++++++++
 3 files changed, 42 insertions(+), 15 deletions(-)

diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp
index 68787669400..09e365251e3 100644
--- a/src/plugins/cpptools/cppcodestylesettingspage.cpp
+++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp
@@ -191,19 +191,10 @@ CppCodeStylePreferencesWidget::CppCodeStylePreferencesWidget(QWidget *parent)
         m_previews[i]->setPlainText(defaultCodeStyleSnippets[i]);
     }
 
-    const QList<ISnippetProvider *> &providers =
-        ExtensionSystem::PluginManager::instance()->getObjects<ISnippetProvider>();
-    foreach (ISnippetProvider *provider, providers) {
-        if (provider->groupId() == QLatin1String(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID)) {
-            foreach (TextEditor::SnippetEditorWidget *preview, m_previews)
-                provider->decorateEditor(preview);
-            break;
-        }
-    }
     TextEditor::TextEditorSettings *settings = TextEditorSettings::instance();
-    setFontSettings(settings->fontSettings());
+    decorateEditors(settings->fontSettings());
     connect(settings, SIGNAL(fontSettingsChanged(TextEditor::FontSettings)),
-       this, SLOT(setFontSettings(TextEditor::FontSettings)));
+       this, SLOT(decorateEditors(TextEditor::FontSettings)));
 
     setVisualizeWhitespace(true);
 
@@ -420,10 +411,23 @@ void CppCodeStylePreferencesWidget::updatePreview()
     }
 }
 
-void CppCodeStylePreferencesWidget::setFontSettings(const TextEditor::FontSettings &fontSettings)
+void CppCodeStylePreferencesWidget::decorateEditors(const TextEditor::FontSettings &fontSettings)
 {
-    foreach (TextEditor::SnippetEditorWidget *editor, m_previews)
-        editor->setFont(fontSettings.font());
+    const ISnippetProvider *provider = 0;
+    const QList<ISnippetProvider *> &providers =
+        ExtensionSystem::PluginManager::instance()->getObjects<ISnippetProvider>();
+    foreach (const ISnippetProvider *current, providers) {
+        if (current->groupId() == QLatin1String(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID)) {
+            provider = current;
+            break;
+        }
+    }
+
+    foreach (TextEditor::SnippetEditorWidget *editor, m_previews) {
+        editor->setFontSettings(fontSettings);
+        if (provider)
+            provider->decorateEditor(editor);
+    }
 }
 
 void CppCodeStylePreferencesWidget::setVisualizeWhitespace(bool on)
diff --git a/src/plugins/cpptools/cppcodestylesettingspage.h b/src/plugins/cpptools/cppcodestylesettingspage.h
index f599f8bcdd5..b332810946f 100644
--- a/src/plugins/cpptools/cppcodestylesettingspage.h
+++ b/src/plugins/cpptools/cppcodestylesettingspage.h
@@ -44,7 +44,7 @@ public:
     QString searchKeywords() const;
 
 private slots:
-    void setFontSettings(const TextEditor::FontSettings &fontSettings);
+    void decorateEditors(const TextEditor::FontSettings &fontSettings);
     void setVisualizeWhitespace(bool on);
     void slotCppCodeStyleSettingsChanged();
     void slotSettingsChanged();
diff --git a/src/plugins/texteditor/snippets/snippetssettingspage.cpp b/src/plugins/texteditor/snippets/snippetssettingspage.cpp
index 83ffeeff266..14edf58753a 100644
--- a/src/plugins/texteditor/snippets/snippetssettingspage.cpp
+++ b/src/plugins/texteditor/snippets/snippetssettingspage.cpp
@@ -40,6 +40,8 @@
 #include "ui_snippetssettingspage.h"
 
 #include <coreplugin/icore.h>
+#include <texteditor/texteditorsettings.h>
+#include <texteditor/fontsettings.h>
 #include <extensionsystem/pluginmanager.h>
 
 #include <QtCore/QModelIndex>
@@ -290,6 +292,7 @@ private slots:
     void selectMovedSnippet(const QModelIndex &, int, int, const QModelIndex &, int row);
     void setSnippetContent();
     void updateCurrentSnippetDependent(const QModelIndex &modelIndex = QModelIndex());
+    void decorateEditors(const TextEditor::FontSettings &fontSettings);
 
 private:
     SnippetEditorWidget *currentEditor() const;
@@ -336,6 +339,7 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w)
     foreach (ISnippetProvider *provider, providers) {
         m_ui.groupCombo->addItem(provider->displayName(), provider->groupId());
         SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w);
+        snippetEditor->setFontSettings(TextEditorSettings::instance()->fontSettings());
         provider->decorateEditor(snippetEditor);
         m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor);
         connect(snippetEditor, SIGNAL(snippetContentChanged()), this, SLOT(setSnippetContent()));
@@ -380,6 +384,9 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w)
     connect(m_ui.revertButton, SIGNAL(clicked()), this, SLOT(revertBuiltInSnippet()));
     connect(m_ui.snippetsTable->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
             this, SLOT(updateCurrentSnippetDependent(QModelIndex)));
+
+    connect(TextEditorSettings::instance(), SIGNAL(fontSettingsChanged(TextEditor::FontSettings)),
+            this, SLOT(decorateEditors(TextEditor::FontSettings)));
 }
 
 void SnippetsSettingsPagePrivate::apply()
@@ -536,6 +543,22 @@ void SnippetsSettingsPagePrivate::setSnippetContent()
     }
 }
 
+void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings)
+{
+    const QList<ISnippetProvider *> &providers =
+        ExtensionSystem::PluginManager::instance()->getObjects<ISnippetProvider>();
+    for (int i = 0; i < m_ui.groupCombo->count(); ++i) {
+        SnippetEditorWidget *snippetEditor = editorAt(i);
+        snippetEditor->setFontSettings(fontSettings);
+        const QString &id = m_ui.groupCombo->itemData(i).toString();
+        // This list should be quite short... Re-iterating over it is ok.
+        foreach (const ISnippetProvider *provider, providers) {
+            if (provider->groupId() == id)
+                provider->decorateEditor(snippetEditor);
+        }
+    }
+}
+
 // SnippetsSettingsPage
 SnippetsSettingsPage::SnippetsSettingsPage(const QString &id, QObject *parent) :
     TextEditorOptionsPage(parent),
-- 
GitLab