File: universalinputdialog.cpp

package info (click to toggle)
texstudio 2.11.2%2Bdebian-1
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 41,292 kB
  • ctags: 12,405
  • sloc: cpp: 93,072; xml: 10,217; ansic: 4,153; sh: 145; makefile: 56
file content (126 lines) | stat: -rw-r--r-- 4,058 bytes parent folder | download
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
#include "universalinputdialog.h"
#include "qdialogbuttonbox.h"
#include "smallUsefulFunctions.h"
UniversalInputDialog::UniversalInputDialog(QWidget *parent): QDialog(parent)
{
	setWindowTitle(TEXSTUDIO);
	gridLayout = new QGridLayout();
}

void UniversalInputDialog::myAccept()
{
	for (int i = 0; i < properties.size(); i++)
		properties[i].readFromObject((QWidget *)properties[i].widgetOffset);
	accept();
}

void UniversalInputDialog::addWidget(QWidget *widget, const QString &description, const ManagedProperty &prop)
{
	Q_ASSERT(prop.storage);
	properties << prop;
	properties.last().widgetOffset = (ptrdiff_t)widget;
	prop.writeToObject(widget);

	widget->setSizePolicy(QSizePolicy::MinimumExpanding, widget->sizePolicy().verticalPolicy());
	QLabel *descWidget = new QLabel(description, this);
	descWidget->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);

	if (description.length() < 32) {
		gridLayout->addWidget(descWidget, gridLayout->rowCount(), 0, 0);
		gridLayout->addWidget(widget, gridLayout->rowCount() - 1, 1, 0);
	} else {
		gridLayout->addWidget(descWidget, gridLayout->rowCount(), 0, 1, 2, 0 );
		gridLayout->addWidget(widget, gridLayout->rowCount(), 0, 1, 2, 0);
	}
}

QCheckBox *UniversalInputDialog::addCheckBox(const ManagedProperty &mp, const QString &description)
{
	QCheckBox *checkBox = new QCheckBox(this);
	checkBox->setText(description);
	properties << mp;
	mp.writeToObject(checkBox);
	properties.last().widgetOffset = (ptrdiff_t)checkBox;
	gridLayout->addWidget(checkBox, gridLayout->rowCount(), 1, 0);
	return checkBox;
}

QComboBox *UniversalInputDialog::addComboBox(const ManagedProperty &mp, const QString &description)
{
	QComboBox *cmb = new QComboBox(this);
	addWidget(cmb, description, mp);
	return cmb;
}

QSpinBox *UniversalInputDialog::addSpinBox(const ManagedProperty &mp, const QString &description)
{
	QSpinBox *spinBox = new QSpinBox(this);
	spinBox->setMaximum(10000000);
	addWidget(spinBox, description, mp);
	return spinBox;
}

QDoubleSpinBox *UniversalInputDialog::addDoubleSpinBox(const ManagedProperty &mp, const QString &description)
{
	QDoubleSpinBox *spinBox = new QDoubleSpinBox(this);
	spinBox->setMinimum(-10000000);
	spinBox->setMaximum(10000000);
	addWidget(spinBox, description, mp);
	return spinBox;
}

QLineEdit *UniversalInputDialog::addLineEdit(const ManagedProperty &mp, const QString &description)
{
	QLineEdit *edit = new QLineEdit(this);
	addWidget(edit, description, mp);
	return edit;
}

QTextEdit *UniversalInputDialog::addTextEdit(const ManagedProperty &mp, const QString &description)
{
	QTextEdit *edit = new QTextEdit(this);
	addWidget(edit, description, mp);
	return edit;
}

QCheckBox *UniversalInputDialog::addVariable(bool *var, const QString &description)
{
	return addCheckBox(ManagedProperty(var), description);
}

QSpinBox *UniversalInputDialog::addVariable(int *var, const QString &description)
{
	return addSpinBox(ManagedProperty(var), description);
}

QLineEdit *UniversalInputDialog::addVariable(QString *var, const QString &description)
{
	return addLineEdit(ManagedProperty(var), description);
}

QComboBox *UniversalInputDialog::addVariable(QStringList *var, const QString &description)
{
	return addComboBox(ManagedProperty(var), description);
}

QTextEdit *UniversalInputDialog::addTextEdit(QString *var, const QString &description)
{
	return addTextEdit(ManagedProperty(var), description);
}

QDoubleSpinBox *UniversalInputDialog::addVariable(float *var, const QString &description)
{
	return addDoubleSpinBox(ManagedProperty(var), description);
}

void UniversalInputDialog::showEvent(QShowEvent *event)
{
	QDialog::showEvent(event);
	if (event->spontaneous()) return;
	QDialogButtonBox *box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
	box->button(QDialogButtonBox::Ok)->setDefault(true);
	connect(box, SIGNAL(accepted()), this, SLOT(myAccept()));
	connect(box, SIGNAL(rejected()), this, SLOT(reject()));
	gridLayout->addWidget(box, gridLayout->rowCount(), 0, 1, 2, 0);
	setLayout(gridLayout);
}