diff options
Diffstat (limited to 'utils/themeeditor/gui/devicestate.cpp')
-rw-r--r-- | utils/themeeditor/gui/devicestate.cpp | 182 |
1 files changed, 178 insertions, 4 deletions
diff --git a/utils/themeeditor/gui/devicestate.cpp b/utils/themeeditor/gui/devicestate.cpp index af0b846372..fb35e77b36 100644 --- a/utils/themeeditor/gui/devicestate.cpp +++ b/utils/themeeditor/gui/devicestate.cpp | |||
@@ -22,14 +22,188 @@ | |||
22 | #include "devicestate.h" | 22 | #include "devicestate.h" |
23 | #include "ui_devicestate.h" | 23 | #include "ui_devicestate.h" |
24 | 24 | ||
25 | #include <QScrollArea> | ||
26 | #include <QFile> | ||
27 | #include <QCheckBox> | ||
28 | #include <QSpinBox> | ||
29 | #include <QComboBox> | ||
30 | |||
25 | DeviceState::DeviceState(QWidget *parent) : | 31 | DeviceState::DeviceState(QWidget *parent) : |
26 | QWidget(parent), | 32 | QWidget(parent), tabs(this) |
27 | ui(new Ui::DeviceState) | ||
28 | { | 33 | { |
29 | ui->setupUi(this); | 34 | /* UI stuff */ |
35 | resize(500,400); | ||
36 | setWindowIcon(QIcon(":/resources/windowicon.png")); | ||
37 | setWindowTitle(tr("Device Settings")); | ||
38 | |||
39 | QVBoxLayout* layout = new QVBoxLayout(this); | ||
40 | layout->addWidget(&tabs); | ||
41 | this->setLayout(layout); | ||
42 | |||
43 | /* Loading the tabs */ | ||
44 | QScrollArea* currentArea; | ||
45 | QHBoxLayout* subLayout; | ||
46 | QWidget* panel; | ||
47 | QWidget* temp; | ||
48 | |||
49 | QFile fin(":/resources/deviceoptions"); | ||
50 | fin.open(QFile::Text | QFile::ReadOnly); | ||
51 | while(!fin.atEnd()) | ||
52 | { | ||
53 | QString line = QString(fin.readLine()); | ||
54 | line = line.trimmed(); | ||
55 | |||
56 | /* Continue on a comment or an empty line */ | ||
57 | if(line[0] == '#' || line.length() == 0) | ||
58 | continue; | ||
59 | |||
60 | if(line[0] == '[') | ||
61 | { | ||
62 | QString buffer; | ||
63 | for(int i = 1; line[i] != ']'; i++) | ||
64 | buffer.append(line[i]); | ||
65 | buffer = buffer.trimmed(); | ||
66 | |||
67 | panel = new QWidget(); | ||
68 | currentArea = new QScrollArea(); | ||
69 | layout = new QVBoxLayout(panel); | ||
70 | currentArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); | ||
71 | currentArea->setWidget(panel); | ||
72 | currentArea->setWidgetResizable(true); | ||
73 | |||
74 | tabs.addTab(currentArea, buffer); | ||
75 | |||
76 | continue; | ||
77 | } | ||
78 | |||
79 | QStringList elements = line.split(";"); | ||
80 | QString tag = elements[0].trimmed(); | ||
81 | QString title = elements[1].trimmed(); | ||
82 | QString type = elements[2].trimmed(); | ||
83 | QString defVal = elements[3].trimmed(); | ||
84 | |||
85 | subLayout = new QHBoxLayout(); | ||
86 | if(type != "check") | ||
87 | subLayout->addWidget(new QLabel(elements[1].trimmed(), currentArea)); | ||
88 | layout->addLayout(subLayout); | ||
89 | |||
90 | |||
91 | elements = type.split("("); | ||
92 | if(elements[0].trimmed() == "text") | ||
93 | { | ||
94 | temp = new QLineEdit(defVal, currentArea); | ||
95 | subLayout->addWidget(temp); | ||
96 | inputs.insert(tag, QPair<InputType, QWidget*>(Text, temp)); | ||
97 | } | ||
98 | else if(elements[0].trimmed() == "check") | ||
99 | { | ||
100 | temp = new QCheckBox(title, currentArea); | ||
101 | subLayout->addWidget(temp); | ||
102 | if(defVal.toLower() == "true") | ||
103 | dynamic_cast<QCheckBox*>(temp)->setChecked(true); | ||
104 | else | ||
105 | dynamic_cast<QCheckBox*>(temp)->setChecked(false); | ||
106 | inputs.insert(tag, QPair<InputType, QWidget*>(Check, temp)); | ||
107 | } | ||
108 | else if(elements[0].trimmed() == "slider") | ||
109 | { | ||
110 | elements = elements[1].trimmed().split(","); | ||
111 | int min = elements[0].trimmed().toInt(); | ||
112 | QString maxS = elements[1].trimmed(); | ||
113 | maxS.chop(1); | ||
114 | int max = maxS.toInt(); | ||
115 | |||
116 | temp = new QSlider(Qt::Horizontal, currentArea); | ||
117 | dynamic_cast<QSlider*>(temp)->setMinimum(min); | ||
118 | dynamic_cast<QSlider*>(temp)->setMaximum(max); | ||
119 | dynamic_cast<QSlider*>(temp)->setValue(defVal.toInt()); | ||
120 | subLayout->addWidget(temp); | ||
121 | inputs.insert(tag, QPair<InputType, QWidget*>(Slide, temp)); | ||
122 | } | ||
123 | else if(elements[0].trimmed() == "spin") | ||
124 | { | ||
125 | elements = elements[1].trimmed().split(","); | ||
126 | int min = elements[0].trimmed().toInt(); | ||
127 | QString maxS = elements[1].trimmed(); | ||
128 | maxS.chop(1); | ||
129 | int max = maxS.toInt(); | ||
130 | |||
131 | temp = new QSpinBox(currentArea); | ||
132 | dynamic_cast<QSpinBox*>(temp)->setMinimum(min); | ||
133 | dynamic_cast<QSpinBox*>(temp)->setMaximum(max); | ||
134 | dynamic_cast<QSpinBox*>(temp)->setValue(defVal.toInt()); | ||
135 | subLayout->addWidget(temp); | ||
136 | inputs.insert(tag, QPair<InputType, QWidget*>(Spin, temp)); | ||
137 | } | ||
138 | else if(elements[0].trimmed() == "fspin") | ||
139 | { | ||
140 | elements = elements[1].trimmed().split(","); | ||
141 | int min = elements[0].trimmed().toDouble(); | ||
142 | QString maxS = elements[1].trimmed(); | ||
143 | maxS.chop(1); | ||
144 | int max = maxS.toDouble(); | ||
145 | |||
146 | temp = new QDoubleSpinBox(currentArea); | ||
147 | dynamic_cast<QDoubleSpinBox*>(temp)->setMinimum(min); | ||
148 | dynamic_cast<QDoubleSpinBox*>(temp)->setMaximum(max); | ||
149 | dynamic_cast<QDoubleSpinBox*>(temp)->setValue(defVal.toDouble()); | ||
150 | dynamic_cast<QDoubleSpinBox*>(temp)->setSingleStep(0.1); | ||
151 | subLayout->addWidget(temp); | ||
152 | inputs.insert(tag, QPair<InputType, QWidget*>(DSpin, temp)); | ||
153 | } | ||
154 | else if(elements[0].trimmed() == "combo") | ||
155 | { | ||
156 | elements = elements[1].trimmed().split(","); | ||
157 | |||
158 | int defIndex; | ||
159 | temp = new QComboBox(currentArea); | ||
160 | for(int i = 0; i < elements.count(); i++) | ||
161 | { | ||
162 | QString current = elements[i].trimmed(); | ||
163 | if(i == elements.count() - 1) | ||
164 | current.chop(1); | ||
165 | dynamic_cast<QComboBox*>(temp)->addItem(current, i); | ||
166 | if(current == defVal) | ||
167 | defIndex = i; | ||
168 | } | ||
169 | dynamic_cast<QComboBox*>(temp)->setCurrentIndex(defIndex); | ||
170 | subLayout->addWidget(temp); | ||
171 | inputs.insert(tag, QPair<InputType, QWidget*>(Combo, temp)); | ||
172 | } | ||
173 | |||
174 | } | ||
30 | } | 175 | } |
31 | 176 | ||
32 | DeviceState::~DeviceState() | 177 | DeviceState::~DeviceState() |
33 | { | 178 | { |
34 | delete ui; | 179 | } |
180 | |||
181 | QVariant DeviceState::data(QString tag) | ||
182 | { | ||
183 | QPair<InputType, QWidget*> found = | ||
184 | inputs.value(tag, QPair<InputType, QWidget*>(Slide, 0)); | ||
185 | |||
186 | if(found.second == 0) | ||
187 | return QVariant(); | ||
188 | |||
189 | switch(found.first) | ||
190 | { | ||
191 | case Text: | ||
192 | return dynamic_cast<QLineEdit*>(found.second)->text(); | ||
193 | |||
194 | case Slide: | ||
195 | return dynamic_cast<QSlider*>(found.second)->value(); | ||
196 | |||
197 | case Spin: | ||
198 | return dynamic_cast<QSpinBox*>(found.second)->value(); | ||
199 | |||
200 | case DSpin: | ||
201 | return dynamic_cast<QDoubleSpinBox*>(found.second)->value(); | ||
202 | |||
203 | case Combo: | ||
204 | return dynamic_cast<QComboBox*>(found.second)->currentIndex(); | ||
205 | |||
206 | case Check: | ||
207 | return dynamic_cast<QCheckBox*>(found.second)->isChecked(); | ||
208 | } | ||
35 | } | 209 | } |