ClangFormat: Fix unsaving properties for global settings

- Fixed behavior "Formatting mode" combobox settings isn't
saved after pressing "Ok" button when no one project is
open. Now it works as expected, settings save after press
"Ok" button.
- Added additional applying interface for ICodeStylePreferenceFactory
which allows pass-through apply call from dialog to the editor.

Note: it doesn't work with read-only code style profiles

Change-Id: If4f0c85e3105550db4ffd9860e94b678f0d9b386
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Artem Sokolovskii
2022-03-29 15:48:15 +02:00
parent 974d37d58a
commit 059d20ed22
15 changed files with 39 additions and 26 deletions

View File

@@ -201,11 +201,6 @@ void ClangFormatConfigWidget::showCombobox()
m_ui->indentingOrFormatting->insertItem(indentIndex(), tr("Indenting only")); m_ui->indentingOrFormatting->insertItem(indentIndex(), tr("Indenting only"));
m_ui->indentingOrFormatting->insertItem(formatIndex(), tr("Full formatting")); m_ui->indentingOrFormatting->insertItem(formatIndex(), tr("Full formatting"));
connect(m_ui->indentingOrFormatting, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [this](int) {
if (m_project)
apply();
});
if (ClangFormatSettings::instance().formatCodeInsteadOfIndent()) if (ClangFormatSettings::instance().formatCodeInsteadOfIndent())
m_ui->indentingOrFormatting->setCurrentIndex(formatIndex()); m_ui->indentingOrFormatting->setCurrentIndex(formatIndex());
else else

View File

@@ -97,8 +97,9 @@ TextEditor::ICodeStylePreferences *CppCodeStylePreferencesFactory::createCodeSty
return new CppCodeStylePreferences(); return new CppCodeStylePreferences();
} }
QWidget *CppCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences, TextEditor::CodeStyleEditorWidget *CppCodeStylePreferencesFactory::createEditor(
QWidget *parent) const TextEditor::ICodeStylePreferences *preferences,
QWidget *parent) const
{ {
auto cppPreferences = qobject_cast<CppCodeStylePreferences *>(preferences); auto cppPreferences = qobject_cast<CppCodeStylePreferences *>(preferences);
if (!cppPreferences) if (!cppPreferences)
@@ -129,7 +130,8 @@ 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(
QWidget *parent) const
{ {
Q_UNUSED(parent) Q_UNUSED(parent)
return {nullptr, ""}; return {nullptr, ""};

View File

@@ -40,8 +40,8 @@ public:
Utils::Id languageId() override; Utils::Id languageId() override;
QString displayName() override; QString displayName() override;
TextEditor::ICodeStylePreferences *createCodeStyle() const override; TextEditor::ICodeStylePreferences *createCodeStyle() const override;
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, TextEditor::CodeStyleEditorWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
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;

View File

@@ -97,7 +97,7 @@ static void applyRefactorings(QTextDocument *textDocument, TextEditorWidget *edi
// ------------------ CppCodeStyleSettingsWidget // ------------------ CppCodeStyleSettingsWidget
CppCodeStylePreferencesWidget::CppCodeStylePreferencesWidget(QWidget *parent) CppCodeStylePreferencesWidget::CppCodeStylePreferencesWidget(QWidget *parent)
: QWidget(parent), : TextEditor::CodeStyleEditorWidget(parent),
m_ui(new Ui::CppCodeStyleSettingsPage) m_ui(new Ui::CppCodeStyleSettingsPage)
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
@@ -363,9 +363,17 @@ void CppCodeStylePreferencesWidget::addTab(CppCodeStyleWidget *page, QString tab
connect(this, &CppCodeStylePreferencesWidget::tabSettingsChanged, connect(this, &CppCodeStylePreferencesWidget::tabSettingsChanged,
page, &CppCodeStyleWidget::setTabSettings); page, &CppCodeStyleWidget::setTabSettings);
connect(this, &CppCodeStylePreferencesWidget::applyEmitted,
page, &CppCodeStyleWidget::apply);
page->synchronize(); page->synchronize();
} }
void CppCodeStylePreferencesWidget::apply()
{
emit applyEmitted();
}
// ------------------ CppCodeStyleSettingsPage // ------------------ CppCodeStyleSettingsPage
CppCodeStyleSettingsPage::CppCodeStyleSettingsPage() CppCodeStyleSettingsPage::CppCodeStyleSettingsPage()

View File

@@ -66,7 +66,7 @@ namespace Internal {
namespace Ui { class CppCodeStyleSettingsPage; } namespace Ui { class CppCodeStyleSettingsPage; }
class CppCodeStylePreferencesWidget : public QWidget class CppCodeStylePreferencesWidget : public TextEditor::CodeStyleEditorWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
@@ -75,6 +75,7 @@ public:
void setCodeStyle(CppCodeStylePreferences *codeStylePreferences); void setCodeStyle(CppCodeStylePreferences *codeStylePreferences);
void addTab(CppCodeStyleWidget *page, QString tabName); void addTab(CppCodeStyleWidget *page, QString tabName);
void apply() override;
private: private:
void decorateEditors(const TextEditor::FontSettings &fontSettings); void decorateEditors(const TextEditor::FontSettings &fontSettings);
@@ -96,6 +97,7 @@ private:
signals: signals:
void codeStyleSettingsChanged(const CppEditor::CppCodeStyleSettings &); void codeStyleSettingsChanged(const CppEditor::CppCodeStyleSettings &);
void tabSettingsChanged(const TextEditor::TabSettings &); void tabSettingsChanged(const TextEditor::TabSettings &);
void applyEmitted();
}; };

View File

@@ -59,8 +59,9 @@ TextEditor::ICodeStylePreferences *NimCodeStylePreferencesFactory::createCodeSty
return new TextEditor::SimpleCodeStylePreferences(); return new TextEditor::SimpleCodeStylePreferences();
} }
QWidget *NimCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences, TextEditor::CodeStyleEditorWidget *NimCodeStylePreferencesFactory::createEditor(
QWidget *parent) const TextEditor::ICodeStylePreferences *preferences,
QWidget *parent) const
{ {
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);

View File

@@ -39,8 +39,8 @@ public:
Utils::Id languageId() override; Utils::Id languageId() override;
QString displayName() override; QString displayName() override;
TextEditor::ICodeStylePreferences *createCodeStyle() const override; TextEditor::ICodeStylePreferences *createCodeStyle() const override;
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, TextEditor::CodeStyleEditorWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
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;

View File

@@ -44,7 +44,7 @@ using namespace TextEditor;
namespace Nim { namespace Nim {
NimCodeStylePreferencesWidget::NimCodeStylePreferencesWidget(ICodeStylePreferences *preferences, QWidget *parent) NimCodeStylePreferencesWidget::NimCodeStylePreferencesWidget(ICodeStylePreferences *preferences, QWidget *parent)
: QWidget(parent) : TextEditor::CodeStyleEditorWidget(parent)
, m_preferences(preferences) , m_preferences(preferences)
, m_ui(new Ui::NimCodeStylePreferencesWidget()) , m_ui(new Ui::NimCodeStylePreferencesWidget())
{ {

View File

@@ -26,6 +26,7 @@
#pragma once #pragma once
#include <QWidget> #include <QWidget>
#include <texteditor/icodestylepreferencesfactory.h>
namespace TextEditor { namespace TextEditor {
class ICodeStylePreferences; class ICodeStylePreferences;
@@ -36,7 +37,7 @@ namespace Nim {
namespace Ui { class NimCodeStylePreferencesWidget; } namespace Ui { class NimCodeStylePreferencesWidget; }
class NimCodeStylePreferencesWidget : public QWidget class NimCodeStylePreferencesWidget : public TextEditor::CodeStyleEditorWidget
{ {
Q_OBJECT Q_OBJECT

View File

@@ -71,8 +71,9 @@ TextEditor::ICodeStylePreferences *QmlJSCodeStylePreferencesFactory::createCodeS
return new TextEditor::SimpleCodeStylePreferences(); return new TextEditor::SimpleCodeStylePreferences();
} }
QWidget *QmlJSCodeStylePreferencesFactory::createEditor(TextEditor::ICodeStylePreferences *preferences, TextEditor::CodeStyleEditorWidget *QmlJSCodeStylePreferencesFactory::createEditor(
QWidget *parent) const TextEditor::ICodeStylePreferences *preferences,
QWidget *parent) const
{ {
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);

View File

@@ -37,8 +37,8 @@ public:
Utils::Id languageId() override; Utils::Id languageId() override;
QString displayName() override; QString displayName() override;
TextEditor::ICodeStylePreferences *createCodeStyle() const override; TextEditor::ICodeStylePreferences *createCodeStyle() const override;
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, TextEditor::CodeStyleEditorWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
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;

View File

@@ -51,7 +51,7 @@ namespace Internal {
// ------------------ CppCodeStyleSettingsWidget // ------------------ CppCodeStyleSettingsWidget
QmlJSCodeStylePreferencesWidget::QmlJSCodeStylePreferencesWidget(QWidget *parent) : QmlJSCodeStylePreferencesWidget::QmlJSCodeStylePreferencesWidget(QWidget *parent) :
QWidget(parent), TextEditor::CodeStyleEditorWidget(parent),
m_ui(new Ui::QmlJSCodeStyleSettingsPage) m_ui(new Ui::QmlJSCodeStyleSettingsPage)
{ {
m_ui->setupUi(this); m_ui->setupUi(this);

View File

@@ -26,6 +26,8 @@
#pragma once #pragma once
#include <coreplugin/dialogs/ioptionspage.h> #include <coreplugin/dialogs/ioptionspage.h>
#include <texteditor/icodestylepreferencesfactory.h>
#include <QWidget> #include <QWidget>
#include <QPointer> #include <QPointer>
@@ -45,7 +47,7 @@ namespace Internal {
namespace Ui { class QmlJSCodeStyleSettingsPage; } namespace Ui { class QmlJSCodeStyleSettingsPage; }
class QmlJSCodeStylePreferencesWidget : public QWidget class QmlJSCodeStylePreferencesWidget : public TextEditor::CodeStyleEditorWidget
{ {
Q_OBJECT Q_OBJECT

View File

@@ -104,7 +104,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); TextEditor::CodeStyleEditorWidget *editor = factory->createEditor(m_codeStyle, this);
m_buttons = new QDialogButtonBox( m_buttons = new QDialogButtonBox(
QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
@@ -120,6 +120,7 @@ CodeStyleDialog::CodeStyleDialog(ICodeStylePreferencesFactory *factory,
connect(m_lineEdit, &QLineEdit::textChanged, this, &CodeStyleDialog::slotDisplayNameChanged); connect(m_lineEdit, &QLineEdit::textChanged, this, &CodeStyleDialog::slotDisplayNameChanged);
connect(m_buttons, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(m_buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(m_buttons, &QDialogButtonBox::accepted, editor, &TextEditor::CodeStyleEditorWidget::apply);
connect(m_buttons, &QDialogButtonBox::rejected, this, &QDialog::reject); connect(m_buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
} }

View File

@@ -61,7 +61,7 @@ public:
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 CodeStyleEditorWidget *createEditor(ICodeStylePreferences *preferences, QWidget *parent) 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;