diff --git a/src/plugins/vcpkg/vcpkgplugin.cpp b/src/plugins/vcpkg/vcpkgplugin.cpp index 883b6896a72..4ef89499a76 100644 --- a/src/plugins/vcpkg/vcpkgplugin.cpp +++ b/src/plugins/vcpkg/vcpkgplugin.cpp @@ -17,7 +17,7 @@ class VcpkgPluginPrivate { public: VcpkgManifestEditorFactory manifestEditorFactory; - VcpkgSettingsPage settingsPage; + VcpkgSettings settings; }; VcpkgPlugin::~VcpkgPlugin() diff --git a/src/plugins/vcpkg/vcpkgsettings.cpp b/src/plugins/vcpkg/vcpkgsettings.cpp index e600631e970..16622fe8b37 100644 --- a/src/plugins/vcpkg/vcpkgsettings.cpp +++ b/src/plugins/vcpkg/vcpkgsettings.cpp @@ -19,10 +19,48 @@ namespace Vcpkg::Internal { +static VcpkgSettings *theSettings = nullptr; + +VcpkgSettings *VcpkgSettings::instance() +{ + return theSettings; +} + VcpkgSettings::VcpkgSettings() { + theSettings = this; + setSettingsGroup("Vcpkg"); + setId(Constants::TOOLSSETTINGSPAGE_ID); + setDisplayName("Vcpkg"); + setCategory(CMakeProjectManager::Constants::Settings::CATEGORY); + + setLayouter([this](QWidget *widget) { + using namespace Layouting; + auto websiteButton = new QToolButton; + websiteButton->setIcon(Utils::Icons::ONLINE.icon()); + websiteButton->setToolTip(Constants::WEBSITE_URL); + + // clang-format off + using namespace Layouting; + Column { + Group { + title(tr("Vcpkg installation")), + Form { + Utils::PathChooser::label(), + Span{ 2, Row{ vcpkgRoot, websiteButton} }, + }, + }, + st, + }.attachTo(widget); + // clang-format on + + connect(websiteButton, &QAbstractButton::clicked, [] { + QDesktopServices::openUrl(QUrl::fromUserInput(Constants::WEBSITE_URL)); + }); + }); + registerAspect(&vcpkgRoot); vcpkgRoot.setSettingsKey("VcpkgRoot"); vcpkgRoot.setDisplayStyle(Utils::StringAspect::PathChooserDisplay); @@ -32,52 +70,9 @@ VcpkgSettings::VcpkgSettings() readSettings(Core::ICore::settings()); } -VcpkgSettings *VcpkgSettings::instance() -{ - static VcpkgSettings s; - return &s; -} - bool VcpkgSettings::vcpkgRootValid() const { return (vcpkgRoot.filePath() / "vcpkg").withExecutableSuffix().isExecutableFile(); } -class VcpkgSettingsPageWidget : public Core::IOptionsPageWidget -{ -public: - VcpkgSettingsPageWidget() - { - auto websiteButton = new QToolButton; - websiteButton->setIcon(Utils::Icons::ONLINE.icon()); - websiteButton->setToolTip(Constants::WEBSITE_URL); - - using namespace Layouting; - Column { - Group { - title(tr("Vcpkg installation")), - Form { - Utils::PathChooser::label(), - Span{ 2, Row{ VcpkgSettings::instance()->vcpkgRoot, websiteButton} }, - }, - }, - st, - }.attachTo(this); - - connect(websiteButton, &QAbstractButton::clicked, [] { - QDesktopServices::openUrl(QUrl::fromUserInput(Constants::WEBSITE_URL)); - }); - - setOnApply([] { VcpkgSettings::instance()->writeSettings(Core::ICore::settings()); }); - } -}; - -VcpkgSettingsPage::VcpkgSettingsPage() -{ - setId(Constants::TOOLSSETTINGSPAGE_ID); - setDisplayName("Vcpkg"); - setCategory(CMakeProjectManager::Constants::Settings::CATEGORY); - setWidgetCreator([] { return new VcpkgSettingsPageWidget; }); -} - } // namespace Vcpkg::Internal diff --git a/src/plugins/vcpkg/vcpkgsettings.h b/src/plugins/vcpkg/vcpkgsettings.h index b83cf7f9c1c..fb1c478fc4f 100644 --- a/src/plugins/vcpkg/vcpkgsettings.h +++ b/src/plugins/vcpkg/vcpkgsettings.h @@ -4,11 +4,10 @@ #pragma once #include -#include namespace Vcpkg::Internal { -class VcpkgSettings : public Utils::AspectContainer +class VcpkgSettings : public Core::PagedSettings { public: VcpkgSettings(); @@ -19,10 +18,4 @@ public: Utils::StringAspect vcpkgRoot; }; -class VcpkgSettingsPage final : public Core::IOptionsPage -{ -public: - VcpkgSettingsPage(); -}; - } // namespace Vcpkg::Internal