#pragma once #include #include #include class Config { public: Config(const std::string binaryArgument); ~Config(); void load(); void save(); struct AudioConfig { std::vector devices; float volume; }; struct SampleConfig { std::string file; uint64_t offset; uint64_t length; float volume; bool isValid() const; }; struct ButtonConfig { std::string name; std::string key; uint8_t width = DEFAULTWIDTH; // default is 6 std::vector samples; bool isValid() const; const static uint8_t DEFAULTWIDTH; }; struct ShortcutConfig { std::string up; std::string down; std::string left; std::string right; std::string play; std::string stop; }; struct RootConfig { AudioConfig audio; std::vector> buttons; std::string audioPath; ShortcutConfig shortcuts; } rootConfig; private: std::string binaryPath; const std::string file = "soundboard.json"; };