diff options
author | Artem Sokolovskii <artem.sokolovskii@qt.io> | 2023-05-08 11:00:04 +0200 |
---|---|---|
committer | Artem Sokolovskii <artem.sokolovskii@qt.io> | 2023-05-11 08:11:54 +0000 |
commit | 7960c1f3f6481227986a09dbb20bbdead84bdc00 (patch) | |
tree | ea17cbcaae8a9ce380ccd367232e94c85bf41c53 | |
parent | 2455ff28cd8b96d9fee329b47f8fc515e540198d (diff) |
ClangFormat: Fix code style preferences are grayed out
Code style preferences are grayed out even when formatting mode
is set to disable.
Fixes: QTCREATORBUG-29129
Change-Id: Icf82fa0751f9291122c2af55111b6bd5fac85c7b
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
7 files changed, 51 insertions, 19 deletions
diff --git a/src/plugins/clangformat/clangformatconfigwidget.cpp b/src/plugins/clangformat/clangformatconfigwidget.cpp index 12e02b4fa7..dc5d1b3dc0 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatconfigwidget.cpp @@ -89,8 +89,8 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(TextEditor::ICodeStylePreferenc d->checksScrollArea->setWidget(d->checksWidget); d->checksScrollArea->setWidgetResizable(true); - d->checksWidget->setEnabled(!codeStyle->isReadOnly() - && !codeStyle->isTemporarilyReadOnly()); + d->checksWidget->setEnabled(!codeStyle->isReadOnly() && !codeStyle->isTemporarilyReadOnly() + && !codeStyle->isAdditionalTabDisabled()); FilePath fileName; if (d->project) @@ -141,8 +141,8 @@ void ClangFormatConfigWidget::slotCodeStyleChanged( d->config->setIsReadOnly(codeStyle->isReadOnly()); d->style = d->config->style(); - d->checksWidget->setEnabled(!codeStyle->isReadOnly() - && !codeStyle->isTemporarilyReadOnly()); + d->checksWidget->setEnabled(!codeStyle->isReadOnly() && !codeStyle->isTemporarilyReadOnly() + && !codeStyle->isAdditionalTabDisabled()); fillTable(); updatePreview(); diff --git a/src/plugins/clangformat/clangformatglobalconfigwidget.cpp b/src/plugins/clangformat/clangformatglobalconfigwidget.cpp index a0344e14ed..1f810c968c 100644 --- a/src/plugins/clangformat/clangformatglobalconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatglobalconfigwidget.cpp @@ -153,9 +153,20 @@ void ClangFormatGlobalConfigWidget::initOverrideCheckBox() "can be overridden by the settings below.")); } - auto setEnableOverrideCheckBox = [this](int index) { + auto setTemporarilyReadOnly = [this]() { + if (m_ignoreChanges.isLocked()) + return; + Utils::GuardLocker locker(m_ignoreChanges); + m_codeStyle->currentPreferences()->setTemporarilyReadOnly(!m_overrideDefault->isChecked()); + m_codeStyle->currentPreferences()->setIsAdditionalTabDisabled(!m_overrideDefault->isEnabled()); + ClangFormatSettings::instance().write(); + emit m_codeStyle->currentPreferencesChanged(m_codeStyle->currentPreferences()); + }; + + auto setEnableOverrideCheckBox = [this, setTemporarilyReadOnly](int index) { bool isDisable = index == static_cast<int>(ClangFormatSettings::Mode::Disable); m_overrideDefault->setDisabled(isDisable); + setTemporarilyReadOnly(); }; setEnableOverrideCheckBox(m_indentingOrFormatting->currentIndex()); @@ -166,20 +177,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()); + setTemporarilyReadOnly(); - connect(m_overrideDefault, &QCheckBox::toggled, this, [this](bool checked) { + connect(m_overrideDefault, &QCheckBox::toggled, this, [this, setTemporarilyReadOnly](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()); - } + else + setTemporarilyReadOnly(); }); - connect(m_codeStyle, &TextEditor::ICodeStylePreferences::currentPreferencesChanged, this, [this] { - m_codeStyle->currentPreferences()->setTemporarilyReadOnly(!m_overrideDefault->isChecked()); - }); + connect(m_codeStyle, + &TextEditor::ICodeStylePreferences::currentPreferencesChanged, + this, + setTemporarilyReadOnly); } diff --git a/src/plugins/clangformat/clangformatglobalconfigwidget.h b/src/plugins/clangformat/clangformatglobalconfigwidget.h index 063c82852a..962a7daaf1 100644 --- a/src/plugins/clangformat/clangformatglobalconfigwidget.h +++ b/src/plugins/clangformat/clangformatglobalconfigwidget.h @@ -5,6 +5,8 @@ #include <cppeditor/cppcodestylesettingspage.h> +#include <utils/guard.h> + #include <memory> QT_BEGIN_NAMESPACE @@ -40,6 +42,7 @@ private: ProjectExplorer::Project *m_project; TextEditor::ICodeStylePreferences *m_codeStyle; + Utils::Guard m_ignoreChanges; QLabel *m_projectHasClangFormat; QLabel *m_formattingModeLabel; diff --git a/src/plugins/clangformat/clangformatutils.cpp b/src/plugins/clangformat/clangformatutils.cpp index 120e27fde7..a9f1a0d29b 100644 --- a/src/plugins/clangformat/clangformatutils.cpp +++ b/src/plugins/clangformat/clangformatutils.cpp @@ -213,10 +213,14 @@ bool getCurrentOverriddenSettings(const Utils::FilePath &filePath) const ProjectExplorer::Project *project = ProjectExplorer::SessionManager::projectForFile( filePath); - return getProjectUseGlobalSettings(project) ? !TextEditor::TextEditorSettings::codeStyle("Cpp") - ->currentPreferences() - ->isTemporarilyReadOnly() - : getProjectOverriddenSettings(project); + return getProjectUseGlobalSettings(project) + ? !TextEditor::TextEditorSettings::codeStyle("Cpp") + ->currentPreferences() + ->isTemporarilyReadOnly() + && !TextEditor::TextEditorSettings::codeStyle("Cpp") + ->currentPreferences() + ->isAdditionalTabDisabled() + : getProjectOverriddenSettings(project); } ClangFormatSettings::Mode getProjectIndentationOrFormattingSettings( diff --git a/src/plugins/cppeditor/cppcodestylesettingspage.cpp b/src/plugins/cppeditor/cppcodestylesettingspage.cpp index ebb4a37485..02adc53969 100644 --- a/src/plugins/cppeditor/cppcodestylesettingspage.cpp +++ b/src/plugins/cppeditor/cppcodestylesettingspage.cpp @@ -414,7 +414,8 @@ void CppCodeStylePreferencesWidget::setCodeStyleSettings(const CppCodeStyleSetti void CppCodeStylePreferencesWidget::slotCurrentPreferencesChanged(ICodeStylePreferences *preferences, bool preview) { - const bool enable = !preferences->isReadOnly() && !preferences->isTemporarilyReadOnly(); + const bool enable = !preferences->isReadOnly() && (!preferences->isTemporarilyReadOnly() + || preferences->isAdditionalTabDisabled()); for (QWidget *widget : d->m_controllers) widget->setEnabled(enable); diff --git a/src/plugins/texteditor/icodestylepreferences.cpp b/src/plugins/texteditor/icodestylepreferences.cpp index 931714b71c..29a524ebf6 100644 --- a/src/plugins/texteditor/icodestylepreferences.cpp +++ b/src/plugins/texteditor/icodestylepreferences.cpp @@ -25,6 +25,7 @@ public: QString m_displayName; bool m_readOnly = false; bool m_temporarilyReadOnly = false; + bool m_isAdditionalTabDisabled = false; QString m_settingsSuffix; }; @@ -82,6 +83,16 @@ bool ICodeStylePreferences::isTemporarilyReadOnly() const return d->m_temporarilyReadOnly; } +bool ICodeStylePreferences::isAdditionalTabDisabled() const +{ + return d->m_isAdditionalTabDisabled; +} + +void ICodeStylePreferences::setIsAdditionalTabDisabled(bool on) +{ + d->m_isAdditionalTabDisabled = on; +} + 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 1c36390344..7fd616d560 100644 --- a/src/plugins/texteditor/icodestylepreferences.h +++ b/src/plugins/texteditor/icodestylepreferences.h @@ -40,6 +40,9 @@ public: bool isTemporarilyReadOnly() const; void setTemporarilyReadOnly(bool on); + bool isAdditionalTabDisabled() const; + void setIsAdditionalTabDisabled(bool on); + void setTabSettings(const TabSettings &settings); TabSettings tabSettings() const; TabSettings currentTabSettings() const; |