Consolidating the Presenter Window code for making changes easier
[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
58         @misc_utils.log_exception(_moduleLogger)
59         def _on_error(self, exception):
60                 self._hide_loading()
61                 self._errorBanner.push_message(str(exception))
62
63         def _window_from_node(self, node):
64                 booksWindow = ScriptureBooksWindow(self._app, self._player, self._store, node)
65                 booksWindow.window.set_modal(True)
66                 booksWindow.window.set_transient_for(self._window)
67                 booksWindow.window.set_default_size(*self._window.get_size())
68                 booksWindow.connect("quit", self._on_quit)
69                 booksWindow.connect("home", self._on_home)
70                 booksWindow.connect("jump-to", self._on_jump)
71                 booksWindow.show()
72                 return booksWindow
73
74
75 gobject.type_register(ScripturesWindow)
76
77
78 class ScriptureBooksWindow(windows._base.ListWindow):
79
80         def __init__(self, app, player, store, node):
81                 windows._base.ListWindow.__init__(self, app, player, store, node)
82                 self._window.set_title(self._node.title)
83
84         @classmethod
85         def _get_columns(cls):
86                 yield gobject.TYPE_PYOBJECT, None
87
88                 textrenderer = gtk.CellRendererText()
89                 hildonize.set_cell_thumb_selectable(textrenderer)
90                 column = gtk.TreeViewColumn("Book")
91                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
92                 column.pack_start(textrenderer, expand=True)
93                 column.add_attribute(textrenderer, "text", 1)
94                 yield gobject.TYPE_STRING, column
95
96         def _refresh(self):
97                 windows._base.ListWindow._refresh(self)
98                 self._node.get_children(
99                         self._on_scripture_books,
100                         self._on_error,
101                 )
102
103         @misc_utils.log_exception(_moduleLogger)
104         def _on_scripture_books(self, programs):
105                 if self._isDestroyed:
106                         _moduleLogger.info("Download complete but window destroyed")
107                         return
108
109                 self._hide_loading()
110                 for programNode in programs:
111                         program = programNode.get_properties()
112                         row = programNode, program["title"]
113                         self._model.append(row)
114
115                 self._select_row()
116
117         @misc_utils.log_exception(_moduleLogger)
118         def _on_error(self, exception):
119                 self._hide_loading()
120                 self._errorBanner.push_message(str(exception))
121
122         def _window_from_node(self, node):
123                 booksWindow = ScriptureChaptersWindow(self._app, self._player, self._store, node)
124                 booksWindow.window.set_modal(True)
125                 booksWindow.window.set_transient_for(self._window)
126                 booksWindow.window.set_default_size(*self._window.get_size())
127                 booksWindow.connect("quit", self._on_quit)
128                 booksWindow.connect("home", self._on_home)
129                 booksWindow.connect("jump-to", self._on_jump)
130                 booksWindow.show()
131                 return booksWindow
132
133
134 gobject.type_register(ScriptureBooksWindow)
135
136
137 class ScriptureChaptersWindow(windows._base.ListWindow):
138
139         def __init__(self, app, player, store, node):
140                 windows._base.ListWindow.__init__(self, app, player, store, node)
141                 self._window.set_title(self._node.title)
142
143         @classmethod
144         def _get_columns(cls):
145                 yield gobject.TYPE_PYOBJECT, None
146
147                 textrenderer = gtk.CellRendererText()
148                 hildonize.set_cell_thumb_selectable(textrenderer)
149                 column = gtk.TreeViewColumn("Chapter")
150                 column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
151                 column.pack_start(textrenderer, expand=True)
152                 column.add_attribute(textrenderer, "text", 1)
153                 yield gobject.TYPE_STRING, column
154
155         def _refresh(self):
156                 windows._base.ListWindow._refresh(self)
157                 self._node.get_children(
158                         self._on_scripture_chapters,
159                         self._on_error,
160                 )
161
162         @misc_utils.log_exception(_moduleLogger)
163         def _on_scripture_chapters(self, programs):
164                 if self._isDestroyed:
165                         _moduleLogger.info("Download complete but window destroyed")
166                         return
167
168                 self._hide_loading()
169                 for programNode in programs:
170                         program = programNode.get_properties()
171                         row = programNode, program["title"]
172                         self._model.append(row)
173
174                 self._select_row()
175
176         @misc_utils.log_exception(_moduleLogger)
177         def _on_error(self, exception):
178                 self._hide_loading()
179                 self._errorBanner.push_message(str(exception))
180
181         def _window_from_node(self, node):
182                 booksWindow = ScriptureChapterWindow(self._app, self._player, self._store, node)
183                 booksWindow.window.set_modal(True)
184                 booksWindow.window.set_transient_for(self._window)
185                 booksWindow.window.set_default_size(*self._window.get_size())
186                 booksWindow.connect("quit", self._on_quit)
187                 booksWindow.connect("home", self._on_home)
188                 booksWindow.connect("jump-to", self._on_jump)
189                 booksWindow.show()
190                 return booksWindow
191
192
193 gobject.type_register(ScriptureChaptersWindow)
194
195
196 class ScriptureChapterWindow(windows._base.PresenterWindow):
197
198         def __init__(self, app, player, store, node):
199                 windows._base.PresenterWindow.__init__(self, app, player, store, node)
200
201         def _get_background(self):
202                 return self._store.STORE_LOOKUP["scripture_background"]
203
204
205 gobject.type_register(ScriptureChapterWindow)