Re-implemented TimeSlider.
[aesalon.git] / gui / src / session / TimeSlider.cpp
blob7cabacbdadef0fe45d01d63132e6658437043afb
1 #include <cmath>
2 #include <QTextStream>
3 #include <QDebug>
4 #include "TimeSlider.h"
5 #include "TimeSlider.moc"
7 TimeSlider::TimeSlider(QWidget* parent) : QWidget(parent) {
8 setLayout(new QHBoxLayout());
9 display = new QLineEdit("00:00.000");
10 display->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
11 connect(display, SIGNAL(returnPressed()), SLOT(update_slider()));
12 layout()->addWidget(display);
14 slider = new QSlider();
15 slider->setOrientation(Qt::Horizontal);
16 slider->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
17 slider->setInvertedControls(true);
18 slider->setSingleStep(100);
19 slider->setPageStep(5000);
20 slider->setMaximum(1000);
21 connect(slider, SIGNAL(valueChanged(int)), SLOT(update_display(int)));
22 layout()->addWidget(slider);
25 TimeSlider::~TimeSlider() {
29 void TimeSlider::set_range(const Timestamp& from, const Timestamp& to) {
30 slider->setMaximum(from.ms_until(to));
33 void TimeSlider::update_display(int new_value) {
34 if(new_value < 0) return;
35 QString string;
36 string.sprintf("%02i:%02i.%03i", (new_value / 1000) / 60, (new_value / 1000) % 60, new_value % 1000);
37 display->setText(string);
40 void TimeSlider::update_slider() {
41 QString string = display->text();
42 QByteArray input = string.toAscii();
43 int i = 0;
44 QString minutes, seconds, milliseconds;
45 for(; i < string.size(); i ++) {
46 if(isdigit(input[i])) {
47 minutes += input[i];
48 continue;
50 else if(input[i] == ':') break;
51 return;
53 if(input[i] != ':') return;
54 i ++;
55 for(; i < string.size(); i ++) {
56 if(isdigit(input[i])) {
57 seconds += input[i];
58 continue;
60 else if(input[i] == '.') break;
61 return;
63 if(i != string.size()) {
64 if(input[i] != '.') return;
65 i ++;
66 for(; i < string.size(); i ++) {
67 if(isdigit(input[i])) {
68 milliseconds += input[i];
69 continue;
71 return;
74 int value;
75 QTextStream stream(&milliseconds);
76 stream >> i;
77 value = i;
78 stream.setString(&seconds);
79 stream >> i;
80 value += i * 1000;
81 stream.setString(&minutes);
82 stream >> i;
83 value += i * 60000;
84 slider->setValue(value);