Fixing a Maemo 5 issue
[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
10 import windows
11
12
13 _moduleLogger = logging.getLogger(__name__)
14
15
16 class ScripturesWindow(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                 hildonize.set_cell_thumb_selectable(textrenderer)
28                 column = gtk.TreeViewColumn("Scripture")
29                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
30                 column.pack_start(textrenderer, expand=True)
31                 column.add_attribute(textrenderer, "text", 1)
32                 yield gobject.TYPE_STRING, column
33
34         def _refresh(self):
35                 windows._base.ListWindow._refresh(self)
36                 self._node.get_children(
37                         self._on_scriptures,
38                         self._on_error,
39                 )
40
41         @misc_utils.log_exception(_moduleLogger)
42         def _on_scriptures(self, programs):
43                 if self._isDestroyed:
44                         _moduleLogger.info("Download complete but window destroyed")
45                         return
46
47                 self._hide_loading()
48                 for programNode in programs:
49                         program = programNode.get_properties()
50                         row = programNode, program["title"]
51                         self._model.append(row)
52
53                 self._select_row()
54                 go_utils.Async(self._on_delay_scroll).start()
55
56         @misc_utils.log_exception(_moduleLogger)
57         def _on_error(self, exception):
58                 self._hide_loading()
59                 self._errorBanner.push_message(str(exception))
60
61         def _window_from_node(self, node):
62                 childWindow = ScriptureBooksWindow(self._app, self._player, self._store, node)
63                 self._configure_child(childWindow)
64                 childWindow.show()
65                 return childWindow
66
67
68 gobject.type_register(ScripturesWindow)
69
70
71 class ScriptureBooksWindow(windows._base.ListWindow):
72
73         def __init__(self, app, player, store, node):
74                 windows._base.ListWindow.__init__(self, app, player, store, node)
75                 self._window.set_title(self._node.title)
76
77         @classmethod
78         def _get_columns(cls):
79                 yield gobject.TYPE_PYOBJECT, None
80
81                 textrenderer = gtk.CellRendererText()
82                 hildonize.set_cell_thumb_selectable(textrenderer)
83                 column = gtk.TreeViewColumn("Book")
84                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
85                 column.pack_start(textrenderer, expand=True)
86                 column.add_attribute(textrenderer, "text", 1)
87                 yield gobject.TYPE_STRING, column
88
89         def _refresh(self):
90                 windows._base.ListWindow._refresh(self)
91                 self._node.get_children(
92                         self._on_scripture_books,
93                         self._on_error,
94                 )
95
96         @misc_utils.log_exception(_moduleLogger)
97         def _on_scripture_books(self, programs):
98                 if self._isDestroyed:
99                         _moduleLogger.info("Download complete but window destroyed")
100                         return
101
102                 self._hide_loading()
103                 for programNode in programs:
104                         program = programNode.get_properties()
105                         row = programNode, program["title"]
106                         self._model.append(row)
107
108                 self._select_row()
109                 go_utils.Async(self._on_delay_scroll).start()
110
111         @misc_utils.log_exception(_moduleLogger)
112         def _on_error(self, exception):
113                 self._hide_loading()
114                 self._errorBanner.push_message(str(exception))
115
116         def _window_from_node(self, node):
117                 childWindow = ScriptureChaptersWindow(self._app, self._player, self._store, node)
118                 self._configure_child(childWindow)
119                 childWindow.show()
120                 return childWindow
121
122
123 gobject.type_register(ScriptureBooksWindow)
124
125
126 class ScriptureChaptersWindow(windows._base.ListWindow):
127
128         def __init__(self, app, player, store, node):
129                 windows._base.ListWindow.__init__(self, app, player, store, node)
130                 self._window.set_title(self._node.title)
131
132         @classmethod
133         def _get_columns(cls):
134                 yield gobject.TYPE_PYOBJECT, None
135
136                 textrenderer = gtk.CellRendererText()
137                 hildonize.set_cell_thumb_selectable(textrenderer)
138                 column = gtk.TreeViewColumn("Chapter")
139                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
140                 column.pack_start(textrenderer, expand=True)
141                 column.add_attribute(textrenderer, "text", 1)
142                 yield gobject.TYPE_STRING, column
143
144         def _refresh(self):
145                 windows._base.ListWindow._refresh(self)
146                 self._node.get_children(
147                         self._on_scripture_chapters,
148                         self._on_error,
149                 )
150
151         @misc_utils.log_exception(_moduleLogger)
152         def _on_scripture_chapters(self, programs):
153                 if self._isDestroyed:
154                         _moduleLogger.info("Download complete but window destroyed")
155                         return
156
157                 self._hide_loading()
158                 for programNode in programs:
159                         program = programNode.get_properties()
160                         row = programNode, program["title"]
161                         self._model.append(row)
162
163                 self._select_row()
164                 go_utils.Async(self._on_delay_scroll).start()
165
166         @misc_utils.log_exception(_moduleLogger)
167         def _on_error(self, exception):
168                 self._hide_loading()
169                 self._errorBanner.push_message(str(exception))
170
171         def _window_from_node(self, node):
172                 childWindow = ScriptureChapterWindow(self._app, self._player, self._store, node)
173                 self._configure_child(childWindow)
174                 childWindow.show()
175                 return childWindow
176
177
178 gobject.type_register(ScriptureChaptersWindow)
179
180
181 class ScriptureChapterWindow(windows._base.PresenterWindow):
182
183         def __init__(self, app, player, store, node):
184                 windows._base.PresenterWindow.__init__(self, app, player, store, node)
185
186         def _get_background(self, orientation):
187                 if orientation == gtk.ORIENTATION_VERTICAL:
188                         return self._store.STORE_LOOKUP["scripture_background"]
189                 elif orientation == gtk.ORIENTATION_HORIZONTAL:
190                         return self._store.STORE_LOOKUP["scripture_background_landscape"]
191                 else:
192                         raise NotImplementedError("Unknown orientation %s" % orientation)
193
194
195 gobject.type_register(ScriptureChapterWindow)