summaryrefslogtreecommitdiff
path: root/utils/themeeditor/gui/devicestate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/themeeditor/gui/devicestate.cpp')
-rw-r--r--utils/themeeditor/gui/devicestate.cpp182
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
25DeviceState::DeviceState(QWidget *parent) : 31DeviceState::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
32DeviceState::~DeviceState() 177DeviceState::~DeviceState()
33{ 178{
34 delete ui; 179}
180
181QVariant 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}