From 028686b4196d9c1a71d292e2a64a55e514ec7f5c Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Tue, 4 Apr 2023 14:28:27 +0200 Subject: [PATCH] ClangFormat: Grey out Clang-Format Style config when not overridden Add feature to grey out the Clang-Format Style configuration widget after unchecking the 'Override' checkbox. Change-Id: I94bbb1f4436f3caeaed55d49582211257e480d0d Reviewed-by: Reviewed-by: Christian Kandeler --- .../clangformat/clangformatconfigwidget.cpp | 6 ++++-- .../clangformat/clangformatglobalconfigwidget.cpp | 15 +++++++++++++-- .../clangformat/clangformatglobalconfigwidget.h | 5 ++++- src/plugins/clangformat/clangformatplugin.cpp | 4 ++-- .../cppeditor/cppcodestylesettingspage.cpp | 2 +- src/plugins/texteditor/codestyleeditor.cpp | 4 +++- src/plugins/texteditor/icodestylepreferences.cpp | 11 +++++++++++ src/plugins/texteditor/icodestylepreferences.h | 3 +++ .../texteditor/icodestylepreferencesfactory.cpp | 2 +- .../texteditor/icodestylepreferencesfactory.h | 6 ++++-- 10 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/plugins/clangformat/clangformatconfigwidget.cpp b/src/plugins/clangformat/clangformatconfigwidget.cpp index 1d91bd9857f..12e02b4fa74 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatconfigwidget.cpp @@ -89,7 +89,8 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(TextEditor::ICodeStylePreferenc d->checksScrollArea->setWidget(d->checksWidget); d->checksScrollArea->setWidgetResizable(true); - d->checksWidget->setEnabled(!codeStyle->isReadOnly()); + d->checksWidget->setEnabled(!codeStyle->isReadOnly() + && !codeStyle->isTemporarilyReadOnly()); FilePath fileName; if (d->project) @@ -140,7 +141,8 @@ void ClangFormatConfigWidget::slotCodeStyleChanged( d->config->setIsReadOnly(codeStyle->isReadOnly()); d->style = d->config->style(); - d->checksWidget->setEnabled(!codeStyle->isReadOnly()); + d->checksWidget->setEnabled(!codeStyle->isReadOnly() + && !codeStyle->isTemporarilyReadOnly()); fillTable(); updatePreview(); diff --git a/src/plugins/clangformat/clangformatglobalconfigwidget.cpp b/src/plugins/clangformat/clangformatglobalconfigwidget.cpp index f332a97070f..1b57403f32c 100644 --- a/src/plugins/clangformat/clangformatglobalconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatglobalconfigwidget.cpp @@ -9,6 +9,7 @@ #include "clangformatutils.h" #include +#include #include @@ -24,10 +25,11 @@ using namespace Utils; namespace ClangFormat { -ClangFormatGlobalConfigWidget::ClangFormatGlobalConfigWidget(ProjectExplorer::Project *project, - QWidget *parent) +ClangFormatGlobalConfigWidget::ClangFormatGlobalConfigWidget( + TextEditor::ICodeStylePreferences *codeStyle, ProjectExplorer::Project *project, QWidget *parent) : CppCodeStyleWidget(parent) , m_project(project) + , m_codeStyle(codeStyle) { resize(489, 305); @@ -164,10 +166,19 @@ void ClangFormatGlobalConfigWidget::initOverrideCheckBox() Tr::tr("Override Clang Format configuration file with the chosen configuration.")); m_overrideDefault->setChecked(getProjectOverriddenSettings(m_project)); + m_codeStyle->currentPreferences()->setTemporarilyReadOnly(!m_overrideDefault->isChecked()); connect(m_overrideDefault, &QCheckBox::toggled, this, [this](bool checked) { if (m_project) m_project->setNamedSettings(Constants::OVERRIDE_FILE_ID, checked); + else { + m_codeStyle->currentPreferences()->setTemporarilyReadOnly(!checked); + emit m_codeStyle->currentPreferencesChanged(m_codeStyle->currentPreferences()); + } + }); + + connect(m_codeStyle, &TextEditor::ICodeStylePreferences::currentPreferencesChanged, this, [this] { + m_codeStyle->currentPreferences()->setTemporarilyReadOnly(!m_overrideDefault->isChecked()); }); } diff --git a/src/plugins/clangformat/clangformatglobalconfigwidget.h b/src/plugins/clangformat/clangformatglobalconfigwidget.h index 49657cfe201..989aa58a925 100644 --- a/src/plugins/clangformat/clangformatglobalconfigwidget.h +++ b/src/plugins/clangformat/clangformatglobalconfigwidget.h @@ -14,6 +14,7 @@ class QLabel; QT_END_NAMESPACE namespace ProjectExplorer { class Project; } +namespace TextEditor { class ICodeStylePreferences; } namespace ClangFormat { @@ -22,7 +23,8 @@ class ClangFormatGlobalConfigWidget : public CppEditor::CppCodeStyleWidget Q_OBJECT public: - explicit ClangFormatGlobalConfigWidget(ProjectExplorer::Project *project = nullptr, + explicit ClangFormatGlobalConfigWidget(TextEditor::ICodeStylePreferences *codeStyle, + ProjectExplorer::Project *project = nullptr, QWidget *parent = nullptr); ~ClangFormatGlobalConfigWidget() override; void apply() override; @@ -36,6 +38,7 @@ private: bool projectClangFormatFileExists(); ProjectExplorer::Project *m_project; + TextEditor::ICodeStylePreferences *m_codeStyle; QLabel *m_projectHasClangFormat; QLabel *m_formattingModeLabel; diff --git a/src/plugins/clangformat/clangformatplugin.cpp b/src/plugins/clangformat/clangformatplugin.cpp index c958406d7b9..b64ca2ac94e 100644 --- a/src/plugins/clangformat/clangformatplugin.cpp +++ b/src/plugins/clangformat/clangformatplugin.cpp @@ -51,9 +51,9 @@ public: } CodeStyleEditorWidget *createAdditionalGlobalSettings( - Project *project, QWidget *parent) override + ICodeStylePreferences *codeStyle, Project *project, QWidget *parent) override { - return new ClangFormatGlobalConfigWidget(project, parent); + return new ClangFormatGlobalConfigWidget(codeStyle, project, parent); } }; diff --git a/src/plugins/cppeditor/cppcodestylesettingspage.cpp b/src/plugins/cppeditor/cppcodestylesettingspage.cpp index 43778c51daf..ebb4a37485d 100644 --- a/src/plugins/cppeditor/cppcodestylesettingspage.cpp +++ b/src/plugins/cppeditor/cppcodestylesettingspage.cpp @@ -414,7 +414,7 @@ void CppCodeStylePreferencesWidget::setCodeStyleSettings(const CppCodeStyleSetti void CppCodeStylePreferencesWidget::slotCurrentPreferencesChanged(ICodeStylePreferences *preferences, bool preview) { - const bool enable = !preferences->isReadOnly(); + const bool enable = !preferences->isReadOnly() && !preferences->isTemporarilyReadOnly(); for (QWidget *widget : d->m_controllers) widget->setEnabled(enable); diff --git a/src/plugins/texteditor/codestyleeditor.cpp b/src/plugins/texteditor/codestyleeditor.cpp index d36e9a4bfda..6aaf5ae9483 100644 --- a/src/plugins/texteditor/codestyleeditor.cpp +++ b/src/plugins/texteditor/codestyleeditor.cpp @@ -31,7 +31,9 @@ CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory, m_layout = new QVBoxLayout(this); auto selector = new CodeStyleSelectorWidget(factory, project, this); selector->setCodeStyle(codeStyle); - m_additionalGlobalSettingsWidget = factory->createAdditionalGlobalSettings(project, parent); + m_additionalGlobalSettingsWidget = factory->createAdditionalGlobalSettings(codeStyle, + project, + parent); if (m_additionalGlobalSettingsWidget) m_layout->addWidget(m_additionalGlobalSettingsWidget); diff --git a/src/plugins/texteditor/icodestylepreferences.cpp b/src/plugins/texteditor/icodestylepreferences.cpp index e0ab8bbd3dd..931714b71c5 100644 --- a/src/plugins/texteditor/icodestylepreferences.cpp +++ b/src/plugins/texteditor/icodestylepreferences.cpp @@ -24,6 +24,7 @@ public: QByteArray m_id; QString m_displayName; bool m_readOnly = false; + bool m_temporarilyReadOnly = false; QString m_settingsSuffix; }; @@ -71,6 +72,16 @@ void ICodeStylePreferences::setReadOnly(bool on) d->m_readOnly = on; } +void ICodeStylePreferences::setTemporarilyReadOnly(bool on) +{ + d->m_temporarilyReadOnly = on; +} + +bool ICodeStylePreferences::isTemporarilyReadOnly() const +{ + return d->m_temporarilyReadOnly; +} + void ICodeStylePreferences::setTabSettings(const TabSettings &settings) { if (d->m_tabSettings == settings) diff --git a/src/plugins/texteditor/icodestylepreferences.h b/src/plugins/texteditor/icodestylepreferences.h index 8d7a0102882..1c363903445 100644 --- a/src/plugins/texteditor/icodestylepreferences.h +++ b/src/plugins/texteditor/icodestylepreferences.h @@ -37,6 +37,9 @@ public: bool isReadOnly() const; void setReadOnly(bool on); + bool isTemporarilyReadOnly() const; + void setTemporarilyReadOnly(bool on); + void setTabSettings(const TabSettings &settings); TabSettings tabSettings() const; TabSettings currentTabSettings() const; diff --git a/src/plugins/texteditor/icodestylepreferencesfactory.cpp b/src/plugins/texteditor/icodestylepreferencesfactory.cpp index dc876fc3e15..19f35338071 100644 --- a/src/plugins/texteditor/icodestylepreferencesfactory.cpp +++ b/src/plugins/texteditor/icodestylepreferencesfactory.cpp @@ -18,7 +18,7 @@ CodeStyleEditorWidget *ICodeStylePreferencesFactory::createCodeStyleEditor( } CodeStyleEditorWidget *ICodeStylePreferencesFactory::createAdditionalGlobalSettings( - ProjectExplorer::Project *, QWidget *) + ICodeStylePreferences *, ProjectExplorer::Project *, QWidget *) { return nullptr; } diff --git a/src/plugins/texteditor/icodestylepreferencesfactory.h b/src/plugins/texteditor/icodestylepreferencesfactory.h index ead42985039..6a4c7f2f54f 100644 --- a/src/plugins/texteditor/icodestylepreferencesfactory.h +++ b/src/plugins/texteditor/icodestylepreferencesfactory.h @@ -40,8 +40,10 @@ public: virtual CodeStyleEditorWidget *createCodeStyleEditor(ICodeStylePreferences *codeStyle, ProjectExplorer::Project *project = nullptr, QWidget *parent = nullptr); - virtual CodeStyleEditorWidget *createAdditionalGlobalSettings( - ProjectExplorer::Project *project = nullptr, QWidget *parent = nullptr); + virtual CodeStyleEditorWidget *createAdditionalGlobalSettings(ICodeStylePreferences *codeStyle, + ProjectExplorer::Project *project + = nullptr, + QWidget *parent = nullptr); virtual Utils::Id languageId() = 0; virtual QString displayName() = 0; virtual ICodeStylePreferences *createCodeStyle() const = 0;