diff --git a/openlp.pyw b/openlp.pyw index 4eda4d1e2..7c7f8f373 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -20,7 +20,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA """ import sys -import logging +import logging, logging.handlers +from optparse import OptionParser from PyQt4 import QtCore, QtGui @@ -28,9 +29,15 @@ from openlp.core.lib import Receiver from openlp.core.resources import * from openlp.core.ui import MainWindow, SplashScreen -logging.basicConfig(level=logging.DEBUG, - format=u'%(asctime)s:%(msecs)3d %(name)-15s %(levelname)-8s %(message)s', - datefmt=u'%m-%d %H:%M:%S', filename=u'openlp.log', filemode=u'w') +filename=u'openlp.log' +log = logging.getLogger() +log.setLevel(logging.INFO) + +logfile = logging.handlers.RotatingFileHandler(filename ,maxBytes=200000, backupCount=5) +logfile.setLevel(logging.DEBUG) +logfile.setFormatter(logging.Formatter(u'%(asctime)s %(name)-15s %(levelname)-8s %(message)s')) + +log.addHandler(logfile) class OpenLP(QtGui.QApplication): """ @@ -38,8 +45,7 @@ class OpenLP(QtGui.QApplication): class in order to provide the core of the application. """ global log - log = logging.getLogger(u'OpenLP Application') - log.info(u'Application Loaded') + log.info(u'OpenLP Application Loaded') def run(self): """ @@ -74,10 +80,19 @@ class OpenLP(QtGui.QApplication): self.splash.finish(self.mainWindow) sys.exit(app.exec_()) +def main(): + usage = "usage: %prog [options] arg1 arg2" + parser = OptionParser(usage=usage) + parser.add_option("-d", "--debug",dest="debug",action="store_true", + help="Switch on Debugging ") + (options, args) = parser.parse_args() + if options.debug is not None: + log.setLevel(logging.DEBUG) if __name__ == u'__main__': """ Instantiate and run the application. """ + main() app = OpenLP(sys.argv) #import cProfile #cProfile.run("app.run()", "profile.out") diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 430e4dbfb..12c1cca00 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -234,17 +234,20 @@ class MediaManagerItem(QtGui.QWidget): def onPreviewClick(self): log.debug(self.PluginTextShort+u' Preview Requested') service_item = self.buildServiceItem() - self.parent.preview_controller.addServiceItem(service_item) + if service_item is not None: + self.parent.preview_controller.addServiceItem(service_item) def onLiveClick(self): log.debug(self.PluginTextShort + u' Live Requested') service_item = self.buildServiceItem() - self.parent.live_controller.addServiceItem(service_item) + if service_item is not None: + self.parent.live_controller.addServiceItem(service_item) def onAddClick(self): log.debug(self.PluginTextShort+u' Add Requested') service_item = self.buildServiceItem() - self.parent.service_manager.addServiceItem(service_item) + if service_item is not None: + self.parent.service_manager.addServiceItem(service_item) def buildServiceItem(self): """ @@ -252,6 +255,8 @@ class MediaManagerItem(QtGui.QWidget): """ service_item = ServiceItem(self.parent) service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png') - self.generateSlideData(service_item) - self.ListView.clearSelection() - return service_item + if self.generateSlideData(service_item): + self.ListView.clearSelection() + return service_item + else: + return None diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index af4753f94..fd870a116 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -147,7 +147,8 @@ class Renderer(object): # print words verses = [] words = words.replace(u'\r\n', u'\n') - verses_text = words.split(u'\n\n') + verses_text = words.split(u'\n') + #print verses_text text = [] for verse in verses_text: lines = verse.split(u'\n') @@ -173,7 +174,10 @@ class Renderer(object): split_lines = [] count = 0 for line in text: -# print "C", line , len(line) + #print "C", line , len(line) + #Must be a blank line so keep it. + if len(line) == 0: + line = u' ' while len(line) > 0: # print "C1", line , len(line) if len(line) > ave_line_width: @@ -391,29 +395,8 @@ class Renderer(object): Defaults to *False*. Whether or not this is a live screen. """ x, y = tlcorner - # We draw the text to see how big it is and then iterate to make it fit - # when we line wrap we do in in the "lyrics" style, so the second line is - # right aligned with a "hanging indent" - #print "----------------------------" - #print line -# words = line.split(u' ') -# thisline = u' '.join(words) -# lastword = len(words) -# lines = [] maxx = self._rect.width(); maxy = self._rect.height(); -# while (len(words) > 0): -# w , h = self._get_extent_and_render(thisline, footer) -# print "m", w, h, x, maxx -# rhs = w + x -# if rhs < maxx - self._right_margin: -# lines.append(thisline) -# words = words[lastword:] -# thisline = ' '.join(words) -# lastword = len(words) -# else: -# lastword -= 1 -# thisline = ' '.join(words[:lastword]) lines = [] lines.append(line) startx = x diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index 6cb117b2b..2be7dfde4 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -58,7 +58,7 @@ class RenderManager(object): else: self.current_display = screen_number self.renderer = Renderer() - self.calculate_default(self.screen_list[self.current_display][u'size']) + #self.calculate_default(self.screen_list[self.current_display][u'size']) self.theme = u'' self.service_theme = u'' self.global_style = u'' @@ -133,6 +133,7 @@ class RenderManager(object): def build_text_rectangle(self, theme): """ Builds a text block using the settings in ``theme``. + One is needed per slide ``theme`` The theme to build a text block for. @@ -149,8 +150,8 @@ class RenderManager(object): footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, self.height-self.footer_start) else: footer_rect = QtCore.QRect(int(theme.font_footer_x),int(theme.font_footer_y), - int(theme.font_footer_width)-1, int(theme.font_footer_height)-1) - self.renderer.set_text_rectangle(main_rect,footer_rect) + int(theme.font_footer_width)-1, int(theme.font_footer_height) - 1) + self.renderer.set_text_rectangle(main_rect, footer_rect) def generate_preview(self, themedata): """ @@ -178,15 +179,15 @@ class RenderManager(object): def format_slide(self, words): """ - Calculate how much text can fid on a slide. + Calculate how much text can fit on a slide. ``words`` The words to go on the slides. """ log.debug(u'format slide') - self.calculate_default(self.screen_list[self.current_display][u'size']) + #self.calculate_default(self.screen_list[self.current_display][u'size']) self.build_text_rectangle(self.themedata) - self.renderer.set_frame_dest(self.width, self.height) + #self.renderer.set_frame_dest(self.width, self.height) return self.renderer.format_slide(words, False) def generate_slide(self, main_text, footer_text): @@ -200,7 +201,6 @@ class RenderManager(object): The text for the slide footer. """ log.debug(u'generate slide') - self.calculate_default(self.screen_list[self.current_display][u'size']) self.build_text_rectangle(self.themedata) self.renderer.set_frame_dest(self.width, self.height) return self.renderer.generate_frame_from_lines(main_text, footer_text) @@ -233,6 +233,7 @@ class RenderManager(object): The QWidget instance of the screen. """ log.debug(u'calculate default %s', screen) + #size fixed so reflects the preview size. if self.current_display == 0: self.width = 1024 self.height = 768 diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index a1985b427..1589d77b5 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -96,7 +96,6 @@ class ServiceItem(object): self.frames.append({u'title': slide[u'title'], u'image': frame}) elif self.service_item_type == ServiceType.Command: self.frames = self.service_frames - self.service_frames = [] elif self.service_item_type == ServiceType.Image: for slide in self.service_frames: slide[u'image'] = self.RenderManager.resize_image(slide[u'image']) @@ -135,7 +134,7 @@ class ServiceItem(object): frame_title = frame_title.split(u'\n')[0] self.service_frames.append({u'title': frame_title, u'raw_slide': raw_slide}) - def add_from_command(self, frame_title, command): + def add_from_command(self, path , frame_title): """ Add a slide from a command. @@ -146,7 +145,8 @@ class ServiceItem(object): The command of/for the slide. """ self.service_item_type = ServiceType.Command - self.service_frames.append({u'title': frame_title, u'command': command}) + self.service_item_path = path + self.service_frames.append({u'title': frame_title, u'command': None}) def get_oos_repr(self): """ @@ -168,6 +168,9 @@ class ServiceItem(object): elif self.service_item_type == ServiceType.Image: for slide in self.service_frames: oos_data.append(slide[u'title']) + elif self.service_item_type == ServiceType.Command: + for slide in self.service_frames: + oos_data.append(slide[u'title']) return {u'header': oos_header, u'data': oos_data} def set_from_oos(self, serviceitem, path=None): @@ -196,3 +199,7 @@ class ServiceItem(object): filename = os.path.join(path, text_image) real_image = QtGui.QImage(unicode(filename)) self.add_from_image(path, text_image, real_image) + elif self.service_item_type == ServiceType.Command: + for text_image in serviceitem[u'serviceitem'][u'data']: + filename = os.path.join(path, text_image) + self.add_from_command(path, text_image) diff --git a/openlp/core/ui/amendthemeform.py b/openlp/core/ui/amendthemeform.py index cf1914d0c..b821a5b1d 100644 --- a/openlp/core/ui/amendthemeform.py +++ b/openlp/core/ui/amendthemeform.py @@ -510,45 +510,60 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.VerticalComboBox.setCurrentIndex(int(self.theme.display_verticalAlign)) def stateChanging(self, theme): - if theme.background_type == u'solid': - self.Color1PushButton.setStyleSheet( - u'background-color: %s' % unicode(theme.background_color)) - self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:')) - self.Color1Label.setVisible(True) - self.Color1PushButton.setVisible(True) - self.Color2Label.setVisible(False) - self.Color2PushButton.setVisible(False) - self.ImageLabel.setVisible(False) - self.ImageLineEdit.setVisible(False) - self.ImageFilenameWidget.setVisible(False) - self.GradientLabel.setVisible(False) - self.GradientComboBox.setVisible(False) - elif theme.background_type == u'gradient': - self.Color1PushButton.setStyleSheet( - u'background-color: %s' % unicode(theme.background_startColor)) - self.Color2PushButton.setStyleSheet( - u'background-color: %s' % unicode(theme.background_endColor)) - self.Color1Label.setText(translate(u'ThemeManager', u'First Color:')) - self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:')) - self.Color1Label.setVisible(True) - self.Color1PushButton.setVisible(True) - self.Color2Label.setVisible(True) - self.Color2PushButton.setVisible(True) - self.ImageLabel.setVisible(False) - self.ImageLineEdit.setVisible(False) - self.ImageFilenameWidget.setVisible(False) - self.GradientLabel.setVisible(True) - self.GradientComboBox.setVisible(True) - else: # must be image - self.Color1Label.setVisible(False) - self.Color1PushButton.setVisible(False) - self.Color2Label.setVisible(False) - self.Color2PushButton.setVisible(False) - self.ImageLabel.setVisible(True) - self.ImageLineEdit.setVisible(True) - self.ImageFilenameWidget.setVisible(True) - self.GradientLabel.setVisible(False) - self.GradientComboBox.setVisible(False) + if theme.background_mode == u'transparent': + self.Color1Label.setVisible(False) + self.Color1PushButton.setVisible(False) + self.Color2Label.setVisible(False) + self.Color2PushButton.setVisible(False) + self.ImageLabel.setVisible(False) + self.ImageLineEdit.setVisible(False) + self.ImageFilenameWidget.setVisible(False) + self.GradientLabel.setVisible(False) + self.GradientComboBox.setVisible(False) + self.BackgroundTypeComboBox.setVisible(False) + self.BackgroundTypeLabel.setVisible(False) + else: + self.BackgroundTypeComboBox.setVisible(True) + self.BackgroundTypeLabel.setVisible(True) + if theme.background_type == u'solid': + self.Color1PushButton.setStyleSheet( + u'background-color: %s' % unicode(theme.background_color)) + self.Color1Label.setText(translate(u'ThemeManager', u'Background Color:')) + self.Color1Label.setVisible(True) + self.Color1PushButton.setVisible(True) + self.Color2Label.setVisible(False) + self.Color2PushButton.setVisible(False) + self.ImageLabel.setVisible(False) + self.ImageLineEdit.setVisible(False) + self.ImageFilenameWidget.setVisible(False) + self.GradientLabel.setVisible(False) + self.GradientComboBox.setVisible(False) + elif theme.background_type == u'gradient': + self.Color1PushButton.setStyleSheet( + u'background-color: %s' % unicode(theme.background_startColor)) + self.Color2PushButton.setStyleSheet( + u'background-color: %s' % unicode(theme.background_endColor)) + self.Color1Label.setText(translate(u'ThemeManager', u'First Color:')) + self.Color2Label.setText(translate(u'ThemeManager', u'Second Color:')) + self.Color1Label.setVisible(True) + self.Color1PushButton.setVisible(True) + self.Color2Label.setVisible(True) + self.Color2PushButton.setVisible(True) + self.ImageLabel.setVisible(False) + self.ImageLineEdit.setVisible(False) + self.ImageFilenameWidget.setVisible(False) + self.GradientLabel.setVisible(True) + self.GradientComboBox.setVisible(True) + else: # must be image + self.Color1Label.setVisible(False) + self.Color1PushButton.setVisible(False) + self.Color2Label.setVisible(False) + self.Color2PushButton.setVisible(False) + self.ImageLabel.setVisible(True) + self.ImageLineEdit.setVisible(True) + self.ImageFilenameWidget.setVisible(True) + self.GradientLabel.setVisible(False) + self.GradientComboBox.setVisible(False) if theme.font_main_override == False: self.FontMainXSpinBox.setEnabled(False) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index eaac4a3d2..3d5dddd65 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -25,7 +25,7 @@ import shutil from PyQt4 import QtCore, QtGui from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \ - RenderManager, translate, buildIcon, \ + RenderManager, translate, buildIcon, ServiceType, \ contextMenuAction, contextMenuSeparator, Receiver from openlp.core.utils import ConfigHelper @@ -341,7 +341,8 @@ class ServiceManager(QtGui.QWidget): zip = zipfile.ZipFile(unicode(filename) + u'.oos', 'w') for item in self.serviceItems: service.append({u'serviceitem':item[u'data'].get_oos_repr()}) - if item[u'data'].service_item_type == u'image': + if item[u'data'].service_item_type == ServiceType.Image or \ + item[u'data'].service_item_type == ServiceType.Command: for frame in item[u'data'].frames: path_from = unicode(item[u'data'].service_item_path + u'/' + frame[u'title']) zip.write(path_from) @@ -354,7 +355,7 @@ class ServiceManager(QtGui.QWidget): os.remove(servicefile) except: pass #if not present do not worry - self.parent.OosChanged(True, self.serviceName) + self.parent.OosChanged(True, filename + u'.oos') def onLoadService(self): """ @@ -368,31 +369,34 @@ class ServiceManager(QtGui.QWidget): name = filename.split(os.path.sep) if filename != u'': self.config.set_last_dir(filename) - zip = zipfile.ZipFile(unicode(filename)) - filexml = None - themename = None - for file in zip.namelist(): - names = file.split(os.path.sep) - file_to = os.path.join(self.servicePath, names[len(names) - 1]) - file_data = zip.read(file) - f = open(file_to, u'w') - f.write(file_data) - f.close() - if file_to.endswith(u'ood'): - p_file = file_to - f = open(p_file, u'r') - items = cPickle.load(f) - f.close() - self.onNewService() - for item in items: - serviceitem = ServiceItem() - serviceitem.RenderManager = self.parent.RenderManager - serviceitem.set_from_oos(item, self.servicePath ) - self.addServiceItem(serviceitem) try: - os.remove(p_file) + zip = zipfile.ZipFile(unicode(filename)) + filexml = None + themename = None + for file in zip.namelist(): + names = file.split(os.path.sep) + file_to = os.path.join(self.servicePath, names[len(names) - 1]) + file_data = zip.read(file) + f = open(file_to, u'w') + f.write(file_data) + f.close() + if file_to.endswith(u'ood'): + p_file = file_to + f = open(p_file, u'r') + items = cPickle.load(f) + f.close() + self.onNewService() + for item in items: + serviceitem = ServiceItem() + serviceitem.RenderManager = self.parent.RenderManager + serviceitem.set_from_oos(item, self.servicePath ) + self.addServiceItem(serviceitem) + try: + os.remove(p_file) + except: + #if not present do not worry + pass except: - #if not present do not worry pass self.serviceName = name[len(name) - 1] self.parent.OosChanged(True, self.serviceName) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 4b6da2caf..1005a568a 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -228,6 +228,7 @@ class SlideController(QtGui.QWidget): request the correct the toolbar of the plugin Called by plugins """ + log.debug(u'addServiceItem') item.render() self.enableToolBar(item) self.displayServiceManagerItems(item, 0) @@ -238,6 +239,7 @@ class SlideController(QtGui.QWidget): request the correct the toolbar of the plugin Called by ServiceManager """ + log.debug(u'addServiceItem') self.enableToolBar(item) self.displayServiceManagerItems(item, slideno) @@ -246,7 +248,7 @@ class SlideController(QtGui.QWidget): Loads a ServiceItem into the system from ServiceManager Display the slide number passed """ - log.debug(u'add Service Manager Item') + log.debug(u'displayServiceManagerItems Start') self.serviceitem = serviceitem slide_pixmap = QtGui.QPixmap.fromImage(self.serviceitem.frames[0][u'image']) slide_width = 300 @@ -273,6 +275,7 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.selectRow(slideno) self.onSlideSelected() self.PreviewListWidget.setFocus() + log.debug(u'displayServiceManagerItems End') #Screen event methods def onSlideSelectedFirst(self): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 791a8f54b..bd5b057f5 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -341,8 +341,10 @@ class BibleMediaItem(MediaManagerItem): def generateSlideData(self, service_item): log.debug(u'generating slide data') items = self.ListView.selectedIndexes() + if len(items) ==0: + return False old_chapter = u'' - raw_slides=[] + raw_slides = [] raw_footer = [] bible_text = u'' for item in items: @@ -389,6 +391,7 @@ class BibleMediaItem(MediaManagerItem): for slide in raw_slides: service_item.add_from_text(slide[:30], slide) service_item.raw_footer = raw_footer + return True def formatVerse(self, old_chapter, chapter, verse, opening, closing): loc = opening @@ -432,27 +435,30 @@ class BibleMediaItem(MediaManagerItem): combo.addItem(unicode(i)) def displayResults(self, bible): - for verse in self.search_results: + for count, verse in enumerate(self.search_results): bible_text = u' %s %d:%d (%s)' % (verse.book.name, verse.chapter, verse.verse, bible) bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(bible_text)) self.ListView.addItem(bible_verse) + cr = self.ListView.setCurrentRow(count) + if cr is not None: + cr.setSelected(True) def searchByReference(self, bible, search): log.debug(u'searchByReference %s ,%s', bible, search) - book = '' - start_chapter = '' - end_chapter = '' - start_verse = '' - end_verse = '' + book = u'' + start_chapter = u'' + end_chapter = u'' + start_verse = u'' + end_verse = u'' search = search.replace(u' ', u' ').strip() original = search message = None # Remove book beware 0 index arrays for i in range (len(search)-1, 0, - 1): - if search[i] == ' ': + if search[i] == u' ': book = search[:i] # remove book from string search = search[i:] @@ -466,7 +472,7 @@ class BibleMediaItem(MediaManagerItem): # number : found i = search.rfind(u' ') if i == -1: - chapter = '' + chapter = u'' else: chapter = search[i:len(search)] hyphen = chapter.find(u'-') @@ -493,29 +499,25 @@ class BibleMediaItem(MediaManagerItem): end_verse = start_verse else: sp1 = sp[1].split(u':') - #print "2nd details", sp1, len(sp1) if len(sp1) == 1: end_chapter = start_chapter end_verse = sp1[0] else: end_chapter = sp1[0] end_verse = sp1[1] - #print 'search = ' + unicode(original) - #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse) - if end_chapter == '': + if end_chapter == u'': end_chapter = start_chapter.rstrip() - if start_verse == '': - if end_verse == '': + if start_verse == u'': + if end_verse == u'': start_verse = 1 else: start_verse = end_verse - if end_verse == '': + if end_verse == u'': end_verse = 99 - if start_chapter == '': + if start_chapter == u'': message = u'No chapter found for search criteria' - #print 'message = ' + unicode(message) - #print 'search = ' + unicode(original) - #print 'results = ' + unicode(book) + ' @ '+ unicode(start_chapter)+' @ '+ unicode(end_chapter)+' @ '+ unicode(start_verse)+ ' @ '+ unicode(end_verse) + log.debug(u'results = %s @ %s : %s @ %s : %s'% \ + (unicode(book), unicode(start_chapter), unicode(end_chapter), unicode(start_verse), unicode(end_verse))) if message == None: self.search_results = None self.search_results = self.parent.biblemanager.get_verse_text(bible, book, diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index d718ec1a2..d264d52d4 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -68,17 +68,17 @@ class CustomMediaItem(MediaManagerItem): self.addToolbarButton( translate(u'CustomMediaItem',u'Preview Custom Item'), translate(u'CustomMediaItem',u'Preview the selected Custom Item'), - u':/system/system_preview.png', self.onCustomPreviewClick, u'CustomPreviewItem') + u':/system/system_preview.png', self.onPreviewClick, u'CustomPreviewItem') ## Live Custom Button ## self.addToolbarButton( translate(u'CustomMediaItem',u'Go Live'), translate(u'CustomMediaItem', u'Send the selected Custom live'), - u':/system/system_live.png', self.onCustomLiveClick, u'CustomLiveItem') + u':/system/system_live.png', self.onLiveClick, u'CustomLiveItem') ## Add Custom Button ## self.addToolbarButton( translate(u'CustomMediaItem',u'Add Custom To Service'), translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'), - u':/system/system_add.png', self.onCustomAddClick, u'CustomAddItem') + u':/system/system_add.png', self.onAddClick, u'CustomAddItem') # Add the CustomListView widget self.CustomWidget = QtGui.QWidget(self) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) @@ -95,7 +95,7 @@ class CustomMediaItem(MediaManagerItem): self.PageLayout.addWidget(self.ListView) # Signals QtCore.QObject.connect(self.ListView, - QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick) + QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) #define and add the context menu self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.ListView.addAction(contextMenuAction(self.ListView, @@ -104,13 +104,13 @@ class CustomMediaItem(MediaManagerItem): self.ListView.addAction(contextMenuSeparator(self.ListView)) self.ListView.addAction(contextMenuAction( self.ListView, ':/system/system_preview.png', - translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick)) + translate(u'CustomMediaItem',u'&Preview Custom'), self.onPreviewClick)) self.ListView.addAction(contextMenuAction( self.ListView, ':/system/system_live.png', - translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick)) + translate(u'CustomMediaItem',u'&Show Live'), self.onLiveClick)) self.ListView.addAction(contextMenuAction( self.ListView, ':/system/system_add.png', - translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick)) + translate(u'CustomMediaItem',u'&Add to Service'), self.onAddClick)) def initialise(self): self.loadCustomListView(self.parent.custommanager.get_all_slides()) @@ -143,33 +143,14 @@ class CustomMediaItem(MediaManagerItem): row = self.ListView.row(item) self.ListView.takeItem(row) - def onCustomPreviewClick(self): - log.debug(u'Custom Preview Requested') - service_item = ServiceItem(self.parent) - service_item.addIcon(u':/media/media_song.png') - self.generateSlideData(service_item) - self.parent.preview_controller.addServiceItem(service_item) - - def onCustomLiveClick(self): - log.debug(u'Custom Live Requested') - service_item = ServiceItem(self.parent) - service_item.addIcon(u':/media/media_song.png') - self.generateSlideData(service_item) - self.parent.live_controller.addServiceItem(service_item) - - def onCustomAddClick(self): - log.debug(u'Custom Add Requested') - service_item = ServiceItem(self.parent) - service_item.addIcon(u':/media/media_song.png') - self.generateSlideData(service_item) - self.parent.service_manager.addServiceItem(service_item) - def generateSlideData(self, service_item): raw_slides =[] raw_footer = [] slide = None theme = None item = self.ListView.currentItem() + if item is None: + return False item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] customSlide = self.parent.custommanager.get_custom(item_id) title = customSlide.title @@ -187,3 +168,4 @@ class CustomMediaItem(MediaManagerItem): for slide in raw_slides: service_item.add_from_text(slide[:30], slide) service_item.raw_footer = raw_footer + return True diff --git a/openlp/plugins/images/lib/imagetoolbar.py b/openlp/plugins/images/lib/imagetoolbar.py deleted file mode 100644 index 7d37bfe81..000000000 --- a/openlp/plugins/images/lib/imagetoolbar.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 -""" -OpenLP - Open Source Lyrics Projection -Copyright (c) 2008 Raoul Snyman -Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA -""" -import logging -import os - -from PyQt4 import QtCore, QtGui -from openlp.core.lib import OpenLPToolbar, translate, Receiver -from openlp.core.ui.slidecontroller import MasterToolbar - -class ImageToolbar(MasterToolbar): - - def __init__(self, parent, isLive): - MasterToolbar.__init__(self, isLive) - self.parent = parent - self.Toolbar = None - self.isLive = isLive - - def defineZone5(self): - self.Toolbar.addSeparator() - self.Toolbar.addToolbarButton(u'Start Loop', - u':/media/media_time.png', - translate(u'SlideController', u'Start continuous loop'), - self.onStartLoop) - self.Toolbar.addToolbarButton(u'Stop Loop', - u':/media/media_stop.png', - translate(u'SlideController', u'Stop continuous loop'), - self.onStopLoop) - self.Toolbar.addSeparator() - self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar) - self.SpinWidget = QtGui.QWidgetAction(self.Toolbar) - self.SpinWidget.setDefaultWidget(self.DelaySpinBox) - self.Toolbar.addAction(self.SpinWidget) - self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay) - self.DelaySpinBox.setSuffix(translate(u'ImageSlideController', u's')) - - def onStartLoop(self): - """ - Trigger the slide controller to start to loop passing the delay - """ - Receiver().send_message(u'%sslide_start_loop' % self.prefix, self.DelaySpinBox.value()) - - def onStopLoop(self): - """ - Trigger the slide controller to stop the loop - """ - Receiver().send_message(u'%sslide_stop_loop' % self.prefix) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 93c714c1d..467ab20e2 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -95,6 +95,8 @@ class ImageMediaItem(MediaManagerItem): def generateSlideData(self, service_item): items = self.ListView.selectedIndexes() + if len(items) == 0: + return False service_item.title = u'Image(s)' for item in items: bitem = self.ListView.item(item.row()) @@ -102,3 +104,4 @@ class ImageMediaItem(MediaManagerItem): frame = QtGui.QImage(unicode(filename)) (path, name) = os.path.split(filename) service_item.add_from_image(path, name, frame) + return True diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 4033b3c30..47efa22ab 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -100,12 +100,15 @@ class MediaMediaItem(MediaManagerItem): def generateSlideData(self, service_item): indexes = self.ListView.selectedIndexes() + if len(items) > 1: + return False service_item.title = u'Media' for index in indexes: filename = self.ListData.getFilename(index) frame = QtGui.QImage(unicode(filename)) (path, name) = os.path.split(filename) service_item.add_from_image(path, name, frame) + return True def onPreviewClick(self): log.debug(u'Media Preview Button pressed') diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index d65516e37..90f1bc580 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -43,7 +43,7 @@ class PresentationMediaItem(MediaManagerItem): self.controllers = controllers self.TranslationContext = u'PresentationPlugin' self.PluginTextShort = u'Presentation' - self.ConfigSection = u'presentation' + self.ConfigSection = u'presentations' self.hasFileIcon = True self.hasNewIcon = False self.hasEditIcon = False @@ -81,9 +81,6 @@ class PresentationMediaItem(MediaManagerItem): for item in self.controllers: #load the drop down selection self.DisplayTypeComboBox.addItem(item) - #load the preview toolbars - #self.parent.preview_controller.registerToolbar(item, self.controllers[item]) - #self.parent.live_controller.registerToolbar(item, self.controllers[item]) def loadList(self, list): for file in list: @@ -102,11 +99,13 @@ class PresentationMediaItem(MediaManagerItem): def generateSlideData(self, service_item): items = self.ListView.selectedIndexes() - service_item.title = self.DisplayTypeComboBox.currentText() + if len(items) > 1: + return False + service_item.title = unicode(self.DisplayTypeComboBox.currentText()) service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) for item in items: bitem = self.ListView.item(item.row()) filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) - frame = QtGui.QImage(unicode(filename)) (path, name) = os.path.split(filename) - service_item.add_using_toolbar(path, name) + service_item.add_from_command(path, name) + return True diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index e28a4ffac..53da29df8 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -68,15 +68,15 @@ class SongMediaItem(MediaManagerItem): ## Preview Song Button ## self.addToolbarButton(translate(u'SongMediaItem', u'Preview Song'), translate(u'SongMediaItem', u'Preview the selected song'), - ':/system/system_preview.png', self.onSongPreviewClick, 'SongPreviewItem') + ':/system/system_preview.png', self.onPreviewClick, 'SongPreviewItem') ## Live Song Button ## self.addToolbarButton(translate(u'SongMediaItem', u'Go Live'), translate(u'SongMediaItem', u'Send the selected song live'), - ':/system/system_live.png', self.onSongLiveClick, 'SongLiveItem') + ':/system/system_live.png', self.onLiveClick, 'SongLiveItem') ## Add Song Button ## self.addToolbarButton(translate(u'SongMediaItem', u'Add Song To Service'), translate(u'SongMediaItem', u'Add the selected song(s) to the service'), - ':/system/system_add.png', self.onSongAddClick, 'SongAddItem') + ':/system/system_add.png', self.onAddClick, 'SongAddItem') self.addToolbarSeparator() ## Song Maintenance Button ## self.addToolbarButton(translate(u'SongMediaItem', u'Song Maintenance'), @@ -127,7 +127,7 @@ class SongMediaItem(MediaManagerItem): QtCore.QObject.connect(self.SearchTextEdit, QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged) QtCore.QObject.connect(self.ListView, - QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick) + QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'load_song_list'), self.onSearchTextButtonClick) @@ -139,13 +139,13 @@ class SongMediaItem(MediaManagerItem): self.ListView.addAction(contextMenuSeparator(self.ListView)) self.ListView.addAction(contextMenuAction(self.ListView, ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'), - self.onSongPreviewClick)) + self.onPreviewClick)) self.ListView.addAction(contextMenuAction(self.ListView, ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'), - self.onSongLiveClick)) + self.onLiveClick)) self.ListView.addAction(contextMenuAction(self.ListView, ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'), - self.onSongAddClick)) + self.onAddClick)) def retranslateUi(self): self.SearchTypeLabel.setText(translate(u'SongMediaItem', u'Search Type:')) @@ -246,12 +246,12 @@ class SongMediaItem(MediaManagerItem): self.parent.songmanager.delete_song(item_id) row = self.ListView.row(item) self.ListView.takeItem(row) - - def onSongPreviewClick(self): - service_item = ServiceItem(self.parent) - service_item.addIcon(u':/media/media_song.png') - self.generateSlideData(service_item) - self.parent.preview_controller.addServiceItem(service_item) +# +# def onSongPreviewClick(self): +# service_item = ServiceItem(self.parent) +# service_item.addIcon(u':/media/media_song.png') +# self.generateSlideData(service_item) +# self.parent.preview_controller.addServiceItem(service_item) def generateSlideData(self, service_item): raw_slides =[] @@ -259,6 +259,8 @@ class SongMediaItem(MediaManagerItem): author_list = u'' ccl = u'' item = self.ListView.currentItem() + if item is None: + return False item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] song = self.parent.songmanager.get_song(item_id) service_item.theme = song.theme_name @@ -286,15 +288,16 @@ class SongMediaItem(MediaManagerItem): raw_footer.append(song.copyright ) raw_footer.append(unicode(translate(u'SongMediaItem', u'CCL Licence: ') + ccl )) service_item.raw_footer = raw_footer + return True - def onSongLiveClick(self): - service_item = ServiceItem(self.parent) - service_item.addIcon(u':/media/media_song.png') - self.generateSlideData(service_item) - self.parent.live_controller.addServiceItem(service_item) - - def onSongAddClick(self): - service_item = ServiceItem(self.parent) - service_item.addIcon( u':/media/media_song.png') - self.generateSlideData(service_item) - self.parent.service_manager.addServiceItem(service_item) +# def onSongLiveClick(self): +# service_item = ServiceItem(self.parent) +# service_item.addIcon(u':/media/media_song.png') +# self.generateSlideData(service_item) +# self.parent.live_controller.addServiceItem(service_item) +# +# def onSongAddClick(self): +# service_item = ServiceItem(self.parent) +# service_item.addIcon( u':/media/media_song.png') +# self.generateSlideData(service_item) +# self.parent.service_manager.addServiceItem(service_item)