aboutsummaryrefslogtreecommitdiff
path: root/qmidiplayer-desktop/qmpsettings.hpp
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2020-04-19 23:36:48 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2020-04-19 23:36:48 +0800
commit6d568d07b31ba2ae39703cfd272d3003ea542018 (patch)
tree58dca1ac27ffe9dd6bb045c5a71d04644b7a2e07 /qmidiplayer-desktop/qmpsettings.hpp
parentc7bf3e37e6eaed6895c797f72ef116b42c6f8a44 (diff)
downloadQMidiPlayer-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.hpp88
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