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