36268277afaed6285c1c731da3ffa59249cf36ba
[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                 booksWindow = ScriptureBooksWindow(self._app, self._player, self._store, node)
63                 booksWindow.window.set_modal(True)
64                 booksWindow.window.set_transient_for(self._window)
65                 if self._windowInFullscreen:
66                         booksWindow.window.fullscreen()
67                 else:
68                         booksWindow.window.unfullscreen()
69                 booksWindow.connect_auto(booksWindow, "quit", self._on_quit)
70                 booksWindow.connect_auto(booksWindow, "home", self._on_home)
71                 booksWindow.connect_auto(booksWindow, "jump-to", self._on_jump)
72                 booksWindow.connect_auto(booksWindow, "fullscreen", self._on_child_fullscreen)
73                 booksWindow.show()
74                 return booksWindow
75
76
77 gobject.type_register(ScripturesWindow)
78
79
80 class ScriptureBooksWindow(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("Book")
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_scripture_books,
102                         self._on_error,
103                 )
104
105         @misc_utils.log_exception(_moduleLogger)
106         def _on_scripture_books(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                 booksWindow = ScriptureChaptersWindow(self._app, self._player, self._store, node)
127                 booksWindow.window.set_modal(True)
128                 booksWindow.window.set_transient_for(self._window)
129                 if self._windowInFullscreen:
130                         booksWindow.window.fullscreen()
131                 else:
132                         booksWindow.window.unfullscreen()
133                 booksWindow.connect_auto(booksWindow, "quit", self._on_quit)
134                 booksWindow.connect_auto(booksWindow, "home", self._on_home)
135                 booksWindow.connect_auto(booksWindow, "jump-to", self._on_jump)
136                 booksWindow.connect_auto(booksWindow, "fullscreen", self._on_child_fullscreen)
137                 booksWindow.show()
138                 return booksWindow
139
140
141 gobject.type_register(ScriptureBooksWindow)
142
143
144 class ScriptureChaptersWindow(windows._base.ListWindow):
145
146         def __init__(self, app, player, store, node):
147                 windows._base.ListWindow.__init__(self, app, player, store, node)
148                 self._window.set_title(self._node.title)
149
150         @classmethod
151         def _get_columns(cls):
152                 yield gobject.TYPE_PYOBJECT, None
153
154                 textrenderer = gtk.CellRendererText()
155                 hildonize.set_cell_thumb_selectable(textrenderer)
156                 column = gtk.TreeViewColumn("Chapter")
157                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
158                 column.pack_start(textrenderer, expand=True)
159                 column.add_attribute(textrenderer, "text", 1)
160                 yield gobject.TYPE_STRING, column
161
162         def _refresh(self):
163                 windows._base.ListWindow._refresh(self)
164                 self._node.get_children(
165                         self._on_scripture_chapters,
166                         self._on_error,
167                 )
168
169         @misc_utils.log_exception(_moduleLogger)
170         def _on_scripture_chapters(self, programs):
171                 if self._isDestroyed:
172                         _moduleLogger.info("Download complete but window destroyed")
173                         return
174
175                 self._hide_loading()
176                 for programNode in programs:
177                         program = programNode.get_properties()
178                         row = programNode, program["title"]
179                         self._model.append(row)
180
181                 self._select_row()
182                 go_utils.Async(self._on_delay_scroll).start()
183
184         @misc_utils.log_exception(_moduleLogger)
185         def _on_error(self, exception):
186                 self._hide_loading()
187                 self._errorBanner.push_message(str(exception))
188
189         def _window_from_node(self, node):
190                 booksWindow = ScriptureChapterWindow(self._app, self._player, self._store, node)
191                 booksWindow.window.set_modal(True)
192                 booksWindow.window.set_transient_for(self._window)
193                 if self._windowInFullscreen:
194                         booksWindow.window.fullscreen()
195                 else:
196                         booksWindow.window.unfullscreen()
197                 booksWindow.connect_auto(booksWindow, "quit", self._on_quit)
198                 booksWindow.connect_auto(booksWindow, "home", self._on_home)
199                 booksWindow.connect_auto(booksWindow, "jump-to", self._on_jump)
200                 booksWindow.connect_auto(booksWindow, "fullscreen", self._on_child_fullscreen)
201                 booksWindow.show()
202                 return booksWindow
203
204
205 gobject.type_register(ScriptureChaptersWindow)
206
207
208 class ScriptureChapterWindow(windows._base.PresenterWindow):
209
210         def __init__(self, app, player, store, node):
211                 windows._base.PresenterWindow.__init__(self, app, player, store, node)
212
213         def _get_background(self):
214                 return self._store.STORE_LOOKUP["scripture_background"]
215
216
217 gobject.type_register(ScriptureChapterWindow)