diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2017-02-16 16:58:40 +0100 |
|---|---|---|
| committer | Léo Lam <leo@innovatetechnologi.es> | 2017-02-23 18:15:12 +0100 |
| commit | 88a21dd2b9539292838aff32f5f29c182d4d6c39 (patch) | |
| tree | 0ed2a6afe4e69db6b3902f141c7ae965077399bb /Source/Core/Common/Config/Config.cpp | |
| parent | abe6f8766a5a1d9007584b4224ba9b74fdf645f2 (diff) | |
Fix things mentioned during code review
Ref: https://github.com/dolphin-emu/dolphin/pull/4917
Diffstat (limited to 'Source/Core/Common/Config/Config.cpp')
| -rw-r--r-- | Source/Core/Common/Config/Config.cpp | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/Source/Core/Common/Config/Config.cpp b/Source/Core/Common/Config/Config.cpp new file mode 100644 index 0000000000..bcfb9a2619 --- /dev/null +++ b/Source/Core/Common/Config/Config.cpp @@ -0,0 +1,140 @@ +// Copyright 2016 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include <algorithm> +#include <list> +#include <map> + +#include "Common/Assert.h" +#include "Common/Config/Config.h" + +namespace Config +{ +static Layers s_layers; +static std::list<ConfigChangedCallback> s_callbacks; + +void InvokeConfigChangedCallbacks(); + +Section* GetOrCreateSection(System system, const std::string& section_name) +{ + return s_layers[LayerType::Meta]->GetOrCreateSection(system, section_name); +} + +Layers* GetLayers() +{ + return &s_layers; +} + +void AddLayer(std::unique_ptr<Layer> layer) +{ + s_layers[layer->GetLayer()] = std::move(layer); + InvokeConfigChangedCallbacks(); +} + +void AddLayer(std::unique_ptr<ConfigLayerLoader> loader) +{ + AddLayer(std::make_unique<Layer>(std::move(loader))); +} + +void AddLoadLayer(std::unique_ptr<Layer> layer) +{ + layer->Load(); + AddLayer(std::move(layer)); +} + +void AddLoadLayer(std::unique_ptr<ConfigLayerLoader> loader) +{ + AddLoadLayer(std::make_unique<Layer>(std::move(loader))); +} + +Layer* GetLayer(LayerType layer) +{ + if (!LayerExists(layer)) + return nullptr; + return s_layers[layer].get(); +} + +void RemoveLayer(LayerType layer) +{ + s_layers.erase(layer); + InvokeConfigChangedCallbacks(); +} +bool LayerExists(LayerType layer) +{ + return s_layers.find(layer) != s_layers.end(); +} + +void AddConfigChangedCallback(ConfigChangedCallback func) +{ + s_callbacks.emplace_back(func); +} + +void InvokeConfigChangedCallbacks() +{ + for (const auto& callback : s_callbacks) + callback(); +} + +// Explicit load and save of layers +void Load() +{ + for (auto& layer : s_layers) + layer.second->Load(); +} + +void Save() +{ + for (auto& layer : s_layers) + layer.second->Save(); +} + +void Init() +{ + // This layer always has to exist + s_layers[LayerType::Meta] = std::make_unique<RecursiveLayer>(); +} + +void Shutdown() +{ + s_layers.clear(); + s_callbacks.clear(); +} + +static const std::map<System, std::string> system_to_name = { + {System::Main, "Dolphin"}, {System::GCPad, "GCPad"}, {System::WiiPad, "Wiimote"}, + {System::GCKeyboard, "GCKeyboard"}, {System::GFX, "Graphics"}, {System::Logger, "Logger"}, + {System::Debugger, "Debugger"}, {System::UI, "UI"}, +}; + +const std::string& GetSystemName(System system) +{ + return system_to_name.at(system); +} + +System GetSystemFromName(const std::string& name) +{ + const auto system = std::find_if(system_to_name.begin(), system_to_name.end(), + [&name](const auto& entry) { return entry.second == name; }); + if (system != system_to_name.end()) + return system->first; + + _assert_msg_(COMMON, false, "Programming error! Couldn't convert '%s' to system!", name.c_str()); + return System::Main; +} + +const std::string& GetLayerName(LayerType layer) +{ + static const std::map<LayerType, std::string> layer_to_name = { + {LayerType::Base, "Base"}, + {LayerType::GlobalGame, "Global GameINI"}, + {LayerType::LocalGame, "Local GameINI"}, + {LayerType::Netplay, "Netplay"}, + {LayerType::Movie, "Movie"}, + {LayerType::CommandLine, "Command Line"}, + {LayerType::CurrentRun, "Current Run"}, + {LayerType::Meta, "Top"}, + }; + return layer_to_name.at(layer); +} +} |
