Stefan Schuermans commited on 2013-11-14 21:38:33
Showing 4 changed files, with 84 additions and 2 deletions.
... | ... |
@@ -36,6 +36,24 @@ |
36 | 36 |
<property name="position">0</property> |
37 | 37 |
</packing> |
38 | 38 |
</child> |
39 |
+ <child> |
|
40 |
+ <object class="GtkBox" id="PositionBox"> |
|
41 |
+ <property name="visible">True</property> |
|
42 |
+ <property name="can_focus">False</property> |
|
43 |
+ <child> |
|
44 |
+ <object class="GtkLabel" id="PositionAt"> |
|
45 |
+ <property name="visible">True</property> |
|
46 |
+ <property name="can_focus">False</property> |
|
47 |
+ <property name="margin_left">3</property> |
|
48 |
+ <property name="margin_right">3</property> |
|
49 |
+ <property name="label" translatable="yes">0:00:00.00</property> |
|
50 |
+ </object> |
|
51 |
+ <packing> |
|
52 |
+ <property name="expand">False</property> |
|
53 |
+ <property name="fill">True</property> |
|
54 |
+ <property name="position">0</property> |
|
55 |
+ </packing> |
|
56 |
+ </child> |
|
39 | 57 |
<child> |
40 | 58 |
<object class="GtkScale" id="PositionScale"> |
41 | 59 |
<property name="visible">True</property> |
... | ... |
@@ -45,9 +63,31 @@ |
45 | 63 |
<property name="adjustment">Position</property> |
46 | 64 |
<property name="restrict_to_fill_level">False</property> |
47 | 65 |
<property name="fill_level">100</property> |
48 |
- <property name="round_digits">2</property> |
|
49 | 66 |
<property name="digits">2</property> |
67 |
+ <property name="draw_value">False</property> |
|
50 | 68 |
<property name="value_pos">bottom</property> |
69 |
+ <signal name="change-value" handler="onNewPosition" swapped="no"/> |
|
70 |
+ </object> |
|
71 |
+ <packing> |
|
72 |
+ <property name="expand">True</property> |
|
73 |
+ <property name="fill">True</property> |
|
74 |
+ <property name="position">1</property> |
|
75 |
+ </packing> |
|
76 |
+ </child> |
|
77 |
+ <child> |
|
78 |
+ <object class="GtkLabel" id="PositionRemaining"> |
|
79 |
+ <property name="visible">True</property> |
|
80 |
+ <property name="can_focus">False</property> |
|
81 |
+ <property name="margin_left">3</property> |
|
82 |
+ <property name="margin_right">3</property> |
|
83 |
+ <property name="label" translatable="yes">0:00:00.00</property> |
|
84 |
+ </object> |
|
85 |
+ <packing> |
|
86 |
+ <property name="expand">False</property> |
|
87 |
+ <property name="fill">True</property> |
|
88 |
+ <property name="position">2</property> |
|
89 |
+ </packing> |
|
90 |
+ </child> |
|
51 | 91 |
</object> |
52 | 92 |
<packing> |
53 | 93 |
<property name="expand">False</property> |
... | ... |
@@ -1,9 +1,10 @@ |
1 | 1 |
#! /usr/bin/env python |
2 | 2 |
|
3 | 3 |
import os |
4 |
- |
|
5 | 4 |
from gi.repository import Gtk |
6 | 5 |
|
6 |
+import time_fmt |
|
7 |
+ |
|
7 | 8 |
scriptdir = os.path.dirname(os.path.abspath(__file__)) |
8 | 9 |
|
9 | 10 |
class SyncGui: |
... | ... |
@@ -11,11 +12,15 @@ class SyncGui: |
11 | 12 |
self.builder = Gtk.Builder() |
12 | 13 |
self.builder.add_from_file(scriptdir + "/sync_gui.glade") |
13 | 14 |
self.position = self.builder.get_object("Position") |
15 |
+ self.positionScale = self.builder.get_object("PositionScale") |
|
16 |
+ self.positionAt = self.builder.get_object("PositionAt") |
|
17 |
+ self.positionRemaining = self.builder.get_object("PositionRemaining") |
|
14 | 18 |
self.btnPause = self.builder.get_object("Pause") |
15 | 19 |
self.btnPlay = self.builder.get_object("Play") |
16 | 20 |
self.status = self.builder.get_object("Status") |
17 | 21 |
handlers = { |
18 | 22 |
"onDestroy": self.onDestroy, |
23 |
+ "onNewPosition": self.onNewPosition, |
|
19 | 24 |
"onPrevious": self.onPrevious, |
20 | 25 |
"onBackward": self.onBackward, |
21 | 26 |
"onStop": self.onStop, |
... | ... |
@@ -26,10 +31,29 @@ class SyncGui: |
26 | 31 |
} |
27 | 32 |
self.builder.connect_signals(handlers) |
28 | 33 |
self.status.push(0, "TODO...") |
34 |
+ self.showCurrentPosition() |
|
35 |
+ |
|
36 |
+ def showPosition(self, sec): |
|
37 |
+ if sec < 0: |
|
38 |
+ sec = 0 |
|
39 |
+ if sec > self.position.get_upper(): |
|
40 |
+ sec = self.position.get_upper() |
|
41 |
+ posAt = time_fmt.sec2str(sec) |
|
42 |
+ posRemaining = time_fmt.sec2str(self.position.get_upper() - sec) |
|
43 |
+ self.positionAt.set_text(posAt) |
|
44 |
+ self.positionRemaining.set_text(posRemaining) |
|
45 |
+ |
|
46 |
+ def showCurrentPosition(self): |
|
47 |
+ sec = self.positionScale.get_value() |
|
48 |
+ self.showPosition(sec) |
|
29 | 49 |
|
30 | 50 |
def onDestroy(self, widget): |
31 | 51 |
Gtk.main_quit() |
32 | 52 |
|
53 |
+ def onNewPosition(self, widget, scroll, value): |
|
54 |
+ print("new position " + str(value)); |
|
55 |
+ self.showPosition(value) |
|
56 |
+ |
|
33 | 57 |
def onPrevious(self, widget): |
34 | 58 |
print("previous") |
35 | 59 |
|
... | ... |
@@ -0,0 +1,16 @@ |
1 |
+#! /usr/bin/env python |
|
2 |
+ |
|
3 |
+def sec2str(sec): |
|
4 |
+ sign = "" |
|
5 |
+ if sec < 0: |
|
6 |
+ sign = "-"; |
|
7 |
+ sec = -sec; |
|
8 |
+ sec1 = int(sec) |
|
9 |
+ sec100 = round((sec - sec1) * 100) |
|
10 |
+ minu = sec1 // 60 |
|
11 |
+ sec1 = sec1 % 60 |
|
12 |
+ hour = minu // 60 |
|
13 |
+ minu = minu % 60 |
|
14 |
+ return "%s%u:%02u:%02u.%02u" % (sign, hour, minu, sec1, sec100) |
|
15 |
+ |
|
16 |
+ |
|
0 | 17 |