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