summaryrefslogtreecommitdiff
path: root/utils/themeeditor/gui/devicestate.cpp
diff options
context:
space:
mode:
authorRobert Bieber <robby@bieberphoto.com>2010-06-24 07:59:41 +0000
committerRobert Bieber <robby@bieberphoto.com>2010-06-24 07:59:41 +0000
commit1ae6ee263b9ef6f356760002f3f02197927a963b (patch)
treec9fec66fd676f421e22554f0b51a3a4a2f9ffab8 /utils/themeeditor/gui/devicestate.cpp
parent103eabd31fb4a5b21e183a7a081ad204720e0eb0 (diff)
downloadrockbox-1ae6ee263b9ef6f356760002f3f02197927a963b.zip
rockbox-1ae6ee263b9ef6f356760002f3f02197927a963b.tar.gz
rockbox-1ae6ee263b9ef6f356760002f3f02197927a963b.tar.bz2
rockbox-1ae6ee263b9ef6f356760002f3f02197927a963b.tar.xz
Theme Editor: Fixed some resource alias issues, implemented device configuration panel that loads options from a text file
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27102 a1c6a512-1295-4272-9138-f99709370657
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 af0b846..fb35e77 100644
--- a/utils/themeeditor/gui/devicestate.cpp
+++ b/utils/themeeditor/gui/devicestate.cpp
@@ -22,14 +22,188 @@
#include "devicestate.h"
#include "ui_devicestate.h"
+#include <QScrollArea>
+#include <QFile>
+#include <QCheckBox>
+#include <QSpinBox>
+#include <QComboBox>
+
DeviceState::DeviceState(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::DeviceState)
+ QWidget(parent), tabs(this)
{
- ui->setupUi(this);
+ /* UI stuff */
+ resize(500,400);
+ setWindowIcon(QIcon(":/resources/windowicon.png"));
+ setWindowTitle(tr("Device Settings"));
+
+ QVBoxLayout* layout = new QVBoxLayout(this);
+ layout->addWidget(&tabs);
+ this->setLayout(layout);
+
+ /* Loading the tabs */
+ QScrollArea* currentArea;
+ QHBoxLayout* subLayout;
+ QWidget* panel;
+ QWidget* temp;
+
+ QFile fin(":/resources/deviceoptions");
+ fin.open(QFile::Text | QFile::ReadOnly);
+ while(!fin.atEnd())
+ {
+ QString line = QString(fin.readLine());
+ line = line.trimmed();
+
+ /* Continue on a comment or an empty line */
+ if(line[0] == '#' || line.length() == 0)
+ continue;
+
+ if(line[0] == '[')
+ {
+ QString buffer;
+ for(int i = 1; line[i] != ']'; i++)
+ buffer.append(line[i]);
+ buffer = buffer.trimmed();
+
+ panel = new QWidget();
+ currentArea = new QScrollArea();
+ layout = new QVBoxLayout(panel);
+ currentArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ currentArea->setWidget(panel);
+ currentArea->setWidgetResizable(true);
+
+ tabs.addTab(currentArea, buffer);
+
+ continue;
+ }
+
+ QStringList elements = line.split(";");
+ QString tag = elements[0].trimmed();
+ QString title = elements[1].trimmed();
+ QString type = elements[2].trimmed();
+ QString defVal = elements[3].trimmed();
+
+ subLayout = new QHBoxLayout();
+ if(type != "check")
+ subLayout->addWidget(new QLabel(elements[1].trimmed(), currentArea));
+ layout->addLayout(subLayout);
+
+
+ elements = type.split("(");
+ if(elements[0].trimmed() == "text")
+ {
+ temp = new QLineEdit(defVal, currentArea);
+ subLayout->addWidget(temp);
+ inputs.insert(tag, QPair<InputType, QWidget*>(Text, temp));
+ }
+ else if(elements[0].trimmed() == "check")
+ {
+ temp = new QCheckBox(title, currentArea);
+ subLayout->addWidget(temp);
+ if(defVal.toLower() == "true")
+ dynamic_cast<QCheckBox*>(temp)->setChecked(true);
+ else
+ dynamic_cast<QCheckBox*>(temp)->setChecked(false);
+ inputs.insert(tag, QPair<InputType, QWidget*>(Check, temp));
+ }
+ else if(elements[0].trimmed() == "slider")
+ {
+ elements = elements[1].trimmed().split(",");
+ int min = elements[0].trimmed().toInt();
+ QString maxS = elements[1].trimmed();
+ maxS.chop(1);
+ int max = maxS.toInt();
+
+ temp = new QSlider(Qt::Horizontal, currentArea);
+ dynamic_cast<QSlider*>(temp)->setMinimum(min);
+ dynamic_cast<QSlider*>(temp)->setMaximum(max);
+ dynamic_cast<QSlider*>(temp)->setValue(defVal.toInt());
+ subLayout->addWidget(temp);
+ inputs.insert(tag, QPair<InputType, QWidget*>(Slide, temp));
+ }
+ else if(elements[0].trimmed() == "spin")
+ {
+ elements = elements[1].trimmed().split(",");
+ int min = elements[0].trimmed().toInt();
+ QString maxS = elements[1].trimmed();
+ maxS.chop(1);
+ int max = maxS.toInt();
+
+ temp = new QSpinBox(currentArea);
+ dynamic_cast<QSpinBox*>(temp)->setMinimum(min);
+ dynamic_cast<QSpinBox*>(temp)->setMaximum(max);
+ dynamic_cast<QSpinBox*>(temp)->setValue(defVal.toInt());
+ subLayout->addWidget(temp);
+ inputs.insert(tag, QPair<InputType, QWidget*>(Spin, temp));
+ }
+ else if(elements[0].trimmed() == "fspin")
+ {
+ elements = elements[1].trimmed().split(",");
+ int min = elements[0].trimmed().toDouble();
+ QString maxS = elements[1].trimmed();
+ maxS.chop(1);
+ int max = maxS.toDouble();
+
+ temp = new QDoubleSpinBox(currentArea);
+ dynamic_cast<QDoubleSpinBox*>(temp)->setMinimum(min);
+ dynamic_cast<QDoubleSpinBox*>(temp)->setMaximum(max);
+ dynamic_cast<QDoubleSpinBox*>(temp)->setValue(defVal.toDouble());
+ dynamic_cast<QDoubleSpinBox*>(temp)->setSingleStep(0.1);
+ subLayout->addWidget(temp);
+ inputs.insert(tag, QPair<InputType, QWidget*>(DSpin, temp));
+ }
+ else if(elements[0].trimmed() == "combo")
+ {
+ elements = elements[1].trimmed().split(",");
+
+ int defIndex;
+ temp = new QComboBox(currentArea);
+ for(int i = 0; i < elements.count(); i++)
+ {
+ QString current = elements[i].trimmed();
+ if(i == elements.count() - 1)
+ current.chop(1);
+ dynamic_cast<QComboBox*>(temp)->addItem(current, i);
+ if(current == defVal)
+ defIndex = i;
+ }
+ dynamic_cast<QComboBox*>(temp)->setCurrentIndex(defIndex);
+ subLayout->addWidget(temp);
+ inputs.insert(tag, QPair<InputType, QWidget*>(Combo, temp));
+ }
+
+ }
}
DeviceState::~DeviceState()
{
- delete ui;
+}
+
+QVariant DeviceState::data(QString tag)
+{
+ QPair<InputType, QWidget*> found =
+ inputs.value(tag, QPair<InputType, QWidget*>(Slide, 0));
+
+ if(found.second == 0)
+ return QVariant();
+
+ switch(found.first)
+ {
+ case Text:
+ return dynamic_cast<QLineEdit*>(found.second)->text();
+
+ case Slide:
+ return dynamic_cast<QSlider*>(found.second)->value();
+
+ case Spin:
+ return dynamic_cast<QSpinBox*>(found.second)->value();
+
+ case DSpin:
+ return dynamic_cast<QDoubleSpinBox*>(found.second)->value();
+
+ case Combo:
+ return dynamic_cast<QComboBox*>(found.second)->currentIndex();
+
+ case Check:
+ return dynamic_cast<QCheckBox*>(found.second)->isChecked();
+ }
}