ProjectExplorer: Use IOptionPage::setWidgetCreator() for settings

Change-Id: I4267e577ce91d97e633e8cdf513bde496d3f7c09
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2023-04-20 11:02:06 +02:00
parent b23dbc310c
commit 1a1b040642
2 changed files with 21 additions and 49 deletions

View File

@@ -25,15 +25,14 @@
using namespace Core; using namespace Core;
using namespace Utils; using namespace Utils;
namespace ProjectExplorer { namespace ProjectExplorer::Internal {
namespace Internal {
enum { UseCurrentDirectory, UseProjectDirectory }; enum { UseCurrentDirectory, UseProjectDirectory };
class ProjectExplorerSettingsWidget : public QWidget class ProjectExplorerSettingsWidget : public IOptionsPageWidget
{ {
public: public:
explicit ProjectExplorerSettingsWidget(QWidget *parent = nullptr); ProjectExplorerSettingsWidget();
ProjectExplorerSettings settings() const; ProjectExplorerSettings settings() const;
void setSettings(const ProjectExplorerSettings &s); void setSettings(const ProjectExplorerSettings &s);
@@ -44,6 +43,13 @@ public:
bool useProjectsDirectory(); bool useProjectsDirectory();
void setUseProjectsDirectory(bool v); void setUseProjectsDirectory(bool v);
void apply() final
{
ProjectExplorerPlugin::setProjectExplorerSettings(settings());
DocumentManager::setProjectsDirectory(projectsDirectory());
DocumentManager::setUseProjectsDirectory(useProjectsDirectory());
}
private: private:
void slotDirectoryButtonGroupChanged(); void slotDirectoryButtonGroupChanged();
@@ -68,8 +74,7 @@ private:
QButtonGroup *m_directoryButtonGroup; QButtonGroup *m_directoryButtonGroup;
}; };
ProjectExplorerSettingsWidget::ProjectExplorerSettingsWidget(QWidget *parent) : ProjectExplorerSettingsWidget::ProjectExplorerSettingsWidget()
QWidget(parent)
{ {
m_currentDirectoryRadioButton = new QRadioButton(Tr::tr("Current directory")); m_currentDirectoryRadioButton = new QRadioButton(Tr::tr("Current directory"));
m_directoryRadioButton = new QRadioButton(Tr::tr("Directory")); m_directoryRadioButton = new QRadioButton(Tr::tr("Directory"));
@@ -165,6 +170,10 @@ ProjectExplorerSettingsWidget::ProjectExplorerSettingsWidget(QWidget *parent) :
connect(m_directoryButtonGroup, &QButtonGroup::buttonClicked, connect(m_directoryButtonGroup, &QButtonGroup::buttonClicked,
this, &ProjectExplorerSettingsWidget::slotDirectoryButtonGroupChanged); this, &ProjectExplorerSettingsWidget::slotDirectoryButtonGroupChanged);
setSettings(ProjectExplorerPlugin::projectExplorerSettings());
setProjectsDirectory(DocumentManager::projectsDirectory());
setUseProjectsDirectory(DocumentManager::useProjectsDirectory());
} }
ProjectExplorerSettings ProjectExplorerSettingsWidget::settings() const ProjectExplorerSettings ProjectExplorerSettingsWidget::settings() const
@@ -236,7 +245,8 @@ void ProjectExplorerSettingsWidget::slotDirectoryButtonGroupChanged()
m_projectsDirectoryPathChooser->setEnabled(enable); m_projectsDirectoryPathChooser->setEnabled(enable);
} }
// ------------------ ProjectExplorerSettingsPage // ProjectExplorerSettingsPage
ProjectExplorerSettingsPage::ProjectExplorerSettingsPage() ProjectExplorerSettingsPage::ProjectExplorerSettingsPage()
{ {
setId(Constants::BUILD_AND_RUN_SETTINGS_PAGE_ID); setId(Constants::BUILD_AND_RUN_SETTINGS_PAGE_ID);
@@ -244,32 +254,7 @@ ProjectExplorerSettingsPage::ProjectExplorerSettingsPage()
setCategory(Constants::BUILD_AND_RUN_SETTINGS_CATEGORY); setCategory(Constants::BUILD_AND_RUN_SETTINGS_CATEGORY);
setDisplayCategory(Tr::tr("Build & Run")); setDisplayCategory(Tr::tr("Build & Run"));
setCategoryIconPath(":/projectexplorer/images/settingscategory_buildrun.png"); setCategoryIconPath(":/projectexplorer/images/settingscategory_buildrun.png");
setWidgetCreator([] { return new ProjectExplorerSettingsWidget; });
} }
QWidget *ProjectExplorerSettingsPage::widget() } // ProjectExplorer::Internal
{
if (!m_widget) {
m_widget = new ProjectExplorerSettingsWidget;
m_widget->setSettings(ProjectExplorerPlugin::projectExplorerSettings());
m_widget->setProjectsDirectory(DocumentManager::projectsDirectory());
m_widget->setUseProjectsDirectory(DocumentManager::useProjectsDirectory());
}
return m_widget;
}
void ProjectExplorerSettingsPage::apply()
{
if (m_widget) {
ProjectExplorerPlugin::setProjectExplorerSettings(m_widget->settings());
DocumentManager::setProjectsDirectory(m_widget->projectsDirectory());
DocumentManager::setUseProjectsDirectory(m_widget->useProjectsDirectory());
}
}
void ProjectExplorerSettingsPage::finish()
{
delete m_widget;
}
} // namespace Internal
} // namespace ProjectExplorer

View File

@@ -5,25 +5,12 @@
#include <coreplugin/dialogs/ioptionspage.h> #include <coreplugin/dialogs/ioptionspage.h>
#include <QPointer> namespace ProjectExplorer::Internal {
namespace ProjectExplorer {
namespace Internal {
class ProjectExplorerSettingsWidget;
class ProjectExplorerSettingsPage : public Core::IOptionsPage class ProjectExplorerSettingsPage : public Core::IOptionsPage
{ {
public: public:
ProjectExplorerSettingsPage(); ProjectExplorerSettingsPage();
QWidget *widget() override;
void apply() override;
void finish() override;
private:
QPointer<ProjectExplorerSettingsWidget> m_widget;
}; };
} // namespace Internal } // ProjectExplorer::Internal
} // namespace ProjectExplorer