summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/autotest/autotestconstants.h1
-rw-r--r--src/plugins/autotest/projectsettingswidget.cpp28
-rw-r--r--src/plugins/autotest/projectsettingswidget.h5
-rw-r--r--src/plugins/autotest/testsettingspage.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettingswidget.cpp149
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettingswidget.h61
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettingswidget.ui67
-rw-r--r--src/plugins/clangtools/clangtoolsplugin.cpp3
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp61
-rw-r--r--src/plugins/clangtools/clangtoolsprojectsettingswidget.h8
-rw-r--r--src/plugins/cppeditor/cppcodemodelsettingspage.cpp40
-rw-r--r--src/plugins/cppeditor/cppcodemodelsettingspage.h3
-rw-r--r--src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp43
-rw-r--r--src/plugins/cppeditor/cppquickfixprojectsettingswidget.h7
-rw-r--r--src/plugins/cppeditor/cppquickfixprojectsettingswidget.ui25
-rw-r--r--src/plugins/projectexplorer/CMakeLists.txt1
-rw-r--r--src/plugins/projectexplorer/codestylesettingspropertiespage.cpp3
-rw-r--r--src/plugins/projectexplorer/codestylesettingspropertiespage.h3
-rw-r--r--src/plugins/projectexplorer/dependenciespanel.cpp3
-rw-r--r--src/plugins/projectexplorer/dependenciespanel.h5
-rw-r--r--src/plugins/projectexplorer/editorsettingspropertiespage.cpp15
-rw-r--r--src/plugins/projectexplorer/editorsettingspropertiespage.h5
-rw-r--r--src/plugins/projectexplorer/editorsettingspropertiespage.ui60
-rw-r--r--src/plugins/projectexplorer/namedwidget.cpp2
-rw-r--r--src/plugins/projectexplorer/namedwidget.h3
-rw-r--r--src/plugins/projectexplorer/panelswidget.cpp62
-rw-r--r--src/plugins/projectexplorer/panelswidget.h6
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp1
-rw-r--r--src/plugins/projectexplorer/projectexplorer.qbs1
-rw-r--r--src/plugins/projectexplorer/projectpanelfactory.cpp4
-rw-r--r--src/plugins/projectexplorer/projectpanelfactory.h6
-rw-r--r--src/plugins/projectexplorer/projectsettingswidget.cpp80
-rw-r--r--src/plugins/projectexplorer/projectsettingswidget.h64
-rw-r--r--src/plugins/projectexplorer/projectwindow.cpp5
-rw-r--r--src/plugins/todo/todoprojectsettingswidget.h4
35 files changed, 630 insertions, 206 deletions
diff --git a/src/plugins/autotest/autotestconstants.h b/src/plugins/autotest/autotestconstants.h
index 2021f8e977..6782ab2101 100644
--- a/src/plugins/autotest/autotestconstants.h
+++ b/src/plugins/autotest/autotestconstants.h
@@ -47,6 +47,7 @@ const char AUTOTEST_CONTEXT[] = "Auto Tests";
const char TASK_INDEX[] = "AutoTest.Task.Index";
const char TASK_PARSE[] = "AutoTest.Task.Parse";
const char AUTOTEST_SETTINGS_CATEGORY[] = "ZY.Tests";
+const char AUTOTEST_SETTINGS_ID[] = "A.AutoTest.0.General";
const char AUTOTEST_SETTINGS_TR[] = QT_TRANSLATE_NOOP("AutoTest", "Testing");
const char FRAMEWORK_PREFIX[] = "AutoTest.Framework.";
const char SETTINGSPAGE_PREFIX[] = "A.AutoTest.";
diff --git a/src/plugins/autotest/projectsettingswidget.cpp b/src/plugins/autotest/projectsettingswidget.cpp
index f4ede604fc..34152ff7be 100644
--- a/src/plugins/autotest/projectsettingswidget.cpp
+++ b/src/plugins/autotest/projectsettingswidget.cpp
@@ -25,6 +25,7 @@
#include "projectsettingswidget.h"
+#include "autotestconstants.h"
#include "autotestplugin.h"
#include "testframeworkmanager.h"
#include "testprojectsettings.h"
@@ -53,14 +54,12 @@ static QSpacerItem *createSpacer(QSizePolicy::Policy horizontal, QSizePolicy::Po
ProjectTestSettingsWidget::ProjectTestSettingsWidget(ProjectExplorer::Project *project,
QWidget *parent)
- : QWidget(parent)
+ : ProjectExplorer::ProjectSettingsWidget(parent)
, m_projectSettings(AutotestPlugin::projectSettings(project))
{
+ setGlobalSettingsId(Constants::AUTOTEST_SETTINGS_ID);
auto verticalLayout = new QVBoxLayout(this);
verticalLayout->setContentsMargins(0, 0, 0, 0);
- m_useGlobalSettings = new QComboBox;
- m_useGlobalSettings->addItem(tr("Global"));
- m_useGlobalSettings->addItem(tr("Custom"));
auto generalWidget = new QWidget;
auto groupBoxLayout = new QVBoxLayout;
@@ -83,29 +82,26 @@ ProjectTestSettingsWidget::ProjectTestSettingsWidget(ProjectExplorer::Project *p
generalWidget->setLayout(groupBoxLayout);
horizontalLayout = new QHBoxLayout;
- horizontalLayout->addWidget(m_useGlobalSettings);
- horizontalLayout->addItem(createSpacer(QSizePolicy::Expanding, QSizePolicy::Minimum));
- verticalLayout->addLayout(horizontalLayout);
- horizontalLayout = new QHBoxLayout;
verticalLayout->addItem(createSpacer(QSizePolicy::Minimum, QSizePolicy::Fixed));
horizontalLayout->addWidget(generalWidget);
horizontalLayout->addItem(createSpacer(QSizePolicy::Expanding, QSizePolicy::Minimum));
verticalLayout->addLayout(horizontalLayout);
verticalLayout->addItem(createSpacer(QSizePolicy::Minimum, QSizePolicy::Expanding));
- m_useGlobalSettings->setCurrentIndex(m_projectSettings->useGlobalSettings() ? 0 : 1);
generalWidget->setDisabled(m_projectSettings->useGlobalSettings());
populateFrameworks(m_projectSettings->activeFrameworks(),
m_projectSettings->activeTestTools());
- connect(m_useGlobalSettings, QOverload<int>::of(&QComboBox::currentIndexChanged),
- this, [this, generalWidget](int index) {
- generalWidget->setEnabled(index != 0);
- m_projectSettings->setUseGlobalSettings(index == 0);
- m_syncTimer.start(3000);
- m_syncType = ITestBase::Framework | ITestBase::Tool;
- });
+ setUseGlobalSettings(m_projectSettings->useGlobalSettings());
+ connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged,
+ this, [this, generalWidget](bool useGlobalSettings) {
+ generalWidget->setEnabled(!useGlobalSettings);
+ m_projectSettings->setUseGlobalSettings(useGlobalSettings);
+ m_syncTimer.start(3000);
+ m_syncType = ITestBase::Framework | ITestBase::Tool;
+ });
+
connect(m_activeFrameworks, &QTreeWidget::itemChanged,
this, &ProjectTestSettingsWidget::onActiveFrameworkChanged);
connect(m_runAfterBuild, QOverload<int>::of(&QComboBox::currentIndexChanged),
diff --git a/src/plugins/autotest/projectsettingswidget.h b/src/plugins/autotest/projectsettingswidget.h
index b11429e967..c611904860 100644
--- a/src/plugins/autotest/projectsettingswidget.h
+++ b/src/plugins/autotest/projectsettingswidget.h
@@ -25,6 +25,8 @@
#pragma once
+#include <projectexplorer/projectsettingswidget.h>
+
#include <QTimer>
#include <QWidget>
@@ -45,12 +47,13 @@ namespace Internal {
class TestProjectSettings;
-class ProjectTestSettingsWidget : public QWidget
+class ProjectTestSettingsWidget : public ProjectExplorer::ProjectSettingsWidget
{
Q_OBJECT
public:
explicit ProjectTestSettingsWidget(ProjectExplorer::Project *project,
QWidget *parent = nullptr);
+
private:
void populateFrameworks(const QHash<Autotest::ITestFramework *, bool> &frameworks,
const QHash<Autotest::ITestTool *, bool> &testTools);
diff --git a/src/plugins/autotest/testsettingspage.cpp b/src/plugins/autotest/testsettingspage.cpp
index 5e1e0f6c6d..f03cdd1cf5 100644
--- a/src/plugins/autotest/testsettingspage.cpp
+++ b/src/plugins/autotest/testsettingspage.cpp
@@ -203,7 +203,7 @@ void TestSettingsWidget::onFrameworkItemChanged()
TestSettingsPage::TestSettingsPage(TestSettings *settings)
: m_settings(settings)
{
- setId("A.AutoTest.0.General");
+ setId(Constants::AUTOTEST_SETTINGS_ID);
setDisplayName(tr("General"));
setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
setDisplayCategory(QCoreApplication::translate("AutoTest", Constants::AUTOTEST_SETTINGS_TR));
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
new file mode 100644
index 0000000000..1bf419cba5
--- /dev/null
+++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
@@ -0,0 +1,149 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "clangprojectsettingswidget.h"
+
+#include "clangmodelmanagersupport.h"
+#include "clangprojectsettings.h"
+
+#include <coreplugin/icore.h>
+
+#include <cppeditor/clangdiagnosticconfig.h>
+#include <cppeditor/clangdiagnosticconfigswidget.h>
+#include <cppeditor/cppeditorconstants.h>
+#include <cppeditor/cppcodemodelsettings.h>
+#include <cppeditor/cpptoolsreuse.h>
+
+#include <utils/hostosinfo.h>
+
+namespace ClangCodeModel {
+namespace Internal {
+
+static Utils::Id configIdForProject(ClangProjectSettings &projectSettings)
+{
+ if (projectSettings.useGlobalConfig())
+ return CppEditor::codeModelSettings()->clangDiagnosticConfigId();
+ return projectSettings.warningConfigId();
+}
+
+ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project *project)
+ : m_projectSettings(ClangModelManagerSupport::instance()->projectSettings(project))
+{
+ m_ui.setupUi(this);
+ setGlobalSettingsId(CppEditor::Constants::CPP_CODE_MODEL_SETTINGS_ID);
+
+ using namespace CppEditor;
+
+ m_ui.delayedTemplateParseCheckBox->setVisible(Utils::HostOsInfo::isWindowsHost());
+
+ connect(m_ui.clangDiagnosticConfigsSelectionWidget,
+ &ClangDiagnosticConfigsSelectionWidget::changed,
+ this,
+ [this]() {
+ // Save project's config id
+ const Utils::Id currentConfigId = m_ui.clangDiagnosticConfigsSelectionWidget
+ ->currentConfigId();
+ m_projectSettings.setWarningConfigId(currentConfigId);
+
+ // Save global custom configs
+ const ClangDiagnosticConfigs configs = m_ui.clangDiagnosticConfigsSelectionWidget
+ ->customConfigs();
+ CppEditor::codeModelSettings()->setClangCustomDiagnosticConfigs(configs);
+ CppEditor::codeModelSettings()->toSettings(Core::ICore::settings());
+ });
+
+ connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged,
+ this, &ClangProjectSettingsWidget::onGlobalCustomChanged);
+ connect(m_ui.delayedTemplateParseCheckBox, &QCheckBox::toggled,
+ this, &ClangProjectSettingsWidget::onDelayedTemplateParseClicked);
+ connect(project, &ProjectExplorer::Project::aboutToSaveSettings,
+ this, &ClangProjectSettingsWidget::onAboutToSaveProjectSettings);
+
+ connect(&m_projectSettings, &ClangProjectSettings::changed,
+ this, &ClangProjectSettingsWidget::syncWidgets);
+ connect(CppEditor::codeModelSettings(), &CppEditor::CppCodeModelSettings::changed,
+ this, &ClangProjectSettingsWidget::syncOtherWidgetsToComboBox);
+
+ syncWidgets();
+}
+
+void ClangProjectSettingsWidget::onDelayedTemplateParseClicked(bool checked)
+{
+ // Don't save it when we reset the global config in code
+ if (m_projectSettings.useGlobalConfig())
+ return;
+
+ const QLatin1String extraFlag{checked ? ClangProjectSettings::DelayedTemplateParsing
+ : ClangProjectSettings::NoDelayedTemplateParsing};
+ QStringList options = m_projectSettings.commandLineOptions();
+ options.removeAll(QLatin1String{ClangProjectSettings::DelayedTemplateParsing});
+ options.removeAll(QLatin1String{ClangProjectSettings::NoDelayedTemplateParsing});
+ options.append(extraFlag);
+ m_projectSettings.setCommandLineOptions(options);
+}
+
+void ClangProjectSettingsWidget::onGlobalCustomChanged(bool useGlobalSettings)
+{
+ m_projectSettings.setUseGlobalConfig(useGlobalSettings);
+ syncOtherWidgetsToComboBox();
+}
+
+void ClangProjectSettingsWidget::onAboutToSaveProjectSettings()
+{
+ CppEditor::codeModelSettings()->toSettings(Core::ICore::settings());
+}
+
+void ClangProjectSettingsWidget::syncWidgets()
+{
+ setUseGlobalSettings(m_projectSettings.useGlobalConfig());
+ syncOtherWidgetsToComboBox();
+}
+
+void ClangProjectSettingsWidget::syncOtherWidgetsToComboBox()
+{
+ const QStringList options = m_projectSettings.commandLineOptions();
+ m_ui.delayedTemplateParseCheckBox->setChecked(
+ options.contains(QLatin1String{ClangProjectSettings::DelayedTemplateParsing}));
+
+ const bool isCustom = !m_projectSettings.useGlobalConfig();
+ m_ui.delayedTemplateParseCheckBox->setEnabled(isCustom);
+
+ for (int i = 0; i < m_ui.clangDiagnosticConfigsSelectionWidget->layout()->count(); ++i) {
+ QWidget *widget = m_ui.clangDiagnosticConfigsSelectionWidget->layout()->itemAt(i)->widget();
+ if (widget)
+ widget->setEnabled(isCustom);
+ }
+
+ m_ui.clangDiagnosticConfigsSelectionWidget
+ ->refresh(CppEditor::diagnosticConfigsModel(),
+ configIdForProject(m_projectSettings),
+ [](const CppEditor::ClangDiagnosticConfigs &configs,
+ const Utils::Id &configToSelect) {
+ return new CppEditor::ClangDiagnosticConfigsWidget(configs, configToSelect);
+ });
+}
+
+} // namespace Internal
+} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.h b/src/plugins/clangcodemodel/clangprojectsettingswidget.h
new file mode 100644
index 0000000000..a2086cf227
--- /dev/null
+++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "ui_clangprojectsettingswidget.h"
+
+#include "clangprojectsettings.h"
+#include <projectexplorer/projectsettingswidget.h>
+
+#include <QPointer>
+
+namespace ProjectExplorer { class Project; }
+
+namespace ClangCodeModel {
+namespace Internal {
+
+class ClangProjectSettingsWidget: public ProjectExplorer::ProjectSettingsWidget
+{
+ Q_OBJECT
+
+public:
+ explicit ClangProjectSettingsWidget(ProjectExplorer::Project *project);
+
+private:
+ void onDelayedTemplateParseClicked(bool);
+ void onGlobalCustomChanged(bool useGlobalSettings);
+ void onAboutToSaveProjectSettings();
+
+ void syncWidgets();
+ void syncOtherWidgetsToComboBox();
+
+private:
+ Ui::ClangProjectSettingsWidget m_ui;
+ ClangProjectSettings &m_projectSettings;
+};
+
+} // namespace Internal
+} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.ui b/src/plugins/clangcodemodel/clangprojectsettingswidget.ui
new file mode 100644
index 0000000000..f7200ecead
--- /dev/null
+++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.ui
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ClangCodeModel::Internal::ClangProjectSettingsWidget</class>
+ <widget class="QWidget" name="ClangCodeModel::Internal::ClangProjectSettingsWidget">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>814</width>
+ <height>330</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QCheckBox" name="delayedTemplateParseCheckBox">
+ <property name="toolTip">
+ <string>Parse templates in a MSVC-compliant way. This helps to parse headers for example from Active Template Library (ATL) or Windows Runtime Library (WRL).
+However, using the relaxed and extended rules means also that no highlighting/completion can be provided within template functions.</string>
+ </property>
+ <property name="text">
+ <string>Enable MSVC-compliant template parsing</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="CppEditor::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>CppEditor::ClangDiagnosticConfigsSelectionWidget</class>
+ <extends>QWidget</extends>
+ <header>cppeditor/clangdiagnosticconfigsselectionwidget.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/clangtools/clangtoolsplugin.cpp b/src/plugins/clangtools/clangtoolsplugin.cpp
index 310d64a6ba..bcd759a23b 100644
--- a/src/plugins/clangtools/clangtoolsplugin.cpp
+++ b/src/plugins/clangtools/clangtoolsplugin.cpp
@@ -126,7 +126,8 @@ bool ClangToolsPlugin::initialize(const QStringList &arguments, QString *errorSt
panelFactory->setPriority(100);
panelFactory->setId(Constants::PROJECT_PANEL_ID);
panelFactory->setDisplayName(tr("Clang Tools"));
- panelFactory->setCreateWidgetFunction([](Project *project) { return new ProjectSettingsWidget(project); });
+ panelFactory->setCreateWidgetFunction(
+ [](Project *project) { return new ClangToolsProjectSettingsWidget(project); });
ProjectPanelFactory::registerFactory(panelFactory);
connect(Core::EditorManager::instance(),
diff --git a/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp b/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp
index 417226168c..a46143d6d3 100644
--- a/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp
+++ b/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp
@@ -70,21 +70,13 @@ private:
SuppressedDiagnosticsList m_diagnostics;
};
-enum { UseGlobalSettings, UseCustomSettings }; // Values in sync with m_globalCustomComboBox
-
-ProjectSettingsWidget::ProjectSettingsWidget(ProjectExplorer::Project *project, QWidget *parent) :
- QWidget(parent),
+ClangToolsProjectSettingsWidget::ClangToolsProjectSettingsWidget(ProjectExplorer::Project *project, QWidget *parent) :
+ ProjectExplorer::ProjectSettingsWidget(parent),
m_projectSettings(ClangToolsProjectSettings::getSettings(project))
{
- m_globalCustomComboBox = new QComboBox;
- m_globalCustomComboBox->addItem(tr("Use Global Settings"));
- m_globalCustomComboBox->addItem(tr("Use Customized Settings"));
-
+ setGlobalSettingsId(ClangTools::Constants::SETTINGS_PAGE_ID);
m_restoreGlobal = new QPushButton(tr("Restore Global Settings"));
- auto gotoGlobalSettingsLabel =
- new QLabel("<a href=\"target\">" + tr("Open Global Settings") + "</a>");
-
auto gotoAnalyzerModeLabel =
new QLabel("<a href=\"target\">" + tr("Go to Analyzer") + "</a>");
@@ -100,9 +92,7 @@ ProjectSettingsWidget::ProjectSettingsWidget(ProjectExplorer::Project *project,
Column {
Row {
- m_globalCustomComboBox,
m_restoreGlobal,
- gotoGlobalSettingsLabel,
Stretch(),
gotoAnalyzerModeLabel
},
@@ -122,36 +112,26 @@ ProjectSettingsWidget::ProjectSettingsWidget(ProjectExplorer::Project *project,
}
}.attachTo(this, false);
- // Use global/custom settings combo box
- const int globalOrCustomIndex = m_projectSettings->useGlobalSettings() ? UseGlobalSettings
- : UseCustomSettings;
- m_globalCustomComboBox->setCurrentIndex(globalOrCustomIndex);
- onGlobalCustomChanged(globalOrCustomIndex);
- connect(m_globalCustomComboBox,
- QOverload<int>::of(&QComboBox::currentIndexChanged),
- this,
- QOverload<int>::of(&ProjectSettingsWidget::onGlobalCustomChanged));
+ setUseGlobalSettings(m_projectSettings->useGlobalSettings());
+ onGlobalCustomChanged();
+ connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged,
+ this, QOverload<bool>::of(&ClangToolsProjectSettingsWidget::onGlobalCustomChanged));
// Global settings
connect(ClangToolsSettings::instance(),
&ClangToolsSettings::changed,
this,
- QOverload<>::of(&ProjectSettingsWidget::onGlobalCustomChanged));
+ QOverload<>::of(&ClangToolsProjectSettingsWidget::onGlobalCustomChanged));
connect(m_restoreGlobal, &QPushButton::clicked, this, [this]() {
m_runSettingsWidget->fromSettings(ClangToolsSettings::instance()->runSettings());
});
- // Links
- connect(gotoGlobalSettingsLabel, &QLabel::linkActivated, [](const QString &) {
- Core::ICore::showOptionsDialog(ClangTools::Constants::SETTINGS_PAGE_ID);
- });
-
connect(gotoAnalyzerModeLabel, &QLabel::linkActivated, [](const QString &) {
ClangTool::instance()->selectPerspective();
});
// Run options
- connect(m_runSettingsWidget, &RunSettingsWidget::changed, [this]() {
+ connect(m_runSettingsWidget, &RunSettingsWidget::changed, this, [this]() {
// Save project run settings
m_projectSettings->setRunSettings(m_runSettingsWidget->toSettings());
@@ -165,31 +145,30 @@ ProjectSettingsWidget::ProjectSettingsWidget(ProjectExplorer::Project *project,
// Suppressed diagnostics
auto * const model = new SuppressedDiagnosticsModel(this);
model->setDiagnostics(m_projectSettings->suppressedDiagnostics());
- connect(m_projectSettings.data(), &ClangToolsProjectSettings::suppressedDiagnosticsChanged,
+ connect(m_projectSettings.data(), &ClangToolsProjectSettings::suppressedDiagnosticsChanged, this,
[model, this] {
model->setDiagnostics(m_projectSettings->suppressedDiagnostics());
updateButtonStates();
});
m_diagnosticsView->setModel(model);
updateButtonStates();
- connect(m_diagnosticsView->selectionModel(), &QItemSelectionModel::selectionChanged,
+ connect(m_diagnosticsView->selectionModel(), &QItemSelectionModel::selectionChanged, this,
[this](const QItemSelection &, const QItemSelection &) {
updateButtonStateRemoveSelected();
});
connect(m_removeSelectedButton, &QAbstractButton::clicked,
- [this](bool) { removeSelected(); });
+ this, [this](bool) { removeSelected(); });
connect(m_removeAllButton, &QAbstractButton::clicked,
- [this](bool) { m_projectSettings->removeAllSuppressedDiagnostics();});
+ this, [this](bool) { m_projectSettings->removeAllSuppressedDiagnostics();});
}
-void ProjectSettingsWidget::onGlobalCustomChanged()
+void ClangToolsProjectSettingsWidget::onGlobalCustomChanged()
{
- onGlobalCustomChanged(m_globalCustomComboBox->currentIndex());
+ onGlobalCustomChanged(useGlobalSettings());
}
-void ProjectSettingsWidget::onGlobalCustomChanged(int index)
+void ClangToolsProjectSettingsWidget::onGlobalCustomChanged(bool useGlobal)
{
- const bool useGlobal = index == UseGlobalSettings;
const RunSettings runSettings = useGlobal ? ClangToolsSettings::instance()->runSettings()
: m_projectSettings->runSettings();
m_runSettingsWidget->fromSettings(runSettings);
@@ -199,25 +178,25 @@ void ProjectSettingsWidget::onGlobalCustomChanged(int index)
m_projectSettings->setUseGlobalSettings(useGlobal);
}
-void ProjectSettingsWidget::updateButtonStates()
+void ClangToolsProjectSettingsWidget::updateButtonStates()
{
updateButtonStateRemoveSelected();
updateButtonStateRemoveAll();
}
-void ProjectSettingsWidget::updateButtonStateRemoveSelected()
+void ClangToolsProjectSettingsWidget::updateButtonStateRemoveSelected()
{
const auto selectedRows = m_diagnosticsView->selectionModel()->selectedRows();
QTC_ASSERT(selectedRows.count() <= 1, return);
m_removeSelectedButton->setEnabled(!selectedRows.isEmpty());
}
-void ProjectSettingsWidget::updateButtonStateRemoveAll()
+void ClangToolsProjectSettingsWidget::updateButtonStateRemoveAll()
{
m_removeAllButton->setEnabled(m_diagnosticsView->model()->rowCount() > 0);
}
-void ProjectSettingsWidget::removeSelected()
+void ClangToolsProjectSettingsWidget::removeSelected()
{
const auto selectedRows = m_diagnosticsView->selectionModel()->selectedRows();
QTC_ASSERT(selectedRows.count() == 1, return);
diff --git a/src/plugins/clangtools/clangtoolsprojectsettingswidget.h b/src/plugins/clangtools/clangtoolsprojectsettingswidget.h
index 4d3a9c0ca9..dc3342901a 100644
--- a/src/plugins/clangtools/clangtoolsprojectsettingswidget.h
+++ b/src/plugins/clangtools/clangtoolsprojectsettingswidget.h
@@ -25,6 +25,8 @@
#pragma once
+#include <projectexplorer/projectsettingswidget.h>
+
#include <QWidget>
QT_BEGIN_NAMESPACE
@@ -41,16 +43,16 @@ namespace Internal {
class ClangToolsProjectSettings;
class RunSettingsWidget;
-class ProjectSettingsWidget : public QWidget
+class ClangToolsProjectSettingsWidget : public ProjectExplorer::ProjectSettingsWidget
{
Q_OBJECT
public:
- explicit ProjectSettingsWidget(ProjectExplorer::Project *project, QWidget *parent = nullptr);
+ explicit ClangToolsProjectSettingsWidget(ProjectExplorer::Project *project, QWidget *parent = nullptr);
private:
void onGlobalCustomChanged();
- void onGlobalCustomChanged(int index);
+ void onGlobalCustomChanged(bool useGlobal);
void updateButtonStates();
void updateButtonStateRemoveSelected();
diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp
index bbfbf8bdd4..f82649d11f 100644
--- a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp
+++ b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp
@@ -450,43 +450,35 @@ public:
ClangdProjectSettingsWidget::ClangdProjectSettingsWidget(const ClangdProjectSettings &settings)
: d(new Private(settings))
{
+ setGlobalSettingsId(Constants::CPP_CLANGD_SETTINGS_ID);
const auto layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
- const auto globalSettingsLayout = new QHBoxLayout;
- globalSettingsLayout->addWidget(&d->useGlobalSettingsCheckBox);
- const auto globalSettingsLabel = new QLabel("Use <a href=\"dummy\">global settings</a>");
- connect(globalSettingsLabel, &QLabel::linkActivated,
- this, [] { Core::ICore::showOptionsDialog(Constants::CPP_CLANGD_SETTINGS_ID); });
- globalSettingsLayout->addWidget(globalSettingsLabel);
- globalSettingsLayout->addStretch(1);
- layout->addLayout(globalSettingsLayout);
-
- const auto separator = new QFrame;
- separator->setFrameShape(QFrame::HLine);
- layout->addWidget(separator);
layout->addWidget(&d->widget);
const auto updateGlobalSettingsCheckBox = [this] {
if (ClangdSettings::instance().granularity() == ClangdSettings::Granularity::Session) {
- d->useGlobalSettingsCheckBox.setEnabled(false);
- d->useGlobalSettingsCheckBox.setChecked(true);
+ setUseGlobalSettingsCheckBoxEnabled(false);
+ setUseGlobalSettings(true);
} else {
- d->useGlobalSettingsCheckBox.setEnabled(true);
- d->useGlobalSettingsCheckBox.setChecked(d->settings.useGlobalSettings());
+ setUseGlobalSettingsCheckBoxEnabled(true);
+ setUseGlobalSettings(d->settings.useGlobalSettings());
}
- d->widget.setEnabled(!d->useGlobalSettingsCheckBox.isChecked());
+ d->widget.setEnabled(!useGlobalSettings());
};
+
updateGlobalSettingsCheckBox();
connect(&ClangdSettings::instance(), &ClangdSettings::changed,
this, updateGlobalSettingsCheckBox);
- connect(&d->useGlobalSettingsCheckBox, &QCheckBox::clicked, [this](bool checked) {
- d->widget.setEnabled(!checked);
- d->settings.setUseGlobalSettings(checked);
- if (!checked)
- d->settings.setSettings(d->widget.settingsData());
- });
- connect(&d->widget, &ClangdSettingsWidget::settingsDataChanged, [this] {
+ connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged, this,
+ [this](bool checked) {
+ d->widget.setEnabled(!checked);
+ d->settings.setUseGlobalSettings(checked);
+ if (!checked)
+ d->settings.setSettings(d->widget.settingsData());
+ });
+
+ connect(&d->widget, &ClangdSettingsWidget::settingsDataChanged, this, [this] {
d->settings.setSettings(d->widget.settingsData());
});
}
diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.h b/src/plugins/cppeditor/cppcodemodelsettingspage.h
index 6abe21cf2c..8daae3b9b1 100644
--- a/src/plugins/cppeditor/cppcodemodelsettingspage.h
+++ b/src/plugins/cppeditor/cppcodemodelsettingspage.h
@@ -26,6 +26,7 @@
#pragma once
#include "cppcodemodelsettings.h"
+#include <projectexplorer/projectsettingswidget.h>
#include <coreplugin/dialogs/ioptionspage.h>
@@ -61,7 +62,7 @@ private:
Private * const d;
};
-class ClangdProjectSettingsWidget : public QWidget
+class ClangdProjectSettingsWidget : public ProjectExplorer::ProjectSettingsWidget
{
Q_OBJECT
diff --git a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp
index 3414cb3a6c..62299a937d 100644
--- a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp
+++ b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp
@@ -24,6 +24,7 @@
****************************************************************************/
#include "cppquickfixprojectsettingswidget.h"
+#include "cppeditorconstants.h"
#include "cppquickfixsettingswidget.h"
#include "ui_cppquickfixprojectsettingswidget.h"
@@ -33,9 +34,10 @@ using namespace CppEditor::Internal;
CppQuickFixProjectSettingsWidget::CppQuickFixProjectSettingsWidget(ProjectExplorer::Project *project,
QWidget *parent)
- : QWidget(parent)
+ : ProjectExplorer::ProjectSettingsWidget(parent)
, ui(new Ui::CppQuickFixProjectSettingsWidget)
{
+ setGlobalSettingsId(CppEditor::Constants::QUICK_FIX_SETTINGS_ID);
m_projectSettings = CppQuickFixProjectsSettings::getSettings(project);
ui->setupUi(this);
m_settingsWidget = new CppEditor::Internal::CppQuickFixSettingsWidget(this);
@@ -43,20 +45,20 @@ CppQuickFixProjectSettingsWidget::CppQuickFixProjectSettingsWidget(ProjectExplor
if (QLayout *layout = m_settingsWidget->layout())
layout->setContentsMargins(0, 0, 0, 0);
ui->layout->addWidget(m_settingsWidget);
- connect(ui->comboBox,
- QOverload<int>::of(&QComboBox::currentIndexChanged),
- this,
- &CppQuickFixProjectSettingsWidget::currentItemChanged);
- connect(ui->pushButton_custom,
- &QAbstractButton::clicked,
- this,
- &CppQuickFixProjectSettingsWidget::buttonCustomClicked);
- connect(m_settingsWidget, &CppEditor::Internal::CppQuickFixSettingsWidget::settingsChanged, [this] {
- m_settingsWidget->saveSettings(m_projectSettings->getSettings());
- if (!useGlobalSettings())
- m_projectSettings->saveOwnSettings();
- });
- ui->comboBox->setCurrentIndex(m_projectSettings->isUsingGlobalSettings() ? 0 : 1);
+
+ connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged,
+ this, &CppQuickFixProjectSettingsWidget::currentItemChanged);
+ setUseGlobalSettings(m_projectSettings->isUsingGlobalSettings());
+ currentItemChanged(m_projectSettings->useCustomSettings());
+
+ connect(ui->pushButton_custom, &QAbstractButton::clicked,
+ this, &CppQuickFixProjectSettingsWidget::buttonCustomClicked);
+ connect(m_settingsWidget, &CppEditor::Internal::CppQuickFixSettingsWidget::settingsChanged, this,
+ [this] {
+ m_settingsWidget->saveSettings(m_projectSettings->getSettings());
+ if (!useGlobalSettings())
+ m_projectSettings->saveOwnSettings();
+ });
}
CppQuickFixProjectSettingsWidget::~CppQuickFixProjectSettingsWidget()
@@ -64,9 +66,9 @@ CppQuickFixProjectSettingsWidget::~CppQuickFixProjectSettingsWidget()
delete ui;
}
-void CppQuickFixProjectSettingsWidget::currentItemChanged()
+void CppQuickFixProjectSettingsWidget::currentItemChanged(bool useGlobalSettings)
{
- if (useGlobalSettings()) {
+ if (useGlobalSettings) {
const auto &path = m_projectSettings->filePathOfSettingsFile();
ui->pushButton_custom->setToolTip(tr("Custom settings are saved in a file. If you use the "
"global settings, you can delete that file."));
@@ -75,7 +77,7 @@ void CppQuickFixProjectSettingsWidget::currentItemChanged()
m_projectSettings->useGlobalSettings();
} else /*Custom*/ {
if (!m_projectSettings->useCustomSettings()) {
- ui->comboBox->setCurrentIndex(0);
+ setUseGlobalSettings(!m_projectSettings->useCustomSettings());
return;
}
ui->pushButton_custom->setToolTip(tr("Resets all settings to the global settings."));
@@ -99,8 +101,3 @@ void CppQuickFixProjectSettingsWidget::buttonCustomClicked()
m_settingsWidget->loadSettings(m_projectSettings->getSettings());
}
}
-
-bool CppQuickFixProjectSettingsWidget::useGlobalSettings()
-{
- return ui->comboBox->currentIndex() == 0;
-}
diff --git a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.h b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.h
index d0347973c6..6921bb658d 100644
--- a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.h
+++ b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.h
@@ -26,6 +26,7 @@
#pragma once
#include "cppquickfixprojectsettings.h"
+#include <projectexplorer/projectsettingswidget.h>
#include <QWidget>
@@ -38,7 +39,7 @@ namespace ProjectExplorer { class Project; }
namespace CppEditor {
namespace Internal {
class CppQuickFixSettingsWidget;
-class CppQuickFixProjectSettingsWidget : public QWidget
+class CppQuickFixProjectSettingsWidget : public ProjectExplorer::ProjectSettingsWidget
{
Q_OBJECT
@@ -48,12 +49,10 @@ public:
~CppQuickFixProjectSettingsWidget();
private slots:
- void currentItemChanged();
+ void currentItemChanged(bool useGlobalSettings);
void buttonCustomClicked();
private:
- bool useGlobalSettings();
-
QT_PREPEND_NAMESPACE(Ui)::CppQuickFixProjectSettingsWidget *ui;
CppQuickFixSettingsWidget *m_settingsWidget;
CppQuickFixProjectsSettings::CppQuickFixProjectsSettingsPtr m_projectSettings;
diff --git a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.ui b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.ui
index b90b668a74..5628cd4033 100644
--- a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.ui
+++ b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.ui
@@ -23,33 +23,16 @@
<property name="bottomMargin">
<number>0</number>
</property>
- <item row="0" column="1">
+ <item row="2" column="0" colspan="2">
+ <layout class="QVBoxLayout" name="layout"/>
+ </item>
+ <item row="1" column="0">
<widget class="QPushButton" name="pushButton_custom">
<property name="text">
<string/>
</property>
</widget>
</item>
- <item row="1" column="0" colspan="2">
- <layout class="QVBoxLayout" name="layout"/>
- </item>
- <item row="0" column="0">
- <widget class="QComboBox" name="comboBox">
- <property name="currentIndex">
- <number>-1</number>
- </property>
- <item>
- <property name="text">
- <string>Global Settings</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Custom Settings</string>
- </property>
- </item>
- </widget>
- </item>
</layout>
</widget>
<resources/>
diff --git a/src/plugins/projectexplorer/CMakeLists.txt b/src/plugins/projectexplorer/CMakeLists.txt
index ed6686e11a..e7a11d9a4b 100644
--- a/src/plugins/projectexplorer/CMakeLists.txt
+++ b/src/plugins/projectexplorer/CMakeLists.txt
@@ -143,6 +143,7 @@ add_qtc_plugin(ProjectExplorer
projectmodels.cpp projectmodels.h
projectnodes.cpp projectnodes.h
projectpanelfactory.cpp projectpanelfactory.h
+ projectsettingswidget.cpp projectsettingswidget.h
projecttree.cpp projecttree.h
projecttreewidget.cpp projecttreewidget.h
projectwelcomepage.cpp projectwelcomepage.h
diff --git a/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp b/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp
index 7abca7b083..bed166bdb9 100644
--- a/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp
@@ -34,9 +34,10 @@ using namespace TextEditor;
using namespace ProjectExplorer;
using namespace ProjectExplorer::Internal;
-CodeStyleSettingsWidget::CodeStyleSettingsWidget(Project *project) : QWidget(), m_project(project)
+CodeStyleSettingsWidget::CodeStyleSettingsWidget(Project *project) : ProjectSettingsWidget(), m_project(project)
{
m_ui.setupUi(this);
+ setUseGlobalSettingsCheckBoxVisible(false);
const EditorConfiguration *config = m_project->editorConfiguration();
diff --git a/src/plugins/projectexplorer/codestylesettingspropertiespage.h b/src/plugins/projectexplorer/codestylesettingspropertiespage.h
index 7ab03ff7ac..e4ab5e1121 100644
--- a/src/plugins/projectexplorer/codestylesettingspropertiespage.h
+++ b/src/plugins/projectexplorer/codestylesettingspropertiespage.h
@@ -26,6 +26,7 @@
#pragma once
#include "ui_codestylesettingspropertiespage.h"
+#include <projectexplorer/projectsettingswidget.h>
namespace ProjectExplorer {
class EditorConfiguration;
@@ -33,7 +34,7 @@ class Project;
namespace Internal {
-class CodeStyleSettingsWidget : public QWidget
+class CodeStyleSettingsWidget : public ProjectSettingsWidget
{
Q_OBJECT
public:
diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp
index 94ccadbd57..1f68eae115 100644
--- a/src/plugins/projectexplorer/dependenciespanel.cpp
+++ b/src/plugins/projectexplorer/dependenciespanel.cpp
@@ -210,10 +210,11 @@ void DependenciesView::updateSizeHint()
// DependenciesWidget
//
-DependenciesWidget::DependenciesWidget(Project *project, QWidget *parent) : QWidget(parent),
+DependenciesWidget::DependenciesWidget(Project *project, QWidget *parent) : ProjectSettingsWidget(parent),
m_project(project),
m_model(new DependenciesModel(project, this))
{
+ setUseGlobalSettingsCheckBoxVisible(false);
auto vbox = new QVBoxLayout(this);
vbox->setContentsMargins(0, 0, 0, 0);
m_detailsContainer = new Utils::DetailsWidget(this);
diff --git a/src/plugins/projectexplorer/dependenciespanel.h b/src/plugins/projectexplorer/dependenciespanel.h
index b1e4d78f59..73f864a854 100644
--- a/src/plugins/projectexplorer/dependenciespanel.h
+++ b/src/plugins/projectexplorer/dependenciespanel.h
@@ -25,8 +25,9 @@
#pragma once
-#include <QAbstractListModel>
+#include <projectexplorer/projectsettingswidget.h>
+#include <QAbstractListModel>
#include <QTreeView>
QT_BEGIN_NAMESPACE
@@ -81,7 +82,7 @@ private:
QSize m_sizeHint;
};
-class DependenciesWidget : public QWidget
+class DependenciesWidget : public ProjectSettingsWidget
{
Q_OBJECT
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
index 2ed5d78376..b985a25483 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
@@ -27,6 +27,7 @@
#include "editorconfiguration.h"
#include "project.h"
+#include <texteditor/texteditorconstants.h>
#include <texteditor/behaviorsettings.h>
#include <texteditor/extraencodingsettings.h>
#include <texteditor/marginsettings.h>
@@ -38,18 +39,20 @@
using namespace ProjectExplorer;
using namespace ProjectExplorer::Internal;
-EditorSettingsWidget::EditorSettingsWidget(Project *project) : QWidget(), m_project(project)
+EditorSettingsWidget::EditorSettingsWidget(Project *project) : ProjectSettingsWidget(), m_project(project)
{
m_ui.setupUi(this);
+ setGlobalSettingsId(TextEditor::Constants::TEXT_EDITOR_BEHAVIOR_SETTINGS);
const EditorConfiguration *config = m_project->editorConfiguration();
settingsToUi(config);
- globalSettingsActivated(config->useGlobalSettings() ? 0 : 1);
+ globalSettingsActivated(config->useGlobalSettings());
+ setUseGlobalSettings(config->useGlobalSettings());
-
- connect(m_ui.globalSelector, QOverload<int>::of(&QComboBox::activated),
+ connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged,
this, &EditorSettingsWidget::globalSettingsActivated);
+
connect(m_ui.restoreButton, &QAbstractButton::clicked,
this, &EditorSettingsWidget::restoreDefaultValues);
@@ -78,7 +81,6 @@ void EditorSettingsWidget::settingsToUi(const EditorConfiguration *config)
m_ui.useIndenter->setChecked(config->marginSettings().m_useIndenter);
m_ui.wrapColumn->setValue(config->marginSettings().m_marginColumn);
m_ui.behaviorSettingsWidget->setCodeStyle(config->codeStyle());
- m_ui.globalSelector->setCurrentIndex(config->useGlobalSettings() ? 0 : 1);
m_ui.behaviorSettingsWidget->setAssignedCodec(config->textCodec());
m_ui.behaviorSettingsWidget->setAssignedTypingSettings(config->typingSettings());
m_ui.behaviorSettingsWidget->setAssignedStorageSettings(config->storageSettings());
@@ -86,9 +88,8 @@ void EditorSettingsWidget::settingsToUi(const EditorConfiguration *config)
m_ui.behaviorSettingsWidget->setAssignedExtraEncodingSettings(config->extraEncodingSettings());
}
-void EditorSettingsWidget::globalSettingsActivated(int index)
+void EditorSettingsWidget::globalSettingsActivated(bool useGlobal)
{
- const bool useGlobal = !index;
m_ui.displaySettings->setEnabled(!useGlobal);
m_ui.behaviorSettingsWidget->setActive(!useGlobal);
m_ui.restoreButton->setEnabled(!useGlobal);
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.h b/src/plugins/projectexplorer/editorsettingspropertiespage.h
index 6f3fdb9670..a153ce8d44 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.h
@@ -26,6 +26,7 @@
#pragma once
#include "ui_editorsettingspropertiespage.h"
+#include <projectexplorer/projectsettingswidget.h>
namespace ProjectExplorer {
class EditorConfiguration;
@@ -33,14 +34,14 @@ class Project;
namespace Internal {
-class EditorSettingsWidget : public QWidget
+class EditorSettingsWidget : public ProjectSettingsWidget
{
Q_OBJECT
public:
explicit EditorSettingsWidget(Project *project);
private:
- void globalSettingsActivated(int index);
+ void globalSettingsActivated(bool useGlobal);
void restoreDefaultValues();
void settingsToUi(const EditorConfiguration *config);
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.ui b/src/plugins/projectexplorer/editorsettingspropertiespage.ui
index 092249ed99..8cac97dc08 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.ui
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.ui
@@ -6,56 +6,19 @@
<rect>
<x>0</x>
<y>0</y>
- <width>401</width>
+ <width>601</width>
<height>173</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
- <property name="margin">
- <number>0</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Editor settings:</string>
- </property>
- </widget>
- </item>
<item row="0" column="1">
- <widget class="QComboBox" name="globalSelector">
- <item>
- <property name="text">
- <string>Global</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Custom</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="0" column="2">
<widget class="QPushButton" name="restoreButton">
<property name="text">
<string>Restore Global</string>
</property>
</widget>
</item>
- <item row="0" column="3">
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>3</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="1" column="0" colspan="4">
+ <item row="1" column="0" colspan="3">
<widget class="QGroupBox" name="displaySettings">
<property name="enabled">
<bool>false</bool>
@@ -107,9 +70,6 @@
</layout>
</widget>
</item>
- <item row="2" column="0" colspan="4">
- <widget class="TextEditor::BehaviorSettingsWidget" name="behaviorSettingsWidget" native="true"/>
- </item>
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
@@ -123,6 +83,22 @@
</property>
</spacer>
</item>
+ <item row="2" column="0" colspan="3">
+ <widget class="TextEditor::BehaviorSettingsWidget" name="behaviorSettingsWidget" native="true"/>
+ </item>
+ <item row="0" column="2">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>3</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</widget>
<customwidgets>
diff --git a/src/plugins/projectexplorer/namedwidget.cpp b/src/plugins/projectexplorer/namedwidget.cpp
index 9aed84c73a..5afca48315 100644
--- a/src/plugins/projectexplorer/namedwidget.cpp
+++ b/src/plugins/projectexplorer/namedwidget.cpp
@@ -28,7 +28,7 @@
namespace ProjectExplorer {
NamedWidget::NamedWidget(const QString &displayName, QWidget *parent)
- : QWidget(parent), m_displayName(displayName)
+ : ProjectSettingsWidget(parent), m_displayName(displayName)
{
}
diff --git a/src/plugins/projectexplorer/namedwidget.h b/src/plugins/projectexplorer/namedwidget.h
index b1e80111e2..6cc3aae174 100644
--- a/src/plugins/projectexplorer/namedwidget.h
+++ b/src/plugins/projectexplorer/namedwidget.h
@@ -26,12 +26,13 @@
#pragma once
#include "projectexplorer_export.h"
+#include "projectsettingswidget.h"
#include <QWidget>
namespace ProjectExplorer {
-class PROJECTEXPLORER_EXPORT NamedWidget : public QWidget
+class PROJECTEXPLORER_EXPORT NamedWidget : public ProjectSettingsWidget
{
public:
explicit NamedWidget(const QString &displayName, QWidget *parent = nullptr);
diff --git a/src/plugins/projectexplorer/panelswidget.cpp b/src/plugins/projectexplorer/panelswidget.cpp
index b18c799dd1..da2e7ba661 100644
--- a/src/plugins/projectexplorer/panelswidget.cpp
+++ b/src/plugins/projectexplorer/panelswidget.cpp
@@ -25,11 +25,14 @@
#include "panelswidget.h"
+#include <coreplugin/icore.h>
#include <utils/qtcassert.h>
#include <utils/styledbar.h>
#include <utils/stylehelper.h>
#include <utils/theme/theme.h>
+#include <QCheckBox>
+#include <QHBoxLayout>
#include <QLabel>
#include <QPainter>
#include <QScrollArea>
@@ -41,7 +44,7 @@ namespace ProjectExplorer {
namespace {
const int ABOVE_HEADING_MARGIN = 10;
-const int ABOVE_CONTENTS_MARGIN = 4;
+const int CONTENTS_MARGIN = 5;
const int BELOW_CONTENTS_MARGIN = 16;
}
@@ -85,7 +88,16 @@ PanelsWidget::PanelsWidget(QWidget *parent) : QWidget(parent)
PanelsWidget::PanelsWidget(const QString &displayName, QWidget *widget)
: PanelsWidget(nullptr)
{
- addPropertiesPanel(displayName, widget);
+ addPropertiesPanel(displayName);
+ addWidget(widget);
+}
+
+PanelsWidget::PanelsWidget(const QString &displayName, ProjectSettingsWidget *widget)
+ : PanelsWidget(nullptr)
+{
+ addPropertiesPanel(displayName);
+ addGlobalSettingsProperties(widget);
+ addWidget(widget);
}
PanelsWidget::~PanelsWidget() = default;
@@ -102,7 +114,7 @@ PanelsWidget::~PanelsWidget() = default;
* | widget |
* +------------+ BELOW_CONTENTS_MARGIN
*/
-void PanelsWidget::addPropertiesPanel(const QString &displayName, QWidget *widget)
+void PanelsWidget::addPropertiesPanel(const QString &displayName)
{
// name:
auto nameLabel = new QLabel(m_root);
@@ -120,11 +132,51 @@ void PanelsWidget::addPropertiesPanel(const QString &displayName, QWidget *widge
line->setForegroundRole(QPalette::Midlight);
line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
m_layout->addWidget(line);
+}
- // add the widget:
- widget->setContentsMargins(0, ABOVE_CONTENTS_MARGIN, 0, BELOW_CONTENTS_MARGIN);
+void PanelsWidget::addWidget(QWidget *widget)
+{
+ widget->setContentsMargins(0, CONTENTS_MARGIN, 0, BELOW_CONTENTS_MARGIN);
widget->setParent(m_root);
m_layout->addWidget(widget);
}
+void PanelsWidget::addGlobalSettingsProperties(ProjectSettingsWidget *widget)
+{
+ if (!widget->isUseGlobalSettingsCheckBoxVisible())
+ return;
+ m_layout->setContentsMargins(0, 0, 0, 0);
+ const auto useGlobalSettingsCheckBox = new QCheckBox;
+ useGlobalSettingsCheckBox->setChecked(widget->useGlobalSettings());
+ useGlobalSettingsCheckBox->setEnabled(widget->isUseGlobalSettingsCheckBoxEnabled());
+ const auto settingsLabel = new QLabel("Use <a href=\"dummy\">global settings</a>");
+ settingsLabel->setContentsMargins(CONTENTS_MARGIN, 0, 0, 0);
+ settingsLabel->setEnabled(widget->isUseGlobalSettingsCheckBoxEnabled());
+ const auto horizontLayout = new QHBoxLayout;
+ horizontLayout->setContentsMargins(0, CONTENTS_MARGIN, 0, CONTENTS_MARGIN);
+ horizontLayout->addWidget(useGlobalSettingsCheckBox);
+ horizontLayout->addWidget(settingsLabel);
+ horizontLayout->addStretch(1);
+ m_layout->addLayout(horizontLayout);
+
+ auto separator = new QFrame(m_root);
+ separator->setFrameShape(QFrame::HLine);
+ m_layout->addWidget(separator);
+
+ connect(widget, &ProjectSettingsWidget::useGlobalSettingsCheckBoxEnabledChanged, this,
+ [useGlobalSettingsCheckBox, settingsLabel] (bool enabled) {
+ useGlobalSettingsCheckBox->setEnabled(enabled);
+ settingsLabel->setEnabled(enabled);
+ });
+
+ connect(useGlobalSettingsCheckBox, &QCheckBox::stateChanged,
+ widget, &ProjectSettingsWidget::setUseGlobalSettings);
+ connect(widget, &ProjectSettingsWidget::useGlobalSettingsChanged,
+ useGlobalSettingsCheckBox, &QCheckBox::setChecked);
+
+ connect(settingsLabel, &QLabel::linkActivated, this, [widget] {
+ Core::ICore::showOptionsDialog(widget->globalSettingsId());
+ });
+}
+
} // ProjectExplorer
diff --git a/src/plugins/projectexplorer/panelswidget.h b/src/plugins/projectexplorer/panelswidget.h
index b213f2191b..5c6691d802 100644
--- a/src/plugins/projectexplorer/panelswidget.h
+++ b/src/plugins/projectexplorer/panelswidget.h
@@ -26,6 +26,7 @@
#pragma once
#include "projectexplorer_export.h"
+#include "projectsettingswidget.h"
#include <QWidget>
@@ -42,9 +43,12 @@ class PROJECTEXPLORER_EXPORT PanelsWidget : public QWidget
public:
explicit PanelsWidget(QWidget *parent = nullptr);
PanelsWidget(const QString &displayName, QWidget *widget);
+ PanelsWidget(const QString &displayName, ProjectSettingsWidget *widget);
~PanelsWidget() override;
- void addPropertiesPanel(const QString &displayName, QWidget *widget);
+ void addPropertiesPanel(const QString &displayName);
+ void addGlobalSettingsProperties(ProjectSettingsWidget *widget);
+ void addWidget(QWidget *widget);
static int constexpr PanelVMargin = 14;
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 05f88344e3..0eb1265073 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -393,6 +393,7 @@ class ProjectEnvironmentWidget : public NamedWidget
public:
explicit ProjectEnvironmentWidget(Project *project) : NamedWidget(tr("Project Environment"))
{
+ setUseGlobalSettingsCheckBoxVisible(false);
const auto vbox = new QVBoxLayout(this);
vbox->setContentsMargins(0, 0, 0, 0);
const auto envWidget = new EnvironmentWidget(this, EnvironmentWidget::TypeLocal);
diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs
index f231c7fbdd..4e89ad84d9 100644
--- a/src/plugins/projectexplorer/projectexplorer.qbs
+++ b/src/plugins/projectexplorer/projectexplorer.qbs
@@ -119,6 +119,7 @@ Project {
"projectmodels.cpp", "projectmodels.h",
"projectnodes.cpp", "projectnodes.h",
"projectpanelfactory.cpp", "projectpanelfactory.h",
+ "projectsettingswidget.cpp", "projectsettingswidget.h",
"projecttree.cpp",
"projecttree.h",
"projecttreewidget.cpp", "projecttreewidget.h",
diff --git a/src/plugins/projectexplorer/projectpanelfactory.cpp b/src/plugins/projectexplorer/projectpanelfactory.cpp
index 5dca1340b1..e96dbfdbc4 100644
--- a/src/plugins/projectexplorer/projectpanelfactory.cpp
+++ b/src/plugins/projectexplorer/projectpanelfactory.cpp
@@ -28,6 +28,8 @@
#include "project.h"
#include "projectwindow.h"
+#include <utils/layoutbuilder.h>
+
using namespace ProjectExplorer::Internal;
using namespace Utils;
@@ -90,7 +92,7 @@ void ProjectPanelFactory::setId(Utils::Id id)
m_id = id;
}
-QWidget *ProjectPanelFactory::createWidget(Project *project) const
+ProjectSettingsWidget *ProjectPanelFactory::createWidget(Project *project) const
{
return m_widgetCreator(project);
}
diff --git a/src/plugins/projectexplorer/projectpanelfactory.h b/src/plugins/projectexplorer/projectpanelfactory.h
index 9c5323d6d5..f5d68f8bf4 100644
--- a/src/plugins/projectexplorer/projectpanelfactory.h
+++ b/src/plugins/projectexplorer/projectpanelfactory.h
@@ -27,6 +27,8 @@
#include "projectexplorer_export.h"
+#include "projectsettingswidget.h"
+
#include <utils/id.h>
#include <utils/treemodel.h>
@@ -54,7 +56,7 @@ public:
// interface for users of ProjectPanelFactory
bool supports(Project *project);
- using WidgetCreator = std::function<QWidget *(Project *)>;
+ using WidgetCreator = std::function<ProjectSettingsWidget *(Project *)>;
// interface for "implementations" of ProjectPanelFactory
// by default all projects are supported, only set a custom supports function
@@ -70,7 +72,7 @@ public:
Utils::TreeItem *createPanelItem(Project *project);
void setCreateWidgetFunction(const WidgetCreator &createWidgetFunction);
- QWidget *createWidget(Project *project) const;
+ ProjectSettingsWidget *createWidget(Project *project) const;
private:
friend class ProjectExplorerPlugin;
diff --git a/src/plugins/projectexplorer/projectsettingswidget.cpp b/src/plugins/projectexplorer/projectsettingswidget.cpp
new file mode 100644
index 0000000000..01c0df28f0
--- /dev/null
+++ b/src/plugins/projectexplorer/projectsettingswidget.cpp
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "projectsettingswidget.h"
+
+namespace ProjectExplorer {
+
+ProjectSettingsWidget::ProjectSettingsWidget(QWidget *parent)
+ : QWidget(parent)
+{}
+
+void ProjectSettingsWidget::setUseGlobalSettings(bool useGlobalSettings)
+{
+ if (m_useGlobalSettings == useGlobalSettings)
+ return;
+ m_useGlobalSettings = useGlobalSettings;
+ emit useGlobalSettingsChanged(useGlobalSettings);
+}
+
+bool ProjectSettingsWidget::useGlobalSettings() const
+{
+ return m_useGlobalSettings;
+}
+
+void ProjectSettingsWidget::setUseGlobalSettingsCheckBoxEnabled(bool enabled)
+{
+ if (m_useGlobalSettingsCheckBoxEnabled == enabled)
+ return;
+ m_useGlobalSettingsCheckBoxEnabled = enabled;
+ emit useGlobalSettingsCheckBoxEnabledChanged(enabled);
+}
+
+bool ProjectSettingsWidget::isUseGlobalSettingsCheckBoxEnabled() const
+{
+ return m_useGlobalSettingsCheckBoxEnabled;
+}
+
+bool ProjectSettingsWidget::isUseGlobalSettingsCheckBoxVisible() const
+{
+ return m_useGlobalSettingsCheckBoxVisibleVisible;
+}
+
+void ProjectSettingsWidget::setUseGlobalSettingsCheckBoxVisible(bool visible)
+{
+ m_useGlobalSettingsCheckBoxVisibleVisible = visible;
+}
+
+Utils::Id ProjectSettingsWidget::globalSettingsId() const
+{
+ return m_globalSettingsId;
+}
+
+void ProjectSettingsWidget::setGlobalSettingsId(Utils::Id globalId)
+{
+ m_globalSettingsId = globalId;
+}
+
+} // ProjectExplorer
diff --git a/src/plugins/projectexplorer/projectsettingswidget.h b/src/plugins/projectexplorer/projectsettingswidget.h
new file mode 100644
index 0000000000..c223163b2b
--- /dev/null
+++ b/src/plugins/projectexplorer/projectsettingswidget.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "projectexplorer_export.h"
+#include "projectexplorer/project.h"
+
+#include <utils/id.h>
+
+namespace ProjectExplorer {
+
+class PROJECTEXPLORER_EXPORT ProjectSettingsWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit ProjectSettingsWidget(QWidget *parent = nullptr);
+
+ void setUseGlobalSettings(bool useGlobalSettings);
+ bool useGlobalSettings() const;
+
+ void setUseGlobalSettingsCheckBoxEnabled(bool enadled);
+ bool isUseGlobalSettingsCheckBoxEnabled() const;
+
+ bool isUseGlobalSettingsCheckBoxVisible() const;
+ Utils::Id globalSettingsId() const;
+
+protected:
+ void setUseGlobalSettingsCheckBoxVisible(bool visible);
+ void setGlobalSettingsId(Utils::Id globalId);
+
+signals:
+ void useGlobalSettingsChanged(bool useGlobalSettings);
+ void useGlobalSettingsCheckBoxEnabledChanged(bool enadled);
+
+private:
+ bool m_useGlobalSettings = true;
+ bool m_useGlobalSettingsCheckBoxEnabled = true;
+ bool m_useGlobalSettingsCheckBoxVisibleVisible = true;
+ Utils::Id m_globalSettingsId;
+};
+} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index 8997c8d6d6..0fa0b42444 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -26,15 +26,16 @@
#include "projectwindow.h"
#include "buildinfo.h"
-#include "projectexplorerconstants.h"
#include "kit.h"
#include "kitmanager.h"
#include "kitoptionspage.h"
#include "panelswidget.h"
#include "project.h"
#include "projectexplorer.h"
+#include "projectexplorerconstants.h"
#include "projectimporter.h"
#include "projectpanelfactory.h"
+#include "projectsettingswidget.h"
#include "session.h"
#include "target.h"
#include "targetsettingspanel.h"
@@ -261,7 +262,7 @@ QVariant MiscSettingsPanelItem::data(int column, int role) const
if (role == PanelWidgetRole) {
if (!m_widget) {
- QWidget *widget = m_factory->createWidget(m_project);
+ ProjectSettingsWidget *widget = m_factory->createWidget(m_project);
m_widget = new PanelsWidget(m_factory->displayName(), widget);
m_widget->setFocusProxy(widget);
}
diff --git a/src/plugins/todo/todoprojectsettingswidget.h b/src/plugins/todo/todoprojectsettingswidget.h
index d711922eb6..acbf5ea44c 100644
--- a/src/plugins/todo/todoprojectsettingswidget.h
+++ b/src/plugins/todo/todoprojectsettingswidget.h
@@ -25,6 +25,8 @@
#pragma once
+#include <projectexplorer/projectsettingswidget.h>
+
#include <QWidget>
QT_BEGIN_NAMESPACE
@@ -42,7 +44,7 @@ namespace Ui {
class TodoProjectSettingsWidget;
}
-class TodoProjectSettingsWidget : public QWidget
+class TodoProjectSettingsWidget : public ProjectExplorer::ProjectSettingsWidget
{
Q_OBJECT