PE: apply project specific settings to nested text editors

Fixes: QTCREATORBUG-31875
Change-Id: I82749c43061d46c13d8ad06d4919343ee0074348
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: André Hartmann <aha_1980@gmx.de>
This commit is contained in:
David Schulz
2024-12-06 15:10:08 +01:00
parent 1ccac26eb7
commit 502e1e4a70
3 changed files with 22 additions and 26 deletions

View File

@@ -58,7 +58,7 @@ struct EditorConfigurationPrivate
QTextCodec *m_textCodec;
QMap<Utils::Id, ICodeStylePreferences *> m_languageCodeStylePreferences;
QList<BaseTextEditor *> m_editors;
QList<Core::IEditor *> m_editors;
};
EditorConfiguration::EditorConfiguration() : d(std::make_unique<EditorConfigurationPrivate>())
@@ -230,29 +230,29 @@ void EditorConfiguration::fromMap(const Store &map)
setUseGlobalSettings(map.value(kUseGlobal, d->m_useGlobal).toBool());
}
void EditorConfiguration::configureEditor(BaseTextEditor *textEditor) const
void EditorConfiguration::configureEditor(Core::IEditor *editor) const
{
TextEditorWidget *widget = textEditor->editorWidget();
if (widget)
TextEditorWidget *widget = TextEditorWidget::fromEditor(editor);
if (widget) {
widget->textDocument()->setCodeStyle(codeStyle(widget->languageSettingsId()));
if (!d->m_useGlobal) {
textEditor->textDocument()->setCodec(d->m_textCodec);
if (widget)
if (!d->m_useGlobal) {
widget->textDocument()->setCodec(d->m_textCodec);
switchSettings(widget);
}
}
d->m_editors.append(textEditor);
connect(textEditor, &BaseTextEditor::destroyed, this, [this, textEditor]() {
d->m_editors.removeOne(textEditor);
d->m_editors.append(editor);
connect(editor, &Core::IEditor::destroyed, this, [this, editor]() {
d->m_editors.removeOne(editor);
});
}
void EditorConfiguration::deconfigureEditor(BaseTextEditor *textEditor) const
void EditorConfiguration::deconfigureEditor(Core::IEditor *editor) const
{
TextEditorWidget *widget = textEditor->editorWidget();
TextEditorWidget *widget = TextEditorWidget::fromEditor(editor);
if (widget)
widget->textDocument()->setCodeStyle(TextEditorSettings::codeStyle(widget->languageSettingsId()));
d->m_editors.removeOne(textEditor);
d->m_editors.removeOne(editor);
// TODO: what about text codec and switching settings?
}
@@ -391,7 +391,7 @@ void EditorConfiguration::slotAboutToRemoveProject(Project *project)
if (project->editorConfiguration() != this)
return;
for (BaseTextEditor *editor : std::as_const(d->m_editors))
for (Core::IEditor *editor : std::as_const(d->m_editors))
deconfigureEditor(editor);
}

View File

@@ -29,6 +29,7 @@ class ExtraEncodingSettings;
class MarginSettings;
} // namespace TextEditor
namespace Core { class IEditor; }
namespace Utils { class FilePath; }
namespace ProjectExplorer {
@@ -61,8 +62,8 @@ public:
TextEditor::ICodeStylePreferences *codeStyle(Utils::Id languageId) const;
QMap<Utils::Id, TextEditor::ICodeStylePreferences *> codeStyles() const;
void configureEditor(TextEditor::BaseTextEditor *textEditor) const;
void deconfigureEditor(TextEditor::BaseTextEditor *textEditor) const;
void configureEditor(Core::IEditor *editor) const;
void deconfigureEditor(Core::IEditor *editor) const;
Utils::Store toMap() const;
void fromMap(const Utils::Store &map);

View File

@@ -567,11 +567,9 @@ Project *ProjectManager::projectWithProjectFilePath(const FilePath &filePath)
void ProjectManager::configureEditor(IEditor *editor, const FilePath &filePath)
{
if (auto textEditor = qobject_cast<TextEditor::BaseTextEditor*>(editor)) {
// Global settings are the default.
if (Project *project = projectForFile(filePath))
project->editorConfiguration()->configureEditor(textEditor);
}
// Global settings are the default.
if (Project *project = projectForFile(filePath))
project->editorConfiguration()->configureEditor(editor);
}
void ProjectManager::configureEditors(Project *project)
@@ -580,11 +578,8 @@ void ProjectManager::configureEditors(Project *project)
for (IDocument *document : documents) {
if (project->isKnownFile(document->filePath())) {
const QList<IEditor *> editors = DocumentModel::editorsForDocument(document);
for (IEditor *editor : editors) {
if (auto textEditor = qobject_cast<TextEditor::BaseTextEditor*>(editor)) {
project->editorConfiguration()->configureEditor(textEditor);
}
}
for (IEditor *editor : editors)
project->editorConfiguration()->configureEditor(editor);
}
}
}