From b99066440f841e6d46816f7dda3cfdcf9a5b6ffb Mon Sep 17 00:00:00 2001 From: Robert Bieber Date: Fri, 9 Jul 2010 02:11:34 +0000 Subject: [PATCH] Theme Editor: Implemented timer panel functionality, added missing seconds field to device control panel git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27354 a1c6a512-1295-4272-9138-f99709370657 --- utils/themeeditor/gui/devicestate.cpp | 8 ++ utils/themeeditor/gui/skintimer.cpp | 125 +++++++++++++++++++++- utils/themeeditor/gui/skintimer.h | 5 + utils/themeeditor/gui/skintimer.ui | 14 ++- utils/themeeditor/resources/deviceoptions | 1 + 5 files changed, 147 insertions(+), 6 deletions(-) diff --git a/utils/themeeditor/gui/devicestate.cpp b/utils/themeeditor/gui/devicestate.cpp index 63d80342c1..21f95bfa10 100644 --- a/utils/themeeditor/gui/devicestate.cpp +++ b/utils/themeeditor/gui/devicestate.cpp @@ -402,6 +402,14 @@ QVariant DeviceState::data(QString tag, int paramCount, { return data("?cw"); } + else if(tag == "cs") + { + int seconds = data("seconds").toInt(); + if(seconds < 10) + return "0" + QString::number(seconds); + else + return seconds; + } QPair found = inputs.value(tag, QPair(Slide, 0)); diff --git a/utils/themeeditor/gui/skintimer.cpp b/utils/themeeditor/gui/skintimer.cpp index f228a2f097..d4b191e25d 100644 --- a/utils/themeeditor/gui/skintimer.cpp +++ b/utils/themeeditor/gui/skintimer.cpp @@ -22,7 +22,7 @@ #include "skintimer.h" #include "ui_skintimer.h" -const int SkinTimer::millisPerTick = 10; +const int SkinTimer::millisPerTick = 250; SkinTimer::SkinTimer(DeviceState* device, QWidget *parent) : QWidget(parent), @@ -30,6 +30,7 @@ SkinTimer::SkinTimer(DeviceState* device, QWidget *parent) : device(device) { ui->setupUi(this); + setupUI(); } SkinTimer::~SkinTimer() @@ -37,22 +38,142 @@ SkinTimer::~SkinTimer() delete ui; } +void SkinTimer::setupUI() +{ + playStateButtons.append(ui->playButton); + playStateButtons.append(ui->pauseButton); + playStateButtons.append(ui->rwndButton); + playStateButtons.append(ui->ffwdButton); + + QObject::connect(ui->startButton, SIGNAL(clicked()), + this, SLOT(start())); + QObject::connect(ui->stopButton, SIGNAL(clicked()), + this, SLOT(stop())); + QObject::connect(&timer, SIGNAL(timeout()), + this, SLOT(tick())); + for(int i = 0; i < playStateButtons.count(); i++) + QObject::connect(playStateButtons[i], SIGNAL(toggled(bool)), + this, SLOT(stateChange())); + QObject::connect(device, SIGNAL(settingsChanged()), + this, SLOT(deviceChange())); + + int playState = device->data("?mp").toInt(); + switch(playState) + { + default: + case 1: + ui->playButton->setChecked(true); + break; + case 2: + ui->pauseButton->setChecked(true); + break; + case 3: + ui->ffwdButton->setChecked(true); + break; + case 4: + ui->rwndButton->setChecked(true); + break; + } +} + void SkinTimer::start() { + ui->startButton->setEnabled(false); + ui->stopButton->setEnabled(true); + ui->speedBox->setEnabled(false); + ui->durationBox->setEnabled(false); + totalTime = ui->durationBox->value() * 1000; + elapsedTime = 0; + + timer.setInterval(millisPerTick); + ui->statusBar->setValue(0); + timer.start(); } void SkinTimer::stop() { + ui->startButton->setEnabled(true); + ui->stopButton->setEnabled(false); + ui->speedBox->setEnabled(true); + ui->durationBox->setEnabled(true); + timer.stop(); } void SkinTimer::tick() { + elapsedTime += millisPerTick * ui->speedBox->value(); + if(elapsedTime >= totalTime) + { + ui->statusBar->setValue(100); + stop(); + } + + /* Calculating the simulated time elapsed */ + double dTime = millisPerTick * ui->speedBox->value() / 1000; + + /* Adding to the device's simtime */ + device->setData("simtime", device->data("simtime").toDouble() + dTime); + + /* Adding to the song time depending on mode*/ + double songTime = device->data("?pc").toDouble(); + double trackTime = device->data("?pt").toDouble(); + if(ui->playButton->isChecked()) + songTime += dTime; + else if(ui->rwndButton->isChecked()) + songTime -= 2 * dTime; + else if(ui->ffwdButton->isChecked()) + songTime += 2 * dTime; + + if(songTime > trackTime) + { + songTime = trackTime; + ui->pauseButton->setChecked(true); + } + if(songTime < 0) + { + songTime = 0; + ui->pauseButton->setChecked(true); + } + + device->setData("?pc", songTime); + + /* Updating the status bar */ + ui->statusBar->setValue(elapsedTime * 100 / totalTime); } void SkinTimer::stateChange() { - + if(ui->playButton->isChecked()) + device->setData("mp", "Play"); + else if(ui->pauseButton->isChecked()) + device->setData("mp", "Pause"); + else if(ui->rwndButton->isChecked()) + device->setData("mp", "Rewind"); + else if(ui->ffwdButton->isChecked()) + device->setData("mp", "Fast Forward"); +} + +void SkinTimer::deviceChange() +{ + int playState = device->data("?mp").toInt(); + switch(playState) + { + case 1: + ui->playButton->setChecked(true); + break; + case 2: + ui->pauseButton->setChecked(true); + break; + case 3: + ui->ffwdButton->setChecked(true); + break; + case 4: + ui->rwndButton->setChecked(true); + break; + default: + break; + } } diff --git a/utils/themeeditor/gui/skintimer.h b/utils/themeeditor/gui/skintimer.h index b6c8061028..3ede0bcf61 100644 --- a/utils/themeeditor/gui/skintimer.h +++ b/utils/themeeditor/gui/skintimer.h @@ -24,6 +24,7 @@ #include #include +#include #include "devicestate.h" @@ -44,6 +45,7 @@ private slots: void stop(); void tick(); void stateChange(); + void deviceChange(); private: void setupUI(); @@ -53,6 +55,9 @@ private: QTimer timer; unsigned long int elapsedTime; + unsigned long int totalTime; + + QList playStateButtons; }; #endif // SKINTIMER_H diff --git a/utils/themeeditor/gui/skintimer.ui b/utils/themeeditor/gui/skintimer.ui index a9f5feafd7..b60be5f16c 100644 --- a/utils/themeeditor/gui/skintimer.ui +++ b/utils/themeeditor/gui/skintimer.ui @@ -7,7 +7,7 @@ 0 0 238 - 204 + 198 @@ -39,7 +39,7 @@ 1 - 0.100000000000000 + 0.600000000000000 3.000000000000000 @@ -58,12 +58,12 @@ Duration - spinBox + durationBox - + s @@ -82,9 +82,15 @@ + + false + 0 + + false + diff --git a/utils/themeeditor/resources/deviceoptions b/utils/themeeditor/resources/deviceoptions index 1fb2832d13..3d1a92cfa8 100644 --- a/utils/themeeditor/resources/deviceoptions +++ b/utils/themeeditor/resources/deviceoptions @@ -131,6 +131,7 @@ day ; Day of Month ; spin(1,31) ; 20 ?cw ; Day of Week ; combo(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday) ; Tuesday hour ; Hour (24h) ; spin(0, 23) ; 12 minute ; Minute ; spin(0, 59) ; 25 +second ; Second ; spin(0, 59) ; 20 [Recording Status] Rp ; Target Has Recorder ; check ; false