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):
"""