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