Fixing a Maemo 5 issue
[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                 childWindow = ConferenceSessionsWindow(self._app, self._player, self._store, node)
72                 self._configure_child(childWindow)
73                 childWindow.show()
74                 return childWindow
75
76
77 gobject.type_register(ConferencesWindow)
78
79
80 class ConferenceSessionsWindow(windows._base.ListWindow):
81
82         def __init__(self, app, player, store, node):
83                 windows._base.ListWindow.__init__(self, app, player, store, node)
84                 self._window.set_title(self._node.title)
85
86         @classmethod
87         def _get_columns(cls):
88                 yield gobject.TYPE_PYOBJECT, None
89
90                 textrenderer = gtk.CellRendererText()
91                 hildonize.set_cell_thumb_selectable(textrenderer)
92                 column = gtk.TreeViewColumn("Session")
93                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
94                 column.pack_start(textrenderer, expand=True)
95                 column.add_attribute(textrenderer, "text", 1)
96                 yield gobject.TYPE_STRING, column
97
98         def _refresh(self):
99                 windows._base.ListWindow._refresh(self)
100                 self._node.get_children(
101                         self._on_conference_sessions,
102                         self._on_error,
103                 )
104
105         @misc_utils.log_exception(_moduleLogger)
106         def _on_conference_sessions(self, programs):
107                 if self._isDestroyed:
108                         _moduleLogger.info("Download complete but window destroyed")
109                         return
110
111                 self._hide_loading()
112                 for programNode in programs:
113                         program = programNode.get_properties()
114                         row = programNode, program["title"]
115                         self._model.append(row)
116
117                 self._select_row()
118                 go_utils.Async(self._on_delay_scroll).start()
119
120         @misc_utils.log_exception(_moduleLogger)
121         def _on_error(self, exception):
122                 self._hide_loading()
123                 self._errorBanner.push_message(str(exception))
124
125         def _window_from_node(self, node):
126                 childWindow = ConferenceTalksWindow(self._app, self._player, self._store, node)
127                 self._configure_child(childWindow)
128                 childWindow.show()
129                 return childWindow
130
131
132 gobject.type_register(ConferenceSessionsWindow)
133
134
135 class ConferenceTalksWindow(windows._base.ListWindow):
136
137         def __init__(self, app, player, store, node):
138                 windows._base.ListWindow.__init__(self, app, player, store, node)
139                 self._window.set_title(self._node.title)
140
141         @classmethod
142         def _get_columns(cls):
143                 yield gobject.TYPE_PYOBJECT, None
144
145                 textrenderer = gtk.CellRendererText()
146                 column = gtk.TreeViewColumn("Talk")
147                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
148                 column.pack_start(textrenderer, expand=True)
149                 column.add_attribute(textrenderer, "markup", 1)
150                 yield gobject.TYPE_STRING, column
151
152         def _refresh(self):
153                 windows._base.ListWindow._refresh(self)
154                 self._node.get_children(
155                         self._on_conference_talks,
156                         self._on_error,
157                 )
158
159         @misc_utils.log_exception(_moduleLogger)
160         def _on_conference_talks(self, programs):
161                 if self._isDestroyed:
162                         _moduleLogger.info("Download complete but window destroyed")
163                         return
164
165                 self._hide_loading()
166                 for programNode in programs:
167                         program = programNode.get_properties()
168                         row = programNode, "%s\n<small>%s</small>" % (programNode.title, programNode.subtitle)
169                         self._model.append(row)
170
171                 self._select_row()
172                 go_utils.Async(self._on_delay_scroll).start()
173
174         @misc_utils.log_exception(_moduleLogger)
175         def _on_error(self, exception):
176                 self._hide_loading()
177                 self._errorBanner.push_message(str(exception))
178
179         def _window_from_node(self, node):
180                 childWindow = ConferenceTalkWindow(self._app, self._player, self._store, node)
181                 self._configure_child(childWindow)
182                 childWindow.show()
183                 return childWindow
184
185
186 gobject.type_register(ConferenceTalksWindow)
187
188
189 class ConferenceTalkWindow(windows._base.PresenterWindow):
190
191         def __init__(self, app, player, store, node):
192                 windows._base.PresenterWindow.__init__(self, app, player, store, node)
193
194         def _get_background(self, orientation):
195                 if orientation == gtk.ORIENTATION_VERTICAL:
196                         return self._store.STORE_LOOKUP["conference_background"]
197                 elif orientation == gtk.ORIENTATION_HORIZONTAL:
198                         return self._store.STORE_LOOKUP["conference_background_landscape"]
199                 else:
200                         raise NotImplementedError("Unknown orientation %s" % orientation)
201
202
203 gobject.type_register(ConferenceTalkWindow)