aboutsummaryrefslogblamecommitdiff
path: root/qmidiplayer-desktop/qmpsettings.hpp
blob: 2fb894fedf79ea8e1f6c962747bb6cd6ab086774 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                     










                                
 







                                          
 













                                                                                              


                 

























                                                                                                                                                                                            
 

                                                                     
 



                                             
 
                                   


      
#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