diff options
author | Chris Xiong <chirs241097@gmail.com> | 2020-04-19 23:36:48 +0800 |
---|---|---|
committer | Chris Xiong <chirs241097@gmail.com> | 2020-04-19 23:36:48 +0800 |
commit | 6d568d07b31ba2ae39703cfd272d3003ea542018 (patch) | |
tree | 58dca1ac27ffe9dd6bb045c5a71d04644b7a2e07 /qmidiplayer-desktop/qmpsettings.hpp | |
parent | c7bf3e37e6eaed6895c797f72ef116b42c6f8a44 (diff) | |
download | QMidiPlayer-6d568d07b31ba2ae39703cfd272d3003ea542018.tar.xz |
Legacy code massacre!
Complete reconstruction of the settings infrastructure.
All options are now registered using a revamped option API.
Legacy configuration files are no longer compatible. Please make a
backup.
Diffstat (limited to 'qmidiplayer-desktop/qmpsettings.hpp')
-rw-r--r-- | qmidiplayer-desktop/qmpsettings.hpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/qmidiplayer-desktop/qmpsettings.hpp b/qmidiplayer-desktop/qmpsettings.hpp new file mode 100644 index 0000000..ff46970 --- /dev/null +++ b/qmidiplayer-desktop/qmpsettings.hpp @@ -0,0 +1,88 @@ +#ifndef QMPSETTINGS_H +#define QMPSETTINGS_H + +#include <functional> +#include <string> +#include <map> +#include <vector> +#include <QWidget> +#include <QSettings> + +struct qmpOption +{ + enum ParameterType{ + parameter_int=0, + parameter_uint, + parameter_bool, + parameter_double, + parameter_str, + parameter_enum, + parameter_url, + parameter_custom=0x100 + }; + + std::string tab; + std::string desc; + ParameterType type; + QWidget* widget; + QVariant defaultval,minv,maxv; + std::function<void*()> save_func; + std::function<void(void*)> load_func; + std::vector<std::string> enumlist; + + qmpOption():widget(nullptr){} + qmpOption(std::string _tab,std::string _desc, + ParameterType _t,QWidget* _w=nullptr, + QVariant _def=QVariant(),QVariant _min=QVariant(),QVariant _max=QVariant(), + std::function<void*()> _save=nullptr,std::function<void(void*)> _load=nullptr): + tab(_tab), + desc(_desc), + type(_t), + widget(_w), + defaultval(_def), + minv(_min), + maxv(_max), + save_func(_save), + load_func(_load){} +}; +class qmpSettings +{ + public: + qmpSettings(); + ~qmpSettings(); + void registerOptionInt(std::string tab,std::string desc,std::string key,int min,int max,int defaultval); + int getOptionInt(std::string key); + void setOptionInt(std::string key,int val); + void registerOptionUint(std::string tab,std::string desc,std::string key,unsigned min,unsigned max,unsigned defaultval); + unsigned getOptionUint(std::string key); + void setOptionUint(std::string key,unsigned val); + void registerOptionBool(std::string tab,std::string desc,std::string key,bool defaultval); + bool getOptionBool(std::string key); + void setOptionBool(std::string key,bool val); + void registerOptionDouble(std::string tab,std::string desc,std::string key,double min,double max,double defaultval); + double getOptionDouble(std::string key); + void setOptionDouble(std::string key,double val); + void registerOptionString(std::string tab,std::string desc,std::string key,std::string defaultval,bool is_url); + std::string getOptionString(std::string key); + void setOptionString(std::string key,std::string val); + void registerOptionEnumInt(std::string tab,std::string desc,std::string key,std::vector<std::string> enumlist,int defaultval); + int getOptionEnumInt(std::string key); + std::string getOptionEnumIntOptName(std::string key); + void setOptionEnumInt(std::string key,int val); + void setOptionEnumIntOptName(std::string key,std::string valname); + void registerOptionCustom(std::string tab,std::string desc,std::string key,void* widget,void* defaultval,std::function<void*()> save_func,std::function<void(void*)> load_func); + void* getOptionCustom(std::string key); + void setOptionCustom(std::string key,void* val); + + void setOptionRaw(QString key,QVariant val); + QVariant getOptionRaw(QString key,QVariant defval=QVariant()); + + private: + static QSettings *settings; + std::map<std::string,qmpOption> options; + std::vector<std::string> optionlist; + + friend class qmpSettingsWindow; +}; + +#endif |