From aa630932b165922a4c0637b1215e23eb22aecadc Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Wed, 17 Jun 2009 19:12:19 +0200
Subject: [PATCH] make zoom-in/-out apply to all editors

---
 src/plugins/texteditor/basetexteditor.cpp     | 25 ++++++++++++++++---
 src/plugins/texteditor/basetexteditor.h       |  5 ++++
 src/plugins/texteditor/basetexteditor_p.h     |  2 ++
 src/plugins/texteditor/fontsettings.cpp       |  6 ++---
 src/plugins/texteditor/fontsettings.h         |  3 ++-
 src/plugins/texteditor/fontsettingspage.cpp   |  2 --
 src/plugins/texteditor/texteditorsettings.cpp | 13 +++++++++-
 src/plugins/texteditor/texteditorsettings.h   |  3 +++
 8 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 61cbbe76640..a86c65dd8da 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -45,7 +45,7 @@
 #include <coreplugin/stylehelper.h>
 #include <extensionsystem/pluginmanager.h>
 #include <find/basetextfind.h>
-#include <texteditor/fontsettings.h>
+
 #include <utils/reloadpromptutils.h>
 #include <aggregation/aggregate.h>
 #endif
@@ -3114,8 +3114,9 @@ void BaseTextEditor::zoomIn(int range)
     const int newSize = f.pointSize() + range;
     if (newSize <= 0)
         return;
-    f.setPointSize(newSize);
-    setFont(f);
+    emit requestFontSize(newSize);
+//    f.setPointSize(newSize);
+//    setFont(f);
 }
 
 void BaseTextEditor::zoomOut(int range)
@@ -3837,6 +3838,24 @@ void BaseTextEditor::unCommentSelection()
 {
 }
 
+void BaseTextEditor::showEvent(QShowEvent* e)
+{
+    if (!d->m_fontSettings.isEmpty()) {
+	setFontSettings(d->m_fontSettings);
+	d->m_fontSettings.clear();
+    }
+    QPlainTextEdit::showEvent(e);
+}
+
+
+void BaseTextEditor::setFontSettingsIfVisible(const TextEditor::FontSettings &fs)
+{
+    if (!isVisible()) {
+	d->m_fontSettings = fs;
+	return;
+    }
+    setFontSettings(fs);
+}
 void BaseTextEditor::setFontSettings(const TextEditor::FontSettings &fs)
 {
     const QTextCharFormat textFormat = fs.toTextCharFormat(QLatin1String(Constants::C_TEXT));
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index fe307b82b1c..9dd92405791 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -408,6 +408,8 @@ protected:
     void wheelEvent(QWheelEvent *e);
     void changeEvent(QEvent *e);
 
+    void showEvent(QShowEvent *);
+
     // reimplemented to support block selection
     QMimeData *createMimeDataFromSelection() const;
     bool canInsertFromMimeData(const QMimeData *source) const;
@@ -483,6 +485,7 @@ public slots:
     virtual void format();
     virtual void unCommentSelection();
     virtual void setFontSettings(const TextEditor::FontSettings &);
+    void setFontSettingsIfVisible(const TextEditor::FontSettings &);
     virtual void setTabSettings(const TextEditor::TabSettings &);
     virtual void setDisplaySettings(const TextEditor::DisplaySettings &);
     virtual void setStorageSettings(const TextEditor::StorageSettings &);
@@ -511,6 +514,7 @@ protected slots:
     virtual void slotUpdateBlockNotify(const QTextBlock &);
 
 signals:
+    void requestFontSize(int pointSize);
     void requestBlockUpdate(const QTextBlock &);
     void requestAutoCompletion(ITextEditable *editor, bool forced);
     void requestQuickFix(ITextEditable *editor);
@@ -534,6 +538,7 @@ private:
 
     QTextBlock collapsedBlockAt(const QPoint &pos, QRect *box = 0) const;
 
+
     // parentheses matcher
 private slots:
     void _q_matchParentheses();
diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h
index 2eef2d8b0a3..16322fde05a 100644
--- a/src/plugins/texteditor/basetexteditor_p.h
+++ b/src/plugins/texteditor/basetexteditor_p.h
@@ -31,6 +31,7 @@
 #define BASETEXTEDITOR_P_H
 
 #include "basetexteditor.h"
+#include <texteditor/fontsettings.h>
 
 #include <QtCore/QBasicTimer>
 #include <QtCore/QSharedData>
@@ -174,6 +175,7 @@ public:
 
     QWidget *m_extraArea;
     DisplaySettings m_displaySettings;
+    TextEditor::FontSettings m_fontSettings;
 
     int extraAreaSelectionAnchorBlockNumber;
     int extraAreaToggleMarkBlockNumber;
diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp
index 8386c885447..e8c2bcd1047 100644
--- a/src/plugins/texteditor/fontsettings.cpp
+++ b/src/plugins/texteditor/fontsettings.cpp
@@ -136,12 +136,11 @@ bool Format::equals(const Format &f) const
 }
 
 // -- FontSettings
-FontSettings::FontSettings(const FormatDescriptions &fd) :
+FontSettings::FontSettings() :
     m_family(defaultFixedFontFamily()),
     m_fontSize(DEFAULT_FONT_SIZE),
     m_antialias(DEFAULT_ANTIALIAS)
 {
-    Q_UNUSED(fd);
 }
 
 void FontSettings::clear()
@@ -149,7 +148,8 @@ void FontSettings::clear()
     m_family = defaultFixedFontFamily();
     m_fontSize = DEFAULT_FONT_SIZE;
     m_antialias = DEFAULT_ANTIALIAS;
-    qFill(m_formats.begin(), m_formats.end(), Format());
+    m_formats.clear();
+    //qFill(m_formats.begin(), m_formats.end(), Format());
 }
 
 void FontSettings::toSettings(const QString &category,
diff --git a/src/plugins/texteditor/fontsettings.h b/src/plugins/texteditor/fontsettings.h
index 0011a374337..fb4d4c01038 100644
--- a/src/plugins/texteditor/fontsettings.h
+++ b/src/plugins/texteditor/fontsettings.h
@@ -88,8 +88,9 @@ class TEXTEDITOR_EXPORT FontSettings
 public:
     typedef QList<FormatDescription> FormatDescriptions;
 
-    FontSettings(const FormatDescriptions &fd);
+    FontSettings();
     void clear();
+    inline bool isEmpty() const { return m_formats.isEmpty(); }
 
     void toSettings(const QString &category,
                     const FormatDescriptions &descriptions,
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp
index 5ac0663b4cb..93cd8525bb1 100644
--- a/src/plugins/texteditor/fontsettingspage.cpp
+++ b/src/plugins/texteditor/fontsettingspage.cpp
@@ -91,8 +91,6 @@ FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescrip
     m_category(category),
     m_trCategory(trCategory),
     m_descriptions(fd),
-    m_value(fd),
-    m_lastValue(fd),
     m_curItem(-1)
 {
     bool settingsFound = false;
diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp
index 5b08017a222..d843128a1d6 100644
--- a/src/plugins/texteditor/texteditorsettings.cpp
+++ b/src/plugins/texteditor/texteditorsettings.cpp
@@ -152,7 +152,7 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor)
 {
     // Connect to settings change signals
     connect(this, SIGNAL(fontSettingsChanged(TextEditor::FontSettings)),
-            editor, SLOT(setFontSettings(TextEditor::FontSettings)));
+	    editor, SLOT(setFontSettingsIfVisible(TextEditor::FontSettings)));
     connect(this, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)),
             editor, SLOT(setTabSettings(TextEditor::TabSettings)));
     connect(this, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)),
@@ -160,6 +160,9 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor)
     connect(this, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)),
             editor, SLOT(setDisplaySettings(TextEditor::DisplaySettings)));
 
+    connect(editor, SIGNAL(requestFontSize(int)),
+	    this, SLOT(fontSizeRequested(int)));
+
     // Apply current settings (tab settings depend on font settings)
     editor->setFontSettings(fontSettings());
     editor->setTabSettings(tabSettings());
@@ -167,6 +170,14 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor)
     editor->setDisplaySettings(displaySettings());
 }
 
+
+void TextEditorSettings::fontSizeRequested(int pointSize)
+{
+    FontSettings &fs = const_cast<FontSettings&>(m_fontSettingsPage->fontSettings());
+    fs.setFontSize(pointSize);
+    emit fontSettingsChanged(m_fontSettingsPage->fontSettings());
+}
+
 FontSettings TextEditorSettings::fontSettings() const
 {
     return m_fontSettingsPage->fontSettings();
diff --git a/src/plugins/texteditor/texteditorsettings.h b/src/plugins/texteditor/texteditorsettings.h
index cb7bfccc603..809f5d621fd 100644
--- a/src/plugins/texteditor/texteditorsettings.h
+++ b/src/plugins/texteditor/texteditorsettings.h
@@ -73,6 +73,9 @@ signals:
     void storageSettingsChanged(const TextEditor::StorageSettings &);
     void displaySettingsChanged(const TextEditor::DisplaySettings &);
 
+private slots:
+    void fontSizeRequested(int pointSize);
+
 private:
     FontSettingsPage *m_fontSettingsPage;
     BehaviorSettingsPage *m_behaviorSettingsPage;
-- 
GitLab