ClangFormat: Fix settings checkboxes disappearance

- Fixed settings checkboxes disappearance after open a project
- Fixed impossibility to save settings

Task-number: QTCREATORBUG-26948
Change-Id: Ia73a61bf56b99adea9ed45c9d656860b185a3d7e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Artem Sokolovskii
2022-03-17 12:01:17 +01:00
parent 81f33072b9
commit bbc44cfb90
15 changed files with 64 additions and 33 deletions

View File

@@ -131,14 +131,13 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(ProjectExplorer::Project *proje
initChecksAndPreview(); initChecksAndPreview();
if (m_project) {
m_ui->applyButton->show(); m_ui->applyButton->show();
if (m_project) {
hideGlobalCheckboxes(); hideGlobalCheckboxes();
m_ui->fallbackConfig->hide(); m_ui->fallbackConfig->hide();
m_ui->overrideDefault->setChecked( m_ui->overrideDefault->setChecked(
m_project->namedSettings(Constants::OVERRIDE_FILE_ID).toBool()); m_project->namedSettings(Constants::OVERRIDE_FILE_ID).toBool());
} else { } else {
m_ui->applyButton->hide();
showGlobalCheckboxes(); showGlobalCheckboxes();
m_ui->overrideDefault->setChecked(ClangFormatSettings::instance().overrideDefaultFile()); m_ui->overrideDefault->setChecked(ClangFormatSettings::instance().overrideDefaultFile());
m_ui->overrideDefault->setToolTip( m_ui->overrideDefault->setToolTip(
@@ -179,12 +178,13 @@ void ClangFormatConfigWidget::initChecksAndPreview()
m_preview->textDocument()->setSyntaxHighlighter(new CppEditor::CppHighlighter); m_preview->textDocument()->setSyntaxHighlighter(new CppEditor::CppHighlighter);
Utils::FilePath fileName; Utils::FilePath fileName;
if (m_project) {
connect(m_ui->applyButton, &QPushButton::clicked, this, &ClangFormatConfigWidget::apply); connect(m_ui->applyButton, &QPushButton::clicked, this, &ClangFormatConfigWidget::apply);
if (m_project) {
fileName = m_project->projectFilePath().pathAppended("snippet.cpp"); fileName = m_project->projectFilePath().pathAppended("snippet.cpp");
} else { } else {
fileName = Core::ICore::userResourcePath("snippet.cpp"); fileName = Core::ICore::userResourcePath("snippet.cpp");
} }
m_preview->textDocument()->indenter()->setFileName(fileName); m_preview->textDocument()->indenter()->setFileName(fileName);
} }

View File

@@ -84,11 +84,10 @@ public:
return new ClangFormatIndenter(doc); return new ClangFormatIndenter(doc);
} }
std::pair<CppEditor::CppCodeStyleWidget *, QString> additionalTab(QWidget *parent) const override std::pair<CppEditor::CppCodeStyleWidget *, QString> additionalTab(
ProjectExplorer::Project *project, QWidget *parent) const override
{ {
if (!parent) return {new ClangFormatConfigWidget(project, parent), tr("ClangFormat")};
return {new ClangFormatConfigWidget(), tr("ClangFormat")};
return {new ClangFormatConfigWidget(SessionManager::startupProject()), tr("ClangFormat")};
} }
}; };

View File

@@ -98,6 +98,7 @@ TextEditor::ICodeStylePreferences *CppCodeStylePreferencesFactory::createCodeSty
} }
QWidget *CppCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences, QWidget *CppCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences,
ProjectExplorer::Project *project,
QWidget *parent) const QWidget *parent) const
{ {
auto cppPreferences = qobject_cast<CppCodeStylePreferences *>(preferences); auto cppPreferences = qobject_cast<CppCodeStylePreferences *>(preferences);
@@ -108,7 +109,7 @@ QWidget *CppCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePref
widget->layout()->setContentsMargins(0, 0, 0, 0); widget->layout()->setContentsMargins(0, 0, 0, 0);
widget->setCodeStyle(cppPreferences); widget->setCodeStyle(cppPreferences);
const auto tab = additionalTab(parent); const auto tab = additionalTab(project, parent);
widget->addTab(tab.first, tab.second); widget->addTab(tab.first, tab.second);
return widget; return widget;
@@ -129,9 +130,10 @@ QString CppCodeStylePreferencesFactory::previewText() const
return QLatin1String(defaultPreviewText); return QLatin1String(defaultPreviewText);
} }
std::pair<CppCodeStyleWidget *, QString> CppCodeStylePreferencesFactory::additionalTab(QWidget *parent) const std::pair<CppCodeStyleWidget *, QString> CppCodeStylePreferencesFactory::additionalTab(ProjectExplorer::Project *project, QWidget *parent) const
{ {
Q_UNUSED(parent) Q_UNUSED(parent)
Q_UNUSED(project)
return {nullptr, ""}; return {nullptr, ""};
} }

View File

@@ -41,11 +41,13 @@ public:
QString displayName() override; QString displayName() override;
TextEditor::ICodeStylePreferences *createCodeStyle() const override; TextEditor::ICodeStylePreferences *createCodeStyle() const override;
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
ProjectExplorer::Project *project,
QWidget *parent) const override; QWidget *parent) const override;
TextEditor::Indenter *createIndenter(QTextDocument *doc) const override; TextEditor::Indenter *createIndenter(QTextDocument *doc) const override;
QString snippetProviderGroupId() const override; QString snippetProviderGroupId() const override;
QString previewText() const override; QString previewText() const override;
virtual std::pair<CppCodeStyleWidget *, QString> additionalTab(QWidget *parent) const; virtual std::pair<CppCodeStyleWidget *, QString> additionalTab(ProjectExplorer::Project *project,
QWidget *parent) const;
}; };
} // namespace CppEditor } // namespace CppEditor

View File

@@ -60,8 +60,10 @@ TextEditor::ICodeStylePreferences *NimCodeStylePreferencesFactory::createCodeSty
} }
QWidget *NimCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences, QWidget *NimCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences,
ProjectExplorer::Project *project,
QWidget *parent) const QWidget *parent) const
{ {
Q_UNUSED(project)
auto result = new NimCodeStylePreferencesWidget(preferences, parent); auto result = new NimCodeStylePreferencesWidget(preferences, parent);
result->layout()->setContentsMargins(0, 0, 0, 0); result->layout()->setContentsMargins(0, 0, 0, 0);
return result; return result;

View File

@@ -40,6 +40,7 @@ public:
QString displayName() override; QString displayName() override;
TextEditor::ICodeStylePreferences *createCodeStyle() const override; TextEditor::ICodeStylePreferences *createCodeStyle() const override;
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
ProjectExplorer::Project *project,
QWidget *parent) const override; QWidget *parent) const override;
TextEditor::Indenter *createIndenter(QTextDocument *doc) const override; TextEditor::Indenter *createIndenter(QTextDocument *doc) const override;
QString snippetProviderGroupId() const override; QString snippetProviderGroupId() const override;

View File

@@ -44,7 +44,7 @@ CodeStyleSettingsWidget::CodeStyleSettingsWidget(Project *project) : QWidget(),
Utils::Id languageId = factory->languageId(); Utils::Id languageId = factory->languageId();
ICodeStylePreferences *codeStylePreferences = config->codeStyle(languageId); ICodeStylePreferences *codeStylePreferences = config->codeStyle(languageId);
auto preview = factory->createCodeStyleEditor(codeStylePreferences, m_ui.stackedWidget); auto preview = factory->createCodeStyleEditor(codeStylePreferences, project, m_ui.stackedWidget);
if (preview && preview->layout()) if (preview && preview->layout())
preview->layout()->setContentsMargins(QMargins()); preview->layout()->setContentsMargins(QMargins());
m_ui.stackedWidget->addWidget(preview); m_ui.stackedWidget->addWidget(preview);

View File

@@ -71,9 +71,12 @@ TextEditor::ICodeStylePreferences *QmlJSCodeStylePreferencesFactory::createCodeS
return new TextEditor::SimpleCodeStylePreferences(); return new TextEditor::SimpleCodeStylePreferences();
} }
QWidget *QmlJSCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences, QWidget *QmlJSCodeStylePreferencesFactory::createEditor(
TextEditor::ICodeStylePreferences *preferences,
ProjectExplorer::Project *project,
QWidget *parent) const QWidget *parent) const
{ {
Q_UNUSED(project)
auto widget = new Internal::QmlJSCodeStylePreferencesWidget(parent); auto widget = new Internal::QmlJSCodeStylePreferencesWidget(parent);
widget->layout()->setContentsMargins(0, 0, 0, 0); widget->layout()->setContentsMargins(0, 0, 0, 0);
widget->setPreferences(preferences); widget->setPreferences(preferences);

View File

@@ -38,6 +38,7 @@ public:
QString displayName() override; QString displayName() override;
TextEditor::ICodeStylePreferences *createCodeStyle() const override; TextEditor::ICodeStylePreferences *createCodeStyle() const override;
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
ProjectExplorer::Project *project,
QWidget *parent) const override; QWidget *parent) const override;
TextEditor::Indenter *createIndenter(QTextDocument *doc) const override; TextEditor::Indenter *createIndenter(QTextDocument *doc) const override;
QString snippetProviderGroupId() const override; QString snippetProviderGroupId() const override;

View File

@@ -42,13 +42,15 @@
using namespace TextEditor; using namespace TextEditor;
CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory, CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory,
ICodeStylePreferences *codeStyle, QWidget *parent) ICodeStylePreferences *codeStyle,
: CodeStyleEditorWidget(parent), ProjectExplorer::Project *project,
m_factory(factory), QWidget *parent)
m_codeStyle(codeStyle) : CodeStyleEditorWidget(parent)
, m_factory(factory)
, m_codeStyle(codeStyle)
{ {
m_layout = new QVBoxLayout(this); m_layout = new QVBoxLayout(this);
auto selector = new CodeStyleSelectorWidget(factory, this); auto selector = new CodeStyleSelectorWidget(factory, project, this);
selector->setCodeStyle(codeStyle); selector->setCodeStyle(codeStyle);
m_preview = new SnippetEditorWidget(this); m_preview = new SnippetEditorWidget(this);
DisplaySettings displaySettings = m_preview->displaySettings(); DisplaySettings displaySettings = m_preview->displaySettings();

View File

@@ -33,6 +33,7 @@ QT_BEGIN_NAMESPACE
class QVBoxLayout; class QVBoxLayout;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace ProjectExplorer { class Project; }
namespace TextEditor { namespace TextEditor {
class ICodeStylePreferencesFactory; class ICodeStylePreferencesFactory;
@@ -44,7 +45,9 @@ class TEXTEDITOR_EXPORT CodeStyleEditor : public CodeStyleEditorWidget
Q_OBJECT Q_OBJECT
public: public:
CodeStyleEditor(ICodeStylePreferencesFactory *factory, CodeStyleEditor(ICodeStylePreferencesFactory *factory,
ICodeStylePreferences *codeStyle, QWidget *parent = nullptr); ICodeStylePreferences *codeStyle,
ProjectExplorer::Project *project = nullptr,
QWidget *parent = nullptr);
private: private:
void updatePreview(); void updatePreview();

View File

@@ -52,8 +52,10 @@ class CodeStyleDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
CodeStyleDialog(ICodeStylePreferencesFactory *factory, explicit CodeStyleDialog(ICodeStylePreferencesFactory *factory,
ICodeStylePreferences *codeStyle, QWidget *parent = nullptr); ICodeStylePreferences *codeStyle,
ProjectExplorer::Project *project = nullptr,
QWidget *parent = nullptr);
~CodeStyleDialog() override; ~CodeStyleDialog() override;
ICodeStylePreferences *codeStyle() const; ICodeStylePreferences *codeStyle() const;
private: private:
@@ -69,7 +71,9 @@ private:
}; };
CodeStyleDialog::CodeStyleDialog(ICodeStylePreferencesFactory *factory, CodeStyleDialog::CodeStyleDialog(ICodeStylePreferencesFactory *factory,
ICodeStylePreferences *codeStyle, QWidget *parent) ICodeStylePreferences *codeStyle,
ProjectExplorer::Project *project,
QWidget *parent)
: QDialog(parent) : QDialog(parent)
{ {
setWindowTitle(tr("Edit Code Style")); setWindowTitle(tr("Edit Code Style"));
@@ -104,7 +108,7 @@ CodeStyleDialog::CodeStyleDialog(ICodeStylePreferencesFactory *factory,
m_codeStyle->setValue(codeStyle->value()); m_codeStyle->setValue(codeStyle->value());
m_codeStyle->setId(codeStyle->id()); m_codeStyle->setId(codeStyle->id());
m_codeStyle->setDisplayName(m_originalDisplayName); m_codeStyle->setDisplayName(m_originalDisplayName);
QWidget *editor = factory->createEditor(m_codeStyle, this); QWidget *editor = factory->createEditor(m_codeStyle, project, this);
m_buttons = new QDialogButtonBox( m_buttons = new QDialogButtonBox(
QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
@@ -153,10 +157,13 @@ CodeStyleDialog::~CodeStyleDialog()
} // Internal } // Internal
CodeStyleSelectorWidget::CodeStyleSelectorWidget(ICodeStylePreferencesFactory *factory, QWidget *parent) : CodeStyleSelectorWidget::CodeStyleSelectorWidget(ICodeStylePreferencesFactory *factory,
QWidget(parent), ProjectExplorer::Project *project,
m_factory(factory), QWidget *parent)
m_ui(new Internal::Ui::CodeStyleSelectorWidget) : QWidget(parent)
, m_factory(factory)
, m_project(project)
, m_ui(new Internal::Ui::CodeStyleSelectorWidget)
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
m_ui->importButton->setEnabled(false); m_ui->importButton->setEnabled(false);
@@ -283,7 +290,7 @@ void CodeStyleSelectorWidget::slotEditClicked()
ICodeStylePreferences *codeStyle = m_codeStyle->currentPreferences(); ICodeStylePreferences *codeStyle = m_codeStyle->currentPreferences();
// check if it's read-only // check if it's read-only
Internal::CodeStyleDialog dialog(m_factory, codeStyle, this); Internal::CodeStyleDialog dialog(m_factory, codeStyle, m_project, this);
if (dialog.exec() == QDialog::Accepted) { if (dialog.exec() == QDialog::Accepted) {
ICodeStylePreferences *dialogCodeStyle = dialog.codeStyle(); ICodeStylePreferences *dialogCodeStyle = dialog.codeStyle();
if (codeStyle->isReadOnly()) { if (codeStyle->isReadOnly()) {

View File

@@ -29,6 +29,7 @@
#include <QWidget> #include <QWidget>
namespace ProjectExplorer { class Project; }
namespace TextEditor { namespace TextEditor {
namespace Internal { namespace Ui { class CodeStyleSelectorWidget; } } namespace Internal { namespace Ui { class CodeStyleSelectorWidget; } }
@@ -40,7 +41,9 @@ class TEXTEDITOR_EXPORT CodeStyleSelectorWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit CodeStyleSelectorWidget(ICodeStylePreferencesFactory *factory, QWidget *parent = nullptr); explicit CodeStyleSelectorWidget(ICodeStylePreferencesFactory *factory,
ProjectExplorer::Project *project = nullptr,
QWidget *parent = nullptr);
~CodeStyleSelectorWidget() override; ~CodeStyleSelectorWidget() override;
void setCodeStyle(TextEditor::ICodeStylePreferences *codeStyle); void setCodeStyle(TextEditor::ICodeStylePreferences *codeStyle);
@@ -60,6 +63,7 @@ private:
void updateName(ICodeStylePreferences *codeStyle); void updateName(ICodeStylePreferences *codeStyle);
ICodeStylePreferencesFactory *m_factory; ICodeStylePreferencesFactory *m_factory;
ICodeStylePreferences *m_codeStyle = nullptr; ICodeStylePreferences *m_codeStyle = nullptr;
ProjectExplorer::Project *m_project = nullptr;
QString displayName(ICodeStylePreferences *codeStyle) const; QString displayName(ICodeStylePreferences *codeStyle) const;

View File

@@ -34,7 +34,7 @@ ICodeStylePreferencesFactory::ICodeStylePreferencesFactory()
} }
CodeStyleEditorWidget *ICodeStylePreferencesFactory::createCodeStyleEditor( CodeStyleEditorWidget *ICodeStylePreferencesFactory::createCodeStyleEditor(
ICodeStylePreferences *codeStyle, QWidget *parent) ICodeStylePreferences *codeStyle, ProjectExplorer::Project *project, QWidget *parent)
{ {
return new CodeStyleEditor(this, codeStyle, parent); return new CodeStyleEditor(this, codeStyle, project, parent);
} }

View File

@@ -33,6 +33,8 @@
#include <QWidget> #include <QWidget>
namespace ProjectExplorer { class Project; }
namespace TextEditor { namespace TextEditor {
class ICodeStylePreferences; class ICodeStylePreferences;
@@ -57,11 +59,14 @@ public:
virtual ~ICodeStylePreferencesFactory() = default; virtual ~ICodeStylePreferencesFactory() = default;
virtual CodeStyleEditorWidget *createCodeStyleEditor(ICodeStylePreferences *codeStyle, virtual CodeStyleEditorWidget *createCodeStyleEditor(ICodeStylePreferences *codeStyle,
ProjectExplorer::Project *project = nullptr,
QWidget *parent = nullptr); QWidget *parent = nullptr);
virtual Utils::Id languageId() = 0; virtual Utils::Id languageId() = 0;
virtual QString displayName() = 0; virtual QString displayName() = 0;
virtual ICodeStylePreferences *createCodeStyle() const = 0; virtual ICodeStylePreferences *createCodeStyle() const = 0;
virtual QWidget *createEditor(ICodeStylePreferences *preferences, QWidget *parent) const = 0; virtual QWidget *createEditor(ICodeStylePreferences *preferences,
ProjectExplorer::Project *project = nullptr,
QWidget *parent = nullptr) const = 0;
virtual TextEditor::Indenter *createIndenter(QTextDocument *doc) const = 0; virtual TextEditor::Indenter *createIndenter(QTextDocument *doc) const = 0;
virtual QString snippetProviderGroupId() const = 0; virtual QString snippetProviderGroupId() const = 0;
virtual QString previewText() const = 0; virtual QString previewText() const = 0;