aboutsummaryrefslogtreecommitdiff
path: root/qmidiplayer-desktop/qmpsettingswindow.hpp
blob: 72b0aa1d61dea41b56085a064fb2b2ad333371d4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#ifndef QMPSETTINGSWINDOW_H
#define QMPSETTINGSWINDOW_H

#include <string>
#include <map>
#include <vector>
#include <QDialog>
#include <QCloseEvent>
#include <QHideEvent>
#include <QSettings>
#include <QTableWidget>
#include <QComboBox>
#include <QSpinBox>
#include <QFormLayout>
#include "qmpplugin.hpp"
#include "qmpcustomizewindow.hpp"
#include "qmpdevpropdialog.hpp"

namespace Ui {
	class qmpSettingsWindow;
}

struct qmpCustomOption
{
	QWidget* widget;
	std::string desc;int type;
	QVariant defaultval,minv,maxv;
};

class QLineEdit;
class QToolButton;
class QFileEdit:public QWidget
{
	Q_OBJECT
	private:
		QLineEdit *le;
		QToolButton *tb;
	private slots:
		void chooseFile();
	public:
		QFileEdit(QWidget* par=nullptr);
		QString text();
		void setText(const QString& s);
};

class QHexSpinBox:public QSpinBox
{
	Q_OBJECT
	public:
		QHexSpinBox(QWidget *parent=0):QSpinBox(parent)
		{
			setPrefix("0x");
			setDisplayIntegerBase(16);
			setRange(-0x80000000,0x7FFFFFFF);
		}
	protected:
		QString textFromValue(int value)const
		{
			return QString::number(u(value),16).toUpper();
		}
		int valueFromText(const QString &text)const
		{
			return i(text.toUInt(0,16));
		}
		QValidator::State validate(QString &input,int &pos)const
		{
			QString t=input;
			if(t.startsWith("0x"))t.remove(0,2);
			pos-=t.size()-t.trimmed().size();t=t.trimmed();
			if(t.isEmpty())return QValidator::Intermediate;
			input=QString("0x")+t.toUpper();
			bool okay;t.toUInt(&okay,16);
			if(!okay)return QValidator::Invalid;
			return QValidator::Acceptable;
		}
		inline unsigned int u(int i)const
		{return *reinterpret_cast<unsigned int*>(&i);}
		inline int i(unsigned int u)const
		{return *reinterpret_cast<int*>(&u);}
};

class qmpSettingsWindow:public QDialog
{
	Q_OBJECT

	public:
		explicit qmpSettingsWindow(QWidget *parent=0);
		~qmpSettingsWindow();
		void closeEvent(QCloseEvent *event);
		void hideEvent(QHideEvent *event);
		void settingsInit();
		QTableWidget *getSFWidget();
		void updatePluginList(qmpPluginManager *pmgr);
		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 ispath);
		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> options,int defaultval);
		int getOptionEnumInt(std::string key);
		void setOptionEnumInt(std::string key,int val);
		void verifySF();
	signals:
		void dialogClosing();

	private slots:
		void on_buttonBox_accepted();
		void on_buttonBox_rejected();

		void on_cbBufSize_currentTextChanged(const QString &s);
		void on_cbBufCnt_currentTextChanged(const QString &s);

		void on_pbAdd_clicked();
		void on_pbRemove_clicked();
		void on_pbUp_clicked();
		void on_pbDown_clicked();

		void on_cbAutoBS_stateChanged();

		void on_pbCustomizeTb_clicked();

		void on_pbCustomizeAct_clicked();

		void on_pbExtDevSetup_clicked();

	private:
		Ui::qmpSettingsWindow *ui;
		void settingsUpdate();
		std::map<std::string,qmpCustomOption> customOptions;
		std::map<std::string,QGridLayout*> customOptPages;
		void updateCustomOptions();
		qmpCustomizeWindow *cw;
		qmpDevPropDialog *dps;
		static QSettings *settings;
		static QComboBox* outwidget;
	public:
		static QSettings* getSettingsIntf(){return settings;}
		static QComboBox* getDefaultOutWidget();
};

#endif // QMPSETTINGSWINDOW_H