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
diff --git a/utils/themeeditor/gui/devicestate.cpp b/utils/themeeditor/gui/devicestate.cpp
index 63d8034..21f95bf 100644
--- a/utils/themeeditor/gui/devicestate.cpp
+++ b/utils/themeeditor/gui/devicestate.cpp
@@ -402,6 +402,14 @@
{
return data("?cw");
}
+ else if(tag == "cs")
+ {
+ int seconds = data("seconds").toInt();
+ if(seconds < 10)
+ return "0" + QString::number(seconds);
+ else
+ return seconds;
+ }
QPair<InputType, QWidget*> found =
inputs.value(tag, QPair<InputType, QWidget*>(Slide, 0));
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 @@
device(device)
{
ui->setupUi(this);
+ setupUI();
}
SkinTimer::~SkinTimer()
@@ -37,22 +38,142 @@
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 b6c8061..3ede0bc 100644
--- a/utils/themeeditor/gui/skintimer.h
+++ b/utils/themeeditor/gui/skintimer.h
@@ -24,6 +24,7 @@
#include <QWidget>
#include <QTimer>
+#include <QToolButton>
#include "devicestate.h"
@@ -44,6 +45,7 @@
void stop();
void tick();
void stateChange();
+ void deviceChange();
private:
void setupUI();
@@ -53,6 +55,9 @@
QTimer timer;
unsigned long int elapsedTime;
+ unsigned long int totalTime;
+
+ QList<QToolButton*> playStateButtons;
};
#endif // SKINTIMER_H
diff --git a/utils/themeeditor/gui/skintimer.ui b/utils/themeeditor/gui/skintimer.ui
index a9f5fea..b60be5f 100644
--- a/utils/themeeditor/gui/skintimer.ui
+++ b/utils/themeeditor/gui/skintimer.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>238</width>
- <height>204</height>
+ <height>198</height>
</rect>
</property>
<property name="windowTitle">
@@ -39,7 +39,7 @@
<number>1</number>
</property>
<property name="minimum">
- <double>0.100000000000000</double>
+ <double>0.600000000000000</double>
</property>
<property name="maximum">
<double>3.000000000000000</double>
@@ -58,12 +58,12 @@
<string>Duration</string>
</property>
<property name="buddy">
- <cstring>spinBox</cstring>
+ <cstring>durationBox</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
- <widget class="QSpinBox" name="spinBox">
+ <widget class="QSpinBox" name="durationBox">
<property name="suffix">
<string>s</string>
</property>
@@ -82,9 +82,15 @@
</item>
<item>
<widget class="QProgressBar" name="statusBar">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="value">
<number>0</number>
</property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
</widget>
</item>
<item>
diff --git a/utils/themeeditor/resources/deviceoptions b/utils/themeeditor/resources/deviceoptions
index 1fb2832..3d1a92c 100644
--- a/utils/themeeditor/resources/deviceoptions
+++ b/utils/themeeditor/resources/deviceoptions
@@ -131,6 +131,7 @@
?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