Merge lp:~trb143/openlp/bugfixes into lp:openlp

Proposed by Tim Bentley
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
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Review via email: mp+11001@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote :

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

Revision history for this message
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
=== modified file 'openlp.pyw'
--- openlp.pyw 2009-08-24 04:30:04 +0000
+++ openlp.pyw 2009-09-01 05:17:32 +0000
@@ -20,7 +20,8 @@
20"""20"""
2121
22import sys22import sys
23import logging23import logging, logging.handlers
24from optparse import OptionParser
2425
25from PyQt4 import QtCore, QtGui26from PyQt4 import QtCore, QtGui
2627
@@ -28,9 +29,15 @@
28from openlp.core.resources import *29from openlp.core.resources import *
29from openlp.core.ui import MainWindow, SplashScreen30from openlp.core.ui import MainWindow, SplashScreen
3031
31logging.basicConfig(level=logging.DEBUG,32filename=u'openlp.log'
32 format=u'%(asctime)s:%(msecs)3d %(name)-15s %(levelname)-8s %(message)s',33log = logging.getLogger()
33 datefmt=u'%m-%d %H:%M:%S', filename=u'openlp.log', filemode=u'w')34log.setLevel(logging.INFO)
35
36logfile = logging.handlers.RotatingFileHandler(filename ,maxBytes=200000, backupCount=5)
37logfile.setLevel(logging.DEBUG)
38logfile.setFormatter(logging.Formatter(u'%(asctime)s %(name)-15s %(levelname)-8s %(message)s'))
39
40log.addHandler(logfile)
3441
35class OpenLP(QtGui.QApplication):42class OpenLP(QtGui.QApplication):
36 """43 """
@@ -38,8 +45,7 @@
38 class in order to provide the core of the application.45 class in order to provide the core of the application.
39 """46 """
40 global log47 global log
41 log = logging.getLogger(u'OpenLP Application')48 log.info(u'OpenLP Application Loaded')
42 log.info(u'Application Loaded')
4349
44 def run(self):50 def run(self):
45 """51 """
@@ -74,10 +80,19 @@
74 self.splash.finish(self.mainWindow)80 self.splash.finish(self.mainWindow)
75 sys.exit(app.exec_())81 sys.exit(app.exec_())
7682
83def main():
84 usage = "usage: %prog [options] arg1 arg2"
85 parser = OptionParser(usage=usage)
86 parser.add_option("-d", "--debug",dest="debug",action="store_true",
87 help="Switch on Debugging ")
88 (options, args) = parser.parse_args()
89 if options.debug is not None:
90 log.setLevel(logging.DEBUG)
77if __name__ == u'__main__':91if __name__ == u'__main__':
78 """92 """
79 Instantiate and run the application.93 Instantiate and run the application.
80 """94 """
95 main()
81 app = OpenLP(sys.argv)96 app = OpenLP(sys.argv)
82 #import cProfile97 #import cProfile
83 #cProfile.run("app.run()", "profile.out")98 #cProfile.run("app.run()", "profile.out")
8499
=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py 2009-08-26 05:00:19 +0000
+++ openlp/core/lib/__init__.py 2009-08-27 05:17:20 +0000
@@ -66,6 +66,7 @@
66from xmlrootclass import XmlRootClass66from xmlrootclass import XmlRootClass
67from serviceitem import ServiceItem67from serviceitem import ServiceItem
68from eventreceiver import Receiver68from eventreceiver import Receiver
69from serviceitem import ServiceType
69from serviceitem import ServiceItem70from serviceitem import ServiceItem
70from toolbar import OpenLPToolbar71from toolbar import OpenLPToolbar
71from songxmlhandler import SongXMLBuilder72from songxmlhandler import SongXMLBuilder
7273
=== modified file 'openlp/core/lib/eventreceiver.py'
--- openlp/core/lib/eventreceiver.py 2009-08-26 05:00:19 +0000
+++ openlp/core/lib/eventreceiver.py 2009-08-29 07:17:56 +0000
@@ -29,27 +29,31 @@
2929
30 ``stop_import``30 ``stop_import``
31 Stops the Bible Import31 Stops the Bible Import
32
32 ``pre_load_bibles``33 ``pre_load_bibles``
33 Triggers the plugin to relaod the bible lists34 Triggers the plugin to relaod the bible lists
35
34 ``process_events``36 ``process_events``
35 Requests the Application to flush the events queue37 Requests the Application to flush the events queue
36 ``{preview|live}_slide_first``38
37 display the first slide on the list
38 ``{preview|live}_slide_previous``
39 display the previous slide on the list
40 ``{preview|live}_slide_next``
41 display the next slide on the list
42 ``{preview|live}_slide_last``
43 display the last slide on the list
44 ``{plugin}_add_service_item ``39 ``{plugin}_add_service_item ``
45 ask the plugin to push the selected items to the service item40 ask the plugin to push the selected items to the service item
41
46 ``update_themes ``42 ``update_themes ``
47 send out message with new themes43 send out message with new themes
44
48 ``update_global_theme ``45 ``update_global_theme ``
49 Tell the components we have a new global theme46 Tell the components we have a new global theme
47
50 ``load_song_list``48 ``load_song_list``
51 Tells the the song plugin to reload the song list49 Tells the the song plugin to reload the song list
5250
51 ``update_spin_delay``
52 Pushes out the Image loop delay
53
54 ``request_spin_delay``
55 Requests a spin delay
56
53 """57 """
54 global log58 global log
55 log = logging.getLogger(u'EventReceiver')59 log = logging.getLogger(u'EventReceiver')
5660
=== modified file 'openlp/core/lib/mediamanageritem.py'
--- openlp/core/lib/mediamanageritem.py 2009-07-08 16:40:42 +0000
+++ openlp/core/lib/mediamanageritem.py 2009-08-31 21:53:35 +0000
@@ -234,17 +234,20 @@
234 def onPreviewClick(self):234 def onPreviewClick(self):
235 log.debug(self.PluginTextShort+u' Preview Requested')235 log.debug(self.PluginTextShort+u' Preview Requested')
236 service_item = self.buildServiceItem()236 service_item = self.buildServiceItem()
237 self.parent.preview_controller.addServiceItem(service_item)237 if service_item is not None:
238 self.parent.preview_controller.addServiceItem(service_item)
238239
239 def onLiveClick(self):240 def onLiveClick(self):
240 log.debug(self.PluginTextShort + u' Live Requested')241 log.debug(self.PluginTextShort + u' Live Requested')
241 service_item = self.buildServiceItem()242 service_item = self.buildServiceItem()
242 self.parent.live_controller.addServiceItem(service_item)243 if service_item is not None:
244 self.parent.live_controller.addServiceItem(service_item)
243245
244 def onAddClick(self):246 def onAddClick(self):
245 log.debug(self.PluginTextShort+u' Add Requested')247 log.debug(self.PluginTextShort+u' Add Requested')
246 service_item = self.buildServiceItem()248 service_item = self.buildServiceItem()
247 self.parent.service_manager.addServiceItem(service_item)249 if service_item is not None:
250 self.parent.service_manager.addServiceItem(service_item)
248251
249 def buildServiceItem(self):252 def buildServiceItem(self):
250 """253 """
@@ -252,6 +255,8 @@
252 """255 """
253 service_item = ServiceItem(self.parent)256 service_item = ServiceItem(self.parent)
254 service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png')257 service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png')
255 self.generateSlideData(service_item)258 if self.generateSlideData(service_item):
256 self.ListView.clearSelection()259 self.ListView.clearSelection()
257 return service_item260 return service_item
261 else:
262 return None
258263
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py 2009-08-09 18:38:44 +0000
+++ openlp/core/lib/renderer.py 2009-08-31 06:53:55 +0000
@@ -147,7 +147,8 @@
147# print words147# print words
148 verses = []148 verses = []
149 words = words.replace(u'\r\n', u'\n')149 words = words.replace(u'\r\n', u'\n')
150 verses_text = words.split(u'\n\n')150 verses_text = words.split(u'\n')
151 #print verses_text
151 text = []152 text = []
152 for verse in verses_text:153 for verse in verses_text:
153 lines = verse.split(u'\n')154 lines = verse.split(u'\n')
@@ -173,7 +174,10 @@
173 split_lines = []174 split_lines = []
174 count = 0175 count = 0
175 for line in text:176 for line in text:
176# print "C", line , len(line)177 #print "C", line , len(line)
178 #Must be a blank line so keep it.
179 if len(line) == 0:
180 line = u' '
177 while len(line) > 0:181 while len(line) > 0:
178# print "C1", line , len(line)182# print "C1", line , len(line)
179 if len(line) > ave_line_width:183 if len(line) > ave_line_width:
@@ -391,29 +395,8 @@
391 Defaults to *False*. Whether or not this is a live screen.395 Defaults to *False*. Whether or not this is a live screen.
392 """396 """
393 x, y = tlcorner397 x, y = tlcorner
394 # We draw the text to see how big it is and then iterate to make it fit
395 # when we line wrap we do in in the "lyrics" style, so the second line is
396 # right aligned with a "hanging indent"
397 #print "----------------------------"
398 #print line
399# words = line.split(u' ')
400# thisline = u' '.join(words)
401# lastword = len(words)
402# lines = []
403 maxx = self._rect.width();398 maxx = self._rect.width();
404 maxy = self._rect.height();399 maxy = self._rect.height();
405# while (len(words) > 0):
406# w , h = self._get_extent_and_render(thisline, footer)
407# print "m", w, h, x, maxx
408# rhs = w + x
409# if rhs < maxx - self._right_margin:
410# lines.append(thisline)
411# words = words[lastword:]
412# thisline = ' '.join(words)
413# lastword = len(words)
414# else:
415# lastword -= 1
416# thisline = ' '.join(words[:lastword])
417 lines = []400 lines = []
418 lines.append(line)401 lines.append(line)
419 startx = x402 startx = x
420403
=== modified file 'openlp/core/lib/rendermanager.py'
--- openlp/core/lib/rendermanager.py 2009-07-23 20:20:49 +0000
+++ openlp/core/lib/rendermanager.py 2009-08-31 06:53:55 +0000
@@ -58,7 +58,7 @@
58 else:58 else:
59 self.current_display = screen_number59 self.current_display = screen_number
60 self.renderer = Renderer()60 self.renderer = Renderer()
61 self.calculate_default(self.screen_list[self.current_display][u'size'])61 #self.calculate_default(self.screen_list[self.current_display][u'size'])
62 self.theme = u''62 self.theme = u''
63 self.service_theme = u''63 self.service_theme = u''
64 self.global_style = u''64 self.global_style = u''
@@ -133,6 +133,7 @@
133 def build_text_rectangle(self, theme):133 def build_text_rectangle(self, theme):
134 """134 """
135 Builds a text block using the settings in ``theme``.135 Builds a text block using the settings in ``theme``.
136 One is needed per slide
136137
137 ``theme``138 ``theme``
138 The theme to build a text block for.139 The theme to build a text block for.
@@ -149,8 +150,8 @@
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)
150 else:151 else:
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),
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)
153 self.renderer.set_text_rectangle(main_rect,footer_rect)154 self.renderer.set_text_rectangle(main_rect, footer_rect)
154155
155 def generate_preview(self, themedata):156 def generate_preview(self, themedata):
156 """157 """
@@ -178,15 +179,15 @@
178179
179 def format_slide(self, words):180 def format_slide(self, words):
180 """181 """
181 Calculate how much text can fid on a slide.182 Calculate how much text can fit on a slide.
182183
183 ``words``184 ``words``
184 The words to go on the slides.185 The words to go on the slides.
185 """186 """
186 log.debug(u'format slide')187 log.debug(u'format slide')
187 self.calculate_default(self.screen_list[self.current_display][u'size'])188 #self.calculate_default(self.screen_list[self.current_display][u'size'])
188 self.build_text_rectangle(self.themedata)189 self.build_text_rectangle(self.themedata)
189 self.renderer.set_frame_dest(self.width, self.height)190 #self.renderer.set_frame_dest(self.width, self.height)
190 return self.renderer.format_slide(words, False)191 return self.renderer.format_slide(words, False)
191192
192 def generate_slide(self, main_text, footer_text):193 def generate_slide(self, main_text, footer_text):
@@ -200,7 +201,6 @@
200 The text for the slide footer.201 The text for the slide footer.
201 """202 """
202 log.debug(u'generate slide')203 log.debug(u'generate slide')
203 self.calculate_default(self.screen_list[self.current_display][u'size'])
204 self.build_text_rectangle(self.themedata)204 self.build_text_rectangle(self.themedata)
205 self.renderer.set_frame_dest(self.width, self.height)205 self.renderer.set_frame_dest(self.width, self.height)
206 return self.renderer.generate_frame_from_lines(main_text, footer_text)206 return self.renderer.generate_frame_from_lines(main_text, footer_text)
@@ -233,6 +233,7 @@
233 The QWidget instance of the screen.233 The QWidget instance of the screen.
234 """234 """
235 log.debug(u'calculate default %s', screen)235 log.debug(u'calculate default %s', screen)
236 #size fixed so reflects the preview size.
236 if self.current_display == 0:237 if self.current_display == 0:
237 self.width = 1024238 self.width = 1024
238 self.height = 768239 self.height = 768
239240
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2009-07-10 13:16:15 +0000
+++ openlp/core/lib/serviceitem.py 2009-08-31 18:27:36 +0000
@@ -25,6 +25,11 @@
2525
26from openlp.core.lib import buildIcon26from openlp.core.lib import buildIcon
2727
28class ServiceType(object):
29 Text = 1
30 Image = 2
31 Command = 3
32
28class ServiceItem(object):33class ServiceItem(object):
29 """34 """
30 The service item is a base class for the plugins to use to interact with35 The service item is a base class for the plugins to use to interact with
@@ -83,22 +88,18 @@
83 self.RenderManager.set_override_theme(self.theme)88 self.RenderManager.set_override_theme(self.theme)
84 log.debug(u'Formatting slides')89 log.debug(u'Formatting slides')
85 self.frames = []90 self.frames = []
86 if self.service_item_type == u'text':91 if self.service_item_type == ServiceType.Text:
87 for slide in self.service_frames:92 for slide in self.service_frames:
88 formated = self.RenderManager.format_slide(slide[u'raw_slide'])93 formated = self.RenderManager.format_slide(slide[u'raw_slide'])
89 for format in formated:94 for format in formated:
90 frame = self.RenderManager.generate_slide(format, self.raw_footer)95 frame = self.RenderManager.generate_slide(format, self.raw_footer)
91 self.frames.append({u'title': slide[u'title'], u'image': frame})96 self.frames.append({u'title': slide[u'title'], u'image': frame})
92 elif self.service_item_type == u'command':97 elif self.service_item_type == ServiceType.Command:
93 self.frames = self.service_frames98 self.frames = self.service_frames
94 self.service_frames = []99 elif self.service_item_type == ServiceType.Image:
95 elif self.service_item_type == u'image':
96 #print "image"
97 #print self.service_frames
98 for slide in self.service_frames:100 for slide in self.service_frames:
99 slide[u'image'] = self.RenderManager.resize_image(slide[u'image'])101 slide[u'image'] = self.RenderManager.resize_image(slide[u'image'])
100 self.frames = self.service_frames102 self.frames = self.service_frames
101 #self.service_frames = []
102 else:103 else:
103 log.error(u'Invalid value renderer :%s' % self.service_item_type)104 log.error(u'Invalid value renderer :%s' % self.service_item_type)
104105
@@ -115,7 +116,7 @@
115 ``image``116 ``image``
116 The actual image file name.117 The actual image file name.
117 """118 """
118 self.service_item_type = u'image'119 self.service_item_type = ServiceType.Image
119 self.service_item_path = path120 self.service_item_path = path
120 self.service_frames.append({u'title': frame_title, u'image': image})121 self.service_frames.append({u'title': frame_title, u'image': image})
121122
@@ -129,11 +130,11 @@
129 ``raw_slide``130 ``raw_slide``
130 The raw text of the slide.131 The raw text of the slide.
131 """132 """
132 self.service_item_type = u'text'133 self.service_item_type = ServiceType.Text
133 frame_title = frame_title.split(u'\n')[0]134 frame_title = frame_title.split(u'\n')[0]
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})
135136
136 def add_from_command(self, frame_title, command):137 def add_from_command(self, path , frame_title):
137 """138 """
138 Add a slide from a command.139 Add a slide from a command.
139140
@@ -143,8 +144,9 @@
143 ``command``144 ``command``
144 The command of/for the slide.145 The command of/for the slide.
145 """146 """
146 self.service_item_type = u'command'147 self.service_item_type = ServiceType.Command
147 self.service_frames.append({u'title': frame_title, u'command': command})148 self.service_item_path = path
149 self.service_frames.append({u'title': frame_title, u'command': None})
148150
149 def get_oos_repr(self):151 def get_oos_repr(self):
150 """152 """
@@ -160,15 +162,15 @@
160 u'type':self.service_item_type162 u'type':self.service_item_type
161 }163 }
162 oos_data = []164 oos_data = []
163 if self.service_item_type == u'text':165 if self.service_item_type == ServiceType.Text:
164 for slide in self.service_frames:166 for slide in self.service_frames:
165 oos_data.append(slide)167 oos_data.append(slide)
166 elif self.service_item_type == u'image':168 elif self.service_item_type == ServiceType.Image:
167 #print "sf", self.service_frames169 for slide in self.service_frames:
168 for slide in self.service_frames:170 oos_data.append(slide[u'title'])
169 #print "s", slide171 elif self.service_item_type == ServiceType.Command:
170 oos_data.append(slide[u'title'])172 for slide in self.service_frames:
171 #print "od", oos_data173 oos_data.append(slide[u'title'])
172 return {u'header': oos_header, u'data': oos_data}174 return {u'header': oos_header, u'data': oos_data}
173175
174 def set_from_oos(self, serviceitem, path=None):176 def set_from_oos(self, serviceitem, path=None):
@@ -182,7 +184,6 @@
182 ``path``184 ``path``
183 Defaults to *None*. Any path data, usually for images.185 Defaults to *None*. Any path data, usually for images.
184 """186 """
185 #print "sfs", serviceitem
186 header = serviceitem[u'serviceitem'][u'header']187 header = serviceitem[u'serviceitem'][u'header']
187 self.title = header[u'title']188 self.title = header[u'title']
188 self.service_item_type = header[u'type']189 self.service_item_type = header[u'type']
@@ -190,12 +191,15 @@
190 self.theme = header[u'theme']191 self.theme = header[u'theme']
191 self.addIcon(header[u'icon'])192 self.addIcon(header[u'icon'])
192 self.raw_footer = header[u'footer']193 self.raw_footer = header[u'footer']
193 if self.service_item_type == u'text':194 if self.service_item_type == ServiceType.Text:
194 for slide in serviceitem[u'serviceitem'][u'data']:195 for slide in serviceitem[u'serviceitem'][u'data']:
195 self.service_frames.append(slide)196 self.service_frames.append(slide)
196 elif self.service_item_type == u'image':197 elif self.service_item_type == ServiceType.Image:
197 for text_image in serviceitem[u'serviceitem'][u'data']:198 for text_image in serviceitem[u'serviceitem'][u'data']:
198 filename = os.path.join(path, text_image)199 filename = os.path.join(path, text_image)
199 #print "fn", filename
200 real_image = QtGui.QImage(unicode(filename))200 real_image = QtGui.QImage(unicode(filename))
201 self.add_from_image(path, text_image, real_image)201 self.add_from_image(path, text_image, real_image)
202 elif self.service_item_type == ServiceType.Command:
203 for text_image in serviceitem[u'serviceitem'][u'data']:
204 filename = os.path.join(path, text_image)
205 self.add_from_command(path, text_image)
202206
=== modified file 'openlp/core/lib/settingstab.py'
--- openlp/core/lib/settingstab.py 2009-07-10 13:16:15 +0000
+++ openlp/core/lib/settingstab.py 2009-08-29 07:17:56 +0000
@@ -93,3 +93,9 @@
93 Save settings to disk.93 Save settings to disk.
94 """94 """
95 pass95 pass
96
97 def postSetUp(self):
98 """
99 Changes which need to be made after setup of application
100 """
101 pass
96102
=== modified file 'openlp/core/lib/toolbar.py'
--- openlp/core/lib/toolbar.py 2009-07-08 06:55:08 +0000
+++ openlp/core/lib/toolbar.py 2009-08-28 17:40:07 +0000
@@ -34,8 +34,9 @@
34 QtGui.QToolBar.__init__(self, None)34 QtGui.QToolBar.__init__(self, None)
35 # useful to be able to reuse button icons...35 # useful to be able to reuse button icons...
36 self.icons = {}36 self.icons = {}
37 self.actions = {}
37 self.log = logging.getLogger(u'OpenLPToolbar')38 self.log = logging.getLogger(u'OpenLPToolbar')
38 self.log.info(u'Init done')39 self.log.debug(u'Init done')
3940
40 def addToolbarButton(self, title, icon, tooltip=None, slot=None, objectname=None):41 def addToolbarButton(self, title, icon, tooltip=None, slot=None, objectname=None):
41 """42 """
@@ -70,12 +71,28 @@
70 ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),71 ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
71 QtGui.QIcon.Normal, QtGui.QIcon.Off)72 QtGui.QIcon.Normal, QtGui.QIcon.Off)
72 if ButtonIcon is not None:73 if ButtonIcon is not None:
73 ToolbarButton = self.addAction(ButtonIcon, title)74 if slot is not None:
75 ToolbarButton = self.addAction(ButtonIcon, title, slot)
76 else:
77 ToolbarButton = self.addAction(ButtonIcon, title)
74 if tooltip is not None:78 if tooltip is not None:
75 ToolbarButton.setToolTip(tooltip)79 ToolbarButton.setToolTip(tooltip)
76 if slot is not None:
77 QtCore.QObject.connect(ToolbarButton, QtCore.SIGNAL(u'triggered()'), slot)
78 self.icons[title] = ButtonIcon80 self.icons[title] = ButtonIcon
81 self.actions[title] = ToolbarButton
82
83 def addToolbarSeparator(self, handle):
84 """
85 Add a Separator bar to the toolbar and store it's Handle
86 """
87 action = self.addSeparator()
88 self.actions[handle] = action
89
90 def addToolbarWidget(self, handle, widget):
91 """
92 Add a Widget to the toolbar and store it's Handle
93 """
94 action = self.addWidget(widget)
95 self.actions[handle] = action
7996
80 def getIconFromTitle(self, title):97 def getIconFromTitle(self, title):
81 """98 """
@@ -90,3 +107,11 @@
90 else:107 else:
91 self.log.error(u'getIconFromTitle - no icon for %s' % title)108 self.log.error(u'getIconFromTitle - no icon for %s' % title)
92 return QtGui.QIcon()109 return QtGui.QIcon()
110
111 def makeWidgetsInvisible(self, widgets):
112 for widget in widgets:
113 self.actions[widget].setVisible(False)
114
115 def makeWidgetsVisible(self, widgets):
116 for widget in widgets:
117 self.actions[widget].setVisible(True)
93118
=== modified file 'openlp/core/ui/__init__.py'
--- openlp/core/ui/__init__.py 2009-08-13 20:02:38 +0000
+++ openlp/core/ui/__init__.py 2009-08-27 05:17:20 +0000
@@ -17,7 +17,7 @@
17this program; if not, write to the Free Software Foundation, Inc., 59 Temple17this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20from slidecontroller import MasterToolbar20#from slidecontroller import MasterToolbar
21from maindisplay import MainDisplay21from maindisplay import MainDisplay
22from amendthemeform import AmendThemeForm22from amendthemeform import AmendThemeForm
23from slidecontroller import SlideController23from slidecontroller import SlideController
2424
=== modified file 'openlp/core/ui/amendthemeform.py'
--- openlp/core/ui/amendthemeform.py 2009-08-26 05:00:19 +0000
+++ openlp/core/ui/amendthemeform.py 2009-08-31 07:05:59 +0000
@@ -135,8 +135,8 @@
135 unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign),135 unicode(self.theme.display_horizontalAlign), unicode(self.theme.display_verticalAlign),
136 unicode(self.theme.display_wrapStyle))136 unicode(self.theme.display_wrapStyle))
137 theme = new_theme.extract_xml()137 theme = new_theme.extract_xml()
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:
139 return QtGui.QDialog.accept(self)139 return QtGui.QDialog.accept(self)
140140
141 def loadTheme(self, theme):141 def loadTheme(self, theme):
142 log.debug(u'LoadTheme %s', theme)142 log.debug(u'LoadTheme %s', theme)
@@ -510,45 +510,60 @@
510 self.VerticalComboBox.setCurrentIndex(int(self.theme.display_verticalAlign))510 self.VerticalComboBox.setCurrentIndex(int(self.theme.display_verticalAlign))
511511
512 def stateChanging(self, theme):512 def stateChanging(self, theme):
513 if theme.background_type == u'solid':513 if theme.background_mode == u'transparent':
514 self.Color1PushButton.setStyleSheet(514 self.Color1Label.setVisible(False)
515 u'background-color: %s' % unicode(theme.background_color))515 self.Color1PushButton.setVisible(False)
516 self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:'))516 self.Color2Label.setVisible(False)
517 self.Color1Label.setVisible(True)517 self.Color2PushButton.setVisible(False)
518 self.Color1PushButton.setVisible(True)518 self.ImageLabel.setVisible(False)
519 self.Color2Label.setVisible(False)519 self.ImageLineEdit.setVisible(False)
520 self.Color2PushButton.setVisible(False)520 self.ImageFilenameWidget.setVisible(False)
521 self.ImageLabel.setVisible(False)521 self.GradientLabel.setVisible(False)
522 self.ImageLineEdit.setVisible(False)522 self.GradientComboBox.setVisible(False)
523 self.ImageFilenameWidget.setVisible(False)523 self.BackgroundTypeComboBox.setVisible(False)
524 self.GradientLabel.setVisible(False)524 self.BackgroundTypeLabel.setVisible(False)
525 self.GradientComboBox.setVisible(False)525 else:
526 elif theme.background_type == u'gradient':526 self.BackgroundTypeComboBox.setVisible(True)
527 self.Color1PushButton.setStyleSheet(527 self.BackgroundTypeLabel.setVisible(True)
528 u'background-color: %s' % unicode(theme.background_startColor))528 if theme.background_type == u'solid':
529 self.Color2PushButton.setStyleSheet(529 self.Color1PushButton.setStyleSheet(
530 u'background-color: %s' % unicode(theme.background_endColor))530 u'background-color: %s' % unicode(theme.background_color))
531 self.Color1Label.setText(translate(u'ThemeManager', u'First Color:'))531 self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:'))
532 self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:'))532 self.Color1Label.setVisible(True)
533 self.Color1Label.setVisible(True)533 self.Color1PushButton.setVisible(True)
534 self.Color1PushButton.setVisible(True)534 self.Color2Label.setVisible(False)
535 self.Color2Label.setVisible(True)535 self.Color2PushButton.setVisible(False)
536 self.Color2PushButton.setVisible(True)536 self.ImageLabel.setVisible(False)
537 self.ImageLabel.setVisible(False)537 self.ImageLineEdit.setVisible(False)
538 self.ImageLineEdit.setVisible(False)538 self.ImageFilenameWidget.setVisible(False)
539 self.ImageFilenameWidget.setVisible(False)539 self.GradientLabel.setVisible(False)
540 self.GradientLabel.setVisible(True)540 self.GradientComboBox.setVisible(False)
541 self.GradientComboBox.setVisible(True)541 elif theme.background_type == u'gradient':
542 else: # must be image542 self.Color1PushButton.setStyleSheet(
543 self.Color1Label.setVisible(False)543 u'background-color: %s' % unicode(theme.background_startColor))
544 self.Color1PushButton.setVisible(False)544 self.Color2PushButton.setStyleSheet(
545 self.Color2Label.setVisible(False)545 u'background-color: %s' % unicode(theme.background_endColor))
546 self.Color2PushButton.setVisible(False)546 self.Color1Label.setText(translate(u'ThemeManager', u'First Color:'))
547 self.ImageLabel.setVisible(True)547 self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:'))
548 self.ImageLineEdit.setVisible(True)548 self.Color1Label.setVisible(True)
549 self.ImageFilenameWidget.setVisible(True)549 self.Color1PushButton.setVisible(True)
550 self.GradientLabel.setVisible(False)550 self.Color2Label.setVisible(True)
551 self.GradientComboBox.setVisible(False)551 self.Color2PushButton.setVisible(True)
552 self.ImageLabel.setVisible(False)
553 self.ImageLineEdit.setVisible(False)
554 self.ImageFilenameWidget.setVisible(False)
555 self.GradientLabel.setVisible(True)
556 self.GradientComboBox.setVisible(True)
557 else: # must be image
558 self.Color1Label.setVisible(False)
559 self.Color1PushButton.setVisible(False)
560 self.Color2Label.setVisible(False)
561 self.Color2PushButton.setVisible(False)
562 self.ImageLabel.setVisible(True)
563 self.ImageLineEdit.setVisible(True)
564 self.ImageFilenameWidget.setVisible(True)
565 self.GradientLabel.setVisible(False)
566 self.GradientComboBox.setVisible(False)
552567
553 if theme.font_main_override == False:568 if theme.font_main_override == False:
554 self.FontMainXSpinBox.setEnabled(False)569 self.FontMainXSpinBox.setEnabled(False)
555570
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-08-26 05:00:19 +0000
+++ openlp/core/ui/mainwindow.py 2009-08-29 07:17:56 +0000
@@ -313,8 +313,6 @@
313 translate(u'mainWindow', u'Service Manager'))313 translate(u'mainWindow', u'Service Manager'))
314 self.ThemeManagerDock.setWindowTitle(314 self.ThemeManagerDock.setWindowTitle(
315 translate(u'mainWindow', u'Theme Manager'))315 translate(u'mainWindow', u'Theme Manager'))
316 self.DefaultThemeLabel.setText(MainWindow.defaultThemeText + \
317 self.ThemeManagerContents.getDefault())
318 self.FileNewItem.setText(translate(u'mainWindow', u'&New'))316 self.FileNewItem.setText(translate(u'mainWindow', u'&New'))
319 self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service'))317 self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service'))
320 self.FileNewItem.setStatusTip(318 self.FileNewItem.setStatusTip(
@@ -492,6 +490,8 @@
492 # Once all components are initialised load the Themes490 # Once all components are initialised load the Themes
493 log.info(u'Load Themes')491 log.info(u'Load Themes')
494 self.ThemeManagerContents.loadThemes()492 self.ThemeManagerContents.loadThemes()
493 log.info(u'Load data from Settings')
494 self.settingsForm.postSetUp()
495495
496 def getMonitorNumber(self):496 def getMonitorNumber(self):
497 """497 """
498498
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-08-25 05:18:09 +0000
+++ openlp/core/ui/servicemanager.py 2009-08-31 18:27:36 +0000
@@ -25,7 +25,7 @@
2525
26from PyQt4 import QtCore, QtGui26from PyQt4 import QtCore, QtGui
27from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \27from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \
28 RenderManager, translate, buildIcon, \28 RenderManager, translate, buildIcon, ServiceType, \
29 contextMenuAction, contextMenuSeparator, Receiver29 contextMenuAction, contextMenuSeparator, Receiver
30from openlp.core.utils import ConfigHelper30from openlp.core.utils import ConfigHelper
3131
@@ -341,7 +341,8 @@
341 zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w')341 zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w')
342 for item in self.serviceItems:342 for item in self.serviceItems:
343 service.append({u'serviceitem':item[u'data'].get_oos_repr()})343 service.append({u'serviceitem':item[u'data'].get_oos_repr()})
344 if item[u'data'].service_item_type == u'image':344 if item[u'data'].service_item_type == ServiceType.Image or \
345 item[u'data'].service_item_type == ServiceType.Command:
345 for frame in item[u'data'].frames:346 for frame in item[u'data'].frames:
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'])
347 zip.write(path_from)348 zip.write(path_from)
@@ -354,7 +355,7 @@
354 os.remove(servicefile)355 os.remove(servicefile)
355 except:356 except:
356 pass #if not present do not worry357 pass #if not present do not worry
357 self.parent.OosChanged(True, self.serviceName)358 self.parent.OosChanged(True, filename + u'.oos')
358359
359 def onLoadService(self):360 def onLoadService(self):
360 """361 """
@@ -368,31 +369,34 @@
368 name = filename.split(os.path.sep)369 name = filename.split(os.path.sep)
369 if filename != u'':370 if filename != u'':
370 self.config.set_last_dir(filename)371 self.config.set_last_dir(filename)
371 zip = zipfile.ZipFile(unicode(filename))372 try:
372 filexml = None373 zip = zipfile.ZipFile(unicode(filename))
373 themename = None374 filexml = None
374 for file in zip.namelist():375 themename = None
375 names = file.split(os.path.sep)376 for file in zip.namelist():
376 file_to = os.path.join(self.servicePath, names[len(names) - 1])377 names = file.split(os.path.sep)
377 file_data = zip.read(file)378 file_to = os.path.join(self.servicePath, names[len(names) - 1])
378 f = open(file_to, u'w')379 file_data = zip.read(file)
379 f.write(file_data)380 f = open(file_to, u'w')
381 f.write(file_data)
382 f.close()
383 if file_to.endswith(u'ood'):
384 p_file = file_to
385 f = open(p_file, u'r')
386 items = cPickle.load(f)
380 f.close()387 f.close()
381 if file_to.endswith(u'ood'):388 self.onNewService()
382 p_file = file_to389 for item in items:
383 f = open(p_file, u'r')390 serviceitem = ServiceItem()
384 items = cPickle.load(f)391 serviceitem.RenderManager = self.parent.RenderManager
385 f.close()392 serviceitem.set_from_oos(item, self.servicePath )
386 self.onNewService()393 self.addServiceItem(serviceitem)
387 for item in items:394 try:
388 serviceitem = ServiceItem()395 os.remove(p_file)
389 serviceitem.RenderManager = self.parent.RenderManager396 except:
390 serviceitem.set_from_oos(item, self.servicePath )397 #if not present do not worry
391 self.addServiceItem(serviceitem)398 pass
392 try:
393 os.remove(p_file)
394 except:399 except:
395 #if not present do not worry
396 pass400 pass
397 self.serviceName = name[len(name) - 1]401 self.serviceName = name[len(name) - 1]
398 self.parent.OosChanged(True, self.serviceName)402 self.parent.OosChanged(True, self.serviceName)
399403
=== modified file 'openlp/core/ui/settingsform.py'
--- openlp/core/ui/settingsform.py 2009-08-06 13:17:36 +0000
+++ openlp/core/ui/settingsform.py 2009-08-29 07:17:56 +0000
@@ -51,3 +51,7 @@
51 for tab_index in range(0, self.SettingsTabWidget.count()):51 for tab_index in range(0, self.SettingsTabWidget.count()):
52 self.SettingsTabWidget.widget(tab_index).save()52 self.SettingsTabWidget.widget(tab_index).save()
53 return QtGui.QDialog.accept(self)53 return QtGui.QDialog.accept(self)
54
55 def postSetUp(self):
56 for tab_index in range(0, self.SettingsTabWidget.count()):
57 self.SettingsTabWidget.widget(tab_index).postSetUp()
5458
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-08-24 05:10:04 +0000
+++ openlp/core/ui/slidecontroller.py 2009-08-31 14:04:00 +0000
@@ -21,7 +21,7 @@
21import os21import os
2222
23from PyQt4 import QtCore, QtGui23from PyQt4 import QtCore, QtGui
24from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver24from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver, ServiceType
2525
26class SlideList(QtGui.QTableWidget):26class SlideList(QtGui.QTableWidget):
27 """27 """
@@ -36,16 +36,16 @@
36 if type(event) == QtGui.QKeyEvent:36 if type(event) == QtGui.QKeyEvent:
37 #here accept the event and do something37 #here accept the event and do something
38 if event.key() == QtCore.Qt.Key_Up:38 if event.key() == QtCore.Qt.Key_Up:
39 self.parent.BaseToolbar.onSlideSelectedPrevious()39 self.parent.onSlideSelectedPrevious()
40 event.accept()40 event.accept()
41 elif event.key() == QtCore.Qt.Key_Down:41 elif event.key() == QtCore.Qt.Key_Down:
42 self.parent.BaseToolbar.onSlideSelectedNext()42 self.parent.onSlideSelectedNext()
43 event.accept()43 event.accept()
44 elif event.key() == QtCore.Qt.Key_PageUp:44 elif event.key() == QtCore.Qt.Key_PageUp:
45 self.parent.BaseToolbar.onSlideSelectedFirst()45 self.parent.onSlideSelectedFirst()
46 event.accept()46 event.accept()
47 elif event.key() == QtCore.Qt.Key_PageDown:47 elif event.key() == QtCore.Qt.Key_PageDown:
48 self.parent.BaseToolbar.onSlideSelectedLast()48 self.parent.onSlideSelectedLast()
49 event.accept()49 event.accept()
50 event.ignore()50 event.ignore()
51 else:51 else:
@@ -63,13 +63,11 @@
63 """63 """
64 Set up the Slide Controller.64 Set up the Slide Controller.
65 """65 """
66 self.toolbarList = {}
67 QtGui.QWidget.__init__(self, parent)66 QtGui.QWidget.__init__(self, parent)
68 self.isLive = isLive67 self.isLive = isLive
69 self.prefix = u'preview_'
70 if isLive:
71 self.prefix = u'live_'
72 self.parent = parent68 self.parent = parent
69 self.image_list = [u'Start Loop', u'Stop Loop', u'Loop Spearator', u'Image SpinBox']
70 self.timer_id = 0
73 self.Panel = QtGui.QWidget(parent.ControlSplitter)71 self.Panel = QtGui.QWidget(parent.ControlSplitter)
74 self.Splitter = QtGui.QSplitter(self.Panel)72 self.Splitter = QtGui.QSplitter(self.Panel)
75 self.Splitter.setOrientation(QtCore.Qt.Vertical)73 self.Splitter.setOrientation(QtCore.Qt.Vertical)
@@ -96,10 +94,53 @@
96 self.PreviewListWidget.isLive = self.isLive94 self.PreviewListWidget.isLive = self.isLive
97 self.PreviewListWidget.setObjectName(u'PreviewListWidget')95 self.PreviewListWidget.setObjectName(u'PreviewListWidget')
98 self.ControllerLayout.addWidget(self.PreviewListWidget)96 self.ControllerLayout.addWidget(self.PreviewListWidget)
99 # Plugin the Base Toolbar class97 # Build the full toolbar
100 self.BaseToolbar = MasterToolbar(self.isLive)98 self.Toolbar = OpenLPToolbar(self)
101 self.registerToolbar(u'master', self.BaseToolbar)99 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
102 self.Toolbar = self.BaseToolbar.getToolbar()100 QtGui.QSizePolicy.Fixed)
101 sizeToolbarPolicy.setHorizontalStretch(0)
102 sizeToolbarPolicy.setVerticalStretch(0)
103 sizeToolbarPolicy.setHeightForWidth(
104 self.Toolbar.sizePolicy().hasHeightForWidth())
105 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
106 if self.isLive:
107 self.Toolbar.addToolbarButton(u'First Slide',
108 u':/slides/slide_first.png',
109 translate(u'SlideController', u'Move to first'),
110 self.onSlideSelectedFirst)
111 self.Toolbar.addToolbarButton(u'Previous Slide',
112 u':/slides/slide_previous.png',
113 translate(u'SlideController', u'Move to previous'),
114 self.onSlideSelectedPrevious)
115 self.Toolbar.addToolbarButton(u'Next Slide',
116 u':/slides/slide_next.png',
117 translate(u'SlideController', u'Move to next'),
118 self.onSlideSelectedNext)
119 if self.isLive:
120 self.Toolbar.addToolbarButton(u'Last Slide',
121 u':/slides/slide_last.png',
122 translate(u'SlideController', u'Move to last'),
123 self.onSlideSelectedLast)
124 if self.isLive:
125 self.Toolbar.addToolbarSeparator(u'Close Separator')
126 self.Toolbar.addToolbarButton(u'Close Screen',
127 u':/slides/slide_close.png',
128 translate(u'SlideController', u'Close Screen'),
129 self.onBlankScreen)
130 if isLive:
131 self.Toolbar.addToolbarSeparator(u'Loop Spearator')
132 self.Toolbar.addToolbarButton(u'Start Loop',
133 u':/media/media_time.png',
134 translate(u'SlideController', u'Start continuous loop'),
135 self.onStartLoop)
136 self.Toolbar.addToolbarButton(u'Stop Loop',
137 u':/media/media_stop.png',
138 translate(u'SlideController', u'Stop continuous loop'),
139 self.onStopLoop)
140 self.DelaySpinBox = QtGui.QSpinBox()
141 self.Toolbar.addToolbarWidget(u'Image SpinBox', self.DelaySpinBox)
142 self.DelaySpinBox.setSuffix(translate(u'SlideController', u's'))
143
103 self.ControllerLayout.addWidget(self.Toolbar)144 self.ControllerLayout.addWidget(self.Toolbar)
104 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,145 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
105 QtGui.QSizePolicy.Fixed)146 QtGui.QSizePolicy.Fixed)
@@ -110,7 +151,7 @@
110 self.Toolbar.setSizePolicy(sizeToolbarPolicy)151 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
111 # Screen preview area152 # Screen preview area
112 self.PreviewFrame = QtGui.QFrame(self.Splitter)153 self.PreviewFrame = QtGui.QFrame(self.Splitter)
113 self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 280, 190))154 self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225))
114 self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy(155 self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy(
115 QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum))156 QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum))
116 self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)157 self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
@@ -128,7 +169,7 @@
128 sizePolicy.setHeightForWidth(169 sizePolicy.setHeightForWidth(
129 self.SlidePreview.sizePolicy().hasHeightForWidth())170 self.SlidePreview.sizePolicy().hasHeightForWidth())
130 self.SlidePreview.setSizePolicy(sizePolicy)171 self.SlidePreview.setSizePolicy(sizePolicy)
131 self.SlidePreview.setFixedSize(QtCore.QSize(250, 210))172 self.SlidePreview.setFixedSize(QtCore.QSize(300, 225))
132 self.SlidePreview.setFrameShape(QtGui.QFrame.Box)173 self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
133 self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)174 self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
134 self.SlidePreview.setLineWidth(1)175 self.SlidePreview.setLineWidth(1)
@@ -140,45 +181,46 @@
140 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)181 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
141 QtCore.QObject.connect(self.PreviewListWidget,182 QtCore.QObject.connect(self.PreviewListWidget,
142 QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)183 QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
143 # Window Event Handlers184 if isLive:
144 QtCore.QObject.connect(Receiver.get_receiver(),185 QtCore.QObject.connect(Receiver.get_receiver(),
145 QtCore.SIGNAL(u'%sslide_first'% self.prefix), self.onSlideSelectedFirst)186 QtCore.SIGNAL(u'update_spin_delay'), self.receiveSpinDelay)
146 QtCore.QObject.connect(Receiver.get_receiver(),187 Receiver().send_message(u'request_spin_delay')
147 QtCore.SIGNAL(u'%sslide_previous'% self.prefix), self.onSlideSelectedPrevious)188 if isLive:
148 QtCore.QObject.connect(Receiver.get_receiver(),189 self.Toolbar.makeWidgetsInvisible(self.image_list)
149 QtCore.SIGNAL(u'%sslide_next'% self.prefix), self.onSlideSelectedNext)190 else:
150 QtCore.QObject.connect(Receiver.get_receiver(),191 pass
151 QtCore.SIGNAL(u'%sslide_last'% self.prefix), self.onSlideSelectedLast)192
152 QtCore.QObject.connect(Receiver.get_receiver(),193 def receiveSpinDelay(self, value):
153 QtCore.SIGNAL(u'%sslide_start_loop'% self.prefix), self.onStartLoop)194 self.DelaySpinBox.setValue(int(value))
154 QtCore.QObject.connect(Receiver.get_receiver(),195
155 QtCore.SIGNAL(u'%sslide_stop_loop'% self.prefix), self.onStopLoop)196 def enableToolBar(self, item):
156197 """
157198 Allows the toolbars to be reconfigured based on Controller Type
158 def registerToolbar(self, handle,controller):199 and ServiceItem Type
159 """200 """
160 Register a new toolbar with the controller201 if self.isLive:
161 ``handle``202 self.enableLiveToolBar(item)
162 Identifier for the toolbar being stored this should equal the203 else:
163 plugins name.204 self.enablePreviewToolBar(item)
164 ``controller``205
165 The toolbar class which should extend MasterToolbar206 def enableLiveToolBar(self, item):
166 """207 """
167 #store the handle name in lower case so no probems later208 Allows the live toolbar to be customised
168 self.toolbarList[handle.lower()] = controller209 """
169210 if item.service_item_type == ServiceType.Text:
170 def retrieveToolbar(self, handle):211 self.Toolbar.makeWidgetsInvisible(self.image_list)
171 """212 elif item.service_item_type == ServiceType.Image:
172 Find the toolbar and return master if none present213 #Not sensible to allow loops with 1 frame
173 Add extra information back into toolbar class214 if len(item.frames) > 1:
174 ``handle``215 self.Toolbar.makeWidgetsVisible(self.image_list)
175 Identifier for the toolbar being requested216 else:
176 """217 self.Toolbar.makeWidgetsInvisible(self.image_list)
177 try:218
178 toolbar = self.toolbarList[handle.lower()]219 def enablePreviewToolBar(self, item):
179 except:220 """
180 toolbar = self.toolbarList[u'master']221 Allows the Preview toolbar to be customised
181 return toolbar222 """
223 pass
182224
183 def addServiceItem(self, item):225 def addServiceItem(self, item):
184 """226 """
@@ -186,13 +228,9 @@
186 request the correct the toolbar of the plugin228 request the correct the toolbar of the plugin
187 Called by plugins229 Called by plugins
188 """230 """
189 self.BaseToolbar = self.retrieveToolbar(item.shortname)231 log.debug(u'addServiceItem')
190 self.ControllerLayout.removeWidget(self.Toolbar)
191 #remove the old toolbar
192 self.Toolbar.clear()
193 self.Toolbar = self.BaseToolbar.getToolbar()
194 self.ControllerLayout.addWidget(self.Toolbar)
195 item.render()232 item.render()
233 self.enableToolBar(item)
196 self.displayServiceManagerItems(item, 0)234 self.displayServiceManagerItems(item, 0)
197235
198 def addServiceManagerItem(self, item, slideno):236 def addServiceManagerItem(self, item, slideno):
@@ -201,12 +239,8 @@
201 request the correct the toolbar of the plugin239 request the correct the toolbar of the plugin
202 Called by ServiceManager240 Called by ServiceManager
203 """241 """
204 self.BaseToolbar = self.retrieveToolbar(item.shortname)242 log.debug(u'addServiceItem')
205 self.ControllerLayout.removeWidget(self.Toolbar)243 self.enableToolBar(item)
206 #remove the old toolbar
207 self.Toolbar.clear()
208 self.Toolbar = self.BaseToolbar.getToolbar()
209 self.ControllerLayout.addWidget(self.Toolbar)
210 self.displayServiceManagerItems(item, slideno)244 self.displayServiceManagerItems(item, slideno)
211245
212 def displayServiceManagerItems(self, serviceitem, slideno):246 def displayServiceManagerItems(self, serviceitem, slideno):
@@ -214,7 +248,7 @@
214 Loads a ServiceItem into the system from ServiceManager248 Loads a ServiceItem into the system from ServiceManager
215 Display the slide number passed249 Display the slide number passed
216 """250 """
217 log.debug(u'add Service Manager Item')251 log.debug(u'displayServiceManagerItems Start')
218 self.serviceitem = serviceitem252 self.serviceitem = serviceitem
219 slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image'])253 slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image'])
220 slide_width = 300254 slide_width = 300
@@ -241,27 +275,13 @@
241 self.PreviewListWidget.selectRow(slideno)275 self.PreviewListWidget.selectRow(slideno)
242 self.onSlideSelected()276 self.onSlideSelected()
243 self.PreviewListWidget.setFocus()277 self.PreviewListWidget.setFocus()
278 log.debug(u'displayServiceManagerItems End')
244279
245 #Screen event methods280 #Screen event methods
246 def onSlideSelected(self):
247 """
248 Generate the preview when you click on a slide.
249 if this is the Live Controller also display on the screen
250 """
251 row = self.PreviewListWidget.currentRow()
252 if row > -1 and row < self.PreviewListWidget.rowCount():
253 label = self.PreviewListWidget.cellWidget(row, 0)
254 smallframe = label.pixmap()
255 frame = self.serviceitem.frames[row][u'image']
256 self.SlidePreview.setPixmap(smallframe)
257 if self.isLive:
258 self.parent.mainDisplay.frameView(frame)
259
260 def onSlideSelectedFirst(self):281 def onSlideSelectedFirst(self):
261 """282 """
262 Go to the first slide.283 Go to the first slide.
263 """284 """
264 print "oSSF"
265 self.PreviewListWidget.selectRow(0)285 self.PreviewListWidget.selectRow(0)
266 self.onSlideSelected()286 self.onSlideSelected()
267287
@@ -312,12 +332,12 @@
312 self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)332 self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)
313 self.onSlideSelected()333 self.onSlideSelected()
314334
315 def onStartLoop(self, value):335 def onStartLoop(self):
316 """336 """
317 Go to the last slide.337 Go to the last slide.
318 """338 """
319 if self.PreviewListWidget.rowCount() > 1:339 if self.PreviewListWidget.rowCount() > 1:
320 self.timer_id = self.startTimer(int(value) * 1000)340 self.timer_id = self.startTimer(int(self.DelaySpinBox.value()) * 1000)
321341
322 def onStopLoop(self):342 def onStopLoop(self):
323 """343 """
@@ -329,88 +349,5 @@
329 if event.timerId() == self.timer_id:349 if event.timerId() == self.timer_id:
330 self.onSlideSelectedNext()350 self.onSlideSelectedNext()
331351
332class MasterToolbar(QtCore.QObject):352
333 """353
334 Class from which all toolbars should extend
335 """
336 def __init__(self, isLive):
337 self.Toolbar = None
338 QtCore.QObject.__init__(self)
339 self.PreviewListWidget = QtGui.QListWidget()
340 self.isLive = isLive
341 self.prefix = u'preview_'
342 if isLive:
343 self.prefix = u'live_'
344
345 def getToolbar(self):
346 #define toolbar here as it needs to be redefined each time
347 #as the clear destroys it.
348 self.defineToolbar()
349 self.defineZone1()
350 self.defineZone2()
351 self.defineZone3()
352 self.defineZone4()
353 self.defineZone5()
354 return self.Toolbar
355
356 def defineToolbar(self):
357 # Controller toolbar
358 self.Toolbar = OpenLPToolbar(self)
359 sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
360 QtGui.QSizePolicy.Fixed)
361 sizeToolbarPolicy.setHorizontalStretch(0)
362 sizeToolbarPolicy.setVerticalStretch(0)
363 sizeToolbarPolicy.setHeightForWidth(
364 self.Toolbar.sizePolicy().hasHeightForWidth())
365 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
366
367 def defineZone1(self):
368 #Dummy Zone
369 pass
370
371 def defineZone2(self):
372 if self.isLive:
373 self.Toolbar.addToolbarButton(u'First Slide',
374 u':/slides/slide_first.png',
375 translate(u'SlideController', u'Move to first'),
376 self.onSlideFirst)
377 self.Toolbar.addToolbarButton(u'Previous Slide',
378 u':/slides/slide_previous.png',
379 translate(u'SlideController', u'Move to previous'),
380 self.onSlidePrevious)
381 self.Toolbar.addToolbarButton(u'Next Slide',
382 u':/slides/slide_next.png',
383 translate(u'SlideController', u'Move to next'),
384 self.onSlideNext)
385 if self.isLive:
386 self.Toolbar.addToolbarButton(u'Last Slide',
387 u':/slides/slide_last.png',
388 translate(u'SlideController', u'Move to last'),
389 self.onSlideLast)
390
391 def defineZone3(self):
392 #Dummy Zone
393 pass
394
395 def defineZone4(self):
396 if self.isLive:
397 self.Toolbar.addSeparator()
398 self.Toolbar.addToolbarButton(u'Close Screen',
399 u':/slides/slide_close.png',
400 translate(u'SlideController', u'Close Screen'),
401 self.onSlideBlank)
402
403 def defineZone5(self):
404 #Dummy Zone
405 pass
406
407 def onSlideFirst(self):
408 Receiver().send_message(u'%sslide_first'% self.prefix)
409 def onSlidePrevious(self):
410 Receiver().send_message(u'%sslide_previous'% self.prefix)
411 def onSlideNext(self):
412 Receiver().send_message(u'%sslide_next'% self.prefix)
413 def onSlideLast(self):
414 Receiver().send_message(u'%sslide_last' % self.prefix)
415 def onSlideBlank(self):
416 Receiver().send_message(u'%sslide_blank' % self.prefix)
417354
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2009-08-26 05:00:19 +0000
+++ openlp/core/ui/thememanager.py 2009-08-29 10:43:44 +0000
@@ -85,9 +85,6 @@
85 self.servicePath = self.config.get_data_path()85 self.servicePath = self.config.get_data_path()
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''))
8787
88 def getDefault(self):
89 return self.global_theme
90
91 def changeGlobalFromTab(self, themeName):88 def changeGlobalFromTab(self, themeName):
92 log.debug(u'changeGlobalFromTab %s', themeName)89 log.debug(u'changeGlobalFromTab %s', themeName)
93 for count in range (0, self.ThemeListWidget.count()):90 for count in range (0, self.ThemeListWidget.count()):
@@ -329,13 +326,29 @@
329 if os.path.exists(theme_dir) == False:326 if os.path.exists(theme_dir) == False:
330 os.mkdir(os.path.join(self.path, name))327 os.mkdir(os.path.join(self.path, name))
331 theme_file = os.path.join(theme_dir, name + u'.xml')328 theme_file = os.path.join(theme_dir, name + u'.xml')
332 outfile = open(theme_file, u'w')329 log.debug(theme_file)
333 outfile.write(theme_xml)330
334 outfile.close()331 result = QtGui.QMessageBox.Yes
335 if image_from is not None and image_from != image_to:332 if os.path.exists(theme_file):
336 shutil.copyfile(image_from, image_to)333 result = QtGui.QMessageBox.question(
337 self.generateAndSaveImage(self.path, name, theme_xml)334 self,
338 self.loadThemes()335 translate(u'ThemeManager',u'Theme Exists'),
336 translate(u'ThemeManager',u'A theme with this name already exists, would you like to overwrite it?'),
337 (QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
338 QtGui.QMessageBox.No)
339 if result == QtGui.QMessageBox.Yes:
340 # Save the theme, overwriting the existing theme if necessary.
341 outfile = open(theme_file, u'w')
342 outfile.write(theme_xml)
343 outfile.close()
344 if image_from is not None and image_from != image_to:
345 shutil.copyfile(image_from, image_to)
346
347 self.generateAndSaveImage(self.path, name, theme_xml)
348 self.loadThemes()
349 else:
350 # Don't close the dialog - allow the user to change the name of the theme or to cancel the theme dialog completely.
351 return False
339352
340 def generateAndSaveImage(self, dir, name, theme_xml):353 def generateAndSaveImage(self, dir, name, theme_xml):
341 log.debug(u'generateAndSaveImage %s %s %s', dir, name, theme_xml)354 log.debug(u'generateAndSaveImage %s %s %s', dir, name, theme_xml)
342355
=== modified file 'openlp/core/ui/themestab.py'
--- openlp/core/ui/themestab.py 2009-08-25 20:04:58 +0000
+++ openlp/core/ui/themestab.py 2009-08-29 07:17:56 +0000
@@ -124,6 +124,9 @@
124 self.config.set_config(u'theme global theme',self.global_theme)124 self.config.set_config(u'theme global theme',self.global_theme)
125 Receiver().send_message(u'update_global_theme', self.global_theme )125 Receiver().send_message(u'update_global_theme', self.global_theme )
126126
127 def postSetUp(self):
128 Receiver().send_message(u'update_global_theme', self.global_theme )
129
127 def onSongLevelButtonPressed(self):130 def onSongLevelButtonPressed(self):
128 self.global_style= u'Song'131 self.global_style= u'Song'
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)
130133
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2009-08-24 04:30:04 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2009-09-01 05:17:32 +0000
@@ -341,8 +341,10 @@
341 def generateSlideData(self, service_item):341 def generateSlideData(self, service_item):
342 log.debug(u'generating slide data')342 log.debug(u'generating slide data')
343 items = self.ListView.selectedIndexes()343 items = self.ListView.selectedIndexes()
344 if len(items) ==0:
345 return False
344 old_chapter = u''346 old_chapter = u''
345 raw_slides=[]347 raw_slides = []
346 raw_footer = []348 raw_footer = []
347 bible_text = u''349 bible_text = u''
348 for item in items:350 for item in items:
@@ -389,6 +391,7 @@
389 for slide in raw_slides:391 for slide in raw_slides:
390 service_item.add_from_text(slide[:30], slide)392 service_item.add_from_text(slide[:30], slide)
391 service_item.raw_footer = raw_footer393 service_item.raw_footer = raw_footer
394 return True
392395
393 def formatVerse(self, old_chapter, chapter, verse, opening, closing):396 def formatVerse(self, old_chapter, chapter, verse, opening, closing):
394 loc = opening397 loc = opening
@@ -432,27 +435,30 @@
432 combo.addItem(unicode(i))435 combo.addItem(unicode(i))
433436
434 def displayResults(self, bible):437 def displayResults(self, bible):
435 for verse in self.search_results:438 for count, verse in enumerate(self.search_results):
436 bible_text = u' %s %d:%d (%s)' % (verse.book.name,439 bible_text = u' %s %d:%d (%s)' % (verse.book.name,
437 verse.chapter, verse.verse, bible)440 verse.chapter, verse.verse, bible)
438 bible_verse = QtGui.QListWidgetItem(bible_text)441 bible_verse = QtGui.QListWidgetItem(bible_text)
439 bible_verse.setData(QtCore.Qt.UserRole,442 bible_verse.setData(QtCore.Qt.UserRole,
440 QtCore.QVariant(bible_text))443 QtCore.QVariant(bible_text))
441 self.ListView.addItem(bible_verse)444 self.ListView.addItem(bible_verse)
445 cr = self.ListView.setCurrentRow(count)
446 if cr is not None:
447 cr.setSelected(True)
442448
443 def searchByReference(self, bible, search):449 def searchByReference(self, bible, search):
444 log.debug(u'searchByReference %s ,%s', bible, search)450 log.debug(u'searchByReference %s ,%s', bible, search)
445 book = ''451 book = u''
446 start_chapter = ''452 start_chapter = u''
447 end_chapter = ''453 end_chapter = u''
448 start_verse = ''454 start_verse = u''
449 end_verse = ''455 end_verse = u''
450 search = search.replace(u' ', u' ').strip()456 search = search.replace(u' ', u' ').strip()
451 original = search457 original = search
452 message = None458 message = None
453 # Remove book beware 0 index arrays459 # Remove book beware 0 index arrays
454 for i in range (len(search)-1, 0, - 1):460 for i in range (len(search)-1, 0, - 1):
455 if search[i] == ' ':461 if search[i] == u' ':
456 book = search[:i]462 book = search[:i]
457 # remove book from string463 # remove book from string
458 search = search[i:]464 search = search[i:]
@@ -466,7 +472,7 @@
466 # number : found472 # number : found
467 i = search.rfind(u' ')473 i = search.rfind(u' ')
468 if i == -1:474 if i == -1:
469 chapter = ''475 chapter = u''
470 else:476 else:
471 chapter = search[i:len(search)]477 chapter = search[i:len(search)]
472 hyphen = chapter.find(u'-')478 hyphen = chapter.find(u'-')
@@ -493,29 +499,25 @@
493 end_verse = start_verse499 end_verse = start_verse
494 else:500 else:
495 sp1 = sp[1].split(u':')501 sp1 = sp[1].split(u':')
496 #print "2nd details", sp1, len(sp1)
497 if len(sp1) == 1:502 if len(sp1) == 1:
498 end_chapter = start_chapter503 end_chapter = start_chapter
499 end_verse = sp1[0]504 end_verse = sp1[0]
500 else:505 else:
501 end_chapter = sp1[0]506 end_chapter = sp1[0]
502 end_verse = sp1[1]507 end_verse = sp1[1]
503 #print 'search = ' + unicode(original)508 if end_chapter == u'':
504 #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse)
505 if end_chapter == '':
506 end_chapter = start_chapter.rstrip()509 end_chapter = start_chapter.rstrip()
507 if start_verse == '':510 if start_verse == u'':
508 if end_verse == '':511 if end_verse == u'':
509 start_verse = 1512 start_verse = 1
510 else:513 else:
511 start_verse = end_verse514 start_verse = end_verse
512 if end_verse == '':515 if end_verse == u'':
513 end_verse = 99516 end_verse = 99
514 if start_chapter == '':517 if start_chapter == u'':
515 message = u'No chapter found for search criteria'518 message = u'No chapter found for search criteria'
516 #print 'message = ' + unicode(message)519 log.debug(u'results = %s @ %s : %s @ %s : %s'% \
517 #print 'search = ' + unicode(original)520 (unicode(book), unicode(start_chapter), unicode(end_chapter), unicode(start_verse), unicode(end_verse)))
518 #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse)
519 if message == None:521 if message == None:
520 self.search_results = None522 self.search_results = None
521 self.search_results = self.parent.biblemanager.get_verse_text(bible, book,523 self.search_results = self.parent.biblemanager.get_verse_text(bible, book,
522524
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py 2009-08-15 11:02:24 +0000
+++ openlp/plugins/custom/lib/mediaitem.py 2009-09-01 05:17:32 +0000
@@ -68,17 +68,17 @@
68 self.addToolbarButton(68 self.addToolbarButton(
69 translate(u'CustomMediaItem',u'Preview Custom Item'),69 translate(u'CustomMediaItem',u'Preview Custom Item'),
70 translate(u'CustomMediaItem',u'Preview the selected Custom Item'),70 translate(u'CustomMediaItem',u'Preview the selected Custom Item'),
71 u':/system/system_preview.png', self.onCustomPreviewClick, u'CustomPreviewItem')71 u':/system/system_preview.png', self.onPreviewClick, u'CustomPreviewItem')
72 ## Live Custom Button ##72 ## Live Custom Button ##
73 self.addToolbarButton(73 self.addToolbarButton(
74 translate(u'CustomMediaItem',u'Go Live'),74 translate(u'CustomMediaItem',u'Go Live'),
75 translate(u'CustomMediaItem', u'Send the selected Custom live'),75 translate(u'CustomMediaItem', u'Send the selected Custom live'),
76 u':/system/system_live.png', self.onCustomLiveClick, u'CustomLiveItem')76 u':/system/system_live.png', self.onLiveClick, u'CustomLiveItem')
77 ## Add Custom Button ##77 ## Add Custom Button ##
78 self.addToolbarButton(78 self.addToolbarButton(
79 translate(u'CustomMediaItem',u'Add Custom To Service'),79 translate(u'CustomMediaItem',u'Add Custom To Service'),
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'),
81 u':/system/system_add.png', self.onCustomAddClick, u'CustomAddItem')81 u':/system/system_add.png', self.onAddClick, u'CustomAddItem')
82 # Add the CustomListView widget82 # Add the CustomListView widget
83 self.CustomWidget = QtGui.QWidget(self)83 self.CustomWidget = QtGui.QWidget(self)
84 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)84 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
@@ -95,7 +95,7 @@
95 self.PageLayout.addWidget(self.ListView)95 self.PageLayout.addWidget(self.ListView)
96 # Signals96 # Signals
97 QtCore.QObject.connect(self.ListView,97 QtCore.QObject.connect(self.ListView,
98 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick)98 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick)
99 #define and add the context menu99 #define and add the context menu
100 self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)100 self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
101 self.ListView.addAction(contextMenuAction(self.ListView,101 self.ListView.addAction(contextMenuAction(self.ListView,
@@ -104,13 +104,13 @@
104 self.ListView.addAction(contextMenuSeparator(self.ListView))104 self.ListView.addAction(contextMenuSeparator(self.ListView))
105 self.ListView.addAction(contextMenuAction(105 self.ListView.addAction(contextMenuAction(
106 self.ListView, ':/system/system_preview.png',106 self.ListView, ':/system/system_preview.png',
107 translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick))107 translate(u'CustomMediaItem',u'&Preview Custom'), self.onPreviewClick))
108 self.ListView.addAction(contextMenuAction(108 self.ListView.addAction(contextMenuAction(
109 self.ListView, ':/system/system_live.png',109 self.ListView, ':/system/system_live.png',
110 translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))110 translate(u'CustomMediaItem',u'&Show Live'), self.onLiveClick))
111 self.ListView.addAction(contextMenuAction(111 self.ListView.addAction(contextMenuAction(
112 self.ListView, ':/system/system_add.png',112 self.ListView, ':/system/system_add.png',
113 translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick))113 translate(u'CustomMediaItem',u'&Add to Service'), self.onAddClick))
114114
115 def initialise(self):115 def initialise(self):
116 self.loadCustomListView(self.parent.custommanager.get_all_slides())116 self.loadCustomListView(self.parent.custommanager.get_all_slides())
@@ -143,33 +143,14 @@
143 row = self.ListView.row(item)143 row = self.ListView.row(item)
144 self.ListView.takeItem(row)144 self.ListView.takeItem(row)
145145
146 def onCustomPreviewClick(self):
147 log.debug(u'Custom Preview Requested')
148 service_item = ServiceItem(self.parent)
149 service_item.addIcon(u':/media/media_song.png')
150 self.generateSlideData(service_item)
151 self.parent.preview_controller.addServiceItem(service_item)
152
153 def onCustomLiveClick(self):
154 log.debug(u'Custom Live Requested')
155 service_item = ServiceItem(self.parent)
156 service_item.addIcon(u':/media/media_song.png')
157 self.generateSlideData(service_item)
158 self.parent.live_controller.addServiceItem(service_item)
159
160 def onCustomAddClick(self):
161 log.debug(u'Custom Add Requested')
162 service_item = ServiceItem(self.parent)
163 service_item.addIcon(u':/media/media_song.png')
164 self.generateSlideData(service_item)
165 self.parent.service_manager.addServiceItem(service_item)
166
167 def generateSlideData(self, service_item):146 def generateSlideData(self, service_item):
168 raw_slides =[]147 raw_slides =[]
169 raw_footer = []148 raw_footer = []
170 slide = None149 slide = None
171 theme = None150 theme = None
172 item = self.ListView.currentItem()151 item = self.ListView.currentItem()
152 if item is None:
153 return False
173 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]154 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
174 customSlide = self.parent.custommanager.get_custom(item_id)155 customSlide = self.parent.custommanager.get_custom(item_id)
175 title = customSlide.title156 title = customSlide.title
@@ -187,3 +168,4 @@
187 for slide in raw_slides:168 for slide in raw_slides:
188 service_item.add_from_text(slide[:30], slide)169 service_item.add_from_text(slide[:30], slide)
189 service_item.raw_footer = raw_footer170 service_item.raw_footer = raw_footer
171 return True
190172
=== modified file 'openlp/plugins/images/lib/__init__.py'
--- openlp/plugins/images/lib/__init__.py 2009-08-24 05:13:27 +0000
+++ openlp/plugins/images/lib/__init__.py 2009-08-27 05:17:20 +0000
@@ -18,5 +18,4 @@
18Place, Suite 330, Boston, MA 02111-1307 USA18Place, Suite 330, Boston, MA 02111-1307 USA
19"""19"""
20from mediaitem import ImageMediaItem20from mediaitem import ImageMediaItem
21from imagetoolbar import ImageToolbar
22from imagetab import ImageTab21from imagetab import ImageTab
2322
=== modified file 'openlp/plugins/images/lib/imagetab.py'
--- openlp/plugins/images/lib/imagetab.py 2009-07-06 16:34:13 +0000
+++ openlp/plugins/images/lib/imagetab.py 2009-08-29 07:17:56 +0000
@@ -20,7 +20,7 @@
2020
21from PyQt4 import QtCore, QtGui21from PyQt4 import QtCore, QtGui
2222
23from openlp.core.lib import SettingsTab, str_to_bool, translate23from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver
2424
25class ImageTab(SettingsTab):25class ImageTab(SettingsTab):
26 """26 """
@@ -67,3 +67,7 @@
6767
68 def save(self):68 def save(self):
69 self.config.set_config(u'loop delay', self.loop_delay)69 self.config.set_config(u'loop delay', self.loop_delay)
70 Receiver().send_message(u'update_spin_delay', self.loop_delay )
71
72 def postSetUp(self):
73 Receiver().send_message(u'update_spin_delay', self.loop_delay )
7074
=== removed file 'openlp/plugins/images/lib/imagetoolbar.py'
--- openlp/plugins/images/lib/imagetoolbar.py 2009-08-24 05:13:27 +0000
+++ openlp/plugins/images/lib/imagetoolbar.py 1970-01-01 00:00:00 +0000
@@ -1,63 +0,0 @@
1# -*- coding: utf-8 -*-
2# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
3"""
4OpenLP - Open Source Lyrics Projection
5Copyright (c) 2008 Raoul Snyman
6Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley,
7
8This program is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free Software
10Foundation; version 2 of the License.
11
12This program is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License along with
17this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18Place, Suite 330, Boston, MA 02111-1307 USA
19"""
20import logging
21import os
22
23from PyQt4 import QtCore, QtGui
24from openlp.core.lib import OpenLPToolbar, translate, Receiver
25from openlp.core.ui.slidecontroller import MasterToolbar
26
27class ImageToolbar(MasterToolbar):
28
29 def __init__(self, parent, isLive):
30 MasterToolbar.__init__(self, isLive)
31 self.parent = parent
32 self.Toolbar = None
33 self.isLive = isLive
34
35 def defineZone5(self):
36 self.Toolbar.addSeparator()
37 self.Toolbar.addToolbarButton(u'Start Loop',
38 u':/media/media_time.png',
39 translate(u'SlideController', u'Start continuous loop'),
40 self.onStartLoop)
41 self.Toolbar.addToolbarButton(u'Stop Loop',
42 u':/media/media_stop.png',
43 translate(u'SlideController', u'Stop continuous loop'),
44 self.onStopLoop)
45 self.Toolbar.addSeparator()
46 self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar)
47 self.SpinWidget = QtGui.QWidgetAction(self.Toolbar)
48 self.SpinWidget.setDefaultWidget(self.DelaySpinBox)
49 self.Toolbar.addAction(self.SpinWidget)
50 self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay)
51 self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's'))
52
53 def onStartLoop(self):
54 """
55 Trigger the slide controller to start to loop passing the delay
56 """
57 Receiver().send_message(u'%sslide_start_loop' % self.prefix, self.DelaySpinBox.value())
58
59 def onStopLoop(self):
60 """
61 Trigger the slide controller to stop the loop
62 """
63 Receiver().send_message(u'%sslide_stop_loop' % self.prefix)
640
=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py 2009-08-25 05:18:09 +0000
+++ openlp/plugins/images/lib/mediaitem.py 2009-09-01 05:17:32 +0000
@@ -22,7 +22,6 @@
2222
23from PyQt4 import QtCore, QtGui23from PyQt4 import QtCore, QtGui
24from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon24from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon
25from openlp.plugins.images.lib.imagetoolbar import ImageToolbar
2625
27# We have to explicitly create separate classes for each plugin26# We have to explicitly create separate classes for each plugin
28# in order for DnD to the Service manager to work correctly.27# in order for DnD to the Service manager to work correctly.
@@ -56,9 +55,6 @@
56 self.ServiceItemIconName = u':/media/media_image.png'55 self.ServiceItemIconName = u':/media/media_image.png'
57 self.servicePath = None56 self.servicePath = None
58 MediaManagerItem.__init__(self, parent, icon, title)57 MediaManagerItem.__init__(self, parent, icon, title)
59 #create and install our own slide controller toolbar
60 imageToolbar = ImageToolbar(self, True)
61 parent.live_controller.registerToolbar(self.ConfigSection, imageToolbar)
6258
63 def initialise(self):59 def initialise(self):
64 self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)60 self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
@@ -99,6 +95,8 @@
9995
100 def generateSlideData(self, service_item):96 def generateSlideData(self, service_item):
101 items = self.ListView.selectedIndexes()97 items = self.ListView.selectedIndexes()
98 if len(items) == 0:
99 return False
102 service_item.title = u'Image(s)'100 service_item.title = u'Image(s)'
103 for item in items:101 for item in items:
104 bitem = self.ListView.item(item.row())102 bitem = self.ListView.item(item.row())
@@ -106,3 +104,4 @@
106 frame = QtGui.QImage(unicode(filename))104 frame = QtGui.QImage(unicode(filename))
107 (path, name) = os.path.split(filename)105 (path, name) = os.path.split(filename)
108 service_item.add_from_image(path, name, frame)106 service_item.add_from_image(path, name, frame)
107 return True
109108
=== modified file 'openlp/plugins/media/lib/mediaitem.py'
--- openlp/plugins/media/lib/mediaitem.py 2009-08-15 11:02:24 +0000
+++ openlp/plugins/media/lib/mediaitem.py 2009-08-31 21:53:35 +0000
@@ -100,12 +100,15 @@
100100
101 def generateSlideData(self, service_item):101 def generateSlideData(self, service_item):
102 indexes = self.ListView.selectedIndexes()102 indexes = self.ListView.selectedIndexes()
103 if len(items) > 1:
104 return False
103 service_item.title = u'Media'105 service_item.title = u'Media'
104 for index in indexes:106 for index in indexes:
105 filename = self.ListData.getFilename(index)107 filename = self.ListData.getFilename(index)
106 frame = QtGui.QImage(unicode(filename))108 frame = QtGui.QImage(unicode(filename))
107 (path, name) = os.path.split(filename)109 (path, name) = os.path.split(filename)
108 service_item.add_from_image(path, name, frame)110 service_item.add_from_image(path, name, frame)
111 return True
109112
110 def onPreviewClick(self):113 def onPreviewClick(self):
111 log.debug(u'Media Preview Button pressed')114 log.debug(u'Media Preview Button pressed')
112115
=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py 2009-08-11 19:21:52 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py 2009-08-31 21:53:35 +0000
@@ -43,7 +43,7 @@
43 self.controllers = controllers43 self.controllers = controllers
44 self.TranslationContext = u'PresentationPlugin'44 self.TranslationContext = u'PresentationPlugin'
45 self.PluginTextShort = u'Presentation'45 self.PluginTextShort = u'Presentation'
46 self.ConfigSection = u'presentation'46 self.ConfigSection = u'presentations'
47 self.hasFileIcon = True47 self.hasFileIcon = True
48 self.hasNewIcon = False48 self.hasNewIcon = False
49 self.hasEditIcon = False49 self.hasEditIcon = False
@@ -81,9 +81,6 @@
81 for item in self.controllers:81 for item in self.controllers:
82 #load the drop down selection82 #load the drop down selection
83 self.DisplayTypeComboBox.addItem(item)83 self.DisplayTypeComboBox.addItem(item)
84 #load the preview toolbars
85 #self.parent.preview_controller.registerToolbar(item, self.controllers[item])
86 #self.parent.live_controller.registerToolbar(item, self.controllers[item])
8784
88 def loadList(self, list):85 def loadList(self, list):
89 for file in list:86 for file in list:
@@ -102,11 +99,13 @@
10299
103 def generateSlideData(self, service_item):100 def generateSlideData(self, service_item):
104 items = self.ListView.selectedIndexes()101 items = self.ListView.selectedIndexes()
105 service_item.title = self.DisplayTypeComboBox.currentText()102 if len(items) > 1:
103 return False
104 service_item.title = unicode(self.DisplayTypeComboBox.currentText())
106 service_item.shortname = unicode(self.DisplayTypeComboBox.currentText())105 service_item.shortname = unicode(self.DisplayTypeComboBox.currentText())
107 for item in items:106 for item in items:
108 bitem = self.ListView.item(item.row())107 bitem = self.ListView.item(item.row())
109 filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())108 filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
110 frame = QtGui.QImage(unicode(filename))
111 (path, name) = os.path.split(filename)109 (path, name) = os.path.split(filename)
112 service_item.add_using_toolbar(path, name)110 service_item.add_from_command(path, name)
111 return True
113112
=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py 2009-08-26 05:00:19 +0000
+++ openlp/plugins/songs/lib/mediaitem.py 2009-08-31 21:53:35 +0000
@@ -68,15 +68,15 @@
68 ## Preview Song Button ##68 ## Preview Song Button ##
69 self.addToolbarButton(translate(u'SongMediaItem', u'Preview Song'),69 self.addToolbarButton(translate(u'SongMediaItem', u'Preview Song'),
70 translate(u'SongMediaItem', u'Preview the selected song'),70 translate(u'SongMediaItem', u'Preview the selected song'),
71 ':/system/system_preview.png', self.onSongPreviewClick, 'SongPreviewItem')71 ':/system/system_preview.png', self.onPreviewClick, 'SongPreviewItem')
72 ## Live Song Button ##72 ## Live Song Button ##
73 self.addToolbarButton(translate(u'SongMediaItem', u'Go Live'),73 self.addToolbarButton(translate(u'SongMediaItem', u'Go Live'),
74 translate(u'SongMediaItem', u'Send the selected song live'),74 translate(u'SongMediaItem', u'Send the selected song live'),
75 ':/system/system_live.png', self.onSongLiveClick, 'SongLiveItem')75 ':/system/system_live.png', self.onLiveClick, 'SongLiveItem')
76 ## Add Song Button ##76 ## Add Song Button ##
77 self.addToolbarButton(translate(u'SongMediaItem', u'Add Song To Service'),77 self.addToolbarButton(translate(u'SongMediaItem', u'Add Song To Service'),
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'),
79 ':/system/system_add.png', self.onSongAddClick, 'SongAddItem')79 ':/system/system_add.png', self.onAddClick, 'SongAddItem')
80 self.addToolbarSeparator()80 self.addToolbarSeparator()
81 ## Song Maintenance Button ##81 ## Song Maintenance Button ##
82 self.addToolbarButton(translate(u'SongMediaItem', u'Song Maintenance'),82 self.addToolbarButton(translate(u'SongMediaItem', u'Song Maintenance'),
@@ -127,7 +127,7 @@
127 QtCore.QObject.connect(self.SearchTextEdit,127 QtCore.QObject.connect(self.SearchTextEdit,
128 QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged)128 QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged)
129 QtCore.QObject.connect(self.ListView,129 QtCore.QObject.connect(self.ListView,
130 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick)130 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick)
131 QtCore.QObject.connect(Receiver.get_receiver(),131 QtCore.QObject.connect(Receiver.get_receiver(),
132 QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick)132 QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick)
133133
@@ -139,13 +139,13 @@
139 self.ListView.addAction(contextMenuSeparator(self.ListView))139 self.ListView.addAction(contextMenuSeparator(self.ListView))
140 self.ListView.addAction(contextMenuAction(self.ListView,140 self.ListView.addAction(contextMenuAction(self.ListView,
141 ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'),141 ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'),
142 self.onSongPreviewClick))142 self.onPreviewClick))
143 self.ListView.addAction(contextMenuAction(self.ListView,143 self.ListView.addAction(contextMenuAction(self.ListView,
144 ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'),144 ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'),
145 self.onSongLiveClick))145 self.onLiveClick))
146 self.ListView.addAction(contextMenuAction(self.ListView,146 self.ListView.addAction(contextMenuAction(self.ListView,
147 ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'),147 ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'),
148 self.onSongAddClick))148 self.onAddClick))
149149
150 def retranslateUi(self):150 def retranslateUi(self):
151 self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Search Type:'))151 self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Search Type:'))
@@ -246,12 +246,12 @@
246 self.parent.songmanager.delete_song(item_id)246 self.parent.songmanager.delete_song(item_id)
247 row = self.ListView.row(item)247 row = self.ListView.row(item)
248 self.ListView.takeItem(row)248 self.ListView.takeItem(row)
249249#
250 def onSongPreviewClick(self):250# def onSongPreviewClick(self):
251 service_item = ServiceItem(self.parent)251# service_item = ServiceItem(self.parent)
252 service_item.addIcon(u':/media/media_song.png')252# service_item.addIcon(u':/media/media_song.png')
253 self.generateSlideData(service_item)253# self.generateSlideData(service_item)
254 self.parent.preview_controller.addServiceItem(service_item)254# self.parent.preview_controller.addServiceItem(service_item)
255255
256 def generateSlideData(self, service_item):256 def generateSlideData(self, service_item):
257 raw_slides =[]257 raw_slides =[]
@@ -259,6 +259,8 @@
259 author_list = u''259 author_list = u''
260 ccl = u''260 ccl = u''
261 item = self.ListView.currentItem()261 item = self.ListView.currentItem()
262 if item is None:
263 return False
262 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]264 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
263 song = self.parent.songmanager.get_song(item_id)265 song = self.parent.songmanager.get_song(item_id)
264 service_item.theme = song.theme_name266 service_item.theme = song.theme_name
@@ -286,15 +288,16 @@
286 raw_footer.append(song.copyright )288 raw_footer.append(song.copyright )
287 raw_footer.append(unicode(translate(u'SongMediaItem', u'CCL Licence: ') + ccl ))289 raw_footer.append(unicode(translate(u'SongMediaItem', u'CCL Licence: ') + ccl ))
288 service_item.raw_footer = raw_footer290 service_item.raw_footer = raw_footer
289291 return True
290 def onSongLiveClick(self):292
291 service_item = ServiceItem(self.parent)293# def onSongLiveClick(self):
292 service_item.addIcon(u':/media/media_song.png')294# service_item = ServiceItem(self.parent)
293 self.generateSlideData(service_item)295# service_item.addIcon(u':/media/media_song.png')
294 self.parent.live_controller.addServiceItem(service_item)296# self.generateSlideData(service_item)
295297# self.parent.live_controller.addServiceItem(service_item)
296 def onSongAddClick(self):298#
297 service_item = ServiceItem(self.parent)299# def onSongAddClick(self):
298 service_item.addIcon( u':/media/media_song.png')300# service_item = ServiceItem(self.parent)
299 self.generateSlideData(service_item)301# service_item.addIcon( u':/media/media_song.png')
300 self.parent.service_manager.addServiceItem(service_item)302# self.generateSlideData(service_item)
303# self.parent.service_manager.addServiceItem(service_item)