1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Robert Bieber 2010-07-09 02:11:34 +00:00
parent 73a3747bc1
commit b99066440f
5 changed files with 147 additions and 6 deletions

View file

@ -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;
}
}