1 #include "universalinputdialog.h"
2 #include "qdialogbuttonbox.h"
3 #include "smallUsefulFunctions.h"
UniversalInputDialog(QWidget * parent)4 UniversalInputDialog::UniversalInputDialog(QWidget *parent): QDialog(parent)
5 {
6 	setWindowTitle(TEXSTUDIO);
7 	gridLayout = new QGridLayout();
8 }
9 
myAccept()10 void UniversalInputDialog::myAccept()
11 {
12 	for (int i = 0; i < properties.size(); i++)
13 		properties[i].readFromObject((QWidget *)properties[i].widgetOffset);
14 	accept();
15 }
16 
addWidget(QWidget * widget,const QString & description,const ManagedProperty & prop)17 void UniversalInputDialog::addWidget(QWidget *widget, const QString &description, const ManagedProperty &prop)
18 {
19 	Q_ASSERT(prop.storage);
20 	properties << prop;
21 	properties.last().widgetOffset = (ptrdiff_t)widget;
22 	prop.writeToObject(widget);
23 
24 	widget->setSizePolicy(QSizePolicy::MinimumExpanding, widget->sizePolicy().verticalPolicy());
25 	QLabel *descWidget = new QLabel(description, this);
26 	descWidget->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
27 
28 	if (description.length() < 32) {
29         gridLayout->addWidget(descWidget, gridLayout->rowCount(), 0);
30         gridLayout->addWidget(widget, gridLayout->rowCount() - 1, 1);
31 	} else {
32         gridLayout->addWidget(descWidget, gridLayout->rowCount(), 0, 1, 2 );
33         gridLayout->addWidget(widget, gridLayout->rowCount(), 0, 1, 2 );
34 	}
35 }
36 
addCheckBox(const ManagedProperty & mp,const QString & description)37 QCheckBox *UniversalInputDialog::addCheckBox(const ManagedProperty &mp, const QString &description)
38 {
39 	QCheckBox *checkBox = new QCheckBox(this);
40 	checkBox->setText(description);
41 	properties << mp;
42 	mp.writeToObject(checkBox);
43 	properties.last().widgetOffset = (ptrdiff_t)checkBox;
44     gridLayout->addWidget(checkBox, gridLayout->rowCount(), 1 );
45 	return checkBox;
46 }
47 
addComboBox(const ManagedProperty & mp,const QString & description)48 QComboBox *UniversalInputDialog::addComboBox(const ManagedProperty &mp, const QString &description)
49 {
50 	QComboBox *cmb = new QComboBox(this);
51 	addWidget(cmb, description, mp);
52 	return cmb;
53 }
54 
addSpinBox(const ManagedProperty & mp,const QString & description)55 QSpinBox *UniversalInputDialog::addSpinBox(const ManagedProperty &mp, const QString &description)
56 {
57 	QSpinBox *spinBox = new QSpinBox(this);
58 	spinBox->setMaximum(10000000);
59 	addWidget(spinBox, description, mp);
60 	return spinBox;
61 }
62 
addDoubleSpinBox(const ManagedProperty & mp,const QString & description)63 QDoubleSpinBox *UniversalInputDialog::addDoubleSpinBox(const ManagedProperty &mp, const QString &description)
64 {
65 	QDoubleSpinBox *spinBox = new QDoubleSpinBox(this);
66 	spinBox->setMinimum(-10000000);
67 	spinBox->setMaximum(10000000);
68 	addWidget(spinBox, description, mp);
69 	return spinBox;
70 }
71 
addLineEdit(const ManagedProperty & mp,const QString & description)72 QLineEdit *UniversalInputDialog::addLineEdit(const ManagedProperty &mp, const QString &description)
73 {
74 	QLineEdit *edit = new QLineEdit(this);
75 	addWidget(edit, description, mp);
76 	return edit;
77 }
78 
addTextEdit(const ManagedProperty & mp,const QString & description)79 QTextEdit *UniversalInputDialog::addTextEdit(const ManagedProperty &mp, const QString &description)
80 {
81 	QTextEdit *edit = new QTextEdit(this);
82 	addWidget(edit, description, mp);
83 	return edit;
84 }
85 
addVariable(bool * var,const QString & description)86 QCheckBox *UniversalInputDialog::addVariable(bool *var, const QString &description)
87 {
88 	return addCheckBox(ManagedProperty(var), description);
89 }
90 
addVariable(int * var,const QString & description)91 QSpinBox *UniversalInputDialog::addVariable(int *var, const QString &description)
92 {
93 	return addSpinBox(ManagedProperty(var), description);
94 }
95 
addVariable(QString * var,const QString & description)96 QLineEdit *UniversalInputDialog::addVariable(QString *var, const QString &description)
97 {
98 	return addLineEdit(ManagedProperty(var), description);
99 }
100 
addVariable(int * var,const QStringList & options,const QString & description)101 QComboBox *UniversalInputDialog::addVariable(int *var, const QStringList &options, const QString &description)
102 {
103 	ManagedProperty mp(var);
104 	QComboBox *cmb = new QComboBox(this);
105 	cmb->addItems(options);
106 	addWidget(cmb, description, mp);
107 	return cmb;
108 }
109 
addVariable(QStringList * var,const QString & description)110 QComboBox *UniversalInputDialog::addVariable(QStringList *var, const QString &description)
111 {
112 	return addComboBox(ManagedProperty(var), description);
113 }
114 
addTextEdit(QString * var,const QString & description)115 QTextEdit *UniversalInputDialog::addTextEdit(QString *var, const QString &description)
116 {
117 	return addTextEdit(ManagedProperty(var), description);
118 }
119 
addVariable(float * var,const QString & description)120 QDoubleSpinBox *UniversalInputDialog::addVariable(float *var, const QString &description)
121 {
122 	return addDoubleSpinBox(ManagedProperty(var), description);
123 }
124 
showEvent(QShowEvent * event)125 void UniversalInputDialog::showEvent(QShowEvent *event)
126 {
127 	QDialog::showEvent(event);
128 	if (event->spontaneous()) return;
129 	QDialogButtonBox *box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
130 	box->button(QDialogButtonBox::Ok)->setDefault(true);
131 	connect(box, SIGNAL(accepted()), this, SLOT(myAccept()));
132 	connect(box, SIGNAL(rejected()), this, SLOT(reject()));
133     gridLayout->addWidget(box, gridLayout->rowCount(), 0, 1, 2 );
134 	setLayout(gridLayout);
135 }
136