diff options
| author | Robert Bieber <robby@bieberphoto.com> | 2010-06-24 07:59:41 +0000 |
|---|---|---|
| committer | Robert Bieber <robby@bieberphoto.com> | 2010-06-24 07:59:41 +0000 |
| commit | 1ae6ee263b9ef6f356760002f3f02197927a963b (patch) | |
| tree | c9fec66fd676f421e22554f0b51a3a4a2f9ffab8 /utils/themeeditor/gui/devicestate.cpp | |
| parent | 103eabd31fb4a5b21e183a7a081ad204720e0eb0 (diff) | |
| download | rockbox-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.cpp | 182 |
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(); + } } |