Meson: Simplify settings setup a bit

Also some surrounding code.

Change-Id: I9f537a4357ab76295b7cb4f6a69749a0a6b55392
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2023-05-26 11:19:53 +02:00
parent 78eb97fb54
commit c2fcd17e91
6 changed files with 40 additions and 60 deletions

View File

@@ -192,7 +192,7 @@ void MesonBuildSystem::init()
bool MesonBuildSystem::parseProject() bool MesonBuildSystem::parseProject()
{ {
QTC_ASSERT(buildConfiguration(), return false); QTC_ASSERT(buildConfiguration(), return false);
if (!isSetup(buildConfiguration()->buildDirectory()) && Settings::instance()->autorunMeson.value()) if (!isSetup(buildConfiguration()->buildDirectory()) && settings().autorunMeson())
return configure(); return configure();
LEAVE_IF_BUSY(); LEAVE_IF_BUSY();
LOCK(); LOCK();

View File

@@ -18,7 +18,6 @@ const char PARAMETERS_KEY[] = "MesonProjectManager.BuildConfig.Parameters";
// Settings page // Settings page
namespace SettingsPage { namespace SettingsPage {
const char GENERAL_ID[] = "A.MesonProjectManager.SettingsPage.General";
const char TOOLS_ID[] = "Z.MesonProjectManager.SettingsPage.Tools"; const char TOOLS_ID[] = "Z.MesonProjectManager.SettingsPage.Tools";
const char CATEGORY[] = "Z.Meson"; const char CATEGORY[] = "Z.Meson";
} // namespace SettingsPage } // namespace SettingsPage

View File

@@ -45,7 +45,7 @@ public:
~MesonProjectPluginPrivate() {} ~MesonProjectPluginPrivate() {}
private: private:
GeneralSettingsPage m_generalSettingsPage; Settings m_settings;
ToolsSettingsPage m_toolslSettingsPage; ToolsSettingsPage m_toolslSettingsPage;
ToolsSettingsAccessor m_toolsSettings; ToolsSettingsAccessor m_toolsSettings;
MesonToolKitAspect m_mesonKitAspect; MesonToolKitAspect m_mesonKitAspect;
@@ -60,7 +60,6 @@ private:
void saveAll() void saveAll()
{ {
m_toolsSettings.saveMesonTools(MesonTools::tools(), ICore::dialogParent()); m_toolsSettings.saveMesonTools(MesonTools::tools(), ICore::dialogParent());
Settings::instance()->writeSettings(ICore::settings());
} }
}; };
@@ -76,7 +75,6 @@ void MesonProjectPlugin::initialize()
ProjectManager::registerProjectType<MesonProject>(Constants::Project::MIMETYPE); ProjectManager::registerProjectType<MesonProject>(Constants::Project::MIMETYPE);
FileIconProvider::registerIconOverlayForFilename(Constants::Icons::MESON, "meson.build"); FileIconProvider::registerIconOverlayForFilename(Constants::Icons::MESON, "meson.build");
FileIconProvider::registerIconOverlayForFilename(Constants::Icons::MESON, "meson_options.txt"); FileIconProvider::registerIconOverlayForFilename(Constants::Icons::MESON, "meson_options.txt");
Settings::instance()->readSettings(ICore::settings());
} }
} // MesonProjectManager::Internal } // MesonProjectManager::Internal

View File

@@ -44,7 +44,7 @@ NinjaBuildStep::NinjaBuildStep(BuildStepList *bsl, Id id)
setUseEnglishOutput(); setUseEnglishOutput();
connect(target(), &ProjectExplorer::Target::parsingFinished, this, &NinjaBuildStep::update); connect(target(), &ProjectExplorer::Target::parsingFinished, this, &NinjaBuildStep::update);
connect(&Settings::instance()->verboseNinja, &BaseAspect::changed, connect(&settings().verboseNinja, &BaseAspect::changed,
this, &NinjaBuildStep::commandChanged); this, &NinjaBuildStep::commandChanged);
} }
@@ -119,17 +119,15 @@ QWidget *NinjaBuildStep::createConfigWidget()
// --verbose is only supported since // --verbose is only supported since
// https://github.com/ninja-build/ninja/commit/bf7517505ad1def03e13bec2b4131399331bc5c4 // https://github.com/ninja-build/ninja/commit/bf7517505ad1def03e13bec2b4131399331bc5c4
// TODO check when to switch back to --verbose // TODO check when to switch back to --verbose
Utils::CommandLine NinjaBuildStep::command() CommandLine NinjaBuildStep::command()
{ {
Utils::CommandLine cmd = [this] { CommandLine cmd;
auto tool = NinjaToolKitAspect::ninjaTool(kit()); if (auto tool = NinjaToolKitAspect::ninjaTool(kit()))
if (tool) cmd.setExecutable(tool->exe());
return Utils::CommandLine{tool->exe()};
return Utils::CommandLine{};
}();
if (!m_commandArgs.isEmpty()) if (!m_commandArgs.isEmpty())
cmd.addArgs(m_commandArgs, Utils::CommandLine::RawType::Raw); cmd.addArgs(m_commandArgs, CommandLine::RawType::Raw);
if (Settings::instance()->verboseNinja.value()) if (settings().verboseNinja())
cmd.addArg("-v"); cmd.addArg("-v");
cmd.addArg(m_targetName); cmd.addArg(m_targetName);
return cmd; return cmd;

View File

@@ -8,13 +8,26 @@
#include <utils/layoutbuilder.h> #include <utils/layoutbuilder.h>
namespace MesonProjectManager { namespace MesonProjectManager::Internal {
namespace Internal {
static Settings *s_instance;
Settings &settings()
{
return *s_instance;
}
Settings::Settings() Settings::Settings()
{ {
s_instance = this;
setSettingsGroup("MesonProjectManager"); setSettingsGroup("MesonProjectManager");
setAutoApply(false);
setId("A.MesonProjectManager.SettingsPage.General");
setDisplayName(Tr::tr("General"));
setDisplayCategory("Meson");
setCategory(Constants::SettingsPage::CATEGORY);
setCategoryIconPath(Constants::Icons::MESON_BW);
autorunMeson.setSettingsKey("meson.autorun"); autorunMeson.setSettingsKey("meson.autorun");
autorunMeson.setLabelText(Tr::tr("Autorun Meson")); autorunMeson.setLabelText(Tr::tr("Autorun Meson"));
@@ -24,36 +37,16 @@ Settings::Settings()
verboseNinja.setLabelText(Tr::tr("Ninja verbose mode")); verboseNinja.setLabelText(Tr::tr("Ninja verbose mode"));
verboseNinja.setToolTip(Tr::tr("Enables verbose mode by default when invoking Ninja.")); verboseNinja.setToolTip(Tr::tr("Enables verbose mode by default when invoking Ninja."));
registerAspect(&autorunMeson); setLayouter([this] {
registerAspect(&verboseNinja);
}
Settings *Settings::instance()
{
static Settings m_settings;
return &m_settings;
}
GeneralSettingsPage::GeneralSettingsPage()
{
setId(Constants::SettingsPage::GENERAL_ID);
setDisplayName(Tr::tr("General"));
setDisplayCategory("Meson");
setCategory(Constants::SettingsPage::CATEGORY);
setCategoryIconPath(Constants::Icons::MESON_BW);
setSettings(Settings::instance());
setLayouter([](QWidget *widget) {
Settings &s = *Settings::instance();
using namespace Layouting; using namespace Layouting;
return Column {
Column { autorunMeson,
s.autorunMeson, verboseNinja,
s.verboseNinja,
st, st,
}.attachTo(widget); };
}); });
readSettings();
} }
} // namespace Internal } // MesonProjectManager::Internal
} // namespace MesonProjectManager

View File

@@ -7,25 +7,17 @@
#include <utils/aspects.h> #include <utils/aspects.h>
namespace MesonProjectManager { namespace MesonProjectManager::Internal {
namespace Internal {
class Settings : public Utils::AspectContainer class Settings : public Core::PagedSettings
{ {
public: public:
Settings(); Settings();
static Settings *instance(); Utils::BoolAspect autorunMeson{this};
Utils::BoolAspect verboseNinja{this};
Utils::BoolAspect autorunMeson;
Utils::BoolAspect verboseNinja;
}; };
class GeneralSettingsPage final : public Core::IOptionsPage Settings &settings();
{
public:
GeneralSettingsPage();
};
} // namespace Internal } // MesonProjectManager::Internal
} // namespace MesonProjectManager