diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 764875f4f..a25205c82 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -81,7 +81,8 @@ class ServiceItem(object): self.notes = u'' self.from_plugin = False self.capabilities = [] - self.isValid = True + self.is_valid = True + self.cache = [] def add_capability(self, capability): self.capabilities.append(capability) @@ -107,6 +108,7 @@ class ServiceItem(object): """ log.debug(u'Render called') self._display_frames = [] + self.cache = [] if self.service_item_type == ServiceItemType.Text: log.debug(u'Formatting slides') if self.theme is None: @@ -125,6 +127,7 @@ class ServiceItem(object): lines += line + u'\n' self._display_frames.append({u'title': title, \ u'text': lines.rstrip(), u'verseTag': slide[u'verseTag'] }) + self.cache.insert(len(self._display_frames), None) log.log(15, u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Image: for slide in self._raw_frames: @@ -149,11 +152,15 @@ class ServiceItem(object): self.RenderManager.set_override_theme(self.theme) format = self._display_frames[row][u'text'].split(u'\n') #if screen blank then do not display footer - if format[0]: - frame = self.RenderManager.generate_slide(format, - self.raw_footer) + if self.cache[row] is not None: + frame = self.cache[row] else: - frame = self.RenderManager.generate_slide(format,u'') + if format[0]: + frame = self.RenderManager.generate_slide(format, + self.raw_footer) + else: + frame = self.RenderManager.generate_slide(format,u'') + self.cache[row] = frame return frame def add_from_image(self, path, title, image): @@ -336,4 +343,3 @@ class ServiceItem(object): Returns the title of the raw frame """ return self._raw_frames[row][u'path'] - diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index de1401d56..d6b987db4 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -53,7 +53,7 @@ class SettingsManager(object): self.slidecontroller_image = self.slidecontroller - 50 self.showPreviewPanel = QtCore.QSettings().value( - u'user interface/preview panel', True).toBool() + u'user interface/preview panel', QtCore.QVariant(True)).toBool() def togglePreviewPanel(self, isVisible): QtCore.QSettings().setValue(u'user interface/preview panel', diff --git a/openlp/core/ui/aboutform.py b/openlp/core/ui/aboutform.py index cf051722b..c79324515 100644 --- a/openlp/core/ui/aboutform.py +++ b/openlp/core/ui/aboutform.py @@ -26,7 +26,6 @@ from PyQt4 import QtCore, QtGui from aboutdialog import Ui_AboutDialog -from openlp.core.lib import translate class AboutForm(QtGui.QDialog, Ui_AboutDialog): """ diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index af52e5ffd..4b2c4d268 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -118,7 +118,11 @@ class MainDisplay(DisplayWidget): DisplayWidget.__init__(self, parent) self.parent = parent self.setWindowTitle(u'OpenLP Display') - self.setAttribute(QtCore.Qt.WA_TranslucentBackground) + # WA_TranslucentBackground is not available in QT4.4 + try: + self.setAttribute(QtCore.Qt.WA_TranslucentBackground) + except AttributeError: + pass self.screens = screens self.display_image = QtGui.QLabel(self) self.display_image.setScaledContents(True) @@ -340,8 +344,14 @@ class VideoDisplay(Phonon.VideoWidget): self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) Phonon.createPath(self.mediaObject, self) Phonon.createPath(self.mediaObject, self.audioObject) - self.setWindowFlags(QtCore.Qt.WindowStaysOnBottomHint | - QtCore.Qt.FramelessWindowHint | QtCore.Qt.Dialog) + flags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Dialog + # WindowsStaysOnBottomHint is not available in QT4.4 + try: + flags = flags | QtCore.Qt.WindowStaysOnBottomHint + except AttributeError: + pass + self.setWindowFlags(flags) + QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'maindisplay_hide'), self.mediaHide) QtCore.QObject.connect(Receiver.get_receiver(), diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index de8da9b66..4432eb9c0 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -260,15 +260,14 @@ class Ui_MainWindow(object): qmList = LanguageManager.get_qm_list() savedLanguage = LanguageManager.get_language() self.AutoLanguageItem.setChecked(LanguageManager.AutoLanguage) - self.LanguageItem = {} - for key in qmList.keys(): - self.LanguageItem[key] = QtGui.QAction(MainWindow) - self.LanguageItem[key].setObjectName(key) - self.LanguageItem[key].setCheckable(True) - self.LanguageItem[key].setDisabled(LanguageManager.AutoLanguage) + for key in sorted(qmList.keys()): + languageItem = QtGui.QAction(MainWindow) + languageItem.setObjectName(key) + languageItem.setCheckable(True) if qmList[key] == savedLanguage: - self.LanguageItem[key].setChecked(True) - add_actions(self.LanguageGroup, [self.LanguageItem[key]]) + languageItem.setChecked(True) + add_actions(self.LanguageGroup, [languageItem]) + self.LanguageGroup.setDisabled(LanguageManager.AutoLanguage) self.ToolsAddToolItem = QtGui.QAction(MainWindow) AddToolIcon = build_icon(u':/tools/tools_add.png') self.ToolsAddToolItem.setIcon(AddToolIcon) @@ -296,8 +295,7 @@ class Ui_MainWindow(object): self.ViewThemeManagerItem, None, self.action_Preview_Panel)) #i18n add Language Actions add_actions(self.OptionsLanguageMenu, (self.AutoLanguageItem, None)) - for item in sorted(self.LanguageItem): - add_actions(self.OptionsLanguageMenu, [self.LanguageItem[item]]) + add_actions(self.OptionsLanguageMenu, self.LanguageGroup.actions()) add_actions(self.OptionsMenu, (self.OptionsLanguageMenu.menuAction(), self.OptionsViewMenu.menuAction(), None, self.OptionsSettingsItem)) add_actions(self.ToolsMenu, @@ -417,10 +415,10 @@ class Ui_MainWindow(object): self.AutoLanguageItem.setText(translate('MainWindow', '&Auto Detect')) self.AutoLanguageItem.setStatusTip( translate('MainWindow', 'Choose System language, if available')) - for item in self.LanguageItem: - self.LanguageItem[item].setText(self.LanguageItem[item].objectName()) - self.LanguageItem[item].setStatusTip( - translate('MainWindow', 'Set the interface language to %1').arg(self.LanguageItem[item].objectName())) + for item in self.LanguageGroup.actions(): + item.setText(item.objectName()) + item.setStatusTip( + translate('MainWindow', 'Set the interface language to %1').arg(item.objectName())) self.ToolsAddToolItem.setText(translate('MainWindow', 'Add &Tool...')) self.ToolsAddToolItem.setStatusTip( translate('MainWindow', 'Add an application to the list of tools')) @@ -575,8 +573,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): #i18n def setAutoLanguage(self, value): - for action in self.LanguageGroup.actions(): - action.setDisabled(value) + self.LanguageGroup.setDisabled(value) LanguageManager.AutoLanguage = value LanguageManager.set_language(self.LanguageGroup.checkedAction()) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 19c4e01b5..69dd915d2 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -61,9 +61,10 @@ class ScreenList(object): """ Set up the current screen dimensions """ - log.debug(u'set_override_display %s', number, ) + log.debug(u'set_current_display %s', number, ) if number + 1 > self.display_count: self.current = self.screen_list[0] + self.override = copy.deepcopy(self.current) self.current_display = 0 else: self.current = self.screen_list[number] diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 3a35a7a58..c5fa0b73c 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -499,7 +499,7 @@ class ServiceManager(QtGui.QWidget): for itemcount, item in enumerate(self.serviceItems): serviceitem = item[u'service_item'] treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList) - if serviceitem.isValid: + if serviceitem.is_valid: if serviceitem.notes: icon = QtGui.QImage(serviceitem.icon) icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, @@ -685,7 +685,7 @@ class ServiceManager(QtGui.QWidget): if serviceItem.is_command(): type = serviceItem._raw_frames[0][u'title'].split(u'.')[1] if type not in self.suffixes: - serviceItem.isValid = False + serviceItem.is_valid = False def cleanUp(self): """ @@ -769,7 +769,7 @@ class ServiceManager(QtGui.QWidget): Send the current item to the Preview slide controller """ item, count = self.findServiceItem() - if self.serviceItems[item][u'service_item'].isValid: + if self.serviceItems[item][u'service_item'].is_valid: self.parent.PreviewController.addServiceManagerItem( self.serviceItems[item][u'service_item'], count) else: @@ -796,7 +796,7 @@ class ServiceManager(QtGui.QWidget): Send the current item to the Live slide controller """ item, count = self.findServiceItem() - if self.serviceItems[item][u'service_item'].isValid: + if self.serviceItems[item][u'service_item'].is_valid: self.parent.LiveController.addServiceManagerItem( self.serviceItems[item][u'service_item'], count) if QtCore.QSettings().value( @@ -963,4 +963,4 @@ class ServiceManager(QtGui.QWidget): data_item[u'notes'] = unicode(service_item.notes) data_item[u'selected'] = (item == curitem) data.append(data_item) - Receiver.send_message(u'servicemanager_list_response', data) + Receiver.send_message(u'servicemanager_list_response', data) \ No newline at end of file diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 15502423b..37e0cf59a 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -36,6 +36,24 @@ ItemCapabilities log = logging.getLogger(__name__) +class SlideThread(QtCore.QThread): + """ + A special Qt thread class to speed up the display of text based frames. + This is threaded so it loads the frames in background + """ + def __init__(self, parent, prefix, count): + QtCore.QThread.__init__(self, parent) + self.prefix = prefix + self.count = count + + def run(self): + """ + Run the thread. + """ + time.sleep(1) + for i in range(0, self.count): + Receiver.send_message(u'%s_slide_cache' % self.prefix, i) + class SlideList(QtGui.QTableWidget): """ Customised version of QTableWidget which can respond to keyboard @@ -44,7 +62,7 @@ class SlideList(QtGui.QTableWidget): def __init__(self, parent=None, name=None): QtGui.QTableWidget.__init__(self, parent.Controller) self.parent = parent - self.hotkey_map = { + self.hotkeyMap = { QtCore.Qt.Key_Return: 'servicemanager_next_item', QtCore.Qt.Key_Space: 'slidecontroller_live_next_noloop', QtCore.Qt.Key_Enter: 'slidecontroller_live_next_noloop', @@ -66,8 +84,8 @@ class SlideList(QtGui.QTableWidget): elif event.key() == QtCore.Qt.Key_PageDown: self.parent.onSlideSelectedLast() event.accept() - elif event.key() in self.hotkey_map and self.parent.isLive: - Receiver.send_message(self.hotkey_map[event.key()]) + elif event.key() in self.hotkeyMap and self.parent.isLive: + Receiver.send_message(self.hotkeyMap[event.key()]) event.accept() event.ignore() else: @@ -87,13 +105,13 @@ class SlideController(QtGui.QWidget): self.isLive = isLive self.parent = parent self.mainDisplay = self.parent.displayManager.mainDisplay - self.loop_list = [ + self.loopList = [ u'Start Loop', u'Stop Loop', u'Loop Separator', u'Image SpinBox' ] - self.song_edit_list = [ + self.songEditList = [ u'Edit Song', ] if isLive: @@ -115,11 +133,11 @@ class SlideController(QtGui.QWidget): if self.isLive: self.TypeLabel.setText(self.trUtf8('Live')) self.split = 1 - self.type_prefix = u'live' + self.typePrefix = u'live' else: self.TypeLabel.setText(self.trUtf8('Preview')) self.split = 0 - self.type_prefix = u'preview' + self.typePrefix = u'preview' self.TypeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;') self.TypeLabel.setAlignment(QtCore.Qt.AlignCenter) self.PanelLayout.addWidget(self.TypeLabel) @@ -309,51 +327,53 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'slidecontroller_live_spin_delay'), self.receiveSpinDelay) if isLive: - self.Toolbar.makeWidgetsInvisible(self.loop_list) + self.Toolbar.makeWidgetsInvisible(self.loopList) else: - self.Toolbar.makeWidgetsInvisible(self.song_edit_list) + self.Toolbar.makeWidgetsInvisible(self.songEditList) self.Mediabar.setVisible(False) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), self.onStopLoop) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_first' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_first' % self.typePrefix), self.onSlideSelectedFirst) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_next' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_next' % self.typePrefix), self.onSlideSelectedNext) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.typePrefix), self.onSlideSelectedPrevious) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_next_noloop' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_next_noloop' % self.typePrefix), self.onSlideSelectedNextNoloop) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_%s_previous_noloop' % - self.type_prefix), + self.typePrefix), self.onSlideSelectedPreviousNoloop) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_last' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_last' % self.typePrefix), self.onSlideSelectedLast) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_change' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_change' % self.typePrefix), self.onSlideChange) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_set' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_set' % self.typePrefix), self.onSlideSelectedIndex) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_blank' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_blank' % self.typePrefix), self.onSlideBlank) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_unblank' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_unblank' % self.typePrefix), self.onSlideUnblank) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.type_prefix), + QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.typePrefix), self.onTextRequest) QtCore.QObject.connect(self.Splitter, QtCore.SIGNAL(u'splitterMoved(int, int)'), self.trackSplitter) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.refreshServiceItem) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'%s_slide_cache' % self.typePrefix), self.slideCache) def widthChanged(self): """ @@ -404,16 +424,16 @@ class SlideController(QtGui.QWidget): self.Toolbar.setVisible(True) self.Mediabar.setVisible(False) self.Toolbar.makeWidgetsInvisible([u'Song Menu']) - self.Toolbar.makeWidgetsInvisible(self.loop_list) + self.Toolbar.makeWidgetsInvisible(self.loopList) if item.is_text(): - self.Toolbar.makeWidgetsInvisible(self.loop_list) + self.Toolbar.makeWidgetsInvisible(self.loopList) if QtCore.QSettings().value( self.parent.songsSettingsSection + u'/show songbar', QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: self.Toolbar.makeWidgetsVisible([u'Song Menu']) if item.is_capable(ItemCapabilities.AllowsLoop) and \ len(item.get_frames()) > 1: - self.Toolbar.makeWidgetsVisible(self.loop_list) + self.Toolbar.makeWidgetsVisible(self.loopList) if item.is_media(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) @@ -425,9 +445,9 @@ class SlideController(QtGui.QWidget): """ self.Toolbar.setVisible(True) self.Mediabar.setVisible(False) - self.Toolbar.makeWidgetsInvisible(self.song_edit_list) + self.Toolbar.makeWidgetsInvisible(self.songEditList) if item.is_capable(ItemCapabilities.AllowsEdit) and item.from_plugin: - self.Toolbar.makeWidgetsVisible(self.song_edit_list) + self.Toolbar.makeWidgetsVisible(self.songEditList) elif item.is_media(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) @@ -569,8 +589,12 @@ class SlideController(QtGui.QWidget): self.enableToolBar(serviceItem) self.onSlideSelected() self.PreviewListWidget.setFocus() - Receiver.send_message(u'slidecontroller_%s_started' % self.type_prefix, + Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix, [serviceItem]) + if self.serviceItem.is_text(): + st = SlideThread( + self, self.typePrefix, len(self.serviceItem.get_frames())) + st.start() log.log(15, u'Display Rendering took %4s' % (time.time() - before)) def onTextRequest(self): @@ -591,7 +615,7 @@ class SlideController(QtGui.QWidget): (self.PreviewListWidget.currentRow() == framenumber) data.append(data_item) Receiver.send_message(u'slidecontroller_%s_text_response' - % self.type_prefix, data) + % self.typePrefix, data) #Screen event methods def onSlideSelectedFirst(self): @@ -708,6 +732,13 @@ class SlideController(QtGui.QWidget): % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) + def slideCache(self, slide): + """ + Generate a slide cache item rendered and ready for use + in the background. + """ + self.serviceItem.get_rendered_frame(int(slide)) + def onSlideSelected(self): """ Generate the preview when you click on a slide. @@ -737,7 +768,7 @@ class SlideController(QtGui.QWidget): if self.isLive: self.mainDisplay.frameView(frame, True) self.selectedRow = row - Receiver.send_message(u'slidecontroller_%s_changed' % self.type_prefix, + Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, row) def onSlideChange(self, row): @@ -746,7 +777,7 @@ class SlideController(QtGui.QWidget): """ self.PreviewListWidget.selectRow(row) self.updatePreview() - Receiver.send_message(u'slidecontroller_%s_changed' % self.type_prefix, + Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, row) def updatePreview(self): diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 3f684b08f..8be408d17 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -24,10 +24,9 @@ ############################################################################### import logging - -from logging import FileHandler -from PyQt4 import QtCore, QtGui import os + +from PyQt4 import QtCore, QtGui from openlp.core.utils import AppLocation from openlp.core.lib import translate @@ -68,7 +67,8 @@ class LanguageManager(object): @staticmethod def get_language(): - language = unicode(QtCore.QSettings().value( + settings = QtCore.QSettings(u'OpenLP', u'OpenLP') + language = unicode(settings.value( u'general/language', QtCore.QVariant(u'[en]')).toString()) log.info(u'Language file: \'%s\' Loaded from conf file' % language) regEx = QtCore.QRegExp("^\[(.*)\]") diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index e44c424a4..9f0a8e00d 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -337,13 +337,14 @@ class BibleMediaItem(MediaManagerItem): # load bibles into the combo boxes first = True for bible in bibles: - self.QuickVersionComboBox.addItem(bible) - self.QuickSecondBibleComboBox.addItem(bible) - self.AdvancedVersionComboBox.addItem(bible) - self.AdvancedSecondBibleComboBox.addItem(bible) - if first: - first = False - self.initialiseBible(bible) + if bible: + self.QuickVersionComboBox.addItem(bible) + self.QuickSecondBibleComboBox.addItem(bible) + self.AdvancedVersionComboBox.addItem(bible) + self.AdvancedSecondBibleComboBox.addItem(bible) + if first: + first = False + self.initialiseBible(bible) def onListViewResize(self, width, height): self.SearchProgress.setGeometry(self.ListView.geometry().x(), @@ -518,7 +519,7 @@ class BibleMediaItem(MediaManagerItem): else: service_item.theme = self.parent.settings_tab.bible_theme #if we are verse per slide we have already been added - if self.parent.settings_tab.layout_style != 0: + if self.parent.settings_tab.layout_style != 0 and not bible2: raw_slides.append(bible_text) for slide in raw_slides: service_item.add_from_text(slide[:30], slide) diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index 84a3d83a2..f976aa4e7 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -105,7 +105,7 @@ class PresentationController(object): if self.available: self.enabled = QtCore.QSettings().value( self.settingsSection + u'/' + name, - QtCore.Qt.Unchecked).toInt()[0] == QtCore.Qt.Checked + QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == QtCore.Qt.Checked else: self.enabled = False self.thumbnailroot = os.path.join( diff --git a/openlp/plugins/songs/lib/manager.py b/openlp/plugins/songs/lib/manager.py index ff9231fe2..dc275cc98 100644 --- a/openlp/plugins/songs/lib/manager.py +++ b/openlp/plugins/songs/lib/manager.py @@ -50,7 +50,7 @@ class SongManager(): settings.beginGroup(u'songs') self.db_url = u'' db_type = unicode( - settings.value(u'songs/db type', u'sqlite').toString()) + settings.value(u'songs/db type', QtCore.QVariant(u'sqlite')).toString()) if db_type == u'sqlite': self.db_url = u'sqlite:///%s/songs.sqlite' % \ AppLocation.get_section_data_path(u'songs') diff --git a/resources/i18n/openlp_af.qm b/resources/i18n/openlp_af.qm index 785a97249..6048181b7 100644 Binary files a/resources/i18n/openlp_af.qm and b/resources/i18n/openlp_af.qm differ diff --git a/resources/i18n/openlp_de.qm b/resources/i18n/openlp_de.qm index 7197719b3..860e84dc8 100644 Binary files a/resources/i18n/openlp_de.qm and b/resources/i18n/openlp_de.qm differ diff --git a/resources/i18n/openlp_en.qm b/resources/i18n/openlp_en.qm new file mode 100644 index 000000000..6bd22c41d Binary files /dev/null and b/resources/i18n/openlp_en.qm differ diff --git a/resources/i18n/openlp_en.ts b/resources/i18n/openlp_en.ts index 41a956423..a00e05646 100644 --- a/resources/i18n/openlp_en.ts +++ b/resources/i18n/openlp_en.ts @@ -2,11 +2,6 @@ AboutForm - - - build - - About OpenLP @@ -216,19 +211,14 @@ This General Public License does not permit incorporating your program into prop Close + + + build + + AlertForm - - - Item selected to Add - - - - - Missing data - - Alert Message @@ -274,6 +264,89 @@ This General Public License does not permit incorporating your program into prop &Close + + + Item selected to Add + + + + + Missing data + + + + + AlertsTab + + + pt + + + + + Location: + + + + + Font Color: + + + + + Font + + + + + Font Name: + + + + + Preview + + + + + Alerts + + + + + Alert timeout: + + + + + openlp.org + + + + + Background Color: + + + + + s + + + + + Bottom + + + + + Top + + + + + Font Size: + + AmendThemeForm @@ -685,8 +758,18 @@ This General Public License does not permit incorporating your program into prop - - Book: + + Clear + + + + + Search + + + + + To: @@ -694,23 +777,13 @@ This General Public License does not permit incorporating your program into prop Text Search - - - Find: - - Search Type: - - Bible not fully loaded - - - - + No matching book could be found in this Bible. @@ -725,8 +798,13 @@ This General Public License does not permit incorporating your program into prop - - Search + + Bible not fully loaded + + + + + No Book Found @@ -755,8 +833,13 @@ This General Public License does not permit incorporating your program into prop - - No Book Found + + Find: + + + + + Book: @@ -764,16 +847,6 @@ This General Public License does not permit incorporating your program into prop Advanced - - - To: - - - - - Clear - - Verse: @@ -816,13 +889,13 @@ This General Public License does not permit incorporating your program into prop - - Verse Display + + Display Dual Bible Verses - - Display Dual Bible Verses + + Bibles @@ -831,8 +904,8 @@ This General Public License does not permit incorporating your program into prop - - Layout Style: + + Verse Display @@ -840,11 +913,6 @@ This General Public License does not permit incorporating your program into prop No brackets - - - Bibles - - { and } @@ -866,6 +934,11 @@ Changes don't affect verses already in the service Bible Theme: + + + Layout Style: + + CustomMediaItem @@ -901,6 +974,14 @@ Changes don't affect verses already in the service + + DisplayTab + + + Displays + + + EditCustomForm @@ -923,11 +1004,6 @@ Changes don't affect verses already in the service Save && Preview - - - You have unsaved data, please save or clear - - Edit Custom Slides @@ -1028,6 +1104,11 @@ Changes don't affect verses already in the service Credits: + + + You have unsaved data, please save or clear + + EditSongForm @@ -1051,31 +1132,6 @@ Changes don't affect verses already in the service Error - - - bitped - - - - - v - - - - - c - - - - - Invalid verse entry - Vx or Cx - - - - - Invalid verse entry, values must be I,B,T,P,E,O,Vx,Cx - - Song Editor @@ -1201,19 +1257,34 @@ Changes don't affect verses already in the service Theme, Copyright Info && Comments + + + bitped + + + + + v + + + + + c + + + + + Invalid verse entry - Vx or Cx + + + + + Invalid verse entry, values must be I,B,T,P,E,O,Vx,Cx + + EditVerseForm - - - Verse - - - - - Chrous - - Edit Verse @@ -1229,6 +1300,11 @@ Changes don't affect verses already in the service Intro + + + Verse + + Pre-Chorus @@ -1259,6 +1335,11 @@ Changes don't affect verses already in the service Number + + + Chrous + + GeneralTab @@ -1267,6 +1348,11 @@ Changes don't affect verses already in the service CCLI Details + + + SongSelect Password: + + primary @@ -1337,11 +1423,6 @@ Changes don't affect verses already in the service Monitors - - - SongSelect Password: - - Display if a single screen @@ -1420,8 +1501,8 @@ Changes don't affect verses already in the service ImportWizardForm - - You need to specify a file with books of the Bible to use in the import. + + Bible Exists @@ -1434,11 +1515,6 @@ Changes don't affect verses already in the service You need to set a copyright for your Bible! Bibles in the Public Domain need to be marked as such. - - - Bible Exists - - Empty Copyright @@ -1464,16 +1540,6 @@ Changes don't affect verses already in the service Finished import. - - - You need to specify a file of Bible verses to import. - - - - - You need to specify a version name for your Bible. - - This Bible already exists! Please import a different Bible or first delete the existing one. @@ -1489,16 +1555,6 @@ Changes don't affect verses already in the service Invalid Books File - - - You need to specify a file to import your Bible from. - - - - - You need to specify an OpenSong Bible file to import. - - Invalid Verse File @@ -1509,21 +1565,6 @@ Changes don't affect verses already in the service Open OpenSong Bible - - - Open OSIS File - - - - - Open Books CSV File - - - - - Open Verses CSV File - - Bible Import Wizard @@ -1679,6 +1720,46 @@ Changes don't affect verses already in the service Ready. + + + You need to specify a file to import your Bible from. + + + + + You need to specify a file with books of the Bible to use in the import. + + + + + You need to specify a file of Bible verses to import. + + + + + You need to specify an OpenSong Bible file to import. + + + + + You need to specify a version name for your Bible. + + + + + Open OSIS File + + + + + Open Books CSV File + + + + + Open Verses CSV File + + LanguageManager @@ -1696,379 +1777,379 @@ Changes don't affect verses already in the service MainWindow - + The Main Display has been blanked out - + OpenLP Version Updated - + Save Changes to Service? - + OpenLP Main Display Blanked - - New Service - - - - - Open Service - - - - - Save Service - - - - + OpenLP 2.0 - + English - + Default Theme: - + &File - + &Import - + &Export - + &Options - + &View - + M&ode - + &Tools - + &Help - + Media Manager - + Service Manager - + Theme Manager - + &New - + + New Service + + + + Create a new Service - + Ctrl+N - + &Open - + + Open Service + + + + Open an existing service - + Ctrl+O - + &Save - + + Save Service + + + + Save the current service to disk - + Ctrl+S - + Save &As... - + Save Service As - + Save the current service under a new name - + F12 - + E&xit - + Quit OpenLP - + Alt+F4 - + &Theme - + &Language - + Look && &Feel - + &Settings - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the Media Manager - + F8 - + &Theme Manager - + Toggle Theme Manager - + Toggle the visibility of the Theme Manager - + F10 - + &Service Manager - + Toggle Service Manager - + Toggle the visibility of the Service Manager - + F9 - + &Preview Panel - + Toggle Preview Panel - + Toggle the visibility of the Preview Panel - + F11 - + &Plugin List - + List the Plugins - + Alt+F7 - + &User Guide - + &About - + More information about OpenLP - + Ctrl+F1 - + &Online Help - + &Web Site - + &Auto Detect - + Choose System language, if available - + Set the interface language to %1 - + Add &Tool... - + Add an application to the list of tools - + &Preview Pane - + &Live - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org - + Your service has changed. Do you want to save those changes? @@ -2090,11 +2171,6 @@ You can download the latest version from http://openlp.org Load a new - - - Delete the selected item - - &Edit @@ -2120,6 +2196,11 @@ You can download the latest version from http://openlp.org Edit the selected + + + Delete the selected item + + Add a new @@ -2171,26 +2252,26 @@ You can download the latest version from http://openlp.org - - Invalid Service Item + + You must select an existing service item to add to. - - You must select an existing service item to add to. + + Invalid Service Item MediaMediaItem - - Media + + Select Media - - Select Media + + Media @@ -2217,7 +2298,7 @@ You can download the latest version from http://openlp.org MediaPlugin - + <b>Media Plugin</b><br>This plugin allows the playing of audio and video media @@ -2378,6 +2459,11 @@ You can download the latest version from http://openlp.org OpenSongExportForm + + + OpenSong Song Exporter + + Select OpenSong song folder: @@ -2443,11 +2529,6 @@ You can download the latest version from http://openlp.org Close - - - OpenSong Song Exporter - - OpenSongImportForm @@ -2533,32 +2614,32 @@ You can download the latest version from http://openlp.org - + Present using: - - - Automatic - - - - - A presentation with that filename already exists. - - Select Presentation(s) - + + A presentation with that filename already exists. + + + + File exists - + + Automatic + + + + Presentations (%s) @@ -2636,140 +2717,150 @@ You can download the latest version from http://openlp.org ServiceManager - - Save Changes to Service? - - - - - Open Service - - - - - Move to top - - - - - Create a new service - - - - - Save this service - - - - - Theme: - - - - - Delete From Service - - - - + Save Service - - &Live Verse + + Save Changes to Service? - - Move to &top + + Open Service - - New Service + + Move to top - - &Notes + + Create a new service - - Move to end + + Save this service - - &Delete From Service + + Theme: - - Move up order + + Delete From Service - - Move down order - - - - - Move &down - - - - - Load an existing service - - - - + &Preview Verse - - Move &up + + &Live Verse - + + New Service + + + + + &Notes + + + + + Move up order + + + + + Move down order + + + + + Load an existing service + + + + + Move to end + + + + &Edit Item - + + Move to &top + + + + + Move &up + + + + + Move &down + + + + Move to &bottom - - &Maintain Item + + &Delete From Service - - Your service is unsaved, do you want to save those changes before creating a new one? - - - - - Your current service is unsaved, do you want to save the changes before opening a new one? - - - - + &Add New Item - + &Add to Selected Item + + + &Maintain Item + + + + + Your service is unsaved, do you want to save those changes before creating a new one? + + + + + Your current service is unsaved, do you want to save the changes before opening a new one? + + + + + Missing Display Handler + + + + + Your item cannot be displayed as there is no handler to display it + + ServiceNoteForm @@ -2790,97 +2881,97 @@ You can download the latest version from http://openlp.org SlideController - + Move to previous - - Go to Verse - - - - - Start continuous loop - - - - - Live - - - - - Start playing media - - - - - Move to live - - - - - Preview - - - - - Move to last - - - - + Edit and re-preview Song - + Delay between slides in seconds - - Move to next + + Go to Verse - - Move to first + + Start continuous loop - - Blank Screen + + Live - + + Start playing media + + + + + Move to live + + + + + Move to last + + + + Verse - + + Move to next + + + + + Move to first + + + + + Blank Screen + + + + + Preview + + + + Stop continuous loop - + s - + Theme Screen - + Hide Screen - + Chorus @@ -2915,26 +3006,6 @@ You can download the latest version from http://openlp.org SongMaintenanceForm - - - Are you sure you want to delete the selected book? - - - - - Couldn't save your author. - - - - - This author can't be deleted, they are currently assigned to at least one song. - - - - - Couldn't add your book. - - Error @@ -2946,13 +3017,13 @@ You can download the latest version from http://openlp.org - - Couldn't add your topic. + + Are you sure you want to delete the selected book? - - This book can't be deleted, it is currently assigned to at least one song. + + Delete Topic @@ -2970,26 +3041,6 @@ You can download the latest version from http://openlp.org Are you sure you want to delete the selected author? - - - Couldn't add your author. - - - - - Couldn't save your topic. - - - - - Couldn't save your book. - - - - - Delete Topic - - Delete Author @@ -3000,11 +3051,6 @@ You can download the latest version from http://openlp.org No topic selected! - - - This topic can't be deleted, it is currently assigned to at least one song. - - Are you sure you want to delete the selected topic? @@ -3045,6 +3091,51 @@ You can download the latest version from http://openlp.org Delete + + + Couldn't add your author. + + + + + Couldn't add your topic. + + + + + Couldn't add your book. + + + + + Couldn't save your author. + + + + + Couldn't save your topic. + + + + + Couldn't save your book. + + + + + This author can't be deleted, they are currently assigned to at least one song. + + + + + This topic can't be deleted, it is currently assigned to at least one song. + + + + + This book can't be deleted, it is currently assigned to at least one song. + + SongMediaItem @@ -3063,6 +3154,11 @@ You can download the latest version from http://openlp.org Maintain the lists of authors, topics and books + + + Titles + + Lyrics @@ -3073,11 +3169,6 @@ You can download the latest version from http://openlp.org Type: - - - Titles - - Clear @@ -3226,11 +3317,6 @@ You can download the latest version from http://openlp.org Delete a theme - - - File is not a valid theme. - - Edit a theme @@ -3246,11 +3332,6 @@ You can download the latest version from http://openlp.org Export Theme - - - You are unable to delete the default theme. - - Theme Exists @@ -3291,11 +3372,6 @@ You can download the latest version from http://openlp.org Export theme - - - You have not selected a theme. - - A theme with this name already exists, would you like to overwrite it? @@ -3306,6 +3382,11 @@ You can download the latest version from http://openlp.org Export a theme + + + You are unable to delete the default theme. + + Theme %s is use in %s plugin @@ -3316,6 +3397,16 @@ You can download the latest version from http://openlp.org Theme %s is use by Service Manager + + + You have not selected a theme. + + + + + File is not a valid theme. + + ThemesTab @@ -3330,8 +3421,8 @@ You can download the latest version from http://openlp.org - - Use the global theme, overriding any themes associated with either the service or the songs. + + Global level @@ -3345,8 +3436,8 @@ You can download the latest version from http://openlp.org - - Global level + + Use the global theme, overriding any themes associated with either the service or the songs. @@ -3355,13 +3446,13 @@ You can download the latest version from http://openlp.org - - Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. + + Themes - - Themes + + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. @@ -3492,6 +3583,54 @@ You can download the latest version from http://openlp.org + + self + + + Amend Display Settings + + + + + Default Settings + + + + + X + + + + + 0 + + + + + Y + + + + + Height + + + + + Width + + + + + Amend Settings + + + + + Override Output Display + + + self.ImportSongMenu diff --git a/resources/i18n/openlp_en_GB.qm b/resources/i18n/openlp_en_GB.qm index b2dc81931..5a31382cf 100644 Binary files a/resources/i18n/openlp_en_GB.qm and b/resources/i18n/openlp_en_GB.qm differ diff --git a/resources/i18n/openlp_en_ZA.qm b/resources/i18n/openlp_en_ZA.qm index 58ee3e02c..344aec034 100644 Binary files a/resources/i18n/openlp_en_ZA.qm and b/resources/i18n/openlp_en_ZA.qm differ diff --git a/resources/i18n/openlp_es.qm b/resources/i18n/openlp_es.qm index f128095b8..da03a2e0f 100644 Binary files a/resources/i18n/openlp_es.qm and b/resources/i18n/openlp_es.qm differ diff --git a/resources/i18n/openlp_hu.qm b/resources/i18n/openlp_hu.qm index dc4e5fba2..4f2c11f7b 100644 Binary files a/resources/i18n/openlp_hu.qm and b/resources/i18n/openlp_hu.qm differ diff --git a/resources/i18n/openlp_nb.qm b/resources/i18n/openlp_nb.qm index f88756cab..fb6ae4493 100644 Binary files a/resources/i18n/openlp_nb.qm and b/resources/i18n/openlp_nb.qm differ diff --git a/resources/i18n/openlp_pt_BR.qm b/resources/i18n/openlp_pt_BR.qm index 4e075ec64..2ad079b4b 100644 Binary files a/resources/i18n/openlp_pt_BR.qm and b/resources/i18n/openlp_pt_BR.qm differ diff --git a/resources/i18n/openlp_sv.qm b/resources/i18n/openlp_sv.qm index f7b80c6ed..ae9d9fec0 100644 Binary files a/resources/i18n/openlp_sv.qm and b/resources/i18n/openlp_sv.qm differ diff --git a/scripts/translation_utils.py b/scripts/translation_utils.py index 7a76a5566..0135efeb6 100755 --- a/scripts/translation_utils.py +++ b/scripts/translation_utils.py @@ -38,7 +38,8 @@ from PyQt4 import QtCore ignore_pathes = [u"./scripts", u"./openlp/core/test"] ignore_files = [u"setup.py"] translation_path = u"http://pootle.projecthq.biz/export/openlp/" -translations = [ u"af" +translations = [ u"en" + , u"af" , u"en_ZA" , u"en_GB" , u"de"