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>
This commit is contained in:
Artem Sokolovskii
2023-05-08 11:00:04 +02:00
parent 2455ff28cd
commit 7960c1f3f6
7 changed files with 51 additions and 19 deletions

View File

@@ -89,8 +89,8 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(TextEditor::ICodeStylePreferenc
d->checksScrollArea->setWidget(d->checksWidget); d->checksScrollArea->setWidget(d->checksWidget);
d->checksScrollArea->setWidgetResizable(true); d->checksScrollArea->setWidgetResizable(true);
d->checksWidget->setEnabled(!codeStyle->isReadOnly() d->checksWidget->setEnabled(!codeStyle->isReadOnly() && !codeStyle->isTemporarilyReadOnly()
&& !codeStyle->isTemporarilyReadOnly()); && !codeStyle->isAdditionalTabDisabled());
FilePath fileName; FilePath fileName;
if (d->project) if (d->project)
@@ -141,8 +141,8 @@ void ClangFormatConfigWidget::slotCodeStyleChanged(
d->config->setIsReadOnly(codeStyle->isReadOnly()); d->config->setIsReadOnly(codeStyle->isReadOnly());
d->style = d->config->style(); d->style = d->config->style();
d->checksWidget->setEnabled(!codeStyle->isReadOnly() d->checksWidget->setEnabled(!codeStyle->isReadOnly() && !codeStyle->isTemporarilyReadOnly()
&& !codeStyle->isTemporarilyReadOnly()); && !codeStyle->isAdditionalTabDisabled());
fillTable(); fillTable();
updatePreview(); updatePreview();

View File

@@ -153,9 +153,20 @@ void ClangFormatGlobalConfigWidget::initOverrideCheckBox()
"can be overridden by the settings below.")); "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); bool isDisable = index == static_cast<int>(ClangFormatSettings::Mode::Disable);
m_overrideDefault->setDisabled(isDisable); m_overrideDefault->setDisabled(isDisable);
setTemporarilyReadOnly();
}; };
setEnableOverrideCheckBox(m_indentingOrFormatting->currentIndex()); setEnableOverrideCheckBox(m_indentingOrFormatting->currentIndex());
@@ -166,20 +177,19 @@ void ClangFormatGlobalConfigWidget::initOverrideCheckBox()
Tr::tr("Override Clang Format configuration file with the chosen configuration.")); Tr::tr("Override Clang Format configuration file with the chosen configuration."));
m_overrideDefault->setChecked(getProjectOverriddenSettings(m_project)); 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) if (m_project)
m_project->setNamedSettings(Constants::OVERRIDE_FILE_ID, checked); m_project->setNamedSettings(Constants::OVERRIDE_FILE_ID, checked);
else { else
m_codeStyle->currentPreferences()->setTemporarilyReadOnly(!checked); setTemporarilyReadOnly();
emit m_codeStyle->currentPreferencesChanged(m_codeStyle->currentPreferences());
}
}); });
connect(m_codeStyle, &TextEditor::ICodeStylePreferences::currentPreferencesChanged, this, [this] { connect(m_codeStyle,
m_codeStyle->currentPreferences()->setTemporarilyReadOnly(!m_overrideDefault->isChecked()); &TextEditor::ICodeStylePreferences::currentPreferencesChanged,
}); this,
setTemporarilyReadOnly);
} }

View File

@@ -5,6 +5,8 @@
#include <cppeditor/cppcodestylesettingspage.h> #include <cppeditor/cppcodestylesettingspage.h>
#include <utils/guard.h>
#include <memory> #include <memory>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@@ -40,6 +42,7 @@ private:
ProjectExplorer::Project *m_project; ProjectExplorer::Project *m_project;
TextEditor::ICodeStylePreferences *m_codeStyle; TextEditor::ICodeStylePreferences *m_codeStyle;
Utils::Guard m_ignoreChanges;
QLabel *m_projectHasClangFormat; QLabel *m_projectHasClangFormat;
QLabel *m_formattingModeLabel; QLabel *m_formattingModeLabel;

View File

@@ -213,9 +213,13 @@ bool getCurrentOverriddenSettings(const Utils::FilePath &filePath)
const ProjectExplorer::Project *project = ProjectExplorer::SessionManager::projectForFile( const ProjectExplorer::Project *project = ProjectExplorer::SessionManager::projectForFile(
filePath); filePath);
return getProjectUseGlobalSettings(project) ? !TextEditor::TextEditorSettings::codeStyle("Cpp") return getProjectUseGlobalSettings(project)
? !TextEditor::TextEditorSettings::codeStyle("Cpp")
->currentPreferences() ->currentPreferences()
->isTemporarilyReadOnly() ->isTemporarilyReadOnly()
&& !TextEditor::TextEditorSettings::codeStyle("Cpp")
->currentPreferences()
->isAdditionalTabDisabled()
: getProjectOverriddenSettings(project); : getProjectOverriddenSettings(project);
} }

View File

@@ -414,7 +414,8 @@ void CppCodeStylePreferencesWidget::setCodeStyleSettings(const CppCodeStyleSetti
void CppCodeStylePreferencesWidget::slotCurrentPreferencesChanged(ICodeStylePreferences *preferences, bool preview) 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) for (QWidget *widget : d->m_controllers)
widget->setEnabled(enable); widget->setEnabled(enable);

View File

@@ -25,6 +25,7 @@ public:
QString m_displayName; QString m_displayName;
bool m_readOnly = false; bool m_readOnly = false;
bool m_temporarilyReadOnly = false; bool m_temporarilyReadOnly = false;
bool m_isAdditionalTabDisabled = false;
QString m_settingsSuffix; QString m_settingsSuffix;
}; };
@@ -82,6 +83,16 @@ bool ICodeStylePreferences::isTemporarilyReadOnly() const
return d->m_temporarilyReadOnly; 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) void ICodeStylePreferences::setTabSettings(const TabSettings &settings)
{ {
if (d->m_tabSettings == settings) if (d->m_tabSettings == settings)

View File

@@ -40,6 +40,9 @@ public:
bool isTemporarilyReadOnly() const; bool isTemporarilyReadOnly() const;
void setTemporarilyReadOnly(bool on); void setTemporarilyReadOnly(bool on);
bool isAdditionalTabDisabled() const;
void setIsAdditionalTabDisabled(bool on);
void setTabSettings(const TabSettings &settings); void setTabSettings(const TabSettings &settings);
TabSettings tabSettings() const; TabSettings tabSettings() const;
TabSettings currentTabSettings() const; TabSettings currentTabSettings() const;