diff options
author | Eike Ziller <eike.ziller@digia.com> | 2014-01-21 11:26:39 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2014-01-24 08:00:07 +0100 |
commit | 3fa6b6737c48049cb3d6e06ef0c1cfcb30dfd595 (patch) | |
tree | b67162542fb606e2265da414f1525e9141153cb1 | |
parent | b59d61e2a42fd226d3009bf7c48e6fa9fffbb85e (diff) | |
download | qt-creator-3fa6b6737c48049cb3d6e06ef0c1cfcb30dfd595.tar.gz |
TextEditors: Move font settings to document
Change-Id: I325764cbaa9684fa2758b0ea6c6ea58de142cb73
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
20 files changed, 62 insertions, 40 deletions
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 1d91d128f5..98c169cc3c 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1529,13 +1529,14 @@ TextEditor::CompletionAssistProvider *CPPEditor::completionAssistProvider() return CppModelManagerInterface::instance()->cppEditorSupport(this)->completionAssistProvider(); } -void CPPEditorWidget::setFontSettings(const TextEditor::FontSettings &fs) +void CPPEditorWidget::applyFontSettings() { - TextEditor::BaseTextEditorWidget::setFontSettings(fs); + TextEditor::BaseTextEditorWidget::applyFontSettings(); TextEditor::SyntaxHighlighter *highlighter = baseTextDocument()->syntaxHighlighter(); if (!highlighter) return; + const TextEditor::FontSettings &fs = baseTextDocument()->fontSettings(); m_occurrencesFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES); m_occurrencesUnusedFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES_UNUSED); m_occurrencesUnusedFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline); diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index 62ade9bfb9..2ca2e26bc0 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -145,7 +145,6 @@ Q_SIGNALS: void outlineModelIndexChanged(const QModelIndex &index); public Q_SLOTS: - virtual void setFontSettings(const TextEditor::FontSettings &); void setSortedOutline(bool sort); void switchDeclarationDefinition(bool inNextSplit); void renameSymbolUnderCursor(); @@ -162,6 +161,7 @@ protected: void contextMenuEvent(QContextMenuEvent *); void keyPressEvent(QKeyEvent *e); + void applyFontSettings(); TextEditor::BaseTextEditor *createEditor(); const CPlusPlus::Macro *findCanonicalMacro(const QTextCursor &cursor, diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp index 3e71c6d396..3f655a551d 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.cpp +++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp @@ -497,7 +497,7 @@ void CppCodeStylePreferencesWidget::decorateEditors(const TextEditor::FontSettin } foreach (TextEditor::SnippetEditorWidget *editor, m_previews) { - editor->setFontSettings(fontSettings); + editor->baseTextDocument()->setFontSettings(fontSettings); if (provider) provider->decorateEditor(editor); } diff --git a/src/plugins/diffeditor/diffeditorwidget.cpp b/src/plugins/diffeditor/diffeditorwidget.cpp index 8561f9f8e1..3e5ce74bef 100644 --- a/src/plugins/diffeditor/diffeditorwidget.cpp +++ b/src/plugins/diffeditor/diffeditorwidget.cpp @@ -185,7 +185,6 @@ public: public slots: void setDisplaySettings(const DisplaySettings &ds); - void setFontSettings(const TextEditor::FontSettings &fs); signals: void jumpToOriginalFileRequested(int diffFileIndex, @@ -194,6 +193,7 @@ signals: protected: virtual int extraAreaWidth(int *markWidthPtr = 0) const { return BaseTextEditorWidget::extraAreaWidth(markWidthPtr); } + void applyFontSettings(); BaseTextEditor *createEditor() { return new DiffViewEditorEditable(this); } virtual QString lineNumber(int blockNumber) const; virtual int lineNumberDigits() const; @@ -356,9 +356,10 @@ void DiffViewEditorWidget::setDisplaySettings(const DisplaySettings &ds) BaseTextEditorWidget::setDisplaySettings(settings); } -void DiffViewEditorWidget::setFontSettings(const TextEditor::FontSettings &fs) +void DiffViewEditorWidget::applyFontSettings() { - BaseTextEditorWidget::setFontSettings(fs); + BaseTextEditorWidget::applyFontSettings(); + const TextEditor::FontSettings &fs = baseTextDocument()->fontSettings(); m_fileLineForeground = fs.formatFor(C_DIFF_FILE_LINE).foreground(); m_chunkLineForeground = fs.formatFor(C_DIFF_CONTEXT_LINE).foreground(); m_textForeground = fs.toTextCharFormat(C_TEXT).foreground().color(); @@ -1578,8 +1579,8 @@ static QTextCharFormat fullWidthFormatForTextStyle(const TextEditor::FontSetting void DiffEditorWidget::setFontSettings(const TextEditor::FontSettings &fontSettings) { - m_leftEditor->setFontSettings(fontSettings); - m_rightEditor->setFontSettings(fontSettings); + m_leftEditor->baseTextDocument()->setFontSettings(fontSettings); + m_rightEditor->baseTextDocument()->setFontSettings(fontSettings); m_fileLineFormat = fullWidthFormatForTextStyle(fontSettings, C_DIFF_FILE_LINE); m_chunkLineFormat = fullWidthFormatForTextStyle(fontSettings, C_DIFF_CONTEXT_LINE); diff --git a/src/plugins/diffeditor/diffshoweditor.cpp b/src/plugins/diffeditor/diffshoweditor.cpp index 520862c881..047904b0d7 100644 --- a/src/plugins/diffeditor/diffshoweditor.cpp +++ b/src/plugins/diffeditor/diffshoweditor.cpp @@ -125,7 +125,7 @@ DiffShowEditor::DiffShowEditor(DiffEditorWidget *editorWidget) m_diffShowWidget, SLOT(setFontSettings(TextEditor::FontSettings))); m_diffShowWidget->setDisplaySettings(TextEditorSettings::displaySettings()); m_diffShowWidget->setCodeStyle(TextEditorSettings::codeStyle()); - m_diffShowWidget->setFontSettings(TextEditorSettings::fontSettings()); + m_diffShowWidget->baseTextDocument()->setFontSettings(TextEditorSettings::fontSettings()); } DiffShowEditor::~DiffShowEditor() diff --git a/src/plugins/projectexplorer/environmentitemswidget.cpp b/src/plugins/projectexplorer/environmentitemswidget.cpp index e4fa4ba472..9c89858984 100644 --- a/src/plugins/projectexplorer/environmentitemswidget.cpp +++ b/src/plugins/projectexplorer/environmentitemswidget.cpp @@ -71,7 +71,7 @@ EnvironmentItemsWidget::EnvironmentItemsWidget(QWidget *parent) : QWidget(parent), d(new EnvironmentItemsWidgetPrivate) { d->m_editor = new TextEditor::SnippetEditorWidget(this); - d->m_editor->setFontSettings(TextEditor::TextEditorSettings::fontSettings()); + d->m_editor->baseTextDocument()->setFontSettings(TextEditor::TextEditorSettings::fontSettings()); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(d->m_editor); } diff --git a/src/plugins/pythoneditor/pythoneditorwidget.cpp b/src/plugins/pythoneditor/pythoneditorwidget.cpp index e5ee2521f2..d93dc66e3d 100644 --- a/src/plugins/pythoneditor/pythoneditorwidget.cpp +++ b/src/plugins/pythoneditor/pythoneditorwidget.cpp @@ -89,14 +89,14 @@ void EditorWidget::unCommentSelection() Handles common IDE fonts&colors settings (Tools -> Options -> Text editor -> Fonts and colors) */ -void EditorWidget::setFontSettings(const TextEditor::FontSettings &fs) +void EditorWidget::applyFontSettings() { - TextEditor::BaseTextEditorWidget::setFontSettings(fs); + TextEditor::BaseTextEditorWidget::applyFontSettings(); PythonHighlighter *highlighter = qobject_cast<PythonHighlighter *>(baseTextDocument()->syntaxHighlighter()); if (highlighter) - highlighter->setFontSettings(fs); + highlighter->setFontSettings(baseTextDocument()->fontSettings()); } TextEditor::BaseTextEditor *EditorWidget::createEditor() diff --git a/src/plugins/pythoneditor/pythoneditorwidget.h b/src/plugins/pythoneditor/pythoneditorwidget.h index 272eb3c8a4..ad9fc5894e 100644 --- a/src/plugins/pythoneditor/pythoneditorwidget.h +++ b/src/plugins/pythoneditor/pythoneditorwidget.h @@ -47,10 +47,8 @@ public: virtual void unCommentSelection(); -public slots: - virtual void setFontSettings(const TextEditor::FontSettings &); - protected: + void applyFontSettings(); TextEditor::BaseTextEditor *createEditor(); private: diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 69771e0fd7..7fca13f037 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -997,10 +997,11 @@ void QmlJSTextEditorWidget::setSelectedElements() emit selectedElementsChanged(offsets, wordAtCursor); } -void QmlJSTextEditorWidget::setFontSettings(const TextEditor::FontSettings &fs) +void QmlJSTextEditorWidget::applyFontSettings() { - TextEditor::BaseTextEditorWidget::setFontSettings(fs); + TextEditor::BaseTextEditorWidget::applyFontSettings(); + const TextEditor::FontSettings &fs = baseTextDocument()->fontSettings(); m_occurrencesFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES); m_occurrencesUnusedFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES_UNUSED); m_occurrencesUnusedFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline); diff --git a/src/plugins/qmljseditor/qmljseditor.h b/src/plugins/qmljseditor/qmljseditor.h index aa9a24a360..669bfa2ba8 100644 --- a/src/plugins/qmljseditor/qmljseditor.h +++ b/src/plugins/qmljseditor/qmljseditor.h @@ -135,7 +135,6 @@ public slots: void findUsages(); void renameUsages(); void showContextPane(); - virtual void setFontSettings(const TextEditor::FontSettings &); signals: void outlineModelIndexChanged(const QModelIndex &index); @@ -168,6 +167,7 @@ protected: void wheelEvent(QWheelEvent *event); void resizeEvent(QResizeEvent *event); void scrollContentsBy(int dx, int dy); + void applyFontSettings(); TextEditor::BaseTextEditor *createEditor(); void createToolBar(QmlJSEditor *editable); TextEditor::BaseTextEditorWidget::Link findLinkAt(const QTextCursor &cursor, diff --git a/src/plugins/qmljstools/qmljscodestylesettingspage.cpp b/src/plugins/qmljstools/qmljscodestylesettingspage.cpp index 61480214fb..0fe931277d 100644 --- a/src/plugins/qmljstools/qmljscodestylesettingspage.cpp +++ b/src/plugins/qmljstools/qmljscodestylesettingspage.cpp @@ -107,7 +107,7 @@ void QmlJSCodeStylePreferencesWidget::decorateEditor(const TextEditor::FontSetti } } - m_ui->previewTextEdit->setFontSettings(fontSettings); + m_ui->previewTextEdit->baseTextDocument()->setFontSettings(fontSettings); if (provider) provider->decorateEditor(m_ui->previewTextEdit); } diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp index c04e48488c..5002463be2 100644 --- a/src/plugins/texteditor/basetextdocument.cpp +++ b/src/plugins/texteditor/basetextdocument.cpp @@ -33,6 +33,7 @@ #include "basetexteditor.h" #include "convenience.h" #include "extraencodingsettings.h" +#include "fontsettings.h" #include "indenter.h" #include "storagesettings.h" #include "syntaxhighlighter.h" @@ -77,6 +78,7 @@ public: StorageSettings m_storageSettings; TabSettings m_tabSettings; ExtraEncodingSettings m_extraEncodingSettings; + FontSettings m_fontSettings; QTextDocument *m_document; SyntaxHighlighter *m_highlighter; QScopedPointer<Indenter> m_indenter; @@ -230,6 +232,19 @@ const TabSettings &BaseTextDocument::tabSettings() const return d->m_tabSettings; } +void BaseTextDocument::setFontSettings(const FontSettings &fontSettings) +{ + if (fontSettings == d->m_fontSettings) + return; + d->m_fontSettings = fontSettings; + emit fontSettingsChanged(); +} + +const FontSettings &BaseTextDocument::fontSettings() const +{ + return d->m_fontSettings; +} + void BaseTextDocument::setExtraEncodingSettings(const ExtraEncodingSettings &extraEncodingSettings) { d->m_extraEncodingSettings = extraEncodingSettings; diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/basetextdocument.h index 83d7e8ae3d..347097431c 100644 --- a/src/plugins/texteditor/basetextdocument.h +++ b/src/plugins/texteditor/basetextdocument.h @@ -43,6 +43,7 @@ namespace TextEditor { class BaseTextDocumentPrivate; class ExtraEncodingSettings; +class FontSettings; class ITextMarkable; class Indenter; class StorageSettings; @@ -71,6 +72,7 @@ public: const StorageSettings &storageSettings() const; const TabSettings &tabSettings() const; const ExtraEncodingSettings &extraEncodingSettings() const; + const FontSettings &fontSettings() const; void setIndenter(Indenter *indenter); Indenter *indenter() const; @@ -112,10 +114,12 @@ public: public slots: void setTabSettings(const TextEditor::TabSettings &tabSettings); + void setFontSettings(const TextEditor::FontSettings &fontSettings); signals: void mimeTypeChanged(); void tabSettingsChanged(); + void fontSettingsChanged(); private: void cleanWhitespace(QTextCursor &cursor, bool cleanIndentation, bool inEntireDocument); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index a02d181503..2b7e751304 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -2347,6 +2347,7 @@ BaseTextEditorWidgetPrivate::BaseTextEditorWidgetPrivate() m_parenthesesMatchingTimer(0), m_extraArea(0), m_codeStylePreferences(0), + m_fontSettingsNeedsApply(true), // apply when making visible the first time, for the split case extraAreaSelectionAnchorBlockNumber(-1), extraAreaToggleMarkBlockNumber(-1), extraAreaHighlightFoldedBlockNumber(-1), @@ -2404,6 +2405,7 @@ void BaseTextEditorWidgetPrivate::setupDocumentSignals() QObject::connect(m_document.data(), SIGNAL(aboutToReload()), q, SLOT(documentAboutToBeReloaded())); QObject::connect(m_document.data(), SIGNAL(reloadFinished(bool)), q, SLOT(documentReloadFinished(bool))); QObject::connect(m_document.data(), SIGNAL(tabSettingsChanged()), q, SLOT(updateTabStops())); + QObject::connect(m_document.data(), SIGNAL(fontSettingsChanged()), q, SLOT(applyFontSettingsDelayed())); q->slotUpdateExtraAreaWidth(); } @@ -5363,25 +5365,25 @@ void BaseTextEditorWidget::unCommentSelection() void BaseTextEditorWidget::showEvent(QShowEvent* e) { - if (!d->m_fontSettings.isEmpty()) { - setFontSettings(d->m_fontSettings); - d->m_fontSettings.clear(); + if (d->m_fontSettingsNeedsApply) { + applyFontSettings(); + d->m_fontSettingsNeedsApply = false; } QPlainTextEdit::showEvent(e); } -void BaseTextEditorWidget::setFontSettingsIfVisible(const TextEditor::FontSettings &fs) +void BaseTextEditorWidget::applyFontSettingsDelayed() { - if (!isVisible()) { - d->m_fontSettings = fs; - return; - } - setFontSettings(fs); + if (isVisible()) + applyFontSettings(); + else + d->m_fontSettingsNeedsApply = true; } -void BaseTextEditorWidget::setFontSettings(const TextEditor::FontSettings &fs) +void BaseTextEditorWidget::applyFontSettings() { + const FontSettings &fs = baseTextDocument()->fontSettings(); const QTextCharFormat textFormat = fs.toTextCharFormat(C_TEXT); const QTextCharFormat selectionFormat = fs.toTextCharFormat(C_SELECTION); const QTextCharFormat lineNumberFormat = fs.toTextCharFormat(C_LINE_NUMBER); diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 3af8db4847..490261a4cf 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -343,6 +343,7 @@ private: protected: virtual BaseTextEditor *createEditor() = 0; + virtual void applyFontSettings(); private slots: void editorContentsChange(int position, int charsRemoved, int charsAdded); @@ -412,8 +413,6 @@ public slots: virtual void format(); virtual void rewrapParagraph(); virtual void unCommentSelection(); - virtual void setFontSettings(const TextEditor::FontSettings &); - void setFontSettingsIfVisible(const TextEditor::FontSettings &); virtual void setDisplaySettings(const TextEditor::DisplaySettings &); virtual void setMarginSettings(const TextEditor::MarginSettings &); virtual void setBehaviorSettings(const TextEditor::BehaviorSettings &); @@ -547,6 +546,7 @@ private: private slots: void handleBlockSelection(int diff_row, int diff_col); void updateTabStops(); + void applyFontSettingsDelayed(); // parentheses matcher void _q_matchParentheses(); diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index f0395db908..a2e110d826 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -138,7 +138,7 @@ public: ICodeStylePreferences *m_codeStylePreferences; DisplaySettings m_displaySettings; MarginSettings m_marginSettings; - FontSettings m_fontSettings; + bool m_fontSettingsNeedsApply; BehaviorSettings m_behaviorSettings; int extraAreaSelectionAnchorBlockNumber; diff --git a/src/plugins/texteditor/codestyleeditor.cpp b/src/plugins/texteditor/codestyleeditor.cpp index c9a738316c..4cf58323b2 100644 --- a/src/plugins/texteditor/codestyleeditor.cpp +++ b/src/plugins/texteditor/codestyleeditor.cpp @@ -54,7 +54,7 @@ CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory, CodeStyleSelectorWidget *selector = new CodeStyleSelectorWidget(factory, this); selector->setCodeStyle(codeStyle); m_preview = new SnippetEditorWidget(this); - m_preview->setFontSettings(TextEditorSettings::fontSettings()); + m_preview->baseTextDocument()->setFontSettings(TextEditorSettings::fontSettings()); DisplaySettings displaySettings = m_preview->displaySettings(); displaySettings.m_visualizeWhitespace = true; m_preview->setDisplaySettings(displaySettings); diff --git a/src/plugins/texteditor/plaintexteditor.cpp b/src/plugins/texteditor/plaintexteditor.cpp index e9173b39e2..f0a47897a9 100644 --- a/src/plugins/texteditor/plaintexteditor.cpp +++ b/src/plugins/texteditor/plaintexteditor.cpp @@ -171,7 +171,7 @@ void PlainTextEditorWidget::configure(const MimeType &mimeType) } } - setFontSettings(TextEditorSettings::fontSettings()); + baseTextDocument()->setFontSettings(TextEditorSettings::fontSettings()); emit configured(editor()); } diff --git a/src/plugins/texteditor/snippets/snippetssettingspage.cpp b/src/plugins/texteditor/snippets/snippetssettingspage.cpp index e1db97ea96..d0b92d9581 100644 --- a/src/plugins/texteditor/snippets/snippetssettingspage.cpp +++ b/src/plugins/texteditor/snippets/snippetssettingspage.cpp @@ -335,7 +335,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::fontSettings()); + snippetEditor->baseTextDocument()->setFontSettings(TextEditorSettings::fontSettings()); provider->decorateEditor(snippetEditor); m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor); connect(snippetEditor, SIGNAL(snippetContentChanged()), this, SLOT(setSnippetContent())); @@ -541,7 +541,7 @@ void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings ExtensionSystem::PluginManager::getObjects<ISnippetProvider>(); for (int i = 0; i < m_ui.groupCombo->count(); ++i) { SnippetEditorWidget *snippetEditor = editorAt(i); - snippetEditor->setFontSettings(fontSettings); + snippetEditor->baseTextDocument()->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) { diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp index c3361ad419..ebe1f61501 100644 --- a/src/plugins/texteditor/texteditorsettings.cpp +++ b/src/plugins/texteditor/texteditorsettings.cpp @@ -335,7 +335,7 @@ void TextEditorSettings::initializeEditor(BaseTextEditorWidget *editor) { // Connect to settings change signals connect(m_instance, SIGNAL(fontSettingsChanged(TextEditor::FontSettings)), - editor, SLOT(setFontSettingsIfVisible(TextEditor::FontSettings))); + editor->baseTextDocument(), SLOT(setFontSettings(TextEditor::FontSettings))); connect(m_instance, SIGNAL(typingSettingsChanged(TextEditor::TypingSettings)), editor, SLOT(setTypingSettings(TextEditor::TypingSettings))); connect(m_instance, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)), @@ -357,7 +357,7 @@ void TextEditorSettings::initializeEditor(BaseTextEditorWidget *editor) m_instance, SLOT(zoomResetRequested())); // Apply current settings - editor->setFontSettings(fontSettings()); + editor->baseTextDocument()->setFontSettings(fontSettings()); editor->baseTextDocument()->setTabSettings(codeStyle()->tabSettings()); // also set through code style ??? editor->setTypingSettings(typingSettings()); editor->setStorageSettings(storageSettings()); |