Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Merged at revision: | not available | ||||||||
Proposed branch: | lp:~trb143/openlp/bugfixes | ||||||||
Merge into: | lp:openlp | ||||||||
Diff against target: | None lines | ||||||||
To merge this branch: | bzr merge lp:~trb143/openlp/bugfixes | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raoul Snyman | Approve | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Tim Bentley (trb143) wrote : | # |
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Raoul Snyman (raoul-snyman) : | # |
review:
Approve
lp:~trb143/openlp/bugfixes
updated
- 516. By Tim Bentley
-
Various changes see loog for details
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'openlp.pyw' | |||
2 | --- openlp.pyw 2009-08-24 04:30:04 +0000 | |||
3 | +++ openlp.pyw 2009-09-01 05:17:32 +0000 | |||
4 | @@ -20,7 +20,8 @@ | |||
5 | 20 | """ | 20 | """ |
6 | 21 | 21 | ||
7 | 22 | import sys | 22 | import sys |
9 | 23 | import logging | 23 | import logging, logging.handlers |
10 | 24 | from optparse import OptionParser | ||
11 | 24 | 25 | ||
12 | 25 | from PyQt4 import QtCore, QtGui | 26 | from PyQt4 import QtCore, QtGui |
13 | 26 | 27 | ||
14 | @@ -28,9 +29,15 @@ | |||
15 | 28 | from openlp.core.resources import * | 29 | from openlp.core.resources import * |
16 | 29 | from openlp.core.ui import MainWindow, SplashScreen | 30 | from openlp.core.ui import MainWindow, SplashScreen |
17 | 30 | 31 | ||
21 | 31 | logging.basicConfig(level=logging.DEBUG, | 32 | filename=u'openlp.log' |
22 | 32 | format=u'%(asctime)s:%(msecs)3d %(name)-15s %(levelname)-8s %(message)s', | 33 | log = logging.getLogger() |
23 | 33 | datefmt=u'%m-%d %H:%M:%S', filename=u'openlp.log', filemode=u'w') | 34 | log.setLevel(logging.INFO) |
24 | 35 | |||
25 | 36 | logfile = logging.handlers.RotatingFileHandler(filename ,maxBytes=200000, backupCount=5) | ||
26 | 37 | logfile.setLevel(logging.DEBUG) | ||
27 | 38 | logfile.setFormatter(logging.Formatter(u'%(asctime)s %(name)-15s %(levelname)-8s %(message)s')) | ||
28 | 39 | |||
29 | 40 | log.addHandler(logfile) | ||
30 | 34 | 41 | ||
31 | 35 | class OpenLP(QtGui.QApplication): | 42 | class OpenLP(QtGui.QApplication): |
32 | 36 | """ | 43 | """ |
33 | @@ -38,8 +45,7 @@ | |||
34 | 38 | class in order to provide the core of the application. | 45 | class in order to provide the core of the application. |
35 | 39 | """ | 46 | """ |
36 | 40 | global log | 47 | global log |
39 | 41 | log = logging.getLogger(u'OpenLP Application') | 48 | log.info(u'OpenLP Application Loaded') |
38 | 42 | log.info(u'Application Loaded') | ||
40 | 43 | 49 | ||
41 | 44 | def run(self): | 50 | def run(self): |
42 | 45 | """ | 51 | """ |
43 | @@ -74,10 +80,19 @@ | |||
44 | 74 | self.splash.finish(self.mainWindow) | 80 | self.splash.finish(self.mainWindow) |
45 | 75 | sys.exit(app.exec_()) | 81 | sys.exit(app.exec_()) |
46 | 76 | 82 | ||
47 | 83 | def main(): | ||
48 | 84 | usage = "usage: %prog [options] arg1 arg2" | ||
49 | 85 | parser = OptionParser(usage=usage) | ||
50 | 86 | parser.add_option("-d", "--debug",dest="debug",action="store_true", | ||
51 | 87 | help="Switch on Debugging ") | ||
52 | 88 | (options, args) = parser.parse_args() | ||
53 | 89 | if options.debug is not None: | ||
54 | 90 | log.setLevel(logging.DEBUG) | ||
55 | 77 | if __name__ == u'__main__': | 91 | if __name__ == u'__main__': |
56 | 78 | """ | 92 | """ |
57 | 79 | Instantiate and run the application. | 93 | Instantiate and run the application. |
58 | 80 | """ | 94 | """ |
59 | 95 | main() | ||
60 | 81 | app = OpenLP(sys.argv) | 96 | app = OpenLP(sys.argv) |
61 | 82 | #import cProfile | 97 | #import cProfile |
62 | 83 | #cProfile.run("app.run()", "profile.out") | 98 | #cProfile.run("app.run()", "profile.out") |
63 | 84 | 99 | ||
64 | === modified file 'openlp/core/lib/__init__.py' | |||
65 | --- openlp/core/lib/__init__.py 2009-08-26 05:00:19 +0000 | |||
66 | +++ openlp/core/lib/__init__.py 2009-08-27 05:17:20 +0000 | |||
67 | @@ -66,6 +66,7 @@ | |||
68 | 66 | from xmlrootclass import XmlRootClass | 66 | from xmlrootclass import XmlRootClass |
69 | 67 | from serviceitem import ServiceItem | 67 | from serviceitem import ServiceItem |
70 | 68 | from eventreceiver import Receiver | 68 | from eventreceiver import Receiver |
71 | 69 | from serviceitem import ServiceType | ||
72 | 69 | from serviceitem import ServiceItem | 70 | from serviceitem import ServiceItem |
73 | 70 | from toolbar import OpenLPToolbar | 71 | from toolbar import OpenLPToolbar |
74 | 71 | from songxmlhandler import SongXMLBuilder | 72 | from songxmlhandler import SongXMLBuilder |
75 | 72 | 73 | ||
76 | === modified file 'openlp/core/lib/eventreceiver.py' | |||
77 | --- openlp/core/lib/eventreceiver.py 2009-08-26 05:00:19 +0000 | |||
78 | +++ openlp/core/lib/eventreceiver.py 2009-08-29 07:17:56 +0000 | |||
79 | @@ -29,27 +29,31 @@ | |||
80 | 29 | 29 | ||
81 | 30 | ``stop_import`` | 30 | ``stop_import`` |
82 | 31 | Stops the Bible Import | 31 | Stops the Bible Import |
83 | 32 | |||
84 | 32 | ``pre_load_bibles`` | 33 | ``pre_load_bibles`` |
85 | 33 | Triggers the plugin to relaod the bible lists | 34 | Triggers the plugin to relaod the bible lists |
86 | 35 | |||
87 | 34 | ``process_events`` | 36 | ``process_events`` |
88 | 35 | Requests the Application to flush the events queue | 37 | Requests the Application to flush the events queue |
97 | 36 | ``{preview|live}_slide_first`` | 38 | |
90 | 37 | display the first slide on the list | ||
91 | 38 | ``{preview|live}_slide_previous`` | ||
92 | 39 | display the previous slide on the list | ||
93 | 40 | ``{preview|live}_slide_next`` | ||
94 | 41 | display the next slide on the list | ||
95 | 42 | ``{preview|live}_slide_last`` | ||
96 | 43 | display the last slide on the list | ||
98 | 44 | ``{plugin}_add_service_item `` | 39 | ``{plugin}_add_service_item `` |
99 | 45 | ask the plugin to push the selected items to the service item | 40 | ask the plugin to push the selected items to the service item |
100 | 41 | |||
101 | 46 | ``update_themes `` | 42 | ``update_themes `` |
102 | 47 | send out message with new themes | 43 | send out message with new themes |
103 | 44 | |||
104 | 48 | ``update_global_theme `` | 45 | ``update_global_theme `` |
105 | 49 | Tell the components we have a new global theme | 46 | Tell the components we have a new global theme |
106 | 47 | |||
107 | 50 | ``load_song_list`` | 48 | ``load_song_list`` |
108 | 51 | Tells the the song plugin to reload the song list | 49 | Tells the the song plugin to reload the song list |
109 | 52 | 50 | ||
110 | 51 | ``update_spin_delay`` | ||
111 | 52 | Pushes out the Image loop delay | ||
112 | 53 | |||
113 | 54 | ``request_spin_delay`` | ||
114 | 55 | Requests a spin delay | ||
115 | 56 | |||
116 | 53 | """ | 57 | """ |
117 | 54 | global log | 58 | global log |
118 | 55 | log = logging.getLogger(u'EventReceiver') | 59 | log = logging.getLogger(u'EventReceiver') |
119 | 56 | 60 | ||
120 | === modified file 'openlp/core/lib/mediamanageritem.py' | |||
121 | --- openlp/core/lib/mediamanageritem.py 2009-07-08 16:40:42 +0000 | |||
122 | +++ openlp/core/lib/mediamanageritem.py 2009-08-31 21:53:35 +0000 | |||
123 | @@ -234,17 +234,20 @@ | |||
124 | 234 | def onPreviewClick(self): | 234 | def onPreviewClick(self): |
125 | 235 | log.debug(self.PluginTextShort+u' Preview Requested') | 235 | log.debug(self.PluginTextShort+u' Preview Requested') |
126 | 236 | service_item = self.buildServiceItem() | 236 | service_item = self.buildServiceItem() |
128 | 237 | self.parent.preview_controller.addServiceItem(service_item) | 237 | if service_item is not None: |
129 | 238 | self.parent.preview_controller.addServiceItem(service_item) | ||
130 | 238 | 239 | ||
131 | 239 | def onLiveClick(self): | 240 | def onLiveClick(self): |
132 | 240 | log.debug(self.PluginTextShort + u' Live Requested') | 241 | log.debug(self.PluginTextShort + u' Live Requested') |
133 | 241 | service_item = self.buildServiceItem() | 242 | service_item = self.buildServiceItem() |
135 | 242 | self.parent.live_controller.addServiceItem(service_item) | 243 | if service_item is not None: |
136 | 244 | self.parent.live_controller.addServiceItem(service_item) | ||
137 | 243 | 245 | ||
138 | 244 | def onAddClick(self): | 246 | def onAddClick(self): |
139 | 245 | log.debug(self.PluginTextShort+u' Add Requested') | 247 | log.debug(self.PluginTextShort+u' Add Requested') |
140 | 246 | service_item = self.buildServiceItem() | 248 | service_item = self.buildServiceItem() |
142 | 247 | self.parent.service_manager.addServiceItem(service_item) | 249 | if service_item is not None: |
143 | 250 | self.parent.service_manager.addServiceItem(service_item) | ||
144 | 248 | 251 | ||
145 | 249 | def buildServiceItem(self): | 252 | def buildServiceItem(self): |
146 | 250 | """ | 253 | """ |
147 | @@ -252,6 +255,8 @@ | |||
148 | 252 | """ | 255 | """ |
149 | 253 | service_item = ServiceItem(self.parent) | 256 | service_item = ServiceItem(self.parent) |
150 | 254 | service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') | 257 | service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') |
154 | 255 | self.generateSlideData(service_item) | 258 | if self.generateSlideData(service_item): |
155 | 256 | self.ListView.clearSelection() | 259 | self.ListView.clearSelection() |
156 | 257 | return service_item | 260 | return service_item |
157 | 261 | else: | ||
158 | 262 | return None | ||
159 | 258 | 263 | ||
160 | === modified file 'openlp/core/lib/renderer.py' | |||
161 | --- openlp/core/lib/renderer.py 2009-08-09 18:38:44 +0000 | |||
162 | +++ openlp/core/lib/renderer.py 2009-08-31 06:53:55 +0000 | |||
163 | @@ -147,7 +147,8 @@ | |||
164 | 147 | # print words | 147 | # print words |
165 | 148 | verses = [] | 148 | verses = [] |
166 | 149 | words = words.replace(u'\r\n', u'\n') | 149 | words = words.replace(u'\r\n', u'\n') |
168 | 150 | verses_text = words.split(u'\n\n') | 150 | verses_text = words.split(u'\n') |
169 | 151 | #print verses_text | ||
170 | 151 | text = [] | 152 | text = [] |
171 | 152 | for verse in verses_text: | 153 | for verse in verses_text: |
172 | 153 | lines = verse.split(u'\n') | 154 | lines = verse.split(u'\n') |
173 | @@ -173,7 +174,10 @@ | |||
174 | 173 | split_lines = [] | 174 | split_lines = [] |
175 | 174 | count = 0 | 175 | count = 0 |
176 | 175 | for line in text: | 176 | for line in text: |
178 | 176 | # print "C", line , len(line) | 177 | #print "C", line , len(line) |
179 | 178 | #Must be a blank line so keep it. | ||
180 | 179 | if len(line) == 0: | ||
181 | 180 | line = u' ' | ||
182 | 177 | while len(line) > 0: | 181 | while len(line) > 0: |
183 | 178 | # print "C1", line , len(line) | 182 | # print "C1", line , len(line) |
184 | 179 | if len(line) > ave_line_width: | 183 | if len(line) > ave_line_width: |
185 | @@ -391,29 +395,8 @@ | |||
186 | 391 | Defaults to *False*. Whether or not this is a live screen. | 395 | Defaults to *False*. Whether or not this is a live screen. |
187 | 392 | """ | 396 | """ |
188 | 393 | x, y = tlcorner | 397 | x, y = tlcorner |
189 | 394 | # We draw the text to see how big it is and then iterate to make it fit | ||
190 | 395 | # when we line wrap we do in in the "lyrics" style, so the second line is | ||
191 | 396 | # right aligned with a "hanging indent" | ||
192 | 397 | #print "----------------------------" | ||
193 | 398 | #print line | ||
194 | 399 | # words = line.split(u' ') | ||
195 | 400 | # thisline = u' '.join(words) | ||
196 | 401 | # lastword = len(words) | ||
197 | 402 | # lines = [] | ||
198 | 403 | maxx = self._rect.width(); | 398 | maxx = self._rect.width(); |
199 | 404 | maxy = self._rect.height(); | 399 | maxy = self._rect.height(); |
200 | 405 | # while (len(words) > 0): | ||
201 | 406 | # w , h = self._get_extent_and_render(thisline, footer) | ||
202 | 407 | # print "m", w, h, x, maxx | ||
203 | 408 | # rhs = w + x | ||
204 | 409 | # if rhs < maxx - self._right_margin: | ||
205 | 410 | # lines.append(thisline) | ||
206 | 411 | # words = words[lastword:] | ||
207 | 412 | # thisline = ' '.join(words) | ||
208 | 413 | # lastword = len(words) | ||
209 | 414 | # else: | ||
210 | 415 | # lastword -= 1 | ||
211 | 416 | # thisline = ' '.join(words[:lastword]) | ||
212 | 417 | lines = [] | 400 | lines = [] |
213 | 418 | lines.append(line) | 401 | lines.append(line) |
214 | 419 | startx = x | 402 | startx = x |
215 | 420 | 403 | ||
216 | === modified file 'openlp/core/lib/rendermanager.py' | |||
217 | --- openlp/core/lib/rendermanager.py 2009-07-23 20:20:49 +0000 | |||
218 | +++ openlp/core/lib/rendermanager.py 2009-08-31 06:53:55 +0000 | |||
219 | @@ -58,7 +58,7 @@ | |||
220 | 58 | else: | 58 | else: |
221 | 59 | self.current_display = screen_number | 59 | self.current_display = screen_number |
222 | 60 | self.renderer = Renderer() | 60 | self.renderer = Renderer() |
224 | 61 | self.calculate_default(self.screen_list[self.current_display][u'size']) | 61 | #self.calculate_default(self.screen_list[self.current_display][u'size']) |
225 | 62 | self.theme = u'' | 62 | self.theme = u'' |
226 | 63 | self.service_theme = u'' | 63 | self.service_theme = u'' |
227 | 64 | self.global_style = u'' | 64 | self.global_style = u'' |
228 | @@ -133,6 +133,7 @@ | |||
229 | 133 | def build_text_rectangle(self, theme): | 133 | def build_text_rectangle(self, theme): |
230 | 134 | """ | 134 | """ |
231 | 135 | Builds a text block using the settings in ``theme``. | 135 | Builds a text block using the settings in ``theme``. |
232 | 136 | One is needed per slide | ||
233 | 136 | 137 | ||
234 | 137 | ``theme`` | 138 | ``theme`` |
235 | 138 | The theme to build a text block for. | 139 | The theme to build a text block for. |
236 | @@ -149,8 +150,8 @@ | |||
237 | 149 | footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, self.height-self.footer_start) | 150 | footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, self.height-self.footer_start) |
238 | 150 | else: | 151 | else: |
239 | 151 | footer_rect = QtCore.QRect(int(theme.font_footer_x),int(theme.font_footer_y), | 152 | footer_rect = QtCore.QRect(int(theme.font_footer_x),int(theme.font_footer_y), |
242 | 152 | int(theme.font_footer_width)-1, int(theme.font_footer_height)-1) | 153 | int(theme.font_footer_width)-1, int(theme.font_footer_height) - 1) |
243 | 153 | self.renderer.set_text_rectangle(main_rect,footer_rect) | 154 | self.renderer.set_text_rectangle(main_rect, footer_rect) |
244 | 154 | 155 | ||
245 | 155 | def generate_preview(self, themedata): | 156 | def generate_preview(self, themedata): |
246 | 156 | """ | 157 | """ |
247 | @@ -178,15 +179,15 @@ | |||
248 | 178 | 179 | ||
249 | 179 | def format_slide(self, words): | 180 | def format_slide(self, words): |
250 | 180 | """ | 181 | """ |
252 | 181 | Calculate how much text can fid on a slide. | 182 | Calculate how much text can fit on a slide. |
253 | 182 | 183 | ||
254 | 183 | ``words`` | 184 | ``words`` |
255 | 184 | The words to go on the slides. | 185 | The words to go on the slides. |
256 | 185 | """ | 186 | """ |
257 | 186 | log.debug(u'format slide') | 187 | log.debug(u'format slide') |
259 | 187 | self.calculate_default(self.screen_list[self.current_display][u'size']) | 188 | #self.calculate_default(self.screen_list[self.current_display][u'size']) |
260 | 188 | self.build_text_rectangle(self.themedata) | 189 | self.build_text_rectangle(self.themedata) |
262 | 189 | self.renderer.set_frame_dest(self.width, self.height) | 190 | #self.renderer.set_frame_dest(self.width, self.height) |
263 | 190 | return self.renderer.format_slide(words, False) | 191 | return self.renderer.format_slide(words, False) |
264 | 191 | 192 | ||
265 | 192 | def generate_slide(self, main_text, footer_text): | 193 | def generate_slide(self, main_text, footer_text): |
266 | @@ -200,7 +201,6 @@ | |||
267 | 200 | The text for the slide footer. | 201 | The text for the slide footer. |
268 | 201 | """ | 202 | """ |
269 | 202 | log.debug(u'generate slide') | 203 | log.debug(u'generate slide') |
270 | 203 | self.calculate_default(self.screen_list[self.current_display][u'size']) | ||
271 | 204 | self.build_text_rectangle(self.themedata) | 204 | self.build_text_rectangle(self.themedata) |
272 | 205 | self.renderer.set_frame_dest(self.width, self.height) | 205 | self.renderer.set_frame_dest(self.width, self.height) |
273 | 206 | return self.renderer.generate_frame_from_lines(main_text, footer_text) | 206 | return self.renderer.generate_frame_from_lines(main_text, footer_text) |
274 | @@ -233,6 +233,7 @@ | |||
275 | 233 | The QWidget instance of the screen. | 233 | The QWidget instance of the screen. |
276 | 234 | """ | 234 | """ |
277 | 235 | log.debug(u'calculate default %s', screen) | 235 | log.debug(u'calculate default %s', screen) |
278 | 236 | #size fixed so reflects the preview size. | ||
279 | 236 | if self.current_display == 0: | 237 | if self.current_display == 0: |
280 | 237 | self.width = 1024 | 238 | self.width = 1024 |
281 | 238 | self.height = 768 | 239 | self.height = 768 |
282 | 239 | 240 | ||
283 | === modified file 'openlp/core/lib/serviceitem.py' | |||
284 | --- openlp/core/lib/serviceitem.py 2009-07-10 13:16:15 +0000 | |||
285 | +++ openlp/core/lib/serviceitem.py 2009-08-31 18:27:36 +0000 | |||
286 | @@ -25,6 +25,11 @@ | |||
287 | 25 | 25 | ||
288 | 26 | from openlp.core.lib import buildIcon | 26 | from openlp.core.lib import buildIcon |
289 | 27 | 27 | ||
290 | 28 | class ServiceType(object): | ||
291 | 29 | Text = 1 | ||
292 | 30 | Image = 2 | ||
293 | 31 | Command = 3 | ||
294 | 32 | |||
295 | 28 | class ServiceItem(object): | 33 | class ServiceItem(object): |
296 | 29 | """ | 34 | """ |
297 | 30 | The service item is a base class for the plugins to use to interact with | 35 | The service item is a base class for the plugins to use to interact with |
298 | @@ -83,22 +88,18 @@ | |||
299 | 83 | self.RenderManager.set_override_theme(self.theme) | 88 | self.RenderManager.set_override_theme(self.theme) |
300 | 84 | log.debug(u'Formatting slides') | 89 | log.debug(u'Formatting slides') |
301 | 85 | self.frames = [] | 90 | self.frames = [] |
303 | 86 | if self.service_item_type == u'text': | 91 | if self.service_item_type == ServiceType.Text: |
304 | 87 | for slide in self.service_frames: | 92 | for slide in self.service_frames: |
305 | 88 | formated = self.RenderManager.format_slide(slide[u'raw_slide']) | 93 | formated = self.RenderManager.format_slide(slide[u'raw_slide']) |
306 | 89 | for format in formated: | 94 | for format in formated: |
307 | 90 | frame = self.RenderManager.generate_slide(format, self.raw_footer) | 95 | frame = self.RenderManager.generate_slide(format, self.raw_footer) |
308 | 91 | self.frames.append({u'title': slide[u'title'], u'image': frame}) | 96 | self.frames.append({u'title': slide[u'title'], u'image': frame}) |
310 | 92 | elif self.service_item_type == u'command': | 97 | elif self.service_item_type == ServiceType.Command: |
311 | 93 | self.frames = self.service_frames | 98 | self.frames = self.service_frames |
316 | 94 | self.service_frames = [] | 99 | elif self.service_item_type == ServiceType.Image: |
313 | 95 | elif self.service_item_type == u'image': | ||
314 | 96 | #print "image" | ||
315 | 97 | #print self.service_frames | ||
317 | 98 | for slide in self.service_frames: | 100 | for slide in self.service_frames: |
318 | 99 | slide[u'image'] = self.RenderManager.resize_image(slide[u'image']) | 101 | slide[u'image'] = self.RenderManager.resize_image(slide[u'image']) |
319 | 100 | self.frames = self.service_frames | 102 | self.frames = self.service_frames |
320 | 101 | #self.service_frames = [] | ||
321 | 102 | else: | 103 | else: |
322 | 103 | log.error(u'Invalid value renderer :%s' % self.service_item_type) | 104 | log.error(u'Invalid value renderer :%s' % self.service_item_type) |
323 | 104 | 105 | ||
324 | @@ -115,7 +116,7 @@ | |||
325 | 115 | ``image`` | 116 | ``image`` |
326 | 116 | The actual image file name. | 117 | The actual image file name. |
327 | 117 | """ | 118 | """ |
329 | 118 | self.service_item_type = u'image' | 119 | self.service_item_type = ServiceType.Image |
330 | 119 | self.service_item_path = path | 120 | self.service_item_path = path |
331 | 120 | self.service_frames.append({u'title': frame_title, u'image': image}) | 121 | self.service_frames.append({u'title': frame_title, u'image': image}) |
332 | 121 | 122 | ||
333 | @@ -129,11 +130,11 @@ | |||
334 | 129 | ``raw_slide`` | 130 | ``raw_slide`` |
335 | 130 | The raw text of the slide. | 131 | The raw text of the slide. |
336 | 131 | """ | 132 | """ |
338 | 132 | self.service_item_type = u'text' | 133 | self.service_item_type = ServiceType.Text |
339 | 133 | frame_title = frame_title.split(u'\n')[0] | 134 | frame_title = frame_title.split(u'\n')[0] |
340 | 134 | self.service_frames.append({u'title': frame_title, u'raw_slide': raw_slide}) | 135 | self.service_frames.append({u'title': frame_title, u'raw_slide': raw_slide}) |
341 | 135 | 136 | ||
343 | 136 | def add_from_command(self, frame_title, command): | 137 | def add_from_command(self, path , frame_title): |
344 | 137 | """ | 138 | """ |
345 | 138 | Add a slide from a command. | 139 | Add a slide from a command. |
346 | 139 | 140 | ||
347 | @@ -143,8 +144,9 @@ | |||
348 | 143 | ``command`` | 144 | ``command`` |
349 | 144 | The command of/for the slide. | 145 | The command of/for the slide. |
350 | 145 | """ | 146 | """ |
353 | 146 | self.service_item_type = u'command' | 147 | self.service_item_type = ServiceType.Command |
354 | 147 | self.service_frames.append({u'title': frame_title, u'command': command}) | 148 | self.service_item_path = path |
355 | 149 | self.service_frames.append({u'title': frame_title, u'command': None}) | ||
356 | 148 | 150 | ||
357 | 149 | def get_oos_repr(self): | 151 | def get_oos_repr(self): |
358 | 150 | """ | 152 | """ |
359 | @@ -160,15 +162,15 @@ | |||
360 | 160 | u'type':self.service_item_type | 162 | u'type':self.service_item_type |
361 | 161 | } | 163 | } |
362 | 162 | oos_data = [] | 164 | oos_data = [] |
364 | 163 | if self.service_item_type == u'text': | 165 | if self.service_item_type == ServiceType.Text: |
365 | 164 | for slide in self.service_frames: | 166 | for slide in self.service_frames: |
366 | 165 | oos_data.append(slide) | 167 | oos_data.append(slide) |
373 | 166 | elif self.service_item_type == u'image': | 168 | elif self.service_item_type == ServiceType.Image: |
374 | 167 | #print "sf", self.service_frames | 169 | for slide in self.service_frames: |
375 | 168 | for slide in self.service_frames: | 170 | oos_data.append(slide[u'title']) |
376 | 169 | #print "s", slide | 171 | elif self.service_item_type == ServiceType.Command: |
377 | 170 | oos_data.append(slide[u'title']) | 172 | for slide in self.service_frames: |
378 | 171 | #print "od", oos_data | 173 | oos_data.append(slide[u'title']) |
379 | 172 | return {u'header': oos_header, u'data': oos_data} | 174 | return {u'header': oos_header, u'data': oos_data} |
380 | 173 | 175 | ||
381 | 174 | def set_from_oos(self, serviceitem, path=None): | 176 | def set_from_oos(self, serviceitem, path=None): |
382 | @@ -182,7 +184,6 @@ | |||
383 | 182 | ``path`` | 184 | ``path`` |
384 | 183 | Defaults to *None*. Any path data, usually for images. | 185 | Defaults to *None*. Any path data, usually for images. |
385 | 184 | """ | 186 | """ |
386 | 185 | #print "sfs", serviceitem | ||
387 | 186 | header = serviceitem[u'serviceitem'][u'header'] | 187 | header = serviceitem[u'serviceitem'][u'header'] |
388 | 187 | self.title = header[u'title'] | 188 | self.title = header[u'title'] |
389 | 188 | self.service_item_type = header[u'type'] | 189 | self.service_item_type = header[u'type'] |
390 | @@ -190,12 +191,15 @@ | |||
391 | 190 | self.theme = header[u'theme'] | 191 | self.theme = header[u'theme'] |
392 | 191 | self.addIcon(header[u'icon']) | 192 | self.addIcon(header[u'icon']) |
393 | 192 | self.raw_footer = header[u'footer'] | 193 | self.raw_footer = header[u'footer'] |
395 | 193 | if self.service_item_type == u'text': | 194 | if self.service_item_type == ServiceType.Text: |
396 | 194 | for slide in serviceitem[u'serviceitem'][u'data']: | 195 | for slide in serviceitem[u'serviceitem'][u'data']: |
397 | 195 | self.service_frames.append(slide) | 196 | self.service_frames.append(slide) |
399 | 196 | elif self.service_item_type == u'image': | 197 | elif self.service_item_type == ServiceType.Image: |
400 | 197 | for text_image in serviceitem[u'serviceitem'][u'data']: | 198 | for text_image in serviceitem[u'serviceitem'][u'data']: |
401 | 198 | filename = os.path.join(path, text_image) | 199 | filename = os.path.join(path, text_image) |
402 | 199 | #print "fn", filename | ||
403 | 200 | real_image = QtGui.QImage(unicode(filename)) | 200 | real_image = QtGui.QImage(unicode(filename)) |
404 | 201 | self.add_from_image(path, text_image, real_image) | 201 | self.add_from_image(path, text_image, real_image) |
405 | 202 | elif self.service_item_type == ServiceType.Command: | ||
406 | 203 | for text_image in serviceitem[u'serviceitem'][u'data']: | ||
407 | 204 | filename = os.path.join(path, text_image) | ||
408 | 205 | self.add_from_command(path, text_image) | ||
409 | 202 | 206 | ||
410 | === modified file 'openlp/core/lib/settingstab.py' | |||
411 | --- openlp/core/lib/settingstab.py 2009-07-10 13:16:15 +0000 | |||
412 | +++ openlp/core/lib/settingstab.py 2009-08-29 07:17:56 +0000 | |||
413 | @@ -93,3 +93,9 @@ | |||
414 | 93 | Save settings to disk. | 93 | Save settings to disk. |
415 | 94 | """ | 94 | """ |
416 | 95 | pass | 95 | pass |
417 | 96 | |||
418 | 97 | def postSetUp(self): | ||
419 | 98 | """ | ||
420 | 99 | Changes which need to be made after setup of application | ||
421 | 100 | """ | ||
422 | 101 | pass | ||
423 | 96 | 102 | ||
424 | === modified file 'openlp/core/lib/toolbar.py' | |||
425 | --- openlp/core/lib/toolbar.py 2009-07-08 06:55:08 +0000 | |||
426 | +++ openlp/core/lib/toolbar.py 2009-08-28 17:40:07 +0000 | |||
427 | @@ -34,8 +34,9 @@ | |||
428 | 34 | QtGui.QToolBar.__init__(self, None) | 34 | QtGui.QToolBar.__init__(self, None) |
429 | 35 | # useful to be able to reuse button icons... | 35 | # useful to be able to reuse button icons... |
430 | 36 | self.icons = {} | 36 | self.icons = {} |
431 | 37 | self.actions = {} | ||
432 | 37 | self.log = logging.getLogger(u'OpenLPToolbar') | 38 | self.log = logging.getLogger(u'OpenLPToolbar') |
434 | 38 | self.log.info(u'Init done') | 39 | self.log.debug(u'Init done') |
435 | 39 | 40 | ||
436 | 40 | def addToolbarButton(self, title, icon, tooltip=None, slot=None, objectname=None): | 41 | def addToolbarButton(self, title, icon, tooltip=None, slot=None, objectname=None): |
437 | 41 | """ | 42 | """ |
438 | @@ -70,12 +71,28 @@ | |||
439 | 70 | ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), | 71 | ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), |
440 | 71 | QtGui.QIcon.Normal, QtGui.QIcon.Off) | 72 | QtGui.QIcon.Normal, QtGui.QIcon.Off) |
441 | 72 | if ButtonIcon is not None: | 73 | if ButtonIcon is not None: |
443 | 73 | ToolbarButton = self.addAction(ButtonIcon, title) | 74 | if slot is not None: |
444 | 75 | ToolbarButton = self.addAction(ButtonIcon, title, slot) | ||
445 | 76 | else: | ||
446 | 77 | ToolbarButton = self.addAction(ButtonIcon, title) | ||
447 | 74 | if tooltip is not None: | 78 | if tooltip is not None: |
448 | 75 | ToolbarButton.setToolTip(tooltip) | 79 | ToolbarButton.setToolTip(tooltip) |
449 | 76 | if slot is not None: | ||
450 | 77 | QtCore.QObject.connect(ToolbarButton, QtCore.SIGNAL(u'triggered()'), slot) | ||
451 | 78 | self.icons[title] = ButtonIcon | 80 | self.icons[title] = ButtonIcon |
452 | 81 | self.actions[title] = ToolbarButton | ||
453 | 82 | |||
454 | 83 | def addToolbarSeparator(self, handle): | ||
455 | 84 | """ | ||
456 | 85 | Add a Separator bar to the toolbar and store it's Handle | ||
457 | 86 | """ | ||
458 | 87 | action = self.addSeparator() | ||
459 | 88 | self.actions[handle] = action | ||
460 | 89 | |||
461 | 90 | def addToolbarWidget(self, handle, widget): | ||
462 | 91 | """ | ||
463 | 92 | Add a Widget to the toolbar and store it's Handle | ||
464 | 93 | """ | ||
465 | 94 | action = self.addWidget(widget) | ||
466 | 95 | self.actions[handle] = action | ||
467 | 79 | 96 | ||
468 | 80 | def getIconFromTitle(self, title): | 97 | def getIconFromTitle(self, title): |
469 | 81 | """ | 98 | """ |
470 | @@ -90,3 +107,11 @@ | |||
471 | 90 | else: | 107 | else: |
472 | 91 | self.log.error(u'getIconFromTitle - no icon for %s' % title) | 108 | self.log.error(u'getIconFromTitle - no icon for %s' % title) |
473 | 92 | return QtGui.QIcon() | 109 | return QtGui.QIcon() |
474 | 110 | |||
475 | 111 | def makeWidgetsInvisible(self, widgets): | ||
476 | 112 | for widget in widgets: | ||
477 | 113 | self.actions[widget].setVisible(False) | ||
478 | 114 | |||
479 | 115 | def makeWidgetsVisible(self, widgets): | ||
480 | 116 | for widget in widgets: | ||
481 | 117 | self.actions[widget].setVisible(True) | ||
482 | 93 | 118 | ||
483 | === modified file 'openlp/core/ui/__init__.py' | |||
484 | --- openlp/core/ui/__init__.py 2009-08-13 20:02:38 +0000 | |||
485 | +++ openlp/core/ui/__init__.py 2009-08-27 05:17:20 +0000 | |||
486 | @@ -17,7 +17,7 @@ | |||
487 | 17 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple | 17 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
488 | 18 | Place, Suite 330, Boston, MA 02111-1307 USA | 18 | Place, Suite 330, Boston, MA 02111-1307 USA |
489 | 19 | """ | 19 | """ |
491 | 20 | from slidecontroller import MasterToolbar | 20 | #from slidecontroller import MasterToolbar |
492 | 21 | from maindisplay import MainDisplay | 21 | from maindisplay import MainDisplay |
493 | 22 | from amendthemeform import AmendThemeForm | 22 | from amendthemeform import AmendThemeForm |
494 | 23 | from slidecontroller import SlideController | 23 | from slidecontroller import SlideController |
495 | 24 | 24 | ||
496 | === modified file 'openlp/core/ui/amendthemeform.py' | |||
497 | --- openlp/core/ui/amendthemeform.py 2009-08-26 05:00:19 +0000 | |||
498 | +++ openlp/core/ui/amendthemeform.py 2009-08-31 07:05:59 +0000 | |||
499 | @@ -135,8 +135,8 @@ | |||
500 | 135 | unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign), | 135 | unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign), |
501 | 136 | unicode(self.theme.display_wrapStyle)) | 136 | unicode(self.theme.display_wrapStyle)) |
502 | 137 | theme = new_theme.extract_xml() | 137 | theme = new_theme.extract_xml() |
505 | 138 | self.thememanager.saveTheme(theme_name, theme, save_from, save_to) | 138 | if self.thememanager.saveTheme(theme_name, theme, save_from, save_to) is not False: |
506 | 139 | return QtGui.QDialog.accept(self) | 139 | return QtGui.QDialog.accept(self) |
507 | 140 | 140 | ||
508 | 141 | def loadTheme(self, theme): | 141 | def loadTheme(self, theme): |
509 | 142 | log.debug(u'LoadTheme %s', theme) | 142 | log.debug(u'LoadTheme %s', theme) |
510 | @@ -510,45 +510,60 @@ | |||
511 | 510 | self.VerticalComboBox.setCurrentIndex(int(self.theme.display_verticalAlign)) | 510 | self.VerticalComboBox.setCurrentIndex(int(self.theme.display_verticalAlign)) |
512 | 511 | 511 | ||
513 | 512 | def stateChanging(self, theme): | 512 | def stateChanging(self, theme): |
553 | 513 | if theme.background_type == u'solid': | 513 | if theme.background_mode == u'transparent': |
554 | 514 | self.Color1PushButton.setStyleSheet( | 514 | self.Color1Label.setVisible(False) |
555 | 515 | u'background-color: %s' % unicode(theme.background_color)) | 515 | self.Color1PushButton.setVisible(False) |
556 | 516 | self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:')) | 516 | self.Color2Label.setVisible(False) |
557 | 517 | self.Color1Label.setVisible(True) | 517 | self.Color2PushButton.setVisible(False) |
558 | 518 | self.Color1PushButton.setVisible(True) | 518 | self.ImageLabel.setVisible(False) |
559 | 519 | self.Color2Label.setVisible(False) | 519 | self.ImageLineEdit.setVisible(False) |
560 | 520 | self.Color2PushButton.setVisible(False) | 520 | self.ImageFilenameWidget.setVisible(False) |
561 | 521 | self.ImageLabel.setVisible(False) | 521 | self.GradientLabel.setVisible(False) |
562 | 522 | self.ImageLineEdit.setVisible(False) | 522 | self.GradientComboBox.setVisible(False) |
563 | 523 | self.ImageFilenameWidget.setVisible(False) | 523 | self.BackgroundTypeComboBox.setVisible(False) |
564 | 524 | self.GradientLabel.setVisible(False) | 524 | self.BackgroundTypeLabel.setVisible(False) |
565 | 525 | self.GradientComboBox.setVisible(False) | 525 | else: |
566 | 526 | elif theme.background_type == u'gradient': | 526 | self.BackgroundTypeComboBox.setVisible(True) |
567 | 527 | self.Color1PushButton.setStyleSheet( | 527 | self.BackgroundTypeLabel.setVisible(True) |
568 | 528 | u'background-color: %s' % unicode(theme.background_startColor)) | 528 | if theme.background_type == u'solid': |
569 | 529 | self.Color2PushButton.setStyleSheet( | 529 | self.Color1PushButton.setStyleSheet( |
570 | 530 | u'background-color: %s' % unicode(theme.background_endColor)) | 530 | u'background-color: %s' % unicode(theme.background_color)) |
571 | 531 | self.Color1Label.setText(translate(u'ThemeManager', u'First Color:')) | 531 | self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:')) |
572 | 532 | self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:')) | 532 | self.Color1Label.setVisible(True) |
573 | 533 | self.Color1Label.setVisible(True) | 533 | self.Color1PushButton.setVisible(True) |
574 | 534 | self.Color1PushButton.setVisible(True) | 534 | self.Color2Label.setVisible(False) |
575 | 535 | self.Color2Label.setVisible(True) | 535 | self.Color2PushButton.setVisible(False) |
576 | 536 | self.Color2PushButton.setVisible(True) | 536 | self.ImageLabel.setVisible(False) |
577 | 537 | self.ImageLabel.setVisible(False) | 537 | self.ImageLineEdit.setVisible(False) |
578 | 538 | self.ImageLineEdit.setVisible(False) | 538 | self.ImageFilenameWidget.setVisible(False) |
579 | 539 | self.ImageFilenameWidget.setVisible(False) | 539 | self.GradientLabel.setVisible(False) |
580 | 540 | self.GradientLabel.setVisible(True) | 540 | self.GradientComboBox.setVisible(False) |
581 | 541 | self.GradientComboBox.setVisible(True) | 541 | elif theme.background_type == u'gradient': |
582 | 542 | else: # must be image | 542 | self.Color1PushButton.setStyleSheet( |
583 | 543 | self.Color1Label.setVisible(False) | 543 | u'background-color: %s' % unicode(theme.background_startColor)) |
584 | 544 | self.Color1PushButton.setVisible(False) | 544 | self.Color2PushButton.setStyleSheet( |
585 | 545 | self.Color2Label.setVisible(False) | 545 | u'background-color: %s' % unicode(theme.background_endColor)) |
586 | 546 | self.Color2PushButton.setVisible(False) | 546 | self.Color1Label.setText(translate(u'ThemeManager', u'First Color:')) |
587 | 547 | self.ImageLabel.setVisible(True) | 547 | self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:')) |
588 | 548 | self.ImageLineEdit.setVisible(True) | 548 | self.Color1Label.setVisible(True) |
589 | 549 | self.ImageFilenameWidget.setVisible(True) | 549 | self.Color1PushButton.setVisible(True) |
590 | 550 | self.GradientLabel.setVisible(False) | 550 | self.Color2Label.setVisible(True) |
591 | 551 | self.GradientComboBox.setVisible(False) | 551 | self.Color2PushButton.setVisible(True) |
592 | 552 | self.ImageLabel.setVisible(False) | ||
593 | 553 | self.ImageLineEdit.setVisible(False) | ||
594 | 554 | self.ImageFilenameWidget.setVisible(False) | ||
595 | 555 | self.GradientLabel.setVisible(True) | ||
596 | 556 | self.GradientComboBox.setVisible(True) | ||
597 | 557 | else: # must be image | ||
598 | 558 | self.Color1Label.setVisible(False) | ||
599 | 559 | self.Color1PushButton.setVisible(False) | ||
600 | 560 | self.Color2Label.setVisible(False) | ||
601 | 561 | self.Color2PushButton.setVisible(False) | ||
602 | 562 | self.ImageLabel.setVisible(True) | ||
603 | 563 | self.ImageLineEdit.setVisible(True) | ||
604 | 564 | self.ImageFilenameWidget.setVisible(True) | ||
605 | 565 | self.GradientLabel.setVisible(False) | ||
606 | 566 | self.GradientComboBox.setVisible(False) | ||
607 | 552 | 567 | ||
608 | 553 | if theme.font_main_override == False: | 568 | if theme.font_main_override == False: |
609 | 554 | self.FontMainXSpinBox.setEnabled(False) | 569 | self.FontMainXSpinBox.setEnabled(False) |
610 | 555 | 570 | ||
611 | === modified file 'openlp/core/ui/mainwindow.py' | |||
612 | --- openlp/core/ui/mainwindow.py 2009-08-26 05:00:19 +0000 | |||
613 | +++ openlp/core/ui/mainwindow.py 2009-08-29 07:17:56 +0000 | |||
614 | @@ -313,8 +313,6 @@ | |||
615 | 313 | translate(u'mainWindow', u'Service Manager')) | 313 | translate(u'mainWindow', u'Service Manager')) |
616 | 314 | self.ThemeManagerDock.setWindowTitle( | 314 | self.ThemeManagerDock.setWindowTitle( |
617 | 315 | translate(u'mainWindow', u'Theme Manager')) | 315 | translate(u'mainWindow', u'Theme Manager')) |
618 | 316 | self.DefaultThemeLabel.setText(MainWindow.defaultThemeText + \ | ||
619 | 317 | self.ThemeManagerContents.getDefault()) | ||
620 | 318 | self.FileNewItem.setText(translate(u'mainWindow', u'&New')) | 316 | self.FileNewItem.setText(translate(u'mainWindow', u'&New')) |
621 | 319 | self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service')) | 317 | self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service')) |
622 | 320 | self.FileNewItem.setStatusTip( | 318 | self.FileNewItem.setStatusTip( |
623 | @@ -492,6 +490,8 @@ | |||
624 | 492 | # Once all components are initialised load the Themes | 490 | # Once all components are initialised load the Themes |
625 | 493 | log.info(u'Load Themes') | 491 | log.info(u'Load Themes') |
626 | 494 | self.ThemeManagerContents.loadThemes() | 492 | self.ThemeManagerContents.loadThemes() |
627 | 493 | log.info(u'Load data from Settings') | ||
628 | 494 | self.settingsForm.postSetUp() | ||
629 | 495 | 495 | ||
630 | 496 | def getMonitorNumber(self): | 496 | def getMonitorNumber(self): |
631 | 497 | """ | 497 | """ |
632 | 498 | 498 | ||
633 | === modified file 'openlp/core/ui/servicemanager.py' | |||
634 | --- openlp/core/ui/servicemanager.py 2009-08-25 05:18:09 +0000 | |||
635 | +++ openlp/core/ui/servicemanager.py 2009-08-31 18:27:36 +0000 | |||
636 | @@ -25,7 +25,7 @@ | |||
637 | 25 | 25 | ||
638 | 26 | from PyQt4 import QtCore, QtGui | 26 | from PyQt4 import QtCore, QtGui |
639 | 27 | from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \ | 27 | from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \ |
641 | 28 | RenderManager, translate, buildIcon, \ | 28 | RenderManager, translate, buildIcon, ServiceType, \ |
642 | 29 | contextMenuAction, contextMenuSeparator, Receiver | 29 | contextMenuAction, contextMenuSeparator, Receiver |
643 | 30 | from openlp.core.utils import ConfigHelper | 30 | from openlp.core.utils import ConfigHelper |
644 | 31 | 31 | ||
645 | @@ -341,7 +341,8 @@ | |||
646 | 341 | zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w') | 341 | zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w') |
647 | 342 | for item in self.serviceItems: | 342 | for item in self.serviceItems: |
648 | 343 | service.append({u'serviceitem':item[u'data'].get_oos_repr()}) | 343 | service.append({u'serviceitem':item[u'data'].get_oos_repr()}) |
650 | 344 | if item[u'data'].service_item_type == u'image': | 344 | if item[u'data'].service_item_type == ServiceType.Image or \ |
651 | 345 | item[u'data'].service_item_type == ServiceType.Command: | ||
652 | 345 | for frame in item[u'data'].frames: | 346 | for frame in item[u'data'].frames: |
653 | 346 | path_from = unicode(item[u'data'].service_item_path + u'/' + frame[u'title']) | 347 | path_from = unicode(item[u'data'].service_item_path + u'/' + frame[u'title']) |
654 | 347 | zip.write(path_from) | 348 | zip.write(path_from) |
655 | @@ -354,7 +355,7 @@ | |||
656 | 354 | os.remove(servicefile) | 355 | os.remove(servicefile) |
657 | 355 | except: | 356 | except: |
658 | 356 | pass #if not present do not worry | 357 | pass #if not present do not worry |
660 | 357 | self.parent.OosChanged(True, self.serviceName) | 358 | self.parent.OosChanged(True, filename + u'.oos') |
661 | 358 | 359 | ||
662 | 359 | def onLoadService(self): | 360 | def onLoadService(self): |
663 | 360 | """ | 361 | """ |
664 | @@ -368,31 +369,34 @@ | |||
665 | 368 | name = filename.split(os.path.sep) | 369 | name = filename.split(os.path.sep) |
666 | 369 | if filename != u'': | 370 | if filename != u'': |
667 | 370 | self.config.set_last_dir(filename) | 371 | self.config.set_last_dir(filename) |
677 | 371 | zip = zipfile.ZipFile(unicode(filename)) | 372 | try: |
678 | 372 | filexml = None | 373 | zip = zipfile.ZipFile(unicode(filename)) |
679 | 373 | themename = None | 374 | filexml = None |
680 | 374 | for file in zip.namelist(): | 375 | themename = None |
681 | 375 | names = file.split(os.path.sep) | 376 | for file in zip.namelist(): |
682 | 376 | file_to = os.path.join(self.servicePath, names[len(names) - 1]) | 377 | names = file.split(os.path.sep) |
683 | 377 | file_data = zip.read(file) | 378 | file_to = os.path.join(self.servicePath, names[len(names) - 1]) |
684 | 378 | f = open(file_to, u'w') | 379 | file_data = zip.read(file) |
685 | 379 | f.write(file_data) | 380 | f = open(file_to, u'w') |
686 | 381 | f.write(file_data) | ||
687 | 382 | f.close() | ||
688 | 383 | if file_to.endswith(u'ood'): | ||
689 | 384 | p_file = file_to | ||
690 | 385 | f = open(p_file, u'r') | ||
691 | 386 | items = cPickle.load(f) | ||
692 | 380 | f.close() | 387 | f.close() |
706 | 381 | if file_to.endswith(u'ood'): | 388 | self.onNewService() |
707 | 382 | p_file = file_to | 389 | for item in items: |
708 | 383 | f = open(p_file, u'r') | 390 | serviceitem = ServiceItem() |
709 | 384 | items = cPickle.load(f) | 391 | serviceitem.RenderManager = self.parent.RenderManager |
710 | 385 | f.close() | 392 | serviceitem.set_from_oos(item, self.servicePath ) |
711 | 386 | self.onNewService() | 393 | self.addServiceItem(serviceitem) |
712 | 387 | for item in items: | 394 | try: |
713 | 388 | serviceitem = ServiceItem() | 395 | os.remove(p_file) |
714 | 389 | serviceitem.RenderManager = self.parent.RenderManager | 396 | except: |
715 | 390 | serviceitem.set_from_oos(item, self.servicePath ) | 397 | #if not present do not worry |
716 | 391 | self.addServiceItem(serviceitem) | 398 | pass |
704 | 392 | try: | ||
705 | 393 | os.remove(p_file) | ||
717 | 394 | except: | 399 | except: |
718 | 395 | #if not present do not worry | ||
719 | 396 | pass | 400 | pass |
720 | 397 | self.serviceName = name[len(name) - 1] | 401 | self.serviceName = name[len(name) - 1] |
721 | 398 | self.parent.OosChanged(True, self.serviceName) | 402 | self.parent.OosChanged(True, self.serviceName) |
722 | 399 | 403 | ||
723 | === modified file 'openlp/core/ui/settingsform.py' | |||
724 | --- openlp/core/ui/settingsform.py 2009-08-06 13:17:36 +0000 | |||
725 | +++ openlp/core/ui/settingsform.py 2009-08-29 07:17:56 +0000 | |||
726 | @@ -51,3 +51,7 @@ | |||
727 | 51 | for tab_index in range(0, self.SettingsTabWidget.count()): | 51 | for tab_index in range(0, self.SettingsTabWidget.count()): |
728 | 52 | self.SettingsTabWidget.widget(tab_index).save() | 52 | self.SettingsTabWidget.widget(tab_index).save() |
729 | 53 | return QtGui.QDialog.accept(self) | 53 | return QtGui.QDialog.accept(self) |
730 | 54 | |||
731 | 55 | def postSetUp(self): | ||
732 | 56 | for tab_index in range(0, self.SettingsTabWidget.count()): | ||
733 | 57 | self.SettingsTabWidget.widget(tab_index).postSetUp() | ||
734 | 54 | 58 | ||
735 | === modified file 'openlp/core/ui/slidecontroller.py' | |||
736 | --- openlp/core/ui/slidecontroller.py 2009-08-24 05:10:04 +0000 | |||
737 | +++ openlp/core/ui/slidecontroller.py 2009-08-31 14:04:00 +0000 | |||
738 | @@ -21,7 +21,7 @@ | |||
739 | 21 | import os | 21 | import os |
740 | 22 | 22 | ||
741 | 23 | from PyQt4 import QtCore, QtGui | 23 | from PyQt4 import QtCore, QtGui |
743 | 24 | from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver | 24 | from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver, ServiceType |
744 | 25 | 25 | ||
745 | 26 | class SlideList(QtGui.QTableWidget): | 26 | class SlideList(QtGui.QTableWidget): |
746 | 27 | """ | 27 | """ |
747 | @@ -36,16 +36,16 @@ | |||
748 | 36 | if type(event) == QtGui.QKeyEvent: | 36 | if type(event) == QtGui.QKeyEvent: |
749 | 37 | #here accept the event and do something | 37 | #here accept the event and do something |
750 | 38 | if event.key() == QtCore.Qt.Key_Up: | 38 | if event.key() == QtCore.Qt.Key_Up: |
752 | 39 | self.parent.BaseToolbar.onSlideSelectedPrevious() | 39 | self.parent.onSlideSelectedPrevious() |
753 | 40 | event.accept() | 40 | event.accept() |
754 | 41 | elif event.key() == QtCore.Qt.Key_Down: | 41 | elif event.key() == QtCore.Qt.Key_Down: |
756 | 42 | self.parent.BaseToolbar.onSlideSelectedNext() | 42 | self.parent.onSlideSelectedNext() |
757 | 43 | event.accept() | 43 | event.accept() |
758 | 44 | elif event.key() == QtCore.Qt.Key_PageUp: | 44 | elif event.key() == QtCore.Qt.Key_PageUp: |
760 | 45 | self.parent.BaseToolbar.onSlideSelectedFirst() | 45 | self.parent.onSlideSelectedFirst() |
761 | 46 | event.accept() | 46 | event.accept() |
762 | 47 | elif event.key() == QtCore.Qt.Key_PageDown: | 47 | elif event.key() == QtCore.Qt.Key_PageDown: |
764 | 48 | self.parent.BaseToolbar.onSlideSelectedLast() | 48 | self.parent.onSlideSelectedLast() |
765 | 49 | event.accept() | 49 | event.accept() |
766 | 50 | event.ignore() | 50 | event.ignore() |
767 | 51 | else: | 51 | else: |
768 | @@ -63,13 +63,11 @@ | |||
769 | 63 | """ | 63 | """ |
770 | 64 | Set up the Slide Controller. | 64 | Set up the Slide Controller. |
771 | 65 | """ | 65 | """ |
772 | 66 | self.toolbarList = {} | ||
773 | 67 | QtGui.QWidget.__init__(self, parent) | 66 | QtGui.QWidget.__init__(self, parent) |
774 | 68 | self.isLive = isLive | 67 | self.isLive = isLive |
775 | 69 | self.prefix = u'preview_' | ||
776 | 70 | if isLive: | ||
777 | 71 | self.prefix = u'live_' | ||
778 | 72 | self.parent = parent | 68 | self.parent = parent |
779 | 69 | self.image_list = [u'Start Loop', u'Stop Loop', u'Loop Spearator', u'Image SpinBox'] | ||
780 | 70 | self.timer_id = 0 | ||
781 | 73 | self.Panel = QtGui.QWidget(parent.ControlSplitter) | 71 | self.Panel = QtGui.QWidget(parent.ControlSplitter) |
782 | 74 | self.Splitter = QtGui.QSplitter(self.Panel) | 72 | self.Splitter = QtGui.QSplitter(self.Panel) |
783 | 75 | self.Splitter.setOrientation(QtCore.Qt.Vertical) | 73 | self.Splitter.setOrientation(QtCore.Qt.Vertical) |
784 | @@ -96,10 +94,53 @@ | |||
785 | 96 | self.PreviewListWidget.isLive = self.isLive | 94 | self.PreviewListWidget.isLive = self.isLive |
786 | 97 | self.PreviewListWidget.setObjectName(u'PreviewListWidget') | 95 | self.PreviewListWidget.setObjectName(u'PreviewListWidget') |
787 | 98 | self.ControllerLayout.addWidget(self.PreviewListWidget) | 96 | self.ControllerLayout.addWidget(self.PreviewListWidget) |
792 | 99 | # Plugin the Base Toolbar class | 97 | # Build the full toolbar |
793 | 100 | self.BaseToolbar = MasterToolbar(self.isLive) | 98 | self.Toolbar = OpenLPToolbar(self) |
794 | 101 | self.registerToolbar(u'master', self.BaseToolbar) | 99 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, |
795 | 102 | self.Toolbar = self.BaseToolbar.getToolbar() | 100 | QtGui.QSizePolicy.Fixed) |
796 | 101 | sizeToolbarPolicy.setHorizontalStretch(0) | ||
797 | 102 | sizeToolbarPolicy.setVerticalStretch(0) | ||
798 | 103 | sizeToolbarPolicy.setHeightForWidth( | ||
799 | 104 | self.Toolbar.sizePolicy().hasHeightForWidth()) | ||
800 | 105 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) | ||
801 | 106 | if self.isLive: | ||
802 | 107 | self.Toolbar.addToolbarButton(u'First Slide', | ||
803 | 108 | u':/slides/slide_first.png', | ||
804 | 109 | translate(u'SlideController', u'Move to first'), | ||
805 | 110 | self.onSlideSelectedFirst) | ||
806 | 111 | self.Toolbar.addToolbarButton(u'Previous Slide', | ||
807 | 112 | u':/slides/slide_previous.png', | ||
808 | 113 | translate(u'SlideController', u'Move to previous'), | ||
809 | 114 | self.onSlideSelectedPrevious) | ||
810 | 115 | self.Toolbar.addToolbarButton(u'Next Slide', | ||
811 | 116 | u':/slides/slide_next.png', | ||
812 | 117 | translate(u'SlideController', u'Move to next'), | ||
813 | 118 | self.onSlideSelectedNext) | ||
814 | 119 | if self.isLive: | ||
815 | 120 | self.Toolbar.addToolbarButton(u'Last Slide', | ||
816 | 121 | u':/slides/slide_last.png', | ||
817 | 122 | translate(u'SlideController', u'Move to last'), | ||
818 | 123 | self.onSlideSelectedLast) | ||
819 | 124 | if self.isLive: | ||
820 | 125 | self.Toolbar.addToolbarSeparator(u'Close Separator') | ||
821 | 126 | self.Toolbar.addToolbarButton(u'Close Screen', | ||
822 | 127 | u':/slides/slide_close.png', | ||
823 | 128 | translate(u'SlideController', u'Close Screen'), | ||
824 | 129 | self.onBlankScreen) | ||
825 | 130 | if isLive: | ||
826 | 131 | self.Toolbar.addToolbarSeparator(u'Loop Spearator') | ||
827 | 132 | self.Toolbar.addToolbarButton(u'Start Loop', | ||
828 | 133 | u':/media/media_time.png', | ||
829 | 134 | translate(u'SlideController', u'Start continuous loop'), | ||
830 | 135 | self.onStartLoop) | ||
831 | 136 | self.Toolbar.addToolbarButton(u'Stop Loop', | ||
832 | 137 | u':/media/media_stop.png', | ||
833 | 138 | translate(u'SlideController', u'Stop continuous loop'), | ||
834 | 139 | self.onStopLoop) | ||
835 | 140 | self.DelaySpinBox = QtGui.QSpinBox() | ||
836 | 141 | self.Toolbar.addToolbarWidget(u'Image SpinBox', self.DelaySpinBox) | ||
837 | 142 | self.DelaySpinBox.setSuffix(translate(u'SlideController', u's')) | ||
838 | 143 | |||
839 | 103 | self.ControllerLayout.addWidget(self.Toolbar) | 144 | self.ControllerLayout.addWidget(self.Toolbar) |
840 | 104 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, | 145 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, |
841 | 105 | QtGui.QSizePolicy.Fixed) | 146 | QtGui.QSizePolicy.Fixed) |
842 | @@ -110,7 +151,7 @@ | |||
843 | 110 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) | 151 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) |
844 | 111 | # Screen preview area | 152 | # Screen preview area |
845 | 112 | self.PreviewFrame = QtGui.QFrame(self.Splitter) | 153 | self.PreviewFrame = QtGui.QFrame(self.Splitter) |
847 | 113 | self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 280, 190)) | 154 | self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225)) |
848 | 114 | self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( | 155 | self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( |
849 | 115 | QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) | 156 | QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) |
850 | 116 | self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) | 157 | self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) |
851 | @@ -128,7 +169,7 @@ | |||
852 | 128 | sizePolicy.setHeightForWidth( | 169 | sizePolicy.setHeightForWidth( |
853 | 129 | self.SlidePreview.sizePolicy().hasHeightForWidth()) | 170 | self.SlidePreview.sizePolicy().hasHeightForWidth()) |
854 | 130 | self.SlidePreview.setSizePolicy(sizePolicy) | 171 | self.SlidePreview.setSizePolicy(sizePolicy) |
856 | 131 | self.SlidePreview.setFixedSize(QtCore.QSize(250, 210)) | 172 | self.SlidePreview.setFixedSize(QtCore.QSize(300, 225)) |
857 | 132 | self.SlidePreview.setFrameShape(QtGui.QFrame.Box) | 173 | self.SlidePreview.setFrameShape(QtGui.QFrame.Box) |
858 | 133 | self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) | 174 | self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) |
859 | 134 | self.SlidePreview.setLineWidth(1) | 175 | self.SlidePreview.setLineWidth(1) |
860 | @@ -140,45 +181,46 @@ | |||
861 | 140 | QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) | 181 | QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) |
862 | 141 | QtCore.QObject.connect(self.PreviewListWidget, | 182 | QtCore.QObject.connect(self.PreviewListWidget, |
863 | 142 | QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) | 183 | QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) |
903 | 143 | # Window Event Handlers | 184 | if isLive: |
904 | 144 | QtCore.QObject.connect(Receiver.get_receiver(), | 185 | QtCore.QObject.connect(Receiver.get_receiver(), |
905 | 145 | QtCore.SIGNAL(u'%sslide_first'% self.prefix), self.onSlideSelectedFirst) | 186 | QtCore.SIGNAL(u'update_spin_delay'), self.receiveSpinDelay) |
906 | 146 | QtCore.QObject.connect(Receiver.get_receiver(), | 187 | Receiver().send_message(u'request_spin_delay') |
907 | 147 | QtCore.SIGNAL(u'%sslide_previous'% self.prefix), self.onSlideSelectedPrevious) | 188 | if isLive: |
908 | 148 | QtCore.QObject.connect(Receiver.get_receiver(), | 189 | self.Toolbar.makeWidgetsInvisible(self.image_list) |
909 | 149 | QtCore.SIGNAL(u'%sslide_next'% self.prefix), self.onSlideSelectedNext) | 190 | else: |
910 | 150 | QtCore.QObject.connect(Receiver.get_receiver(), | 191 | pass |
911 | 151 | QtCore.SIGNAL(u'%sslide_last'% self.prefix), self.onSlideSelectedLast) | 192 | |
912 | 152 | QtCore.QObject.connect(Receiver.get_receiver(), | 193 | def receiveSpinDelay(self, value): |
913 | 153 | QtCore.SIGNAL(u'%sslide_start_loop'% self.prefix), self.onStartLoop) | 194 | self.DelaySpinBox.setValue(int(value)) |
914 | 154 | QtCore.QObject.connect(Receiver.get_receiver(), | 195 | |
915 | 155 | QtCore.SIGNAL(u'%sslide_stop_loop'% self.prefix), self.onStopLoop) | 196 | def enableToolBar(self, item): |
916 | 156 | 197 | """ | |
917 | 157 | 198 | Allows the toolbars to be reconfigured based on Controller Type | |
918 | 158 | def registerToolbar(self, handle,controller): | 199 | and ServiceItem Type |
919 | 159 | """ | 200 | """ |
920 | 160 | Register a new toolbar with the controller | 201 | if self.isLive: |
921 | 161 | ``handle`` | 202 | self.enableLiveToolBar(item) |
922 | 162 | Identifier for the toolbar being stored this should equal the | 203 | else: |
923 | 163 | plugins name. | 204 | self.enablePreviewToolBar(item) |
924 | 164 | ``controller`` | 205 | |
925 | 165 | The toolbar class which should extend MasterToolbar | 206 | def enableLiveToolBar(self, item): |
926 | 166 | """ | 207 | """ |
927 | 167 | #store the handle name in lower case so no probems later | 208 | Allows the live toolbar to be customised |
928 | 168 | self.toolbarList[handle.lower()] = controller | 209 | """ |
929 | 169 | 210 | if item.service_item_type == ServiceType.Text: | |
930 | 170 | def retrieveToolbar(self, handle): | 211 | self.Toolbar.makeWidgetsInvisible(self.image_list) |
931 | 171 | """ | 212 | elif item.service_item_type == ServiceType.Image: |
932 | 172 | Find the toolbar and return master if none present | 213 | #Not sensible to allow loops with 1 frame |
933 | 173 | Add extra information back into toolbar class | 214 | if len(item.frames) > 1: |
934 | 174 | ``handle`` | 215 | self.Toolbar.makeWidgetsVisible(self.image_list) |
935 | 175 | Identifier for the toolbar being requested | 216 | else: |
936 | 176 | """ | 217 | self.Toolbar.makeWidgetsInvisible(self.image_list) |
937 | 177 | try: | 218 | |
938 | 178 | toolbar = self.toolbarList[handle.lower()] | 219 | def enablePreviewToolBar(self, item): |
939 | 179 | except: | 220 | """ |
940 | 180 | toolbar = self.toolbarList[u'master'] | 221 | Allows the Preview toolbar to be customised |
941 | 181 | return toolbar | 222 | """ |
942 | 223 | pass | ||
943 | 182 | 224 | ||
944 | 183 | def addServiceItem(self, item): | 225 | def addServiceItem(self, item): |
945 | 184 | """ | 226 | """ |
946 | @@ -186,13 +228,9 @@ | |||
947 | 186 | request the correct the toolbar of the plugin | 228 | request the correct the toolbar of the plugin |
948 | 187 | Called by plugins | 229 | Called by plugins |
949 | 188 | """ | 230 | """ |
956 | 189 | self.BaseToolbar = self.retrieveToolbar(item.shortname) | 231 | log.debug(u'addServiceItem') |
951 | 190 | self.ControllerLayout.removeWidget(self.Toolbar) | ||
952 | 191 | #remove the old toolbar | ||
953 | 192 | self.Toolbar.clear() | ||
954 | 193 | self.Toolbar = self.BaseToolbar.getToolbar() | ||
955 | 194 | self.ControllerLayout.addWidget(self.Toolbar) | ||
957 | 195 | item.render() | 232 | item.render() |
958 | 233 | self.enableToolBar(item) | ||
959 | 196 | self.displayServiceManagerItems(item, 0) | 234 | self.displayServiceManagerItems(item, 0) |
960 | 197 | 235 | ||
961 | 198 | def addServiceManagerItem(self, item, slideno): | 236 | def addServiceManagerItem(self, item, slideno): |
962 | @@ -201,12 +239,8 @@ | |||
963 | 201 | request the correct the toolbar of the plugin | 239 | request the correct the toolbar of the plugin |
964 | 202 | Called by ServiceManager | 240 | Called by ServiceManager |
965 | 203 | """ | 241 | """ |
972 | 204 | self.BaseToolbar = self.retrieveToolbar(item.shortname) | 242 | log.debug(u'addServiceItem') |
973 | 205 | self.ControllerLayout.removeWidget(self.Toolbar) | 243 | self.enableToolBar(item) |
968 | 206 | #remove the old toolbar | ||
969 | 207 | self.Toolbar.clear() | ||
970 | 208 | self.Toolbar = self.BaseToolbar.getToolbar() | ||
971 | 209 | self.ControllerLayout.addWidget(self.Toolbar) | ||
974 | 210 | self.displayServiceManagerItems(item, slideno) | 244 | self.displayServiceManagerItems(item, slideno) |
975 | 211 | 245 | ||
976 | 212 | def displayServiceManagerItems(self, serviceitem, slideno): | 246 | def displayServiceManagerItems(self, serviceitem, slideno): |
977 | @@ -214,7 +248,7 @@ | |||
978 | 214 | Loads a ServiceItem into the system from ServiceManager | 248 | Loads a ServiceItem into the system from ServiceManager |
979 | 215 | Display the slide number passed | 249 | Display the slide number passed |
980 | 216 | """ | 250 | """ |
982 | 217 | log.debug(u'add Service Manager Item') | 251 | log.debug(u'displayServiceManagerItems Start') |
983 | 218 | self.serviceitem = serviceitem | 252 | self.serviceitem = serviceitem |
984 | 219 | slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image']) | 253 | slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image']) |
985 | 220 | slide_width = 300 | 254 | slide_width = 300 |
986 | @@ -241,27 +275,13 @@ | |||
987 | 241 | self.PreviewListWidget.selectRow(slideno) | 275 | self.PreviewListWidget.selectRow(slideno) |
988 | 242 | self.onSlideSelected() | 276 | self.onSlideSelected() |
989 | 243 | self.PreviewListWidget.setFocus() | 277 | self.PreviewListWidget.setFocus() |
990 | 278 | log.debug(u'displayServiceManagerItems End') | ||
991 | 244 | 279 | ||
992 | 245 | #Screen event methods | 280 | #Screen event methods |
993 | 246 | def onSlideSelected(self): | ||
994 | 247 | """ | ||
995 | 248 | Generate the preview when you click on a slide. | ||
996 | 249 | if this is the Live Controller also display on the screen | ||
997 | 250 | """ | ||
998 | 251 | row = self.PreviewListWidget.currentRow() | ||
999 | 252 | if row > -1 and row < self.PreviewListWidget.rowCount(): | ||
1000 | 253 | label = self.PreviewListWidget.cellWidget(row, 0) | ||
1001 | 254 | smallframe = label.pixmap() | ||
1002 | 255 | frame = self.serviceitem.frames[row][u'image'] | ||
1003 | 256 | self.SlidePreview.setPixmap(smallframe) | ||
1004 | 257 | if self.isLive: | ||
1005 | 258 | self.parent.mainDisplay.frameView(frame) | ||
1006 | 259 | |||
1007 | 260 | def onSlideSelectedFirst(self): | 281 | def onSlideSelectedFirst(self): |
1008 | 261 | """ | 282 | """ |
1009 | 262 | Go to the first slide. | 283 | Go to the first slide. |
1010 | 263 | """ | 284 | """ |
1011 | 264 | print "oSSF" | ||
1012 | 265 | self.PreviewListWidget.selectRow(0) | 285 | self.PreviewListWidget.selectRow(0) |
1013 | 266 | self.onSlideSelected() | 286 | self.onSlideSelected() |
1014 | 267 | 287 | ||
1015 | @@ -312,12 +332,12 @@ | |||
1016 | 312 | self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) | 332 | self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) |
1017 | 313 | self.onSlideSelected() | 333 | self.onSlideSelected() |
1018 | 314 | 334 | ||
1020 | 315 | def onStartLoop(self, value): | 335 | def onStartLoop(self): |
1021 | 316 | """ | 336 | """ |
1022 | 317 | Go to the last slide. | 337 | Go to the last slide. |
1023 | 318 | """ | 338 | """ |
1024 | 319 | if self.PreviewListWidget.rowCount() > 1: | 339 | if self.PreviewListWidget.rowCount() > 1: |
1026 | 320 | self.timer_id = self.startTimer(int(value) * 1000) | 340 | self.timer_id = self.startTimer(int(self.DelaySpinBox.value()) * 1000) |
1027 | 321 | 341 | ||
1028 | 322 | def onStopLoop(self): | 342 | def onStopLoop(self): |
1029 | 323 | """ | 343 | """ |
1030 | @@ -329,88 +349,5 @@ | |||
1031 | 329 | if event.timerId() == self.timer_id: | 349 | if event.timerId() == self.timer_id: |
1032 | 330 | self.onSlideSelectedNext() | 350 | self.onSlideSelectedNext() |
1033 | 331 | 351 | ||
1119 | 332 | class MasterToolbar(QtCore.QObject): | 352 | |
1120 | 333 | """ | 353 | |
1036 | 334 | Class from which all toolbars should extend | ||
1037 | 335 | """ | ||
1038 | 336 | def __init__(self, isLive): | ||
1039 | 337 | self.Toolbar = None | ||
1040 | 338 | QtCore.QObject.__init__(self) | ||
1041 | 339 | self.PreviewListWidget = QtGui.QListWidget() | ||
1042 | 340 | self.isLive = isLive | ||
1043 | 341 | self.prefix = u'preview_' | ||
1044 | 342 | if isLive: | ||
1045 | 343 | self.prefix = u'live_' | ||
1046 | 344 | |||
1047 | 345 | def getToolbar(self): | ||
1048 | 346 | #define toolbar here as it needs to be redefined each time | ||
1049 | 347 | #as the clear destroys it. | ||
1050 | 348 | self.defineToolbar() | ||
1051 | 349 | self.defineZone1() | ||
1052 | 350 | self.defineZone2() | ||
1053 | 351 | self.defineZone3() | ||
1054 | 352 | self.defineZone4() | ||
1055 | 353 | self.defineZone5() | ||
1056 | 354 | return self.Toolbar | ||
1057 | 355 | |||
1058 | 356 | def defineToolbar(self): | ||
1059 | 357 | # Controller toolbar | ||
1060 | 358 | self.Toolbar = OpenLPToolbar(self) | ||
1061 | 359 | sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, | ||
1062 | 360 | QtGui.QSizePolicy.Fixed) | ||
1063 | 361 | sizeToolbarPolicy.setHorizontalStretch(0) | ||
1064 | 362 | sizeToolbarPolicy.setVerticalStretch(0) | ||
1065 | 363 | sizeToolbarPolicy.setHeightForWidth( | ||
1066 | 364 | self.Toolbar.sizePolicy().hasHeightForWidth()) | ||
1067 | 365 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) | ||
1068 | 366 | |||
1069 | 367 | def defineZone1(self): | ||
1070 | 368 | #Dummy Zone | ||
1071 | 369 | pass | ||
1072 | 370 | |||
1073 | 371 | def defineZone2(self): | ||
1074 | 372 | if self.isLive: | ||
1075 | 373 | self.Toolbar.addToolbarButton(u'First Slide', | ||
1076 | 374 | u':/slides/slide_first.png', | ||
1077 | 375 | translate(u'SlideController', u'Move to first'), | ||
1078 | 376 | self.onSlideFirst) | ||
1079 | 377 | self.Toolbar.addToolbarButton(u'Previous Slide', | ||
1080 | 378 | u':/slides/slide_previous.png', | ||
1081 | 379 | translate(u'SlideController', u'Move to previous'), | ||
1082 | 380 | self.onSlidePrevious) | ||
1083 | 381 | self.Toolbar.addToolbarButton(u'Next Slide', | ||
1084 | 382 | u':/slides/slide_next.png', | ||
1085 | 383 | translate(u'SlideController', u'Move to next'), | ||
1086 | 384 | self.onSlideNext) | ||
1087 | 385 | if self.isLive: | ||
1088 | 386 | self.Toolbar.addToolbarButton(u'Last Slide', | ||
1089 | 387 | u':/slides/slide_last.png', | ||
1090 | 388 | translate(u'SlideController', u'Move to last'), | ||
1091 | 389 | self.onSlideLast) | ||
1092 | 390 | |||
1093 | 391 | def defineZone3(self): | ||
1094 | 392 | #Dummy Zone | ||
1095 | 393 | pass | ||
1096 | 394 | |||
1097 | 395 | def defineZone4(self): | ||
1098 | 396 | if self.isLive: | ||
1099 | 397 | self.Toolbar.addSeparator() | ||
1100 | 398 | self.Toolbar.addToolbarButton(u'Close Screen', | ||
1101 | 399 | u':/slides/slide_close.png', | ||
1102 | 400 | translate(u'SlideController', u'Close Screen'), | ||
1103 | 401 | self.onSlideBlank) | ||
1104 | 402 | |||
1105 | 403 | def defineZone5(self): | ||
1106 | 404 | #Dummy Zone | ||
1107 | 405 | pass | ||
1108 | 406 | |||
1109 | 407 | def onSlideFirst(self): | ||
1110 | 408 | Receiver().send_message(u'%sslide_first'% self.prefix) | ||
1111 | 409 | def onSlidePrevious(self): | ||
1112 | 410 | Receiver().send_message(u'%sslide_previous'% self.prefix) | ||
1113 | 411 | def onSlideNext(self): | ||
1114 | 412 | Receiver().send_message(u'%sslide_next'% self.prefix) | ||
1115 | 413 | def onSlideLast(self): | ||
1116 | 414 | Receiver().send_message(u'%sslide_last' % self.prefix) | ||
1117 | 415 | def onSlideBlank(self): | ||
1118 | 416 | Receiver().send_message(u'%sslide_blank' % self.prefix) | ||
1121 | 417 | 354 | ||
1122 | === modified file 'openlp/core/ui/thememanager.py' | |||
1123 | --- openlp/core/ui/thememanager.py 2009-08-26 05:00:19 +0000 | |||
1124 | +++ openlp/core/ui/thememanager.py 2009-08-29 10:43:44 +0000 | |||
1125 | @@ -85,9 +85,6 @@ | |||
1126 | 85 | self.servicePath = self.config.get_data_path() | 85 | self.servicePath = self.config.get_data_path() |
1127 | 86 | self.global_theme = unicode(self.config.get_config(u'theme global theme', u'')) | 86 | self.global_theme = unicode(self.config.get_config(u'theme global theme', u'')) |
1128 | 87 | 87 | ||
1129 | 88 | def getDefault(self): | ||
1130 | 89 | return self.global_theme | ||
1131 | 90 | |||
1132 | 91 | def changeGlobalFromTab(self, themeName): | 88 | def changeGlobalFromTab(self, themeName): |
1133 | 92 | log.debug(u'changeGlobalFromTab %s', themeName) | 89 | log.debug(u'changeGlobalFromTab %s', themeName) |
1134 | 93 | for count in range (0, self.ThemeListWidget.count()): | 90 | for count in range (0, self.ThemeListWidget.count()): |
1135 | @@ -329,13 +326,29 @@ | |||
1136 | 329 | if os.path.exists(theme_dir) == False: | 326 | if os.path.exists(theme_dir) == False: |
1137 | 330 | os.mkdir(os.path.join(self.path, name)) | 327 | os.mkdir(os.path.join(self.path, name)) |
1138 | 331 | theme_file = os.path.join(theme_dir, name + u'.xml') | 328 | theme_file = os.path.join(theme_dir, name + u'.xml') |
1146 | 332 | outfile = open(theme_file, u'w') | 329 | log.debug(theme_file) |
1147 | 333 | outfile.write(theme_xml) | 330 | |
1148 | 334 | outfile.close() | 331 | result = QtGui.QMessageBox.Yes |
1149 | 335 | if image_from is not None and image_from != image_to: | 332 | if os.path.exists(theme_file): |
1150 | 336 | shutil.copyfile(image_from, image_to) | 333 | result = QtGui.QMessageBox.question( |
1151 | 337 | self.generateAndSaveImage(self.path, name, theme_xml) | 334 | self, |
1152 | 338 | self.loadThemes() | 335 | translate(u'ThemeManager',u'Theme Exists'), |
1153 | 336 | translate(u'ThemeManager',u'A theme with this name already exists, would you like to overwrite it?'), | ||
1154 | 337 | (QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), | ||
1155 | 338 | QtGui.QMessageBox.No) | ||
1156 | 339 | if result == QtGui.QMessageBox.Yes: | ||
1157 | 340 | # Save the theme, overwriting the existing theme if necessary. | ||
1158 | 341 | outfile = open(theme_file, u'w') | ||
1159 | 342 | outfile.write(theme_xml) | ||
1160 | 343 | outfile.close() | ||
1161 | 344 | if image_from is not None and image_from != image_to: | ||
1162 | 345 | shutil.copyfile(image_from, image_to) | ||
1163 | 346 | |||
1164 | 347 | self.generateAndSaveImage(self.path, name, theme_xml) | ||
1165 | 348 | self.loadThemes() | ||
1166 | 349 | else: | ||
1167 | 350 | # Don't close the dialog - allow the user to change the name of the theme or to cancel the theme dialog completely. | ||
1168 | 351 | return False | ||
1169 | 339 | 352 | ||
1170 | 340 | def generateAndSaveImage(self, dir, name, theme_xml): | 353 | def generateAndSaveImage(self, dir, name, theme_xml): |
1171 | 341 | log.debug(u'generateAndSaveImage %s %s %s', dir, name, theme_xml) | 354 | log.debug(u'generateAndSaveImage %s %s %s', dir, name, theme_xml) |
1172 | 342 | 355 | ||
1173 | === modified file 'openlp/core/ui/themestab.py' | |||
1174 | --- openlp/core/ui/themestab.py 2009-08-25 20:04:58 +0000 | |||
1175 | +++ openlp/core/ui/themestab.py 2009-08-29 07:17:56 +0000 | |||
1176 | @@ -124,6 +124,9 @@ | |||
1177 | 124 | self.config.set_config(u'theme global theme',self.global_theme) | 124 | self.config.set_config(u'theme global theme',self.global_theme) |
1178 | 125 | Receiver().send_message(u'update_global_theme', self.global_theme ) | 125 | Receiver().send_message(u'update_global_theme', self.global_theme ) |
1179 | 126 | 126 | ||
1180 | 127 | def postSetUp(self): | ||
1181 | 128 | Receiver().send_message(u'update_global_theme', self.global_theme ) | ||
1182 | 129 | |||
1183 | 127 | def onSongLevelButtonPressed(self): | 130 | def onSongLevelButtonPressed(self): |
1184 | 128 | self.global_style= u'Song' | 131 | self.global_style= u'Song' |
1185 | 129 | self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style) | 132 | self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style) |
1186 | 130 | 133 | ||
1187 | === modified file 'openlp/plugins/bibles/lib/mediaitem.py' | |||
1188 | --- openlp/plugins/bibles/lib/mediaitem.py 2009-08-24 04:30:04 +0000 | |||
1189 | +++ openlp/plugins/bibles/lib/mediaitem.py 2009-09-01 05:17:32 +0000 | |||
1190 | @@ -341,8 +341,10 @@ | |||
1191 | 341 | def generateSlideData(self, service_item): | 341 | def generateSlideData(self, service_item): |
1192 | 342 | log.debug(u'generating slide data') | 342 | log.debug(u'generating slide data') |
1193 | 343 | items = self.ListView.selectedIndexes() | 343 | items = self.ListView.selectedIndexes() |
1194 | 344 | if len(items) ==0: | ||
1195 | 345 | return False | ||
1196 | 344 | old_chapter = u'' | 346 | old_chapter = u'' |
1198 | 345 | raw_slides=[] | 347 | raw_slides = [] |
1199 | 346 | raw_footer = [] | 348 | raw_footer = [] |
1200 | 347 | bible_text = u'' | 349 | bible_text = u'' |
1201 | 348 | for item in items: | 350 | for item in items: |
1202 | @@ -389,6 +391,7 @@ | |||
1203 | 389 | for slide in raw_slides: | 391 | for slide in raw_slides: |
1204 | 390 | service_item.add_from_text(slide[:30], slide) | 392 | service_item.add_from_text(slide[:30], slide) |
1205 | 391 | service_item.raw_footer = raw_footer | 393 | service_item.raw_footer = raw_footer |
1206 | 394 | return True | ||
1207 | 392 | 395 | ||
1208 | 393 | def formatVerse(self, old_chapter, chapter, verse, opening, closing): | 396 | def formatVerse(self, old_chapter, chapter, verse, opening, closing): |
1209 | 394 | loc = opening | 397 | loc = opening |
1210 | @@ -432,27 +435,30 @@ | |||
1211 | 432 | combo.addItem(unicode(i)) | 435 | combo.addItem(unicode(i)) |
1212 | 433 | 436 | ||
1213 | 434 | def displayResults(self, bible): | 437 | def displayResults(self, bible): |
1215 | 435 | for verse in self.search_results: | 438 | for count, verse in enumerate(self.search_results): |
1216 | 436 | bible_text = u' %s %d:%d (%s)' % (verse.book.name, | 439 | bible_text = u' %s %d:%d (%s)' % (verse.book.name, |
1217 | 437 | verse.chapter, verse.verse, bible) | 440 | verse.chapter, verse.verse, bible) |
1218 | 438 | bible_verse = QtGui.QListWidgetItem(bible_text) | 441 | bible_verse = QtGui.QListWidgetItem(bible_text) |
1219 | 439 | bible_verse.setData(QtCore.Qt.UserRole, | 442 | bible_verse.setData(QtCore.Qt.UserRole, |
1220 | 440 | QtCore.QVariant(bible_text)) | 443 | QtCore.QVariant(bible_text)) |
1221 | 441 | self.ListView.addItem(bible_verse) | 444 | self.ListView.addItem(bible_verse) |
1222 | 445 | cr = self.ListView.setCurrentRow(count) | ||
1223 | 446 | if cr is not None: | ||
1224 | 447 | cr.setSelected(True) | ||
1225 | 442 | 448 | ||
1226 | 443 | def searchByReference(self, bible, search): | 449 | def searchByReference(self, bible, search): |
1227 | 444 | log.debug(u'searchByReference %s ,%s', bible, search) | 450 | log.debug(u'searchByReference %s ,%s', bible, search) |
1233 | 445 | book = '' | 451 | book = u'' |
1234 | 446 | start_chapter = '' | 452 | start_chapter = u'' |
1235 | 447 | end_chapter = '' | 453 | end_chapter = u'' |
1236 | 448 | start_verse = '' | 454 | start_verse = u'' |
1237 | 449 | end_verse = '' | 455 | end_verse = u'' |
1238 | 450 | search = search.replace(u' ', u' ').strip() | 456 | search = search.replace(u' ', u' ').strip() |
1239 | 451 | original = search | 457 | original = search |
1240 | 452 | message = None | 458 | message = None |
1241 | 453 | # Remove book beware 0 index arrays | 459 | # Remove book beware 0 index arrays |
1242 | 454 | for i in range (len(search)-1, 0, - 1): | 460 | for i in range (len(search)-1, 0, - 1): |
1244 | 455 | if search[i] == ' ': | 461 | if search[i] == u' ': |
1245 | 456 | book = search[:i] | 462 | book = search[:i] |
1246 | 457 | # remove book from string | 463 | # remove book from string |
1247 | 458 | search = search[i:] | 464 | search = search[i:] |
1248 | @@ -466,7 +472,7 @@ | |||
1249 | 466 | # number : found | 472 | # number : found |
1250 | 467 | i = search.rfind(u' ') | 473 | i = search.rfind(u' ') |
1251 | 468 | if i == -1: | 474 | if i == -1: |
1253 | 469 | chapter = '' | 475 | chapter = u'' |
1254 | 470 | else: | 476 | else: |
1255 | 471 | chapter = search[i:len(search)] | 477 | chapter = search[i:len(search)] |
1256 | 472 | hyphen = chapter.find(u'-') | 478 | hyphen = chapter.find(u'-') |
1257 | @@ -493,29 +499,25 @@ | |||
1258 | 493 | end_verse = start_verse | 499 | end_verse = start_verse |
1259 | 494 | else: | 500 | else: |
1260 | 495 | sp1 = sp[1].split(u':') | 501 | sp1 = sp[1].split(u':') |
1261 | 496 | #print "2nd details", sp1, len(sp1) | ||
1262 | 497 | if len(sp1) == 1: | 502 | if len(sp1) == 1: |
1263 | 498 | end_chapter = start_chapter | 503 | end_chapter = start_chapter |
1264 | 499 | end_verse = sp1[0] | 504 | end_verse = sp1[0] |
1265 | 500 | else: | 505 | else: |
1266 | 501 | end_chapter = sp1[0] | 506 | end_chapter = sp1[0] |
1267 | 502 | end_verse = sp1[1] | 507 | end_verse = sp1[1] |
1271 | 503 | #print 'search = ' + unicode(original) | 508 | if end_chapter == u'': |
1269 | 504 | #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse) | ||
1270 | 505 | if end_chapter == '': | ||
1272 | 506 | end_chapter = start_chapter.rstrip() | 509 | end_chapter = start_chapter.rstrip() |
1275 | 507 | if start_verse == '': | 510 | if start_verse == u'': |
1276 | 508 | if end_verse == '': | 511 | if end_verse == u'': |
1277 | 509 | start_verse = 1 | 512 | start_verse = 1 |
1278 | 510 | else: | 513 | else: |
1279 | 511 | start_verse = end_verse | 514 | start_verse = end_verse |
1281 | 512 | if end_verse == '': | 515 | if end_verse == u'': |
1282 | 513 | end_verse = 99 | 516 | end_verse = 99 |
1284 | 514 | if start_chapter == '': | 517 | if start_chapter == u'': |
1285 | 515 | message = u'No chapter found for search criteria' | 518 | message = u'No chapter found for search criteria' |
1289 | 516 | #print 'message = ' + unicode(message) | 519 | log.debug(u'results = %s @ %s : %s @ %s : %s'% \ |
1290 | 517 | #print 'search = ' + unicode(original) | 520 | (unicode(book), unicode(start_chapter), unicode(end_chapter), unicode(start_verse), unicode(end_verse))) |
1288 | 518 | #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse) | ||
1291 | 519 | if message == None: | 521 | if message == None: |
1292 | 520 | self.search_results = None | 522 | self.search_results = None |
1293 | 521 | self.search_results = self.parent.biblemanager.get_verse_text(bible, book, | 523 | self.search_results = self.parent.biblemanager.get_verse_text(bible, book, |
1294 | 522 | 524 | ||
1295 | === modified file 'openlp/plugins/custom/lib/mediaitem.py' | |||
1296 | --- openlp/plugins/custom/lib/mediaitem.py 2009-08-15 11:02:24 +0000 | |||
1297 | +++ openlp/plugins/custom/lib/mediaitem.py 2009-09-01 05:17:32 +0000 | |||
1298 | @@ -68,17 +68,17 @@ | |||
1299 | 68 | self.addToolbarButton( | 68 | self.addToolbarButton( |
1300 | 69 | translate(u'CustomMediaItem',u'Preview Custom Item'), | 69 | translate(u'CustomMediaItem',u'Preview Custom Item'), |
1301 | 70 | translate(u'CustomMediaItem',u'Preview the selected Custom Item'), | 70 | translate(u'CustomMediaItem',u'Preview the selected Custom Item'), |
1303 | 71 | u':/system/system_preview.png', self.onCustomPreviewClick, u'CustomPreviewItem') | 71 | u':/system/system_preview.png', self.onPreviewClick, u'CustomPreviewItem') |
1304 | 72 | ## Live Custom Button ## | 72 | ## Live Custom Button ## |
1305 | 73 | self.addToolbarButton( | 73 | self.addToolbarButton( |
1306 | 74 | translate(u'CustomMediaItem',u'Go Live'), | 74 | translate(u'CustomMediaItem',u'Go Live'), |
1307 | 75 | translate(u'CustomMediaItem', u'Send the selected Custom live'), | 75 | translate(u'CustomMediaItem', u'Send the selected Custom live'), |
1309 | 76 | u':/system/system_live.png', self.onCustomLiveClick, u'CustomLiveItem') | 76 | u':/system/system_live.png', self.onLiveClick, u'CustomLiveItem') |
1310 | 77 | ## Add Custom Button ## | 77 | ## Add Custom Button ## |
1311 | 78 | self.addToolbarButton( | 78 | self.addToolbarButton( |
1312 | 79 | translate(u'CustomMediaItem',u'Add Custom To Service'), | 79 | translate(u'CustomMediaItem',u'Add Custom To Service'), |
1313 | 80 | translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'), | 80 | translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'), |
1315 | 81 | u':/system/system_add.png', self.onCustomAddClick, u'CustomAddItem') | 81 | u':/system/system_add.png', self.onAddClick, u'CustomAddItem') |
1316 | 82 | # Add the CustomListView widget | 82 | # Add the CustomListView widget |
1317 | 83 | self.CustomWidget = QtGui.QWidget(self) | 83 | self.CustomWidget = QtGui.QWidget(self) |
1318 | 84 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) | 84 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) |
1319 | @@ -95,7 +95,7 @@ | |||
1320 | 95 | self.PageLayout.addWidget(self.ListView) | 95 | self.PageLayout.addWidget(self.ListView) |
1321 | 96 | # Signals | 96 | # Signals |
1322 | 97 | QtCore.QObject.connect(self.ListView, | 97 | QtCore.QObject.connect(self.ListView, |
1324 | 98 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick) | 98 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) |
1325 | 99 | #define and add the context menu | 99 | #define and add the context menu |
1326 | 100 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) | 100 | self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
1327 | 101 | self.ListView.addAction(contextMenuAction(self.ListView, | 101 | self.ListView.addAction(contextMenuAction(self.ListView, |
1328 | @@ -104,13 +104,13 @@ | |||
1329 | 104 | self.ListView.addAction(contextMenuSeparator(self.ListView)) | 104 | self.ListView.addAction(contextMenuSeparator(self.ListView)) |
1330 | 105 | self.ListView.addAction(contextMenuAction( | 105 | self.ListView.addAction(contextMenuAction( |
1331 | 106 | self.ListView, ':/system/system_preview.png', | 106 | self.ListView, ':/system/system_preview.png', |
1333 | 107 | translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick)) | 107 | translate(u'CustomMediaItem',u'&Preview Custom'), self.onPreviewClick)) |
1334 | 108 | self.ListView.addAction(contextMenuAction( | 108 | self.ListView.addAction(contextMenuAction( |
1335 | 109 | self.ListView, ':/system/system_live.png', | 109 | self.ListView, ':/system/system_live.png', |
1337 | 110 | translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) | 110 | translate(u'CustomMediaItem',u'&Show Live'), self.onLiveClick)) |
1338 | 111 | self.ListView.addAction(contextMenuAction( | 111 | self.ListView.addAction(contextMenuAction( |
1339 | 112 | self.ListView, ':/system/system_add.png', | 112 | self.ListView, ':/system/system_add.png', |
1341 | 113 | translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) | 113 | translate(u'CustomMediaItem',u'&Add to Service'), self.onAddClick)) |
1342 | 114 | 114 | ||
1343 | 115 | def initialise(self): | 115 | def initialise(self): |
1344 | 116 | self.loadCustomListView(self.parent.custommanager.get_all_slides()) | 116 | self.loadCustomListView(self.parent.custommanager.get_all_slides()) |
1345 | @@ -143,33 +143,14 @@ | |||
1346 | 143 | row = self.ListView.row(item) | 143 | row = self.ListView.row(item) |
1347 | 144 | self.ListView.takeItem(row) | 144 | self.ListView.takeItem(row) |
1348 | 145 | 145 | ||
1349 | 146 | def onCustomPreviewClick(self): | ||
1350 | 147 | log.debug(u'Custom Preview Requested') | ||
1351 | 148 | service_item = ServiceItem(self.parent) | ||
1352 | 149 | service_item.addIcon(u':/media/media_song.png') | ||
1353 | 150 | self.generateSlideData(service_item) | ||
1354 | 151 | self.parent.preview_controller.addServiceItem(service_item) | ||
1355 | 152 | |||
1356 | 153 | def onCustomLiveClick(self): | ||
1357 | 154 | log.debug(u'Custom Live Requested') | ||
1358 | 155 | service_item = ServiceItem(self.parent) | ||
1359 | 156 | service_item.addIcon(u':/media/media_song.png') | ||
1360 | 157 | self.generateSlideData(service_item) | ||
1361 | 158 | self.parent.live_controller.addServiceItem(service_item) | ||
1362 | 159 | |||
1363 | 160 | def onCustomAddClick(self): | ||
1364 | 161 | log.debug(u'Custom Add Requested') | ||
1365 | 162 | service_item = ServiceItem(self.parent) | ||
1366 | 163 | service_item.addIcon(u':/media/media_song.png') | ||
1367 | 164 | self.generateSlideData(service_item) | ||
1368 | 165 | self.parent.service_manager.addServiceItem(service_item) | ||
1369 | 166 | |||
1370 | 167 | def generateSlideData(self, service_item): | 146 | def generateSlideData(self, service_item): |
1371 | 168 | raw_slides =[] | 147 | raw_slides =[] |
1372 | 169 | raw_footer = [] | 148 | raw_footer = [] |
1373 | 170 | slide = None | 149 | slide = None |
1374 | 171 | theme = None | 150 | theme = None |
1375 | 172 | item = self.ListView.currentItem() | 151 | item = self.ListView.currentItem() |
1376 | 152 | if item is None: | ||
1377 | 153 | return False | ||
1378 | 173 | item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] | 154 | item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] |
1379 | 174 | customSlide = self.parent.custommanager.get_custom(item_id) | 155 | customSlide = self.parent.custommanager.get_custom(item_id) |
1380 | 175 | title = customSlide.title | 156 | title = customSlide.title |
1381 | @@ -187,3 +168,4 @@ | |||
1382 | 187 | for slide in raw_slides: | 168 | for slide in raw_slides: |
1383 | 188 | service_item.add_from_text(slide[:30], slide) | 169 | service_item.add_from_text(slide[:30], slide) |
1384 | 189 | service_item.raw_footer = raw_footer | 170 | service_item.raw_footer = raw_footer |
1385 | 171 | return True | ||
1386 | 190 | 172 | ||
1387 | === modified file 'openlp/plugins/images/lib/__init__.py' | |||
1388 | --- openlp/plugins/images/lib/__init__.py 2009-08-24 05:13:27 +0000 | |||
1389 | +++ openlp/plugins/images/lib/__init__.py 2009-08-27 05:17:20 +0000 | |||
1390 | @@ -18,5 +18,4 @@ | |||
1391 | 18 | Place, Suite 330, Boston, MA 02111-1307 USA | 18 | Place, Suite 330, Boston, MA 02111-1307 USA |
1392 | 19 | """ | 19 | """ |
1393 | 20 | from mediaitem import ImageMediaItem | 20 | from mediaitem import ImageMediaItem |
1394 | 21 | from imagetoolbar import ImageToolbar | ||
1395 | 22 | from imagetab import ImageTab | 21 | from imagetab import ImageTab |
1396 | 23 | 22 | ||
1397 | === modified file 'openlp/plugins/images/lib/imagetab.py' | |||
1398 | --- openlp/plugins/images/lib/imagetab.py 2009-07-06 16:34:13 +0000 | |||
1399 | +++ openlp/plugins/images/lib/imagetab.py 2009-08-29 07:17:56 +0000 | |||
1400 | @@ -20,7 +20,7 @@ | |||
1401 | 20 | 20 | ||
1402 | 21 | from PyQt4 import QtCore, QtGui | 21 | from PyQt4 import QtCore, QtGui |
1403 | 22 | 22 | ||
1405 | 23 | from openlp.core.lib import SettingsTab, str_to_bool, translate | 23 | from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver |
1406 | 24 | 24 | ||
1407 | 25 | class ImageTab(SettingsTab): | 25 | class ImageTab(SettingsTab): |
1408 | 26 | """ | 26 | """ |
1409 | @@ -67,3 +67,7 @@ | |||
1410 | 67 | 67 | ||
1411 | 68 | def save(self): | 68 | def save(self): |
1412 | 69 | self.config.set_config(u'loop delay', self.loop_delay) | 69 | self.config.set_config(u'loop delay', self.loop_delay) |
1413 | 70 | Receiver().send_message(u'update_spin_delay', self.loop_delay ) | ||
1414 | 71 | |||
1415 | 72 | def postSetUp(self): | ||
1416 | 73 | Receiver().send_message(u'update_spin_delay', self.loop_delay ) | ||
1417 | 70 | 74 | ||
1418 | === removed file 'openlp/plugins/images/lib/imagetoolbar.py' | |||
1419 | --- openlp/plugins/images/lib/imagetoolbar.py 2009-08-24 05:13:27 +0000 | |||
1420 | +++ openlp/plugins/images/lib/imagetoolbar.py 1970-01-01 00:00:00 +0000 | |||
1421 | @@ -1,63 +0,0 @@ | |||
1422 | 1 | # -*- coding: utf-8 -*- | ||
1423 | 2 | # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 | ||
1424 | 3 | """ | ||
1425 | 4 | OpenLP - Open Source Lyrics Projection | ||
1426 | 5 | Copyright (c) 2008 Raoul Snyman | ||
1427 | 6 | Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, | ||
1428 | 7 | |||
1429 | 8 | This program is free software; you can redistribute it and/or modify it under | ||
1430 | 9 | the terms of the GNU General Public License as published by the Free Software | ||
1431 | 10 | Foundation; version 2 of the License. | ||
1432 | 11 | |||
1433 | 12 | This program is distributed in the hope that it will be useful, but WITHOUT ANY | ||
1434 | 13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A | ||
1435 | 14 | PARTICULAR PURPOSE. See the GNU General Public License for more details. | ||
1436 | 15 | |||
1437 | 16 | You should have received a copy of the GNU General Public License along with | ||
1438 | 17 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
1439 | 18 | Place, Suite 330, Boston, MA 02111-1307 USA | ||
1440 | 19 | """ | ||
1441 | 20 | import logging | ||
1442 | 21 | import os | ||
1443 | 22 | |||
1444 | 23 | from PyQt4 import QtCore, QtGui | ||
1445 | 24 | from openlp.core.lib import OpenLPToolbar, translate, Receiver | ||
1446 | 25 | from openlp.core.ui.slidecontroller import MasterToolbar | ||
1447 | 26 | |||
1448 | 27 | class ImageToolbar(MasterToolbar): | ||
1449 | 28 | |||
1450 | 29 | def __init__(self, parent, isLive): | ||
1451 | 30 | MasterToolbar.__init__(self, isLive) | ||
1452 | 31 | self.parent = parent | ||
1453 | 32 | self.Toolbar = None | ||
1454 | 33 | self.isLive = isLive | ||
1455 | 34 | |||
1456 | 35 | def defineZone5(self): | ||
1457 | 36 | self.Toolbar.addSeparator() | ||
1458 | 37 | self.Toolbar.addToolbarButton(u'Start Loop', | ||
1459 | 38 | u':/media/media_time.png', | ||
1460 | 39 | translate(u'SlideController', u'Start continuous loop'), | ||
1461 | 40 | self.onStartLoop) | ||
1462 | 41 | self.Toolbar.addToolbarButton(u'Stop Loop', | ||
1463 | 42 | u':/media/media_stop.png', | ||
1464 | 43 | translate(u'SlideController', u'Stop continuous loop'), | ||
1465 | 44 | self.onStopLoop) | ||
1466 | 45 | self.Toolbar.addSeparator() | ||
1467 | 46 | self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar) | ||
1468 | 47 | self.SpinWidget = QtGui.QWidgetAction(self.Toolbar) | ||
1469 | 48 | self.SpinWidget.setDefaultWidget(self.DelaySpinBox) | ||
1470 | 49 | self.Toolbar.addAction(self.SpinWidget) | ||
1471 | 50 | self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay) | ||
1472 | 51 | self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's')) | ||
1473 | 52 | |||
1474 | 53 | def onStartLoop(self): | ||
1475 | 54 | """ | ||
1476 | 55 | Trigger the slide controller to start to loop passing the delay | ||
1477 | 56 | """ | ||
1478 | 57 | Receiver().send_message(u'%sslide_start_loop' % self.prefix, self.DelaySpinBox.value()) | ||
1479 | 58 | |||
1480 | 59 | def onStopLoop(self): | ||
1481 | 60 | """ | ||
1482 | 61 | Trigger the slide controller to stop the loop | ||
1483 | 62 | """ | ||
1484 | 63 | Receiver().send_message(u'%sslide_stop_loop' % self.prefix) | ||
1485 | 64 | 0 | ||
1486 | === modified file 'openlp/plugins/images/lib/mediaitem.py' | |||
1487 | --- openlp/plugins/images/lib/mediaitem.py 2009-08-25 05:18:09 +0000 | |||
1488 | +++ openlp/plugins/images/lib/mediaitem.py 2009-09-01 05:17:32 +0000 | |||
1489 | @@ -22,7 +22,6 @@ | |||
1490 | 22 | 22 | ||
1491 | 23 | from PyQt4 import QtCore, QtGui | 23 | from PyQt4 import QtCore, QtGui |
1492 | 24 | from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon | 24 | from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon |
1493 | 25 | from openlp.plugins.images.lib.imagetoolbar import ImageToolbar | ||
1494 | 26 | 25 | ||
1495 | 27 | # We have to explicitly create separate classes for each plugin | 26 | # We have to explicitly create separate classes for each plugin |
1496 | 28 | # in order for DnD to the Service manager to work correctly. | 27 | # in order for DnD to the Service manager to work correctly. |
1497 | @@ -56,9 +55,6 @@ | |||
1498 | 56 | self.ServiceItemIconName = u':/media/media_image.png' | 55 | self.ServiceItemIconName = u':/media/media_image.png' |
1499 | 57 | self.servicePath = None | 56 | self.servicePath = None |
1500 | 58 | MediaManagerItem.__init__(self, parent, icon, title) | 57 | MediaManagerItem.__init__(self, parent, icon, title) |
1501 | 59 | #create and install our own slide controller toolbar | ||
1502 | 60 | imageToolbar = ImageToolbar(self, True) | ||
1503 | 61 | parent.live_controller.registerToolbar(self.ConfigSection, imageToolbar) | ||
1504 | 62 | 58 | ||
1505 | 63 | def initialise(self): | 59 | def initialise(self): |
1506 | 64 | self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) | 60 | self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) |
1507 | @@ -99,6 +95,8 @@ | |||
1508 | 99 | 95 | ||
1509 | 100 | def generateSlideData(self, service_item): | 96 | def generateSlideData(self, service_item): |
1510 | 101 | items = self.ListView.selectedIndexes() | 97 | items = self.ListView.selectedIndexes() |
1511 | 98 | if len(items) == 0: | ||
1512 | 99 | return False | ||
1513 | 102 | service_item.title = u'Image(s)' | 100 | service_item.title = u'Image(s)' |
1514 | 103 | for item in items: | 101 | for item in items: |
1515 | 104 | bitem = self.ListView.item(item.row()) | 102 | bitem = self.ListView.item(item.row()) |
1516 | @@ -106,3 +104,4 @@ | |||
1517 | 106 | frame = QtGui.QImage(unicode(filename)) | 104 | frame = QtGui.QImage(unicode(filename)) |
1518 | 107 | (path, name) = os.path.split(filename) | 105 | (path, name) = os.path.split(filename) |
1519 | 108 | service_item.add_from_image(path, name, frame) | 106 | service_item.add_from_image(path, name, frame) |
1520 | 107 | return True | ||
1521 | 109 | 108 | ||
1522 | === modified file 'openlp/plugins/media/lib/mediaitem.py' | |||
1523 | --- openlp/plugins/media/lib/mediaitem.py 2009-08-15 11:02:24 +0000 | |||
1524 | +++ openlp/plugins/media/lib/mediaitem.py 2009-08-31 21:53:35 +0000 | |||
1525 | @@ -100,12 +100,15 @@ | |||
1526 | 100 | 100 | ||
1527 | 101 | def generateSlideData(self, service_item): | 101 | def generateSlideData(self, service_item): |
1528 | 102 | indexes = self.ListView.selectedIndexes() | 102 | indexes = self.ListView.selectedIndexes() |
1529 | 103 | if len(items) > 1: | ||
1530 | 104 | return False | ||
1531 | 103 | service_item.title = u'Media' | 105 | service_item.title = u'Media' |
1532 | 104 | for index in indexes: | 106 | for index in indexes: |
1533 | 105 | filename = self.ListData.getFilename(index) | 107 | filename = self.ListData.getFilename(index) |
1534 | 106 | frame = QtGui.QImage(unicode(filename)) | 108 | frame = QtGui.QImage(unicode(filename)) |
1535 | 107 | (path, name) = os.path.split(filename) | 109 | (path, name) = os.path.split(filename) |
1536 | 108 | service_item.add_from_image(path, name, frame) | 110 | service_item.add_from_image(path, name, frame) |
1537 | 111 | return True | ||
1538 | 109 | 112 | ||
1539 | 110 | def onPreviewClick(self): | 113 | def onPreviewClick(self): |
1540 | 111 | log.debug(u'Media Preview Button pressed') | 114 | log.debug(u'Media Preview Button pressed') |
1541 | 112 | 115 | ||
1542 | === modified file 'openlp/plugins/presentations/lib/mediaitem.py' | |||
1543 | --- openlp/plugins/presentations/lib/mediaitem.py 2009-08-11 19:21:52 +0000 | |||
1544 | +++ openlp/plugins/presentations/lib/mediaitem.py 2009-08-31 21:53:35 +0000 | |||
1545 | @@ -43,7 +43,7 @@ | |||
1546 | 43 | self.controllers = controllers | 43 | self.controllers = controllers |
1547 | 44 | self.TranslationContext = u'PresentationPlugin' | 44 | self.TranslationContext = u'PresentationPlugin' |
1548 | 45 | self.PluginTextShort = u'Presentation' | 45 | self.PluginTextShort = u'Presentation' |
1550 | 46 | self.ConfigSection = u'presentation' | 46 | self.ConfigSection = u'presentations' |
1551 | 47 | self.hasFileIcon = True | 47 | self.hasFileIcon = True |
1552 | 48 | self.hasNewIcon = False | 48 | self.hasNewIcon = False |
1553 | 49 | self.hasEditIcon = False | 49 | self.hasEditIcon = False |
1554 | @@ -81,9 +81,6 @@ | |||
1555 | 81 | for item in self.controllers: | 81 | for item in self.controllers: |
1556 | 82 | #load the drop down selection | 82 | #load the drop down selection |
1557 | 83 | self.DisplayTypeComboBox.addItem(item) | 83 | self.DisplayTypeComboBox.addItem(item) |
1558 | 84 | #load the preview toolbars | ||
1559 | 85 | #self.parent.preview_controller.registerToolbar(item, self.controllers[item]) | ||
1560 | 86 | #self.parent.live_controller.registerToolbar(item, self.controllers[item]) | ||
1561 | 87 | 84 | ||
1562 | 88 | def loadList(self, list): | 85 | def loadList(self, list): |
1563 | 89 | for file in list: | 86 | for file in list: |
1564 | @@ -102,11 +99,13 @@ | |||
1565 | 102 | 99 | ||
1566 | 103 | def generateSlideData(self, service_item): | 100 | def generateSlideData(self, service_item): |
1567 | 104 | items = self.ListView.selectedIndexes() | 101 | items = self.ListView.selectedIndexes() |
1569 | 105 | service_item.title = self.DisplayTypeComboBox.currentText() | 102 | if len(items) > 1: |
1570 | 103 | return False | ||
1571 | 104 | service_item.title = unicode(self.DisplayTypeComboBox.currentText()) | ||
1572 | 106 | service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) | 105 | service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) |
1573 | 107 | for item in items: | 106 | for item in items: |
1574 | 108 | bitem = self.ListView.item(item.row()) | 107 | bitem = self.ListView.item(item.row()) |
1575 | 109 | filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) | 108 | filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) |
1576 | 110 | frame = QtGui.QImage(unicode(filename)) | ||
1577 | 111 | (path, name) = os.path.split(filename) | 109 | (path, name) = os.path.split(filename) |
1579 | 112 | service_item.add_using_toolbar(path, name) | 110 | service_item.add_from_command(path, name) |
1580 | 111 | return True | ||
1581 | 113 | 112 | ||
1582 | === modified file 'openlp/plugins/songs/lib/mediaitem.py' | |||
1583 | --- openlp/plugins/songs/lib/mediaitem.py 2009-08-26 05:00:19 +0000 | |||
1584 | +++ openlp/plugins/songs/lib/mediaitem.py 2009-08-31 21:53:35 +0000 | |||
1585 | @@ -68,15 +68,15 @@ | |||
1586 | 68 | ## Preview Song Button ## | 68 | ## Preview Song Button ## |
1587 | 69 | self.addToolbarButton(translate(u'SongMediaItem', u'Preview Song'), | 69 | self.addToolbarButton(translate(u'SongMediaItem', u'Preview Song'), |
1588 | 70 | translate(u'SongMediaItem', u'Preview the selected song'), | 70 | translate(u'SongMediaItem', u'Preview the selected song'), |
1590 | 71 | ':/system/system_preview.png', self.onSongPreviewClick, 'SongPreviewItem') | 71 | ':/system/system_preview.png', self.onPreviewClick, 'SongPreviewItem') |
1591 | 72 | ## Live Song Button ## | 72 | ## Live Song Button ## |
1592 | 73 | self.addToolbarButton(translate(u'SongMediaItem', u'Go Live'), | 73 | self.addToolbarButton(translate(u'SongMediaItem', u'Go Live'), |
1593 | 74 | translate(u'SongMediaItem', u'Send the selected song live'), | 74 | translate(u'SongMediaItem', u'Send the selected song live'), |
1595 | 75 | ':/system/system_live.png', self.onSongLiveClick, 'SongLiveItem') | 75 | ':/system/system_live.png', self.onLiveClick, 'SongLiveItem') |
1596 | 76 | ## Add Song Button ## | 76 | ## Add Song Button ## |
1597 | 77 | self.addToolbarButton(translate(u'SongMediaItem', u'Add Song To Service'), | 77 | self.addToolbarButton(translate(u'SongMediaItem', u'Add Song To Service'), |
1598 | 78 | translate(u'SongMediaItem', u'Add the selected song(s) to the service'), | 78 | translate(u'SongMediaItem', u'Add the selected song(s) to the service'), |
1600 | 79 | ':/system/system_add.png', self.onSongAddClick, 'SongAddItem') | 79 | ':/system/system_add.png', self.onAddClick, 'SongAddItem') |
1601 | 80 | self.addToolbarSeparator() | 80 | self.addToolbarSeparator() |
1602 | 81 | ## Song Maintenance Button ## | 81 | ## Song Maintenance Button ## |
1603 | 82 | self.addToolbarButton(translate(u'SongMediaItem', u'Song Maintenance'), | 82 | self.addToolbarButton(translate(u'SongMediaItem', u'Song Maintenance'), |
1604 | @@ -127,7 +127,7 @@ | |||
1605 | 127 | QtCore.QObject.connect(self.SearchTextEdit, | 127 | QtCore.QObject.connect(self.SearchTextEdit, |
1606 | 128 | QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) | 128 | QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) |
1607 | 129 | QtCore.QObject.connect(self.ListView, | 129 | QtCore.QObject.connect(self.ListView, |
1609 | 130 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick) | 130 | QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) |
1610 | 131 | QtCore.QObject.connect(Receiver.get_receiver(), | 131 | QtCore.QObject.connect(Receiver.get_receiver(), |
1611 | 132 | QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick) | 132 | QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick) |
1612 | 133 | 133 | ||
1613 | @@ -139,13 +139,13 @@ | |||
1614 | 139 | self.ListView.addAction(contextMenuSeparator(self.ListView)) | 139 | self.ListView.addAction(contextMenuSeparator(self.ListView)) |
1615 | 140 | self.ListView.addAction(contextMenuAction(self.ListView, | 140 | self.ListView.addAction(contextMenuAction(self.ListView, |
1616 | 141 | ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), | 141 | ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), |
1618 | 142 | self.onSongPreviewClick)) | 142 | self.onPreviewClick)) |
1619 | 143 | self.ListView.addAction(contextMenuAction(self.ListView, | 143 | self.ListView.addAction(contextMenuAction(self.ListView, |
1620 | 144 | ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), | 144 | ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), |
1622 | 145 | self.onSongLiveClick)) | 145 | self.onLiveClick)) |
1623 | 146 | self.ListView.addAction(contextMenuAction(self.ListView, | 146 | self.ListView.addAction(contextMenuAction(self.ListView, |
1624 | 147 | ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), | 147 | ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), |
1626 | 148 | self.onSongAddClick)) | 148 | self.onAddClick)) |
1627 | 149 | 149 | ||
1628 | 150 | def retranslateUi(self): | 150 | def retranslateUi(self): |
1629 | 151 | self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Search Type:')) | 151 | self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Search Type:')) |
1630 | @@ -246,12 +246,12 @@ | |||
1631 | 246 | self.parent.songmanager.delete_song(item_id) | 246 | self.parent.songmanager.delete_song(item_id) |
1632 | 247 | row = self.ListView.row(item) | 247 | row = self.ListView.row(item) |
1633 | 248 | self.ListView.takeItem(row) | 248 | self.ListView.takeItem(row) |
1640 | 249 | 249 | # | |
1641 | 250 | def onSongPreviewClick(self): | 250 | # def onSongPreviewClick(self): |
1642 | 251 | service_item = ServiceItem(self.parent) | 251 | # service_item = ServiceItem(self.parent) |
1643 | 252 | service_item.addIcon(u':/media/media_song.png') | 252 | # service_item.addIcon(u':/media/media_song.png') |
1644 | 253 | self.generateSlideData(service_item) | 253 | # self.generateSlideData(service_item) |
1645 | 254 | self.parent.preview_controller.addServiceItem(service_item) | 254 | # self.parent.preview_controller.addServiceItem(service_item) |
1646 | 255 | 255 | ||
1647 | 256 | def generateSlideData(self, service_item): | 256 | def generateSlideData(self, service_item): |
1648 | 257 | raw_slides =[] | 257 | raw_slides =[] |
1649 | @@ -259,6 +259,8 @@ | |||
1650 | 259 | author_list = u'' | 259 | author_list = u'' |
1651 | 260 | ccl = u'' | 260 | ccl = u'' |
1652 | 261 | item = self.ListView.currentItem() | 261 | item = self.ListView.currentItem() |
1653 | 262 | if item is None: | ||
1654 | 263 | return False | ||
1655 | 262 | item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] | 264 | item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] |
1656 | 263 | song = self.parent.songmanager.get_song(item_id) | 265 | song = self.parent.songmanager.get_song(item_id) |
1657 | 264 | service_item.theme = song.theme_name | 266 | service_item.theme = song.theme_name |
1658 | @@ -286,15 +288,16 @@ | |||
1659 | 286 | raw_footer.append(song.copyright ) | 288 | raw_footer.append(song.copyright ) |
1660 | 287 | raw_footer.append(unicode(translate(u'SongMediaItem', u'CCL Licence: ') + ccl )) | 289 | raw_footer.append(unicode(translate(u'SongMediaItem', u'CCL Licence: ') + ccl )) |
1661 | 288 | service_item.raw_footer = raw_footer | 290 | service_item.raw_footer = raw_footer |
1674 | 289 | 291 | return True | |
1675 | 290 | def onSongLiveClick(self): | 292 | |
1676 | 291 | service_item = ServiceItem(self.parent) | 293 | # def onSongLiveClick(self): |
1677 | 292 | service_item.addIcon(u':/media/media_song.png') | 294 | # service_item = ServiceItem(self.parent) |
1678 | 293 | self.generateSlideData(service_item) | 295 | # service_item.addIcon(u':/media/media_song.png') |
1679 | 294 | self.parent.live_controller.addServiceItem(service_item) | 296 | # self.generateSlideData(service_item) |
1680 | 295 | 297 | # self.parent.live_controller.addServiceItem(service_item) | |
1681 | 296 | def onSongAddClick(self): | 298 | # |
1682 | 297 | service_item = ServiceItem(self.parent) | 299 | # def onSongAddClick(self): |
1683 | 298 | service_item.addIcon( u':/media/media_song.png') | 300 | # service_item = ServiceItem(self.parent) |
1684 | 299 | self.generateSlideData(service_item) | 301 | # service_item.addIcon( u':/media/media_song.png') |
1685 | 300 | self.parent.service_manager.addServiceItem(service_item) | 302 | # self.generateSlideData(service_item) |
1686 | 303 | # self.parent.service_manager.addServiceItem(service_item) |
Various fixes all over the shop.
Plugins now work with nothing selected
ServiceManager saves and Loads presentations
Blank lines work in songs.
Logging is more configurable