// // Created by versustune on 01.03.20. // #include "Theme.h" #include "ThemePresets.cpp" Theme::Theme(std::shared_ptr file) { m_configFile = file; } Theme::~Theme() { m_colours.clear(); m_configFile.reset(); } void Theme::setColour(ThemeColour index, Colour *colour) { auto c = m_colours[index]; if (c) { delete c; m_colours[index] = colour; } else { m_colours[index] = colour; } m_configFile->setValue(ThemeColourToString(index), colour->toString()); m_configFile->save(); } void Theme::init() { getColourFromConfig(ThemeColour::bg); getColourFromConfig(ThemeColour::bg_two); getColourFromConfig(ThemeColour::accent); getColourFromConfig(ThemeColour::accent_two); getColourFromConfig(ThemeColour::warning); getColourFromConfig(ThemeColour::clip); getColourFromConfig(ThemeColour::lcd_bg); getColourFromConfig(ThemeColour::lcd); } void Theme::getColourFromConfig(ThemeColour index) { std::string key = ThemeColourToString(index); if (m_configFile->containsKey(key)) { auto baseColour = Colour::fromString(m_configFile->getValue(key)); auto *colour = new Colour(baseColour.getRed(), baseColour.getGreen(), baseColour.getBlue()); delete m_colours[index]; m_colours[index] = colour; } else { // should only trigger if config is broken or empty :) setLEDTheme(this); } } Colour Theme::getColour(ThemeColour index) { if (m_colours[index] != nullptr) { return *m_colours[index]; } return Colour(255, 255, 255); } void Theme::setColourThemeById(int id) { switch (id) { case 1: setLEDTheme(this); break; case 2: setOrangeDreamTheme(this); break; case 3: setBloodTheme(this); break; case 4: setOceanTheme(this); default: break; } }