Fixing issue with back button
[watersofshiloah] / src / windows / conferences.py
1 import logging
2
3 import gobject
4 import gtk
5
6 import hildonize
7 import util.go_utils as go_utils
8 import util.misc as misc_utils
9
10 import windows
11
12
13 _moduleLogger = logging.getLogger(__name__)
14
15
16 class ConferencesWindow(windows._base.ListWindow):
17
18         def __init__(self, app, player, store, node):
19                 windows._base.ListWindow.__init__(self, app, player, store, node)
20                 self._window.set_title(self._node.title)
21
22         @classmethod
23         def _get_columns(cls):
24                 yield gobject.TYPE_PYOBJECT, None
25
26                 textrenderer = gtk.CellRendererText()
27                 textrenderer.set_property("scale", 0.75)
28                 column = gtk.TreeViewColumn("Date")
29                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
30                 column.set_property("fixed-width", 96)
31                 column.pack_start(textrenderer, expand=True)
32                 column.add_attribute(textrenderer, "text", 1)
33                 yield gobject.TYPE_STRING, column
34
35                 textrenderer = gtk.CellRendererText()
36                 hildonize.set_cell_thumb_selectable(textrenderer)
37                 column = gtk.TreeViewColumn("Conference")
38                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
39                 column.pack_start(textrenderer, expand=True)
40                 column.add_attribute(textrenderer, "text", 2)
41                 yield gobject.TYPE_STRING, column
42
43         def _refresh(self):
44                 windows._base.ListWindow._refresh(self)
45                 self._node.get_children(
46                         self._on_conferences,
47                         self._on_error,
48                 )
49
50         @misc_utils.log_exception(_moduleLogger)
51         def _on_conferences(self, programs):
52                 if self._isDestroyed:
53                         _moduleLogger.info("Download complete but window destroyed")
54                         return
55
56                 self._hide_loading()
57                 for programNode in programs:
58                         program = programNode.get_properties()
59                         row = programNode, program["title"], program["full_title"]
60                         self._model.append(row)
61
62                 self._select_row()
63                 go_utils.Async(self._on_delay_scroll).start()
64
65         @misc_utils.log_exception(_moduleLogger)
66         def _on_error(self, exception):
67                 self._hide_loading()
68                 self._errorBanner.push_message(str(exception))
69
70         def _window_from_node(self, node):
71                 sessionsWindow = ConferenceSessionsWindow(self._app, self._player, self._store, node)
72                 if not hildonize.IS_FREMANTLE_SUPPORTED:
73                         sessionsWindow.window.set_modal(True)
74                         sessionsWindow.window.set_transient_for(self._window)
75                 if self._windowInFullscreen:
76                         sessionsWindow.window.fullscreen()
77                 else:
78                         sessionsWindow.window.unfullscreen()
79                 sessionsWindow.connect_auto(sessionsWindow, "quit", self._on_quit)
80                 sessionsWindow.connect_auto(sessionsWindow, "home", self._on_home)
81                 sessionsWindow.connect_auto(sessionsWindow, "jump-to", self._on_jump)
82                 sessionsWindow.connect_auto(sessionsWindow, "fullscreen", self._on_child_fullscreen)
83                 sessionsWindow.show()
84                 return sessionsWindow
85
86
87 gobject.type_register(ConferencesWindow)
88
89
90 class ConferenceSessionsWindow(windows._base.ListWindow):
91
92         def __init__(self, app, player, store, node):
93                 windows._base.ListWindow.__init__(self, app, player, store, node)
94                 self._window.set_title(self._node.title)
95
96         @classmethod
97         def _get_columns(cls):
98                 yield gobject.TYPE_PYOBJECT, None
99
100                 textrenderer = gtk.CellRendererText()
101                 hildonize.set_cell_thumb_selectable(textrenderer)
102                 column = gtk.TreeViewColumn("Session")
103                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
104                 column.pack_start(textrenderer, expand=True)
105                 column.add_attribute(textrenderer, "text", 1)
106                 yield gobject.TYPE_STRING, column
107
108         def _refresh(self):
109                 windows._base.ListWindow._refresh(self)
110                 self._node.get_children(
111                         self._on_conference_sessions,
112                         self._on_error,
113                 )
114
115         @misc_utils.log_exception(_moduleLogger)
116         def _on_conference_sessions(self, programs):
117                 if self._isDestroyed:
118                         _moduleLogger.info("Download complete but window destroyed")
119                         return
120
121                 self._hide_loading()
122                 for programNode in programs:
123                         program = programNode.get_properties()
124                         row = programNode, program["title"]
125                         self._model.append(row)
126
127                 self._select_row()
128                 go_utils.Async(self._on_delay_scroll).start()
129
130         @misc_utils.log_exception(_moduleLogger)
131         def _on_error(self, exception):
132                 self._hide_loading()
133                 self._errorBanner.push_message(str(exception))
134
135         def _window_from_node(self, node):
136                 sessionsWindow = ConferenceTalksWindow(self._app, self._player, self._store, node)
137                 if not hildonize.IS_FREMANTLE_SUPPORTED:
138                         sessionsWindow.window.set_modal(True)
139                         sessionsWindow.window.set_transient_for(self._window)
140                 if self._windowInFullscreen:
141                         sessionsWindow.window.fullscreen()
142                 else:
143                         sessionsWindow.window.unfullscreen()
144                 sessionsWindow.connect_auto(sessionsWindow, "quit", self._on_quit)
145                 sessionsWindow.connect_auto(sessionsWindow, "home", self._on_home)
146                 sessionsWindow.connect_auto(sessionsWindow, "jump-to", self._on_jump)
147                 sessionsWindow.connect_auto(sessionsWindow, "fullscreen", self._on_child_fullscreen)
148                 sessionsWindow.show()
149                 return sessionsWindow
150
151
152 gobject.type_register(ConferenceSessionsWindow)
153
154
155 class ConferenceTalksWindow(windows._base.ListWindow):
156
157         def __init__(self, app, player, store, node):
158                 windows._base.ListWindow.__init__(self, app, player, store, node)
159                 self._window.set_title(self._node.title)
160
161         @classmethod
162         def _get_columns(cls):
163                 yield gobject.TYPE_PYOBJECT, None
164
165                 textrenderer = gtk.CellRendererText()
166                 column = gtk.TreeViewColumn("Talk")
167                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
168                 column.pack_start(textrenderer, expand=True)
169                 column.add_attribute(textrenderer, "markup", 1)
170                 yield gobject.TYPE_STRING, column
171
172         def _refresh(self):
173                 windows._base.ListWindow._refresh(self)
174                 self._node.get_children(
175                         self._on_conference_talks,
176                         self._on_error,
177                 )
178
179         @misc_utils.log_exception(_moduleLogger)
180         def _on_conference_talks(self, programs):
181                 if self._isDestroyed:
182                         _moduleLogger.info("Download complete but window destroyed")
183                         return
184
185                 self._hide_loading()
186                 for programNode in programs:
187                         program = programNode.get_properties()
188                         row = programNode, "%s\n<small>%s</small>" % (programNode.title, programNode.subtitle)
189                         self._model.append(row)
190
191                 self._select_row()
192                 go_utils.Async(self._on_delay_scroll).start()
193
194         @misc_utils.log_exception(_moduleLogger)
195         def _on_error(self, exception):
196                 self._hide_loading()
197                 self._errorBanner.push_message(str(exception))
198
199         def _window_from_node(self, node):
200                 sessionsWindow = ConferenceTalkWindow(self._app, self._player, self._store, node)
201                 if not hildonize.IS_FREMANTLE_SUPPORTED:
202                         sessionsWindow.window.set_modal(True)
203                         sessionsWindow.window.set_transient_for(self._window)
204                 if self._windowInFullscreen:
205                         sessionsWindow.window.fullscreen()
206                 else:
207                         sessionsWindow.window.unfullscreen()
208                 sessionsWindow.connect_auto(sessionsWindow, "quit", self._on_quit)
209                 sessionsWindow.connect_auto(sessionsWindow, "home", self._on_home)
210                 sessionsWindow.connect_auto(sessionsWindow, "jump-to", self._on_jump)
211                 sessionsWindow.connect_auto(sessionsWindow, "fullscreen", self._on_child_fullscreen)
212                 sessionsWindow.show()
213                 return sessionsWindow
214
215
216 gobject.type_register(ConferenceTalksWindow)
217
218
219 class ConferenceTalkWindow(windows._base.PresenterWindow):
220
221         def __init__(self, app, player, store, node):
222                 windows._base.PresenterWindow.__init__(self, app, player, store, node)
223
224         def _get_background(self):
225                 return self._store.STORE_LOOKUP["conference_background"]
226
227
228 gobject.type_register(ConferenceTalkWindow)