adcf27eed0a9c0c934ae138444a76b987df664b8
[watersofshiloah] / src / playcontrol.py
1 import logging
2
3 import gtk
4
5 import gtk_toolbox
6 import hildonize
7 import util.misc as misc_utils
8
9
10 _moduleLogger = logging.getLogger(__name__)
11
12
13 class PlayControl(object):
14
15         def __init__(self, player, store):
16                 self._isPortrait = True
17
18                 self._store = store
19
20                 self._player = player
21                 self._player.connect("state-change", self._on_player_state_change)
22                 self._player.connect("title-change", self._on_player_nav_change)
23
24                 img = store.get_image_from_store(store.STORE_LOOKUP["prev"])
25                 self._back = gtk.Button()
26                 self._back.set_image(img)
27                 self._back.connect("clicked", self._on_back_clicked)
28
29                 img = store.get_image_from_store(store.STORE_LOOKUP["stop"])
30                 self._stop = gtk.Button()
31                 self._stop.set_image(img)
32                 self._stop.connect("clicked", self._on_stop_clicked)
33
34                 img = store.get_image_from_store(store.STORE_LOOKUP["pause"])
35                 self._pause = gtk.Button()
36                 self._pause.set_image(img)
37                 self._pause.connect("clicked", self._on_pause_clicked)
38
39                 img = store.get_image_from_store(store.STORE_LOOKUP["play"])
40                 self._play = gtk.Button()
41                 self._play.set_image(img)
42                 self._play.connect("clicked", self._on_play_clicked)
43
44                 img = store.get_image_from_store(store.STORE_LOOKUP["next"])
45                 self._next = gtk.Button()
46                 self._next.set_image(img)
47                 self._next.connect("clicked", self._on_next_clicked)
48
49                 self._controls = gtk.HBox()
50                 self._controls.pack_start(self._back)
51                 self._controls.pack_start(self._stop)
52                 self._controls.pack_start(self._pause)
53                 self._controls.pack_start(self._play)
54                 self._controls.pack_start(self._next)
55
56                 self._layout = gtk.VBox()
57                 self._layout.pack_start(self._controls)
58
59         def refresh(self):
60                 if not self._player.title:
61                         self.toplevel.hide()
62                 self._set_navigate(self._player.can_navigate)
63                 self._set_state(self._player.state)
64
65         @property
66         def toplevel(self):
67                 return self._layout
68
69         def set_orientation(self, orientation):
70                 if orientation == gtk.ORIENTATION_VERTICAL:
71                         if self._isPortrait:
72                                 return
73                         self._isPortrait = True
74
75                         self._controls.remove(self._back)
76                         self._controls.remove(self._stop)
77                         self._controls.remove(self._pause)
78                         self._controls.remove(self._play)
79                         self._controls.remove(self._next)
80                         self._layout.remove(self._controls)
81
82                         self._controls = gtk.HBox()
83                         self._controls.pack_start(self._back)
84                         self._controls.pack_start(self._stop)
85                         self._controls.pack_start(self._pause)
86                         self._controls.pack_start(self._play)
87                         self._controls.pack_start(self._next)
88                         self._layout.pack_start(self._controls)
89                 elif orientation == gtk.ORIENTATION_HORIZONTAL:
90                         if not self._isPortrait:
91                                 return
92                         self._isPortrait = False
93
94                         self._controls.remove(self._back)
95                         self._controls.remove(self._stop)
96                         self._controls.remove(self._pause)
97                         self._controls.remove(self._play)
98                         self._controls.remove(self._next)
99                         self._layout.remove(self._controls)
100
101                         self._controls = gtk.VBox()
102                         self._controls.pack_start(self._back)
103                         self._controls.pack_start(self._stop)
104                         self._controls.pack_start(self._pause)
105                         self._controls.pack_start(self._play)
106                         self._controls.pack_start(self._next)
107                         self._layout.pack_start(self._controls)
108                 else:
109                         raise NotImplementedError(orientation)
110
111         def _set_navigate(self, canNavigate):
112                 if canNavigate:
113                         self._back.show()
114                         self._next.show()
115                 else:
116                         self._back.hide()
117                         self._next.hide()
118
119         def _set_state(self, newState):
120                 if newState == "play":
121                         self._pause.show()
122                         self._play.hide()
123                 elif newState == "pause":
124                         self._pause.hide()
125                         self._play.show()
126                 elif newState == "stop":
127                         self._pause.hide()
128                         self._play.show()
129
130         @misc_utils.log_exception(_moduleLogger)
131         def _on_player_state_change(self, player, newState):
132                 self._set_state(newState)
133
134         @misc_utils.log_exception(_moduleLogger)
135         def _on_player_nav_change(self, player, newState):
136                 self._set_navigate(player.can_navigate)
137
138         @misc_utils.log_exception(_moduleLogger)
139         def _on_back_clicked(self, *args):
140                 self._player.back()
141
142                 parent = gtk_toolbox.find_parent_window(self._layout)
143                 hildonize.show_information_banner(parent, self._player.title)
144
145         @misc_utils.log_exception(_moduleLogger)
146         def _on_stop_clicked(self, *args):
147                 self._pause.hide()
148                 self._play.show()
149                 self._player.stop()
150
151         @misc_utils.log_exception(_moduleLogger)
152         def _on_pause_clicked(self, *args):
153                 self._pause.show()
154                 self._play.hide()
155                 self._player.pause()
156
157         @misc_utils.log_exception(_moduleLogger)
158         def _on_play_clicked(self, *args):
159                 self._pause.hide()
160                 self._play.show()
161                 self._player.play()
162
163         @misc_utils.log_exception(_moduleLogger)
164         def _on_next_clicked(self, *args):
165                 self._player.next()
166
167                 parent = gtk_toolbox.find_parent_window(self._layout)
168                 hildonize.show_information_banner(parent, self._player.title)