diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 9bce2bcac..e4cdecd72 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -113,10 +113,10 @@ sup { document.getElementById('lyricsmain').style.visibility = lyrics; document.getElementById('image').style.visibility = lyrics; outline = document.getElementById('lyricsoutline') - if(outline!=null) + if(outline != null) outline.style.visibility = lyrics; shadow = document.getElementById('lyricsshadow') - if(shadow!=null) + if(shadow != null) shadow.style.visibility = lyrics; document.getElementById('footer').style.visibility = lyrics; } @@ -129,10 +129,28 @@ sup { var match = /-webkit-text-fill-color:[^;\"]+/gi; if(timer != null) clearTimeout(timer); + /* + QtWebkit bug with outlines and justify causing outline alignment + problems. (Bug 859950) Surround each word with a to workaround, + but only in this scenario. + */ + var txt = document.getElementById('lyricsmain'); + if(window.getComputedStyle(txt).textAlign == 'justify'){ + var outline = document.getElementById('lyricsoutline'); + if(outline != null) + txt = outline; + if(window.getComputedStyle(txt).webkitTextStrokeWidth != '0px'){ + newtext = newtext.replace(/(\s| )+(?![^<]*>)/g, + function(match) { + return '' + match + ''; + }); + newtext = '' + newtext + ''; + } + } text_fade('lyricsmain', newtext); text_fade('lyricsoutline', newtext); - text_fade('lyricsshadow', newtext.replace(match, "")); - if(text_opacity()==1) return; + text_fade('lyricsshadow', newtext.replace(match, '')); + if(text_opacity() == 1) return; timer = setTimeout(function(){ show_text(newtext); }, 100); @@ -149,18 +167,18 @@ sup { slides) still looks pretty and is zippy. */ var text = document.getElementById(id); - if(text==null) return; + if(text == null) return; if(!transition){ text.innerHTML = newtext; return; } - if(newtext==text.innerHTML){ + if(newtext == text.innerHTML){ text.style.opacity = parseFloat(text.style.opacity) + 0.3; - if(text.style.opacity>0.7) + if(text.style.opacity > 0.7) text.style.opacity = 1; } else { text.style.opacity = parseFloat(text.style.opacity) - 0.3; - if(text.style.opacity<=0.1){ + if(text.style.opacity <= 0.1){ text.innerHTML = newtext; } } @@ -172,7 +190,7 @@ sup { } function show_text_complete(){ - return (text_opacity()==1); + return (text_opacity() == 1); } diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 76e54ef8d..624ce2083 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -91,8 +91,9 @@ class Plugin(QtCore.QObject): ``checkPreConditions()`` Provides the Plugin with a handle to check if it can be loaded. - ``getMediaManagerItem()`` - Returns an instance of MediaManagerItem to be used in the Media Manager. + ``createMediaManagerItem()`` + Creates a new instance of MediaManagerItem to be used in the Media + Manager. ``addImportMenuItem(import_menu)`` Add an item to the Import menu. @@ -100,8 +101,8 @@ class Plugin(QtCore.QObject): ``addExportMenuItem(export_menu)`` Add an item to the Export menu. - ``getSettingsTab()`` - Returns an instance of SettingsTabItem to be used in the Settings + ``createSettingsTab()`` + Creates a new instance of SettingsTabItem to be used in the Settings dialog. ``addToMenu(menubar)`` @@ -156,10 +157,10 @@ class Plugin(QtCore.QObject): self.icon = None self.media_item_class = media_item_class self.settings_tab_class = settings_tab_class + self.settings_tab = None + self.mediaItem = None self.weight = 0 self.status = PluginStatus.Inactive - # Set up logging - self.log = logging.getLogger(self.name) self.previewController = plugin_helpers[u'preview'] self.liveController = plugin_helpers[u'live'] self.renderer = plugin_helpers[u'renderer'] @@ -178,7 +179,7 @@ class Plugin(QtCore.QObject): Provides the Plugin with a handle to check if it can be loaded. Failing Preconditions does not stop a settings Tab being created - Returns True or False. + Returns ``True`` or ``False``. """ return True @@ -210,15 +211,14 @@ class Plugin(QtCore.QObject): """ return self.status == PluginStatus.Active - def getMediaManagerItem(self): + def createMediaManagerItem(self): """ Construct a MediaManagerItem object with all the buttons and things - you need, and return it for integration into openlp.org. + you need, and return it for integration into OpenLP. """ if self.media_item_class: - return self.media_item_class(self.mediadock.media_dock, self, - self.icon) - return None + self.mediaItem = self.media_item_class(self.mediadock.media_dock, + self, self.icon) def addImportMenuItem(self, importMenu): """ @@ -247,16 +247,15 @@ class Plugin(QtCore.QObject): """ pass - def getSettingsTab(self, parent): + def createSettingsTab(self, parent): """ - Create a tab for the settings window to display the configurable - options for this plugin to the user. + Create a tab for the settings window to display the configurable options + for this plugin to the user. """ if self.settings_tab_class: - return self.settings_tab_class(parent, self.name, + self.settings_tab = self.settings_tab_class(parent, self.name, self.getString(StringContent.VisibleName)[u'title'], self.icon_path) - return None def addToMenu(self, menubar): """ diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index db5d9b60e..d63a37dde 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -90,7 +90,7 @@ class PluginManager(object): thisdepth = len(path.split(os.sep)) if thisdepth - startdepth > 2: # skip anything lower down - continue + break modulename = os.path.splitext(path)[0] prefix = os.path.commonprefix([self.basepath, path]) # hack off the plugin base path @@ -113,7 +113,7 @@ class PluginManager(object): plugin_objects.append(plugin) except TypeError: log.exception(u'Failed to load plugin %s', unicode(p)) - plugins_list = sorted(plugin_objects, self.order_by_weight) + plugins_list = sorted(plugin_objects, key=lambda plugin: plugin.weight) for plugin in plugins_list: if plugin.checkPreConditions(): log.debug(u'Plugin %s active', unicode(plugin.name)) @@ -122,29 +122,13 @@ class PluginManager(object): plugin.status = PluginStatus.Disabled self.plugins.append(plugin) - def order_by_weight(self, x, y): + def hook_media_manager(self): """ - Sort two plugins and order them by their weight. - - ``x`` - The first plugin. - - ``y`` - The second plugin. - """ - return cmp(x.weight, y.weight) - - def hook_media_manager(self, mediadock): - """ - Loop through all the plugins. If a plugin has a valid media manager - item, add it to the media manager. - - ``mediatoolbox`` - The Media Manager itself. + Create the plugins' media manager items. """ for plugin in self.plugins: if plugin.status is not PluginStatus.Disabled: - plugin.mediaItem = plugin.getMediaManagerItem() + plugin.createMediaManagerItem() def hook_settings_tabs(self, settings_form=None): """ @@ -152,14 +136,12 @@ class PluginManager(object): item, add it to the settings tab. Tabs are set for all plugins not just Active ones - ``settingsform`` + ``settings_form`` Defaults to *None*. The settings form to add tabs to. """ for plugin in self.plugins: if plugin.status is not PluginStatus.Disabled: - plugin.settings_tab = plugin.getSettingsTab(settings_form) - else: - plugin.settings_tab = None + plugin.createSettingsTab(settings_form) settings_form.plugins = self.plugins def hook_import_menu(self, import_menu): @@ -225,7 +207,7 @@ class PluginManager(object): def get_plugin_by_name(self, name): """ - Return the plugin which has a name with value ``name`` + Return the plugin which has a name with value ``name``. """ for plugin in self.plugins: if plugin.name == name: diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 0974f53fb..ab21a9c19 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -655,7 +655,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.pluginManager.hook_settings_tabs(self.settingsForm) # Find and insert media manager items log.info(u'hook media') - self.pluginManager.hook_media_manager(self.mediaDockManager) + self.pluginManager.hook_media_manager() # Call the hook method to pull in import menus. log.info(u'hook menus') self.pluginManager.hook_import_menu(self.fileImportMenu) diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index c4e3e7fa9..b58afeb1e 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -311,8 +311,13 @@ class MediaController(object): isValid = self.check_file_type(controller, display) display.override[u'theme'] = u'' display.override[u'video'] = True - controller.media_info.start_time = display.serviceItem.start_time - controller.media_info.end_time = display.serviceItem.end_time + if controller.media_info.is_background: + # ignore start/end time + controller.media_info.start_time = 0 + controller.media_info.end_time = 0 + else: + controller.media_info.start_time = display.serviceItem.start_time + controller.media_info.end_time = display.serviceItem.end_time elif controller.previewDisplay: display = controller.previewDisplay isValid = self.check_file_type(controller, display) diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index 97f749689..2825d899e 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -52,12 +52,12 @@ class MediaPlugin(Plugin): for ext in self.video_extensions_list: self.serviceManager.supportedSuffixes(ext[2:]) - def getSettingsTab(self, parent): + def createSettingsTab(self, parent): """ Create the settings Tab """ visible_name = self.getString(StringContent.VisibleName) - return MediaTab(parent, self.name, visible_name[u'title'], + self.settings_tab = MediaTab(parent, self.name, visible_name[u'title'], self.mediaController.mediaPlayers, self.icon_path) def about(self): diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 643ad14ad..e35659638 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -57,13 +57,13 @@ class PresentationPlugin(Plugin): self.icon_path = u':/plugins/plugin_presentations.png' self.icon = build_icon(self.icon_path) - def getSettingsTab(self, parent): + def createSettingsTab(self, parent): """ Create the settings Tab """ visible_name = self.getString(StringContent.VisibleName) - return PresentationTab(parent, self.name, visible_name[u'title'], - self.controllers, self.icon_path) + self.settings_tab = PresentationTab(parent, self.name, + visible_name[u'title'], self.controllers, self.icon_path) def initialise(self): """ @@ -94,11 +94,11 @@ class PresentationPlugin(Plugin): controller.kill() Plugin.finalise(self) - def getMediaManagerItem(self): + def createMediaManagerItem(self): """ Create the Media Manager List """ - return PresentationMediaItem( + self.mediaItem = PresentationMediaItem( self.mediadock.media_dock, self, self.icon, self.controllers) def registerControllers(self, controller): diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index c1566a639..776c3c88b 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -181,7 +181,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): plugin.status == PluginStatus.Active: self.audioAddFromMediaButton.setVisible(True) self.mediaForm.populateFiles( - plugin.getMediaManagerItem().getList(MediaType.Audio)) + plugin.mediaItem.getList(MediaType.Audio)) break def newSong(self): diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 5f310dba0..4bb91f58a 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -127,7 +127,7 @@ class SofImport(OooImport): self.processParagraphText(text) self.newSong() text = u'' - text += self.process_textportion(textportion) + text += self.processTextPortion(textportion) if textportion.BreakType in (PAGE_AFTER, PAGE_BOTH): self.processParagraphText(text) self.newSong() @@ -202,8 +202,8 @@ class SofImport(OooImport): if boldtext.isdigit() and self.songNumber == '': self.addSongNumber(boldtext) return u'' + text = self.uncapText(text) if self.title == u'': - text = self.uncap_text(text) self.addTitle(text) return text if text.strip().startswith(u'('): @@ -242,8 +242,12 @@ class SofImport(OooImport): self.songBook = u'Songs of Fellowship 2' elif int(song_no) <= 1690: self.songBook = u'Songs of Fellowship 3' - else: + elif int(song_no) <= 2200: self.songBook = u'Songs of Fellowship 4' + elif int(song_no) <= 2710: + self.songBook = u'Songs of Fellowship 5' + else: + self.songBook = u'Songs of Fellowship Other' def addTitle(self, text): """