Foundations laid for project settings and Insight porject settings

This commit is contained in:
Nav
2022-01-02 20:44:39 +00:00
parent 0faa97fc68
commit 2ecde9d11d
7 changed files with 103 additions and 2 deletions

View File

@@ -49,7 +49,8 @@ int Application::run(const std::vector<std::string>& arguments) {
this->eventManager,
this->projectConfig.value(),
this->environmentConfig.value(),
this->insightConfig.value()
this->insightConfig.value(),
this->projectSettings.value().insightSettings
);
/*
@@ -94,6 +95,7 @@ void Application::startup() {
std::bind(&Application::onShutdownApplicationRequest, this, std::placeholders::_1)
);
this->loadProjectSettings();
this->loadProjectConfiguration();
Logger::configure(this->projectConfig.value());
@@ -153,6 +155,28 @@ void Application::shutdown() {
Thread::setThreadState(ThreadState::STOPPED);
}
void Application::loadProjectSettings() {
const auto projectSettingsPath = Paths::projectSettingsPath();
auto jsonSettingsFile = QFile(QString::fromStdString(projectSettingsPath));
if (jsonSettingsFile.exists()) {
auto jsonObject = QJsonDocument::fromJson(jsonSettingsFile.readAll()).object();
jsonSettingsFile.close();
try {
this->projectSettings = ProjectSettings(jsonObject);
return;
} catch (const std::exception& exception) {
Logger::error(
"Failed to load project settings from " + projectSettingsPath + " - " + exception.what()
);
}
}
this->projectSettings = ProjectSettings();
}
void Application::loadProjectConfiguration() {
auto jsonConfigFile = QFile(QString::fromStdString(Paths::projectConfigPath()));

View File

@@ -16,6 +16,7 @@
#include "src/Logger/Logger.hpp"
#include "src/ProjectConfig.hpp"
#include "src/ProjectSettings.hpp"
#include "src/VersionNumber.hpp"
#include "src/EventManager/EventListener.hpp"
@@ -147,6 +148,11 @@ namespace Bloom
std::optional<DebugServerConfig> debugServerConfig;
std::optional<InsightConfig> insightConfig;
/**
* Settings extracted from the settings file in the user's project root.
*/
std::optional<ProjectSettings> projectSettings;
/**
* The project environment selected by the user.
*
@@ -201,6 +207,12 @@ namespace Bloom
*/
void shutdown();
/**
* Extracts or generates project settings.
*
*/
void loadProjectSettings();
/**
* Extracts the project config from the user's JSON config file and populates the following members:
* - this->projectConfig

View File

@@ -41,6 +41,25 @@ namespace Bloom
static std::string projectConfigPath() {
return std::filesystem::current_path().string() + "/bloom.json";
}
/**
* Returns the path to the current project's settings directory.
*
* @return
*/
static std::string projectSettingsDirPath() {
return std::filesystem::current_path().string() + "/.bloom";
}
/**
* Returns the path to the current project's settings file.
*
* @return
*/
static std::string projectSettingsPath() {
return std::filesystem::current_path().string() + "/.bloom/settings.json";
}
/**
* Returns the path to Bloom's compiled resources.
*

View File

@@ -7,6 +7,7 @@
#include "src/TargetController/TargetControllerConsole.hpp"
#include "src/Helpers/Paths.hpp"
#include "src/ProjectConfig.hpp"
#include "src/ProjectSettings.hpp"
#include "src/EventManager/EventManager.hpp"
#include "src/EventManager/EventListener.hpp"
@@ -41,12 +42,14 @@ namespace Bloom
EventManager& eventManager,
const ProjectConfig& projectConfig,
const EnvironmentConfig& environmentConfig,
const InsightConfig& insightConfig
const InsightConfig& insightConfig,
const InsightProjectSettings& insightProjectSettings
):
eventManager(eventManager),
projectConfig(projectConfig),
environmentConfig(environmentConfig),
insightConfig(insightConfig),
insightProjectSettings(insightProjectSettings),
application(
(
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, false),
@@ -71,6 +74,8 @@ namespace Bloom
EnvironmentConfig environmentConfig;
InsightConfig insightConfig;
InsightProjectSettings insightProjectSettings;
EventManager& eventManager;
EventListenerPointer eventListener = std::make_shared<EventListener>("InsightEventListener");

9
src/ProjectSettings.cpp Normal file
View File

@@ -0,0 +1,9 @@
#include "ProjectSettings.hpp"
#include "src/Logger/Logger.hpp"
using namespace Bloom;
ProjectSettings::ProjectSettings(const QJsonObject& jsonObject) {
}

31
src/ProjectSettings.hpp Normal file
View File

@@ -0,0 +1,31 @@
#pragma once
#include <memory>
#include <map>
#include <string>
#include <QJsonObject>
#include "src/Targets/TargetMemory.hpp"
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/TargetMemoryInspectionPaneSettings.hpp"
namespace Bloom
{
struct InsightProjectSettings
{
std::map<
Targets::TargetMemoryType,
Widgets::TargetMemoryInspectionPaneSettings
> memoryInspectionPaneSettingsByMemoryType;
InsightProjectSettings() = default;
InsightProjectSettings(const QJsonObject& jsonObject);
};
struct ProjectSettings
{
InsightProjectSettings insightSettings;
ProjectSettings() = default;
explicit ProjectSettings(const QJsonObject& jsonObject);
};
}