Plugins: A bit more Keys and Store

Change-Id: Iee55eeaa881dd9f2047fdbe95ad8d827f4ba34e0
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
hjk
2023-08-24 16:14:26 +02:00
parent e1e1af36d2
commit 8d0aa34bfc
53 changed files with 243 additions and 239 deletions

View File

@@ -78,18 +78,18 @@ public:
Command introspect(const Utils::FilePath &sourceDirectory) const;
static inline std::optional<Utils::FilePath> find()
static std::optional<Utils::FilePath> find()
{
return ToolWrapper::findTool({"meson.py", "meson"});
}
static inline QString toolName() { return {"Meson"}; };
static QString toolName() { return {"Meson"}; }
};
template<>
inline QVariantMap toVariantMap<MesonWrapper>(const MesonWrapper &meson)
inline Utils::Store toVariantMap<MesonWrapper>(const MesonWrapper &meson)
{
QVariantMap data;
Utils::Store data;
data.insert(Constants::ToolsSettings::NAME_KEY, meson.m_name);
data.insert(Constants::ToolsSettings::EXE_KEY, meson.m_exe.toSettings());
data.insert(Constants::ToolsSettings::AUTO_DETECTED_KEY, meson.m_autoDetected);
@@ -98,7 +98,7 @@ inline QVariantMap toVariantMap<MesonWrapper>(const MesonWrapper &meson)
return data;
}
template<>
inline MesonWrapper *fromVariantMap<MesonWrapper *>(const QVariantMap &data)
inline MesonWrapper *fromVariantMap<MesonWrapper *>(const Utils::Store &data)
{
return new MesonWrapper(data[Constants::ToolsSettings::NAME_KEY].toString(),
Utils::FilePath::fromSettings(data[Constants::ToolsSettings::EXE_KEY]),

View File

@@ -14,17 +14,17 @@ class NinjaWrapper final : public ToolWrapper
public:
using ToolWrapper::ToolWrapper;
static inline std::optional<Utils::FilePath> find()
static std::optional<Utils::FilePath> find()
{
return ToolWrapper::findTool({"ninja", "ninja-build"});
}
static inline QString toolName() { return {"Ninja"}; };
static QString toolName() { return {"Ninja"}; }
};
template<>
inline QVariantMap toVariantMap<NinjaWrapper>(const NinjaWrapper &meson)
inline Utils::Store toVariantMap<NinjaWrapper>(const NinjaWrapper &meson)
{
QVariantMap data;
Utils::Store data;
data.insert(Constants::ToolsSettings::NAME_KEY, meson.m_name);
data.insert(Constants::ToolsSettings::EXE_KEY, meson.m_exe.toSettings());
data.insert(Constants::ToolsSettings::AUTO_DETECTED_KEY, meson.m_autoDetected);
@@ -33,7 +33,7 @@ inline QVariantMap toVariantMap<NinjaWrapper>(const NinjaWrapper &meson)
return data;
}
template<>
inline NinjaWrapper *fromVariantMap<NinjaWrapper *>(const QVariantMap &data)
inline NinjaWrapper *fromVariantMap<NinjaWrapper *>(const Utils::Store &data)
{
return new NinjaWrapper(data[Constants::ToolsSettings::NAME_KEY].toString(),
Utils::FilePath::fromSettings(data[Constants::ToolsSettings::EXE_KEY]),

View File

@@ -22,7 +22,7 @@ ToolItemSettings::ToolItemSettings(QWidget *parent)
m_mesonPathChooser = new PathChooser;
m_mesonPathChooser->setExpectedKind(PathChooser::ExistingCommand);
m_mesonPathChooser->setHistoryCompleter(QLatin1String("Meson.Command.History"));
m_mesonPathChooser->setHistoryCompleter("Meson.Command.History");
using namespace Layouting;

View File

@@ -7,20 +7,23 @@
#include "mesonprojectmanagertr.h"
#include <coreplugin/icore.h>
#include <utils/fileutils.h>
#include <utils/filepath.h>
#include <utils/store.h>
#include <QGuiApplication>
#include <QVariantMap>
#include <iterator>
#include <vector>
using namespace Utils;
namespace MesonProjectManager {
namespace Internal {
static QString entryName(int index)
static Key entryName(int index)
{
return QString("%1%2").arg(Constants::ToolsSettings::ENTRY_KEY).arg(index);
return Constants::ToolsSettings::ENTRY_KEY + Key::number(index);
}
ToolsSettingsAccessor::ToolsSettingsAccessor()
@@ -34,16 +37,16 @@ void ToolsSettingsAccessor::saveMesonTools(const std::vector<MesonTools::Tool_t>
QWidget *parent)
{
using namespace Constants;
QVariantMap data;
Store data;
int entry_count = 0;
for (const MesonTools::Tool_t &tool : tools) {
auto asMeson = std::dynamic_pointer_cast<MesonWrapper>(tool);
if (asMeson)
data.insert(entryName(entry_count), toVariantMap<MesonWrapper>(*asMeson));
data.insert(entryName(entry_count), QVariant::fromValue(toVariantMap<MesonWrapper>(*asMeson)));
else {
auto asNinja = std::dynamic_pointer_cast<NinjaWrapper>(tool);
if (asNinja)
data.insert(entryName(entry_count), toVariantMap<NinjaWrapper>(*asNinja));
data.insert(entryName(entry_count), QVariant::fromValue(toVariantMap<NinjaWrapper>(*asNinja)));
}
entry_count++;
}
@@ -58,14 +61,14 @@ std::vector<MesonTools::Tool_t> ToolsSettingsAccessor::loadMesonTools(QWidget *p
auto entry_count = data.value(ToolsSettings::ENTRY_COUNT, 0).toInt();
std::vector<MesonTools::Tool_t> result;
for (auto toolIndex = 0; toolIndex < entry_count; toolIndex++) {
auto name = entryName(toolIndex);
Key name = entryName(toolIndex);
if (data.contains(name)) {
const auto map = data[name].toMap();
auto type = map.value(ToolsSettings::TOOL_TYPE_KEY, ToolsSettings::TOOL_TYPE_MESON);
if (type == ToolsSettings::TOOL_TYPE_NINJA)
result.emplace_back(fromVariantMap<NinjaWrapper *>(data[name].toMap()));
result.emplace_back(fromVariantMap<NinjaWrapper *>(data[name].value<Store>()));
else
result.emplace_back(fromVariantMap<MesonWrapper *>(data[name].toMap()));
result.emplace_back(fromVariantMap<MesonWrapper *>(data[name].value<Store>()));
}
}
return result;

View File

@@ -5,6 +5,8 @@
#include <utils/process.h>
#include <QUuid>
namespace MesonProjectManager {
namespace Internal {

View File

@@ -7,14 +7,9 @@
#include <utils/commandline.h>
#include <utils/environment.h>
#include <utils/fileutils.h>
#include <utils/id.h>
#include <utils/qtcassert.h>
#include <QFileInfo>
#include <QUuid>
#include <QVariant>
#include <QVariantMap>
#include <utils/store.h>
#include <optional>
@@ -32,17 +27,17 @@ public:
: m_cmd{exe, args}
, m_workDir{workDir}
{}
inline const Utils::CommandLine &cmdLine() const { return m_cmd; }
inline const Utils::FilePath &workDir() const { return m_workDir; }
inline Utils::FilePath executable() const { return m_cmd.executable(); }
inline QStringList arguments() const { return m_cmd.splitArguments(); }
inline QString toUserOutput() const { return m_cmd.toUserOutput(); };
const Utils::CommandLine &cmdLine() const { return m_cmd; }
const Utils::FilePath &workDir() const { return m_workDir; }
Utils::FilePath executable() const { return m_cmd.executable(); }
QStringList arguments() const { return m_cmd.splitArguments(); }
QString toUserOutput() const { return m_cmd.toUserOutput(); }
};
class ToolWrapper
{
public:
virtual ~ToolWrapper(){};
virtual ~ToolWrapper() {}
ToolWrapper() = delete;
ToolWrapper(const QString &name, const Utils::FilePath &path, bool autoDetected = false);
ToolWrapper(const QString &name,
@@ -54,12 +49,12 @@ public:
ToolWrapper &operator=(const ToolWrapper &other) = default;
ToolWrapper &operator=(ToolWrapper &&other) = default;
inline const Version &version() const noexcept { return m_version; };
inline bool isValid() const noexcept { return m_isValid; };
inline bool autoDetected() const noexcept { return m_autoDetected; };
inline Utils::Id id() const noexcept { return m_id; };
inline Utils::FilePath exe() const noexcept { return m_exe; };
inline QString name() const noexcept { return m_name; };
const Version &version() const noexcept { return m_version; }
bool isValid() const noexcept { return m_isValid; }
bool autoDetected() const noexcept { return m_autoDetected; }
Utils::Id id() const noexcept { return m_id; }
Utils::FilePath exe() const noexcept { return m_exe; }
QString name() const noexcept { return m_name; }
inline void setName(const QString &newName) { m_name = newName; }
virtual void setExe(const Utils::FilePath &newExe);
@@ -69,9 +64,9 @@ public:
static std::optional<Utils::FilePath> findTool(const QStringList &exeNames);
template<typename T>
friend QVariantMap toVariantMap(const T &);
friend Utils::Store toVariantMap(const T &);
template<typename T>
friend T fromVariantMap(const QVariantMap &);
friend T fromVariantMap(const Utils::Store &);
protected:
Version m_version;
@@ -83,9 +78,9 @@ protected:
};
template<typename T>
QVariantMap toVariantMap(const T &);
Utils::Store toVariantMap(const T &);
template<typename T>
T fromVariantMap(const QVariantMap &);
T fromVariantMap(const Utils::Store &);
} // namespace Internal
} // namespace MesonProjectManager