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