diff options
| author | Robert Bieber <robby@bieberphoto.com> | 2010-07-09 02:11:34 +0000 |
|---|---|---|
| committer | Robert Bieber <robby@bieberphoto.com> | 2010-07-09 02:11:34 +0000 |
| commit | b99066440f841e6d46816f7dda3cfdcf9a5b6ffb (patch) | |
| tree | 2744af08857369df3537f782ff05dfa2bceccc06 /utils/themeeditor/gui/skintimer.cpp | |
| parent | 73a3747bc1b33200207768b101bf56083416d756 (diff) | |
| download | rockbox-b99066440f841e6d46816f7dda3cfdcf9a5b6ffb.zip rockbox-b99066440f841e6d46816f7dda3cfdcf9a5b6ffb.tar.gz rockbox-b99066440f841e6d46816f7dda3cfdcf9a5b6ffb.tar.bz2 rockbox-b99066440f841e6d46816f7dda3cfdcf9a5b6ffb.tar.xz | |
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
Diffstat (limited to 'utils/themeeditor/gui/skintimer.cpp')
| -rw-r--r-- | utils/themeeditor/gui/skintimer.cpp | 123 |
1 files changed, 122 insertions, 1 deletions
diff --git a/utils/themeeditor/gui/skintimer.cpp b/utils/themeeditor/gui/skintimer.cpp index f228a2f..d4b191e 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; + } } |