From da04465e41dbe89f88eb44e99382eec416f5eb80 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 27 Mar 2011 20:47:27 +0200 Subject: [PATCH 001/148] r1431 From 19138cd9e5b42652473e331cd866252cd3e4150b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 29 Mar 2011 15:56:49 +0200 Subject: [PATCH 002/148] started reworking shortcuts --- openlp/core/lib/ui.py | 2 + openlp/core/ui/mainwindow.py | 63 ++++++++---------- openlp/core/ui/servicemanager.py | 2 +- openlp/core/ui/shortcutlistform.py | 95 +++++++++++++++++++-------- openlp/core/ui/slidecontroller.py | 3 +- openlp/core/utils/actions.py | 11 ++++ openlp/plugins/alerts/alertsplugin.py | 8 ++- 7 files changed, 116 insertions(+), 68 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index c1a9f8b35..6aa06bfcc 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -31,6 +31,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, Receiver, translate +from openlp.core.utils.actions import actionList log = logging.getLogger(__name__) @@ -265,6 +266,7 @@ def icon_action(parent, name, icon, checked=None): else: action = base_action(parent, name) action.setIcon(build_icon(icon)) + #actionList.add_action(action, name) return action def shortcut_action(parent, text, shortcuts, function): diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 594c6cc91..98144bfa3 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -38,7 +38,8 @@ from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ThemeManager, SlideController, PluginForm, MediaDockManager, \ ShortcutListForm, DisplayTagForm from openlp.core.utils import AppLocation, add_actions, LanguageManager, \ - ActionList, get_application_version + get_application_version +from openlp.core.utils.actions import actionList log = logging.getLogger(__name__) @@ -163,53 +164,52 @@ class Ui_MainWindow(object): # Create the menu items self.FileNewItem = icon_action(mainWindow, u'FileNewItem', u':/general/general_new.png') - mainWindow.actionList.add_action(self.FileNewItem, u'File') + actionList.add_action(self.FileNewItem, u'File') self.FileOpenItem = icon_action(mainWindow, u'FileOpenItem', u':/general/general_open.png') - mainWindow.actionList.add_action(self.FileOpenItem, u'File') + actionList.add_action(self.FileOpenItem, u'File') self.FileSaveItem = icon_action(mainWindow, u'FileSaveItem', u':/general/general_save.png') - mainWindow.actionList.add_action(self.FileSaveItem, u'File') + actionList.add_action(self.FileSaveItem, u'File') self.FileSaveAsItem = base_action(mainWindow, u'FileSaveAsItem') - mainWindow.actionList.add_action(self.FileSaveAsItem, u'File') + actionList.add_action(self.FileSaveAsItem, u'File') self.printServiceOrderItem = base_action( mainWindow, u'printServiceItem') - mainWindow.actionList.add_action( - self.printServiceOrderItem, u'Print Service Order') + actionList.add_action(self.printServiceOrderItem, u'File') self.FileExitItem = icon_action(mainWindow, u'FileExitItem', u':/system/system_exit.png') - mainWindow.actionList.add_action(self.FileExitItem, u'File') + actionList.add_action(self.FileExitItem, u'File') self.ImportThemeItem = base_action(mainWindow, u'ImportThemeItem') - mainWindow.actionList.add_action(self.ImportThemeItem, u'Import') + actionList.add_action(self.ImportThemeItem, u'Import') self.ImportLanguageItem = base_action(mainWindow, u'ImportLanguageItem') - mainWindow.actionList.add_action(self.ImportLanguageItem, u'Import') + actionList.add_action(self.ImportLanguageItem, u'Import') self.ExportThemeItem = base_action(mainWindow, u'ExportThemeItem') - mainWindow.actionList.add_action(self.ExportThemeItem, u'Export') + actionList.add_action(self.ExportThemeItem, u'Export') self.ExportLanguageItem = base_action(mainWindow, u'ExportLanguageItem') - mainWindow.actionList.add_action(self.ExportLanguageItem, u'Export') + actionList.add_action(self.ExportLanguageItem, u'Export') self.ViewMediaManagerItem = icon_action(mainWindow, u'ViewMediaManagerItem', u':/system/system_mediamanager.png', self.mediaManagerDock.isVisible()) self.ViewThemeManagerItem = icon_action(mainWindow, u'ViewThemeManagerItem', u':/system/system_thememanager.png', self.themeManagerDock.isVisible()) - mainWindow.actionList.add_action(self.ViewMediaManagerItem, u'View') + actionList.add_action(self.ViewMediaManagerItem, u'View') self.ViewServiceManagerItem = icon_action(mainWindow, u'ViewServiceManagerItem', u':/system/system_servicemanager.png', self.serviceManagerDock.isVisible()) - mainWindow.actionList.add_action(self.ViewServiceManagerItem, u'View') + actionList.add_action(self.ViewServiceManagerItem, u'View') self.ViewPreviewPanel = checkable_action(mainWindow, u'ViewPreviewPanel', previewVisible) - mainWindow.actionList.add_action(self.ViewPreviewPanel, u'View') + actionList.add_action(self.ViewPreviewPanel, u'View') self.ViewLivePanel = checkable_action(mainWindow, u'ViewLivePanel', liveVisible) - mainWindow.actionList.add_action(self.ViewLivePanel, u'View') + actionList.add_action(self.ViewLivePanel, u'View') self.ModeDefaultItem = checkable_action(mainWindow, u'ModeDefaultItem') - mainWindow.actionList.add_action(self.ModeDefaultItem, u'View Mode') + actionList.add_action(self.ModeDefaultItem, u'View Mode') self.ModeSetupItem = checkable_action(mainWindow, u'ModeLiveItem') - mainWindow.actionList.add_action(self.ModeSetupItem, u'View Mode') + actionList.add_action(self.ModeSetupItem, u'View Mode') self.ModeLiveItem = checkable_action(mainWindow, u'ModeLiveItem', True) - mainWindow.actionList.add_action(self.ModeLiveItem, u'View Mode') + actionList.add_action(self.ModeLiveItem, u'View Mode') self.ModeGroup = QtGui.QActionGroup(mainWindow) self.ModeGroup.addAction(self.ModeDefaultItem) self.ModeGroup.addAction(self.ModeSetupItem) @@ -217,18 +217,18 @@ class Ui_MainWindow(object): self.ModeDefaultItem.setChecked(True) self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', u':/tools/tools_add.png') - mainWindow.actionList.add_action(self.ToolsAddToolItem, u'Tools') + actionList.add_action(self.ToolsAddToolItem, u'Tools') self.ToolsOpenDataFolder = icon_action(mainWindow, u'ToolsOpenDataFolder', u':/general/general_open.png') - mainWindow.actionList.add_action(self.ToolsOpenDataFolder, u'Tools') + actionList.add_action(self.ToolsOpenDataFolder, u'Tools') self.settingsPluginListItem = icon_action(mainWindow, u'settingsPluginListItem', u':/system/settings_plugin_list.png') - mainWindow.actionList.add_action(self.settingsPluginListItem, + actionList.add_action(self.settingsPluginListItem, u'Settings') # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, u'AutoLanguageItem', LanguageManager.auto_language) - mainWindow.actionList.add_action(self.AutoLanguageItem, u'Settings') + actionList.add_action(self.AutoLanguageItem, u'Settings') self.LanguageGroup = QtGui.QActionGroup(mainWindow) self.LanguageGroup.setExclusive(True) self.LanguageGroup.setObjectName(u'LanguageGroup') @@ -246,19 +246,19 @@ class Ui_MainWindow(object): u'DisplayTagItem', u':/system/tag_editor.png') self.SettingsConfigureItem = icon_action(mainWindow, u'SettingsConfigureItem', u':/system/system_settings.png') - mainWindow.actionList.add_action(self.SettingsShortcutsItem, + actionList.add_action(self.SettingsShortcutsItem, u'Settings') self.HelpDocumentationItem = icon_action(mainWindow, u'HelpDocumentationItem', u':/system/system_help_contents.png') self.HelpDocumentationItem.setEnabled(False) - mainWindow.actionList.add_action(self.HelpDocumentationItem, u'Help') + actionList.add_action(self.HelpDocumentationItem, u'Help') self.HelpAboutItem = icon_action(mainWindow, u'HelpAboutItem', u':/system/system_about.png') - mainWindow.actionList.add_action(self.HelpAboutItem, u'Help') + actionList.add_action(self.HelpAboutItem, u'Help') self.HelpOnlineHelpItem = base_action(mainWindow, u'HelpOnlineHelpItem') - mainWindow.actionList.add_action(self.HelpOnlineHelpItem, u'Help') + actionList.add_action(self.HelpOnlineHelpItem, u'Help') self.helpWebSiteItem = base_action(mainWindow, u'helpWebSiteItem') - mainWindow.actionList.add_action(self.helpWebSiteItem, u'Help') + actionList.add_action(self.helpWebSiteItem, u'Help') add_actions(self.FileImportMenu, (self.ImportThemeItem, self.ImportLanguageItem)) add_actions(self.FileExportMenu, @@ -301,7 +301,6 @@ class Ui_MainWindow(object): self.ToolsAddToolItem.setVisible(False) self.ImportLanguageItem.setVisible(False) self.ExportLanguageItem.setVisible(False) - self.SettingsShortcutsItem.setVisible(False) self.HelpDocumentationItem.setVisible(False) def retranslateUi(self, mainWindow): @@ -467,8 +466,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ log.info(u'MainWindow loaded') - actionList = ActionList() - def __init__(self, screens, application): """ This constructor sets up the interface, the various managers, and the @@ -476,7 +473,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ QtGui.QMainWindow.__init__(self) self.screens = screens - self.application = application # Set up settings sections for the main application # (not for use by plugins) @@ -485,7 +481,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.serviceSettingsSection = u'servicemanager' self.songsSettingsSection = u'songs' self.serviceNotSaved = False - self.actionList = ActionList() self.settingsmanager = SettingsManager(screens) self.aboutForm = AboutForm(self) self.settingsForm = SettingsForm(self.screens, self, self) @@ -777,7 +772,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Show the shortcuts dialog """ - self.shortcutForm.exec_(self.actionList) + self.shortcutForm.exec_() def onModeDefaultItemClicked(self): """ diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 168ad8a8c..1d5321e01 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -40,6 +40,7 @@ from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ split_filename +from openlp.core.utils.actions import actionList class ServiceManagerList(QtGui.QTreeWidget): """ @@ -315,7 +316,6 @@ class ServiceManager(QtGui.QWidget): self.configUpdated() def setServiceHotkeys(self): - actionList = self.mainwindow.actionList actionList.add_action(self.serviceManagerList.moveDown, u'Service') actionList.add_action(self.serviceManagerList.moveUp, u'Service') actionList.add_action(self.serviceManagerList.moveTop, u'Service') diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index e87ba3ada..a61dd41ed 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -30,6 +30,7 @@ import re from PyQt4 import QtCore, QtGui from openlp.core.utils import translate +from openlp.core.utils.actions import actionList from shortcutlistdialog import Ui_ShortcutListDialog REMOVE_AMPERSAND = re.compile(r'&{1}') @@ -40,21 +41,24 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ The shortcut list dialog """ - - def __init__(self, parent): - """ - Do some initialisation stuff - """ +#TODO: do not close on ESC +#TODO: ability to remove actions +#TODO: Save shortcuts +#TODO: doc + def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) - self.actionList = None - self.captureShortcut = False + self.assingedShortcuts = [] + self.shortcutButton.setText(u'') QtCore.QObject.connect(self.shortcutButton, QtCore.SIGNAL(u'toggled(bool)'), self.onShortcutButtonClicked) + QtCore.QObject.connect(self.treeWidget, + QtCore.SIGNAL(u'itemPressed(QTreeWidgetItem*, int)'), + self.onItemPressed) def keyReleaseEvent(self, event): Qt = QtCore.Qt - if not self.captureShortcut: + if not self.shortcutButton.isChecked(): return key = event.key() if key == Qt.Key_Shift or key == Qt.Key_Control or \ @@ -68,45 +72,80 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if event.modifiers() & Qt.ShiftModifier == Qt.ShiftModifier: key_string = u'Shift+' + key_string key_sequence = QtGui.QKeySequence(key_string) - existing_key = QtGui.QKeySequence(u'Ctrl+Shift+F8') - if key_sequence == existing_key: - QtGui.QMessageBox.warning( - self, + if key_sequence in self.assingedShortcuts: + QtGui.QMessageBox.warning(self, translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'), unicode(translate('OpenLP.ShortcutListDialog', 'The shortcut ' - '"%s" is already assigned to another action, please ' - 'use a different shortcut.')) % key_sequence.toString(), + '"%s" is already assigned to another action, please ' + 'use a different shortcut.')) % key_sequence.toString(), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok), QtGui.QMessageBox.Ok ) else: self.shortcutButton.setText(key_sequence.toString()) - self.shortcutButton.setChecked(False) - self.captureShortcut = False + self.shortcutButton.setChecked(False) - def exec_(self, actionList): - self.actionList = actionList - self.refreshActions() + def exec_(self): + # The dialog is opened the first time + if self.treeWidget.topLevelItemCount() == 0: + QtCore.QObject.connect(actionList.signal, + QtCore.SIGNAL(u'addedAction()'), self.initialiseActionList) + self.initialiseActionList() + self.refreshActionList() return QtGui.QDialog.exec_(self) - def refreshActions(self): - self.treeWidget.clear() - for category in self.actionList.categories: - item = QtGui.QTreeWidgetItem([category.name]) - for action in category.actions: + def refreshActionList(self): + self.assingedShortcuts = [] + iterator = QtGui.QTreeWidgetItemIterator(self.treeWidget) + while iterator.value(): + treewidgetItem = iterator.value() + action = treewidgetItem.data(0, QtCore.Qt.UserRole).toPyObject() + if action is not None: actionText = REMOVE_AMPERSAND.sub('', unicode(action.text())) - if (len(action.shortcuts()) == 2): + if len(action.shortcuts()) == 2: shortcutText = action.shortcuts()[0].toString() alternateText = action.shortcuts()[1].toString() else: shortcutText = action.shortcut().toString() alternateText = u'' - actionItem = QtGui.QTreeWidgetItem( - [actionText, shortcutText, alternateText]) + self.assingedShortcuts.extend(action.shortcuts()) + treewidgetItem.setText(0, actionText) + treewidgetItem.setText(1, shortcutText) + treewidgetItem.setText(2, alternateText) + iterator += 1 + + def initialiseActionList(self): + for category in actionList.categories: + item = QtGui.QTreeWidgetItem([category.name]) + for action in category.actions: + actionItem = QtGui.QTreeWidgetItem() actionItem.setIcon(0, action.icon()) + actionItem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(action)) item.addChild(actionItem) item.setExpanded(True) self.treeWidget.addTopLevelItem(item) def onShortcutButtonClicked(self, toggled): - self.captureShortcut = toggled + if toggled: + return + item = self.treeWidget.currentItem() + action = item.data(0, QtCore.Qt.UserRole).toPyObject() + if action is None: + return + # TODO: Sort out which shortcuts should be kept. + action.setShortcuts(QtGui.QKeySequence(self.shortcutButton.text())) + self.refreshActionList() + + def onItemPressed(self, item, column): + item = self.treeWidget.currentItem() + action = item.data(0, QtCore.Qt.UserRole).toPyObject() + if action is None: + text = u'' + else: + if len(action.shortcuts()) == 0: + text = u'' + elif len(action.shortcuts()) == 2 and column == 2: + text = action.shortcuts()[1].toString() + else: + text = action.shortcuts()[0].toString() + self.shortcutButton.setText(text) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 232653326..1ae84e950 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -34,6 +34,7 @@ from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ ItemCapabilities, translate from openlp.core.lib.ui import icon_action, UiStrings, shortcut_action from openlp.core.ui import HideMode, MainDisplay +from openlp.core.utils.actions import actionList log = logging.getLogger(__name__) @@ -362,14 +363,12 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged) def setPreviewHotkeys(self, parent=None): - actionList = self.parent.actionList self.previousItem.setShortcuts([QtCore.Qt.Key_Up, 0]) actionList.add_action(self.previousItem, u'Preview') self.nextItem.setShortcuts([QtCore.Qt.Key_Down, 0]) actionList.add_action(self.nextItem, u'Preview') def setLiveHotkeys(self, parent=None): - actionList = self.parent.actionList self.previousItem.setShortcuts([QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp]) self.previousItem.setShortcutContext( QtCore.Qt.WidgetWithChildrenShortcut) diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 41ae41f4b..ba4a7b40d 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -27,6 +27,8 @@ The :mod:`~openlp.core.utils.actions` module provides action list classes used by the shortcuts system. """ +from PyQt4 import QtCore + class ActionCategory(object): """ The :class:`~openlp.core.utils.ActionCategory` class encapsulates a @@ -173,6 +175,7 @@ class ActionList(object): """ def __init__(self): self.categories = CategoryList() + self.signal = Emit() def add_action(self, action, category=u'Default', weight=None): if category not in self.categories: @@ -181,3 +184,11 @@ class ActionList(object): self.categories[category].actions.append(action) else: self.categories[category].actions.add(action, weight) + self.signal.emit(QtCore.SIGNAL(u'addedAction()')) + + +class Emit(QtCore.QObject): + def __init__(self): + QtCore.QObject.__init__(self) + +actionList = ActionList() diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index db0ba3b7e..2d22d2d5a 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -30,6 +30,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.lib.db import Manager +from openlp.core.lib.ui import icon_action +from openlp.core.utils.actions import actionList from openlp.plugins.alerts.lib import AlertsManager, AlertsTab from openlp.plugins.alerts.lib.db import init_schema from openlp.plugins.alerts.forms import AlertForm @@ -58,9 +60,9 @@ class AlertsPlugin(Plugin): use it as their parent. """ log.info(u'add tools menu') - self.toolsAlertItem = QtGui.QAction(tools_menu) - self.toolsAlertItem.setIcon(build_icon(u':/plugins/plugin_alerts.png')) - self.toolsAlertItem.setObjectName(u'toolsAlertItem') + self.toolsAlertItem = icon_action(tools_menu, u'toolsAlertItem', + u':/plugins/plugin_alerts.png') + actionList.add_action(self.toolsAlertItem, u'Extra') self.toolsAlertItem.setText(translate('AlertsPlugin', '&Alert')) self.toolsAlertItem.setStatusTip( translate('AlertsPlugin', 'Show an alert message.')) From d9c2d92c8c4265975c7860bfc7fd5aba26c1bac1 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 29 Mar 2011 18:44:36 +0200 Subject: [PATCH 003/148] --- openlp/core/lib/ui.py | 24 +++--- openlp/core/ui/mainwindow.py | 104 +++++++++++--------------- openlp/core/ui/shortcutlistform.py | 15 +++- openlp/core/ui/slidecontroller.py | 23 +++--- openlp/core/utils/__init__.py | 6 +- openlp/core/utils/actions.py | 2 +- openlp/plugins/alerts/alertsplugin.py | 3 +- 7 files changed, 90 insertions(+), 87 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 6aa06bfcc..86def01d8 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -239,41 +239,47 @@ def create_up_down_push_button_set(parent): QtCore.SIGNAL(u'clicked()'), parent.onDownButtonClicked) return up_button, down_button -def base_action(parent, name): +def base_action(parent, name, category=None): """ Return the most basic action with the object name set. """ action = QtGui.QAction(parent) action.setObjectName(name) + if category is not None: + actionList.add_action(action, category) return action -def checkable_action(parent, name, checked=None): +def checkable_action(parent, name, checked=None, category=None): """ Return a standard action with the checkable attribute set. """ - action = base_action(parent, name) + action = base_action(parent, name, category) action.setCheckable(True) if checked is not None: action.setChecked(checked) return action -def icon_action(parent, name, icon, checked=None): +def icon_action(parent, name, icon, checked=None, category=None): """ Return a standard action with an icon. + + ``category`` + The category the action should be listed in the shortcut dialog. If you + not wish, that this action is added to the shortcut dialog, then do not + state any. """ if checked is not None: - action = checkable_action(parent, name, checked) + action = checkable_action(parent, name, checked, category) else: - action = base_action(parent, name) + action = base_action(parent, name, category) action.setIcon(build_icon(icon)) - #actionList.add_action(action, name) return action -def shortcut_action(parent, text, shortcuts, function): +def shortcut_action(parent, text, shortcuts, function, category=None): """ Return a shortcut enabled action. """ - action = QtGui.QAction(text, parent) + action = base_action(parent, text, category) action.setShortcuts(shortcuts) action.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), function) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index ed06d3931..c37db0b97 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -39,7 +39,7 @@ from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ShortcutListForm, DisplayTagForm from openlp.core.utils import AppLocation, add_actions, LanguageManager, \ get_application_version -from openlp.core.utils.actions import actionList +#from openlp.core.utils.actions import actionList log = logging.getLogger(__name__) @@ -163,72 +163,60 @@ class Ui_MainWindow(object): self.themeManagerDock) # Create the menu items self.FileNewItem = icon_action(mainWindow, u'FileNewItem', - u':/general/general_new.png') - actionList.add_action(self.FileNewItem, u'File') + u':/general/general_new.png', category=u'File') self.FileOpenItem = icon_action(mainWindow, u'FileOpenItem', - u':/general/general_open.png') - actionList.add_action(self.FileOpenItem, u'File') + u':/general/general_open.png', category=u'File') self.FileSaveItem = icon_action(mainWindow, u'FileSaveItem', - u':/general/general_save.png') - actionList.add_action(self.FileSaveItem, u'File') - self.FileSaveAsItem = base_action(mainWindow, u'FileSaveAsItem') - actionList.add_action(self.FileSaveAsItem, u'File') + u':/general/general_save.png', category=u'File') + self.FileSaveAsItem = base_action( + mainWindow, u'FileSaveAsItem', u'File') self.printServiceOrderItem = base_action( - mainWindow, u'printServiceItem') - actionList.add_action(self.printServiceOrderItem, u'File') + mainWindow, u'printServiceItem', u'File') self.FileExitItem = icon_action(mainWindow, u'FileExitItem', - u':/system/system_exit.png') - actionList.add_action(self.FileExitItem, u'File') - self.ImportThemeItem = base_action(mainWindow, u'ImportThemeItem') - actionList.add_action(self.ImportThemeItem, u'Import') - self.ImportLanguageItem = base_action(mainWindow, u'ImportLanguageItem') - actionList.add_action(self.ImportLanguageItem, u'Import') - self.ExportThemeItem = base_action(mainWindow, u'ExportThemeItem') - actionList.add_action(self.ExportThemeItem, u'Export') - self.ExportLanguageItem = base_action(mainWindow, u'ExportLanguageItem') - actionList.add_action(self.ExportLanguageItem, u'Export') + u':/system/system_exit.png', category=u'File') + self.ImportThemeItem = base_action( + mainWindow, u'ImportThemeItem', u'Import') + self.ImportLanguageItem = base_action( + mainWindow, u'ImportLanguageItem', u'Import') + self.ExportThemeItem = base_action( + mainWindow, u'ExportThemeItem', u'Export') + self.ExportLanguageItem = base_action( + mainWindow, u'ExportLanguageItem', u'Export') self.ViewMediaManagerItem = icon_action(mainWindow, u'ViewMediaManagerItem', u':/system/system_mediamanager.png', - self.mediaManagerDock.isVisible()) + self.mediaManagerDock.isVisible(), u'View') self.ViewThemeManagerItem = icon_action(mainWindow, u'ViewThemeManagerItem', u':/system/system_thememanager.png', - self.themeManagerDock.isVisible()) - actionList.add_action(self.ViewMediaManagerItem, u'View') + self.themeManagerDock.isVisible(), u'View') self.ViewServiceManagerItem = icon_action(mainWindow, u'ViewServiceManagerItem', u':/system/system_servicemanager.png', - self.serviceManagerDock.isVisible()) - actionList.add_action(self.ViewServiceManagerItem, u'View') + self.serviceManagerDock.isVisible(), u'View') self.ViewPreviewPanel = checkable_action(mainWindow, - u'ViewPreviewPanel', previewVisible) - actionList.add_action(self.ViewPreviewPanel, u'View') - self.ViewLivePanel = checkable_action(mainWindow, u'ViewLivePanel', - liveVisible) - actionList.add_action(self.ViewLivePanel, u'View') - self.ModeDefaultItem = checkable_action(mainWindow, u'ModeDefaultItem') - actionList.add_action(self.ModeDefaultItem, u'View Mode') - self.ModeSetupItem = checkable_action(mainWindow, u'ModeLiveItem') - actionList.add_action(self.ModeSetupItem, u'View Mode') - self.ModeLiveItem = checkable_action(mainWindow, u'ModeLiveItem', True) - actionList.add_action(self.ModeLiveItem, u'View Mode') + u'ViewPreviewPanel', previewVisible, u'View') + self.ViewLivePanel = checkable_action( + mainWindow, u'ViewLivePanel', liveVisible, u'View') + self.ModeDefaultItem = checkable_action( + mainWindow, u'ModeDefaultItem', category=u'View Mode') + self.ModeSetupItem = checkable_action( + mainWindow, u'ModeLiveItem', category=u'View Mode') + self.ModeLiveItem = checkable_action( + mainWindow, u'ModeLiveItem', True, u'View Mode') self.ModeGroup = QtGui.QActionGroup(mainWindow) self.ModeGroup.addAction(self.ModeDefaultItem) self.ModeGroup.addAction(self.ModeSetupItem) self.ModeGroup.addAction(self.ModeLiveItem) self.ModeDefaultItem.setChecked(True) self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', - u':/tools/tools_add.png') - actionList.add_action(self.ToolsAddToolItem, u'Tools') - self.ToolsOpenDataFolder = icon_action(mainWindow, - u'ToolsOpenDataFolder', u':/general/general_open.png') - actionList.add_action(self.ToolsOpenDataFolder, u'Tools') + u':/tools/tools_add.png', category=u'Tools') + self.ToolsOpenDataFolder = icon_action(mainWindow, u'ToolsOpenDataFolder', + u':/general/general_open.png', category=u'Tools') self.settingsPluginListItem = icon_action(mainWindow, - u'settingsPluginListItem', u':/system/settings_plugin_list.png') - actionList.add_action(self.settingsPluginListItem, - u'Settings') + u'settingsPluginListItem', u':/system/settings_plugin_list.png', + category=u'Settings') # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, u'AutoLanguageItem', LanguageManager.auto_language) - actionList.add_action(self.AutoLanguageItem, u'Settings') + #actionList.add_action(self.AutoLanguageItem, u'Settings') self.LanguageGroup = QtGui.QActionGroup(mainWindow) self.LanguageGroup.setExclusive(True) self.LanguageGroup.setObjectName(u'LanguageGroup') @@ -241,24 +229,22 @@ class Ui_MainWindow(object): add_actions(self.LanguageGroup, [languageItem]) self.SettingsShortcutsItem = icon_action(mainWindow, u'SettingsShortcutsItem', - u':/system/system_configure_shortcuts.png') + u':/system/system_configure_shortcuts.png', category=u'Settings') self.DisplayTagItem = icon_action(mainWindow, - u'DisplayTagItem', u':/system/tag_editor.png') + u'DisplayTagItem', u':/system/tag_editor.png', category=u'Settings') self.SettingsConfigureItem = icon_action(mainWindow, - u'SettingsConfigureItem', u':/system/system_settings.png') - actionList.add_action(self.SettingsShortcutsItem, - u'Settings') + u'SettingsConfigureItem', u':/system/system_settings.png', + category=u'Settings') self.HelpDocumentationItem = icon_action(mainWindow, - u'HelpDocumentationItem', u':/system/system_help_contents.png') + u'HelpDocumentationItem', u':/system/system_help_contents.png', + category=None)#u'Help') self.HelpDocumentationItem.setEnabled(False) - actionList.add_action(self.HelpDocumentationItem, u'Help') self.HelpAboutItem = icon_action(mainWindow, u'HelpAboutItem', - u':/system/system_about.png') - actionList.add_action(self.HelpAboutItem, u'Help') - self.HelpOnlineHelpItem = base_action(mainWindow, u'HelpOnlineHelpItem') - actionList.add_action(self.HelpOnlineHelpItem, u'Help') - self.helpWebSiteItem = base_action(mainWindow, u'helpWebSiteItem') - actionList.add_action(self.helpWebSiteItem, u'Help') + u':/system/system_about.png', category=None)#u'Help') + self.HelpOnlineHelpItem = base_action( + mainWindow, u'HelpOnlineHelpItem', category=u'Help') + self.helpWebSiteItem = base_action( + mainWindow, u'helpWebSiteItem', category=u'Help') add_actions(self.FileImportMenu, (self.ImportThemeItem, self.ImportLanguageItem)) add_actions(self.FileExportMenu, diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index a61dd41ed..071482f95 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -45,6 +45,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): #TODO: ability to remove actions #TODO: Save shortcuts #TODO: doc +#TODO: Fix Preview/Live controller (have the same shortcut) def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) @@ -89,7 +90,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): # The dialog is opened the first time if self.treeWidget.topLevelItemCount() == 0: QtCore.QObject.connect(actionList.signal, - QtCore.SIGNAL(u'addedAction()'), self.initialiseActionList) + QtCore.SIGNAL(u'addedAction()'), self.asdf) self.initialiseActionList() self.refreshActionList() return QtGui.QDialog.exec_(self) @@ -125,6 +126,18 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): item.setExpanded(True) self.treeWidget.addTopLevelItem(item) + def asdf(self, action, category): + print action + for category in actionList.categories: + item = QtGui.QTreeWidgetItem([category.name]) + for action in category.actions: + actionItem = QtGui.QTreeWidgetItem() + actionItem.setIcon(0, action.icon()) + actionItem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(action)) + item.addChild(actionItem) + item.setExpanded(True) + self.treeWidget.addTopLevelItem(item) + def onShortcutButtonClicked(self, toggled): if toggled: return diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 1ae84e950..cafbec198 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -156,15 +156,15 @@ class SlideController(QtGui.QWidget): self.hideMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Hide'), self.toolbar)) self.blankScreen = icon_action(self.hideMenu, u'Blank Screen', - u':/slides/slide_blank.png', False) + u':/slides/slide_blank.png', False, u'Live Toolbar') self.blankScreen.setText( translate('OpenLP.SlideController', 'Blank Screen')) self.themeScreen = icon_action(self.hideMenu, u'Blank Theme', - u':/slides/slide_theme.png', False) + u':/slides/slide_theme.png', False, u'Live Toolbar') self.themeScreen.setText( translate('OpenLP.SlideController', 'Blank to Theme')) self.desktopScreen = icon_action(self.hideMenu, u'Desktop Screen', - u':/slides/slide_desktop.png', False) + u':/slides/slide_desktop.png', False, u'Live Toolbar') self.desktopScreen.setText( translate('OpenLP.SlideController', 'Show Desktop')) self.hideMenu.setDefaultAction(self.blankScreen) @@ -364,30 +364,27 @@ class SlideController(QtGui.QWidget): def setPreviewHotkeys(self, parent=None): self.previousItem.setShortcuts([QtCore.Qt.Key_Up, 0]) - actionList.add_action(self.previousItem, u'Preview') + actionList.add_action(self.previousItem, u'Preview Toolbar') self.nextItem.setShortcuts([QtCore.Qt.Key_Down, 0]) - actionList.add_action(self.nextItem, u'Preview') + actionList.add_action(self.nextItem, u'Preview Toolbar') def setLiveHotkeys(self, parent=None): self.previousItem.setShortcuts([QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp]) self.previousItem.setShortcutContext( QtCore.Qt.WidgetWithChildrenShortcut) - actionList.add_action(self.previousItem, u'Live') + actionList.add_action(self.previousItem, u'Live Toolbar') self.nextItem.setShortcuts([QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown]) self.nextItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) - actionList.add_action(self.nextItem, u'Live') + actionList.add_action(self.nextItem, u'Live Toolbar') self.previousService = shortcut_action(parent, translate('OpenLP.SlideController', 'Previous Service'), - [QtCore.Qt.Key_Left, 0], self.servicePrevious) - actionList.add_action(self.previousService, u'Live') + [QtCore.Qt.Key_Left, 0], self.servicePrevious, u'Live Toolbar') self.nextService = shortcut_action(parent, translate('OpenLP.SlideController', 'Next Service'), - [QtCore.Qt.Key_Right, 0], self.serviceNext) - actionList.add_action(self.nextService, u'Live') + [QtCore.Qt.Key_Right, 0], self.serviceNext, u'Live Toolbar') self.escapeItem = shortcut_action(parent, translate('OpenLP.SlideController', 'Escape Item'), - [QtCore.Qt.Key_Escape, 0], self.liveEscape) - actionList.add_action(self.escapeItem, u'Live') + [QtCore.Qt.Key_Escape, 0], self.liveEscape, u'Live Toolbar') def liveEscape(self): self.display.setVisible(False) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 3c639297e..1bc7037ae 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -495,7 +495,7 @@ def get_uno_instance(resolver): from languagemanager import LanguageManager from actions import ActionList -__all__ = [u'AppLocation', u'check_latest_version', u'add_actions', - u'get_filesystem_encoding', u'LanguageManager', u'ActionList', - u'get_web_page', u'file_is_unicode', u'string_is_unicode', +__all__ = [u'AppLocation', u'get_application_version', u'check_latest_version', + u'add_actions', u'get_filesystem_encoding', u'LanguageManager', + u'ActionList', u'get_web_page', u'file_is_unicode', u'string_is_unicode', u'get_uno_command', u'get_uno_instance', u'delete_file'] diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index ba4a7b40d..b592c9a69 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -184,7 +184,7 @@ class ActionList(object): self.categories[category].actions.append(action) else: self.categories[category].actions.add(action, weight) - self.signal.emit(QtCore.SIGNAL(u'addedAction()')) + self.signal.emit(QtCore.SIGNAL(u'addedAction(QtGui.QAction, QString)'), action, QtCore.QString(category)) class Emit(QtCore.QObject): diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 2d22d2d5a..c397fb9c4 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -62,7 +62,6 @@ class AlertsPlugin(Plugin): log.info(u'add tools menu') self.toolsAlertItem = icon_action(tools_menu, u'toolsAlertItem', u':/plugins/plugin_alerts.png') - actionList.add_action(self.toolsAlertItem, u'Extra') self.toolsAlertItem.setText(translate('AlertsPlugin', '&Alert')) self.toolsAlertItem.setStatusTip( translate('AlertsPlugin', 'Show an alert message.')) @@ -76,6 +75,7 @@ class AlertsPlugin(Plugin): log.info(u'Alerts Initialising') Plugin.initialise(self) self.toolsAlertItem.setVisible(True) + actionList.add_action(self.toolsAlertItem, u'Tools') self.liveController.alertTab = self.settings_tab def finalise(self): @@ -86,6 +86,7 @@ class AlertsPlugin(Plugin): self.manager.finalise() Plugin.finalise(self) self.toolsAlertItem.setVisible(False) + #TODO: remove the action from the actionList def toggleAlertsState(self): self.alertsActive = not self.alertsActive From b9b0cbbe9c3492f3aa6403f09cea64631d789455 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 29 Mar 2011 21:52:21 +0200 Subject: [PATCH 004/148] removed things, as this did not work --- openlp/core/ui/mainwindow.py | 6 +-- openlp/core/ui/shortcutlistdialog.py | 2 + openlp/core/ui/shortcutlistform.py | 58 +++++++++++++++------------- openlp/core/utils/actions.py | 9 ----- openlp/plugins/songs/songsplugin.py | 14 +++---- 5 files changed, 43 insertions(+), 46 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c37db0b97..cf58dedd8 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -177,11 +177,11 @@ class Ui_MainWindow(object): self.ImportThemeItem = base_action( mainWindow, u'ImportThemeItem', u'Import') self.ImportLanguageItem = base_action( - mainWindow, u'ImportLanguageItem', u'Import') + mainWindow, u'ImportLanguageItem')#, u'Import') self.ExportThemeItem = base_action( mainWindow, u'ExportThemeItem', u'Export') self.ExportLanguageItem = base_action( - mainWindow, u'ExportLanguageItem', u'Export') + mainWindow, u'ExportLanguageItem')#, u'Export') self.ViewMediaManagerItem = icon_action(mainWindow, u'ViewMediaManagerItem', u':/system/system_mediamanager.png', self.mediaManagerDock.isVisible(), u'View') @@ -240,7 +240,7 @@ class Ui_MainWindow(object): category=None)#u'Help') self.HelpDocumentationItem.setEnabled(False) self.HelpAboutItem = icon_action(mainWindow, u'HelpAboutItem', - u':/system/system_about.png', category=None)#u'Help') + u':/system/system_about.png', category=u'Help') self.HelpOnlineHelpItem = base_action( mainWindow, u'HelpOnlineHelpItem', category=u'Help') self.helpWebSiteItem = base_action( diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 4e5b9e270..4e0d7d144 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -30,6 +30,7 @@ from openlp.core.lib import translate, build_icon class Ui_ShortcutListDialog(object): def setupUi(self, shortcutListDialog): + shortcutListDialog.resize(440, 450) shortcutListDialog.setObjectName(u'shortcutListDialog') self.dialogLayout = QtGui.QVBoxLayout(shortcutListDialog) self.dialogLayout.setObjectName(u'dialogLayout') @@ -52,6 +53,7 @@ class Ui_ShortcutListDialog(object): build_icon(u':/system/system_configure_shortcuts.png')) self.shortcutButton.setCheckable(True) self.shortcutButton.setObjectName(u'shortcutButton') + self.shortcutButton.setFixedSize(150, 30) self.customLayout.addWidget(self.shortcutButton) self.clearShortcutButton = QtGui.QToolButton(shortcutListDialog) self.clearShortcutButton.setIcon( diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 83b5de84b..4d785cfc0 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -41,10 +41,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ The shortcut list dialog """ -#TODO: do not close on ESC -#TODO: ability to remove actions -#TODO: Save shortcuts -#TODO: doc +#TODO: do not close on ESC, ability to remove actions, save/load shortcuts, docs #TODO: Fix Preview/Live controller (have the same shortcut) def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) @@ -87,21 +84,17 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.shortcutButton.setChecked(False) def exec_(self): - # The dialog is opened the first time - if self.treeWidget.topLevelItemCount() == 0: - QtCore.QObject.connect(actionList.signal, - QtCore.SIGNAL(u'addedAction()'), self.initialiseActionList) - self.initialiseActionList() self.refreshActionList() return QtGui.QDialog.exec_(self) def refreshActionList(self): + # As refreshing does not work, the check does not work either. self.assingedShortcuts = [] - iterator = QtGui.QTreeWidgetItemIterator(self.treeWidget) - while iterator.value(): - treewidgetItem = iterator.value() - action = treewidgetItem.data(0, QtCore.Qt.UserRole).toPyObject() - if action is not None: + #self.treeWidget.clear() + for category in actionList.categories: + item = QtGui.QTreeWidgetItem([category.name]) + for action in category.actions: + self.assingedShortcuts.extend(action.shortcuts()) actionText = REMOVE_AMPERSAND.sub('', unicode(action.text())) if len(action.shortcuts()) == 2: shortcutText = action.shortcuts()[0].toString() @@ -109,19 +102,11 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): else: shortcutText = action.shortcut().toString() alternateText = u'' - self.assingedShortcuts.extend(action.shortcuts()) - treewidgetItem.setText(0, actionText) - treewidgetItem.setText(1, shortcutText) - treewidgetItem.setText(2, alternateText) - iterator += 1 - - def initialiseActionList(self): - for category in actionList.categories: - item = QtGui.QTreeWidgetItem([category.name]) - for action in category.actions: - actionItem = QtGui.QTreeWidgetItem() + actionItem = QtGui.QTreeWidgetItem( + [actionText, shortcutText, alternateText]) actionItem.setIcon(0, action.icon()) - actionItem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(action)) + actionItem.setData(0, + QtCore.Qt.UserRole, QtCore.QVariant(action)) item.addChild(actionItem) item.setExpanded(True) self.treeWidget.addTopLevelItem(item) @@ -135,13 +120,16 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): return # TODO: Sort out which shortcuts should be kept. action.setShortcuts(QtGui.QKeySequence(self.shortcutButton.text())) + item.setText(1, self.shortcutButton.text()) self.refreshActionList() def onItemPressed(self, item, column): item = self.treeWidget.currentItem() action = item.data(0, QtCore.Qt.UserRole).toPyObject() + self.shortcutButton.setEnabled(action is not None) if action is None: text = u'' + self.shortcutButton.setChecked(False) else: if len(action.shortcuts()) == 0: text = u'' @@ -150,3 +138,21 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): else: text = action.shortcuts()[0].toString() self.shortcutButton.setText(text) + + def saveShortcuts(self): + """ + Save the shortcuts. + """ + settings = QtCore.QSettings() + settings.beginGroup(u'shortcuts') + # TODO: Save shortcuts + settings.endGroup() + + def loadShortcuts(self): + """ + Load the shortcuts. + """ + settings = QtCore.QSettings() + settings.beginGroup(u'shortcuts') + # TODO: Load shortcuts + settings.endGroup() diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index ba4a7b40d..69aeb14b4 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -27,8 +27,6 @@ The :mod:`~openlp.core.utils.actions` module provides action list classes used by the shortcuts system. """ -from PyQt4 import QtCore - class ActionCategory(object): """ The :class:`~openlp.core.utils.ActionCategory` class encapsulates a @@ -175,7 +173,6 @@ class ActionList(object): """ def __init__(self): self.categories = CategoryList() - self.signal = Emit() def add_action(self, action, category=u'Default', weight=None): if category not in self.categories: @@ -184,11 +181,5 @@ class ActionList(object): self.categories[category].actions.append(action) else: self.categories[category].actions.add(action, weight) - self.signal.emit(QtCore.SIGNAL(u'addedAction()')) - - -class Emit(QtCore.QObject): - def __init__(self): - QtCore.QObject.__init__(self) actionList = ActionList() diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 1260a832b..e1731bc01 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -33,7 +33,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ Receiver from openlp.core.lib.db import Manager -from openlp.core.lib.ui import UiStrings +from openlp.core.lib.ui import UiStrings, base_action, icon_action from openlp.plugins.songs.lib import clean_song, SongMediaItem, SongsTab from openlp.plugins.songs.lib.db import init_schema, Song from openlp.plugins.songs.lib.importer import SongFormat @@ -78,8 +78,8 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongImportItem = QtGui.QAction(import_menu) - self.SongImportItem.setObjectName(u'SongImportItem') + self.SongImportItem = base_action( + import_menu, u'SongImportItem', u'Import') self.SongImportItem.setText(translate( 'SongsPlugin', '&Song')) self.SongImportItem.setToolTip(translate('SongsPlugin', @@ -99,8 +99,7 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongExportItem = QtGui.QAction(export_menu) - self.SongExportItem.setObjectName(u'SongExportItem') + self.SongExportItem = base_action(export_menu, u'SongExportItem', u'Export') self.SongExportItem.setText(translate( 'SongsPlugin', '&Song')) self.SongExportItem.setToolTip(translate('SongsPlugin', @@ -120,9 +119,8 @@ class SongsPlugin(Plugin): use it as their parent. """ log.info(u'add tools menu') - self.toolsReindexItem = QtGui.QAction(tools_menu) - self.toolsReindexItem.setIcon(build_icon(u':/plugins/plugin_songs.png')) - self.toolsReindexItem.setObjectName(u'toolsReindexItem') + self.toolsReindexItem = icon_action(tools_menu, u'toolsReindexItem', + u':/plugins/plugin_songs.png', category=u'Tools') self.toolsReindexItem.setText( translate('SongsPlugin', '&Re-index Songs')) self.toolsReindexItem.setStatusTip( From e20fd7d85d62707d3b6e78858aaa0174fc0ccba4 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 29 Mar 2011 21:58:04 +0200 Subject: [PATCH 005/148] clean up --- openlp/core/ui/mainwindow.py | 2 -- openlp/core/ui/shortcutlistform.py | 6 ++++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index cf58dedd8..f4cec4ae7 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -39,7 +39,6 @@ from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ShortcutListForm, DisplayTagForm from openlp.core.utils import AppLocation, add_actions, LanguageManager, \ get_application_version -#from openlp.core.utils.actions import actionList log = logging.getLogger(__name__) @@ -216,7 +215,6 @@ class Ui_MainWindow(object): # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, u'AutoLanguageItem', LanguageManager.auto_language) - #actionList.add_action(self.AutoLanguageItem, u'Settings') self.LanguageGroup = QtGui.QActionGroup(mainWindow) self.LanguageGroup.setExclusive(True) self.LanguageGroup.setObjectName(u'LanguageGroup') diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 4d785cfc0..2dbb57f2d 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -41,8 +41,10 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ The shortcut list dialog """ -#TODO: do not close on ESC, ability to remove actions, save/load shortcuts, docs -#TODO: Fix Preview/Live controller (have the same shortcut) +#TODO: do not close on ESC, ability to remove actions (e. g. reindex tool) +#TODO: save/load shortcuts, docs +#TODO: Fix Preview/Live controller (have the same shortcut), make sure + def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) From 9b939bb9624eca001999b65b87adcc9987ecf070 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 30 Mar 2011 12:12:39 +0200 Subject: [PATCH 006/148] fixed reloading --- openlp/core/ui/shortcutlistform.py | 5 ++--- openlp/core/utils/actions.py | 12 +++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 2dbb57f2d..b524c5d06 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -90,12 +90,11 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): return QtGui.QDialog.exec_(self) def refreshActionList(self): - # As refreshing does not work, the check does not work either. self.assingedShortcuts = [] - #self.treeWidget.clear() + self.treeWidget.clear() for category in actionList.categories: item = QtGui.QTreeWidgetItem([category.name]) - for action in category.actions: + for action, default in category.actions: self.assingedShortcuts.extend(action.shortcuts()) actionText = REMOVE_AMPERSAND.sub('', unicode(action.text())) if len(action.shortcuts()) == 2: diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 69aeb14b4..cbfa3a488 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -27,9 +27,9 @@ The :mod:`~openlp.core.utils.actions` module provides action list classes used by the shortcuts system. """ -class ActionCategory(object): +class Category(object): """ - The :class:`~openlp.core.utils.ActionCategory` class encapsulates a + The :class:`~openlp.core.utils.Category` class encapsulates a category for the :class:`~openlp.core.utils.CategoryList` class. """ def __init__(self, name, weight=0): @@ -67,10 +67,11 @@ class CategoryActionList(object): Python 3 "next" method. """ if self.index >= len(self.actions): + self.index = 0 raise StopIteration else: self.index += 1 - return self.actions[self.index - 1][1] + return self.actions[self.index - 1][1:] def next(self): """ @@ -91,7 +92,7 @@ class CategoryActionList(object): self.add(name, weight) def add(self, action, weight=0): - self.actions.append((weight, action)) + self.actions.append((weight, action, action.shortcuts())) self.actions.sort(key=lambda act: act[0]) @@ -126,6 +127,7 @@ class CategoryList(object): Python 3 "next" method for iterator. """ if self.index >= len(self.categories): + self.index = 0 raise StopIteration else: self.index += 1 @@ -153,7 +155,7 @@ class CategoryList(object): self.add(name, weight) def add(self, name, weight=0, actions=None): - category = ActionCategory(name, weight) + category = Category(name, weight) if actions: for action in actions: if isinstance(action, tuple): From fe92842c6b656610190791221b99c87d31898f1a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 30 Mar 2011 12:27:27 +0200 Subject: [PATCH 007/148] added ability to remove actions --- openlp/core/ui/shortcutlistform.py | 4 ++-- openlp/core/utils/actions.py | 17 ++++++++++++++--- openlp/plugins/alerts/alertsplugin.py | 2 +- openlp/plugins/songs/songsplugin.py | 14 ++++++++++---- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index b524c5d06..fd5a53813 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -41,7 +41,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ The shortcut list dialog """ -#TODO: do not close on ESC, ability to remove actions (e. g. reindex tool) +#TODO: do not close on ESC #TODO: save/load shortcuts, docs #TODO: Fix Preview/Live controller (have the same shortcut), make sure @@ -94,7 +94,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.treeWidget.clear() for category in actionList.categories: item = QtGui.QTreeWidgetItem([category.name]) - for action, default in category.actions: + for action in category.actions: self.assingedShortcuts.extend(action.shortcuts()) actionText = REMOVE_AMPERSAND.sub('', unicode(action.text())) if len(action.shortcuts()) == 2: diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index cbfa3a488..8887a7e30 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -71,7 +71,7 @@ class CategoryActionList(object): raise StopIteration else: self.index += 1 - return self.actions[self.index - 1][1:] + return self.actions[self.index - 1][1] def next(self): """ @@ -92,9 +92,15 @@ class CategoryActionList(object): self.add(name, weight) def add(self, action, weight=0): - self.actions.append((weight, action, action.shortcuts())) + self.actions.append((weight, action)) self.actions.sort(key=lambda act: act[0]) + def remove(self, remove_action): + for action in self.actions: + if action[1] == remove_action: + self.actions.remove(action) + return + class CategoryList(object): """ @@ -176,7 +182,7 @@ class ActionList(object): def __init__(self): self.categories = CategoryList() - def add_action(self, action, category=u'Default', weight=None): + def add_action(self, action, category, weight=None): if category not in self.categories: self.categories.append(category) if weight is None: @@ -184,4 +190,9 @@ class ActionList(object): else: self.categories[category].actions.add(action, weight) + def remove_action(self, action, category): + if category not in self.categories: + return + self.categories[category].actions.remove(action) + actionList = ActionList() diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index c397fb9c4..a10d56a20 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -86,7 +86,7 @@ class AlertsPlugin(Plugin): self.manager.finalise() Plugin.finalise(self) self.toolsAlertItem.setVisible(False) - #TODO: remove the action from the actionList + actionList.remove_action(self.toolsAlertItem, u'Tools') def toggleAlertsState(self): self.alertsActive = not self.alertsActive diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index e1731bc01..e5ce25906 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -34,6 +34,7 @@ from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ Receiver from openlp.core.lib.db import Manager from openlp.core.lib.ui import UiStrings, base_action, icon_action +from openlp.core.utils.actions import actionList from openlp.plugins.songs.lib import clean_song, SongMediaItem, SongsTab from openlp.plugins.songs.lib.db import init_schema, Song from openlp.plugins.songs.lib.importer import SongFormat @@ -65,6 +66,9 @@ class SongsPlugin(Plugin): log.info(u'Songs Initialising') Plugin.initialise(self) self.toolsReindexItem.setVisible(True) + actionList.add_action(self.SongImportItem, u'Import') + actionList.add_action(self.SongExportItem, u'Export') + actionList.add_action(self.toolsReindexItem, u'Tools') self.mediaItem.displayResultsSong( self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) @@ -78,8 +82,7 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongImportItem = base_action( - import_menu, u'SongImportItem', u'Import') + self.SongImportItem = base_action(import_menu, u'SongImportItem') self.SongImportItem.setText(translate( 'SongsPlugin', '&Song')) self.SongImportItem.setToolTip(translate('SongsPlugin', @@ -99,7 +102,7 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongExportItem = base_action(export_menu, u'SongExportItem', u'Export') + self.SongExportItem = base_action(export_menu, u'SongExportItem') self.SongExportItem.setText(translate( 'SongsPlugin', '&Song')) self.SongExportItem.setToolTip(translate('SongsPlugin', @@ -120,7 +123,7 @@ class SongsPlugin(Plugin): """ log.info(u'add tools menu') self.toolsReindexItem = icon_action(tools_menu, u'toolsReindexItem', - u':/plugins/plugin_songs.png', category=u'Tools') + u':/plugins/plugin_songs.png') self.toolsReindexItem.setText( translate('SongsPlugin', '&Re-index Songs')) self.toolsReindexItem.setStatusTip( @@ -257,4 +260,7 @@ class SongsPlugin(Plugin): log.info(u'Songs Finalising') self.manager.finalise() self.toolsReindexItem.setVisible(False) + actionList.remove_action(self.SongImportItem, u'Import') + actionList.remove_action(self.SongExportItem, u'Export') + actionList.remove_action(self.toolsReindexItem, u'Tools') Plugin.finalise(self) From 5ef0cc12c09cf523b8fa3563d41fc9f3261e692a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 30 Mar 2011 18:34:40 +0200 Subject: [PATCH 008/148] started working on saving/loading shortcuts --- openlp/core/ui/mainwindow.py | 3 +- openlp/core/ui/shortcutlistdialog.py | 11 ------ openlp/core/ui/shortcutlistform.py | 55 ++++++++++++++++++++-------- openlp/core/utils/actions.py | 7 ++-- 4 files changed, 45 insertions(+), 31 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index f4cec4ae7..d0f6338e3 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -761,7 +761,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Show the shortcuts dialog """ - self.shortcutForm.exec_() + if self.shortcutForm.exec_(): + self.shortcutForm.saveShortcuts() def onModeDefaultItemClicked(self): """ diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 4e0d7d144..467fb0534 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -39,15 +39,8 @@ class Ui_ShortcutListDialog(object): self.treeWidget.setObjectName(u'treeWidget') self.treeWidget.setColumnCount(3) self.dialogLayout.addWidget(self.treeWidget) - self.defaultButton = QtGui.QRadioButton(shortcutListDialog) - self.defaultButton.setChecked(True) - self.defaultButton.setObjectName(u'defaultButton') - self.dialogLayout.addWidget(self.defaultButton) self.customLayout = QtGui.QHBoxLayout() self.customLayout.setObjectName(u'customLayout') - self.customButton = QtGui.QRadioButton(shortcutListDialog) - self.customButton.setObjectName(u'customButton') - self.customLayout.addWidget(self.customButton) self.shortcutButton = QtGui.QPushButton(shortcutListDialog) self.shortcutButton.setIcon( build_icon(u':/system/system_configure_shortcuts.png')) @@ -82,9 +75,5 @@ class Ui_ShortcutListDialog(object): translate('OpenLP.ShortcutListDialog', 'Action'), translate('OpenLP.ShortcutListDialog', 'Shortcut'), translate('OpenLP.ShortcutListDialog', 'Alternate')]) - self.defaultButton.setText( - translate('OpenLP.ShortcutListDialog', 'Default: %s')) - self.customButton.setText( - translate('OpenLP.ShortcutListDialog', 'Custom:')) self.shortcutButton.setText( translate('OpenLP.ShortcutListDialog', 'None')) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index fd5a53813..127569f24 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -49,6 +49,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.assingedShortcuts = [] + self.column = -1 self.shortcutButton.setText(u'') QtCore.QObject.connect(self.shortcutButton, QtCore.SIGNAL(u'toggled(bool)'), self.onShortcutButtonClicked) @@ -119,25 +120,40 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action = item.data(0, QtCore.Qt.UserRole).toPyObject() if action is None: return - # TODO: Sort out which shortcuts should be kept. - action.setShortcuts(QtGui.QKeySequence(self.shortcutButton.text())) - item.setText(1, self.shortcutButton.text()) - self.refreshActionList() + shortcuts = [] + if self.column == 1: + # We are changing the primary shortcut. + shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) + if len(action.shortcuts()) == 2: + shortcuts.append(action.shortcuts()[1]) + else: + shortcuts.append(0) + item.setText(1, self.shortcutButton.text()) + elif self.column == 2: + # We are changing the secondary shortcut. + if len(action.shortcuts()) == 1: + shortcuts.append(action.shortcuts()[0]) + else: + shortcuts.append(0) + shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) + item.setText(2, self.shortcutButton.text()) + else: + return + action.setShortcuts(shortcuts) def onItemPressed(self, item, column): + self.column = column item = self.treeWidget.currentItem() action = item.data(0, QtCore.Qt.UserRole).toPyObject() - self.shortcutButton.setEnabled(action is not None) - if action is None: - text = u'' - self.shortcutButton.setChecked(False) - else: - if len(action.shortcuts()) == 0: - text = u'' - elif len(action.shortcuts()) == 2 and column == 2: - text = action.shortcuts()[1].toString() - else: - text = action.shortcuts()[0].toString() + self.shortcutButton.setEnabled(True) + text = u'' + if action is None or column not in [1, 2] or \ + len(action.shortcuts()) == 0: + self.shortcutButton.setEnabled(False) + elif column == 1: + text = action.shortcuts()[0].toString() + elif len(action.shortcuts()) == 2: + text = action.shortcuts()[1].toString() self.shortcutButton.setText(text) def saveShortcuts(self): @@ -146,7 +162,12 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ settings = QtCore.QSettings() settings.beginGroup(u'shortcuts') - # TODO: Save shortcuts + for category in actionList.categories: + break + for action in category.actions: + if action.defaultShortcuts != action.shortcuts(): + settings.setValue(action.text(), + QtCore.QVariant(action.shortcuts())) settings.endGroup() def loadShortcuts(self): @@ -155,5 +176,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ settings = QtCore.QSettings() settings.beginGroup(u'shortcuts') + for shortcut in settings.allKeys(): + pass # TODO: Load shortcuts settings.endGroup() diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 8887a7e30..d94ee1511 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -27,9 +27,9 @@ The :mod:`~openlp.core.utils.actions` module provides action list classes used by the shortcuts system. """ -class Category(object): +class ActionCategory(object): """ - The :class:`~openlp.core.utils.Category` class encapsulates a + The :class:`~openlp.core.utils.ActionCategory` class encapsulates a category for the :class:`~openlp.core.utils.CategoryList` class. """ def __init__(self, name, weight=0): @@ -161,7 +161,7 @@ class CategoryList(object): self.add(name, weight) def add(self, name, weight=0, actions=None): - category = Category(name, weight) + category = ActionCategory(name, weight) if actions: for action in actions: if isinstance(action, tuple): @@ -185,6 +185,7 @@ class ActionList(object): def add_action(self, action, category, weight=None): if category not in self.categories: self.categories.append(category) + action.defaultShortcuts = action.shortcuts() if weight is None: self.categories[category].actions.append(action) else: From 772bd8eb66daa57a0c9b8759cbad4b11e22f9282 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 30 Mar 2011 19:50:36 +0200 Subject: [PATCH 009/148] basic saving and loading of shortcuts --- openlp/core/ui/mainwindow.py | 2 +- openlp/core/ui/shortcutlistform.py | 33 +++++++++--------------------- openlp/core/utils/actions.py | 12 +++++++++++ 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index d0f6338e3..1fdf0fd76 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -762,7 +762,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): Show the shortcuts dialog """ if self.shortcutForm.exec_(): - self.shortcutForm.saveShortcuts() + self.shortcutForm.save() def onModeDefaultItemClicked(self): """ diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 127569f24..15c6c53e5 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -87,10 +87,10 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.shortcutButton.setChecked(False) def exec_(self): - self.refreshActionList() + self.reloadActionList() return QtGui.QDialog.exec_(self) - def refreshActionList(self): + def reloadActionList(self): self.assingedShortcuts = [] self.treeWidget.clear() for category in actionList.categories: @@ -147,36 +147,23 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action = item.data(0, QtCore.Qt.UserRole).toPyObject() self.shortcutButton.setEnabled(True) text = u'' - if action is None or column not in [1, 2] or \ - len(action.shortcuts()) == 0: + if action is None or column not in [1, 2]: self.shortcutButton.setEnabled(False) - elif column == 1: + elif column == 1 and len(action.shortcuts()) != 0: text = action.shortcuts()[0].toString() - elif len(action.shortcuts()) == 2: + elif len(action.shortcuts()) == 2 and len(action.shortcuts()) != 0: text = action.shortcuts()[1].toString() self.shortcutButton.setText(text) - def saveShortcuts(self): + def save(self): """ - Save the shortcuts. + Save the shortcuts. **Note**, that we do not have to load the shortcuts, + as they are loaded in :class:`~openlp.core.utils.ActionList`. """ settings = QtCore.QSettings() settings.beginGroup(u'shortcuts') for category in actionList.categories: - break for action in category.actions: - if action.defaultShortcuts != action.shortcuts(): - settings.setValue(action.text(), - QtCore.QVariant(action.shortcuts())) - settings.endGroup() - - def loadShortcuts(self): - """ - Load the shortcuts. - """ - settings = QtCore.QSettings() - settings.beginGroup(u'shortcuts') - for shortcut in settings.allKeys(): - pass - # TODO: Load shortcuts + settings.setValue( + action.objectName(), QtCore.QVariant(action.shortcuts())) settings.endGroup() diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index d94ee1511..6b7df6817 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -27,6 +27,10 @@ The :mod:`~openlp.core.utils.actions` module provides action list classes used by the shortcuts system. """ +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import translate + class ActionCategory(object): """ The :class:`~openlp.core.utils.ActionCategory` class encapsulates a @@ -190,6 +194,14 @@ class ActionList(object): self.categories[category].actions.append(action) else: self.categories[category].actions.add(action, weight) + # Load the shortcut from the config. + settings = QtCore.QSettings() + settings.beginGroup(u'shortcuts') + shortcuts = settings.value(action.objectName(), + QtCore.QVariant(action.shortcuts())).toStringList() + action.setShortcuts( + [QtGui.QKeySequence(shortcut) for shortcut in shortcuts]) + settings.endGroup() def remove_action(self, action, category): if category not in self.categories: From bf2a9d338b25dbce73ed0c3f4ec2a2724e9a2b96 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 30 Mar 2011 20:12:05 +0200 Subject: [PATCH 010/148] clean up --- openlp/core/lib/ui.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 86def01d8..44bf7c0dd 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -242,6 +242,11 @@ def create_up_down_push_button_set(parent): def base_action(parent, name, category=None): """ Return the most basic action with the object name set. + + ``category`` + The category the action should be listed in the shortcut dialog. If you + not wish, that this action is added to the shortcut dialog, then do not + state any. """ action = QtGui.QAction(parent) action.setObjectName(name) @@ -262,11 +267,6 @@ def checkable_action(parent, name, checked=None, category=None): def icon_action(parent, name, icon, checked=None, category=None): """ Return a standard action with an icon. - - ``category`` - The category the action should be listed in the shortcut dialog. If you - not wish, that this action is added to the shortcut dialog, then do not - state any. """ if checked is not None: action = checkable_action(parent, name, checked, category) From fb78350a44f421e3bb8b4b3184e51eeb2194fc61 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 30 Mar 2011 20:27:33 +0200 Subject: [PATCH 011/148] added bible actions --- openlp/plugins/bibles/bibleplugin.py | 16 +++++++++------- openlp/plugins/songs/songsplugin.py | 6 ++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 4f677f211..86d751e9a 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -29,6 +29,8 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate +from openlp.core.lib.ui import base_action +from openlp.core.utils.actions import actionList from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem log = logging.getLogger(__name__) @@ -50,6 +52,9 @@ class BiblePlugin(Plugin): self.manager = BibleManager(self) Plugin.initialise(self) self.importBibleItem.setVisible(True) + actionList.add_action(self.importBibleItem, u'Import') + # Do not add the action to the list yet. + #actionList.add_action(self.exportBibleItem, u'Export') # Set to invisible until we can export bibles self.exportBibleItem.setVisible(False) @@ -64,21 +69,18 @@ class BiblePlugin(Plugin): self.exportBibleItem.setVisible(False) def addImportMenuItem(self, import_menu): - self.importBibleItem = QtGui.QAction(import_menu) - self.importBibleItem.setObjectName(u'importBibleItem') + self.importBibleItem = base_action(import_menu, u'importBibleItem') + self.importBibleItem.setText(translate('BiblesPlugin', '&Bible')) import_menu.addAction(self.importBibleItem) - self.importBibleItem.setText( - translate('BiblesPlugin', '&Bible')) # signals and slots QtCore.QObject.connect(self.importBibleItem, QtCore.SIGNAL(u'triggered()'), self.onBibleImportClick) self.importBibleItem.setVisible(False) def addExportMenuItem(self, export_menu): - self.exportBibleItem = QtGui.QAction(export_menu) - self.exportBibleItem.setObjectName(u'exportBibleItem') - export_menu.addAction(self.exportBibleItem) + self.exportBibleItem = base_action(export_menu, u'exportBibleItem') self.exportBibleItem.setText(translate('BiblesPlugin', '&Bible')) + export_menu.addAction(self.exportBibleItem) self.exportBibleItem.setVisible(False) def onBibleImportClick(self): diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index e5ce25906..12462428e 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -83,8 +83,7 @@ class SongsPlugin(Plugin): """ # Main song import menu item - will eventually be the only one self.SongImportItem = base_action(import_menu, u'SongImportItem') - self.SongImportItem.setText(translate( - 'SongsPlugin', '&Song')) + self.SongImportItem.setText(translate('SongsPlugin', '&Song')) self.SongImportItem.setToolTip(translate('SongsPlugin', 'Import songs using the import wizard.')) import_menu.addAction(self.SongImportItem) @@ -103,8 +102,7 @@ class SongsPlugin(Plugin): """ # Main song import menu item - will eventually be the only one self.SongExportItem = base_action(export_menu, u'SongExportItem') - self.SongExportItem.setText(translate( - 'SongsPlugin', '&Song')) + self.SongExportItem.setText(translate('SongsPlugin', '&Song')) self.SongExportItem.setToolTip(translate('SongsPlugin', 'Exports songs using the export wizard.')) export_menu.addAction(self.SongExportItem) From bba2f2c604245e959dd27d336950624e095454e9 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 30 Mar 2011 20:52:21 +0200 Subject: [PATCH 012/148] docs --- openlp/core/ui/shortcutlistform.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 15c6c53e5..97d21bebf 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -42,9 +42,9 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): The shortcut list dialog """ #TODO: do not close on ESC -#TODO: save/load shortcuts, docs -#TODO: Fix Preview/Live controller (have the same shortcut), make sure - +#TODO: Fix Preview/Live controller (have the same shortcut) +#TODO: double click event +#TODO: refresh self.assingedShortcuts def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) @@ -91,6 +91,9 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): return QtGui.QDialog.exec_(self) def reloadActionList(self): + """ + Reload the ``treeWidget`` list to add new and remove old actions. + """ self.assingedShortcuts = [] self.treeWidget.clear() for category in actionList.categories: @@ -114,6 +117,9 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.treeWidget.addTopLevelItem(item) def onShortcutButtonClicked(self, toggled): + """ + Save the new shortcut to the action if the button is unchanged. + """ if toggled: return item = self.treeWidget.currentItem() @@ -142,6 +148,10 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action.setShortcuts(shortcuts) def onItemPressed(self, item, column): + """ + A item has been pressed. We adjust the button's text to the action's + shortcut which is encapsulate in the item. + """ self.column = column item = self.treeWidget.currentItem() action = item.data(0, QtCore.Qt.UserRole).toPyObject() From 4ca738e9b3bfd8753a8d78a31c86ea5d182ff1d8 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 31 Mar 2011 10:43:19 +0200 Subject: [PATCH 013/148] staticmethod for adding/removing actions --- openlp/core/lib/ui.py | 4 ++-- openlp/core/ui/servicemanager.py | 20 ++++++++++---------- openlp/core/ui/shortcutlistform.py | 6 +++--- openlp/core/ui/slidecontroller.py | 10 +++++----- openlp/core/utils/actions.py | 23 +++++++++++------------ openlp/plugins/alerts/alertsplugin.py | 6 +++--- openlp/plugins/bibles/bibleplugin.py | 6 +++--- openlp/plugins/songs/songsplugin.py | 14 +++++++------- 8 files changed, 44 insertions(+), 45 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 44bf7c0dd..a298d803b 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -31,7 +31,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, Receiver, translate -from openlp.core.utils.actions import actionList +from openlp.core.utils.actions import ActionList log = logging.getLogger(__name__) @@ -251,7 +251,7 @@ def base_action(parent, name, category=None): action = QtGui.QAction(parent) action.setObjectName(name) if category is not None: - actionList.add_action(action, category) + ActionList.add_action(action, category) return action def checkable_action(parent, name, checked=None, category=None): diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 1d5321e01..4bdd647ed 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -40,7 +40,7 @@ from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ split_filename -from openlp.core.utils.actions import actionList +from openlp.core.utils.actions import ActionList class ServiceManagerList(QtGui.QTreeWidget): """ @@ -316,15 +316,15 @@ class ServiceManager(QtGui.QWidget): self.configUpdated() def setServiceHotkeys(self): - actionList.add_action(self.serviceManagerList.moveDown, u'Service') - actionList.add_action(self.serviceManagerList.moveUp, u'Service') - actionList.add_action(self.serviceManagerList.moveTop, u'Service') - actionList.add_action(self.serviceManagerList.moveBottom, u'Service') - actionList.add_action(self.serviceManagerList.makeLive, u'Service') - actionList.add_action(self.serviceManagerList.up, u'Service') - actionList.add_action(self.serviceManagerList.down, u'Service') - actionList.add_action(self.serviceManagerList.expand, u'Service') - actionList.add_action(self.serviceManagerList.collapse, u'Service') + ActionList.add_action(self.serviceManagerList.moveDown, u'Service') + ActionList.add_action(self.serviceManagerList.moveUp, u'Service') + ActionList.add_action(self.serviceManagerList.moveTop, u'Service') + ActionList.add_action(self.serviceManagerList.moveBottom, u'Service') + ActionList.add_action(self.serviceManagerList.makeLive, u'Service') + ActionList.add_action(self.serviceManagerList.up, u'Service') + ActionList.add_action(self.serviceManagerList.down, u'Service') + ActionList.add_action(self.serviceManagerList.expand, u'Service') + ActionList.add_action(self.serviceManagerList.collapse, u'Service') def setModified(self, modified=True): diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 97d21bebf..8ba78a876 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -30,7 +30,7 @@ import re from PyQt4 import QtCore, QtGui from openlp.core.utils import translate -from openlp.core.utils.actions import actionList +from openlp.core.utils.actions import ActionList from shortcutlistdialog import Ui_ShortcutListDialog REMOVE_AMPERSAND = re.compile(r'&{1}') @@ -96,7 +96,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ self.assingedShortcuts = [] self.treeWidget.clear() - for category in actionList.categories: + for category in ActionList.categories: item = QtGui.QTreeWidgetItem([category.name]) for action in category.actions: self.assingedShortcuts.extend(action.shortcuts()) @@ -172,7 +172,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ settings = QtCore.QSettings() settings.beginGroup(u'shortcuts') - for category in actionList.categories: + for category in ActionList.categories: for action in category.actions: settings.setValue( action.objectName(), QtCore.QVariant(action.shortcuts())) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index cafbec198..bc478463c 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -34,7 +34,7 @@ from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ ItemCapabilities, translate from openlp.core.lib.ui import icon_action, UiStrings, shortcut_action from openlp.core.ui import HideMode, MainDisplay -from openlp.core.utils.actions import actionList +from openlp.core.utils.actions import ActionList log = logging.getLogger(__name__) @@ -364,18 +364,18 @@ class SlideController(QtGui.QWidget): def setPreviewHotkeys(self, parent=None): self.previousItem.setShortcuts([QtCore.Qt.Key_Up, 0]) - actionList.add_action(self.previousItem, u'Preview Toolbar') + ActionList.add_action(self.previousItem, u'Preview Toolbar') self.nextItem.setShortcuts([QtCore.Qt.Key_Down, 0]) - actionList.add_action(self.nextItem, u'Preview Toolbar') + ActionList.add_action(self.nextItem, u'Preview Toolbar') def setLiveHotkeys(self, parent=None): self.previousItem.setShortcuts([QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp]) self.previousItem.setShortcutContext( QtCore.Qt.WidgetWithChildrenShortcut) - actionList.add_action(self.previousItem, u'Live Toolbar') + ActionList.add_action(self.previousItem, u'Live Toolbar') self.nextItem.setShortcuts([QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown]) self.nextItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) - actionList.add_action(self.nextItem, u'Live Toolbar') + ActionList.add_action(self.nextItem, u'Live Toolbar') self.previousService = shortcut_action(parent, translate('OpenLP.SlideController', 'Previous Service'), [QtCore.Qt.Key_Left, 0], self.servicePrevious, u'Live Toolbar') diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 6b7df6817..e71aee672 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -183,17 +183,17 @@ class ActionList(object): has a weight by which it is sorted when iterating through the list of actions or categories. """ - def __init__(self): - self.categories = CategoryList() + categories = CategoryList() - def add_action(self, action, category, weight=None): - if category not in self.categories: - self.categories.append(category) + @staticmethod + def add_action(action, category, weight=None): + if category not in ActionList.categories: + ActionList.categories.append(category) action.defaultShortcuts = action.shortcuts() if weight is None: - self.categories[category].actions.append(action) + ActionList.categories[category].actions.append(action) else: - self.categories[category].actions.add(action, weight) + ActionList.categories[category].actions.add(action, weight) # Load the shortcut from the config. settings = QtCore.QSettings() settings.beginGroup(u'shortcuts') @@ -203,9 +203,8 @@ class ActionList(object): [QtGui.QKeySequence(shortcut) for shortcut in shortcuts]) settings.endGroup() - def remove_action(self, action, category): - if category not in self.categories: + @staticmethod + def remove_action(action, category): + if category not in ActionList.categories: return - self.categories[category].actions.remove(action) - -actionList = ActionList() + ActionList.categories[category].actions.remove(action) diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index a10d56a20..45e1969f4 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -31,7 +31,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.lib.db import Manager from openlp.core.lib.ui import icon_action -from openlp.core.utils.actions import actionList +from openlp.core.utils.actions import ActionList from openlp.plugins.alerts.lib import AlertsManager, AlertsTab from openlp.plugins.alerts.lib.db import init_schema from openlp.plugins.alerts.forms import AlertForm @@ -75,7 +75,7 @@ class AlertsPlugin(Plugin): log.info(u'Alerts Initialising') Plugin.initialise(self) self.toolsAlertItem.setVisible(True) - actionList.add_action(self.toolsAlertItem, u'Tools') + ActionList.add_action(self.toolsAlertItem, u'Tools') self.liveController.alertTab = self.settings_tab def finalise(self): @@ -86,7 +86,7 @@ class AlertsPlugin(Plugin): self.manager.finalise() Plugin.finalise(self) self.toolsAlertItem.setVisible(False) - actionList.remove_action(self.toolsAlertItem, u'Tools') + ActionList.remove_action(self.toolsAlertItem, u'Tools') def toggleAlertsState(self): self.alertsActive = not self.alertsActive diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 86d751e9a..1396d4550 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -30,7 +30,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.lib.ui import base_action -from openlp.core.utils.actions import actionList +from openlp.core.utils.actions import ActionList from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem log = logging.getLogger(__name__) @@ -52,9 +52,9 @@ class BiblePlugin(Plugin): self.manager = BibleManager(self) Plugin.initialise(self) self.importBibleItem.setVisible(True) - actionList.add_action(self.importBibleItem, u'Import') + ActionList.add_action(self.importBibleItem, u'Import') # Do not add the action to the list yet. - #actionList.add_action(self.exportBibleItem, u'Export') + #ActionList.add_action(self.exportBibleItem, u'Export') # Set to invisible until we can export bibles self.exportBibleItem.setVisible(False) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 12462428e..de0714d5e 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -34,7 +34,7 @@ from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ Receiver from openlp.core.lib.db import Manager from openlp.core.lib.ui import UiStrings, base_action, icon_action -from openlp.core.utils.actions import actionList +from openlp.core.utils.actions import ActionList from openlp.plugins.songs.lib import clean_song, SongMediaItem, SongsTab from openlp.plugins.songs.lib.db import init_schema, Song from openlp.plugins.songs.lib.importer import SongFormat @@ -66,9 +66,9 @@ class SongsPlugin(Plugin): log.info(u'Songs Initialising') Plugin.initialise(self) self.toolsReindexItem.setVisible(True) - actionList.add_action(self.SongImportItem, u'Import') - actionList.add_action(self.SongExportItem, u'Export') - actionList.add_action(self.toolsReindexItem, u'Tools') + ActionList.add_action(self.SongImportItem, u'Import') + ActionList.add_action(self.SongExportItem, u'Export') + ActionList.add_action(self.toolsReindexItem, u'Tools') self.mediaItem.displayResultsSong( self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) @@ -258,7 +258,7 @@ class SongsPlugin(Plugin): log.info(u'Songs Finalising') self.manager.finalise() self.toolsReindexItem.setVisible(False) - actionList.remove_action(self.SongImportItem, u'Import') - actionList.remove_action(self.SongExportItem, u'Export') - actionList.remove_action(self.toolsReindexItem, u'Tools') + ActionList.remove_action(self.SongImportItem, u'Import') + ActionList.remove_action(self.SongExportItem, u'Export') + ActionList.remove_action(self.toolsReindexItem, u'Tools') Plugin.finalise(self) From 0c9b839e916e1b310be7e78e150be48f16bfdd52 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 31 Mar 2011 14:50:38 +0200 Subject: [PATCH 014/148] check if shortcut is already assigned, refreshing list, double click event, started resetting the selected action --- openlp/core/ui/shortcutlistform.py | 86 ++++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 23 deletions(-) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 8ba78a876..4746ae3f7 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -42,9 +42,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): The shortcut list dialog """ #TODO: do not close on ESC -#TODO: Fix Preview/Live controller (have the same shortcut) -#TODO: double click event -#TODO: refresh self.assingedShortcuts +#TODO: Fix Preview/Live controller (have the same shortcut def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) @@ -56,6 +54,11 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtCore.QObject.connect(self.treeWidget, QtCore.SIGNAL(u'itemPressed(QTreeWidgetItem*, int)'), self.onItemPressed) + QtCore.QObject.connect(self.treeWidget, + QtCore.SIGNAL(u'itemDoubleClicked(QTreeWidgetItem*, int)'), + self.onItemDoubleClicked) + QtCore.QObject.connect(self.clearShortcutButton, + QtCore.SIGNAL(u'clicked(bool)'), self.onClearShortcutButtonClicked) def keyReleaseEvent(self, event): Qt = QtCore.Qt @@ -87,34 +90,50 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.shortcutButton.setChecked(False) def exec_(self): - self.reloadActionList() + self.reloadShortcutList() return QtGui.QDialog.exec_(self) - def reloadActionList(self): + def reloadShortcutList(self): """ Reload the ``treeWidget`` list to add new and remove old actions. """ - self.assingedShortcuts = [] self.treeWidget.clear() for category in ActionList.categories: item = QtGui.QTreeWidgetItem([category.name]) for action in category.actions: - self.assingedShortcuts.extend(action.shortcuts()) actionText = REMOVE_AMPERSAND.sub('', unicode(action.text())) - if len(action.shortcuts()) == 2: - shortcutText = action.shortcuts()[0].toString() - alternateText = action.shortcuts()[1].toString() - else: - shortcutText = action.shortcut().toString() - alternateText = u'' - actionItem = QtGui.QTreeWidgetItem( - [actionText, shortcutText, alternateText]) + actionItem = QtGui.QTreeWidgetItem([actionText]) actionItem.setIcon(0, action.icon()) actionItem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(action)) item.addChild(actionItem) item.setExpanded(True) self.treeWidget.addTopLevelItem(item) + self.refreshShortcutList() + + def refreshShortcutList(self): + """ + This refreshes the item's shortcuts shown in the list. Note, this + neither adds new actions nor removes old actions. + """ + self.assingedShortcuts = [] + iterator = QtGui.QTreeWidgetItemIterator(self.treeWidget) + while iterator.value(): + item = iterator.value() + iterator += 1 + action = item.data(0, QtCore.Qt.UserRole).toPyObject() + if action is None: + continue + self.assingedShortcuts.extend(action.shortcuts()) + if len(action.shortcuts()) == 0: + item.setText(1, u'') + item.setText(2, u'') + elif len(action.shortcuts()) == 1: + item.setText(1, action.shortcuts()[0].toString()) + item.setText(2, u'') + else: + item.setText(1, action.shortcuts()[0].toString()) + item.setText(2, action.shortcuts()[1].toString()) def onShortcutButtonClicked(self, toggled): """ @@ -127,25 +146,30 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if action is None: return shortcuts = [] + # We are changing the primary shortcut. if self.column == 1: - # We are changing the primary shortcut. shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) if len(action.shortcuts()) == 2: shortcuts.append(action.shortcuts()[1]) - else: - shortcuts.append(0) - item.setText(1, self.shortcutButton.text()) + # We are changing the secondary shortcut. elif self.column == 2: - # We are changing the secondary shortcut. if len(action.shortcuts()) == 1: shortcuts.append(action.shortcuts()[0]) - else: - shortcuts.append(0) shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) - item.setText(2, self.shortcutButton.text()) else: return action.setShortcuts(shortcuts) + self.refreshShortcutList() + + def onItemDoubleClicked(self, item, column): + """ + """ + item = self.treeWidget.currentItem() + action = item.data(0, QtCore.Qt.UserRole).toPyObject() + self.shortcutButton.setChecked(True) + if action is None or column not in [1, 2]: + self.shortcutButton.setChecked(False) + self.onItemPressed(item, column) def onItemPressed(self, item, column): """ @@ -165,6 +189,22 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): text = action.shortcuts()[1].toString() self.shortcutButton.setText(text) + def onClearShortcutButtonClicked(self, toggled): + """ + Restore the defaults of this + """ + item = self.treeWidget.currentItem() + if item is None: + return + action = item.data(0, QtCore.Qt.UserRole).toPyObject() + if action is None: + return + #FIXME: defaultShortcuts + action.setShortcuts(action.defaultShortcuts) + self.shortcutButton.setChecked(False) + self.shortcutButton.setText(u'') + self.refreshShortcutList() + def save(self): """ Save the shortcuts. **Note**, that we do not have to load the shortcuts, From b17ad266728d9032af9ae42529d6007b86a6f063 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 31 Mar 2011 20:53:50 +0200 Subject: [PATCH 015/148] make sure we save the default shortcut --- openlp/core/lib/toolbar.py | 15 ++--- openlp/core/lib/ui.py | 17 ++++- openlp/core/ui/mainwindow.py | 103 ++++++++++++------------------ openlp/core/ui/servicemanager.py | 53 +++++++-------- openlp/core/ui/slidecontroller.py | 27 ++++---- openlp/core/utils/actions.py | 2 - 6 files changed, 107 insertions(+), 110 deletions(-) diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index d5d2fa4f8..44149cd85 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -51,8 +51,7 @@ class OpenLPToolbar(QtGui.QToolBar): log.debug(u'Init done for %s' % parent.__class__.__name__) def addToolbarButton(self, title, icon, tooltip=None, slot=None, - checkable=False, shortcut=0, alternate=0, - context=QtCore.Qt.WidgetShortcut): + checkable=False, shortcuts=None, context=QtCore.Qt.WidgetShortcut): """ A method to help developers easily add a button to the toolbar. @@ -74,11 +73,8 @@ class OpenLPToolbar(QtGui.QToolBar): If *True* the button has two, *off* and *on*, states. Default is *False*, which means the buttons has only one state. - ``shortcut`` - The primary shortcut for this action - - ``alternate`` - The alternate shortcut for this action + ``shortcuts`` + The list of shortcuts for this action ``context`` Specify the context in which this shortcut is valid @@ -103,8 +99,9 @@ class OpenLPToolbar(QtGui.QToolBar): QtCore.QObject.connect(newAction, QtCore.SIGNAL(u'toggled(bool)'), slot) self.actions[title] = newAction - newAction.setShortcuts([shortcut, alternate]) - newAction.setShortcutContext(context) + if shortcuts is not None: + newAction.setShortcuts(shortcuts) + newAction.setShortcutContext(context) return newAction def addToolbarSeparator(self, handle): diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index a298d803b..c6f7dd070 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -275,13 +275,26 @@ def icon_action(parent, name, icon, checked=None, category=None): action.setIcon(build_icon(icon)) return action -def shortcut_action(parent, text, shortcuts, function, category=None): +def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, + category=None): """ Return a shortcut enabled action. """ - action = base_action(parent, text, category) + # We cannot use the base_action, icon_action and the like, as we must not + # add the action to the actionList before the shortcut has been set + # (when we add the action to the list, the default shortcut is saved, to be + # able restore the shortcut). + action = QtGui.QAction(parent) + action.setObjectName(name) + if icon is not None: + action.setIcon(build_icon(icon)) + if checked is not None: + action.setCheckable(True) + action.setChecked(checked) action.setShortcuts(shortcuts) action.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) + if category is not None: + ActionList.add_action(action, category) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), function) return action diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 1fdf0fd76..14bed4712 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -33,7 +33,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import RenderManager, build_icon, OpenLPDockWidget, \ SettingsManager, PluginManager, Receiver, translate from openlp.core.lib.ui import UiStrings, base_action, checkable_action, \ - icon_action + icon_action, shortcut_action from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ThemeManager, SlideController, PluginForm, MediaDockManager, \ ShortcutListForm, DisplayTagForm @@ -161,18 +161,32 @@ class Ui_MainWindow(object): mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.themeManagerDock) # Create the menu items - self.FileNewItem = icon_action(mainWindow, u'FileNewItem', + self.FileNewItem = shortcut_action(mainWindow, u'FileNewItem', + [QtGui.QKeySequence(u'Ctrl+N')], + self.ServiceManagerContents.onNewServiceClicked, u':/general/general_new.png', category=u'File') - self.FileOpenItem = icon_action(mainWindow, u'FileOpenItem', + self.FileNewItem.setShortcutContext(QtCore.Qt.WindowShortcut) + self.FileOpenItem = shortcut_action(mainWindow, u'FileOpenItem', + [QtGui.QKeySequence(u'Ctrl+O')], + self.ServiceManagerContents.onLoadServiceClicked, u':/general/general_open.png', category=u'File') - self.FileSaveItem = icon_action(mainWindow, u'FileSaveItem', + self.FileOpenItem.setShortcutContext(QtCore.Qt.WindowShortcut) + self.FileSaveItem = shortcut_action(mainWindow, u'FileSaveItem', + [QtGui.QKeySequence(u'Ctrl+S')], + self.ServiceManagerContents.saveFile, u':/general/general_save.png', category=u'File') - self.FileSaveAsItem = base_action( - mainWindow, u'FileSaveAsItem', u'File') - self.printServiceOrderItem = base_action( - mainWindow, u'printServiceItem', u'File') - self.FileExitItem = icon_action(mainWindow, u'FileExitItem', + self.FileSaveItem.setShortcutContext(QtCore.Qt.WindowShortcut) + self.FileSaveAsItem = shortcut_action(mainWindow, u'FileSaveAsItem', + [QtGui.QKeySequence(u'Ctrl+Shift+S')], + self.ServiceManagerContents.saveFileAs, category=u'File') + self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) + self.printServiceOrderItem = shortcut_action(mainWindow, + u'printServiceItem', [QtGui.QKeySequence(u'Ctrl+P')], + self.ServiceManagerContents.printServiceOrder, category=u'File') + self.FileExitItem = shortcut_action(mainWindow, u'FileExitItem', + [QtGui.QKeySequence(u'Alt+F4')], mainWindow.close, u':/system/system_exit.png', category=u'File') + self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.ImportThemeItem = base_action( mainWindow, u'ImportThemeItem', u'Import') self.ImportLanguageItem = base_action( @@ -181,15 +195,21 @@ class Ui_MainWindow(object): mainWindow, u'ExportThemeItem', u'Export') self.ExportLanguageItem = base_action( mainWindow, u'ExportLanguageItem')#, u'Export') - self.ViewMediaManagerItem = icon_action(mainWindow, - u'ViewMediaManagerItem', u':/system/system_mediamanager.png', + self.ViewMediaManagerItem = shortcut_action(mainWindow, + u'ViewMediaManagerItem', [QtGui.QKeySequence(u'F8')], + self.toggleMediaManager, u':/system/system_mediamanager.png', self.mediaManagerDock.isVisible(), u'View') - self.ViewThemeManagerItem = icon_action(mainWindow, - u'ViewThemeManagerItem', u':/system/system_thememanager.png', + self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) + self.ViewThemeManagerItem = shortcut_action(mainWindow, + u'ViewThemeManagerItem', [QtGui.QKeySequence(u'F9')], + self.toggleThemeManager, u':/system/system_thememanager.png', self.themeManagerDock.isVisible(), u'View') - self.ViewServiceManagerItem = icon_action(mainWindow, - u'ViewServiceManagerItem', u':/system/system_servicemanager.png', + self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) + self.ViewServiceManagerItem = shortcut_action(mainWindow, + u'ViewServiceManagerItem', [QtGui.QKeySequence(u'F10')], + self.toggleServiceManager, u':/system/system_servicemanager.png', self.serviceManagerDock.isVisible(), u'View') + self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.ViewPreviewPanel = checkable_action(mainWindow, u'ViewPreviewPanel', previewVisible, u'View') self.ViewLivePanel = checkable_action( @@ -278,8 +298,6 @@ class Ui_MainWindow(object): # Connect up some signals and slots QtCore.QObject.connect(self.FileMenu, QtCore.SIGNAL(u'aboutToShow()'), self.updateFileMenu) - QtCore.QObject.connect(self.FileExitItem, - QtCore.SIGNAL(u'triggered()'), mainWindow.close) QtCore.QMetaObject.connectSlotsByName(mainWindow) # Hide the entry, as it does not have any functionality yet. self.ToolsAddToolItem.setVisible(False) @@ -312,36 +330,27 @@ class Ui_MainWindow(object): self.FileNewItem.setText(translate('OpenLP.MainWindow', '&New')) self.FileNewItem.setToolTip(UiStrings.NewService) self.FileNewItem.setStatusTip(UiStrings.CreateService) - self.FileNewItem.setShortcut(translate('OpenLP.MainWindow', 'Ctrl+N')) self.FileOpenItem.setText(translate('OpenLP.MainWindow', '&Open')) self.FileOpenItem.setToolTip(UiStrings.OpenService) self.FileOpenItem.setStatusTip( translate('OpenLP.MainWindow', 'Open an existing service.')) - self.FileOpenItem.setShortcut(translate('OpenLP.MainWindow', 'Ctrl+O')) self.FileSaveItem.setText(translate('OpenLP.MainWindow', '&Save')) self.FileSaveItem.setToolTip(UiStrings.SaveService) self.FileSaveItem.setStatusTip( translate('OpenLP.MainWindow', 'Save the current service to disk.')) - self.FileSaveItem.setShortcut(translate('OpenLP.MainWindow', 'Ctrl+S')) self.FileSaveAsItem.setText( translate('OpenLP.MainWindow', 'Save &As...')) self.FileSaveAsItem.setToolTip( translate('OpenLP.MainWindow', 'Save Service As')) self.FileSaveAsItem.setStatusTip(translate('OpenLP.MainWindow', 'Save the current service under a new name.')) - self.FileSaveAsItem.setShortcut( - translate('OpenLP.MainWindow', 'Ctrl+Shift+S')) self.printServiceOrderItem.setText(UiStrings.PrintServiceOrder) self.printServiceOrderItem.setStatusTip(translate('OpenLP.MainWindow', 'Print the current Service Order.')) - self.printServiceOrderItem.setShortcut( - translate('OpenLP.MainWindow', 'Ctrl+P')) self.FileExitItem.setText( translate('OpenLP.MainWindow', 'E&xit')) self.FileExitItem.setStatusTip( translate('OpenLP.MainWindow', 'Quit OpenLP')) - self.FileExitItem.setShortcut( - translate('OpenLP.MainWindow', 'Alt+F4')) self.ImportThemeItem.setText( translate('OpenLP.MainWindow', '&Theme')) self.ImportLanguageItem.setText( @@ -362,24 +371,18 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', 'Toggle Media Manager')) self.ViewMediaManagerItem.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the media manager.')) - self.ViewMediaManagerItem.setShortcut( - translate('OpenLP.MainWindow', 'F8')) self.ViewThemeManagerItem.setText( translate('OpenLP.MainWindow', '&Theme Manager')) self.ViewThemeManagerItem.setToolTip( translate('OpenLP.MainWindow', 'Toggle Theme Manager')) self.ViewThemeManagerItem.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the theme manager.')) - self.ViewThemeManagerItem.setShortcut( - translate('OpenLP.MainWindow', 'F10')) self.ViewServiceManagerItem.setText( translate('OpenLP.MainWindow', '&Service Manager')) self.ViewServiceManagerItem.setToolTip( translate('OpenLP.MainWindow', 'Toggle Service Manager')) self.ViewServiceManagerItem.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the service manager.')) - self.ViewServiceManagerItem.setShortcut( - translate('OpenLP.MainWindow', 'F9')) self.ViewPreviewPanel.setText( translate('OpenLP.MainWindow', '&Preview Panel')) self.ViewPreviewPanel.setToolTip( @@ -409,6 +412,7 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', 'More information about OpenLP')) self.HelpAboutItem.setShortcut( translate('OpenLP.MainWindow', 'Ctrl+F1')) + print self.HelpAboutItem.shortcuts() self.HelpOnlineHelpItem.setText( translate('OpenLP.MainWindow', '&Online Help')) # Uncomment after 1.9.5 beta string freeze @@ -490,12 +494,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.QObject.connect(self.ExportThemeItem, QtCore.SIGNAL(u'triggered()'), self.themeManagerContents.onExportTheme) - QtCore.QObject.connect(self.ViewMediaManagerItem, - QtCore.SIGNAL(u'triggered(bool)'), self.toggleMediaManager) - QtCore.QObject.connect(self.ViewServiceManagerItem, - QtCore.SIGNAL(u'triggered(bool)'), self.toggleServiceManager) - QtCore.QObject.connect(self.ViewThemeManagerItem, - QtCore.SIGNAL(u'triggered(bool)'), self.toggleThemeManager) QtCore.QObject.connect(self.ViewPreviewPanel, QtCore.SIGNAL(u'toggled(bool)'), self.setPreviewPanelVisibility) QtCore.QObject.connect(self.ViewLivePanel, @@ -525,20 +523,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'triggered()'), self.onSettingsConfigureItemClicked) QtCore.QObject.connect(self.SettingsShortcutsItem, QtCore.SIGNAL(u'triggered()'), self.onSettingsShortcutsItemClicked) - QtCore.QObject.connect(self.FileNewItem, QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.onNewServiceClicked) - QtCore.QObject.connect(self.FileOpenItem, - QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.onLoadServiceClicked) - QtCore.QObject.connect(self.FileSaveItem, - QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.saveFile) - QtCore.QObject.connect(self.FileSaveAsItem, - QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.saveFileAs) - QtCore.QObject.connect(self.printServiceOrderItem, - QtCore.SIGNAL(u'triggered()'), - self.ServiceManagerContents.printServiceOrder) # i18n set signals for languages self.LanguageGroup.triggered.connect(LanguageManager.set_language) QtCore.QObject.connect(self.ModeDefaultItem, @@ -909,17 +893,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): unicode(translate('OpenLP.MainWindow', 'Default Theme: %s')) % theme) - def toggleMediaManager(self, visible): - if self.mediaManagerDock.isVisible() != visible: - self.mediaManagerDock.setVisible(visible) + def toggleMediaManager(self): + self.mediaManagerDock.setVisible(not self.mediaManagerDock.isVisible()) - def toggleServiceManager(self, visible): - if self.serviceManagerDock.isVisible() != visible: - self.serviceManagerDock.setVisible(visible) + def toggleServiceManager(self): + self.serviceManagerDock.setVisible(not self.serviceManagerDock.isVisible()) - def toggleThemeManager(self, visible): - if self.themeManagerDock.isVisible() != visible: - self.themeManagerDock.setVisible(visible) + def toggleThemeManager(self): + self.themeManagerDock.setVisible(not self.themeManagerDock.isVisible()) def setPreviewPanelVisibility(self, visible): """ diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 4bdd647ed..3ed477485 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -165,38 +165,50 @@ class ServiceManager(QtGui.QWidget): u':/services/service_top.png', translate('OpenLP.ServiceManager', 'Move item to the top of the service.'), - self.onServiceTop, shortcut=QtCore.Qt.Key_Home) + self.onServiceTop, shortcuts=[QtCore.Qt.Key_Home]) + self.serviceManagerList.moveTop.setObjectName(u'moveTop') + ActionList.add_action(self.serviceManagerList.moveTop, u'Service') self.serviceManagerList.moveUp = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &up'), u':/services/service_up.png', translate('OpenLP.ServiceManager', 'Move item up one position in the service.'), - self.onServiceUp, shortcut=QtCore.Qt.Key_PageUp) + self.onServiceUp, shortcuts=[QtCore.Qt.Key_PageUp]) + self.serviceManagerList.moveUp.setObjectName(u'moveUp') + ActionList.add_action(self.serviceManagerList.moveUp, u'Service') self.serviceManagerList.moveDown = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), u':/services/service_down.png', translate('OpenLP.ServiceManager', 'Move item down one position in the service.'), - self.onServiceDown, shortcut=QtCore.Qt.Key_PageDown) + self.onServiceDown, shortcuts=[QtCore.Qt.Key_PageDown]) + self.serviceManagerList.moveDown.setObjectName(u'moveDown') + ActionList.add_action(self.serviceManagerList.moveDown, u'Service') self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move to &bottom'), u':/services/service_bottom.png', translate('OpenLP.ServiceManager', 'Move item to the end of the service.'), - self.onServiceEnd, shortcut=QtCore.Qt.Key_End) + self.onServiceEnd, shortcuts=[QtCore.Qt.Key_End]) + self.serviceManagerList.moveBottom.setObjectName(u'moveBottom') + ActionList.add_action(self.serviceManagerList.moveBottom, u'Service') self.serviceManagerList.down = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), None, translate('OpenLP.ServiceManager', 'Moves the selection down the window.'), - self.onMoveSelectionDown, shortcut=QtCore.Qt.Key_Down) + self.onMoveSelectionDown, shortcuts=[QtCore.Qt.Key_Down]) + self.serviceManagerList.down.setObjectName(u'down') + ActionList.add_action(self.serviceManagerList.down, u'Service') self.serviceManagerList.down.setVisible(False) self.serviceManagerList.up = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move up'), None, translate('OpenLP.ServiceManager', 'Moves the selection up the window.'), - self.onMoveSelectionUp, shortcut=QtCore.Qt.Key_Up) + self.onMoveSelectionUp, shortcuts=[QtCore.Qt.Key_Up]) + self.serviceManagerList.up.setObjectName(u'up') + ActionList.add_action(self.serviceManagerList.up, u'Service') self.serviceManagerList.up.setVisible(False) self.orderToolbar.addSeparator() self.serviceManagerList.delete = self.orderToolbar.addToolbarButton( @@ -211,22 +223,26 @@ class ServiceManager(QtGui.QWidget): u':/services/service_expand_all.png', translate('OpenLP.ServiceManager', 'Expand all the service items.'), - self.onExpandAll, shortcut=QtCore.Qt.Key_Plus) + self.onExpandAll, shortcuts=[QtCore.Qt.Key_Plus]) + self.serviceManagerList.expand.setObjectName(u'expand') + ActionList.add_action(self.serviceManagerList.expand, u'Service') self.serviceManagerList.collapse = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', '&Collapse all'), u':/services/service_collapse_all.png', translate('OpenLP.ServiceManager', 'Collapse all the service items.'), - self.onCollapseAll, shortcut=QtCore.Qt.Key_Minus) + self.onCollapseAll, shortcuts=[QtCore.Qt.Key_Minus]) + self.serviceManagerList.collapse.setObjectName(u'collapse') + ActionList.add_action(self.serviceManagerList.collapse, u'Service') self.orderToolbar.addSeparator() self.serviceManagerList.makeLive = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Go Live'), u':/general/general_live.png', translate('OpenLP.ServiceManager', - 'Send the selected item to Live.'), - self.makeLive, shortcut=QtCore.Qt.Key_Enter, - alternate=QtCore.Qt.Key_Return) - self.orderToolbar.setObjectName(u'orderToolbar') + 'Send the selected item to Live.'), self.makeLive, + shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return]) + self.serviceManagerList.makeLive.setObjectName(u'orderToolbar') + ActionList.add_action(self.serviceManagerList.makeLive, u'Service') self.layout.addWidget(self.orderToolbar) # Connect up our signals and slots QtCore.QObject.connect(self.themeComboBox, @@ -301,7 +317,6 @@ class ServiceManager(QtGui.QWidget): self.themeMenu = QtGui.QMenu( translate('OpenLP.ServiceManager', '&Change Item Theme')) self.menu.addMenu(self.themeMenu) - self.setServiceHotkeys() self.serviceManagerList.addActions( [self.serviceManagerList.moveDown, self.serviceManagerList.moveUp, @@ -315,18 +330,6 @@ class ServiceManager(QtGui.QWidget): ]) self.configUpdated() - def setServiceHotkeys(self): - ActionList.add_action(self.serviceManagerList.moveDown, u'Service') - ActionList.add_action(self.serviceManagerList.moveUp, u'Service') - ActionList.add_action(self.serviceManagerList.moveTop, u'Service') - ActionList.add_action(self.serviceManagerList.moveBottom, u'Service') - ActionList.add_action(self.serviceManagerList.makeLive, u'Service') - ActionList.add_action(self.serviceManagerList.up, u'Service') - ActionList.add_action(self.serviceManagerList.down, u'Service') - ActionList.add_action(self.serviceManagerList.expand, u'Service') - ActionList.add_action(self.serviceManagerList.collapse, u'Service') - - def setModified(self, modified=True): """ Setter for property "modified". Sets whether or not the current service diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index bc478463c..e9d748ad5 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -142,11 +142,13 @@ class SlideController(QtGui.QWidget): u':/slides/slide_previous.png', translate('OpenLP.SlideController', 'Move to previous'), self.onSlideSelectedPrevious) + self.previousItem.setObjectName(u'previousItem') self.nextItem = self.toolbar.addToolbarButton( translate('OpenLP.SlideController', 'Next Slide'), u':/slides/slide_next.png', translate('OpenLP.SlideController', 'Move to next'), self.onSlideSelectedNext) + self.nextItem.setObjectName(u'nextItem') self.toolbar.addToolbarSeparator(u'Close Separator') if self.isLive: self.hideMenu = QtGui.QToolButton(self.toolbar) @@ -363,9 +365,9 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged) def setPreviewHotkeys(self, parent=None): - self.previousItem.setShortcuts([QtCore.Qt.Key_Up, 0]) + self.previousItem.setShortcuts([QtCore.Qt.Key_Up]) ActionList.add_action(self.previousItem, u'Preview Toolbar') - self.nextItem.setShortcuts([QtCore.Qt.Key_Down, 0]) + self.nextItem.setShortcuts([QtCore.Qt.Key_Down]) ActionList.add_action(self.nextItem, u'Preview Toolbar') def setLiveHotkeys(self, parent=None): @@ -376,15 +378,18 @@ class SlideController(QtGui.QWidget): self.nextItem.setShortcuts([QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown]) self.nextItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) ActionList.add_action(self.nextItem, u'Live Toolbar') - self.previousService = shortcut_action(parent, - translate('OpenLP.SlideController', 'Previous Service'), - [QtCore.Qt.Key_Left, 0], self.servicePrevious, u'Live Toolbar') - self.nextService = shortcut_action(parent, - translate('OpenLP.SlideController', 'Next Service'), - [QtCore.Qt.Key_Right, 0], self.serviceNext, u'Live Toolbar') - self.escapeItem = shortcut_action(parent, - translate('OpenLP.SlideController', 'Escape Item'), - [QtCore.Qt.Key_Escape, 0], self.liveEscape, u'Live Toolbar') + self.previousService = shortcut_action(parent, u'previousService', + [QtCore.Qt.Key_Left], self.servicePrevious, u'Live Toolbar') + self.previousService.setText( + translate('OpenLP.SlideController', 'Previous Service')) + self.nextService = shortcut_action(parent, 'nextService', + [QtCore.Qt.Key_Right], self.serviceNext, u'Live Toolbar') + self.nextService.setText( + translate('OpenLP.SlideController', 'Next Service')) + self.escapeItem = shortcut_action(parent, 'escapeItem', + [QtCore.Qt.Key_Escape], self.liveEscape, u'Live Toolbar') + self.escapeItem.setText( + translate('OpenLP.SlideController', 'Escape Item')) def liveEscape(self): self.display.setVisible(False) diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index e71aee672..34bc72173 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -29,8 +29,6 @@ by the shortcuts system. """ from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate - class ActionCategory(object): """ The :class:`~openlp.core.utils.ActionCategory` class encapsulates a From df4de23df09486908a5daf69b454f48be0fe3395 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 1 Apr 2011 16:28:25 +0200 Subject: [PATCH 016/148] Added Theme, Blank, Desktop shortcuts, further clean ups Fixes: https://launchpad.net/bugs/739779 --- openlp/core/lib/searchedit.py | 3 +- openlp/core/lib/ui.py | 22 ++++---- openlp/core/ui/mainwindow.py | 59 ++++++++------------- openlp/core/ui/shortcutlistform.py | 47 +++++++++++----- openlp/core/ui/slidecontroller.py | 39 ++++++++------ openlp/core/utils/actions.py | 8 +++ openlp/plugins/songusage/songusageplugin.py | 30 +++++------ 7 files changed, 113 insertions(+), 95 deletions(-) diff --git a/openlp/core/lib/searchedit.py b/openlp/core/lib/searchedit.py index 4841d76dc..41699256f 100644 --- a/openlp/core/lib/searchedit.py +++ b/openlp/core/lib/searchedit.py @@ -29,6 +29,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon +from openlp.core.lib.ui import icon_action log = logging.getLogger(__name__) @@ -132,7 +133,7 @@ class SearchEdit(QtGui.QLineEdit): menu = QtGui.QMenu(self) first = None for identifier, icon, title in items: - action = QtGui.QAction(build_icon(icon), title, menu) + action = icon_action(menu, title, icon) action.setData(QtCore.QVariant(identifier)) menu.addAction(action) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index c6f7dd070..a02041cad 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -280,21 +280,17 @@ def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, """ Return a shortcut enabled action. """ - # We cannot use the base_action, icon_action and the like, as we must not - # add the action to the actionList before the shortcut has been set - # (when we add the action to the list, the default shortcut is saved, to be - # able restore the shortcut). - action = QtGui.QAction(parent) - action.setObjectName(name) if icon is not None: - action.setIcon(build_icon(icon)) - if checked is not None: - action.setCheckable(True) - action.setChecked(checked) + action = icon_action(parent, name, icon, checked, category) + elif checked is not None: + action = checkable_action(parent, name, checked, category) + else: + action = base_action(parent, name, category) action.setShortcuts(shortcuts) - action.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) - if category is not None: - ActionList.add_action(action, category) + action.setShortcutContext(QtCore.Qt.WindowShortcut) + # We have to save the default shortcut again, as the action's shortcut was + # set after adding the shortcut to the action list. + action.defaultShortcuts = action.shortcuts() QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), function) return action diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 14bed4712..458e8814f 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -165,28 +165,23 @@ class Ui_MainWindow(object): [QtGui.QKeySequence(u'Ctrl+N')], self.ServiceManagerContents.onNewServiceClicked, u':/general/general_new.png', category=u'File') - self.FileNewItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.FileOpenItem = shortcut_action(mainWindow, u'FileOpenItem', [QtGui.QKeySequence(u'Ctrl+O')], self.ServiceManagerContents.onLoadServiceClicked, u':/general/general_open.png', category=u'File') - self.FileOpenItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.FileSaveItem = shortcut_action(mainWindow, u'FileSaveItem', [QtGui.QKeySequence(u'Ctrl+S')], self.ServiceManagerContents.saveFile, u':/general/general_save.png', category=u'File') - self.FileSaveItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.FileSaveAsItem = shortcut_action(mainWindow, u'FileSaveAsItem', [QtGui.QKeySequence(u'Ctrl+Shift+S')], self.ServiceManagerContents.saveFileAs, category=u'File') - self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.printServiceOrderItem = shortcut_action(mainWindow, u'printServiceItem', [QtGui.QKeySequence(u'Ctrl+P')], self.ServiceManagerContents.printServiceOrder, category=u'File') self.FileExitItem = shortcut_action(mainWindow, u'FileExitItem', [QtGui.QKeySequence(u'Alt+F4')], mainWindow.close, u':/system/system_exit.png', category=u'File') - self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.ImportThemeItem = base_action( mainWindow, u'ImportThemeItem', u'Import') self.ImportLanguageItem = base_action( @@ -199,21 +194,20 @@ class Ui_MainWindow(object): u'ViewMediaManagerItem', [QtGui.QKeySequence(u'F8')], self.toggleMediaManager, u':/system/system_mediamanager.png', self.mediaManagerDock.isVisible(), u'View') - self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.ViewThemeManagerItem = shortcut_action(mainWindow, - u'ViewThemeManagerItem', [QtGui.QKeySequence(u'F9')], + u'ViewThemeManagerItem', [QtGui.QKeySequence(u'F10')], self.toggleThemeManager, u':/system/system_thememanager.png', self.themeManagerDock.isVisible(), u'View') - self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) self.ViewServiceManagerItem = shortcut_action(mainWindow, - u'ViewServiceManagerItem', [QtGui.QKeySequence(u'F10')], + u'ViewServiceManagerItem', [QtGui.QKeySequence(u'F9')], self.toggleServiceManager, u':/system/system_servicemanager.png', self.serviceManagerDock.isVisible(), u'View') - self.FileSaveAsItem.setShortcutContext(QtCore.Qt.WindowShortcut) - self.ViewPreviewPanel = checkable_action(mainWindow, - u'ViewPreviewPanel', previewVisible, u'View') - self.ViewLivePanel = checkable_action( - mainWindow, u'ViewLivePanel', liveVisible, u'View') + self.ViewPreviewPanel = shortcut_action(mainWindow, + u'ViewPreviewPanel', [QtGui.QKeySequence(u'F11')], + self.setPreviewPanelVisibility, checked=previewVisible, category=u'View') + self.ViewLivePanel = shortcut_action(mainWindow, u'ViewLivePanel', + [QtGui.QKeySequence(u'F12')], self.setLivePanelVisibility, + checked=liveVisible, category=u'View') self.ModeDefaultItem = checkable_action( mainWindow, u'ModeDefaultItem', category=u'View Mode') self.ModeSetupItem = checkable_action( @@ -229,8 +223,9 @@ class Ui_MainWindow(object): u':/tools/tools_add.png', category=u'Tools') self.ToolsOpenDataFolder = icon_action(mainWindow, u'ToolsOpenDataFolder', u':/general/general_open.png', category=u'Tools') - self.settingsPluginListItem = icon_action(mainWindow, - u'settingsPluginListItem', u':/system/settings_plugin_list.png', + self.settingsPluginListItem = shortcut_action(mainWindow, + u'settingsPluginListItem', [QtGui.QKeySequence(u'Alt+F7')], + self.onPluginItemClicked, u':/system/settings_plugin_list.png', category=u'Settings') # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, @@ -257,7 +252,8 @@ class Ui_MainWindow(object): u'HelpDocumentationItem', u':/system/system_help_contents.png', category=None)#u'Help') self.HelpDocumentationItem.setEnabled(False) - self.HelpAboutItem = icon_action(mainWindow, u'HelpAboutItem', + self.HelpAboutItem = shortcut_action(mainWindow, u'HelpAboutItem', + [QtGui.QKeySequence(u'Ctrl+F1')], self.onHelpAboutItemClicked, u':/system/system_about.png', category=u'Help') self.HelpOnlineHelpItem = base_action( mainWindow, u'HelpOnlineHelpItem', category=u'Help') @@ -389,30 +385,21 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', 'Toggle Preview Panel')) self.ViewPreviewPanel.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the preview panel.')) - self.ViewPreviewPanel.setShortcut( - translate('OpenLP.MainWindow', 'F11')) self.ViewLivePanel.setText( translate('OpenLP.MainWindow', '&Live Panel')) self.ViewLivePanel.setToolTip( translate('OpenLP.MainWindow', 'Toggle Live Panel')) self.ViewLivePanel.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the live panel.')) - self.ViewLivePanel.setShortcut( - translate('OpenLP.MainWindow', 'F12')) self.settingsPluginListItem.setText(translate('OpenLP.MainWindow', '&Plugin List')) self.settingsPluginListItem.setStatusTip( translate('OpenLP.MainWindow', 'List the Plugins')) - self.settingsPluginListItem.setShortcut( - translate('OpenLP.MainWindow', 'Alt+F7')) self.HelpDocumentationItem.setText( translate('OpenLP.MainWindow', '&User Guide')) self.HelpAboutItem.setText(translate('OpenLP.MainWindow', '&About')) self.HelpAboutItem.setStatusTip( translate('OpenLP.MainWindow', 'More information about OpenLP')) - self.HelpAboutItem.setShortcut( - translate('OpenLP.MainWindow', 'Ctrl+F1')) - print self.HelpAboutItem.shortcuts() self.HelpOnlineHelpItem.setText( translate('OpenLP.MainWindow', '&Online Help')) # Uncomment after 1.9.5 beta string freeze @@ -494,10 +481,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.QObject.connect(self.ExportThemeItem, QtCore.SIGNAL(u'triggered()'), self.themeManagerContents.onExportTheme) - QtCore.QObject.connect(self.ViewPreviewPanel, - QtCore.SIGNAL(u'toggled(bool)'), self.setPreviewPanelVisibility) - QtCore.QObject.connect(self.ViewLivePanel, - QtCore.SIGNAL(u'toggled(bool)'), self.setLivePanelVisibility) QtCore.QObject.connect(self.mediaManagerDock, QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewMediaManagerItem.setChecked) @@ -511,12 +494,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'triggered()'), self.onHelpWebSiteClicked) QtCore.QObject.connect(self.HelpOnlineHelpItem, QtCore.SIGNAL(u'triggered()'), self.onHelpOnLineHelpClicked) - QtCore.QObject.connect(self.HelpAboutItem, - QtCore.SIGNAL(u'triggered()'), self.onHelpAboutItemClicked) QtCore.QObject.connect(self.ToolsOpenDataFolder, QtCore.SIGNAL(u'triggered()'), self.onToolsOpenDataFolderClicked) - QtCore.QObject.connect(self.settingsPluginListItem, - QtCore.SIGNAL(u'triggered()'), self.onPluginItemClicked) QtCore.QObject.connect(self.DisplayTagItem, QtCore.SIGNAL(u'triggered()'), self.onDisplayTagItemClicked) QtCore.QObject.connect(self.SettingsConfigureItem, @@ -902,7 +881,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def toggleThemeManager(self): self.themeManagerDock.setVisible(not self.themeManagerDock.isVisible()) - def setPreviewPanelVisibility(self, visible): + def setPreviewPanelVisibility(self, visible=None): """ Sets the visibility of the preview panel including saving the setting and updating the menu. @@ -912,12 +891,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): True - Visible False - Hidden """ + if visible is None: + visible = self.ViewPreviewPanel.isVisible() self.previewController.panel.setVisible(visible) QtCore.QSettings().setValue(u'user interface/preview panel', QtCore.QVariant(visible)) self.ViewPreviewPanel.setChecked(visible) - def setLivePanelVisibility(self, visible): + def setLivePanelVisibility(self, visible=None): """ Sets the visibility of the live panel including saving the setting and updating the menu. @@ -927,6 +908,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): True - Visible False - Hidden """ + if visible is None: + visible = self.ViewLivePanel.isVisible() self.liveController.panel.setVisible(visible) QtCore.QSettings().setValue(u'user interface/live panel', QtCore.QVariant(visible)) @@ -984,8 +967,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.FileMenu.addSeparator() for fileId, filename in enumerate(recentFilesToDisplay): log.debug('Recent file name: %s', filename) - action = QtGui.QAction(u'&%d %s' % (fileId + 1, - QtCore.QFileInfo(filename).fileName()), self) + action = base_action(self, u'&%d %s' % (fileId + 1, + QtCore.QFileInfo(filename).fileName())) action.setData(QtCore.QVariant(filename)) self.connect(action, QtCore.SIGNAL(u'triggered()'), self.ServiceManagerContents.onRecentServiceClicked) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 4746ae3f7..e350009cd 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -42,13 +42,13 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): The shortcut list dialog """ #TODO: do not close on ESC -#TODO: Fix Preview/Live controller (have the same shortcut +#TODO: Fix Preview/Live controller (have the same shortcut) def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) - self.assingedShortcuts = [] self.column = -1 self.shortcutButton.setText(u'') + self.shortcutButton.setEnabled(False) QtCore.QObject.connect(self.shortcutButton, QtCore.SIGNAL(u'toggled(bool)'), self.onShortcutButtonClicked) QtCore.QObject.connect(self.treeWidget, @@ -76,7 +76,27 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if event.modifiers() & Qt.ShiftModifier == Qt.ShiftModifier: key_string = u'Shift+' + key_string key_sequence = QtGui.QKeySequence(key_string) - if key_sequence in self.assingedShortcuts: + # The item/action we are attempting to change. + changing_item = self.treeWidget.currentItem() + changing_action = changing_item.data(0, QtCore.Qt.UserRole).toPyObject() + shortcut_valid = True + for category in ActionList.categories: + for action in category.actions: + shortcuts = action.shortcuts() + if key_sequence not in shortcuts: + continue + if action is changing_action: + continue + # Have the same parentWidget, thus they cannot have the same + # shortcut. + #TODO: Does not fully work right now. + if action.parentWidget() is changing_action.parentWidget(): + shortcut_valid = False + if action.shortcutContext() == QtCore.Qt.WindowShortcut: + shortcut_valid = False + if changing_action.shortcutContext() == QtCore.Qt.WindowShortcut: + shortcut_valid = False + if not shortcut_valid: QtGui.QMessageBox.warning(self, translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'), unicode(translate('OpenLP.ShortcutListDialog', 'The shortcut ' @@ -91,6 +111,9 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def exec_(self): self.reloadShortcutList() + self.shortcutButton.setChecked(False) + self.shortcutButton.setEnabled(False) + self.shortcutButton.setText(u'') return QtGui.QDialog.exec_(self) def reloadShortcutList(self): @@ -116,7 +139,6 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): This refreshes the item's shortcuts shown in the list. Note, this neither adds new actions nor removes old actions. """ - self.assingedShortcuts = [] iterator = QtGui.QTreeWidgetItemIterator(self.treeWidget) while iterator.value(): item = iterator.value() @@ -124,7 +146,6 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action = item.data(0, QtCore.Qt.UserRole).toPyObject() if action is None: continue - self.assingedShortcuts.extend(action.shortcuts()) if len(action.shortcuts()) == 0: item.setText(1, u'') item.setText(2, u'') @@ -142,6 +163,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if toggled: return item = self.treeWidget.currentItem() + if item is None: + return action = item.data(0, QtCore.Qt.UserRole).toPyObject() if action is None: return @@ -163,12 +186,13 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def onItemDoubleClicked(self, item, column): """ + A item has been double clicked. ``The shortcutButton`` will be checked + and the item's shortcut will be displayed. """ - item = self.treeWidget.currentItem() action = item.data(0, QtCore.Qt.UserRole).toPyObject() + if action is None: + return self.shortcutButton.setChecked(True) - if action is None or column not in [1, 2]: - self.shortcutButton.setChecked(False) self.onItemPressed(item, column) def onItemPressed(self, item, column): @@ -177,11 +201,11 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): shortcut which is encapsulate in the item. """ self.column = column - item = self.treeWidget.currentItem() action = item.data(0, QtCore.Qt.UserRole).toPyObject() self.shortcutButton.setEnabled(True) text = u'' if action is None or column not in [1, 2]: + self.shortcutButton.setChecked(False) self.shortcutButton.setEnabled(False) elif column == 1 and len(action.shortcuts()) != 0: text = action.shortcuts()[0].toString() @@ -194,16 +218,15 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): Restore the defaults of this """ item = self.treeWidget.currentItem() + self.shortcutButton.setChecked(False) if item is None: return action = item.data(0, QtCore.Qt.UserRole).toPyObject() if action is None: return - #FIXME: defaultShortcuts action.setShortcuts(action.defaultShortcuts) - self.shortcutButton.setChecked(False) - self.shortcutButton.setText(u'') self.refreshShortcutList() + self.onItemPressed(item, self.column) def save(self): """ diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index e9d748ad5..750ada7cd 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -157,16 +157,20 @@ class SlideController(QtGui.QWidget): self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu) self.hideMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Hide'), self.toolbar)) - self.blankScreen = icon_action(self.hideMenu, u'Blank Screen', + self.blankScreen = shortcut_action(self.hideMenu, u'blankScreen', + [QtCore.Qt.Key_Period], self.onBlankDisplay, u':/slides/slide_blank.png', False, u'Live Toolbar') self.blankScreen.setText( translate('OpenLP.SlideController', 'Blank Screen')) - self.themeScreen = icon_action(self.hideMenu, u'Blank Theme', + self.themeScreen = shortcut_action(self.hideMenu, u'themeScreen', + [QtGui.QKeySequence(u'T')], self.onThemeDisplay, u':/slides/slide_theme.png', False, u'Live Toolbar') self.themeScreen.setText( translate('OpenLP.SlideController', 'Blank to Theme')) - self.desktopScreen = icon_action(self.hideMenu, u'Desktop Screen', - u':/slides/slide_desktop.png', False, u'Live Toolbar') + self.desktopScreen = shortcut_action(self.hideMenu, + u'desktopScreen', [QtGui.QKeySequence(u'D')], + self.onHideDisplay, u':/slides/slide_desktop.png', False, + u'Live Toolbar') self.desktopScreen.setText( translate('OpenLP.SlideController', 'Show Desktop')) self.hideMenu.setDefaultAction(self.blankScreen) @@ -294,12 +298,6 @@ class SlideController(QtGui.QWidget): QtCore.QObject.connect(self.previewListWidget, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) if self.isLive: - QtCore.QObject.connect(self.blankScreen, - QtCore.SIGNAL(u'triggered(bool)'), self.onBlankDisplay) - QtCore.QObject.connect(self.themeScreen, - QtCore.SIGNAL(u'triggered(bool)'), self.onThemeDisplay) - QtCore.QObject.connect(self.desktopScreen, - QtCore.SIGNAL(u'triggered(bool)'), self.onHideDisplay) QtCore.QObject.connect(self.volumeSlider, QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) QtCore.QObject.connect(Receiver.get_receiver(), @@ -380,14 +378,17 @@ class SlideController(QtGui.QWidget): ActionList.add_action(self.nextItem, u'Live Toolbar') self.previousService = shortcut_action(parent, u'previousService', [QtCore.Qt.Key_Left], self.servicePrevious, u'Live Toolbar') + self.previousService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.previousService.setText( translate('OpenLP.SlideController', 'Previous Service')) self.nextService = shortcut_action(parent, 'nextService', [QtCore.Qt.Key_Right], self.serviceNext, u'Live Toolbar') + self.nextService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.nextService.setText( translate('OpenLP.SlideController', 'Next Service')) self.escapeItem = shortcut_action(parent, 'escapeItem', [QtCore.Qt.Key_Escape], self.liveEscape, u'Live Toolbar') + self.escapeItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.escapeItem.setText( translate('OpenLP.SlideController', 'Escape Item')) @@ -742,10 +743,12 @@ class SlideController(QtGui.QWidget): """ self.onBlankDisplay(False) - def onBlankDisplay(self, checked): + def onBlankDisplay(self, checked=None): """ Handle the blank screen button actions """ + if checked is None: + checked = self.blankScreen.isChecked() log.debug(u'onBlankDisplay %s' % checked) self.hideMenu.setDefaultAction(self.blankScreen) self.blankScreen.setChecked(checked) @@ -763,10 +766,12 @@ class SlideController(QtGui.QWidget): self.blankPlugin(checked) self.updatePreview() - def onThemeDisplay(self, checked): + def onThemeDisplay(self, checked=None): """ Handle the Theme screen button """ + if checked is None: + checked = self.themeScreen.isChecked() log.debug(u'onThemeDisplay %s' % checked) self.hideMenu.setDefaultAction(self.themeScreen) self.blankScreen.setChecked(False) @@ -784,10 +789,12 @@ class SlideController(QtGui.QWidget): self.blankPlugin(checked) self.updatePreview() - def onHideDisplay(self, checked): + def onHideDisplay(self, checked=None): """ Handle the Hide screen button """ + if checked is None: + checked = self.desktopScreen.isChecked() log.debug(u'onHideDisplay %s' % checked) self.hideMenu.setDefaultAction(self.desktopScreen) self.blankScreen.setChecked(False) @@ -1102,11 +1109,11 @@ class SlideController(QtGui.QWidget): screen hide attributes """ blank = None - if self.blankScreen.isChecked: + if self.blankScreen.isChecked(): blank = self.blankScreen - if self.themeScreen.isChecked: + if self.themeScreen.isChecked(): blank = self.themeScreen - if self.desktopScreen.isChecked: + if self.desktopScreen.isChecked(): blank = self.desktopScreen if blank: blank.setChecked(False) diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 34bc72173..7421db30e 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -173,6 +173,11 @@ class CategoryList(object): self.categories.append(category) self.categories.sort(key=lambda cat: cat.weight) + def remove(self, name): + for category in self.categories: + if category.name == name: + self.categories.remove(category) + class ActionList(object): """ @@ -206,3 +211,6 @@ class ActionList(object): if category not in ActionList.categories: return ActionList.categories[category].actions.remove(action) + # Remove empty categories. + if len(ActionList.categories[category].actions) == 0: + ActionList.categories.remove(category) diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index 8ff40373a..2e55a23c0 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -32,6 +32,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, Receiver, build_icon, \ translate from openlp.core.lib.db import Manager +from openlp.core.lib.ui import base_action, shortcut_action +from openlp.core.utils.actions import ActionList from openlp.plugins.songusage.forms import SongUsageDetailForm, \ SongUsageDeleteForm from openlp.plugins.songusage.lib.db import init_schema, SongUsageItem @@ -63,30 +65,25 @@ class SongUsagePlugin(Plugin): self.SongUsageMenu.setObjectName(u'SongUsageMenu') self.SongUsageMenu.setTitle(translate( 'SongUsagePlugin', '&Song Usage Tracking')) - #SongUsage Delete - self.SongUsageDelete = QtGui.QAction(tools_menu) + # SongUsage Delete + self.SongUsageDelete = base_action(tools_menu, u'SongUsageDelete') self.SongUsageDelete.setText(translate('SongUsagePlugin', '&Delete Tracking Data')) self.SongUsageDelete.setStatusTip(translate('SongUsagePlugin', 'Delete song usage data up to a specified date.')) - self.SongUsageDelete.setObjectName(u'SongUsageDelete') - #SongUsage Report - self.SongUsageReport = QtGui.QAction(tools_menu) + # SongUsage Report + self.SongUsageReport = base_action(tools_menu, u'SongUsageReport') self.SongUsageReport.setText( translate('SongUsagePlugin', '&Extract Tracking Data')) self.SongUsageReport.setStatusTip( translate('SongUsagePlugin', 'Generate a report on song usage.')) - self.SongUsageReport.setObjectName(u'SongUsageReport') - #SongUsage activation - self.SongUsageStatus = QtGui.QAction(tools_menu) - self.SongUsageStatus.setCheckable(True) - self.SongUsageStatus.setChecked(False) + # SongUsage activation + self.SongUsageStatus = shortcut_action(tools_menu, u'SongUsageStatus', + [QtCore.Qt.Key_F4], self.toggleSongUsageState, checked=False) self.SongUsageStatus.setText(translate( 'SongUsagePlugin', 'Toggle Tracking')) self.SongUsageStatus.setStatusTip(translate('SongUsagePlugin', 'Toggle the tracking of song usage.')) - self.SongUsageStatus.setShortcut(u'F4') - self.SongUsageStatus.setObjectName(u'SongUsageStatus') #Add Menus together self.toolsMenu.addAction(self.SongUsageMenu.menuAction()) self.SongUsageMenu.addAction(self.SongUsageStatus) @@ -97,9 +94,6 @@ class SongUsagePlugin(Plugin): QtCore.QObject.connect(self.SongUsageStatus, QtCore.SIGNAL(u'visibilityChanged(bool)'), self.SongUsageStatus.setChecked) - QtCore.QObject.connect(self.SongUsageStatus, - QtCore.SIGNAL(u'triggered(bool)'), - self.toggleSongUsageState) QtCore.QObject.connect(self.SongUsageDelete, QtCore.SIGNAL(u'triggered()'), self.onSongUsageDelete) QtCore.QObject.connect(self.SongUsageReport, @@ -116,6 +110,9 @@ class SongUsagePlugin(Plugin): self.settingsSection + u'/active', QtCore.QVariant(False)).toBool() self.SongUsageStatus.setChecked(self.SongUsageActive) + ActionList.add_action(self.SongUsageDelete, u'Song Usage') + ActionList.add_action(self.SongUsageReport, u'Song Usage') + ActionList.add_action(self.SongUsageStatus, u'Song Usage') if self.manager is None: self.manager = Manager(u'songusage', init_schema) self.SongUsagedeleteform = SongUsageDeleteForm(self.manager, @@ -131,6 +128,9 @@ class SongUsagePlugin(Plugin): self.manager.finalise() Plugin.finalise(self) self.SongUsageMenu.menuAction().setVisible(False) + ActionList.remove_action(self.SongUsageDelete, u'Song Usage') + ActionList.remove_action(self.SongUsageReport, u'Song Usage') + ActionList.remove_action(self.SongUsageStatus, u'Song Usage') #stop any events being processed self.SongUsageActive = False From 1a493b1fc8da490d0cd7783188f79c02caeb83cd Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 1 Apr 2011 18:53:39 +0200 Subject: [PATCH 017/148] possible fix for not working 'move selection down' --- openlp/core/ui/slidecontroller.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 750ada7cd..9f486518b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -32,7 +32,7 @@ from PyQt4.phonon import Phonon from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ ItemCapabilities, translate -from openlp.core.lib.ui import icon_action, UiStrings, shortcut_action +from openlp.core.lib.ui import UiStrings, shortcut_action from openlp.core.ui import HideMode, MainDisplay from openlp.core.utils.actions import ActionList @@ -143,12 +143,17 @@ class SlideController(QtGui.QWidget): translate('OpenLP.SlideController', 'Move to previous'), self.onSlideSelectedPrevious) self.previousItem.setObjectName(u'previousItem') + self.previousItem.setShortcuts([QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp]) + self.previousItem.setShortcutContext( + QtCore.Qt.WidgetWithChildrenShortcut) self.nextItem = self.toolbar.addToolbarButton( translate('OpenLP.SlideController', 'Next Slide'), u':/slides/slide_next.png', translate('OpenLP.SlideController', 'Move to next'), self.onSlideSelectedNext) self.nextItem.setObjectName(u'nextItem') + self.nextItem.setShortcuts([QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown]) + self.nextItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.toolbar.addToolbarSeparator(u'Close Separator') if self.isLive: self.hideMenu = QtGui.QToolButton(self.toolbar) @@ -363,18 +368,11 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged) def setPreviewHotkeys(self, parent=None): - self.previousItem.setShortcuts([QtCore.Qt.Key_Up]) ActionList.add_action(self.previousItem, u'Preview Toolbar') - self.nextItem.setShortcuts([QtCore.Qt.Key_Down]) ActionList.add_action(self.nextItem, u'Preview Toolbar') def setLiveHotkeys(self, parent=None): - self.previousItem.setShortcuts([QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp]) - self.previousItem.setShortcutContext( - QtCore.Qt.WidgetWithChildrenShortcut) ActionList.add_action(self.previousItem, u'Live Toolbar') - self.nextItem.setShortcuts([QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown]) - self.nextItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) ActionList.add_action(self.nextItem, u'Live Toolbar') self.previousService = shortcut_action(parent, u'previousService', [QtCore.Qt.Key_Left], self.servicePrevious, u'Live Toolbar') From 4badce0205e1f29d69f2074bbd2bb30d934cf9d7 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 2 Apr 2011 15:08:54 +0200 Subject: [PATCH 018/148] fixed actions which did not have a parent which caused the check to fail --- openlp/core/lib/toolbar.py | 3 +-- openlp/core/ui/shortcutlistform.py | 11 ++++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index 44149cd85..d2b37df51 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -79,7 +79,6 @@ class OpenLPToolbar(QtGui.QToolBar): ``context`` Specify the context in which this shortcut is valid """ - newAction = None if icon: actionIcon = build_icon(icon) if slot and not checkable: @@ -88,7 +87,7 @@ class OpenLPToolbar(QtGui.QToolBar): newAction = self.addAction(actionIcon, title) self.icons[title] = actionIcon else: - newAction = QtGui.QAction(title, newAction) + newAction = QtGui.QAction(title, self) self.addAction(newAction) QtCore.QObject.connect(newAction, QtCore.SIGNAL(u'triggered()'), slot) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index e350009cd..bd4fb8ab6 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -42,7 +42,6 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): The shortcut list dialog """ #TODO: do not close on ESC -#TODO: Fix Preview/Live controller (have the same shortcut) def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) @@ -89,12 +88,13 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): continue # Have the same parentWidget, thus they cannot have the same # shortcut. - #TODO: Does not fully work right now. - if action.parentWidget() is changing_action.parentWidget(): + if action.parent() is changing_action.parent(): shortcut_valid = False - if action.shortcutContext() == QtCore.Qt.WindowShortcut: + if action.shortcutContext() in [QtCore.Qt.WindowShortcut, + QtCore.Qt.ApplicationShortcut]: shortcut_valid = False - if changing_action.shortcutContext() == QtCore.Qt.WindowShortcut: + if changing_action.shortcutContext() in \ + [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]: shortcut_valid = False if not shortcut_valid: QtGui.QMessageBox.warning(self, @@ -193,6 +193,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if action is None: return self.shortcutButton.setChecked(True) + self.shortcutButton.setFocus(QtCore.Qt.OtherFocusReason) self.onItemPressed(item, column) def onItemPressed(self, item, column): From 7260f91825cd8a9c8bf2567dcd7d88b789b9fc1c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 2 Apr 2011 16:22:08 +0200 Subject: [PATCH 019/148] restore butto nnow works --- openlp/core/ui/shortcutlistdialog.py | 2 +- openlp/core/ui/shortcutlistform.py | 32 +++++++++++++++++++++++++++- openlp/core/ui/slidecontroller.py | 15 ++++++------- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 467fb0534..5f8936628 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -58,7 +58,7 @@ class Ui_ShortcutListDialog(object): self.dialogLayout.addLayout(self.customLayout) self.buttonBox = QtGui.QDialogButtonBox(shortcutListDialog) self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | - QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Reset) + QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.RestoreDefaults) self.buttonBox.setObjectName(u'buttonBox') self.dialogLayout.addWidget(self.buttonBox) self.retranslateUi(shortcutListDialog) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index bd4fb8ab6..14aa1d009 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -41,7 +41,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ The shortcut list dialog """ -#TODO: do not close on ESC + def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) @@ -58,6 +58,16 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.onItemDoubleClicked) QtCore.QObject.connect(self.clearShortcutButton, QtCore.SIGNAL(u'clicked(bool)'), self.onClearShortcutButtonClicked) + QtCore.QObject.connect(self.buttonBox, + QtCore.SIGNAL(u'clicked(QAbstractButton*)'), + self.onRestoreDefaultsClicked) + + def keyPressEvent(self, event): + if self.shortcutButton.isChecked(): + event.ignore() + elif event.key() == QtCore.Qt.Key_Escape: + event.accept() + self.close() def keyReleaseEvent(self, event): Qt = QtCore.Qt @@ -229,6 +239,26 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.refreshShortcutList() self.onItemPressed(item, self.column) + def onRestoreDefaultsClicked(self, button): + """ + Restores all default shortcuts. + """ + if self.buttonBox.buttonRole(button) != QtGui.QDialogButtonBox.ResetRole: + return + if QtGui.QMessageBox.question(self, + translate('OpenLP.ShortcutListDialog', 'Restore Default Shortcuts'), + translate('OpenLP.ShortcutListDialog', 'Do you want to restore all ' + 'shortcuts to their defaults?'), QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No)) == QtGui.QMessageBox.No: + return + self.shortcutButton.setChecked(False) + self.shortcutButton.setText(u'') + for category in ActionList.categories: + for action in category.actions: + action.setShortcuts(action.defaultShortcuts) + self.refreshShortcutList() + def save(self): """ Save the shortcuts. **Note**, that we do not have to load the shortcuts, diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 9f486518b..1ec2e1772 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -141,19 +141,18 @@ class SlideController(QtGui.QWidget): translate('OpenLP.SlideController', 'Previous Slide'), u':/slides/slide_previous.png', translate('OpenLP.SlideController', 'Move to previous'), - self.onSlideSelectedPrevious) - self.previousItem.setObjectName(u'previousItem') - self.previousItem.setShortcuts([QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp]) - self.previousItem.setShortcutContext( - QtCore.Qt.WidgetWithChildrenShortcut) + self.onSlideSelectedPrevious, + shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], + context=QtCore.Qt.WidgetWithChildrenShortcut) + self.previousItem.setObjectName(u'previousItem') self.nextItem = self.toolbar.addToolbarButton( translate('OpenLP.SlideController', 'Next Slide'), u':/slides/slide_next.png', translate('OpenLP.SlideController', 'Move to next'), - self.onSlideSelectedNext) + self.onSlideSelectedNext, + shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], + context=QtCore.Qt.WidgetWithChildrenShortcut) self.nextItem.setObjectName(u'nextItem') - self.nextItem.setShortcuts([QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown]) - self.nextItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.toolbar.addToolbarSeparator(u'Close Separator') if self.isLive: self.hideMenu = QtGui.QToolButton(self.toolbar) From e3d822f07ad30f72b99f21410039438639faf56a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 2 Apr 2011 17:37:14 +0200 Subject: [PATCH 020/148] fixed strange save bug --- openlp/core/lib/ui.py | 17 +++++++++-------- openlp/core/ui/slidecontroller.py | 6 ++++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index a02041cad..9f24da96c 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -280,17 +280,18 @@ def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, """ Return a shortcut enabled action. """ + action = QtGui.QAction(parent) + action.setObjectName(name) if icon is not None: - action = icon_action(parent, name, icon, checked, category) - elif checked is not None: - action = checkable_action(parent, name, checked, category) - else: - action = base_action(parent, name, category) + action.setIcon(build_icon(icon)) + if checked is not None: + action.setCheckable(True) + action.setChecked(checked) + action.setCheckable(True) action.setShortcuts(shortcuts) action.setShortcutContext(QtCore.Qt.WindowShortcut) - # We have to save the default shortcut again, as the action's shortcut was - # set after adding the shortcut to the action list. - action.defaultShortcuts = action.shortcuts() + if category is not None: + ActionList.add_action(action, category) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), function) return action diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 1ec2e1772..3fe27f4d9 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -144,7 +144,6 @@ class SlideController(QtGui.QWidget): self.onSlideSelectedPrevious, shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], context=QtCore.Qt.WidgetWithChildrenShortcut) - self.previousItem.setObjectName(u'previousItem') self.nextItem = self.toolbar.addToolbarButton( translate('OpenLP.SlideController', 'Next Slide'), u':/slides/slide_next.png', @@ -152,7 +151,6 @@ class SlideController(QtGui.QWidget): self.onSlideSelectedNext, shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], context=QtCore.Qt.WidgetWithChildrenShortcut) - self.nextItem.setObjectName(u'nextItem') self.toolbar.addToolbarSeparator(u'Close Separator') if self.isLive: self.hideMenu = QtGui.QToolButton(self.toolbar) @@ -367,10 +365,14 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged) def setPreviewHotkeys(self, parent=None): + self.previousItem.setObjectName(u'previousItemPreview') + self.nextItem.setObjectName(u'nextItemPreview') ActionList.add_action(self.previousItem, u'Preview Toolbar') ActionList.add_action(self.nextItem, u'Preview Toolbar') def setLiveHotkeys(self, parent=None): + self.previousItem.setObjectName(u'previousItemLive') + self.nextItem.setObjectName(u'nextItemLive') ActionList.add_action(self.previousItem, u'Live Toolbar') ActionList.add_action(self.nextItem, u'Live Toolbar') self.previousService = shortcut_action(parent, u'previousService', From 958155e7d75d8a86a90f0e4de1e33f9641520c37 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 2 Apr 2011 17:45:00 +0200 Subject: [PATCH 021/148] fixed alternate shortcut --- openlp/core/ui/shortcutlistform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 14aa1d009..80b9652a0 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -186,7 +186,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): shortcuts.append(action.shortcuts()[1]) # We are changing the secondary shortcut. elif self.column == 2: - if len(action.shortcuts()) == 1: + if len(action.shortcuts()) != 0: shortcuts.append(action.shortcuts()[0]) shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) else: From 61068e26a6dce8bc7f577b716777cf3c56ef23eb Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 2 Apr 2011 18:14:43 +0200 Subject: [PATCH 022/148] removed cancel button --- openlp/core/ui/shortcutlistdialog.py | 4 ++-- openlp/core/ui/shortcutlistform.py | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 5f8936628..a4bcc359e 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -57,8 +57,8 @@ class Ui_ShortcutListDialog(object): self.customLayout.addStretch() self.dialogLayout.addLayout(self.customLayout) self.buttonBox = QtGui.QDialogButtonBox(shortcutListDialog) - self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | - QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.RestoreDefaults) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok | + QtGui.QDialogButtonBox.RestoreDefaults) self.buttonBox.setObjectName(u'buttonBox') self.dialogLayout.addWidget(self.buttonBox) self.retranslateUi(shortcutListDialog) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 80b9652a0..84aea006a 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -63,11 +63,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.onRestoreDefaultsClicked) def keyPressEvent(self, event): - if self.shortcutButton.isChecked(): - event.ignore() - elif event.key() == QtCore.Qt.Key_Escape: - event.accept() - self.close() + event.ignore() def keyReleaseEvent(self, event): Qt = QtCore.Qt From 28b83aadaed1c66eecb628152956414a379f0f19 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 3 Apr 2011 13:36:43 +0200 Subject: [PATCH 023/148] translate categories --- openlp/core/lib/ui.py | 8 +++ openlp/core/ui/mainwindow.py | 63 +++++++++++---------- openlp/core/ui/servicemanager.py | 23 +++++--- openlp/core/ui/slidecontroller.py | 20 +++---- openlp/core/utils/actions.py | 2 + openlp/plugins/alerts/alertsplugin.py | 4 +- openlp/plugins/bibles/bibleplugin.py | 8 ++- openlp/plugins/songs/songsplugin.py | 12 ++-- openlp/plugins/songusage/songusageplugin.py | 20 ++++--- 9 files changed, 94 insertions(+), 66 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 9f24da96c..15309edc9 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -56,8 +56,10 @@ class UiStrings(object): EmptyField = translate('OpenLP.Ui', 'Empty Field') Error = translate('OpenLP.Ui', 'Error') Export = translate('OpenLP.Ui', 'Export') + File = translate('OpenLP.Ui', 'File') FontSizePtUnit = translate('OpenLP.Ui', 'pt', 'Abbreviated font pointsize unit') + Help = translate('OpenLP.Ui', 'Help') Hours = translate('OpenLP.Ui', 'h', 'The abbreviated unit for hours') Image = translate('OpenLP.Ui', 'Image') Import = translate('OpenLP.Ui', 'Import') @@ -65,6 +67,7 @@ class UiStrings(object): Live = translate('OpenLP.Ui', 'Live') LiveBGError = translate('OpenLP.Ui', 'Live Background Error') LivePanel = translate('OpenLP.Ui', 'Live Panel') + LiveToolbar = translate('OpenLP.Ui', 'Live Toolbar') Load = translate('OpenLP.Ui', 'Load') Minutes = translate('OpenLP.Ui', 'm', 'The abbreviated unit for minutes') Middle = translate('OpenLP.Ui', 'Middle') @@ -82,6 +85,7 @@ class UiStrings(object): OpenService = translate('OpenLP.Ui', 'Open Service') Preview = translate('OpenLP.Ui', 'Preview') PreviewPanel = translate('OpenLP.Ui', 'Preview Panel') + PreviewToolbar = translate('OpenLP.Ui', 'Preview Toolbar') PrintServiceOrder = translate('OpenLP.Ui', 'Print Service Order') ReplaceBG = translate('OpenLP.Ui', 'Replace Background') ReplaceLiveBG = translate('OpenLP.Ui', 'Replace Live Background') @@ -92,13 +96,17 @@ class UiStrings(object): Search = translate('OpenLP.Ui', 'Search') SelectDelete = translate('OpenLP.Ui', 'You must select an item to delete.') SelectEdit = translate('OpenLP.Ui', 'You must select an item to edit.') + Settings = translate('OpenLP.Ui', 'Settings') SaveService = translate('OpenLP.Ui', 'Save Service') Service = translate('OpenLP.Ui', 'Service') StartTimeCode = unicode(translate('OpenLP.Ui', 'Start %s')) Theme = translate('OpenLP.Ui', 'Theme', 'Singular') Themes = translate('OpenLP.Ui', 'Themes', 'Plural') + Tools = translate('OpenLP.Ui', 'Tools') Top = translate('OpenLP.Ui', 'Top') Version = translate('OpenLP.Ui', 'Version') + View = translate('OpenLP.Ui', 'View') + ViewMode = translate('OpenLP.Ui', 'View Model') def add_welcome_page(parent, image): """ diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 458e8814f..bb6d105b9 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -164,69 +164,72 @@ class Ui_MainWindow(object): self.FileNewItem = shortcut_action(mainWindow, u'FileNewItem', [QtGui.QKeySequence(u'Ctrl+N')], self.ServiceManagerContents.onNewServiceClicked, - u':/general/general_new.png', category=u'File') + u':/general/general_new.png', category=UiStrings.File) self.FileOpenItem = shortcut_action(mainWindow, u'FileOpenItem', [QtGui.QKeySequence(u'Ctrl+O')], self.ServiceManagerContents.onLoadServiceClicked, - u':/general/general_open.png', category=u'File') + u':/general/general_open.png', category=UiStrings.File) self.FileSaveItem = shortcut_action(mainWindow, u'FileSaveItem', [QtGui.QKeySequence(u'Ctrl+S')], self.ServiceManagerContents.saveFile, - u':/general/general_save.png', category=u'File') + u':/general/general_save.png', category=UiStrings.File) self.FileSaveAsItem = shortcut_action(mainWindow, u'FileSaveAsItem', [QtGui.QKeySequence(u'Ctrl+Shift+S')], - self.ServiceManagerContents.saveFileAs, category=u'File') + self.ServiceManagerContents.saveFileAs, category=UiStrings.File) self.printServiceOrderItem = shortcut_action(mainWindow, u'printServiceItem', [QtGui.QKeySequence(u'Ctrl+P')], - self.ServiceManagerContents.printServiceOrder, category=u'File') + self.ServiceManagerContents.printServiceOrder, + category=UiStrings.File) self.FileExitItem = shortcut_action(mainWindow, u'FileExitItem', [QtGui.QKeySequence(u'Alt+F4')], mainWindow.close, - u':/system/system_exit.png', category=u'File') + u':/system/system_exit.png', category=UiStrings.File) self.ImportThemeItem = base_action( - mainWindow, u'ImportThemeItem', u'Import') + mainWindow, u'ImportThemeItem', UiStrings.Import) self.ImportLanguageItem = base_action( - mainWindow, u'ImportLanguageItem')#, u'Import') + mainWindow, u'ImportLanguageItem')#, UiStrings.Import) self.ExportThemeItem = base_action( - mainWindow, u'ExportThemeItem', u'Export') + mainWindow, u'ExportThemeItem', UiStrings.Export) self.ExportLanguageItem = base_action( - mainWindow, u'ExportLanguageItem')#, u'Export') + mainWindow, u'ExportLanguageItem')#, UiStrings.Export) self.ViewMediaManagerItem = shortcut_action(mainWindow, u'ViewMediaManagerItem', [QtGui.QKeySequence(u'F8')], self.toggleMediaManager, u':/system/system_mediamanager.png', - self.mediaManagerDock.isVisible(), u'View') + self.mediaManagerDock.isVisible(), UiStrings.View) self.ViewThemeManagerItem = shortcut_action(mainWindow, u'ViewThemeManagerItem', [QtGui.QKeySequence(u'F10')], self.toggleThemeManager, u':/system/system_thememanager.png', - self.themeManagerDock.isVisible(), u'View') + self.themeManagerDock.isVisible(), UiStrings.View) self.ViewServiceManagerItem = shortcut_action(mainWindow, u'ViewServiceManagerItem', [QtGui.QKeySequence(u'F9')], self.toggleServiceManager, u':/system/system_servicemanager.png', - self.serviceManagerDock.isVisible(), u'View') + self.serviceManagerDock.isVisible(), UiStrings.View) self.ViewPreviewPanel = shortcut_action(mainWindow, u'ViewPreviewPanel', [QtGui.QKeySequence(u'F11')], - self.setPreviewPanelVisibility, checked=previewVisible, category=u'View') + self.setPreviewPanelVisibility, checked=previewVisible, + category=UiStrings.View) self.ViewLivePanel = shortcut_action(mainWindow, u'ViewLivePanel', [QtGui.QKeySequence(u'F12')], self.setLivePanelVisibility, - checked=liveVisible, category=u'View') + checked=liveVisible, category=UiStrings.View) self.ModeDefaultItem = checkable_action( - mainWindow, u'ModeDefaultItem', category=u'View Mode') + mainWindow, u'ModeDefaultItem', category=UiStrings.ViewMode) self.ModeSetupItem = checkable_action( - mainWindow, u'ModeLiveItem', category=u'View Mode') + mainWindow, u'ModeLiveItem', category=UiStrings.ViewMode) self.ModeLiveItem = checkable_action( - mainWindow, u'ModeLiveItem', True, u'View Mode') + mainWindow, u'ModeLiveItem', True, UiStrings.ViewMode) self.ModeGroup = QtGui.QActionGroup(mainWindow) self.ModeGroup.addAction(self.ModeDefaultItem) self.ModeGroup.addAction(self.ModeSetupItem) self.ModeGroup.addAction(self.ModeLiveItem) self.ModeDefaultItem.setChecked(True) self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', - u':/tools/tools_add.png', category=u'Tools') - self.ToolsOpenDataFolder = icon_action(mainWindow, u'ToolsOpenDataFolder', - u':/general/general_open.png', category=u'Tools') + u':/tools/tools_add.png', category=UiStrings.Tools) + self.ToolsOpenDataFolder = icon_action(mainWindow, + u'ToolsOpenDataFolder', u':/general/general_open.png', + category=UiStrings.Tools) self.settingsPluginListItem = shortcut_action(mainWindow, u'settingsPluginListItem', [QtGui.QKeySequence(u'Alt+F7')], self.onPluginItemClicked, u':/system/settings_plugin_list.png', - category=u'Settings') + category=UiStrings.Settings) # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, u'AutoLanguageItem', LanguageManager.auto_language) @@ -242,23 +245,25 @@ class Ui_MainWindow(object): add_actions(self.LanguageGroup, [languageItem]) self.SettingsShortcutsItem = icon_action(mainWindow, u'SettingsShortcutsItem', - u':/system/system_configure_shortcuts.png', category=u'Settings') + u':/system/system_configure_shortcuts.png', + category=UiStrings.Settings) self.DisplayTagItem = icon_action(mainWindow, - u'DisplayTagItem', u':/system/tag_editor.png', category=u'Settings') + u'DisplayTagItem', u':/system/tag_editor.png', + category=UiStrings.Settings) self.SettingsConfigureItem = icon_action(mainWindow, u'SettingsConfigureItem', u':/system/system_settings.png', - category=u'Settings') + category=UiStrings.Settings) self.HelpDocumentationItem = icon_action(mainWindow, u'HelpDocumentationItem', u':/system/system_help_contents.png', - category=None)#u'Help') + category=None)#UiStrings.Help) self.HelpDocumentationItem.setEnabled(False) self.HelpAboutItem = shortcut_action(mainWindow, u'HelpAboutItem', [QtGui.QKeySequence(u'Ctrl+F1')], self.onHelpAboutItemClicked, - u':/system/system_about.png', category=u'Help') + u':/system/system_about.png', category=UiStrings.Help) self.HelpOnlineHelpItem = base_action( - mainWindow, u'HelpOnlineHelpItem', category=u'Help') + mainWindow, u'HelpOnlineHelpItem', category=UiStrings.Help) self.helpWebSiteItem = base_action( - mainWindow, u'helpWebSiteItem', category=u'Help') + mainWindow, u'helpWebSiteItem', category=UiStrings.Help) add_actions(self.FileImportMenu, (self.ImportThemeItem, self.ImportLanguageItem)) add_actions(self.FileExportMenu, diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 8d6062ab1..9daa1d8a2 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -167,7 +167,8 @@ class ServiceManager(QtGui.QWidget): 'Move item to the top of the service.'), self.onServiceTop, shortcuts=[QtCore.Qt.Key_Home]) self.serviceManagerList.moveTop.setObjectName(u'moveTop') - ActionList.add_action(self.serviceManagerList.moveTop, u'Service') + ActionList.add_action( + self.serviceManagerList.moveTop, UiStrings.Service) self.serviceManagerList.moveUp = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &up'), u':/services/service_up.png', @@ -175,7 +176,7 @@ class ServiceManager(QtGui.QWidget): 'Move item up one position in the service.'), self.onServiceUp, shortcuts=[QtCore.Qt.Key_PageUp]) self.serviceManagerList.moveUp.setObjectName(u'moveUp') - ActionList.add_action(self.serviceManagerList.moveUp, u'Service') + ActionList.add_action(self.serviceManagerList.moveUp, UiStrings.Service) self.serviceManagerList.moveDown = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), u':/services/service_down.png', @@ -183,7 +184,8 @@ class ServiceManager(QtGui.QWidget): 'Move item down one position in the service.'), self.onServiceDown, shortcuts=[QtCore.Qt.Key_PageDown]) self.serviceManagerList.moveDown.setObjectName(u'moveDown') - ActionList.add_action(self.serviceManagerList.moveDown, u'Service') + ActionList.add_action( + self.serviceManagerList.moveDown, UiStrings.Service) self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move to &bottom'), u':/services/service_bottom.png', @@ -191,7 +193,8 @@ class ServiceManager(QtGui.QWidget): 'Move item to the end of the service.'), self.onServiceEnd, shortcuts=[QtCore.Qt.Key_End]) self.serviceManagerList.moveBottom.setObjectName(u'moveBottom') - ActionList.add_action(self.serviceManagerList.moveBottom, u'Service') + ActionList.add_action( + self.serviceManagerList.moveBottom, UiStrings.Service) self.serviceManagerList.down = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), None, @@ -199,7 +202,7 @@ class ServiceManager(QtGui.QWidget): 'Moves the selection down the window.'), self.onMoveSelectionDown, shortcuts=[QtCore.Qt.Key_Down]) self.serviceManagerList.down.setObjectName(u'down') - ActionList.add_action(self.serviceManagerList.down, u'Service') + ActionList.add_action(self.serviceManagerList.down, UiStrings.Service) self.serviceManagerList.down.setVisible(False) self.serviceManagerList.up = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move up'), @@ -208,7 +211,7 @@ class ServiceManager(QtGui.QWidget): 'Moves the selection up the window.'), self.onMoveSelectionUp, shortcuts=[QtCore.Qt.Key_Up]) self.serviceManagerList.up.setObjectName(u'up') - ActionList.add_action(self.serviceManagerList.up, u'Service') + ActionList.add_action(self.serviceManagerList.up, UiStrings.Service) self.serviceManagerList.up.setVisible(False) self.orderToolbar.addSeparator() self.serviceManagerList.delete = self.orderToolbar.addToolbarButton( @@ -225,7 +228,7 @@ class ServiceManager(QtGui.QWidget): 'Expand all the service items.'), self.onExpandAll, shortcuts=[QtCore.Qt.Key_Plus]) self.serviceManagerList.expand.setObjectName(u'expand') - ActionList.add_action(self.serviceManagerList.expand, u'Service') + ActionList.add_action(self.serviceManagerList.expand, UiStrings.Service) self.serviceManagerList.collapse = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', '&Collapse all'), u':/services/service_collapse_all.png', @@ -233,7 +236,8 @@ class ServiceManager(QtGui.QWidget): 'Collapse all the service items.'), self.onCollapseAll, shortcuts=[QtCore.Qt.Key_Minus]) self.serviceManagerList.collapse.setObjectName(u'collapse') - ActionList.add_action(self.serviceManagerList.collapse, u'Service') + ActionList.add_action( + self.serviceManagerList.collapse, UiStrings.Service) self.orderToolbar.addSeparator() self.serviceManagerList.makeLive = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Go Live'), @@ -242,7 +246,8 @@ class ServiceManager(QtGui.QWidget): 'Send the selected item to Live.'), self.makeLive, shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return]) self.serviceManagerList.makeLive.setObjectName(u'orderToolbar') - ActionList.add_action(self.serviceManagerList.makeLive, u'Service') + ActionList.add_action( + self.serviceManagerList.makeLive, UiStrings.Service) self.layout.addWidget(self.orderToolbar) # Connect up our signals and slots QtCore.QObject.connect(self.themeComboBox, diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 3fe27f4d9..af94eb425 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -161,18 +161,18 @@ class SlideController(QtGui.QWidget): translate('OpenLP.SlideController', 'Hide'), self.toolbar)) self.blankScreen = shortcut_action(self.hideMenu, u'blankScreen', [QtCore.Qt.Key_Period], self.onBlankDisplay, - u':/slides/slide_blank.png', False, u'Live Toolbar') + u':/slides/slide_blank.png', False, UiStrings.LiveToolbar) self.blankScreen.setText( translate('OpenLP.SlideController', 'Blank Screen')) self.themeScreen = shortcut_action(self.hideMenu, u'themeScreen', [QtGui.QKeySequence(u'T')], self.onThemeDisplay, - u':/slides/slide_theme.png', False, u'Live Toolbar') + u':/slides/slide_theme.png', False, UiStrings.LiveToolbar) self.themeScreen.setText( translate('OpenLP.SlideController', 'Blank to Theme')) self.desktopScreen = shortcut_action(self.hideMenu, u'desktopScreen', [QtGui.QKeySequence(u'D')], self.onHideDisplay, u':/slides/slide_desktop.png', False, - u'Live Toolbar') + UiStrings.LiveToolbar) self.desktopScreen.setText( translate('OpenLP.SlideController', 'Show Desktop')) self.hideMenu.setDefaultAction(self.blankScreen) @@ -367,26 +367,26 @@ class SlideController(QtGui.QWidget): def setPreviewHotkeys(self, parent=None): self.previousItem.setObjectName(u'previousItemPreview') self.nextItem.setObjectName(u'nextItemPreview') - ActionList.add_action(self.previousItem, u'Preview Toolbar') - ActionList.add_action(self.nextItem, u'Preview Toolbar') + ActionList.add_action(self.previousItem, UiStrings.PreviewToolbar) + ActionList.add_action(self.nextItem, UiStrings.PreviewToolbar) def setLiveHotkeys(self, parent=None): self.previousItem.setObjectName(u'previousItemLive') self.nextItem.setObjectName(u'nextItemLive') - ActionList.add_action(self.previousItem, u'Live Toolbar') - ActionList.add_action(self.nextItem, u'Live Toolbar') + ActionList.add_action(self.previousItem, UiStrings.LiveToolbar) + ActionList.add_action(self.nextItem, UiStrings.LiveToolbar) self.previousService = shortcut_action(parent, u'previousService', - [QtCore.Qt.Key_Left], self.servicePrevious, u'Live Toolbar') + [QtCore.Qt.Key_Left], self.servicePrevious, UiStrings.LiveToolbar) self.previousService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.previousService.setText( translate('OpenLP.SlideController', 'Previous Service')) self.nextService = shortcut_action(parent, 'nextService', - [QtCore.Qt.Key_Right], self.serviceNext, u'Live Toolbar') + [QtCore.Qt.Key_Right], self.serviceNext, UiStrings.LiveToolbar) self.nextService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.nextService.setText( translate('OpenLP.SlideController', 'Next Service')) self.escapeItem = shortcut_action(parent, 'escapeItem', - [QtCore.Qt.Key_Escape], self.liveEscape, u'Live Toolbar') + [QtCore.Qt.Key_Escape], self.liveEscape, UiStrings.LiveToolbar) self.escapeItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.escapeItem.setText( translate('OpenLP.SlideController', 'Escape Item')) diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 7421db30e..04cb1f091 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -190,6 +190,7 @@ class ActionList(object): @staticmethod def add_action(action, category, weight=None): + category = unicode(category) if category not in ActionList.categories: ActionList.categories.append(category) action.defaultShortcuts = action.shortcuts() @@ -208,6 +209,7 @@ class ActionList(object): @staticmethod def remove_action(action, category): + category = unicode(category) if category not in ActionList.categories: return ActionList.categories[category].actions.remove(action) diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 45e1969f4..d564a9754 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -30,7 +30,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.lib.db import Manager -from openlp.core.lib.ui import icon_action +from openlp.core.lib.ui import icon_action, UiStrings from openlp.core.utils.actions import ActionList from openlp.plugins.alerts.lib import AlertsManager, AlertsTab from openlp.plugins.alerts.lib.db import init_schema @@ -75,7 +75,7 @@ class AlertsPlugin(Plugin): log.info(u'Alerts Initialising') Plugin.initialise(self) self.toolsAlertItem.setVisible(True) - ActionList.add_action(self.toolsAlertItem, u'Tools') + ActionList.add_action(self.toolsAlertItem, UiStrings.Tools) self.liveController.alertTab = self.settings_tab def finalise(self): diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 1396d4550..60be388ba 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -29,7 +29,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate -from openlp.core.lib.ui import base_action +from openlp.core.lib.ui import base_action, UiStrings from openlp.core.utils.actions import ActionList from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem @@ -52,9 +52,9 @@ class BiblePlugin(Plugin): self.manager = BibleManager(self) Plugin.initialise(self) self.importBibleItem.setVisible(True) - ActionList.add_action(self.importBibleItem, u'Import') + ActionList.add_action(self.importBibleItem, UiStrings.Import) # Do not add the action to the list yet. - #ActionList.add_action(self.exportBibleItem, u'Export') + #ActionList.add_action(self.exportBibleItem, UiStrings.Export) # Set to invisible until we can export bibles self.exportBibleItem.setVisible(False) @@ -65,7 +65,9 @@ class BiblePlugin(Plugin): log.info(u'Plugin Finalise') self.manager.finalise() Plugin.finalise(self) + ActionList.remove_action(self.importBibleItem, UiStrings.Import) self.importBibleItem.setVisible(False) + #ActionList.remove_action(self.exportBibleItem, UiStrings.Export) self.exportBibleItem.setVisible(False) def addImportMenuItem(self, import_menu): diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index de0714d5e..a3230ff7f 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -66,9 +66,9 @@ class SongsPlugin(Plugin): log.info(u'Songs Initialising') Plugin.initialise(self) self.toolsReindexItem.setVisible(True) - ActionList.add_action(self.SongImportItem, u'Import') - ActionList.add_action(self.SongExportItem, u'Export') - ActionList.add_action(self.toolsReindexItem, u'Tools') + ActionList.add_action(self.SongImportItem, UiStrings.Import) + ActionList.add_action(self.SongExportItem, UiStrings.Export) + ActionList.add_action(self.toolsReindexItem, UiStrings.Tools) self.mediaItem.displayResultsSong( self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) @@ -258,7 +258,7 @@ class SongsPlugin(Plugin): log.info(u'Songs Finalising') self.manager.finalise() self.toolsReindexItem.setVisible(False) - ActionList.remove_action(self.SongImportItem, u'Import') - ActionList.remove_action(self.SongExportItem, u'Export') - ActionList.remove_action(self.toolsReindexItem, u'Tools') + ActionList.remove_action(self.SongImportItem, UiStrings.Import) + ActionList.remove_action(self.SongExportItem, UiStrings.Export) + ActionList.remove_action(self.toolsReindexItem, UiStrings.Tools) Plugin.finalise(self) diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index 2e55a23c0..b0a545ad8 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -32,7 +32,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, Receiver, build_icon, \ translate from openlp.core.lib.db import Manager -from openlp.core.lib.ui import base_action, shortcut_action +from openlp.core.lib.ui import base_action, shortcut_action, UiStrings from openlp.core.utils.actions import ActionList from openlp.plugins.songusage.forms import SongUsageDetailForm, \ SongUsageDeleteForm @@ -110,9 +110,12 @@ class SongUsagePlugin(Plugin): self.settingsSection + u'/active', QtCore.QVariant(False)).toBool() self.SongUsageStatus.setChecked(self.SongUsageActive) - ActionList.add_action(self.SongUsageDelete, u'Song Usage') - ActionList.add_action(self.SongUsageReport, u'Song Usage') - ActionList.add_action(self.SongUsageStatus, u'Song Usage') + ActionList.add_action(self.SongUsageDelete, + translate('SongUsagePlugin', 'Song Usage')) + ActionList.add_action(self.SongUsageReport, + translate('SongUsagePlugin', 'Song Usage')) + ActionList.add_action(self.SongUsageStatus, + translate('SongUsagePlugin', 'Song Usage')) if self.manager is None: self.manager = Manager(u'songusage', init_schema) self.SongUsagedeleteform = SongUsageDeleteForm(self.manager, @@ -128,9 +131,12 @@ class SongUsagePlugin(Plugin): self.manager.finalise() Plugin.finalise(self) self.SongUsageMenu.menuAction().setVisible(False) - ActionList.remove_action(self.SongUsageDelete, u'Song Usage') - ActionList.remove_action(self.SongUsageReport, u'Song Usage') - ActionList.remove_action(self.SongUsageStatus, u'Song Usage') + ActionList.remove_action(self.SongUsageDelete, + translate('SongUsagePlugin', 'Song Usage')) + ActionList.remove_action(self.SongUsageReport, + translate('SongUsagePlugin', 'Song Usage')) + ActionList.remove_action(self.SongUsageStatus, + translate('SongUsagePlugin', 'Song Usage')) #stop any events being processed self.SongUsageActive = False From 0a5b3b2c2d460f06eacd6bb3debbc17fc3b4f5fc Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 3 Apr 2011 15:24:51 +0200 Subject: [PATCH 024/148] --- openlp/core/lib/ui.py | 1 - openlp/core/ui/shortcutlistdialog.py | 17 +++++-- openlp/core/ui/shortcutlistform.py | 70 ++++++++++++++++++---------- 3 files changed, 59 insertions(+), 29 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 15309edc9..029bb34df 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -295,7 +295,6 @@ def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, if checked is not None: action.setCheckable(True) action.setChecked(checked) - action.setCheckable(True) action.setShortcuts(shortcuts) action.setShortcutContext(QtCore.Qt.WindowShortcut) if category is not None: diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index a4bcc359e..1004014d6 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -34,6 +34,9 @@ class Ui_ShortcutListDialog(object): shortcutListDialog.setObjectName(u'shortcutListDialog') self.dialogLayout = QtGui.QVBoxLayout(shortcutListDialog) self.dialogLayout.setObjectName(u'dialogLayout') + self.descriptionLabel = QtGui.QLabel(shortcutListDialog); + self.descriptionLabel.setObjectName(u'descriptionLabel') + self.dialogLayout.addWidget(self.descriptionLabel) self.treeWidget = QtGui.QTreeWidget(shortcutListDialog) self.treeWidget.setAlternatingRowColors(True) self.treeWidget.setObjectName(u'treeWidget') @@ -57,8 +60,8 @@ class Ui_ShortcutListDialog(object): self.customLayout.addStretch() self.dialogLayout.addLayout(self.customLayout) self.buttonBox = QtGui.QDialogButtonBox(shortcutListDialog) - self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok | - QtGui.QDialogButtonBox.RestoreDefaults) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | + QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.RestoreDefaults) self.buttonBox.setObjectName(u'buttonBox') self.dialogLayout.addWidget(self.buttonBox) self.retranslateUi(shortcutListDialog) @@ -71,9 +74,15 @@ class Ui_ShortcutListDialog(object): def retranslateUi(self, shortcutListDialog): shortcutListDialog.setWindowTitle( translate('OpenLP.ShortcutListDialog', 'Customize Shortcuts')) + self.descriptionLabel.setText(translate('OpenLP.ShortcutListDialog', + 'Select an action and click the button below to start capturing ' + 'a new shortcut.')) self.treeWidget.setHeaderLabels([ translate('OpenLP.ShortcutListDialog', 'Action'), translate('OpenLP.ShortcutListDialog', 'Shortcut'), translate('OpenLP.ShortcutListDialog', 'Alternate')]) - self.shortcutButton.setText( - translate('OpenLP.ShortcutListDialog', 'None')) + self.shortcutButton.setToolTip( + translate('OpenLP.ShortcutListDialog', 'Capture shortcut.')) + self.clearShortcutButton.setToolTip( + translate('OpenLP.ShortcutListDialog', + 'Restore the default shortcut(s) of this action.')) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 84aea006a..58b42a351 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -46,6 +46,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.column = -1 + self.changedActions = {} self.shortcutButton.setText(u'') self.shortcutButton.setEnabled(False) QtCore.QObject.connect(self.shortcutButton, @@ -63,7 +64,11 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.onRestoreDefaultsClicked) def keyPressEvent(self, event): - event.ignore() + if self.shortcutButton.isChecked(): + event.ignore() + elif event.key() == QtCore.Qt.Key_Escape: + event.accept() + self.close() def keyReleaseEvent(self, event): Qt = QtCore.Qt @@ -87,7 +92,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): shortcut_valid = True for category in ActionList.categories: for action in category.actions: - shortcuts = action.shortcuts() + shortcuts = self._actionShortcuts(action) if key_sequence not in shortcuts: continue if action is changing_action: @@ -116,6 +121,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.shortcutButton.setChecked(False) def exec_(self): + self.changedActions = {} self.reloadShortcutList() self.shortcutButton.setChecked(False) self.shortcutButton.setEnabled(False) @@ -152,15 +158,16 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action = item.data(0, QtCore.Qt.UserRole).toPyObject() if action is None: continue - if len(action.shortcuts()) == 0: + shortcuts = self._actionShortcuts(action) + if len(shortcuts) == 0: item.setText(1, u'') item.setText(2, u'') - elif len(action.shortcuts()) == 1: - item.setText(1, action.shortcuts()[0].toString()) + elif len(shortcuts) == 1: + item.setText(1, shortcuts[0].toString()) item.setText(2, u'') else: - item.setText(1, action.shortcuts()[0].toString()) - item.setText(2, action.shortcuts()[1].toString()) + item.setText(1, shortcuts[0].toString()) + item.setText(2, shortcuts[1].toString()) def onShortcutButtonClicked(self, toggled): """ @@ -174,20 +181,21 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action = item.data(0, QtCore.Qt.UserRole).toPyObject() if action is None: return - shortcuts = [] + shortcuts = self._actionShortcuts(action) + new_shortcuts = [] # We are changing the primary shortcut. - if self.column == 1: - shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) - if len(action.shortcuts()) == 2: - shortcuts.append(action.shortcuts()[1]) + if self.column in [0, 1]: + new_shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) + if len(shortcuts) == 2: + new_shortcuts.append(shortcuts[1]) # We are changing the secondary shortcut. elif self.column == 2: - if len(action.shortcuts()) != 0: - shortcuts.append(action.shortcuts()[0]) - shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) + if len(shortcuts) != 0: + new_shortcuts.append(shortcuts[0]) + new_shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) else: return - action.setShortcuts(shortcuts) + self.changedActions[action] = new_shortcuts self.refreshShortcutList() def onItemDoubleClicked(self, item, column): @@ -209,15 +217,17 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ self.column = column action = item.data(0, QtCore.Qt.UserRole).toPyObject() - self.shortcutButton.setEnabled(True) text = u'' - if action is None or column not in [1, 2]: + if action is None:# or column not in [1, 2]: self.shortcutButton.setChecked(False) self.shortcutButton.setEnabled(False) - elif column == 1 and len(action.shortcuts()) != 0: - text = action.shortcuts()[0].toString() - elif len(action.shortcuts()) == 2 and len(action.shortcuts()) != 0: - text = action.shortcuts()[1].toString() + else: + self.shortcutButton.setEnabled(True) + shortcuts = self._actionShortcuts(action) + if column != 2 and len(shortcuts) != 0: + text = shortcuts[0].toString() + elif len(shortcuts) == 2: + text = shortcuts[1].toString() self.shortcutButton.setText(text) def onClearShortcutButtonClicked(self, toggled): @@ -231,7 +241,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action = item.data(0, QtCore.Qt.UserRole).toPyObject() if action is None: return - action.setShortcuts(action.defaultShortcuts) + self.changedActions[action] = action.defaultShortcuts self.refreshShortcutList() self.onItemPressed(item, self.column) @@ -252,7 +262,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.shortcutButton.setText(u'') for category in ActionList.categories: for action in category.actions: - action.setShortcuts(action.defaultShortcuts) + self.changedActions[action] = action.defaultShortcuts self.refreshShortcutList() def save(self): @@ -264,6 +274,18 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): settings.beginGroup(u'shortcuts') for category in ActionList.categories: for action in category.actions: + if self.changedActions .has_key(action): + action.setShortcuts(self.changedActions[action]) settings.setValue( action.objectName(), QtCore.QVariant(action.shortcuts())) settings.endGroup() + + def _actionShortcuts(self, action): + """ + This returns the shortcuts for the given ``action``, which also includes + those shortcuts which are not yet assigned to an action (as changes are + applied when closing the dialog). + """ + if self.changedActions.has_key(action): + return self.changedActions[action] + return action.shortcuts() From 65f134ab1b6ce8993359b2346a8fe1d5c7d46c06 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 3 Apr 2011 15:36:59 +0200 Subject: [PATCH 025/148] removed fix (I'll deal with this in another branch) --- openlp/core/ui/slidecontroller.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index af94eb425..66c26da3b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1108,11 +1108,11 @@ class SlideController(QtGui.QWidget): screen hide attributes """ blank = None - if self.blankScreen.isChecked(): + if self.blankScreen.isChecked: blank = self.blankScreen - if self.themeScreen.isChecked(): + if self.themeScreen.isChecked: blank = self.themeScreen - if self.desktopScreen.isChecked(): + if self.desktopScreen.isChecked: blank = self.desktopScreen if blank: blank.setChecked(False) From dfc2eed1f4206fd57529351574188445c85c3317 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 3 Apr 2011 16:20:55 +0200 Subject: [PATCH 026/148] adapted latest merge --- openlp/core/lib/__init__.py | 4 +++- openlp/core/ui/servicemanager.py | 4 ++-- openlp/core/ui/shortcutlistform.py | 8 +++++++- openlp/core/utils/actions.py | 30 ++++++++++++++++++++++++++---- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index e62cb3e44..0f0fcca5e 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -186,8 +186,9 @@ def context_menu_action(base, icon, text, slot, shortcuts=None): if icon: action.setIcon(build_icon(icon)) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), slot) - if shortcuts: + if shortcuts is not None: action.setShortcuts(shortcuts) + ActionList.add_action(action) return action def context_menu(base, icon, text): @@ -343,3 +344,4 @@ from dockwidget import OpenLPDockWidget from renderer import Renderer from rendermanager import RenderManager from mediamanageritem import MediaManagerItem +from openlp.core.utils.actions import ActionList diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 3ea3f1a6b..fc20d0f2d 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -202,7 +202,7 @@ class ServiceManager(QtGui.QWidget): 'Moves the selection down the window.'), self.onMoveSelectionDown, shortcuts=[QtCore.Qt.Key_Down]) self.serviceManagerList.down.setObjectName(u'down') - ActionList.add_action(self.serviceManagerList.down, UiStrings.Service) + ActionList.add_action(self.serviceManagerList.down) self.serviceManagerList.down.setVisible(False) self.serviceManagerList.up = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move up'), @@ -211,7 +211,7 @@ class ServiceManager(QtGui.QWidget): 'Moves the selection up the window.'), self.onMoveSelectionUp, shortcuts=[QtCore.Qt.Key_Up]) self.serviceManagerList.up.setObjectName(u'up') - ActionList.add_action(self.serviceManagerList.up, UiStrings.Service) + ActionList.add_action(self.serviceManagerList.up) self.serviceManagerList.up.setVisible(False) self.orderToolbar.addSeparator() self.serviceManagerList.delete = self.orderToolbar.addToolbarButton( diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 58b42a351..5251ac314 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -134,6 +134,9 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ self.treeWidget.clear() for category in ActionList.categories: + # Check if the category is for internal use only. + if category.name is None: + continue item = QtGui.QTreeWidgetItem([category.name]) for action in category.actions: actionText = REMOVE_AMPERSAND.sub('', unicode(action.text())) @@ -218,7 +221,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.column = column action = item.data(0, QtCore.Qt.UserRole).toPyObject() text = u'' - if action is None:# or column not in [1, 2]: + if action is None: self.shortcutButton.setChecked(False) self.shortcutButton.setEnabled(False) else: @@ -273,6 +276,9 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): settings = QtCore.QSettings() settings.beginGroup(u'shortcuts') for category in ActionList.categories: + # Check if the category is for internal use only. + if category.name is None: + continue for action in category.actions: if self.changedActions .has_key(action): action.setShortcuts(self.changedActions[action]) diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 04cb1f091..efac7b1bd 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -189,8 +189,26 @@ class ActionList(object): categories = CategoryList() @staticmethod - def add_action(action, category, weight=None): - category = unicode(category) + def add_action(action, category=None, weight=None): + """ + Add an action to the list of actions. + + ``action`` + The action to add (QAction). + + ``category`` + The category this action belongs to. The category can be a QString + or python unicode string. **Note**, if the category is ``None``, the + category and its actions are being hidden in the shortcut dialog. + However, if they are added, it is possible to avoid assigning + shortcuts twice, which is important. + + ``weight`` + The weight specifies how important a category is. However, this only + has an impact on the order the categories are displayed. + """ + if category is not None: + category = unicode(category) if category not in ActionList.categories: ActionList.categories.append(category) action.defaultShortcuts = action.shortcuts() @@ -198,6 +216,9 @@ class ActionList(object): ActionList.categories[category].actions.append(action) else: ActionList.categories[category].actions.add(action, weight) + if category is None: + # Stop here, as this action is not configurable. + return # Load the shortcut from the config. settings = QtCore.QSettings() settings.beginGroup(u'shortcuts') @@ -208,8 +229,9 @@ class ActionList(object): settings.endGroup() @staticmethod - def remove_action(action, category): - category = unicode(category) + def remove_action(action, category=None): + if category is not None: + category = unicode(category) if category not in ActionList.categories: return ActionList.categories[category].actions.remove(action) From 84605fb43054fadcd4c9690147bf8b62f9f8d9bd Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 4 Apr 2011 16:38:17 +0200 Subject: [PATCH 027/148] fixed wrong context of shortcuts; moved functions --- openlp/core/lib/__init__.py | 53 --------------------- openlp/core/lib/mediamanageritem.py | 23 +++++---- openlp/core/lib/ui.py | 72 +++++++++++++++++++++++++++-- openlp/core/ui/servicemanager.py | 8 ++-- 4 files changed, 85 insertions(+), 71 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 0f0fcca5e..491f3e652 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -166,59 +166,6 @@ def build_icon(icon): QtGui.QIcon.Normal, QtGui.QIcon.Off) return button_icon -def context_menu_action(base, icon, text, slot, shortcuts=None): - """ - Utility method to help build context menus for plugins - - ``base`` - The parent menu to add this menu item to - - ``icon`` - An icon for this action - - ``text`` - The text to display for this action - - ``slot`` - The code to run when this action is triggered - """ - action = QtGui.QAction(text, base) - if icon: - action.setIcon(build_icon(icon)) - QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), slot) - if shortcuts is not None: - action.setShortcuts(shortcuts) - ActionList.add_action(action) - return action - -def context_menu(base, icon, text): - """ - Utility method to help build context menus for plugins - - ``base`` - The parent object to add this menu to - - ``icon`` - An icon for this menu - - ``text`` - The text to display for this menu - """ - action = QtGui.QMenu(text, base) - action.setIcon(build_icon(icon)) - return action - -def context_menu_separator(base): - """ - Add a separator to a context menu - - ``base`` - The menu object to add the separator to - """ - action = QtGui.QAction(u'', base) - action.setSeparator(True) - return action - def image_to_byte(image): """ Resize an image to fit on the current screen for the web and returns diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 63132b141..13277876d 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -31,10 +31,10 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import context_menu_action, context_menu_separator, \ - SettingsManager, OpenLPToolbar, ServiceItem, StringContent, build_icon, \ - translate, Receiver, ListWidgetWithDnD -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import SettingsManager, OpenLPToolbar, ServiceItem, \ + StringContent, build_icon, translate, Receiver, ListWidgetWithDnD +from openlp.core.lib.ui import UiStrings, context_menu_action, \ + context_menu_separator log = logging.getLogger(__name__) @@ -260,39 +260,42 @@ class MediaManagerItem(QtGui.QWidget): context_menu_action( self.listView, u':/general/general_edit.png', self.plugin.getString(StringContent.Edit)[u'title'], - self.onEditClick)) + self.onEditClick, context=QtCore.Qt.WidgetShortcut)) self.listView.addAction(context_menu_separator(self.listView)) if self.hasDeleteIcon: self.listView.addAction( context_menu_action( self.listView, u':/general/general_delete.png', self.plugin.getString(StringContent.Delete)[u'title'], - self.onDeleteClick, [QtCore.Qt.Key_Delete])) + self.onDeleteClick, [QtCore.Qt.Key_Delete], + context=QtCore.Qt.WidgetShortcut)) self.listView.addAction(context_menu_separator(self.listView)) self.listView.addAction( context_menu_action( self.listView, u':/general/general_preview.png', self.plugin.getString(StringContent.Preview)[u'title'], - self.onPreviewClick, [QtCore.Qt.Key_Enter])) + self.onPreviewClick, [QtCore.Qt.Key_Enter], + context=QtCore.Qt.WidgetShortcut)) self.listView.addAction( context_menu_action( self.listView, u':/general/general_live.png', self.plugin.getString(StringContent.Live)[u'title'], self.onLiveClick, [QtCore.Qt.ShiftModifier + \ QtCore.Qt.Key_Enter, QtCore.Qt.ShiftModifier + \ - QtCore.Qt.Key_Return])) + QtCore.Qt.Key_Return], context=QtCore.Qt.WidgetShortcut)) self.listView.addAction( context_menu_action( self.listView, u':/general/general_add.png', self.plugin.getString(StringContent.Service)[u'title'], - self.onAddClick, [QtCore.Qt.Key_Plus, QtCore.Qt.Key_Equal])) + self.onAddClick, [QtCore.Qt.Key_Plus, QtCore.Qt.Key_Equal], + context=QtCore.Qt.WidgetShortcut)) if self.addToServiceItem: self.listView.addAction( context_menu_action( self.listView, u':/general/general_add.png', translate('OpenLP.MediaManagerItem', '&Add to selected Service Item'), - self.onAddEditClick)) + self.onAddEditClick, context=QtCore.Qt.WidgetShortcut)) QtCore.QObject.connect(self.listView, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onClickPressed) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 029bb34df..35ea23497 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -284,7 +284,7 @@ def icon_action(parent, name, icon, checked=None, category=None): return action def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, - category=None): + category=None, context=QtCore.Qt.WindowShortcut): """ Return a shortcut enabled action. """ @@ -296,12 +296,76 @@ def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, action.setCheckable(True) action.setChecked(checked) action.setShortcuts(shortcuts) - action.setShortcutContext(QtCore.Qt.WindowShortcut) - if category is not None: - ActionList.add_action(action, category) + action.setShortcutContext(context) + ActionList.add_action(action, category) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), function) return action +def context_menu_action(base, icon, text, slot, shortcuts=None, category=None, + context=QtCore.Qt.WindowShortcut): + """ + Utility method to help build context menus for plugins + + ``base`` + The parent menu to add this menu item to + + ``icon`` + An icon for this action + + ``text`` + The text to display for this action + + ``slot`` + The code to run when this action is triggered + + ``shortcuts`` + The action's shortcuts. + + ``category`` + The category the shortcut should be listed in the shortcut dialog. If + left to None, then the action will be hidden in the shortcut dialog. + + ``context`` + The context the shortcut is valid. + """ + action = QtGui.QAction(text, base) + if icon: + action.setIcon(build_icon(icon)) + QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), slot) + if shortcuts is not None: + action.setShortcuts(shortcuts) + action.setShortcutContext(context) + ActionList.add_action(action) + return action + +def context_menu(base, icon, text): + """ + Utility method to help build context menus for plugins + + ``base`` + The parent object to add this menu to + + ``icon`` + An icon for this menu + + ``text`` + The text to display for this menu + """ + action = QtGui.QMenu(text, base) + action.setIcon(build_icon(icon)) + return action + +def context_menu_separator(base): + """ + Add a separator to a context menu + + ``base`` + The menu object to add the separator to + """ + action = QtGui.QAction(u'', base) + action.setSeparator(True) + return action + def add_widget_completer(cache, widget): """ Adds a text autocompleter to a widget. diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index fc20d0f2d..caecaca50 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -32,10 +32,10 @@ log = logging.getLogger(__name__) from PyQt4 import QtCore, QtGui -from openlp.core.lib import OpenLPToolbar, ServiceItem, context_menu_action, \ - Receiver, build_icon, ItemCapabilities, SettingsManager, translate +from openlp.core.lib import OpenLPToolbar, ServiceItem, Receiver, build_icon, \ + ItemCapabilities, SettingsManager, translate from openlp.core.lib.theme import ThemeLevel -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib.ui import UiStrings, critical_error_message_box, context_menu_action from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ @@ -1267,7 +1267,7 @@ class ServiceManager(QtGui.QWidget): for theme in theme_list: self.themeComboBox.addItem(theme) action = context_menu_action(self.serviceManagerList, None, theme, - self.onThemeChangeAction) + self.onThemeChangeAction, context=QtCore.Qt.WidgetShortcut) self.themeMenu.addAction(action) index = self.themeComboBox.findText(self.service_theme, QtCore.Qt.MatchExactly) From 4a6be382ff3689cd52da8c330536293055ec5be5 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 4 Apr 2011 18:15:38 +0200 Subject: [PATCH 028/148] fixed empty texts --- openlp/core/lib/searchedit.py | 3 ++- openlp/core/ui/mainwindow.py | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/openlp/core/lib/searchedit.py b/openlp/core/lib/searchedit.py index 41699256f..d32961ef9 100644 --- a/openlp/core/lib/searchedit.py +++ b/openlp/core/lib/searchedit.py @@ -133,7 +133,8 @@ class SearchEdit(QtGui.QLineEdit): menu = QtGui.QMenu(self) first = None for identifier, icon, title in items: - action = icon_action(menu, title, icon) + action = icon_action(menu, u'', icon) + action.setText(title) action.setData(QtCore.QVariant(identifier)) menu.addAction(action) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index bb6d105b9..ab712a57d 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -972,8 +972,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.FileMenu.addSeparator() for fileId, filename in enumerate(recentFilesToDisplay): log.debug('Recent file name: %s', filename) - action = base_action(self, u'&%d %s' % (fileId + 1, - QtCore.QFileInfo(filename).fileName())) + action = base_action(self, u'') + action.setText(u'&%d %s' % + (fileId + 1, QtCore.QFileInfo(filename).fileName())) action.setData(QtCore.QVariant(filename)) self.connect(action, QtCore.SIGNAL(u'triggered()'), self.ServiceManagerContents.onRecentServiceClicked) From 38c939362455d330663da881762f6b94198ea3bf Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 4 Apr 2011 19:33:42 +0200 Subject: [PATCH 029/148] expand categories --- openlp/core/ui/shortcutlistform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 5251ac314..a99b7c3bb 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -145,8 +145,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): actionItem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(action)) item.addChild(actionItem) - item.setExpanded(True) self.treeWidget.addTopLevelItem(item) + item.setExpanded(True) self.refreshShortcutList() def refreshShortcutList(self): From 3bfe9ec77c8e430018d2dcafa34b20ff1eb1e9aa Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 6 Apr 2011 21:14:02 +0200 Subject: [PATCH 030/148] --- openlp/core/ui/printservicedialog.py | 4 + openlp/core/ui/printserviceform.py | 107 ++++++++++++++++++--------- 2 files changed, 77 insertions(+), 34 deletions(-) diff --git a/openlp/core/ui/printservicedialog.py b/openlp/core/ui/printservicedialog.py index 97f4b4060..b669c83ec 100644 --- a/openlp/core/ui/printservicedialog.py +++ b/openlp/core/ui/printservicedialog.py @@ -132,6 +132,8 @@ class Ui_PrintServiceDialog(object): self.groupLayout = QtGui.QVBoxLayout() self.slideTextCheckBox = QtGui.QCheckBox() self.groupLayout.addWidget(self.slideTextCheckBox) + self.pageBreakAfterText = QtGui.QCheckBox() + self.groupLayout.addWidget(self.pageBreakAfterText) self.notesCheckBox = QtGui.QCheckBox() self.groupLayout.addWidget(self.notesCheckBox) self.metaDataCheckBox = QtGui.QCheckBox() @@ -149,6 +151,8 @@ class Ui_PrintServiceDialog(object): printServiceDialog.setWindowTitle(UiStrings.PrintServiceOrder) self.slideTextCheckBox.setText(translate('OpenLP.PrintServiceForm', 'Include slide text if available')) + self.pageBreakAfterText.setText(translate('OpenLP.PrintServiceForm', + 'break')) self.notesCheckBox.setText(translate('OpenLP.PrintServiceForm', 'Include service item notes')) self.metaDataCheckBox.setText(translate('OpenLP.PrintServiceForm', diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 4e0f018a4..03febc067 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -26,6 +26,7 @@ import datetime from PyQt4 import QtCore, QtGui +from lxml import html from openlp.core.lib import translate from openlp.core.lib.ui import UiStrings @@ -50,6 +51,10 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): settings.beginGroup(u'advanced') self.slideTextCheckBox.setChecked(settings.value( u'print slide text', QtCore.QVariant(False)).toBool()) + self.pageBreakAfterText.setChecked(settings.value( + u'enable page break', QtCore.QVariant(False)).toBool()) + if not self.slideTextCheckBox.isChecked(): + self.pageBreakAfterText.setDisabled(True) self.metaDataCheckBox.setChecked(settings.value( u'print file meta data', QtCore.QVariant(False)).toBool()) self.notesCheckBox.setChecked(settings.value( @@ -76,6 +81,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): QtCore.SIGNAL(u'triggered()'), self.copyText) QtCore.QObject.connect(self.htmlCopy, QtCore.SIGNAL(u'triggered()'), self.copyHtmlText) + QtCore.QObject.connect(self.slideTextCheckBox, + QtCore.SIGNAL(u'stateChanged(int)'), + self.onSlideTextCheckBoxChanged) self.updatePreviewText() def toggleOptions(self, checked): @@ -93,57 +101,80 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ Creates the html text and updates the html of *self.document*. """ - text = u'' - if self.titleLineEdit.text(): - text += u'

%s

' % unicode(self.titleLineEdit.text()) - for item in self.serviceManager.serviceItems: + html_data = html.fromstring( + u'%s' % unicode(self.titleLineEdit.text())) + html_data.append(html.Element(u'body')) + html_data.body.append(html.fromstring( + u'

%s

' % unicode(self.titleLineEdit.text()))) + for index, item in enumerate(self.serviceManager.serviceItems): item = item[u'service_item'] + div = html.Element(u'div') # Add the title of the service item. - text += u'

%s

' % (item.icon, - item.get_display_title()) - # Add slide text of the service item. + item_title = html.Element(u'h3') + icon = html.Element(u'img') + icon.set(u'src', item.icon) + item_title.append(icon) + item_title.append( + html.fromstring(u' %s' % item.get_display_title())) + div.append(item_title) if self.slideTextCheckBox.isChecked(): + # Add the text of the service item. if item.is_text(): - # Add the text of the service item. - verse = None + verse_def = None for slide in item.get_frames(): - if not verse: - text += u'

' + slide[u'html'] - verse = slide[u'verseTag'] - elif verse != slide[u'verseTag']: - text += u'<\p>

' + slide[u'html'] - verse = slide[u'verseTag'] + if not verse_def or verse_def != slide[u'verseTag']: + p = html.Element(u'p') + div.append(p) else: - text += u'
' + slide[u'html'] - text += u'

' + p.append(html.Element(u'br')) + p.append(html.fromstring( + u'%s' % slide[u'html'])) + verse_def = slide[u'verseTag'] + # Break the page before the div element. + if index != 0 and self.pageBreakAfterText.isChecked(): + div.set(u'style', u'page-break-before:always') + # Add the image names of the service item. elif item.is_image(): - # Add the image names of the service item. - text += u'
    ' + ol = html.Element(u'ol') for slide in range(len(item.get_frames())): - text += u'
  1. %s

  2. ' % \ - item.get_frame_title(slide) - text += u'
' + li = html.Element(u'li') + li.text = item.get_frame_title(slide) + ol.append(li) + div.append(ol) + # add footer if item.foot_text: - # add footer - text += u'

%s

' % item.foot_text + div.append(html.fromstring(item.foot_text)) # Add service items' notes. if self.notesCheckBox.isChecked(): if item.notes: - text += u'

%s

%s' % (translate( - 'OpenLP.ServiceManager', 'Notes:'), - item.notes.replace(u'\n', u'
')) + p = html.Element(u'p') + strong = html.Element(u'strong') + strong.text = unicode( + translate('OpenLP.ServiceManager', 'Notes:')) + p.append(strong) + p.append(html.fromstring(u'%s' % + item.notes.replace(u'\n', u'
'))) + div.append(p) # Add play length of media files. if item.is_media() and self.metaDataCheckBox.isChecked(): tme = item.media_length if item.end_time > 0: tme = item.end_time - item.start_time - text += u'

%s %s

' % (translate( - 'OpenLP.ServiceManager', u'Playing time:'), - unicode(datetime.timedelta(seconds=tme))) - if self.footerTextEdit.toPlainText(): - text += u'

%s

%s' % (translate('OpenLP.ServiceManager', - u'Custom Service Notes:'), self.footerTextEdit.toPlainText()) - self.document.setHtml(text) + p = html.fromstring(u'

%s

' % + translate('OpenLP.ServiceManager', 'Playing time:')) + p.append(html.fromstring(u'%s' % + unicode(datetime.timedelta(seconds=tme)))) + div.append(p) + html_data.body.append(div) + # Add the custom service notes: + if self.footerTextEdit.toPlainText(): + html_data.append(html.fromstring(u'

%

' % + translate('OpenLP.ServiceManager', u'Custom Service Notes:'))) + html_data.append(html.fromstring( + u'%s' % self.footerTextEdit.toPlainText())) + for div in html_data.body: + print len(div), html.tostring(div), u'\n' + self.document.setHtml(html.tostring(html_data)) self.previewWidget.updatePreview() def paintRequested(self, printer): @@ -232,6 +263,12 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): else: self.copyTextButton.setText(UiStrings.CopyToText) + def onSlideTextCheckBoxChanged(self, state): + """ + The ``slideTextCheckBox`` checkbox was either checked or unchecked. + """ + self.pageBreakAfterText.setDisabled(state == QtCore.Qt.Unchecked) + def saveOptions(self): """ Save the settings and close the dialog. @@ -241,6 +278,8 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): settings.beginGroup(u'advanced') settings.setValue(u'print slide text', QtCore.QVariant(self.slideTextCheckBox.isChecked())) + settings.setValue(u'enable page break', + QtCore.QVariant(self.pageBreakAfterText.isChecked())) settings.setValue(u'print file meta data', QtCore.QVariant(self.metaDataCheckBox.isChecked())) settings.setValue(u'print notes', From 9b04385f347bed26d50d61586679b10cf5185bf7 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Wed, 6 Apr 2011 23:54:47 +0100 Subject: [PATCH 031/148] Blanking and switching between song and ppt and back --- openlp/core/ui/slidecontroller.py | 39 ++++++++----------- openlp/plugins/bibles/lib/mediaitem.py | 1 + .../presentations/lib/messagelistener.py | 18 ++++++--- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 232653326..eec5d3a19 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -569,19 +569,18 @@ class SlideController(QtGui.QWidget): self.onStopLoop() # If old item was a command tell it to stop if self.serviceItem: - if self.serviceItem.is_command(): + oldItem = self.serviceItem + self.serviceItem = None + if oldItem.is_command(): Receiver.send_message(u'%s_stop' % - self.serviceItem.name.lower(), [serviceItem, self.isLive]) - if self.serviceItem.is_media(): + oldItem.name.lower(), [oldItem, self.isLive]) + if oldItem.is_media(): self.onMediaClose() - if self.isLive: - if serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay): - self._forceUnblank() - blanked = self.blankScreen.isChecked() - else: - blanked = False + if self.isLive and oldItem.is_capable( + ItemCapabilities.ProvidesOwnDisplay): + self._resetBlank() Receiver.send_message(u'%s_start' % serviceItem.name.lower(), - [serviceItem, self.isLive, blanked, slideno]) + [serviceItem, self.isLive, self.display.hideMode, slideno]) self.slideList = {} width = self.parent.controlSplitter.sizes()[self.split] self.serviceItem = serviceItem @@ -1095,20 +1094,14 @@ class SlideController(QtGui.QWidget): self.slidePreview.clear() self.slidePreview.show() - def _forceUnblank(self): + def _resetBlank(self): """ Used by command items which provide their own displays to reset the screen hide attributes """ - blank = None - if self.blankScreen.isChecked: - blank = self.blankScreen - if self.themeScreen.isChecked: - blank = self.themeScreen - if self.desktopScreen.isChecked: - blank = self.desktopScreen - if blank: - blank.setChecked(False) - self.hideMenu.setDefaultAction(blank) - QtCore.QSettings().remove( - self.parent.generalSettingsSection + u'/screen blank') + if self.blankScreen.isChecked(): + self.onBlankDisplay(True) + elif self.themeScreen.isChecked(): + self.onThemeDisplay(True) + elif self.desktopScreen.isChecked(): + self.onHideDisplay(True) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index a9694fd0c..9c45b85f8 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -58,6 +58,7 @@ class BibleMediaItem(MediaManagerItem): MediaManagerItem.__init__(self, parent, plugin, icon) # Place to store the search results for both bibles. self.settings = self.parent.settings_tab + self.quickPreviewAllowed = True self.search_results = {} self.second_search_results = {} QtCore.QObject.connect(Receiver.get_receiver(), diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index b86219f42..728a154f8 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -49,7 +49,7 @@ class Controller(object): self.doc = None log.info(u'%s controller loaded' % live) - def add_handler(self, controller, file, is_blank): + def add_handler(self, controller, file, hide_mode): """ Add a handler, which is an instance of a presentation and slidecontroller combination. If the slidecontroller has a display @@ -66,9 +66,17 @@ class Controller(object): return if self.is_live: self.doc.start_presentation() - if is_blank: + if hide_mode == HideMode.Screen: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + self.stop() + elif hide_mode == HideMode.Theme: + Receiver.send_message(u'maindisplay_hide', HideMode.Theme) self.blank() - Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + elif hide_mode == HideMode.Blank: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + self.blank() + else: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) self.doc.slidenumber = 0 def activate(self): @@ -261,7 +269,7 @@ class MessageListener(object): is_live = message[1] item = message[0] log.debug(u'Startup called with message %s' % message) - is_blank = message[2] + hide_mode = message[2] file = os.path.join(item.get_frame_path(), item.get_frame_title()) self.handler = item.title @@ -273,7 +281,7 @@ class MessageListener(object): controller = self.live_handler else: controller = self.preview_handler - controller.add_handler(self.controllers[self.handler], file, is_blank) + controller.add_handler(self.controllers[self.handler], file, hide_mode) def slide(self, message): """ From 9b84319c249cf09b66e90d7f28c7eb38c5afe134 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 7 Apr 2011 16:26:29 +0200 Subject: [PATCH 032/148] added new dialog from superfly + few own changes --- openlp/core/ui/shortcutlistdialog.py | 109 ++++++++++++++++---------- openlp/core/ui/shortcutlistform.py | 62 ++++++++------- resources/forms/shortcutlistdialog.ui | 80 +++++++++++++------ 3 files changed, 158 insertions(+), 93 deletions(-) diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 83f897bd8..6531a1a19 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -30,44 +30,71 @@ from openlp.core.lib import translate, build_icon class Ui_ShortcutListDialog(object): def setupUi(self, shortcutListDialog): - shortcutListDialog.resize(440, 450) - shortcutListDialog.setObjectName(u'shortcutListDialog') - self.dialogLayout = QtGui.QVBoxLayout(shortcutListDialog) - self.dialogLayout.setObjectName(u'dialogLayout') - self.descriptionLabel = QtGui.QLabel(shortcutListDialog) - self.descriptionLabel.setObjectName(u'descriptionLabel') - self.descriptionLabel.setWordWrap(True) - self.dialogLayout.addWidget(self.descriptionLabel) + shortcutListDialog.setObjectName("shortcutListDialog") + shortcutListDialog.resize(500, 438) + self.shortcutListLayout = QtGui.QVBoxLayout(shortcutListDialog) + self.shortcutListLayout.setSpacing(8) + self.shortcutListLayout.setMargin(8) + self.shortcutListLayout.setObjectName("shortcutListLayout") self.treeWidget = QtGui.QTreeWidget(shortcutListDialog) self.treeWidget.setAlternatingRowColors(True) - self.treeWidget.setObjectName(u'treeWidget') + self.treeWidget.setObjectName("treeWidget") self.treeWidget.setColumnCount(3) - self.dialogLayout.addWidget(self.treeWidget) - self.customLayout = QtGui.QHBoxLayout() - self.customLayout.setObjectName(u'customLayout') - self.shortcutButtonLabel = QtGui.QLabel(shortcutListDialog) - self.shortcutButtonLabel.setObjectName(u'descriptionLabel') - self.customLayout.addWidget(self.shortcutButtonLabel) - self.shortcutButton = QtGui.QPushButton(shortcutListDialog) - self.shortcutButton.setIcon( - build_icon(u':/system/system_configure_shortcuts.png')) - self.shortcutButton.setCheckable(True) - self.shortcutButton.setObjectName(u'shortcutButton') - self.shortcutButton.setFixedSize(150, 30) - self.customLayout.addWidget(self.shortcutButton) - self.clearShortcutButton = QtGui.QToolButton(shortcutListDialog) - self.clearShortcutButton.setIcon( - build_icon(u':/system/clear_shortcut.png')) - self.clearShortcutButton.setAutoRaise(True) - self.clearShortcutButton.setObjectName(u'clearShortcutButton') - self.customLayout.addWidget(self.clearShortcutButton) - self.customLayout.addStretch() - self.dialogLayout.addLayout(self.customLayout) + self.shortcutListLayout.addWidget(self.treeWidget) + self.detailsLayout = QtGui.QGridLayout() + self.detailsLayout.setSpacing(8) + self.detailsLayout.setContentsMargins(-1, 0, -1, -1) + self.detailsLayout.setObjectName("detailsLayout") + self.defaultRadioButton = QtGui.QRadioButton(shortcutListDialog) + self.defaultRadioButton.setChecked(True) + self.defaultRadioButton.setObjectName("defaultRadioButton") + self.detailsLayout.addWidget(self.defaultRadioButton, 0, 0, 1, 1) + self.customRadioButton = QtGui.QRadioButton(shortcutListDialog) + self.customRadioButton.setObjectName("customRadioButton") + self.detailsLayout.addWidget(self.customRadioButton, 1, 0, 1, 1) + self.primaryLayout = QtGui.QHBoxLayout() + self.primaryLayout.setSpacing(8) + self.primaryLayout.setObjectName("primaryLayout") + self.primaryPushButton = QtGui.QPushButton(shortcutListDialog) + self.primaryPushButton.setMinimumSize(QtCore.QSize(84, 0)) + self.primaryPushButton.setIcon(build_icon(u':/system/system_configure_shortcuts.png')) + self.primaryPushButton.setCheckable(True) + self.primaryPushButton.setChecked(False) + self.primaryPushButton.setObjectName("primaryPushButton") + self.primaryLayout.addWidget(self.primaryPushButton) + self.clearPrimaryButton = QtGui.QToolButton(shortcutListDialog) + self.clearPrimaryButton.setMinimumSize(QtCore.QSize(0, 16)) + self.clearPrimaryButton.setText("") + self.clearPrimaryButton.setIcon(build_icon(u':/system/clear_shortcut.png')) + self.clearPrimaryButton.setObjectName("clearPrimaryButton") + self.primaryLayout.addWidget(self.clearPrimaryButton) + self.detailsLayout.addLayout(self.primaryLayout, 1, 1, 1, 1) + self.alternateLayout = QtGui.QHBoxLayout() + self.alternateLayout.setSpacing(8) + self.alternateLayout.setObjectName("alternateLayout") + self.alternatePushButton = QtGui.QPushButton(shortcutListDialog) + self.alternatePushButton.setIcon(build_icon(u':/system/system_configure_shortcuts.png')) + self.alternatePushButton.setObjectName("alternatePushButton") + self.alternateLayout.addWidget(self.alternatePushButton) + self.clearAlternateButton = QtGui.QToolButton(shortcutListDialog) + self.clearAlternateButton.setText("") + self.clearAlternateButton.setIcon(build_icon(u':/system/clear_shortcut.png')) + self.clearAlternateButton.setObjectName("clearAlternateButton") + self.alternateLayout.addWidget(self.clearAlternateButton) + self.detailsLayout.addLayout(self.alternateLayout, 1, 2, 1, 1) + self.primaryLabel = QtGui.QLabel(shortcutListDialog) + self.primaryLabel.setObjectName("primaryLabel") + self.detailsLayout.addWidget(self.primaryLabel, 0, 1, 1, 1) + self.alternateLabel = QtGui.QLabel(shortcutListDialog) + self.alternateLabel.setObjectName("alternateLabel") + self.detailsLayout.addWidget(self.alternateLabel, 0, 2, 1, 1) + self.shortcutListLayout.addLayout(self.detailsLayout) self.buttonBox = QtGui.QDialogButtonBox(shortcutListDialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | - QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.RestoreDefaults) - self.buttonBox.setObjectName(u'buttonBox') - self.dialogLayout.addWidget(self.buttonBox) + QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Reset) + self.buttonBox.setObjectName("buttonBox") + self.shortcutListLayout.addWidget(self.buttonBox) self.retranslateUi(shortcutListDialog) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), shortcutListDialog.accept) @@ -78,15 +105,17 @@ class Ui_ShortcutListDialog(object): def retranslateUi(self, shortcutListDialog): shortcutListDialog.setWindowTitle( translate('OpenLP.ShortcutListDialog', 'Customize Shortcuts')) - self.descriptionLabel.setText(translate('OpenLP.ShortcutListDialog', - 'Select an action and click the button below to start capturing ' - 'a new shortcut.')) + #self.descriptionLabel.setText(translate('OpenLP.ShortcutListDialog', + #'Select an action and click the button below to start capturing ' + #'a new shortcut.')) self.treeWidget.setHeaderLabels([ translate('OpenLP.ShortcutListDialog', 'Action'), translate('OpenLP.ShortcutListDialog', 'Shortcut'), translate('OpenLP.ShortcutListDialog', 'Alternate')]) - self.shortcutButtonLabel.setText( + self.primaryPushButton.setText( translate('OpenLP.ShortcutListDialog', 'Capture shortcut:')) - self.clearShortcutButton.setToolTip( - translate('OpenLP.ShortcutListDialog', - 'Restore the default shortcut(s) of this action.')) + self.alternatePushButton.setText( + translate('OpenLP.ShortcutListDialog', 'Capture shortcut:')) + #self.clearShortcutButton.setToolTip( + #translate('OpenLP.ShortcutListDialog', + #'Restore the default shortcut(s) of this action.')) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index a99b7c3bb..00e216c2a 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -47,24 +47,28 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.setupUi(self) self.column = -1 self.changedActions = {} - self.shortcutButton.setText(u'') - self.shortcutButton.setEnabled(False) - QtCore.QObject.connect(self.shortcutButton, - QtCore.SIGNAL(u'toggled(bool)'), self.onShortcutButtonClicked) + self.primaryPushButton.setText(u'') + self.alternatePushButton.setText(u'') + self.primaryPushButton.setEnabled(False) + self.alternatePushButton.setEnabled(False) + QtCore.QObject.connect(self.primaryPushButton, + QtCore.SIGNAL(u'toggled(bool)'), self.onPrimaryPushButtonClicked) QtCore.QObject.connect(self.treeWidget, QtCore.SIGNAL(u'itemPressed(QTreeWidgetItem*, int)'), self.onItemPressed) QtCore.QObject.connect(self.treeWidget, QtCore.SIGNAL(u'itemDoubleClicked(QTreeWidgetItem*, int)'), self.onItemDoubleClicked) - QtCore.QObject.connect(self.clearShortcutButton, - QtCore.SIGNAL(u'clicked(bool)'), self.onClearShortcutButtonClicked) + QtCore.QObject.connect(self.clearPrimaryButton, + QtCore.SIGNAL(u'clicked(bool)'), self.onClearPrimaryButtonClicked) +# QtCore.QObject.connect(self.clearShortcutButton, +# QtCore.SIGNAL(u'clicked(bool)'), self.onClearPrimaryButtonClicked) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'clicked(QAbstractButton*)'), self.onRestoreDefaultsClicked) def keyPressEvent(self, event): - if self.shortcutButton.isChecked(): + if self.primaryPushButton.isChecked(): event.ignore() elif event.key() == QtCore.Qt.Key_Escape: event.accept() @@ -72,7 +76,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def keyReleaseEvent(self, event): Qt = QtCore.Qt - if not self.shortcutButton.isChecked(): + if not self.primaryPushButton.isChecked(): return key = event.key() if key == Qt.Key_Shift or key == Qt.Key_Control or \ @@ -117,15 +121,15 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtGui.QMessageBox.Ok ) else: - self.shortcutButton.setText(key_sequence.toString()) - self.shortcutButton.setChecked(False) + self.primaryPushButton.setText(key_sequence.toString()) + self.primaryPushButton.setChecked(False) def exec_(self): self.changedActions = {} self.reloadShortcutList() - self.shortcutButton.setChecked(False) - self.shortcutButton.setEnabled(False) - self.shortcutButton.setText(u'') + self.primaryPushButton.setChecked(False) + self.primaryPushButton.setEnabled(False) + self.primaryPushButton.setText(u'') return QtGui.QDialog.exec_(self) def reloadShortcutList(self): @@ -172,7 +176,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): item.setText(1, shortcuts[0].toString()) item.setText(2, shortcuts[1].toString()) - def onShortcutButtonClicked(self, toggled): + def onPrimaryPushButtonClicked(self, toggled): """ Save the new shortcut to the action if the button is unchanged. """ @@ -188,14 +192,16 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): new_shortcuts = [] # We are changing the primary shortcut. if self.column in [0, 1]: - new_shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) + new_shortcuts.append( + QtGui.QKeySequence(self.primaryPushButton.text())) if len(shortcuts) == 2: new_shortcuts.append(shortcuts[1]) # We are changing the secondary shortcut. elif self.column == 2: if len(shortcuts) != 0: new_shortcuts.append(shortcuts[0]) - new_shortcuts.append(QtGui.QKeySequence(self.shortcutButton.text())) + new_shortcuts.append( + QtGui.QKeySequence(self.primaryPushButton.text())) else: return self.changedActions[action] = new_shortcuts @@ -203,14 +209,14 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def onItemDoubleClicked(self, item, column): """ - A item has been double clicked. ``The shortcutButton`` will be checked - and the item's shortcut will be displayed. + A item has been double clicked. ``The primaryPushButton`` will be + checked and the item's shortcut will be displayed. """ action = item.data(0, QtCore.Qt.UserRole).toPyObject() if action is None: return - self.shortcutButton.setChecked(True) - self.shortcutButton.setFocus(QtCore.Qt.OtherFocusReason) + self.primaryPushButton.setChecked(True) + self.primaryPushButton.setFocus(QtCore.Qt.OtherFocusReason) self.onItemPressed(item, column) def onItemPressed(self, item, column): @@ -222,23 +228,23 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action = item.data(0, QtCore.Qt.UserRole).toPyObject() text = u'' if action is None: - self.shortcutButton.setChecked(False) - self.shortcutButton.setEnabled(False) + self.primaryPushButton.setChecked(False) + self.primaryPushButton.setEnabled(False) else: - self.shortcutButton.setEnabled(True) + self.primaryPushButton.setEnabled(True) shortcuts = self._actionShortcuts(action) if column != 2 and len(shortcuts) != 0: text = shortcuts[0].toString() elif len(shortcuts) == 2: text = shortcuts[1].toString() - self.shortcutButton.setText(text) + self.primaryPushButton.setText(text) - def onClearShortcutButtonClicked(self, toggled): + def onClearPrimaryButtonClicked(self, toggled): """ Restore the defaults of this """ item = self.treeWidget.currentItem() - self.shortcutButton.setChecked(False) + self.primaryPushButton.setChecked(False) if item is None: return action = item.data(0, QtCore.Qt.UserRole).toPyObject() @@ -261,8 +267,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) == QtGui.QMessageBox.No: return - self.shortcutButton.setChecked(False) - self.shortcutButton.setText(u'') + self.primaryPushButton.setChecked(False) + self.primaryPushButton.setText(u'') for category in ActionList.categories: for action in category.actions: self.changedActions[action] = action.defaultShortcuts diff --git a/resources/forms/shortcutlistdialog.ui b/resources/forms/shortcutlistdialog.ui index 519925560..9a5c599d1 100644 --- a/resources/forms/shortcutlistdialog.ui +++ b/resources/forms/shortcutlistdialog.ui @@ -41,35 +41,35 @@ - + + + 0 + 8 - - 0 - - + - Default: None + Default: true - - + + + + Custom: + + + + + 8 - - - - Custom: - - - @@ -83,7 +83,7 @@ - :/system/system_settings.png:/system/system_settings.png + :/system/system_configure_shortcuts.png:/system/system_configure_shortcuts.png true @@ -110,21 +110,51 @@ + + + + + + 8 + - - - Qt::Horizontal + + + None - - - 40 - 20 - + + + :/system/system_configure_shortcuts.png:/system/system_configure_shortcuts.png - + + + + + + + + + + :/system/clear_shortcut.png:/system/clear_shortcut.png + + + + + + Ctrl+V + + + + + + + Shift+Ins + + + From dab699371cea47a8cbc2f6fb4ec9c926e4ac195c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 7 Apr 2011 17:37:07 +0200 Subject: [PATCH 033/148] integrated second button(s), clean ups --- openlp/core/ui/shortcutlistdialog.py | 74 +++++------ openlp/core/ui/shortcutlistform.py | 175 +++++++++++++++++---------- 2 files changed, 150 insertions(+), 99 deletions(-) diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 6531a1a19..b5dffd936 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -30,70 +30,67 @@ from openlp.core.lib import translate, build_icon class Ui_ShortcutListDialog(object): def setupUi(self, shortcutListDialog): - shortcutListDialog.setObjectName("shortcutListDialog") + shortcutListDialog.setObjectName(u'shortcutListDialog') shortcutListDialog.resize(500, 438) self.shortcutListLayout = QtGui.QVBoxLayout(shortcutListDialog) - self.shortcutListLayout.setSpacing(8) - self.shortcutListLayout.setMargin(8) - self.shortcutListLayout.setObjectName("shortcutListLayout") + self.shortcutListLayout.setObjectName(u'shortcutListLayout') self.treeWidget = QtGui.QTreeWidget(shortcutListDialog) + self.treeWidget.setObjectName(u'treeWidget') self.treeWidget.setAlternatingRowColors(True) - self.treeWidget.setObjectName("treeWidget") self.treeWidget.setColumnCount(3) self.shortcutListLayout.addWidget(self.treeWidget) self.detailsLayout = QtGui.QGridLayout() - self.detailsLayout.setSpacing(8) + self.detailsLayout.setObjectName(u'detailsLayout') self.detailsLayout.setContentsMargins(-1, 0, -1, -1) - self.detailsLayout.setObjectName("detailsLayout") self.defaultRadioButton = QtGui.QRadioButton(shortcutListDialog) + self.defaultRadioButton.setObjectName(u'defaultRadioButton') self.defaultRadioButton.setChecked(True) - self.defaultRadioButton.setObjectName("defaultRadioButton") self.detailsLayout.addWidget(self.defaultRadioButton, 0, 0, 1, 1) self.customRadioButton = QtGui.QRadioButton(shortcutListDialog) - self.customRadioButton.setObjectName("customRadioButton") + self.customRadioButton.setObjectName(u'customRadioButton') self.detailsLayout.addWidget(self.customRadioButton, 1, 0, 1, 1) self.primaryLayout = QtGui.QHBoxLayout() - self.primaryLayout.setSpacing(8) - self.primaryLayout.setObjectName("primaryLayout") + self.primaryLayout.setObjectName(u'primaryLayout') self.primaryPushButton = QtGui.QPushButton(shortcutListDialog) + self.primaryPushButton.setObjectName(u'primaryPushButton') self.primaryPushButton.setMinimumSize(QtCore.QSize(84, 0)) - self.primaryPushButton.setIcon(build_icon(u':/system/system_configure_shortcuts.png')) + self.primaryPushButton.setIcon( + build_icon(u':/system/system_configure_shortcuts.png')) self.primaryPushButton.setCheckable(True) - self.primaryPushButton.setChecked(False) - self.primaryPushButton.setObjectName("primaryPushButton") self.primaryLayout.addWidget(self.primaryPushButton) self.clearPrimaryButton = QtGui.QToolButton(shortcutListDialog) + self.clearPrimaryButton.setObjectName(u'clearPrimaryButton') self.clearPrimaryButton.setMinimumSize(QtCore.QSize(0, 16)) - self.clearPrimaryButton.setText("") - self.clearPrimaryButton.setIcon(build_icon(u':/system/clear_shortcut.png')) - self.clearPrimaryButton.setObjectName("clearPrimaryButton") + self.clearPrimaryButton.setIcon( + build_icon(u':/system/clear_shortcut.png')) self.primaryLayout.addWidget(self.clearPrimaryButton) self.detailsLayout.addLayout(self.primaryLayout, 1, 1, 1, 1) self.alternateLayout = QtGui.QHBoxLayout() - self.alternateLayout.setSpacing(8) - self.alternateLayout.setObjectName("alternateLayout") + self.alternateLayout.setObjectName(u'alternateLayout') self.alternatePushButton = QtGui.QPushButton(shortcutListDialog) - self.alternatePushButton.setIcon(build_icon(u':/system/system_configure_shortcuts.png')) - self.alternatePushButton.setObjectName("alternatePushButton") + self.alternatePushButton.setObjectName(u'alternatePushButton') + self.alternatePushButton.setCheckable(True) + self.alternatePushButton.setIcon( + build_icon(u':/system/system_configure_shortcuts.png')) self.alternateLayout.addWidget(self.alternatePushButton) self.clearAlternateButton = QtGui.QToolButton(shortcutListDialog) - self.clearAlternateButton.setText("") - self.clearAlternateButton.setIcon(build_icon(u':/system/clear_shortcut.png')) - self.clearAlternateButton.setObjectName("clearAlternateButton") + self.clearAlternateButton.setObjectName(u'clearAlternateButton') + self.clearAlternateButton.setIcon( + build_icon(u':/system/clear_shortcut.png')) self.alternateLayout.addWidget(self.clearAlternateButton) self.detailsLayout.addLayout(self.alternateLayout, 1, 2, 1, 1) self.primaryLabel = QtGui.QLabel(shortcutListDialog) - self.primaryLabel.setObjectName("primaryLabel") + self.primaryLabel.setObjectName(u'primaryLabel') self.detailsLayout.addWidget(self.primaryLabel, 0, 1, 1, 1) self.alternateLabel = QtGui.QLabel(shortcutListDialog) - self.alternateLabel.setObjectName("alternateLabel") + self.alternateLabel.setObjectName(u'alternateLabel') self.detailsLayout.addWidget(self.alternateLabel, 0, 2, 1, 1) self.shortcutListLayout.addLayout(self.detailsLayout) self.buttonBox = QtGui.QDialogButtonBox(shortcutListDialog) + self.buttonBox.setObjectName(u'buttonBox') self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | - QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Reset) - self.buttonBox.setObjectName("buttonBox") + QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.RestoreDefaults) self.shortcutListLayout.addWidget(self.buttonBox) self.retranslateUi(shortcutListDialog) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), @@ -112,10 +109,17 @@ class Ui_ShortcutListDialog(object): translate('OpenLP.ShortcutListDialog', 'Action'), translate('OpenLP.ShortcutListDialog', 'Shortcut'), translate('OpenLP.ShortcutListDialog', 'Alternate')]) - self.primaryPushButton.setText( - translate('OpenLP.ShortcutListDialog', 'Capture shortcut:')) - self.alternatePushButton.setText( - translate('OpenLP.ShortcutListDialog', 'Capture shortcut:')) - #self.clearShortcutButton.setToolTip( - #translate('OpenLP.ShortcutListDialog', - #'Restore the default shortcut(s) of this action.')) + self.defaultRadioButton.setText( + translate('OpenLP.ShortcutListDialog', 'Default')) + self.customRadioButton.setText( + translate('OpenLP.ShortcutListDialog', 'Custom')) + self.primaryPushButton.setToolTip( + translate('OpenLP.ShortcutListDialog', 'Capture shortcut.')) + self.alternatePushButton.setToolTip( + translate('OpenLP.ShortcutListDialog', 'Capture shortcut.')) + self.clearPrimaryButton.setToolTip( + translate('OpenLP.ShortcutListDialog', + 'Restore the default shortcut(s) of this action.')) + self.clearAlternateButton.setToolTip( + translate('OpenLP.ShortcutListDialog', + 'Restore the default shortcut(s) of this action.')) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 00e216c2a..cda8cfc5d 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -45,14 +45,11 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) - self.column = -1 self.changedActions = {} - self.primaryPushButton.setText(u'') - self.alternatePushButton.setText(u'') - self.primaryPushButton.setEnabled(False) - self.alternatePushButton.setEnabled(False) QtCore.QObject.connect(self.primaryPushButton, QtCore.SIGNAL(u'toggled(bool)'), self.onPrimaryPushButtonClicked) + QtCore.QObject.connect(self.alternatePushButton, + QtCore.SIGNAL(u'toggled(bool)'), self.onAlternatePushButtonClicked) QtCore.QObject.connect(self.treeWidget, QtCore.SIGNAL(u'itemPressed(QTreeWidgetItem*, int)'), self.onItemPressed) @@ -61,14 +58,15 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.onItemDoubleClicked) QtCore.QObject.connect(self.clearPrimaryButton, QtCore.SIGNAL(u'clicked(bool)'), self.onClearPrimaryButtonClicked) -# QtCore.QObject.connect(self.clearShortcutButton, -# QtCore.SIGNAL(u'clicked(bool)'), self.onClearPrimaryButtonClicked) + QtCore.QObject.connect(self.clearAlternateButton, + QtCore.SIGNAL(u'clicked(bool)'), self.onClearAlternateButtonClicked) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'clicked(QAbstractButton*)'), self.onRestoreDefaultsClicked) def keyPressEvent(self, event): - if self.primaryPushButton.isChecked(): + if self.primaryPushButton.isChecked() or \ + self.alternatePushButton.isChecked(): event.ignore() elif event.key() == QtCore.Qt.Key_Escape: event.accept() @@ -76,7 +74,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def keyReleaseEvent(self, event): Qt = QtCore.Qt - if not self.primaryPushButton.isChecked(): + if not self.primaryPushButton.isChecked() and \ + not self.alternatePushButton.isChecked(): return key = event.key() if key == Qt.Key_Shift or key == Qt.Key_Control or \ @@ -90,9 +89,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if event.modifiers() & Qt.ShiftModifier == Qt.ShiftModifier: key_string = u'Shift+' + key_string key_sequence = QtGui.QKeySequence(key_string) - # The item/action we are attempting to change. - changing_item = self.treeWidget.currentItem() - changing_action = changing_item.data(0, QtCore.Qt.UserRole).toPyObject() + # The action we are attempting to change. + changing_action = self._currentItemAction() shortcut_valid = True for category in ActionList.categories: for action in category.actions: @@ -100,11 +98,18 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if key_sequence not in shortcuts: continue if action is changing_action: - continue - # Have the same parentWidget, thus they cannot have the same - # shortcut. + if self.primaryPushButton.isChecked() and \ + shortcuts.index(key_sequence) == 0: + continue + if self.alternatePushButton.isChecked() and \ + shortcuts.index(key_sequence) == 1: + continue + # Have the same parent, thus they cannot have the same shortcut. if action.parent() is changing_action.parent(): shortcut_valid = False + # The new shortcut is already assigned, but if both shortcuts + # are only valid in a different widget the new shortcut is + # vaild, because they will not interfere. if action.shortcutContext() in [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]: shortcut_valid = False @@ -121,8 +126,12 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtGui.QMessageBox.Ok ) else: - self.primaryPushButton.setText(key_sequence.toString()) - self.primaryPushButton.setChecked(False) + if self.primaryPushButton.isChecked(): + self.primaryPushButton.setText(key_sequence.toString()) + self.primaryPushButton.setChecked(False) + elif self.alternatePushButton.isChecked(): + self.alternatePushButton.setText(key_sequence.toString()) + self.alternatePushButton.setChecked(False) def exec_(self): self.changedActions = {} @@ -130,6 +139,9 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.primaryPushButton.setChecked(False) self.primaryPushButton.setEnabled(False) self.primaryPushButton.setText(u'') + self.alternatePushButton.setChecked(False) + self.alternatePushButton.setEnabled(False) + self.alternatePushButton.setText(u'') return QtGui.QDialog.exec_(self) def reloadShortcutList(self): @@ -162,7 +174,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): while iterator.value(): item = iterator.value() iterator += 1 - action = item.data(0, QtCore.Qt.UserRole).toPyObject() + action = self._currentItemAction(item) if action is None: continue shortcuts = self._actionShortcuts(action) @@ -181,29 +193,35 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): Save the new shortcut to the action if the button is unchanged. """ if toggled: + self.alternatePushButton.setChecked(False) return - item = self.treeWidget.currentItem() - if item is None: - return - action = item.data(0, QtCore.Qt.UserRole).toPyObject() + action = self._currentItemAction() if action is None: return shortcuts = self._actionShortcuts(action) new_shortcuts = [] - # We are changing the primary shortcut. - if self.column in [0, 1]: - new_shortcuts.append( - QtGui.QKeySequence(self.primaryPushButton.text())) - if len(shortcuts) == 2: - new_shortcuts.append(shortcuts[1]) - # We are changing the secondary shortcut. - elif self.column == 2: - if len(shortcuts) != 0: - new_shortcuts.append(shortcuts[0]) - new_shortcuts.append( - QtGui.QKeySequence(self.primaryPushButton.text())) - else: + new_shortcuts.append( + QtGui.QKeySequence(self.primaryPushButton.text())) + if len(shortcuts) == 2: + new_shortcuts.append(shortcuts[1]) + self.changedActions[action] = new_shortcuts + self.refreshShortcutList() + + def onAlternatePushButtonClicked(self, toggled): + """ + """ + if toggled: + self.primaryPushButton.setChecked(False) return + action = self._currentItemAction() + if action is None: + return + shortcuts = self._actionShortcuts(action) + new_shortcuts = [] + if len(shortcuts) != 0: + new_shortcuts.append(shortcuts[0]) + new_shortcuts.append( + QtGui.QKeySequence(self.alternatePushButton.text())) self.changedActions[action] = new_shortcuts self.refreshShortcutList() @@ -212,47 +230,39 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): A item has been double clicked. ``The primaryPushButton`` will be checked and the item's shortcut will be displayed. """ - action = item.data(0, QtCore.Qt.UserRole).toPyObject() + action = self._currentItemAction(item) if action is None: return - self.primaryPushButton.setChecked(True) - self.primaryPushButton.setFocus(QtCore.Qt.OtherFocusReason) - self.onItemPressed(item, column) + self.primaryPushButton.setChecked(column in [0, 1]) + self.alternatePushButton.setChecked(column not in [0, 1]) + if column in [0, 1]: + self.primaryPushButton.setFocus(QtCore.Qt.OtherFocusReason) + else: + self.alternatePushButton.setFocus(QtCore.Qt.OtherFocusReason) + self.onItemPressed() - def onItemPressed(self, item, column): + def onItemPressed(self, item=None, column=-1): """ A item has been pressed. We adjust the button's text to the action's shortcut which is encapsulate in the item. """ - self.column = column - action = item.data(0, QtCore.Qt.UserRole).toPyObject() - text = u'' + action = self._currentItemAction(item) + self.primaryPushButton.setEnabled(action is not None) + self.alternatePushButton.setEnabled(action is not None) + primary_text = u'' + alternate_text = u'' if action is None: self.primaryPushButton.setChecked(False) - self.primaryPushButton.setEnabled(False) + self.alternatePushButton.setChecked(False) else: - self.primaryPushButton.setEnabled(True) shortcuts = self._actionShortcuts(action) - if column != 2 and len(shortcuts) != 0: - text = shortcuts[0].toString() + if len(shortcuts) == 1: + primary_text = shortcuts[0].toString() elif len(shortcuts) == 2: - text = shortcuts[1].toString() - self.primaryPushButton.setText(text) - - def onClearPrimaryButtonClicked(self, toggled): - """ - Restore the defaults of this - """ - item = self.treeWidget.currentItem() - self.primaryPushButton.setChecked(False) - if item is None: - return - action = item.data(0, QtCore.Qt.UserRole).toPyObject() - if action is None: - return - self.changedActions[action] = action.defaultShortcuts - self.refreshShortcutList() - self.onItemPressed(item, self.column) + primary_text = shortcuts[0].toString() + alternate_text = shortcuts[1].toString() + self.primaryPushButton.setText(primary_text) + self.alternatePushButton.setText(alternate_text) def onRestoreDefaultsClicked(self, button): """ @@ -269,6 +279,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): return self.primaryPushButton.setChecked(False) self.primaryPushButton.setText(u'') + self.alternatePushButton.setChecked(False) + self.alternatePushButton.setText(u'') for category in ActionList.categories: for action in category.actions: self.changedActions[action] = action.defaultShortcuts @@ -292,6 +304,30 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): action.objectName(), QtCore.QVariant(action.shortcuts())) settings.endGroup() + def onClearPrimaryButtonClicked(self, toggled): + """ + Restore the defaults of this action. + """ + self._clearButtonClicked(self.primaryPushButton) + + def onClearAlternateButtonClicked(self, toggled): + """ + Restore the defaults of this action. + """ + self._clearButtonClicked(self.alternatePushButton) + + def _clearButtonClicked(self, button): + """ + Restore the defaults of this action. The given button will be unchecked. + """ + button.setChecked(False) + action = self._currentItemAction() + if action is None: + return + self.changedActions[action] = action.defaultShortcuts + self.refreshShortcutList() + self.onItemPressed() + def _actionShortcuts(self, action): """ This returns the shortcuts for the given ``action``, which also includes @@ -301,3 +337,14 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if self.changedActions.has_key(action): return self.changedActions[action] return action.shortcuts() + + def _currentItemAction(self, item=None): + """ + Returns the action of the current item if no item is given, otherwise + we return the action of the given item. + """ + if item is None: + item = self.treeWidget.currentItem() + if item is None: + return + return item.data(0, QtCore.Qt.UserRole).toPyObject() From 78a9c89025d09cb4fbca38ae5a75266d6dff74e2 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 7 Apr 2011 23:57:12 +0100 Subject: [PATCH 034/148] Fix stuttering powerpoint start --- openlp/core/ui/slidecontroller.py | 6 +++--- .../plugins/presentations/lib/messagelistener.py | 14 +++++++++----- .../presentations/lib/powerpointcontroller.py | 11 +++++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index eec5d3a19..ccdb1f17c 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -646,7 +646,7 @@ class SlideController(QtGui.QWidget): self.display.buildHtml(self.serviceItem) if serviceItem.is_media(): self.onMediaStart(serviceItem) - self.onSlideSelected() + self.onSlideSelected(True) self.previewListWidget.setFocus() Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix, [serviceItem]) @@ -833,7 +833,7 @@ class SlideController(QtGui.QWidget): % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) - def onSlideSelected(self): + def onSlideSelected(self, start=False): """ Generate the preview when you click on a slide. if this is the Live Controller also display on the screen @@ -842,7 +842,7 @@ class SlideController(QtGui.QWidget): self.selectedRow = 0 if row > -1 and row < self.previewListWidget.rowCount(): if self.serviceItem.is_command(): - if self.isLive: + if self.isLive and not start: Receiver.send_message( u'%s_slide' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive, row]) diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index 728a154f8..4f9268b3e 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -49,7 +49,7 @@ class Controller(object): self.doc = None log.info(u'%s controller loaded' % live) - def add_handler(self, controller, file, hide_mode): + def add_handler(self, controller, file, hide_mode, slide_no): """ Add a handler, which is an instance of a presentation and slidecontroller combination. If the slidecontroller has a display @@ -64,8 +64,8 @@ class Controller(object): # Display error message to user # Inform slidecontroller that the action failed? return + self.doc.slidenumber = slide_no if self.is_live: - self.doc.start_presentation() if hide_mode == HideMode.Screen: Receiver.send_message(u'maindisplay_hide', HideMode.Screen) self.stop() @@ -73,11 +73,14 @@ class Controller(object): Receiver.send_message(u'maindisplay_hide', HideMode.Theme) self.blank() elif hide_mode == HideMode.Blank: - Receiver.send_message(u'maindisplay_hide', HideMode.Screen) + Receiver.send_message(u'maindisplay_hide', HideMode.Blank) self.blank() else: + self.doc.start_presentation() Receiver.send_message(u'maindisplay_hide', HideMode.Screen) - self.doc.slidenumber = 0 + self.doc.slidenumber = 0 + if slide_no > 1: + self.slide(slide_no) def activate(self): """ @@ -281,7 +284,8 @@ class MessageListener(object): controller = self.live_handler else: controller = self.preview_handler - controller.add_handler(self.controllers[self.handler], file, hide_mode) + controller.add_handler(self.controllers[self.handler], file, hide_mode, + message[3]) def slide(self, message): """ diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 793b0b75d..a02bc841a 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -251,14 +251,13 @@ class PowerpointDocument(PresentationDocument): win32ui.GetForegroundWindow().GetDC().GetDeviceCaps(88) except win32ui.error: dpi = 96 - self.presentation.SlideShowSettings.Run() - self.presentation.SlideShowWindow.View.GotoSlide(1) rendermanager = self.controller.plugin.renderManager rect = rendermanager.screens.current[u'size'] - self.presentation.SlideShowWindow.Top = rect.y() * 72 / dpi - self.presentation.SlideShowWindow.Height = rect.height() * 72 / dpi - self.presentation.SlideShowWindow.Left = rect.x() * 72 / dpi - self.presentation.SlideShowWindow.Width = rect.width() * 72 / dpi + ppt_window = self.presentation.SlideShowSettings.Run() + ppt_window.Top = rect.y() * 72 / dpi + ppt_window.Height = rect.height() * 72 / dpi + ppt_window.Left = rect.x() * 72 / dpi + ppt_window.Width = rect.width() * 72 / dpi def get_slide_number(self): """ From ea5e0d65cc5209db530012416f867e1920d8d879 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 8 Apr 2011 08:25:02 +0200 Subject: [PATCH 035/148] --- openlp/core/ui/shortcutlistdialog.py | 4 +- openlp/core/ui/shortcutlistform.py | 68 ++++++++++++++++++---------- 2 files changed, 45 insertions(+), 27 deletions(-) diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index b5dffd936..a5050ab25 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -119,7 +119,7 @@ class Ui_ShortcutListDialog(object): translate('OpenLP.ShortcutListDialog', 'Capture shortcut.')) self.clearPrimaryButton.setToolTip( translate('OpenLP.ShortcutListDialog', - 'Restore the default shortcut(s) of this action.')) + 'Restore the default shortcut of this action.')) self.clearAlternateButton.setToolTip( translate('OpenLP.ShortcutListDialog', - 'Restore the default shortcut(s) of this action.')) + 'Restore the default shortcut of this action.')) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index cda8cfc5d..9b20fd9d2 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -127,21 +127,17 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): ) else: if self.primaryPushButton.isChecked(): - self.primaryPushButton.setText(key_sequence.toString()) - self.primaryPushButton.setChecked(False) + self._adjustButton(self.primaryPushButton, + checked=False, text=key_sequence.toString()) elif self.alternatePushButton.isChecked(): - self.alternatePushButton.setText(key_sequence.toString()) - self.alternatePushButton.setChecked(False) + self._adjustButton(self.alternatePushButton, + checked=False, text=key_sequence.toString()) def exec_(self): self.changedActions = {} self.reloadShortcutList() - self.primaryPushButton.setChecked(False) - self.primaryPushButton.setEnabled(False) - self.primaryPushButton.setText(u'') - self.alternatePushButton.setChecked(False) - self.alternatePushButton.setEnabled(False) - self.alternatePushButton.setText(u'') + self._adjustButton(self.primaryPushButton, False, False, u'') + self._adjustButton(self.alternatePushButton, False, False, u'') return QtGui.QDialog.exec_(self) def reloadShortcutList(self): @@ -227,7 +223,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def onItemDoubleClicked(self, item, column): """ - A item has been double clicked. ``The primaryPushButton`` will be + A item has been double clicked. The ``primaryPushButton`` will be checked and the item's shortcut will be displayed. """ action = self._currentItemAction(item) @@ -251,18 +247,30 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.alternatePushButton.setEnabled(action is not None) primary_text = u'' alternate_text = u'' + primary_label_text = u'' + alternate_label_text = u'' if action is None: self.primaryPushButton.setChecked(False) self.alternatePushButton.setChecked(False) else: + if len(action.defaultShortcuts) != 0: + primary_label_text = action.defaultShortcuts[0].toString() + if len(action.defaultShortcuts) == 2: + alternate_label_text = action.defaultShortcuts[1].toString() shortcuts = self._actionShortcuts(action) - if len(shortcuts) == 1: - primary_text = shortcuts[0].toString() - elif len(shortcuts) == 2: - primary_text = shortcuts[0].toString() - alternate_text = shortcuts[1].toString() + if shortcuts != action.defaultShortcuts: + self.customRadioButton.setChecked(True) + if len(shortcuts) == 1: + primary_text = shortcuts[0].toString() + elif len(shortcuts) == 2: + primary_text = shortcuts[0].toString() + alternate_text = shortcuts[1].toString() + else: + self.defaultRadioButton.setChecked(True) self.primaryPushButton.setText(primary_text) self.alternatePushButton.setText(alternate_text) + self.primaryLabel.setText(primary_label_text) + self.alternateLabel.setText(alternate_label_text) def onRestoreDefaultsClicked(self, button): """ @@ -277,10 +285,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) == QtGui.QMessageBox.No: return - self.primaryPushButton.setChecked(False) - self.primaryPushButton.setText(u'') - self.alternatePushButton.setChecked(False) - self.alternatePushButton.setText(u'') + self._adjustButton(self.primaryPushButton, False, text=u'') + self._adjustButton(self.alternatePushButton, False, text=u'') for category in ActionList.categories: for action in category.actions: self.changedActions[action] = action.defaultShortcuts @@ -318,7 +324,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def _clearButtonClicked(self, button): """ - Restore the defaults of this action. The given button will be unchecked. + Restore the defaults of this action. The given ``button`` will be + unchecked. """ button.setChecked(False) action = self._currentItemAction() @@ -331,8 +338,8 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def _actionShortcuts(self, action): """ This returns the shortcuts for the given ``action``, which also includes - those shortcuts which are not yet assigned to an action (as changes are - applied when closing the dialog). + those shortcuts which are not saved yet but already assigned (as changes + are applied when closing the dialog). """ if self.changedActions.has_key(action): return self.changedActions[action] @@ -340,11 +347,22 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): def _currentItemAction(self, item=None): """ - Returns the action of the current item if no item is given, otherwise - we return the action of the given item. + Returns the action of the given ``item``. If no item is given, we return + the action of the current item of the ``treeWidget``. """ if item is None: item = self.treeWidget.currentItem() if item is None: return return item.data(0, QtCore.Qt.UserRole).toPyObject() + + def _adjustButton(self, button, checked=None, enabled=None, text=None): + """ + Can be called to adjust more properties of the given ``button`` at once. + """ + if checked is not None: + button.setChecked(checked) + if enabled is not None: + button.setEnabled(enabled) + if text is not None: + button.setText(text) From 283171e296ca2aeb1c6d9475d2548ff0ff353c81 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 9 Apr 2011 16:50:44 +0200 Subject: [PATCH 036/148] use weight to sort categories --- openlp/core/ui/mainwindow.py | 9 +++++++ openlp/core/ui/servicemanager.py | 1 + openlp/core/ui/slidecontroller.py | 2 ++ openlp/core/utils/actions.py | 42 ++++++++++++++++++++++++++----- 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index ab712a57d..63c5aa777 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -39,6 +39,7 @@ from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ShortcutListForm, DisplayTagForm from openlp.core.utils import AppLocation, add_actions, LanguageManager, \ get_application_version +from openlp.core.utils.actions import ActionList log = logging.getLogger(__name__) @@ -161,6 +162,7 @@ class Ui_MainWindow(object): mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.themeManagerDock) # Create the menu items + ActionList.add_category(UiStrings.File, 100) self.FileNewItem = shortcut_action(mainWindow, u'FileNewItem', [QtGui.QKeySequence(u'Ctrl+N')], self.ServiceManagerContents.onNewServiceClicked, @@ -183,14 +185,17 @@ class Ui_MainWindow(object): self.FileExitItem = shortcut_action(mainWindow, u'FileExitItem', [QtGui.QKeySequence(u'Alt+F4')], mainWindow.close, u':/system/system_exit.png', category=UiStrings.File) + ActionList.add_category(UiStrings.Import, 95) self.ImportThemeItem = base_action( mainWindow, u'ImportThemeItem', UiStrings.Import) self.ImportLanguageItem = base_action( mainWindow, u'ImportLanguageItem')#, UiStrings.Import) + ActionList.add_category(UiStrings.Export, 90) self.ExportThemeItem = base_action( mainWindow, u'ExportThemeItem', UiStrings.Export) self.ExportLanguageItem = base_action( mainWindow, u'ExportLanguageItem')#, UiStrings.Export) + ActionList.add_category(UiStrings.View, 85) self.ViewMediaManagerItem = shortcut_action(mainWindow, u'ViewMediaManagerItem', [QtGui.QKeySequence(u'F8')], self.toggleMediaManager, u':/system/system_mediamanager.png', @@ -210,6 +215,7 @@ class Ui_MainWindow(object): self.ViewLivePanel = shortcut_action(mainWindow, u'ViewLivePanel', [QtGui.QKeySequence(u'F12')], self.setLivePanelVisibility, checked=liveVisible, category=UiStrings.View) + ActionList.add_category(UiStrings.ViewMode, 80) self.ModeDefaultItem = checkable_action( mainWindow, u'ModeDefaultItem', category=UiStrings.ViewMode) self.ModeSetupItem = checkable_action( @@ -221,11 +227,13 @@ class Ui_MainWindow(object): self.ModeGroup.addAction(self.ModeSetupItem) self.ModeGroup.addAction(self.ModeLiveItem) self.ModeDefaultItem.setChecked(True) + ActionList.add_category(UiStrings.Tools, 75) self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', u':/tools/tools_add.png', category=UiStrings.Tools) self.ToolsOpenDataFolder = icon_action(mainWindow, u'ToolsOpenDataFolder', u':/general/general_open.png', category=UiStrings.Tools) + ActionList.add_category(UiStrings.Settings, 70) self.settingsPluginListItem = shortcut_action(mainWindow, u'settingsPluginListItem', [QtGui.QKeySequence(u'Alt+F7')], self.onPluginItemClicked, u':/system/settings_plugin_list.png', @@ -253,6 +261,7 @@ class Ui_MainWindow(object): self.SettingsConfigureItem = icon_action(mainWindow, u'SettingsConfigureItem', u':/system/system_settings.png', category=UiStrings.Settings) + ActionList.add_category(UiStrings.Help, 65) self.HelpDocumentationItem = icon_action(mainWindow, u'HelpDocumentationItem', u':/system/system_help_contents.png', category=None)#UiStrings.Help) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index caecaca50..528b642ce 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -167,6 +167,7 @@ class ServiceManager(QtGui.QWidget): 'Move item to the top of the service.'), self.onServiceTop, shortcuts=[QtCore.Qt.Key_Home]) self.serviceManagerList.moveTop.setObjectName(u'moveTop') + ActionList.add_category(UiStrings.Service, 45) ActionList.add_action( self.serviceManagerList.moveTop, UiStrings.Service) self.serviceManagerList.moveUp = self.orderToolbar.addToolbarButton( diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 66c26da3b..204dada75 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -367,12 +367,14 @@ class SlideController(QtGui.QWidget): def setPreviewHotkeys(self, parent=None): self.previousItem.setObjectName(u'previousItemPreview') self.nextItem.setObjectName(u'nextItemPreview') + ActionList.add_category(UiStrings.PreviewToolbar, 55) ActionList.add_action(self.previousItem, UiStrings.PreviewToolbar) ActionList.add_action(self.nextItem, UiStrings.PreviewToolbar) def setLiveHotkeys(self, parent=None): self.previousItem.setObjectName(u'previousItemLive') self.nextItem.setObjectName(u'nextItemLive') + ActionList.add_category(UiStrings.LiveToolbar, 60) ActionList.add_action(self.previousItem, UiStrings.LiveToolbar) ActionList.add_action(self.nextItem, UiStrings.LiveToolbar) self.previousService = shortcut_action(parent, u'previousService', diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index efac7b1bd..214a42249 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -154,13 +154,10 @@ class CategoryList(object): return False def append(self, name, actions=None): - weight = 0 - if len(self.categories) > 0: - weight = self.categories[-1].weight + 1 if actions: - self.add(name, weight, actions) + self.add(name, actions=actions) else: - self.add(name, weight) + self.add(name) def add(self, name, weight=0, actions=None): category = ActionCategory(name, weight) @@ -171,7 +168,7 @@ class CategoryList(object): else: category.actions.append(action) self.categories.append(category) - self.categories.sort(key=lambda cat: cat.weight) + self.categories.sort(key=lambda cat: cat.weight, reverse=True) def remove(self, name): for category in self.categories: @@ -230,6 +227,17 @@ class ActionList(object): @staticmethod def remove_action(action, category=None): + """ + This removes an action from its category. Empty categories are + automatically removed. + + ``action`` + The QAction object to be removed. + + ``category`` + The name (unicode string) of the category, which contains the + action. Defaults to None. + """ if category is not None: category = unicode(category) if category not in ActionList.categories: @@ -238,3 +246,25 @@ class ActionList(object): # Remove empty categories. if len(ActionList.categories[category].actions) == 0: ActionList.categories.remove(category) + + @staticmethod + def add_category(name, weight): + """ + Add an empty category to the list of categories. This is ony convenient + for categories with a given weight. + + ``name`` + The category's name. + + ``weight`` + The category's weight (int). + """ + if name in ActionList.categories: + # Only change the weight and resort the categories again. + for category in ActionList.categories: + if category.name == name: + category.weight = weight + ActionList.categories.categories.sort( + key=lambda cat: cat.weight, reverse=True) + return + ActionList.categories.add(name, weight) From 9011c85a6beedb1ba623374b34029c7cdc122556 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 9 Apr 2011 18:11:02 +0200 Subject: [PATCH 037/148] removed static methods --- openlp/core/lib/ui.py | 9 ++-- openlp/core/ui/mainwindow.py | 19 ++++---- openlp/core/ui/servicemanager.py | 23 +++++----- openlp/core/ui/shortcutlistform.py | 9 ++-- openlp/core/ui/slidecontroller.py | 18 +++++--- openlp/core/utils/actions.py | 50 +++++++++++++-------- openlp/plugins/alerts/alertsplugin.py | 6 ++- openlp/plugins/bibles/bibleplugin.py | 10 +++-- openlp/plugins/songs/songsplugin.py | 14 +++--- openlp/plugins/songusage/songusageplugin.py | 14 +++--- 10 files changed, 102 insertions(+), 70 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 35ea23497..20aca9c6a 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -259,7 +259,8 @@ def base_action(parent, name, category=None): action = QtGui.QAction(parent) action.setObjectName(name) if category is not None: - ActionList.add_action(action, category) + action_list = ActionList.get_instance() + action_list.add_action(action, category) return action def checkable_action(parent, name, checked=None, category=None): @@ -297,7 +298,8 @@ def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, action.setChecked(checked) action.setShortcuts(shortcuts) action.setShortcutContext(context) - ActionList.add_action(action, category) + action_list = ActionList.get_instance() + action_list.add_action(action, category) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), function) return action @@ -335,7 +337,8 @@ def context_menu_action(base, icon, text, slot, shortcuts=None, category=None, if shortcuts is not None: action.setShortcuts(shortcuts) action.setShortcutContext(context) - ActionList.add_action(action) + action_list = ActionList.get_instance() + action_list.add_action(action) return action def context_menu(base, icon, text): diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 63c5aa777..2038e1972 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -39,7 +39,7 @@ from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ShortcutListForm, DisplayTagForm from openlp.core.utils import AppLocation, add_actions, LanguageManager, \ get_application_version -from openlp.core.utils.actions import ActionList +from openlp.core.utils.actions import ActionList, CategoryOrder log = logging.getLogger(__name__) @@ -162,7 +162,8 @@ class Ui_MainWindow(object): mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.themeManagerDock) # Create the menu items - ActionList.add_category(UiStrings.File, 100) + action_list = ActionList.get_instance() + action_list.add_category(UiStrings.File, CategoryOrder.standardMenu) self.FileNewItem = shortcut_action(mainWindow, u'FileNewItem', [QtGui.QKeySequence(u'Ctrl+N')], self.ServiceManagerContents.onNewServiceClicked, @@ -185,17 +186,17 @@ class Ui_MainWindow(object): self.FileExitItem = shortcut_action(mainWindow, u'FileExitItem', [QtGui.QKeySequence(u'Alt+F4')], mainWindow.close, u':/system/system_exit.png', category=UiStrings.File) - ActionList.add_category(UiStrings.Import, 95) + action_list.add_category(UiStrings.Import, CategoryOrder.standardMenu) self.ImportThemeItem = base_action( mainWindow, u'ImportThemeItem', UiStrings.Import) self.ImportLanguageItem = base_action( mainWindow, u'ImportLanguageItem')#, UiStrings.Import) - ActionList.add_category(UiStrings.Export, 90) + action_list.add_category(UiStrings.Export, CategoryOrder.standardMenu) self.ExportThemeItem = base_action( mainWindow, u'ExportThemeItem', UiStrings.Export) self.ExportLanguageItem = base_action( mainWindow, u'ExportLanguageItem')#, UiStrings.Export) - ActionList.add_category(UiStrings.View, 85) + action_list.add_category(UiStrings.View, CategoryOrder.standardMenu) self.ViewMediaManagerItem = shortcut_action(mainWindow, u'ViewMediaManagerItem', [QtGui.QKeySequence(u'F8')], self.toggleMediaManager, u':/system/system_mediamanager.png', @@ -215,7 +216,7 @@ class Ui_MainWindow(object): self.ViewLivePanel = shortcut_action(mainWindow, u'ViewLivePanel', [QtGui.QKeySequence(u'F12')], self.setLivePanelVisibility, checked=liveVisible, category=UiStrings.View) - ActionList.add_category(UiStrings.ViewMode, 80) + action_list.add_category(UiStrings.ViewMode, CategoryOrder.standardMenu) self.ModeDefaultItem = checkable_action( mainWindow, u'ModeDefaultItem', category=UiStrings.ViewMode) self.ModeSetupItem = checkable_action( @@ -227,13 +228,13 @@ class Ui_MainWindow(object): self.ModeGroup.addAction(self.ModeSetupItem) self.ModeGroup.addAction(self.ModeLiveItem) self.ModeDefaultItem.setChecked(True) - ActionList.add_category(UiStrings.Tools, 75) + action_list.add_category(UiStrings.Tools, CategoryOrder.standardMenu) self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', u':/tools/tools_add.png', category=UiStrings.Tools) self.ToolsOpenDataFolder = icon_action(mainWindow, u'ToolsOpenDataFolder', u':/general/general_open.png', category=UiStrings.Tools) - ActionList.add_category(UiStrings.Settings, 70) + action_list.add_category(UiStrings.Settings, CategoryOrder.standardMenu) self.settingsPluginListItem = shortcut_action(mainWindow, u'settingsPluginListItem', [QtGui.QKeySequence(u'Alt+F7')], self.onPluginItemClicked, u':/system/settings_plugin_list.png', @@ -261,7 +262,7 @@ class Ui_MainWindow(object): self.SettingsConfigureItem = icon_action(mainWindow, u'SettingsConfigureItem', u':/system/system_settings.png', category=UiStrings.Settings) - ActionList.add_category(UiStrings.Help, 65) + action_list.add_category(UiStrings.Help, CategoryOrder.standardMenu) self.HelpDocumentationItem = icon_action(mainWindow, u'HelpDocumentationItem', u':/system/system_help_contents.png', category=None)#UiStrings.Help) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 528b642ce..864acc138 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -40,7 +40,7 @@ from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ split_filename -from openlp.core.utils.actions import ActionList +from openlp.core.utils.actions import ActionList, CategoryOrder class ServiceManagerList(QtGui.QTreeWidget): """ @@ -167,8 +167,9 @@ class ServiceManager(QtGui.QWidget): 'Move item to the top of the service.'), self.onServiceTop, shortcuts=[QtCore.Qt.Key_Home]) self.serviceManagerList.moveTop.setObjectName(u'moveTop') - ActionList.add_category(UiStrings.Service, 45) - ActionList.add_action( + action_list = ActionList.get_instance() + action_list.add_category(UiStrings.Service, CategoryOrder.standardToolbar) + action_list.add_action( self.serviceManagerList.moveTop, UiStrings.Service) self.serviceManagerList.moveUp = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &up'), @@ -177,7 +178,7 @@ class ServiceManager(QtGui.QWidget): 'Move item up one position in the service.'), self.onServiceUp, shortcuts=[QtCore.Qt.Key_PageUp]) self.serviceManagerList.moveUp.setObjectName(u'moveUp') - ActionList.add_action(self.serviceManagerList.moveUp, UiStrings.Service) + action_list.add_action(self.serviceManagerList.moveUp, UiStrings.Service) self.serviceManagerList.moveDown = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), u':/services/service_down.png', @@ -185,7 +186,7 @@ class ServiceManager(QtGui.QWidget): 'Move item down one position in the service.'), self.onServiceDown, shortcuts=[QtCore.Qt.Key_PageDown]) self.serviceManagerList.moveDown.setObjectName(u'moveDown') - ActionList.add_action( + action_list.add_action( self.serviceManagerList.moveDown, UiStrings.Service) self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move to &bottom'), @@ -194,7 +195,7 @@ class ServiceManager(QtGui.QWidget): 'Move item to the end of the service.'), self.onServiceEnd, shortcuts=[QtCore.Qt.Key_End]) self.serviceManagerList.moveBottom.setObjectName(u'moveBottom') - ActionList.add_action( + action_list.add_action( self.serviceManagerList.moveBottom, UiStrings.Service) self.serviceManagerList.down = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), @@ -203,7 +204,7 @@ class ServiceManager(QtGui.QWidget): 'Moves the selection down the window.'), self.onMoveSelectionDown, shortcuts=[QtCore.Qt.Key_Down]) self.serviceManagerList.down.setObjectName(u'down') - ActionList.add_action(self.serviceManagerList.down) + action_list.add_action(self.serviceManagerList.down) self.serviceManagerList.down.setVisible(False) self.serviceManagerList.up = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move up'), @@ -212,7 +213,7 @@ class ServiceManager(QtGui.QWidget): 'Moves the selection up the window.'), self.onMoveSelectionUp, shortcuts=[QtCore.Qt.Key_Up]) self.serviceManagerList.up.setObjectName(u'up') - ActionList.add_action(self.serviceManagerList.up) + action_list.add_action(self.serviceManagerList.up) self.serviceManagerList.up.setVisible(False) self.orderToolbar.addSeparator() self.serviceManagerList.delete = self.orderToolbar.addToolbarButton( @@ -229,7 +230,7 @@ class ServiceManager(QtGui.QWidget): 'Expand all the service items.'), self.onExpandAll, shortcuts=[QtCore.Qt.Key_Plus]) self.serviceManagerList.expand.setObjectName(u'expand') - ActionList.add_action(self.serviceManagerList.expand, UiStrings.Service) + action_list.add_action(self.serviceManagerList.expand, UiStrings.Service) self.serviceManagerList.collapse = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', '&Collapse all'), u':/services/service_collapse_all.png', @@ -237,7 +238,7 @@ class ServiceManager(QtGui.QWidget): 'Collapse all the service items.'), self.onCollapseAll, shortcuts=[QtCore.Qt.Key_Minus]) self.serviceManagerList.collapse.setObjectName(u'collapse') - ActionList.add_action( + action_list.add_action( self.serviceManagerList.collapse, UiStrings.Service) self.orderToolbar.addSeparator() self.serviceManagerList.makeLive = self.orderToolbar.addToolbarButton( @@ -247,7 +248,7 @@ class ServiceManager(QtGui.QWidget): 'Send the selected item to Live.'), self.makeLive, shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return]) self.serviceManagerList.makeLive.setObjectName(u'orderToolbar') - ActionList.add_action( + action_list.add_action( self.serviceManagerList.makeLive, UiStrings.Service) self.layout.addWidget(self.orderToolbar) # Connect up our signals and slots diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 336e160b1..ddf84fdd6 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -46,6 +46,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.changedActions = {} + self.action_list = ActionList.get_instance() QtCore.QObject.connect(self.primaryPushButton, QtCore.SIGNAL(u'toggled(bool)'), self.onPrimaryPushButtonClicked) QtCore.QObject.connect(self.alternatePushButton, @@ -96,7 +97,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): # The action we are attempting to change. changing_action = self._currentItemAction() shortcut_valid = True - for category in ActionList.categories: + for category in self.action_list.categories: for action in category.actions: shortcuts = self._actionShortcuts(action) if key_sequence not in shortcuts: @@ -149,7 +150,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): Reload the ``treeWidget`` list to add new and remove old actions. """ self.treeWidget.clear() - for category in ActionList.categories: + for category in self.action_list.categories: # Check if the category is for internal use only. if category.name is None: continue @@ -303,7 +304,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): return self._adjustButton(self.primaryPushButton, False, text=u'') self._adjustButton(self.alternatePushButton, False, text=u'') - for category in ActionList.categories: + for category in self.action_list.categories: for action in category.actions: self.changedActions[action] = action.defaultShortcuts self.refreshShortcutList() @@ -349,7 +350,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ settings = QtCore.QSettings() settings.beginGroup(u'shortcuts') - for category in ActionList.categories: + for category in self.action_list.categories: # Check if the category is for internal use only. if category.name is None: continue diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 204dada75..4f5ed1ea7 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -34,7 +34,7 @@ from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ ItemCapabilities, translate from openlp.core.lib.ui import UiStrings, shortcut_action from openlp.core.ui import HideMode, MainDisplay -from openlp.core.utils.actions import ActionList +from openlp.core.utils.actions import ActionList, CategoryOrder log = logging.getLogger(__name__) @@ -367,16 +367,20 @@ class SlideController(QtGui.QWidget): def setPreviewHotkeys(self, parent=None): self.previousItem.setObjectName(u'previousItemPreview') self.nextItem.setObjectName(u'nextItemPreview') - ActionList.add_category(UiStrings.PreviewToolbar, 55) - ActionList.add_action(self.previousItem, UiStrings.PreviewToolbar) - ActionList.add_action(self.nextItem, UiStrings.PreviewToolbar) + action_list = ActionList.get_instance() + action_list.add_category( + UiStrings.PreviewToolbar, CategoryOrder.standardToolbar) + action_list.add_action(self.previousItem, UiStrings.PreviewToolbar) + action_list.add_action(self.nextItem, UiStrings.PreviewToolbar) def setLiveHotkeys(self, parent=None): self.previousItem.setObjectName(u'previousItemLive') self.nextItem.setObjectName(u'nextItemLive') - ActionList.add_category(UiStrings.LiveToolbar, 60) - ActionList.add_action(self.previousItem, UiStrings.LiveToolbar) - ActionList.add_action(self.nextItem, UiStrings.LiveToolbar) + action_list = ActionList.get_instance() + action_list.add_category( + UiStrings.LiveToolbar, CategoryOrder.standardToolbar) + action_list.add_action(self.previousItem, UiStrings.LiveToolbar) + action_list.add_action(self.nextItem, UiStrings.LiveToolbar) self.previousService = shortcut_action(parent, u'previousService', [QtCore.Qt.Key_Left], self.servicePrevious, UiStrings.LiveToolbar) self.previousService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 214a42249..76b72c55c 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -183,10 +183,18 @@ class ActionList(object): has a weight by which it is sorted when iterating through the list of actions or categories. """ - categories = CategoryList() + instance = None + + def __init__(self): + self.categories = CategoryList() @staticmethod - def add_action(action, category=None, weight=None): + def get_instance(): + if ActionList.instance is None: + ActionList.instance = ActionList() + return ActionList.instance + + def add_action(self, action, category=None, weight=None): """ Add an action to the list of actions. @@ -206,13 +214,13 @@ class ActionList(object): """ if category is not None: category = unicode(category) - if category not in ActionList.categories: - ActionList.categories.append(category) + if category not in self.categories: + self.categories.append(category) action.defaultShortcuts = action.shortcuts() if weight is None: - ActionList.categories[category].actions.append(action) + self.categories[category].actions.append(action) else: - ActionList.categories[category].actions.add(action, weight) + self.categories[category].actions.add(action, weight) if category is None: # Stop here, as this action is not configurable. return @@ -225,8 +233,7 @@ class ActionList(object): [QtGui.QKeySequence(shortcut) for shortcut in shortcuts]) settings.endGroup() - @staticmethod - def remove_action(action, category=None): + def remove_action(self, action, category=None): """ This removes an action from its category. Empty categories are automatically removed. @@ -240,15 +247,14 @@ class ActionList(object): """ if category is not None: category = unicode(category) - if category not in ActionList.categories: + if category not in self.categories: return - ActionList.categories[category].actions.remove(action) + self.categories[category].actions.remove(action) # Remove empty categories. - if len(ActionList.categories[category].actions) == 0: - ActionList.categories.remove(category) + if len(self.categories[category].actions) == 0: + self.categories.remove(category) - @staticmethod - def add_category(name, weight): + def add_category(self, name, weight): """ Add an empty category to the list of categories. This is ony convenient for categories with a given weight. @@ -259,12 +265,20 @@ class ActionList(object): ``weight`` The category's weight (int). """ - if name in ActionList.categories: + if name in self.categories: # Only change the weight and resort the categories again. - for category in ActionList.categories: + for category in self.categories: if category.name == name: category.weight = weight - ActionList.categories.categories.sort( + self.categories.categories.sort( key=lambda cat: cat.weight, reverse=True) return - ActionList.categories.add(name, weight) + self.categories.add(name, weight) + + +class CategoryOrder(object): + """ + An enumeration class for category weights. + """ + standardMenu = 100 + standardToolbar = 90 diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index d564a9754..7d6eac6e2 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -75,7 +75,8 @@ class AlertsPlugin(Plugin): log.info(u'Alerts Initialising') Plugin.initialise(self) self.toolsAlertItem.setVisible(True) - ActionList.add_action(self.toolsAlertItem, UiStrings.Tools) + action_list = ActionList.get_instance() + action_list.add_action(self.toolsAlertItem, UiStrings.Tools) self.liveController.alertTab = self.settings_tab def finalise(self): @@ -86,7 +87,8 @@ class AlertsPlugin(Plugin): self.manager.finalise() Plugin.finalise(self) self.toolsAlertItem.setVisible(False) - ActionList.remove_action(self.toolsAlertItem, u'Tools') + action_list = ActionList.get_instance() + action_list.remove_action(self.toolsAlertItem, u'Tools') def toggleAlertsState(self): self.alertsActive = not self.alertsActive diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 60be388ba..aea732688 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -52,9 +52,10 @@ class BiblePlugin(Plugin): self.manager = BibleManager(self) Plugin.initialise(self) self.importBibleItem.setVisible(True) - ActionList.add_action(self.importBibleItem, UiStrings.Import) + action_list = ActionList.get_instance() + action_list.add_action(self.importBibleItem, UiStrings.Import) # Do not add the action to the list yet. - #ActionList.add_action(self.exportBibleItem, UiStrings.Export) + #action_list.add_action(self.exportBibleItem, UiStrings.Export) # Set to invisible until we can export bibles self.exportBibleItem.setVisible(False) @@ -65,9 +66,10 @@ class BiblePlugin(Plugin): log.info(u'Plugin Finalise') self.manager.finalise() Plugin.finalise(self) - ActionList.remove_action(self.importBibleItem, UiStrings.Import) + action_list = ActionList.get_instance() + action_list.remove_action(self.importBibleItem, UiStrings.Import) self.importBibleItem.setVisible(False) - #ActionList.remove_action(self.exportBibleItem, UiStrings.Export) + #action_list.remove_action(self.exportBibleItem, UiStrings.Export) self.exportBibleItem.setVisible(False) def addImportMenuItem(self, import_menu): diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index a3230ff7f..af50f3f94 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -66,9 +66,10 @@ class SongsPlugin(Plugin): log.info(u'Songs Initialising') Plugin.initialise(self) self.toolsReindexItem.setVisible(True) - ActionList.add_action(self.SongImportItem, UiStrings.Import) - ActionList.add_action(self.SongExportItem, UiStrings.Export) - ActionList.add_action(self.toolsReindexItem, UiStrings.Tools) + action_list = ActionList.get_instance() + action_list.add_action(self.SongImportItem, UiStrings.Import) + action_list.add_action(self.SongExportItem, UiStrings.Export) + action_list.add_action(self.toolsReindexItem, UiStrings.Tools) self.mediaItem.displayResultsSong( self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) @@ -258,7 +259,8 @@ class SongsPlugin(Plugin): log.info(u'Songs Finalising') self.manager.finalise() self.toolsReindexItem.setVisible(False) - ActionList.remove_action(self.SongImportItem, UiStrings.Import) - ActionList.remove_action(self.SongExportItem, UiStrings.Export) - ActionList.remove_action(self.toolsReindexItem, UiStrings.Tools) + action_list = ActionList.get_instance() + action_list.remove_action(self.SongImportItem, UiStrings.Import) + action_list.remove_action(self.SongExportItem, UiStrings.Export) + action_list.remove_action(self.toolsReindexItem, UiStrings.Tools) Plugin.finalise(self) diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index b0a545ad8..5f21451b6 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -110,11 +110,12 @@ class SongUsagePlugin(Plugin): self.settingsSection + u'/active', QtCore.QVariant(False)).toBool() self.SongUsageStatus.setChecked(self.SongUsageActive) - ActionList.add_action(self.SongUsageDelete, + action_list = ActionList.get_instance() + action_list.add_action(self.SongUsageDelete, translate('SongUsagePlugin', 'Song Usage')) - ActionList.add_action(self.SongUsageReport, + action_list.add_action(self.SongUsageReport, translate('SongUsagePlugin', 'Song Usage')) - ActionList.add_action(self.SongUsageStatus, + action_list.add_action(self.SongUsageStatus, translate('SongUsagePlugin', 'Song Usage')) if self.manager is None: self.manager = Manager(u'songusage', init_schema) @@ -131,11 +132,12 @@ class SongUsagePlugin(Plugin): self.manager.finalise() Plugin.finalise(self) self.SongUsageMenu.menuAction().setVisible(False) - ActionList.remove_action(self.SongUsageDelete, + action_list = ActionList.get_instance() + action_list.remove_action(self.SongUsageDelete, translate('SongUsagePlugin', 'Song Usage')) - ActionList.remove_action(self.SongUsageReport, + action_list.remove_action(self.SongUsageReport, translate('SongUsagePlugin', 'Song Usage')) - ActionList.remove_action(self.SongUsageStatus, + action_list.remove_action(self.SongUsageStatus, translate('SongUsagePlugin', 'Song Usage')) #stop any events being processed self.SongUsageActive = False From a54a3eb79255727b3027973eec3b2151244fda41 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 9 Apr 2011 20:14:51 +0200 Subject: [PATCH 038/148] make first column wider; added description label back; removed Qt = Qt.QCore; fixed litte bug which left the shortcut text on the buttons --- openlp/core/ui/shortcutlistdialog.py | 13 +++++++++---- openlp/core/ui/shortcutlistform.py | 15 +++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index a5050ab25..32fe68b95 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -33,11 +33,16 @@ class Ui_ShortcutListDialog(object): shortcutListDialog.setObjectName(u'shortcutListDialog') shortcutListDialog.resize(500, 438) self.shortcutListLayout = QtGui.QVBoxLayout(shortcutListDialog) - self.shortcutListLayout.setObjectName(u'shortcutListLayout') + self.shortcutListLayout.setObjectName(u'shortcutLitLayout') + self.descriptionLabel = QtGui.QLabel(shortcutListDialog) + self.descriptionLabel.setObjectName(u'descriptionLabel') + self.descriptionLabel.setWordWrap(True) + self.shortcutListLayout.addWidget(self.descriptionLabel) self.treeWidget = QtGui.QTreeWidget(shortcutListDialog) self.treeWidget.setObjectName(u'treeWidget') self.treeWidget.setAlternatingRowColors(True) self.treeWidget.setColumnCount(3) + self.treeWidget.setColumnWidth(0, 250) self.shortcutListLayout.addWidget(self.treeWidget) self.detailsLayout = QtGui.QGridLayout() self.detailsLayout.setObjectName(u'detailsLayout') @@ -102,9 +107,9 @@ class Ui_ShortcutListDialog(object): def retranslateUi(self, shortcutListDialog): shortcutListDialog.setWindowTitle( translate('OpenLP.ShortcutListDialog', 'Customize Shortcuts')) - #self.descriptionLabel.setText(translate('OpenLP.ShortcutListDialog', - #'Select an action and click the button below to start capturing ' - #'a new shortcut.')) + self.descriptionLabel.setText(translate('OpenLP.ShortcutListDialog', + 'Select an action and click one of the buttons below to start ' + 'capturing a new primary or alternate shortcut, respectively.')) self.treeWidget.setHeaderLabels([ translate('OpenLP.ShortcutListDialog', 'Action'), translate('OpenLP.ShortcutListDialog', 'Shortcut'), diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index ddf84fdd6..26bfddadd 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -78,20 +78,21 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.close() def keyReleaseEvent(self, event): - Qt = QtCore.Qt if not self.primaryPushButton.isChecked() and \ not self.alternatePushButton.isChecked(): return key = event.key() - if key == Qt.Key_Shift or key == Qt.Key_Control or \ - key == Qt.Key_Meta or key == Qt.Key_Alt: + if key == QtCore.Qt.Key_Shift or key == QtCore.Qt.Key_Control or \ + key == QtCore.Qt.Key_Meta or key == QtCore.Qt.Key_Alt: return key_string = QtGui.QKeySequence(key).toString() - if event.modifiers() & Qt.ControlModifier == Qt.ControlModifier: + if event.modifiers() & QtCore.Qt.ControlModifier == \ + QtCore.Qt.ControlModifier: key_string = u'Ctrl+' + key_string - if event.modifiers() & Qt.AltModifier == Qt.AltModifier: + if event.modifiers() & QtCore.Qt.AltModifier == QtCore.Qt.AltModifier: key_string = u'Alt+' + key_string - if event.modifiers() & Qt.ShiftModifier == Qt.ShiftModifier: + if event.modifiers() & QtCore.Qt.ShiftModifier == \ + QtCore.Qt.ShiftModifier: key_string = u'Shift+' + key_string key_sequence = QtGui.QKeySequence(key_string) # The action we are attempting to change. @@ -377,6 +378,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): new_shortcuts.append(shortcuts[1]) self.changedActions[action] = new_shortcuts self.refreshShortcutList() + self.onCurrentItemChanged(self.treeWidget.currentItem()) def onClearAlternateButtonClicked(self, toggled): """ @@ -394,6 +396,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): new_shortcuts.append(action.defaultShortcuts[1]) self.changedActions[action] = new_shortcuts self.refreshShortcutList() + self.onCurrentItemChanged(self.treeWidget.currentItem()) def _actionShortcuts(self, action): """ From 29ef34b569d9f9c1561201f8a1bb7d8d559fd3ef Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 10 Apr 2011 07:18:31 +0100 Subject: [PATCH 039/148] Add saving of selected Bible names in Quick and Advanced. Clean up combo box selection code (General) Fixes: https://launchpad.net/bugs/755687 --- openlp/core/lib/ui.py | 17 ++++++++++ openlp/core/ui/servicemanager.py | 11 ++----- openlp/core/ui/themestab.py | 9 ++---- openlp/plugins/bibles/lib/biblestab.py | 9 ++---- openlp/plugins/bibles/lib/mediaitem.py | 32 +++++++++++++------ openlp/plugins/custom/forms/editcustomform.py | 8 ++--- openlp/plugins/songs/forms/editsongform.py | 17 ++-------- 7 files changed, 51 insertions(+), 52 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index c1a9f8b35..ffcc32414 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -315,3 +315,20 @@ def create_valign_combo(form, parent, layout): form.verticalComboBox.addItem(UiStrings.Bottom) verticalLabel.setBuddy(form.verticalComboBox) layout.addRow(verticalLabel, form.verticalComboBox) + +def find_in_combo_box(combo_box, value_to_find): + """ + Find a string in a combo box and set it as the selected item if present + + ``combo_box`` + The combo box to check for selected items + + ``value_to_find`` + The value to find + """ + index = combo_box.findText(value_to_find, + QtCore.Qt.MatchExactly) + if index == -1: + # Not Found. + index = 0 + combo_box.setCurrentIndex(index) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 9c1c63917..a07d7f970 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -35,7 +35,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import OpenLPToolbar, ServiceItem, context_menu_action, \ Receiver, build_icon, ItemCapabilities, SettingsManager, translate from openlp.core.lib.theme import ThemeLevel -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ + find_in_combo_box from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ @@ -1261,13 +1262,7 @@ class ServiceManager(QtGui.QWidget): action = context_menu_action(self.serviceManagerList, None, theme, self.onThemeChangeAction) self.themeMenu.addAction(action) - index = self.themeComboBox.findText(self.service_theme, - QtCore.Qt.MatchExactly) - # Not Found - if index == -1: - index = 0 - self.service_theme = u'' - self.themeComboBox.setCurrentIndex(index) + find_in_combo_box(self.themeComboBox, self.service_theme) self.mainwindow.renderManager.set_service_theme(self.service_theme) self.regenerateServiceItems() diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 1b76d2198..3307b94fe 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -28,7 +28,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, Receiver, translate from openlp.core.lib.theme import ThemeLevel -from openlp.core.lib.ui import UiStrings +from openlp.core.lib.ui import UiStrings, find_in_combo_box class ThemesTab(SettingsTab): """ @@ -185,12 +185,7 @@ class ThemesTab(SettingsTab): self.DefaultComboBox.clear() for theme in theme_list: self.DefaultComboBox.addItem(theme) - id = self.DefaultComboBox.findText( - self.global_theme, QtCore.Qt.MatchExactly) - if id == -1: - id = 0 # Not Found - self.global_theme = u'' - self.DefaultComboBox.setCurrentIndex(id) + find_in_combo_box(self.DefaultComboBox, self.global_theme) self.parent.renderManager.set_global_theme( self.global_theme, self.theme_level) if self.global_theme is not u'': diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 7a631ad09..d2e6ad8d9 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -30,6 +30,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, SettingsTab, translate from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle +from openlp.core.lib.ui import find_in_combo_box log = logging.getLogger(__name__) @@ -208,10 +209,4 @@ class BiblesTab(SettingsTab): self.BibleThemeComboBox.addItem(u'') for theme in theme_list: self.BibleThemeComboBox.addItem(theme) - index = self.BibleThemeComboBox.findText( - unicode(self.bible_theme), QtCore.Qt.MatchExactly) - if index == -1: - # Not Found. - index = 0 - self.bible_theme = u'' - self.BibleThemeComboBox.setCurrentIndex(index) + find_in_combo_box(self.BibleThemeComboBox, self.bible_theme) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index a9694fd0c..5c77a75d7 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -32,7 +32,7 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ translate from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings, add_widget_completer, \ - media_item_combo_box, critical_error_message_box + media_item_combo_box, critical_error_message_box, find_in_combo_box from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \ VerseReferenceList, get_reference_match @@ -274,7 +274,7 @@ class BibleMediaItem(MediaManagerItem): log.debug(u'bible manager initialise') self.parent.manager.media = self self.loadBibles() - self.updateAutoCompleter() + self.updateAutoCompleter(False) self.configUpdated() log.debug(u'bible manager initialise complete') @@ -298,23 +298,25 @@ class BibleMediaItem(MediaManagerItem): bibles = self.parent.manager.get_bibles().keys() bibles.sort() # Load the bibles into the combo boxes. - first = True for bible in bibles: if bible: self.quickVersionComboBox.addItem(bible) self.quickSecondComboBox.addItem(bible) self.advancedVersionComboBox.addItem(bible) self.advancedSecondComboBox.addItem(bible) - if first: - first = False - self.initialiseBible(bible) + # set the default value + book = QtCore.QSettings().value( + self.settingsSection + u'/advanced bible', + QtCore.QVariant(u'')).toString() + find_in_combo_box(self.advancedVersionComboBox, book) + self.initialiseAdvancedBible(unicode(book)) def reloadBibles(self): log.debug(u'Reloading Bibles') self.parent.manager.reload_bibles() self.loadBibles() - def initialiseBible(self, bible): + def initialiseAdvancedBible(self, bible): """ This initialises the given bible, which means that its book names and their chapter numbers is added to the combo boxes on the @@ -324,7 +326,7 @@ class BibleMediaItem(MediaManagerItem): ``bible`` The bible to initialise (unicode). """ - log.debug(u'initialiseBible %s', bible) + log.debug(u'initialiseAdvancedBible %s', bible) book_data = self.parent.manager.get_books(bible) self.advancedBookComboBox.clear() first = True @@ -354,12 +356,20 @@ class BibleMediaItem(MediaManagerItem): self.adjustComboBox(1, verse_count, self.advancedFromVerse) self.adjustComboBox(1, verse_count, self.advancedToVerse) - def updateAutoCompleter(self): + def updateAutoCompleter(self, updateConfig=True): """ This updates the bible book completion list for the search field. The completion depends on the bible. It is only updated when we are doing a reference search, otherwise the auto completion list is removed. """ + if updateConfig: + QtCore.QSettings().setValue(self.settingsSection + u'/quick bible', + QtCore.QVariant(self.quickVersionComboBox.currentText())) + else: + book = QtCore.QSettings().value( + self.settingsSection + u'/quick bible', + QtCore.QVariant(u'')).toString() + find_in_combo_box(self.quickVersionComboBox, book) books = [] # We have to do a 'Reference Search'. if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference: @@ -372,7 +382,9 @@ class BibleMediaItem(MediaManagerItem): add_widget_completer(books, self.quickSearchEdit) def onAdvancedVersionComboBox(self): - self.initialiseBible( + QtCore.QSettings().setValue(self.settingsSection + u'/advanced bible', + QtCore.QVariant(self.advancedVersionComboBox.currentText())) + self.initialiseAdvancedBible( unicode(self.advancedVersionComboBox.currentText())) def onAdvancedBookComboBox(self): diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index f81bd4c7d..3ebd5f984 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -29,7 +29,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, translate -from openlp.core.lib.ui import critical_error_message_box +from openlp.core.lib.ui import critical_error_message_box, find_in_combo_box from openlp.plugins.custom.lib import CustomXMLBuilder, CustomXMLParser from openlp.plugins.custom.lib.db import CustomSlide from editcustomdialog import Ui_CustomEditDialog @@ -98,11 +98,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): for slide in slideList: self.slideListView.addItem(slide[1]) theme = self.customSlide.theme_name - id = self.themeComboBox.findText(theme, QtCore.Qt.MatchExactly) - # No theme match - if id == -1: - id = 0 - self.themeComboBox.setCurrentIndex(id) + find_in_combo_box(self.themeComboBox, theme) # If not preview hide the preview button. self.previewButton.setVisible(False) if preview: diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 2f21e57cd..8dfae1736 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -31,7 +31,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, translate from openlp.core.lib.ui import UiStrings, add_widget_completer, \ - critical_error_message_box + critical_error_message_box, find_in_combo_box from openlp.plugins.songs.forms import EditVerseForm from openlp.plugins.songs.lib import SongXML, VerseType, clean_song from openlp.plugins.songs.lib.db import Book, Song, Author, Topic @@ -208,20 +208,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.alternativeEdit.setText(u'') if self.song.song_book_id != 0: book_name = self.manager.get_object(Book, self.song.song_book_id) - id = self.songBookComboBox.findText( - unicode(book_name.name), QtCore.Qt.MatchExactly) - if id == -1: - # Not Found - id = 0 - self.songBookComboBox.setCurrentIndex(id) + find_in_combo_box(self.songBookComboBox, unicode(book_name.name)) if self.song.theme_name: - id = self.themeComboBox.findText( - unicode(self.song.theme_name), QtCore.Qt.MatchExactly) - if id == -1: - # Not Found - id = 0 - self.song.theme_name = None - self.themeComboBox.setCurrentIndex(id) + find_in_combo_box(self.themeComboBox, unicode(self.song.theme_name)) if self.song.copyright: self.copyrightEdit.setText(self.song.copyright) else: From c55df2583a2c3fc558b0c5d52079589f59dbe956 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 10 Apr 2011 07:27:23 +0100 Subject: [PATCH 040/148] Remove trailing comma Fixes: https://launchpad.net/bugs/748960 --- openlp/plugins/bibles/lib/versereferencelist.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openlp/plugins/bibles/lib/versereferencelist.py b/openlp/plugins/bibles/lib/versereferencelist.py index bc28f2570..bab6d7e11 100644 --- a/openlp/plugins/bibles/lib/versereferencelist.py +++ b/openlp/plugins/bibles/lib/versereferencelist.py @@ -96,4 +96,7 @@ class VerseReferenceList(object): version[u'copyright']) if version[u'permission'].strip(): result = result + u', ' + version[u'permission'] + result = result.rstrip() + if result.endswith(u','): + return result[:len(result)-1] return result From b7a1554abda5e718744261006240f97210d11f38 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 10 Apr 2011 09:07:02 +0200 Subject: [PATCH 041/148] fixed objectName --- openlp/core/ui/shortcutlistdialog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 32fe68b95..288086cba 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -33,7 +33,7 @@ class Ui_ShortcutListDialog(object): shortcutListDialog.setObjectName(u'shortcutListDialog') shortcutListDialog.resize(500, 438) self.shortcutListLayout = QtGui.QVBoxLayout(shortcutListDialog) - self.shortcutListLayout.setObjectName(u'shortcutLitLayout') + self.shortcutListLayout.setObjectName(u'shortcutListLayout') self.descriptionLabel = QtGui.QLabel(shortcutListDialog) self.descriptionLabel.setObjectName(u'descriptionLabel') self.descriptionLabel.setWordWrap(True) From c8d2baff7ce25635474903c478e7be54687827fa Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 10 Apr 2011 08:32:15 +0100 Subject: [PATCH 042/148] Add bible verse layout to Quick tab. Not moved to Advanced tab as no real estate. Fixes: https://launchpad.net/bugs/745218 --- openlp/core/lib/ui.py | 4 + openlp/plugins/bibles/lib/biblestab.py | 161 ++++++++++++------------- openlp/plugins/bibles/lib/mediaitem.py | 25 ++++ 3 files changed, 109 insertions(+), 81 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index ffcc32414..9b03cce03 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -49,8 +49,10 @@ class UiStrings(object): Cancel = translate('OpenLP.Ui', 'Cancel') CCLINumberLabel = translate('OpenLP.Ui', 'CCLI number:') CreateService = translate('OpenLP.Ui', 'Create a new service.') + Continuous = translate('OpenLP.Ui', 'Continuous') Default = unicode(translate('OpenLP.Ui', 'Default')) Delete = translate('OpenLP.Ui', '&Delete') + DisplayStyle = translate('OpenLP.Ui', 'Display style:') Edit = translate('OpenLP.Ui', '&Edit') EmptyField = translate('OpenLP.Ui', 'Empty Field') Error = translate('OpenLP.Ui', 'Error') @@ -97,6 +99,8 @@ class UiStrings(object): Theme = translate('OpenLP.Ui', 'Theme', 'Singular') Themes = translate('OpenLP.Ui', 'Themes', 'Plural') Top = translate('OpenLP.Ui', 'Top') + VersePerSlide = translate('OpenLP.Ui', 'Verse Per Slide') + VersePerLine = translate('OpenLP.Ui', 'Verse Per Line') Version = translate('OpenLP.Ui', 'Version') def add_welcome_page(parent, image): diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index d2e6ad8d9..5133587b3 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -30,7 +30,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, SettingsTab, translate from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle -from openlp.core.lib.ui import find_in_combo_box +from openlp.core.lib.ui import UiStrings, find_in_combo_box log = logging.getLogger(__name__) @@ -49,116 +49,115 @@ class BiblesTab(SettingsTab): def setupUi(self): self.setObjectName(u'BiblesTab') SettingsTab.setupUi(self) - self.VerseDisplayGroupBox = QtGui.QGroupBox(self.leftColumn) - self.VerseDisplayGroupBox.setObjectName(u'VerseDisplayGroupBox') - self.VerseDisplayLayout = QtGui.QFormLayout(self.VerseDisplayGroupBox) - self.VerseDisplayLayout.setObjectName(u'VerseDisplayLayout') - self.NewChaptersCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox) - self.NewChaptersCheckBox.setObjectName(u'NewChaptersCheckBox') - self.VerseDisplayLayout.addRow(self.NewChaptersCheckBox) - self.DisplayStyleLabel = QtGui.QLabel(self.VerseDisplayGroupBox) - self.DisplayStyleLabel.setObjectName(u'DisplayStyleLabel') - self.DisplayStyleComboBox = QtGui.QComboBox(self.VerseDisplayGroupBox) - self.DisplayStyleComboBox.addItems([u'', u'', u'', u'']) - self.DisplayStyleComboBox.setObjectName(u'DisplayStyleComboBox') - self.VerseDisplayLayout.addRow(self.DisplayStyleLabel, - self.DisplayStyleComboBox) - self.LayoutStyleLabel = QtGui.QLabel(self.VerseDisplayGroupBox) - self.LayoutStyleLabel.setObjectName(u'LayoutStyleLabel') - self.LayoutStyleComboBox = QtGui.QComboBox(self.VerseDisplayGroupBox) - self.LayoutStyleComboBox.setObjectName(u'LayoutStyleComboBox') - self.LayoutStyleComboBox.addItems([u'', u'', u'']) - self.VerseDisplayLayout.addRow(self.LayoutStyleLabel, - self.LayoutStyleComboBox) - self.BibleSecondCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox) - self.BibleSecondCheckBox.setObjectName(u'BibleSecondCheckBox') - self.VerseDisplayLayout.addRow(self.BibleSecondCheckBox) - self.BibleThemeLabel = QtGui.QLabel(self.VerseDisplayGroupBox) - self.BibleThemeLabel.setObjectName(u'BibleThemeLabel') - self.BibleThemeComboBox = QtGui.QComboBox(self.VerseDisplayGroupBox) - self.BibleThemeComboBox.setSizeAdjustPolicy( + self.verseDisplayGroupBox = QtGui.QGroupBox(self.leftColumn) + self.verseDisplayGroupBox.setObjectName(u'verseDisplayGroupBox') + self.verseDisplayLayout = QtGui.QFormLayout(self.verseDisplayGroupBox) + self.verseDisplayLayout.setObjectName(u'verseDisplayLayout') + self.newChaptersCheckBox = QtGui.QCheckBox(self.verseDisplayGroupBox) + self.newChaptersCheckBox.setObjectName(u'newChaptersCheckBox') + self.verseDisplayLayout.addRow(self.newChaptersCheckBox) + self.displayStyleLabel = QtGui.QLabel(self.verseDisplayGroupBox) + self.displayStyleLabel.setObjectName(u'displayStyleLabel') + self.displayStyleComboBox = QtGui.QComboBox(self.verseDisplayGroupBox) + self.displayStyleComboBox.addItems([u'', u'', u'', u'']) + self.displayStyleComboBox.setObjectName(u'displayStyleComboBox') + self.verseDisplayLayout.addRow(self.displayStyleLabel, + self.displayStyleComboBox) + self.layoutStyleLabel = QtGui.QLabel(self.verseDisplayGroupBox) + self.layoutStyleLabel.setObjectName(u'layoutStyleLabel') + self.layoutStyleComboBox = QtGui.QComboBox(self.verseDisplayGroupBox) + self.layoutStyleComboBox.setObjectName(u'layoutStyleComboBox') + self.layoutStyleComboBox.addItems([u'', u'', u'']) + self.verseDisplayLayout.addRow(self.layoutStyleLabel, + self.layoutStyleComboBox) + self.bibleSecondCheckBox = QtGui.QCheckBox(self.verseDisplayGroupBox) + self.bibleSecondCheckBox.setObjectName(u'bibleSecondCheckBox') + self.verseDisplayLayout.addRow(self.bibleSecondCheckBox) + self.bibleThemeLabel = QtGui.QLabel(self.verseDisplayGroupBox) + self.bibleThemeLabel.setObjectName(u'BibleThemeLabel') + self.bibleThemeComboBox = QtGui.QComboBox(self.verseDisplayGroupBox) + self.bibleThemeComboBox.setSizeAdjustPolicy( QtGui.QComboBox.AdjustToMinimumContentsLength) - self.BibleThemeComboBox.setSizePolicy( + self.bibleThemeComboBox.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) - self.BibleThemeComboBox.addItem(u'') - self.BibleThemeComboBox.setObjectName(u'BibleThemeComboBox') - self.VerseDisplayLayout.addRow(self.BibleThemeLabel, - self.BibleThemeComboBox) - self.ChangeNoteLabel = QtGui.QLabel(self.VerseDisplayGroupBox) - self.ChangeNoteLabel.setWordWrap(True) - self.ChangeNoteLabel.setObjectName(u'ChangeNoteLabel') - self.VerseDisplayLayout.addRow(self.ChangeNoteLabel) - self.leftLayout.addWidget(self.VerseDisplayGroupBox) + self.bibleThemeComboBox.addItem(u'') + self.bibleThemeComboBox.setObjectName(u'BibleThemeComboBox') + self.verseDisplayLayout.addRow(self.bibleThemeLabel, + self.bibleThemeComboBox) + self.changeNoteLabel = QtGui.QLabel(self.verseDisplayGroupBox) + self.changeNoteLabel.setWordWrap(True) + self.changeNoteLabel.setObjectName(u'changeNoteLabel') + self.verseDisplayLayout.addRow(self.changeNoteLabel) + self.leftLayout.addWidget(self.verseDisplayGroupBox) self.leftLayout.addStretch() self.rightColumn.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.rightLayout.addStretch() # Signals and slots QtCore.QObject.connect( - self.NewChaptersCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onNewChaptersCheckBoxChanged) + self.newChaptersCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), + self.onnewChaptersCheckBoxChanged) QtCore.QObject.connect( - self.DisplayStyleComboBox, QtCore.SIGNAL(u'activated(int)'), - self.onDisplayStyleComboBoxChanged) + self.displayStyleComboBox, QtCore.SIGNAL(u'activated(int)'), + self.ondisplayStyleComboBoxChanged) QtCore.QObject.connect( - self.BibleThemeComboBox, QtCore.SIGNAL(u'activated(int)'), + self.bibleThemeComboBox, QtCore.SIGNAL(u'activated(int)'), self.onBibleThemeComboBoxChanged) QtCore.QObject.connect( - self.LayoutStyleComboBox, QtCore.SIGNAL(u'activated(int)'), - self.onLayoutStyleComboBoxChanged) + self.layoutStyleComboBox, QtCore.SIGNAL(u'activated(int)'), + self.onlayoutStyleComboBoxChanged) QtCore.QObject.connect( - self.BibleSecondCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onBibleSecondCheckBox) + self.bibleSecondCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), + self.onbibleSecondCheckBox) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList) def retranslateUi(self): - self.VerseDisplayGroupBox.setTitle( + self.verseDisplayGroupBox.setTitle( translate('BiblesPlugin.BiblesTab', 'Verse Display')) - self.NewChaptersCheckBox.setText( + self.newChaptersCheckBox.setText( translate('BiblesPlugin.BiblesTab', 'Only show new chapter numbers')) - self.LayoutStyleLabel.setText( + self.layoutStyleLabel.setText( translate('BiblesPlugin.BiblesTab', 'Layout style:')) - self.DisplayStyleLabel.setText( - translate('BiblesPlugin.BiblesTab', 'Display style:')) - self.BibleThemeLabel.setText( + self.displayStyleLabel.setText(UiStrings.DisplayStyle) + self.bibleThemeLabel.setText( translate('BiblesPlugin.BiblesTab', 'Bible theme:')) - self.LayoutStyleComboBox.setItemText(LayoutStyle.VersePerSlide, - translate('BiblesPlugin.BiblesTab', 'Verse Per Slide')) - self.LayoutStyleComboBox.setItemText(LayoutStyle.VersePerLine, - translate('BiblesPlugin.BiblesTab', 'Verse Per Line')) - self.LayoutStyleComboBox.setItemText(LayoutStyle.Continuous, - translate('BiblesPlugin.BiblesTab', 'Continuous')) - self.DisplayStyleComboBox.setItemText(DisplayStyle.NoBrackets, + self.layoutStyleComboBox.setItemText(LayoutStyle.VersePerSlide, + UiStrings.VersePerSlide) + self.layoutStyleComboBox.setItemText(LayoutStyle.VersePerLine, + UiStrings.VersePerLine) + self.layoutStyleComboBox.setItemText(LayoutStyle.Continuous, + UiStrings.Continuous) + self.displayStyleComboBox.setItemText(DisplayStyle.NoBrackets, translate('BiblesPlugin.BiblesTab', 'No Brackets')) - self.DisplayStyleComboBox.setItemText(DisplayStyle.Round, + self.displayStyleComboBox.setItemText(DisplayStyle.Round, translate('BiblesPlugin.BiblesTab', '( And )')) - self.DisplayStyleComboBox.setItemText(DisplayStyle.Curly, + self.displayStyleComboBox.setItemText(DisplayStyle.Curly, translate('BiblesPlugin.BiblesTab', '{ And }')) - self.DisplayStyleComboBox.setItemText(DisplayStyle.Square, + self.displayStyleComboBox.setItemText(DisplayStyle.Square, translate('BiblesPlugin.BiblesTab', '[ And ]')) - self.ChangeNoteLabel.setText(translate('BiblesPlugin.BiblesTab', + self.changeNoteLabel.setText(translate('BiblesPlugin.BiblesTab', 'Note:\nChanges do not affect verses already in the service.')) - self.BibleSecondCheckBox.setText( + self.bibleSecondCheckBox.setText( translate('BiblesPlugin.BiblesTab', 'Display second Bible verses')) def onBibleThemeComboBoxChanged(self): - self.bible_theme = self.BibleThemeComboBox.currentText() + self.bible_theme = self.bibleThemeComboBox.currentText() - def onDisplayStyleComboBoxChanged(self): - self.display_style = self.DisplayStyleComboBox.currentIndex() + def ondisplayStyleComboBoxChanged(self): + self.display_style = self.displayStyleComboBox.currentIndex() - def onLayoutStyleComboBoxChanged(self): - self.layout_style = self.LayoutStyleComboBox.currentIndex() + def onlayoutStyleComboBoxChanged(self): + self.layout_style = self.layoutStyleComboBox.currentIndex() - def onNewChaptersCheckBoxChanged(self, check_state): + def onnewChaptersCheckBoxChanged(self, check_state): self.show_new_chapters = False # We have a set value convert to True/False. if check_state == QtCore.Qt.Checked: self.show_new_chapters = True - def onBibleSecondCheckBox(self, check_state): + def onbibleSecondCheckBox(self, check_state): self.second_bibles = False # We have a set value convert to True/False. if check_state == QtCore.Qt.Checked: @@ -177,10 +176,10 @@ class BiblesTab(SettingsTab): settings.value(u'bible theme', QtCore.QVariant(u'')).toString()) self.second_bibles = settings.value( u'second bibles', QtCore.QVariant(True)).toBool() - self.NewChaptersCheckBox.setChecked(self.show_new_chapters) - self.DisplayStyleComboBox.setCurrentIndex(self.display_style) - self.LayoutStyleComboBox.setCurrentIndex(self.layout_style) - self.BibleSecondCheckBox.setChecked(self.second_bibles) + self.newChaptersCheckBox.setChecked(self.show_new_chapters) + self.displayStyleComboBox.setCurrentIndex(self.display_style) + self.layoutStyleComboBox.setCurrentIndex(self.layout_style) + self.bibleSecondCheckBox.setChecked(self.second_bibles) settings.endGroup() def save(self): @@ -205,8 +204,8 @@ class BiblesTab(SettingsTab): [u'Bible Theme', u'Song Theme'] """ - self.BibleThemeComboBox.clear() - self.BibleThemeComboBox.addItem(u'') + self.bibleThemeComboBox.clear() + self.bibleThemeComboBox.addItem(u'') for theme in theme_list: - self.BibleThemeComboBox.addItem(theme) - find_in_combo_box(self.BibleThemeComboBox, self.bible_theme) + self.bibleThemeComboBox.addItem(theme) + find_in_combo_box(self.bibleThemeComboBox, self.bible_theme) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 5c77a75d7..84275f3fc 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -106,6 +106,12 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'Text Search')) ]) self.quickLayout.addRow(self.quickSearchLabel, self.quickSearchEdit) + self.quickLayoutLabel = QtGui.QLabel(self.quickTab) + self.quickLayoutLabel.setObjectName(u'quickClearLabel') + self.quickLayoutComboBox = media_item_combo_box(self.quickTab, + u'quickLayoutComboBox') + self.quickLayoutComboBox.addItems([u'', u'', u'']) + self.quickLayout.addRow(self.quickLayoutLabel, self.quickLayoutComboBox) self.quickClearLabel = QtGui.QLabel(self.quickTab) self.quickClearLabel.setObjectName(u'quickClearLabel') self.quickClearComboBox = media_item_combo_box(self.quickTab, @@ -210,6 +216,9 @@ class BibleMediaItem(MediaManagerItem): QtCore.SIGNAL(u'searchTypeChanged(int)'), self.updateAutoCompleter) QtCore.QObject.connect(self.quickVersionComboBox, QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter) + QtCore.QObject.connect( + self.quickLayoutComboBox, QtCore.SIGNAL(u'activated(int)'), + self.onlayoutStyleComboBoxChanged) # Buttons QtCore.QObject.connect(self.advancedSearchButton, QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton) @@ -234,6 +243,7 @@ class BibleMediaItem(MediaManagerItem): self.advancedSecondComboBox.setVisible(False) self.quickSecondLabel.setVisible(False) self.quickSecondComboBox.setVisible(False) + self.quickLayoutComboBox.setCurrentIndex(self.settings.layout_style) def retranslateUi(self): log.debug(u'retranslateUi') @@ -269,6 +279,13 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'Clear')) self.advancedClearComboBox.addItem( translate('BiblesPlugin.MediaItem', 'Keep')) + self.quickLayoutLabel.setText(UiStrings.DisplayStyle) + self.quickLayoutComboBox.setItemText(LayoutStyle.VersePerSlide, + UiStrings.VersePerSlide) + self.quickLayoutComboBox.setItemText(LayoutStyle.VersePerLine, + UiStrings.VersePerLine) + self.quickLayoutComboBox.setItemText(LayoutStyle.Continuous, + UiStrings.Continuous) def initialise(self): log.debug(u'bible manager initialise') @@ -816,3 +833,11 @@ class BibleMediaItem(MediaManagerItem): if self.settings.display_style == DisplayStyle.Square: return u'{su}[%s]{/su}' % verse_text return u'{su}%s{/su}' % verse_text + + def onlayoutStyleComboBoxChanged(self): + self.settings.layout_style = self.quickLayoutComboBox.currentIndex() + self.settings.layoutStyleComboBox.setCurrentIndex( + self.settings.layout_style) + QtCore.QSettings().setValue( + self.settingsSection + u'/verse layout style', + QtCore.QVariant(self.settings.layout_style)) From 9dbd54bf8f6396c1121ca13b0dec77f07809862c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 10 Apr 2011 20:44:27 +0200 Subject: [PATCH 043/148] more fixes --- openlp/core/ui/servicemanager.py | 4 ++-- openlp/plugins/songs/lib/mediaitem.py | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index adafe5fd6..5e14ec637 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -691,9 +691,9 @@ class ServiceManager(QtGui.QWidget): Called by the SlideController to request a preview item be made live and allows the next preview to be updated if relevent. """ - id, row = message.split(u':') + uuid, row = message.split(u':') for sitem in self.serviceItems: - if sitem[u'service_item']._uuid == id: + if sitem[u'service_item']._uuid == uuid: item = self.serviceManagerList.topLevelItem(sitem[u'order'] - 1) self.serviceManagerList.setCurrentItem(item) self.makeLive(int(row)) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index f4803d653..e2882ed29 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -283,19 +283,20 @@ class SongMediaItem(MediaManagerItem): self.remoteTriggered = None self.remoteSong = -1 - def onRemoteEdit(self, songid): + def onRemoteEdit(self, message): """ Called by ServiceManager or SlideController by event passing the Song Id in the payload along with an indicator to say which type of display is required. """ - log.debug(u'onRemoteEdit %s' % songid) - fields = songid.split(u':') - valid = self.parent.manager.get_object(Song, fields[1]) + log.debug(u'onRemoteEdit %s' % message) + remote_type, song_id = message.split(u':') + song_id = int(song_id) + valid = self.parent.manager.get_object(Song, song_id) if valid: - self.remoteSong = fields[1] - self.remoteTriggered = fields[0] - self.edit_song_form.loadSong(fields[1], (fields[0] == u'P')) + self.remoteSong = song_id + self.remoteTriggered = remote_type + self.edit_song_form.loadSong(song_id, (remote_type == u'P')) self.edit_song_form.exec_() def onEditClick(self): From 1882c5366d4b7456acb966016282cacf0f3a2bb0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 10 Apr 2011 19:54:26 +0100 Subject: [PATCH 044/148] Review fixes --- openlp/core/lib/ui.py | 4 ++-- openlp/core/ui/servicemanager.py | 6 +++--- openlp/core/ui/themestab.py | 6 +++--- openlp/plugins/bibles/lib/biblestab.py | 20 +++++++++---------- openlp/plugins/bibles/lib/mediaitem.py | 8 ++++---- openlp/plugins/custom/forms/editcustomform.py | 6 +++--- openlp/plugins/songs/forms/editsongform.py | 8 ++++---- 7 files changed, 29 insertions(+), 29 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 9b03cce03..4f6951d13 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -320,7 +320,7 @@ def create_valign_combo(form, parent, layout): verticalLabel.setBuddy(form.verticalComboBox) layout.addRow(verticalLabel, form.verticalComboBox) -def find_in_combo_box(combo_box, value_to_find): +def find_and_set_in_combo_box(combo_box, value_to_find): """ Find a string in a combo box and set it as the selected item if present @@ -335,4 +335,4 @@ def find_in_combo_box(combo_box, value_to_find): if index == -1: # Not Found. index = 0 - combo_box.setCurrentIndex(index) + combo_box.setCurrentIndex(index) \ No newline at end of file diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index a07d7f970..4c4837676 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -36,7 +36,7 @@ from openlp.core.lib import OpenLPToolbar, ServiceItem, context_menu_action, \ Receiver, build_icon, ItemCapabilities, SettingsManager, translate from openlp.core.lib.theme import ThemeLevel from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ - find_in_combo_box + find_and_set_in_combo_box from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ @@ -1262,7 +1262,7 @@ class ServiceManager(QtGui.QWidget): action = context_menu_action(self.serviceManagerList, None, theme, self.onThemeChangeAction) self.themeMenu.addAction(action) - find_in_combo_box(self.themeComboBox, self.service_theme) + find_and_set_in_combo_box(self.themeComboBox, self.service_theme) self.mainwindow.renderManager.set_service_theme(self.service_theme) self.regenerateServiceItems() @@ -1301,4 +1301,4 @@ class ServiceManager(QtGui.QWidget): Print a Service Order Sheet. """ settingDialog = PrintServiceForm(self.mainwindow, self) - settingDialog.exec_() + settingDialog.exec_() \ No newline at end of file diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 3307b94fe..1415c6810 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -28,7 +28,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, Receiver, translate from openlp.core.lib.theme import ThemeLevel -from openlp.core.lib.ui import UiStrings, find_in_combo_box +from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box class ThemesTab(SettingsTab): """ @@ -185,7 +185,7 @@ class ThemesTab(SettingsTab): self.DefaultComboBox.clear() for theme in theme_list: self.DefaultComboBox.addItem(theme) - find_in_combo_box(self.DefaultComboBox, self.global_theme) + find_and_set_in_combo_box(self.DefaultComboBox, self.global_theme) self.parent.renderManager.set_global_theme( self.global_theme, self.theme_level) if self.global_theme is not u'': @@ -201,4 +201,4 @@ class ThemesTab(SettingsTab): if not preview.isNull(): preview = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - self.DefaultListView.setPixmap(preview) + self.DefaultListView.setPixmap(preview) \ No newline at end of file diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 5133587b3..914377e35 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -30,7 +30,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, SettingsTab, translate from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle -from openlp.core.lib.ui import UiStrings, find_in_combo_box +from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box log = logging.getLogger(__name__) @@ -96,19 +96,19 @@ class BiblesTab(SettingsTab): # Signals and slots QtCore.QObject.connect( self.newChaptersCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onnewChaptersCheckBoxChanged) + self.onNewChaptersCheckBoxChanged) QtCore.QObject.connect( self.displayStyleComboBox, QtCore.SIGNAL(u'activated(int)'), - self.ondisplayStyleComboBoxChanged) + self.onDisplayStyleComboBoxChanged) QtCore.QObject.connect( self.bibleThemeComboBox, QtCore.SIGNAL(u'activated(int)'), self.onBibleThemeComboBoxChanged) QtCore.QObject.connect( self.layoutStyleComboBox, QtCore.SIGNAL(u'activated(int)'), - self.onlayoutStyleComboBoxChanged) + self.onLayoutStyleComboBoxChanged) QtCore.QObject.connect( self.bibleSecondCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), - self.onbibleSecondCheckBox) + self.onBibleSecondCheckBox) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList) @@ -145,19 +145,19 @@ class BiblesTab(SettingsTab): def onBibleThemeComboBoxChanged(self): self.bible_theme = self.bibleThemeComboBox.currentText() - def ondisplayStyleComboBoxChanged(self): + def onDisplayStyleComboBoxChanged(self): self.display_style = self.displayStyleComboBox.currentIndex() - def onlayoutStyleComboBoxChanged(self): + def onLayoutStyleComboBoxChanged(self): self.layout_style = self.layoutStyleComboBox.currentIndex() - def onnewChaptersCheckBoxChanged(self, check_state): + def onNewChaptersCheckBoxChanged(self, check_state): self.show_new_chapters = False # We have a set value convert to True/False. if check_state == QtCore.Qt.Checked: self.show_new_chapters = True - def onbibleSecondCheckBox(self, check_state): + def onBibleSecondCheckBox(self, check_state): self.second_bibles = False # We have a set value convert to True/False. if check_state == QtCore.Qt.Checked: @@ -208,4 +208,4 @@ class BiblesTab(SettingsTab): self.bibleThemeComboBox.addItem(u'') for theme in theme_list: self.bibleThemeComboBox.addItem(theme) - find_in_combo_box(self.bibleThemeComboBox, self.bible_theme) + find_and_set_in_combo_box(self.bibleThemeComboBox, self.bible_theme) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 84275f3fc..73ed0c9bd 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -32,7 +32,7 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ translate from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings, add_widget_completer, \ - media_item_combo_box, critical_error_message_box, find_in_combo_box + media_item_combo_box, critical_error_message_box, find_and_set_in_combo_box from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \ VerseReferenceList, get_reference_match @@ -325,7 +325,7 @@ class BibleMediaItem(MediaManagerItem): book = QtCore.QSettings().value( self.settingsSection + u'/advanced bible', QtCore.QVariant(u'')).toString() - find_in_combo_box(self.advancedVersionComboBox, book) + find_and_set_in_combo_box(self.advancedVersionComboBox, book) self.initialiseAdvancedBible(unicode(book)) def reloadBibles(self): @@ -386,7 +386,7 @@ class BibleMediaItem(MediaManagerItem): book = QtCore.QSettings().value( self.settingsSection + u'/quick bible', QtCore.QVariant(u'')).toString() - find_in_combo_box(self.quickVersionComboBox, book) + find_and_set_in_combo_box(self.quickVersionComboBox, book) books = [] # We have to do a 'Reference Search'. if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference: @@ -840,4 +840,4 @@ class BibleMediaItem(MediaManagerItem): self.settings.layout_style) QtCore.QSettings().setValue( self.settingsSection + u'/verse layout style', - QtCore.QVariant(self.settings.layout_style)) + QtCore.QVariant(self.settings.layout_style)) \ No newline at end of file diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index 3ebd5f984..9312b5ddd 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -29,7 +29,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, translate -from openlp.core.lib.ui import critical_error_message_box, find_in_combo_box +from openlp.core.lib.ui import critical_error_message_box, find_and_set_in_combo_box from openlp.plugins.custom.lib import CustomXMLBuilder, CustomXMLParser from openlp.plugins.custom.lib.db import CustomSlide from editcustomdialog import Ui_CustomEditDialog @@ -98,7 +98,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): for slide in slideList: self.slideListView.addItem(slide[1]) theme = self.customSlide.theme_name - find_in_combo_box(self.themeComboBox, theme) + find_and_set_in_combo_box(self.themeComboBox, theme) # If not preview hide the preview button. self.previewButton.setVisible(False) if preview: @@ -261,4 +261,4 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): message=translate('CustomPlugin.EditCustomForm', 'You need to add at least one slide')) return False - return True + return True \ No newline at end of file diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 8dfae1736..85294d92b 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -31,7 +31,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, translate from openlp.core.lib.ui import UiStrings, add_widget_completer, \ - critical_error_message_box, find_in_combo_box + critical_error_message_box, find_and_set_in_combo_box from openlp.plugins.songs.forms import EditVerseForm from openlp.plugins.songs.lib import SongXML, VerseType, clean_song from openlp.plugins.songs.lib.db import Book, Song, Author, Topic @@ -208,9 +208,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.alternativeEdit.setText(u'') if self.song.song_book_id != 0: book_name = self.manager.get_object(Book, self.song.song_book_id) - find_in_combo_box(self.songBookComboBox, unicode(book_name.name)) + find_and_set_in_combo_box(self.songBookComboBox, unicode(book_name.name)) if self.song.theme_name: - find_in_combo_box(self.themeComboBox, unicode(self.song.theme_name)) + find_and_set_in_combo_box(self.themeComboBox, unicode(self.song.theme_name)) if self.song.copyright: self.copyrightEdit.setText(self.song.copyright) else: @@ -779,4 +779,4 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.song.verse_order) except: log.exception(u'Problem processing song Lyrics \n%s', - sxml.dump_xml()) + sxml.dump_xml()) \ No newline at end of file From 20dc7846ce0c9f74415ff53430fbc6f3b07e16db Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 10 Apr 2011 19:59:29 +0100 Subject: [PATCH 045/148] Take new count after loading files works better Fixes: https://launchpad.net/bugs/756545 --- openlp/core/ui/thememanager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index d033daeb3..81da6e021 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -445,6 +445,7 @@ class ThemeManager(QtGui.QWidget): files = SettingsManager.get_files(self.settingsSection, u'.png') if firstTime: self.firstTime() + files = SettingsManager.get_files(self.settingsSection, u'.png') # No themes have been found so create one if len(files) == 0: theme = ThemeXML() From 1ce94d1c2080bc608cde241c856305022595c4d3 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sun, 10 Apr 2011 23:10:23 +0100 Subject: [PATCH 046/148] Fix theme image appearing between media images. Try and do same for ppt, but not yet. Broken the blank button... (it'll get worse before it gets better!) --- openlp/core/lib/htmlbuilder.py | 20 +++++++--- openlp/core/ui/maindisplay.py | 8 +++- openlp/core/ui/slidecontroller.py | 63 +++++++++++++++++++++---------- 3 files changed, 64 insertions(+), 27 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index c4361a421..c874c9ff2 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -307,7 +307,7 @@ sup { - + + + From 20fbe4d28d99ad0d291e460a68c32ae1bc94bd36 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 12 Apr 2011 20:32:17 +0100 Subject: [PATCH 058/148] Settings Cleanup part2 --- openlp/core/lib/plugin.py | 23 ++++--------- openlp/core/lib/pluginmanager.py | 2 -- openlp/core/ui/advancedtab.py | 3 +- openlp/core/ui/generaltab.py | 3 +- openlp/core/ui/mediadockmanager.py | 2 +- openlp/core/ui/settingsdialog.py | 11 ++++-- openlp/core/ui/settingsform.py | 47 +++++++++++++++----------- openlp/core/ui/themestab.py | 3 +- openlp/plugins/alerts/alertsplugin.py | 5 +-- openlp/plugins/remotes/remoteplugin.py | 7 ++-- 10 files changed, 54 insertions(+), 52 deletions(-) diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 99247c4b9..ef89e6424 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -141,6 +141,7 @@ class Plugin(QtCore.QObject): ``settings_tab_class`` The class name of the plugin's settings tab. """ + log.debug(u'Plugin %s initialised' % name) QtCore.QObject.__init__(self) self.name = name self.textStrings = {} @@ -250,7 +251,8 @@ class Plugin(QtCore.QObject): """ if self.settings_tab_class: return self.settings_tab_class(self.name, - self.getString(StringContent.VisibleName)[u'title'], self.icon_path) + self.getString(StringContent.VisibleName)[u'title'], + self.icon_path) return None def addToMenu(self, menubar): @@ -287,32 +289,19 @@ class Plugin(QtCore.QObject): """ if self.mediaItem: self.mediaItem.initialise() - self.insertToolboxItem() + self.mediadock.insert_dock(self.mediaItem, self.icon, self.weight) + if self.settings_tab: + self.settingsForm.insertTab(self.settings_tab, self.weight) def finalise(self): """ Called by the plugin Manager to cleanup things. """ - self.removeToolboxItem() - - def removeToolboxItem(self): - """ - Called by the plugin to remove toolbar - """ if self.mediaItem: self.mediadock.remove_dock(self.mediaItem) if self.settings_tab: self.settingsForm.removeTab(self.settings_tab) - def insertToolboxItem(self): - """ - Called by plugin to replace toolbar - """ - if self.mediaItem: - self.mediadock.insert_dock(self.mediaItem, self.icon, self.weight) - if self.settings_tab: - self.settingsForm.insertTab(self.settings_tab, self.weight) - def usesTheme(self, theme): """ Called to find out if a plugin is currently using a theme. diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index ef8287ba7..3b73750fe 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -206,8 +206,6 @@ class PluginManager(object): if plugin.isActive(): plugin.initialise() log.info(u'Initialisation Complete for %s ' % plugin.name) - if not plugin.isActive(): - plugin.removeToolboxItem() log.info(u'Initialise Plugins - Finished') def finalise_plugins(self): diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index cf4c5b9d5..6041382b8 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -41,7 +41,8 @@ class AdvancedTab(SettingsTab): """ Initialise the settings tab """ - SettingsTab.__init__(self, u'Advanced') + generalTranslated = translate('AdvancedTab', 'Advanced') + SettingsTab.__init__(self, u'Advanced', generalTranslated) self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' self.icon_path = u':/icon/openlp-logo-16x16.png' diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 279cd8c26..d566244b8 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -45,7 +45,8 @@ class GeneralTab(SettingsTab): # Set to True to allow PostSetup to work on application start up self.overrideChanged = True self.icon_path = u':/icon/openlp-logo-16x16.png' - SettingsTab.__init__(self, u'General') + generalTranslated = translate('GeneralTab', 'General') + SettingsTab.__init__(self, u'General', generalTranslated) def preLoad(self): """ diff --git a/openlp/core/ui/mediadockmanager.py b/openlp/core/ui/mediadockmanager.py index ef4bc62e0..ca4f4d442 100644 --- a/openlp/core/ui/mediadockmanager.py +++ b/openlp/core/ui/mediadockmanager.py @@ -84,5 +84,5 @@ class MediaDockManager(object): if self.media_dock.widget(dock_index): if self.media_dock.widget(dock_index).settingsSection == \ media_item.plugin.name.lower(): - self.media_dock.widget(dock_index).hide() + self.media_dock.widget(dock_index).setVisible(False) self.media_dock.removeItem(dock_index) diff --git a/openlp/core/ui/settingsdialog.py b/openlp/core/ui/settingsdialog.py index 9359ff54c..e66defac3 100644 --- a/openlp/core/ui/settingsdialog.py +++ b/openlp/core/ui/settingsdialog.py @@ -38,15 +38,20 @@ class Ui_SettingsDialog(object): self.settingsLayout = QtGui.QGridLayout(settingsDialog) self.settingsLayout.setObjectName(u'settingsLayout') self.settingListWidget = QtGui.QListWidget(settingsDialog) + self.settingListWidget.setIconSize(QtCore.QSize(32, 32)) self.settingListWidget.setObjectName(u'settingListWidget') self.settingsLayout.addWidget(self.settingListWidget, 0, 0, 1, 1) - self.settingsTabWidget = QtGui.QTabWidget(settingsDialog) - self.settingsTabWidget.setObjectName(u'settingsTabWidget') - self.settingsLayout.addWidget(self.settingsTabWidget, 0, 1, 1, 1) + self.stackedLayout = QtGui.QStackedLayout() + self.stackedLayout.setObjectName(u'stackedLayout') + self.settingsLayout.addLayout(self.stackedLayout, 0, 1, 1, 1) self.buttonBox = create_accept_reject_button_box(settingsDialog, True) self.settingsLayout.addWidget(self.buttonBox, 1, 1, 1, 1) self.retranslateUi(settingsDialog) + self.stackedLayout.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(settingsDialog) + QtCore.QObject.connect(self.settingListWidget, + QtCore.SIGNAL(u'currentRowChanged(int)'), + self.stackedLayout.setCurrentIndex) def retranslateUi(self, settingsDialog): settingsDialog.setWindowTitle(translate('OpenLP.SettingsForm', diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index c145224be..6de2a14d8 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -58,8 +58,8 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): def exec_(self): # load all the settings - for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).load() + for tabIndex in range(0, self.stackedLayout.count()): + self.stackedLayout.widget(tabIndex).load() return QtGui.QDialog.exec_(self) @@ -69,32 +69,39 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ log.debug(u'Inserting %s tab' % tab.tabTitle) # 14 : There are 3 tables currently and locations starts at -10 - self.settingsTabWidget.insertTab( - location + 14, tab, tab.tabTitleVisible) - print tab.tabTitleVisible - item_name = QtGui.QListWidgetItem(tab.tabTitleVisible) - icon = build_icon(tab.icon_path) - pixmap = icon.pixmap(QtCore.QSize(88, 50)) - item_name.setIcon(icon) - self.settingListWidget.insertItem(14 + location, item_name) + match = False + for tabIndex in range(0, self.stackedLayout.count()): + if self.stackedLayout.widget(tabIndex): + if self.stackedLayout.widget(tabIndex).tabTitleVisible == \ + tab.tabTitleVisible: + print tab.tabTitleVisible + self.stackedLayout.widget(tabIndex).setHidden(False) + match = True + break + if not match: + self.stackedLayout.addWidget(tab) + item_name = QtGui.QListWidgetItem(tab.tabTitleVisible) + icon = build_icon(tab.icon_path) + item_name.setIcon(icon) + self.settingListWidget.insertItem(14 + location, item_name) def removeTab(self, tab): """ Remove a tab from the form """ log.debug(u'remove %s tab' % tab.tabTitleVisible) - for tabIndex in range(0, self.settingsTabWidget.count()): - if self.settingsTabWidget.widget(tabIndex): - if self.settingsTabWidget.widget(tabIndex).tabTitleVisible == \ + for tabIndex in range(0, self.stackedLayout.count()): + if self.stackedLayout.widget(tabIndex): + if self.stackedLayout.widget(tabIndex).tabTitleVisible == \ tab.tabTitleVisible: - self.settingsTabWidget.removeTab(tabIndex) + self.settingListWidget.item(tabIndex).setHidden(True) def accept(self): """ Process the form saving the settings """ - for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).save() + for tabIndex in range(0, self.stackedLayout.count()): + self.stackedLayout.widget(tabIndex).save() # Must go after all settings are save Receiver.send_message(u'config_updated') return QtGui.QDialog.accept(self) @@ -103,13 +110,13 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ Process the form saving the settings """ - for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).cancel() + for tabIndex in range(0, self.stackedLayout.count()): + self.stackedLayout.widget(tabIndex).cancel() return QtGui.QDialog.reject(self) def postSetUp(self): """ Run any post-setup code for the tabs on the form """ - for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).postSetUp() + for tabIndex in range(0, self.stackedLayout.count()): + self.stackedLayout.widget(tabIndex).postSetUp() diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 5d07d0cf7..b5fcce1ec 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -36,7 +36,8 @@ class ThemesTab(SettingsTab): """ def __init__(self, parent): self.parent = parent - SettingsTab.__init__(self, u'Themes') + generalTranslated = translate('ThemeTab', 'Themes') + SettingsTab.__init__(self, u'Themes', generalTranslated) self.icon_path = u':/themes/theme_new.png' def setupUi(self): diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index db0ba3b7e..df7823ed5 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -41,9 +41,10 @@ class AlertsPlugin(Plugin): def __init__(self, plugin_helpers): Plugin.__init__(self, u'Alerts', plugin_helpers, - settingsTabClass=AlertsTab) + settings_tab_class=AlertsTab) self.weight = -3 - self.icon = build_icon(u':/plugins/plugin_alerts.png') + self.icon_path = u':/plugins/plugin_alerts.png' + self.icon = build_icon(self.icon_path) self.alertsmanager = AlertsManager(self) self.manager = Manager(u'alerts', init_schema) self.alertForm = AlertForm(self) diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index 41346dbab..fea9e5170 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -38,9 +38,9 @@ class RemotesPlugin(Plugin): """ remotes constructor """ - Plugin.__init__(self, u'Remotes', plugin_helpers, - settingsTabClass=RemoteTab) - self.icon = build_icon(u':/plugins/plugin_remote.png') + Plugin.__init__(self, u'Remotes', plugin_helpers) + self.icon_path = u':/plugins/plugin_remote.png' + self.icon = build_icon(self.icon_path) self.weight = -1 self.server = None @@ -50,7 +50,6 @@ class RemotesPlugin(Plugin): """ log.debug(u'initialise') Plugin.initialise(self) - self.insertToolboxItem() self.server = HttpServer(self) def finalise(self): From c6833003851d7e70681a87429cec43e830556c5c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 12 Apr 2011 23:01:27 +0200 Subject: [PATCH 059/148] fixed weight --- openlp/core/utils/actions.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 76b72c55c..0c4eee655 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -154,10 +154,13 @@ class CategoryList(object): return False def append(self, name, actions=None): + weight = 0 + if len(self.categories) > 0: + weight = self.categories[-1].weight + 1 if actions: - self.add(name, actions=actions) + self.add(name, weight, actions) else: - self.add(name) + self.add(name, weight) def add(self, name, weight=0, actions=None): category = ActionCategory(name, weight) @@ -168,7 +171,7 @@ class CategoryList(object): else: category.actions.append(action) self.categories.append(category) - self.categories.sort(key=lambda cat: cat.weight, reverse=True) + self.categories.sort(key=lambda cat: cat.weight) def remove(self, name): for category in self.categories: @@ -270,8 +273,7 @@ class ActionList(object): for category in self.categories: if category.name == name: category.weight = weight - self.categories.categories.sort( - key=lambda cat: cat.weight, reverse=True) + self.categories.categories.sort(key=lambda cat: cat.weight) return self.categories.add(name, weight) @@ -280,5 +282,5 @@ class CategoryOrder(object): """ An enumeration class for category weights. """ - standardMenu = 100 - standardToolbar = 90 + standardMenu = -20 + standardToolbar = -10 From 28dec27ed2847b524d23fff4dbe57ce01a4e79b9 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 12 Apr 2011 23:12:07 +0200 Subject: [PATCH 060/148] fixed bug #758206 Fixes: https://launchpad.net/bugs/758206 --- openlp/core/lib/mediamanageritem.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 13277876d..7671064df 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -274,8 +274,8 @@ class MediaManagerItem(QtGui.QWidget): context_menu_action( self.listView, u':/general/general_preview.png', self.plugin.getString(StringContent.Preview)[u'title'], - self.onPreviewClick, [QtCore.Qt.Key_Enter], - context=QtCore.Qt.WidgetShortcut)) + self.onPreviewClick, [QtCore.Qt.Key_Enter, + QtCore.Qt.Key_Return], context=QtCore.Qt.WidgetShortcut)) self.listView.addAction( context_menu_action( self.listView, u':/general/general_live.png', From 6474c99a85cffb7b13692561a335fd35600eebe1 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 13 Apr 2011 05:55:00 +0100 Subject: [PATCH 061/148] Settings Layout Ok ish --- openlp/core/ui/settingsdialog.py | 6 ++++-- openlp/core/ui/settingsform.py | 3 ++- resources/forms/settings.ui | 37 ++++++++++++++++++++++++++------ 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/openlp/core/ui/settingsdialog.py b/openlp/core/ui/settingsdialog.py index e66defac3..45a68c321 100644 --- a/openlp/core/ui/settingsdialog.py +++ b/openlp/core/ui/settingsdialog.py @@ -37,8 +37,11 @@ class Ui_SettingsDialog(object): build_icon(u':/system/system_settings.png')) self.settingsLayout = QtGui.QGridLayout(settingsDialog) self.settingsLayout.setObjectName(u'settingsLayout') + self.settingsLayout.setMargin(0) self.settingListWidget = QtGui.QListWidget(settingsDialog) - self.settingListWidget.setIconSize(QtCore.QSize(32, 32)) + self.settingListWidget.setMinimumSize(QtCore.QSize(150, 0)) + self.settingListWidget.setHorizontalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff) self.settingListWidget.setObjectName(u'settingListWidget') self.settingsLayout.addWidget(self.settingListWidget, 0, 0, 1, 1) self.stackedLayout = QtGui.QStackedLayout() @@ -47,7 +50,6 @@ class Ui_SettingsDialog(object): self.buttonBox = create_accept_reject_button_box(settingsDialog, True) self.settingsLayout.addWidget(self.buttonBox, 1, 1, 1, 1) self.retranslateUi(settingsDialog) - self.stackedLayout.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(settingsDialog) QtCore.QObject.connect(self.settingListWidget, QtCore.SIGNAL(u'currentRowChanged(int)'), diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 6de2a14d8..1e71bc985 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -74,7 +74,6 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): if self.stackedLayout.widget(tabIndex): if self.stackedLayout.widget(tabIndex).tabTitleVisible == \ tab.tabTitleVisible: - print tab.tabTitleVisible self.stackedLayout.widget(tabIndex).setHidden(False) match = True break @@ -84,6 +83,8 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): icon = build_icon(tab.icon_path) item_name.setIcon(icon) self.settingListWidget.insertItem(14 + location, item_name) + self.stackedLayout.addWidget(tab) + self.stackedLayout.setCurrentIndex(0) def removeTab(self, tab): """ diff --git a/resources/forms/settings.ui b/resources/forms/settings.ui index 0c378e125..06e55a00d 100644 --- a/resources/forms/settings.ui +++ b/resources/forms/settings.ui @@ -17,26 +17,49 @@ :/icon/openlp.org-icon-32.bmp:/icon/openlp.org-icon-32.bmp - + 10 30 - 681 + 691 441 - - - - + + + 500 + 0 + + + + + + + 0 + 0 + 211 + 409 + + + + + 200 + 0 + + + + Qt::ScrollBarAlwaysOff + + + - + From 5f228a69d101b83d404989b86fb8e8d9e6985ce0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 13 Apr 2011 06:12:31 +0100 Subject: [PATCH 062/148] Minor fixes and Bible Label corrections --- openlp/core/lib/ui.py | 3 ++- openlp/plugins/bibles/lib/biblestab.py | 3 +-- openlp/plugins/bibles/lib/mediaitem.py | 7 ++----- openlp/plugins/remotes/remoteplugin.py | 3 ++- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 4f6951d13..fa0bc8afa 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -62,6 +62,7 @@ class UiStrings(object): Hours = translate('OpenLP.Ui', 'h', 'The abbreviated unit for hours') Image = translate('OpenLP.Ui', 'Image') Import = translate('OpenLP.Ui', 'Import') + LayoutStyle = translate('OpenLP.Ui', 'Layout style:') LengthTime = unicode(translate('OpenLP.Ui', 'Length %s')) Live = translate('OpenLP.Ui', 'Live') LiveBGError = translate('OpenLP.Ui', 'Live Background Error') @@ -335,4 +336,4 @@ def find_and_set_in_combo_box(combo_box, value_to_find): if index == -1: # Not Found. index = 0 - combo_box.setCurrentIndex(index) \ No newline at end of file + combo_box.setCurrentIndex(index) diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index c2e05363e..1d87d20cb 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -118,8 +118,7 @@ class BiblesTab(SettingsTab): self.newChaptersCheckBox.setText( translate('BiblesPlugin.BiblesTab', 'Only show new chapter numbers')) - self.layoutStyleLabel.setText( - translate('BiblesPlugin.BiblesTab', 'Layout style:')) + self.layoutStyleLabel.setText(UiStrings.LayoutStyle) self.displayStyleLabel.setText(UiStrings.DisplayStyle) self.bibleThemeLabel.setText( translate('BiblesPlugin.BiblesTab', 'Bible theme:')) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 73ed0c9bd..89ca69e33 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -279,7 +279,7 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'Clear')) self.advancedClearComboBox.addItem( translate('BiblesPlugin.MediaItem', 'Keep')) - self.quickLayoutLabel.setText(UiStrings.DisplayStyle) + self.quickLayoutLabel.setText(UiStrings.LayoutStyle) self.quickLayoutComboBox.setItemText(LayoutStyle.VersePerSlide, UiStrings.VersePerSlide) self.quickLayoutComboBox.setItemText(LayoutStyle.VersePerLine, @@ -835,9 +835,6 @@ class BibleMediaItem(MediaManagerItem): return u'{su}%s{/su}' % verse_text def onlayoutStyleComboBoxChanged(self): - self.settings.layout_style = self.quickLayoutComboBox.currentIndex() - self.settings.layoutStyleComboBox.setCurrentIndex( - self.settings.layout_style) QtCore.QSettings().setValue( self.settingsSection + u'/verse layout style', - QtCore.QVariant(self.settings.layout_style)) \ No newline at end of file + QtCore.QVariant(self.settings.layout_style)) diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index fea9e5170..d3b50e36b 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -38,7 +38,8 @@ class RemotesPlugin(Plugin): """ remotes constructor """ - Plugin.__init__(self, u'Remotes', plugin_helpers) + Plugin.__init__(self, u'Remotes', plugin_helpers, + settings_tab_class=RemoteTab) self.icon_path = u':/plugins/plugin_remote.png' self.icon = build_icon(self.icon_path) self.weight = -1 From d207cf2243f8a2f9a2c354b6b4cdfa775d3532b5 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 11:19:16 +0200 Subject: [PATCH 063/148] clean ups --- openlp.pyw | 2 +- openlp/core/lib/htmlbuilder.py | 5 +- openlp/core/ui/printserviceform.py | 109 ++++++++++++++--------------- 3 files changed, 57 insertions(+), 59 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 57dbcb698..5c3b8ca77 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -116,7 +116,7 @@ class OpenLP(QtGui.QApplication): self.processEvents() # start the main app window self.mainWindow = MainWindow(screens, self.clipboard(), - self.arguments()) + self.arguments()) self.mainWindow.show() if show_splash: # now kill the splashscreen diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index c4361a421..a80fedd06 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -452,7 +452,7 @@ def build_lyrics_css(item, webkitvers): .lyricsshadow { %s } - """ + """ theme = item.themedata lyricstable = u'' lyrics = u'' @@ -460,8 +460,7 @@ def build_lyrics_css(item, webkitvers): outline = u'' shadow = u'' if theme and item.main: - lyricstable = u'left: %spx; top: %spx;' % \ - (item.main.x(), item.main.y()) + lyricstable = u'left: %spx; top: %spx;' % (item.main.x(), item.main.y()) lyrics = build_lyrics_format_css(theme, item.main.width(), item.main.height()) # For performance reasons we want to show as few DIV's as possible, diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 407b8e2b4..25a631ef3 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -29,7 +29,7 @@ import os from PyQt4 import QtCore, QtGui from lxml import html -from openlp.core.lib import translate +from openlp.core.lib import translate, get_text_file_string from openlp.core.lib.ui import UiStrings from openlp.core.ui.printservicedialog import Ui_PrintServiceDialog, ZoomSize from openlp.core.utils import AppLocation @@ -155,8 +155,6 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ html_data = html.fromstring( u'%s' % unicode(self.titleLineEdit.text())) - style = html.Element(u'style') - style.set(u'type', u'text/css') css_path = os.path.join( AppLocation.get_data_path(), u'servicePrint.css') if not os.path.isfile(css_path): @@ -164,96 +162,97 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): css_file = open(css_path, u'w') css_file.write(DEFAULT_CSS) css_file.close() - css_file = open(css_path, u'r') - style.text = u' '.join(css_file.readlines()) - css_file.close() - html_data.head.append(style) - html_data.append(html.Element(u'body')) - service_title = html.Element(u'span') + custom_css = get_text_file_string(css_path) + style = self._addChildToParent(u'style', custom_css, html_data.head) + style.set(u'type', u'text/css') + self._addChildToParent(u'body', parent=html_data) + service_title = self._addChildToParent( + u'span', unicode(self.titleLineEdit.text()), html_data.body) service_title.set(u'class', u'serviceTitle') - service_title.text = unicode(self.titleLineEdit.text()) - html_data.body.append(service_title) for index, item in enumerate(self.serviceManager.serviceItems): item = item[u'service_item'] - div = html.Element(u'div') + div = self._addChildToParent(u'div', parent=html_data.body) # Add the title of the service item. - item_title = html.Element(u'h2') + item_title = self._addChildToParent(u'h2', parent=div) item_title.set(u'class', u'itemTitle') - icon = html.Element(u'img') + icon = self._addChildToParent(u'img', parent=item_title) icon.set(u'src', item.icon) - item_title.append(icon) - item_title.append(html.fromstring( - u' %s' % item.get_display_title())) - div.append(item_title) + self._fromstring( + u' %s' % item.get_display_title(), item_title) if self.slideTextCheckBox.isChecked(): # Add the text of the service item. if item.is_text(): verse_def = None for slide in item.get_frames(): if not verse_def or verse_def != slide[u'verseTag']: - p = html.Element(u'p') + p = self._addChildToParent(u'p', parent=div) p.set(u'class', u'itemText') - div.append(p) else: - p.append(html.Element(u'br')) - p.append(html.fromstring( - u'%s' % slide[u'html'])) + self._addChildToParent(u'br', parent=p) + self._fromstring(u'%s' % slide[u'html'], p) verse_def = slide[u'verseTag'] # Break the page before the div element. if index != 0 and self.pageBreakAfterText.isChecked(): div.set(u'style', u'page-break-before:always') # Add the image names of the service item. elif item.is_image(): - ol = html.Element(u'ol') + ol = self._addChildToParent(u'ol', parent=div) for slide in range(len(item.get_frames())): - li = html.Element(u'li') - li.text = item.get_frame_title(slide) - ol.append(li) - div.append(ol) + self._addChildToParent(u'li', item.get_frame_title(slide), ol) # add footer if item.foot_text: - p = html.fromstring(item.foot_text) + p = self._fromstring(item.foot_text, div) p.set(u'class', u'itemFooter') - div.append(p) # Add service items' notes. if self.notesCheckBox.isChecked(): if item.notes: - p = html.Element(u'p') - title = html.Element(u'span') + p = self._addChildToParent(u'p', parent=div) + title = self._addChildToParent(u'span', unicode( + translate('OpenLP.ServiceManager', 'Notes:')), p) title.set(u'class', u'itemNotesTitle') - title.text = unicode( - translate('OpenLP.ServiceManager', 'Notes:')) - p.append(title) - text = html.fromstring(u' %s' % - item.notes.replace(u'\n', u'
')) + text = self._fromstring(u' %s' % + item.notes.replace(u'\n', u'
'), p) text.set(u'class', u'itemNotesText') - p.append(text) - div.append(p) # Add play length of media files. if item.is_media() and self.metaDataCheckBox.isChecked(): tme = item.media_length if item.end_time > 0: tme = item.end_time - item.start_time - p = html.fromstring(u'

%s

' % - translate('OpenLP.ServiceManager', 'Playing time:')) - p.append(html.fromstring(u'%s' % - unicode(datetime.timedelta(seconds=tme)))) - div.append(p) - html_data.body.append(div) + title = self._fromstring(u'

%s

' % + translate('OpenLP.ServiceManager', 'Playing time:'), div) + self._fromstring(u'%s' % + unicode(datetime.timedelta(seconds=tme)), title) # Add the custom service notes: - if self.footerTextEdit.toPlainText(): - title = html.Element(u'span') - title.set(u'class', u'customNotesTitle') - title.text = unicode( - translate('OpenLP.ServiceManager', u'Custom Service Notes:')) - div.append(title) - text = html.Element(u'span') - text.set(u'class', u'customNotesText') - text.text = u' %s' % self.footerTextEdit.toPlainText() - div.append(text) + if self.footerTextEdit.toPlainText(): + footer_title = self._addChildToParent(u'span', translate( + 'OpenLP.ServiceManager', u'Custom Service Notes:'), div) + footer_title.set(u'class', u'customNotesTitle') + footer_text = self._addChildToParent(u'span', + u' %s' % self.footerTextEdit.toPlainText(), div) + footer_text.set(u'class', u'customNotesText') self.document.setHtml(html.tostring(html_data)) self.previewWidget.updatePreview() + def _addChildToParent(self, tag, text=None, parent=None): + """ + Creates a html element. If ``text`` is given, the element's text will + set and if a ``parent`` is given, the element is appended. + """ + element = html.Element(tag) + if text is not None: + element.text = text + if parent is not None: + parent.append(element) + return element + + def _fromstring(self, string, parent): + """ + This is used to create a child html element from a string. + """ + element = html.fromstring(string) + parent.append(element) + return element + def paintRequested(self, printer): """ Paint the preview of the *self.document*. From 7d2719288a601256315ca0b607bdf2e8739ee684 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 11:42:18 +0200 Subject: [PATCH 064/148] extended helper methods --- openlp/core/ui/printserviceform.py | 68 ++++++++++++++++++------------ 1 file changed, 42 insertions(+), 26 deletions(-) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 25a631ef3..5de12d78e 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -163,20 +163,19 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): css_file.write(DEFAULT_CSS) css_file.close() custom_css = get_text_file_string(css_path) - style = self._addChildToParent(u'style', custom_css, html_data.head) - style.set(u'type', u'text/css') + self._addChildToParent( + u'style', custom_css, html_data.head, u'type', u'text/css') self._addChildToParent(u'body', parent=html_data) - service_title = self._addChildToParent( - u'span', unicode(self.titleLineEdit.text()), html_data.body) - service_title.set(u'class', u'serviceTitle') + self._addChildToParent(u'span', unicode(self.titleLineEdit.text()), + html_data.body, u'class', u'serviceTitle') for index, item in enumerate(self.serviceManager.serviceItems): item = item[u'service_item'] div = self._addChildToParent(u'div', parent=html_data.body) # Add the title of the service item. - item_title = self._addChildToParent(u'h2', parent=div) - item_title.set(u'class', u'itemTitle') - icon = self._addChildToParent(u'img', parent=item_title) - icon.set(u'src', item.icon) + item_title = self._addChildToParent( + u'h2', parent=div, attribute=u'class', value=u'itemTitle') + self._addChildToParent( + u'img', parent=item_title, attribute=u'src', value=item.icon) self._fromstring( u' %s' % item.get_display_title(), item_title) if self.slideTextCheckBox.isChecked(): @@ -185,8 +184,8 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): verse_def = None for slide in item.get_frames(): if not verse_def or verse_def != slide[u'verseTag']: - p = self._addChildToParent(u'p', parent=div) - p.set(u'class', u'itemText') + p = self._addChildToParent(u'p', parent=div, + attribute=u'class', value=u'itemText') else: self._addChildToParent(u'br', parent=p) self._fromstring(u'%s' % slide[u'html'], p) @@ -201,18 +200,17 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): self._addChildToParent(u'li', item.get_frame_title(slide), ol) # add footer if item.foot_text: - p = self._fromstring(item.foot_text, div) - p.set(u'class', u'itemFooter') + self._fromstring( + item.foot_text, div, u'class', u'itemFooter') # Add service items' notes. if self.notesCheckBox.isChecked(): if item.notes: p = self._addChildToParent(u'p', parent=div) - title = self._addChildToParent(u'span', unicode( - translate('OpenLP.ServiceManager', 'Notes:')), p) - title.set(u'class', u'itemNotesTitle') - text = self._fromstring(u' %s' % - item.notes.replace(u'\n', u'
'), p) - text.set(u'class', u'itemNotesText') + self._addChildToParent(u'span', unicode( + translate('OpenLP.ServiceManager', 'Notes:')), p, + u'class', u'itemNotesTitle') + self._fromstring(u' %s' % item.notes.replace( + u'\n', u'
'), p, u'class', u'itemNotesText') # Add play length of media files. if item.is_media() and self.metaDataCheckBox.isChecked(): tme = item.media_length @@ -224,25 +222,43 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): unicode(datetime.timedelta(seconds=tme)), title) # Add the custom service notes: if self.footerTextEdit.toPlainText(): - footer_title = self._addChildToParent(u'span', translate( - 'OpenLP.ServiceManager', u'Custom Service Notes:'), div) - footer_title.set(u'class', u'customNotesTitle') - footer_text = self._addChildToParent(u'span', - u' %s' % self.footerTextEdit.toPlainText(), div) - footer_text.set(u'class', u'customNotesText') + self._addChildToParent(u'span', translate('OpenLP.ServiceManager', + u'Custom Service Notes:'), div, u'class', u'customNotesTitle') + self._addChildToParent( + u'span', u' %s' % self.footerTextEdit.toPlainText(), div, + u'class', u'customNotesText') self.document.setHtml(html.tostring(html_data)) self.previewWidget.updatePreview() - def _addChildToParent(self, tag, text=None, parent=None): + def _addChildToParent(self, tag, text=None, parent=None, attribute=None, + value=None): """ Creates a html element. If ``text`` is given, the element's text will set and if a ``parent`` is given, the element is appended. + + ``tag`` + The html tag, e. g. ``u'span'``. Defaults to ``None``. + + ``text`` + The text for the tag. Defaults to ``None``. + + ``parent`` + The parent element. Defaults to ``None``. + + ``attribute`` + An optional attribute, for instance ``u'class``. + + ``value`` + The value for the given ``attribute``. It does not have and meaning, + if the attribute is left to its default. """ element = html.Element(tag) if text is not None: element.text = text if parent is not None: parent.append(element) + if attribute is not None: + element.set(attribute, value if value is not None else u'') return element def _fromstring(self, string, parent): From 7d5ee8adf636cb3fc06a4fbd15facd63ec64a9cf Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 11:53:57 +0200 Subject: [PATCH 065/148] spelling --- openlp/core/ui/printserviceform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 5de12d78e..c41084b2f 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -249,7 +249,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): An optional attribute, for instance ``u'class``. ``value`` - The value for the given ``attribute``. It does not have and meaning, + The value for the given ``attribute``. It does not have a meaning, if the attribute is left to its default. """ element = html.Element(tag) From 8451d52f27c0042e67dba88356a5d076f4601b9a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 12:22:26 +0200 Subject: [PATCH 066/148] fixed _fromstring; changed setting name in config --- openlp/core/ui/printserviceform.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index c41084b2f..5348396d7 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -104,7 +104,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): self.slideTextCheckBox.setChecked(settings.value( u'print slide text', QtCore.QVariant(False)).toBool()) self.pageBreakAfterText.setChecked(settings.value( - u'enable page break', QtCore.QVariant(False)).toBool()) + u'add page break', QtCore.QVariant(False)).toBool()) if not self.slideTextCheckBox.isChecked(): self.pageBreakAfterText.setDisabled(True) self.metaDataCheckBox.setChecked(settings.value( @@ -261,11 +261,13 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): element.set(attribute, value if value is not None else u'') return element - def _fromstring(self, string, parent): + def _fromstring(self, string, parent, attribute=None, value=None): """ This is used to create a child html element from a string. """ element = html.fromstring(string) + if attribute is not None: + element.set(attribute, value if value is not None else u'') parent.append(element) return element @@ -371,7 +373,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): settings.beginGroup(u'advanced') settings.setValue(u'print slide text', QtCore.QVariant(self.slideTextCheckBox.isChecked())) - settings.setValue(u'enable page break', + settings.setValue(u'add page break', QtCore.QVariant(self.pageBreakAfterText.isChecked())) settings.setValue(u'print file meta data', QtCore.QVariant(self.metaDataCheckBox.isChecked())) From 2dc2304a2c8b01a62ffc99f67a047f0322b9f1f8 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 15:31:23 +0200 Subject: [PATCH 067/148] fixed advanced bible book initialisation; append a space to completion suggestions --- openlp/plugins/bibles/lib/mediaitem.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index b0d4c8bca..fbafcd725 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -328,6 +328,8 @@ class BibleMediaItem(MediaManagerItem): if bible in bibles: find_and_set_in_combo_box(self.advancedVersionComboBox, bible) self.initialiseAdvancedBible(unicode(bible)) + elif len(bibles): + self.initialiseAdvancedBible(bibles[0]) def reloadBibles(self): log.debug(u'Reloading Bibles') @@ -395,7 +397,7 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.quickVersionComboBox.currentText()) if bible: book_data = bibles[bible].get_books() - books = [book.name for book in book_data] + books = [book.name + u' ' for book in book_data] books.sort() add_widget_completer(books, self.quickSearchEdit) From 6082785b3eb2304f434395608545dc2d8ba41bdb Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 16:28:31 +0200 Subject: [PATCH 068/148] use map; fixed changing quickBible --- openlp/plugins/bibles/lib/mediaitem.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index fbafcd725..3f1c2b612 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -291,7 +291,11 @@ class BibleMediaItem(MediaManagerItem): log.debug(u'bible manager initialise') self.parent.manager.media = self self.loadBibles() - self.updateAutoCompleter(False) + bible = QtCore.QSettings().value( + self.settingsSection + u'/quick bible', QtCore.QVariant( + self.quickVersionComboBox.currentText())).toString() + find_and_set_in_combo_box(self.quickVersionComboBox, bible) + self.updateAutoCompleter() self.configUpdated() log.debug(u'bible manager initialise complete') @@ -376,20 +380,14 @@ class BibleMediaItem(MediaManagerItem): self.adjustComboBox(1, verse_count, self.advancedFromVerse) self.adjustComboBox(1, verse_count, self.advancedToVerse) - def updateAutoCompleter(self, updateConfig=True): + def updateAutoCompleter(self): """ This updates the bible book completion list for the search field. The completion depends on the bible. It is only updated when we are doing a reference search, otherwise the auto completion list is removed. """ - if updateConfig: - QtCore.QSettings().setValue(self.settingsSection + u'/quick bible', - QtCore.QVariant(self.quickVersionComboBox.currentText())) - else: - book = QtCore.QSettings().value( - self.settingsSection + u'/quick bible', - QtCore.QVariant(u'')).toString() - find_and_set_in_combo_box(self.quickVersionComboBox, book) + QtCore.QSettings().setValue(self.settingsSection + u'/quick bible', + QtCore.QVariant(self.quickVersionComboBox.currentText())) books = [] # We have to do a 'Reference Search'. if self.quickSearchEdit.currentSearchType() == BibleSearch.Reference: @@ -397,7 +395,7 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.quickVersionComboBox.currentText()) if bible: book_data = bibles[bible].get_books() - books = [book.name + u' ' for book in book_data] + books = map(lambda x: x.name + u' ', book_data) books.sort() add_widget_completer(books, self.quickSearchEdit) From 01c286e50ef4ad6d30ea9b6f9f54b2da652e688f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 20:01:28 +0200 Subject: [PATCH 069/148] fixed crash --- openlp/core/ui/printserviceform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 5348396d7..01b937d61 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -254,7 +254,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ element = html.Element(tag) if text is not None: - element.text = text + element.text = unicode(text) if parent is not None: parent.append(element) if attribute is not None: From a22bb2e0bc4ebbc9f21ddb990d9e4079b5b93f6f Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 13 Apr 2011 19:14:38 +0100 Subject: [PATCH 070/148] Active/inactive fixes --- openlp/core/lib/pluginmanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index 3b73750fe..6854cb53c 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -150,7 +150,7 @@ class PluginManager(object): if plugin.status is not PluginStatus.Disabled: plugin.settings_tab = plugin.getSettingsTab() visible_title = plugin.getString(StringContent.VisibleName) - if plugin.settings_tab: + if plugin.settings_tab and plugin.isActive(): log.debug(u'Inserting settings tab item from %s' % visible_title[u'title']) settingsform.insertTab(plugin.settings_tab, plugin.weight) From 606287bda10665592a1971b64e62474094587f98 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 20:18:25 +0200 Subject: [PATCH 071/148] reverted change --- openlp/plugins/bibles/lib/mediaitem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 3f1c2b612..118bdfc66 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -395,7 +395,7 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.quickVersionComboBox.currentText()) if bible: book_data = bibles[bible].get_books() - books = map(lambda x: x.name + u' ', book_data) + books = [book.name + u' ' for book in book_data] books.sort() add_widget_completer(books, self.quickSearchEdit) From 79ed96648faa71539e85297edfbade42de4d66c4 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 13 Apr 2011 19:40:09 +0100 Subject: [PATCH 072/148] More cleanups --- openlp/core/ui/settingsdialog.py | 12 ++++++------ openlp/core/ui/settingsform.py | 6 ++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/openlp/core/ui/settingsdialog.py b/openlp/core/ui/settingsdialog.py index 45a68c321..3f5f12bd2 100644 --- a/openlp/core/ui/settingsdialog.py +++ b/openlp/core/ui/settingsdialog.py @@ -35,20 +35,20 @@ class Ui_SettingsDialog(object): settingsDialog.resize(800, 500) settingsDialog.setWindowIcon( build_icon(u':/system/system_settings.png')) - self.settingsLayout = QtGui.QGridLayout(settingsDialog) - self.settingsLayout.setObjectName(u'settingsLayout') - self.settingsLayout.setMargin(0) + self.dialogLayout = QtGui.QGridLayout(settingsDialog) + self.dialogLayout.setObjectName(u'dialogLayout') + self.dialogLayout.setMargin(0) self.settingListWidget = QtGui.QListWidget(settingsDialog) self.settingListWidget.setMinimumSize(QtCore.QSize(150, 0)) self.settingListWidget.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) self.settingListWidget.setObjectName(u'settingListWidget') - self.settingsLayout.addWidget(self.settingListWidget, 0, 0, 1, 1) + self.dialogLayout.addWidget(self.settingListWidget, 0, 0, 1, 1) self.stackedLayout = QtGui.QStackedLayout() self.stackedLayout.setObjectName(u'stackedLayout') - self.settingsLayout.addLayout(self.stackedLayout, 0, 1, 1, 1) + self.dialogLayout.addLayout(self.stackedLayout, 0, 1, 1, 1) self.buttonBox = create_accept_reject_button_box(settingsDialog, True) - self.settingsLayout.addWidget(self.buttonBox, 1, 1, 1, 1) + self.dialogLayout.addWidget(self.buttonBox, 1, 1, 1, 1) self.retranslateUi(settingsDialog) QtCore.QMetaObject.connectSlotsByName(settingsDialog) QtCore.QObject.connect(self.settingListWidget, diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 1e71bc985..3415f3ec8 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -60,9 +60,9 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): # load all the settings for tabIndex in range(0, self.stackedLayout.count()): self.stackedLayout.widget(tabIndex).load() + self.settingListWidget.setCurrentRow(0) return QtGui.QDialog.exec_(self) - def insertTab(self, tab, location): """ Add a tab to the form at a specific location @@ -78,13 +78,11 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): match = True break if not match: - self.stackedLayout.addWidget(tab) + pos = self.stackedLayout.addWidget(tab) item_name = QtGui.QListWidgetItem(tab.tabTitleVisible) icon = build_icon(tab.icon_path) item_name.setIcon(icon) self.settingListWidget.insertItem(14 + location, item_name) - self.stackedLayout.addWidget(tab) - self.stackedLayout.setCurrentIndex(0) def removeTab(self, tab): """ From 9e88d0bff4c3a3a761ea974acc5e1a2e9aa2b0da Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 13 Apr 2011 20:53:05 +0200 Subject: [PATCH 073/148] clean ups --- openlp/plugins/bibles/lib/db.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 85ab98de1..ec63dc02f 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -177,10 +177,7 @@ class BibleDB(QtCore.QObject, Manager): Returns the version name of the Bible. """ version_name = self.get_object(BibleMeta, u'Version') - if version_name: - self.name = version_name.value - else: - self.name = None + self.name = version_name.value if version_name else None return self.name def clean_filename(self, old_filename): @@ -256,10 +253,10 @@ class BibleDB(QtCore.QObject, Manager): # Text list has book and chapter as first two elements of the array. for verse_number, verse_text in textlist.iteritems(): verse = Verse.populate( - book_id = book_id, - chapter = chapter, - verse = verse_number, - text = verse_text + book_id=book_id, + chapter=chapter, + verse=verse_number, + text=verse_text ) self.session.add(verse) self.session.commit() @@ -383,15 +380,13 @@ class BibleDB(QtCore.QObject, Manager): log.debug(u'BibleDB.verse_search("%s")', text) verses = self.session.query(Verse) if text.find(u',') > -1: - or_clause = [] - keywords = [u'%%%s%%' % keyword.strip() - for keyword in text.split(u',')] - for keyword in keywords: - or_clause.append(Verse.text.like(keyword)) + keywords = \ + [u'%%%s%%' % keyword.strip() for keyword in text.split(u',')] + or_clause = [Verse.text.like(keyword) for keyword in keywords] verses = verses.filter(or_(*or_clause)) else: - keywords = [u'%%%s%%' % keyword.strip() - for keyword in text.split(u' ')] + keywords = \ + [u'%%%s%%' % keyword.strip() for keyword in text.split(u' ')] for keyword in keywords: verses = verses.filter(Verse.text.like(keyword)) verses = verses.all() From 6454b88a83aea140d4c19bad077768d4b93443e2 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 13 Apr 2011 20:12:47 +0100 Subject: [PATCH 074/148] Fix Tab parentage --- openlp/core/lib/plugin.py | 4 ++-- openlp/core/lib/pluginmanager.py | 2 +- openlp/core/lib/settingstab.py | 4 ++-- openlp/core/ui/advancedtab.py | 4 ++-- openlp/core/ui/generaltab.py | 4 ++-- openlp/core/ui/settingsdialog.py | 1 + openlp/core/ui/settingsform.py | 6 +++--- openlp/core/ui/themestab.py | 14 +++++++------- openlp/plugins/alerts/lib/alertstab.py | 4 ++-- openlp/plugins/bibles/lib/biblestab.py | 4 ++-- openlp/plugins/custom/lib/customtab.py | 4 ++-- openlp/plugins/media/lib/mediatab.py | 4 ++-- .../plugins/presentations/lib/presentationtab.py | 4 ++-- openlp/plugins/presentations/presentationplugin.py | 4 ++-- openlp/plugins/remotes/lib/remotetab.py | 4 ++-- openlp/plugins/songs/lib/songstab.py | 4 ++-- 16 files changed, 36 insertions(+), 35 deletions(-) diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index ef89e6424..e4359f6b0 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -244,13 +244,13 @@ class Plugin(QtCore.QObject): """ pass - def getSettingsTab(self): + def getSettingsTab(self, parent): """ 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(self.name, + return self.settings_tab_class(parent, self.name, self.getString(StringContent.VisibleName)[u'title'], self.icon_path) return None diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index 6854cb53c..6f1222276 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -148,7 +148,7 @@ class PluginManager(object): """ for plugin in self.plugins: if plugin.status is not PluginStatus.Disabled: - plugin.settings_tab = plugin.getSettingsTab() + plugin.settings_tab = plugin.getSettingsTab(settingsform) visible_title = plugin.getString(StringContent.VisibleName) if plugin.settings_tab and plugin.isActive(): log.debug(u'Inserting settings tab item from %s' % diff --git a/openlp/core/lib/settingstab.py b/openlp/core/lib/settingstab.py index 32d7dc912..e1396d984 100644 --- a/openlp/core/lib/settingstab.py +++ b/openlp/core/lib/settingstab.py @@ -31,7 +31,7 @@ class SettingsTab(QtGui.QWidget): SettingsTab is a helper widget for plugins to define Tabs for the settings dialog. """ - def __init__(self, title, visible_title=None, icon_path=None): + def __init__(self, parent, title, visible_title=None, icon_path=None): """ Constructor to create the Settings tab item. @@ -41,7 +41,7 @@ class SettingsTab(QtGui.QWidget): ``visible_title`` The title of the tab, which is usually displayed on the tab. """ - QtGui.QWidget.__init__(self) + QtGui.QWidget.__init__(self, parent) self.tabTitle = title self.tabTitleVisible = visible_title self.settingsSection = self.tabTitle.lower() diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 6041382b8..3d9321fe1 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -37,12 +37,12 @@ class AdvancedTab(SettingsTab): The :class:`AdvancedTab` manages the advanced settings tab including the UI and the loading and saving of the displayed settings. """ - def __init__(self): + def __init__(self, parent): """ Initialise the settings tab """ generalTranslated = translate('AdvancedTab', 'Advanced') - SettingsTab.__init__(self, u'Advanced', generalTranslated) + SettingsTab.__init__(self, parent ,u'Advanced', generalTranslated) self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' self.icon_path = u':/icon/openlp-logo-16x16.png' diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index d566244b8..cfde7810c 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -36,7 +36,7 @@ class GeneralTab(SettingsTab): """ GeneralTab is the general settings tab in the settings dialog. """ - def __init__(self, screens): + def __init__(self, parent, screens): """ Initialise the general settings tab """ @@ -46,7 +46,7 @@ class GeneralTab(SettingsTab): self.overrideChanged = True self.icon_path = u':/icon/openlp-logo-16x16.png' generalTranslated = translate('GeneralTab', 'General') - SettingsTab.__init__(self, u'General', generalTranslated) + SettingsTab.__init__(self, parent, u'General', generalTranslated) def preLoad(self): """ diff --git a/openlp/core/ui/settingsdialog.py b/openlp/core/ui/settingsdialog.py index 3f5f12bd2..485cb9c5f 100644 --- a/openlp/core/ui/settingsdialog.py +++ b/openlp/core/ui/settingsdialog.py @@ -39,6 +39,7 @@ class Ui_SettingsDialog(object): self.dialogLayout.setObjectName(u'dialogLayout') self.dialogLayout.setMargin(0) self.settingListWidget = QtGui.QListWidget(settingsDialog) + self.settingListWidget.setUniformItemSizes(True) self.settingListWidget.setMinimumSize(QtCore.QSize(150, 0)) self.settingListWidget.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 3415f3ec8..72e1b7fa4 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -47,13 +47,13 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): QtGui.QDialog.__init__(self, parent) self.setupUi(self) # General tab - generalTab = GeneralTab(screens) + generalTab = GeneralTab(self, screens) self.insertTab(generalTab, 1) # Themes tab - themesTab = ThemesTab(mainWindow) + themesTab = ThemesTab(self, mainWindow) self.insertTab(themesTab, 2) # Advanced tab - advancedTab = AdvancedTab() + advancedTab = AdvancedTab(self, ) self.insertTab(advancedTab, 3) def exec_(self): diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index b5fcce1ec..372ee0cc8 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -34,10 +34,10 @@ class ThemesTab(SettingsTab): """ ThemesTab is the theme settings tab in the settings dialog. """ - def __init__(self, parent): - self.parent = parent + def __init__(self, parent, mainwindow): + self.mainwindow = mainwindow generalTranslated = translate('ThemeTab', 'Themes') - SettingsTab.__init__(self, u'Themes', generalTranslated) + SettingsTab.__init__(self, parent, u'Themes', generalTranslated) self.icon_path = u':/themes/theme_new.png' def setupUi(self): @@ -149,7 +149,7 @@ class ThemesTab(SettingsTab): settings.setValue(u'global theme', QtCore.QVariant(self.global_theme)) settings.endGroup() - self.parent.renderManager.set_global_theme( + self.mainwindow.renderManager.set_global_theme( self.global_theme, self.theme_level) Receiver.send_message(u'theme_update_global', self.global_theme) @@ -167,7 +167,7 @@ class ThemesTab(SettingsTab): def onDefaultComboBoxChanged(self, value): self.global_theme = unicode(self.DefaultComboBox.currentText()) - self.parent.renderManager.set_global_theme( + self.mainwindow.renderManager.set_global_theme( self.global_theme, self.theme_level) self.__previewGlobalTheme() @@ -188,7 +188,7 @@ class ThemesTab(SettingsTab): for theme in theme_list: self.DefaultComboBox.addItem(theme) find_and_set_in_combo_box(self.DefaultComboBox, self.global_theme) - self.parent.renderManager.set_global_theme( + self.mainwindow.renderManager.set_global_theme( self.global_theme, self.theme_level) if self.global_theme is not u'': self.__previewGlobalTheme() @@ -197,7 +197,7 @@ class ThemesTab(SettingsTab): """ Utility method to update the global theme preview image. """ - image = self.parent.themeManagerContents.getPreviewImage( + image = self.mainwindow.themeManagerContents.getPreviewImage( self.global_theme) preview = QtGui.QPixmap(unicode(image)) if not preview.isNull(): diff --git a/openlp/plugins/alerts/lib/alertstab.py b/openlp/plugins/alerts/lib/alertstab.py index 2e97d27d3..3b6c50a10 100644 --- a/openlp/plugins/alerts/lib/alertstab.py +++ b/openlp/plugins/alerts/lib/alertstab.py @@ -33,8 +33,8 @@ class AlertsTab(SettingsTab): """ AlertsTab is the alerts settings tab in the settings dialog. """ - def __init__(self, name, visible_title, icon_path): - SettingsTab.__init__(self, name, visible_title, icon_path) + def __init__(self, parent, name, visible_title, icon_path): + SettingsTab.__init__(self, parent, name, visible_title, icon_path) def setupUi(self): self.setObjectName(u'AlertsTab') diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 1d87d20cb..b013c402a 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -40,11 +40,11 @@ class BiblesTab(SettingsTab): """ log.info(u'Bible Tab loaded') - def __init__(self, title, visible_title, icon_path): + def __init__(self, parent, title, visible_title, icon_path): self.paragraph_style = True self.show_new_chapters = False self.display_style = 0 - SettingsTab.__init__(self, title, visible_title, icon_path) + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'BiblesTab') diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py index 006295410..9de294418 100644 --- a/openlp/plugins/custom/lib/customtab.py +++ b/openlp/plugins/custom/lib/customtab.py @@ -32,8 +32,8 @@ class CustomTab(SettingsTab): """ CustomTab is the Custom settings tab in the settings dialog. """ - def __init__(self, title, visible_title, icon_path): - SettingsTab.__init__(self, title, visible_title, icon_path) + def __init__(self, parent, title, visible_title, icon_path): + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'CustomTab') diff --git a/openlp/plugins/media/lib/mediatab.py b/openlp/plugins/media/lib/mediatab.py index 72085158c..f54aa02fa 100644 --- a/openlp/plugins/media/lib/mediatab.py +++ b/openlp/plugins/media/lib/mediatab.py @@ -32,8 +32,8 @@ class MediaTab(SettingsTab): """ MediaTab is the Media settings tab in the settings dialog. """ - def __init__(self, title, visible_title, icon_path): - SettingsTab.__init__(self, title, visible_title, icon_path) + def __init__(self, parent, title, visible_title, icon_path): + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'MediaTab') diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index c7a143006..8e3a98031 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -33,12 +33,12 @@ class PresentationTab(SettingsTab): """ PresentationsTab is the Presentations settings tab in the settings dialog. """ - def __init__(self, title, visible_title, controllers, icon_path): + def __init__(self, parent, title, visible_title, controllers, icon_path): """ Constructor """ self.controllers = controllers - SettingsTab.__init__(self, title, visible_title, icon_path) + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): """ diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 1da9fe511..f217e6023 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -56,12 +56,12 @@ class PresentationPlugin(Plugin): self.icon_path = u':/plugins/plugin_presentations.png' self.icon = build_icon(self.icon_path) - def getSettingsTab(self): + def getSettingsTab(self, parent): """ Create the settings Tab """ visible_name = self.getString(StringContent.VisibleName) - return PresentationTab(self.name, visible_name[u'title'], + return PresentationTab(parent, self.name, visible_name[u'title'], self.controllers, self.icon_path) def initialise(self): diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 97aedc9cd..297437d93 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -32,8 +32,8 @@ class RemoteTab(SettingsTab): """ RemoteTab is the Remotes settings tab in the settings dialog. """ - def __init__(self, title, visible_title, icon_path): - SettingsTab.__init__(self, title, visible_title, icon_path) + def __init__(self, parent, title, visible_title, icon_path): + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'RemoteTab') diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index 092c6af29..e39c22be7 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -32,8 +32,8 @@ class SongsTab(SettingsTab): """ SongsTab is the Songs settings tab in the settings dialog. """ - def __init__(self, title, visible_title, icon_path): - SettingsTab.__init__(self, title, visible_title, icon_path) + def __init__(self, parent, title, visible_title, icon_path): + SettingsTab.__init__(self, parent, title, visible_title, icon_path) def setupUi(self): self.setObjectName(u'SongsTab') From 5f93ff657ef7f5e84e2ae5b067259db316268ade Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Wed, 13 Apr 2011 23:10:41 +0100 Subject: [PATCH 075/148] PPT's are getting there. Going from blank ppt to song broken now --- openlp/core/ui/slidecontroller.py | 50 +++++++++++-------- .../presentations/lib/messagelistener.py | 13 ++--- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 0261b5782..00202d8cc 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -460,7 +460,7 @@ class SlideController(QtGui.QWidget): request = unicode(self.sender().text()) slideno = self.slideList[request] self.__updatePreviewSelection(slideno) - self.onSlideSelected() + self.slideSelected() def receiveSpinDelay(self, value): """ @@ -556,7 +556,7 @@ class SlideController(QtGui.QWidget): # If service item is the same as the current on only change slide if item.__eq__(self.serviceItem): self.__checkUpdateSelectedSlide(slideno) - self.onSlideSelected() + self.slideSelected() return self._processItem(item, slideno) @@ -641,7 +641,7 @@ class SlideController(QtGui.QWidget): self.display.buildHtml(self.serviceItem) if serviceItem.is_media(): self.onMediaStart(serviceItem) - self.onSlideSelected(True) + self.slideSelected(True) self.previewListWidget.setFocus() if old_item: # Close the old item after the new one is opened @@ -699,7 +699,7 @@ class SlideController(QtGui.QWidget): self.updatePreview() else: self.previewListWidget.selectRow(0) - self.onSlideSelected() + self.slideSelected() def onSlideSelectedIndex(self, message): """ @@ -714,7 +714,7 @@ class SlideController(QtGui.QWidget): self.updatePreview() else: self.__checkUpdateSelectedSlide(index) - self.onSlideSelected() + self.slideSelected() def mainDisplaySetBackground(self): """ @@ -755,15 +755,13 @@ class SlideController(QtGui.QWidget): self.themeScreen.setChecked(False) self.desktopScreen.setChecked(False) if checked: - Receiver.send_message(u'maindisplay_hide', HideMode.Blank) QtCore.QSettings().setValue( self.parent.generalSettingsSection + u'/screen blank', QtCore.QVariant(u'blanked')) else: - Receiver.send_message(u'maindisplay_show') QtCore.QSettings().remove( self.parent.generalSettingsSection + u'/screen blank') - self.blankPlugin(checked) + self.blankPlugin() self.updatePreview() def onThemeDisplay(self, checked): @@ -776,15 +774,13 @@ class SlideController(QtGui.QWidget): self.themeScreen.setChecked(checked) self.desktopScreen.setChecked(False) if checked: - Receiver.send_message(u'maindisplay_hide', HideMode.Theme) QtCore.QSettings().setValue( self.parent.generalSettingsSection + u'/screen blank', QtCore.QVariant(u'themed')) else: - Receiver.send_message(u'maindisplay_show') QtCore.QSettings().remove( self.parent.generalSettingsSection + u'/screen blank') - self.blankPlugin(checked) + self.blankPlugin() self.updatePreview() def onHideDisplay(self, checked): @@ -797,28 +793,31 @@ class SlideController(QtGui.QWidget): self.themeScreen.setChecked(False) self.desktopScreen.setChecked(checked) if checked: - Receiver.send_message(u'maindisplay_hide', HideMode.Screen) QtCore.QSettings().setValue( self.parent.generalSettingsSection + u'/screen blank', QtCore.QVariant(u'hidden')) else: - Receiver.send_message(u'maindisplay_show') QtCore.QSettings().remove( self.parent.generalSettingsSection + u'/screen blank') self.hidePlugin(checked) self.updatePreview() - def blankPlugin(self, blank): + def blankPlugin(self): """ - Blank the display screen within a plugin if required. + Blank/Hide the display screen within a plugin if required. """ - log.debug(u'blankPlugin %s ', blank) + hide_mode = self.hideMode() + log.debug(u'blankPlugin %s ', hide_mode) if self.serviceItem is not None: - if blank: + if hide_mode: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_hide', hide_mode) Receiver.send_message(u'%s_blank' % self.serviceItem.name.lower(), - [self.serviceItem, self.isLive]) + [self.serviceItem, self.isLive, hide_mode]) else: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_show') Receiver.send_message(u'%s_unblank' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) @@ -830,15 +829,24 @@ class SlideController(QtGui.QWidget): log.debug(u'hidePlugin %s ', hide) if self.serviceItem is not None: if hide: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) Receiver.send_message(u'%s_hide' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) else: + if not self.serviceItem.is_command(): + Receiver.send_message(u'maindisplay_show') Receiver.send_message(u'%s_unblank' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) def onSlideSelected(self, start=False): + """ + Slide selected in controller + """ + self.slideSelected() + + def slideSelected(self, start=False): """ Generate the preview when you click on a slide. if this is the Live Controller also display on the screen @@ -927,7 +935,7 @@ class SlideController(QtGui.QWidget): Receiver.send_message('servicemanager_next_item') return self.__checkUpdateSelectedSlide(row) - self.onSlideSelected() + self.slideSelected() def onSlideSelectedPreviousNoloop(self): self.onSlideSelectedPrevious(False) @@ -950,7 +958,7 @@ class SlideController(QtGui.QWidget): else: row = 0 self.__checkUpdateSelectedSlide(row) - self.onSlideSelected() + self.slideSelected() def __checkUpdateSelectedSlide(self, row): if row + 1 < self.previewListWidget.rowCount(): @@ -971,7 +979,7 @@ class SlideController(QtGui.QWidget): else: self.previewListWidget.selectRow( self.previewListWidget.rowCount() - 1) - self.onSlideSelected() + self.slideSelected() def onStartLoop(self): """ diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index 4f9268b3e..b76fd7d4c 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -70,11 +70,9 @@ class Controller(object): Receiver.send_message(u'maindisplay_hide', HideMode.Screen) self.stop() elif hide_mode == HideMode.Theme: - Receiver.send_message(u'maindisplay_hide', HideMode.Theme) - self.blank() + self.blank(hide_mode) elif hide_mode == HideMode.Blank: - Receiver.send_message(u'maindisplay_hide', HideMode.Blank) - self.blank() + self.blank(hide_mode) else: self.doc.start_presentation() Receiver.send_message(u'maindisplay_hide', HideMode.Screen) @@ -182,7 +180,7 @@ class Controller(object): #self.doc.slidenumber = 0 #self.timer.stop() - def blank(self): + def blank(self, hide_mode): """ Instruct the controller to blank the presentation """ @@ -193,6 +191,8 @@ class Controller(object): return if not self.doc.is_active(): return + if hide_mode == HideMode.Theme: + Receiver.send_message(u'maindisplay_hide', HideMode.Theme) self.doc.blank_screen() def stop(self): @@ -363,8 +363,9 @@ class MessageListener(object): React to the message to blank the display """ is_live = message[1] + hide_mode = message[2] if is_live: - self.live_handler.blank() + self.live_handler.blank(hide_mode) def unblank(self, message): """ From 4bc46598114da36468d48aff363dd29e671c4900 Mon Sep 17 00:00:00 2001 From: Wesley Stout Date: Wed, 13 Apr 2011 17:13:53 -0500 Subject: [PATCH 076/148] added info about usb projector connections to dualdisplay.rst and also added a link to the dual display in the troubleshooting.rst --- documentation/manual/source/dualmonitors.rst | 11 +++++++++++ documentation/manual/source/troubleshooting.rst | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index 3e1a8d210..00a5a9dbe 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -1,3 +1,5 @@ +.. _dualmonitors: + ================== Dual Monitor Setup ================== @@ -32,6 +34,15 @@ projector hooked up to your computer as the second monitor. With the option of extending your desktop across the second monitor, or your operating system's equivalent. +**Special Note For Projectors Using USB Connections** + +We have experienced difficulties with users using a projector with a USB +connection. It seems that third party software many times is required to +properly setup dual monitors. When possible, it is best to use a direct output +(VGA, DVI, HDMI, S-Video) from your machine's video card. If a USB connection +is your only option please carefully read the manual from the manufacture on +proper setup. + Microsoft Windows ----------------- diff --git a/documentation/manual/source/troubleshooting.rst b/documentation/manual/source/troubleshooting.rst index 1d200ed8e..5452d99cb 100644 --- a/documentation/manual/source/troubleshooting.rst +++ b/documentation/manual/source/troubleshooting.rst @@ -175,3 +175,19 @@ only download the section you search for. If you do not have an internet connection where you intend to use OpenLP you will need another scripture source. For more information about acquiring Bibles please see :ref:`bibleimporter`. +I am using high amounts of RAM when showing PowerPoint or Impress slides +------------------------------------------------------------------------ + +The reason OpenLP usa greater amounts of RAM is because it does not load the +presentation by itself. OpenLP uses PowerPoint or Impress to load the +presentation. Then OpenLP displays images of each slide. This results in the +higher than expected RAM usage. + +OpenLP is not displaying correctly, or on the correct screen +------------------------------------------------------------ + +Please read the documentation on :ref:`dualmonitors`. It is very important to +have dual monitors setup properly for OpenLP to function as expected. + + + From cfa815e1dc68ea0ca76cf99bf1877a4c811f369c Mon Sep 17 00:00:00 2001 From: Wesley Stout Date: Wed, 13 Apr 2011 17:22:09 -0500 Subject: [PATCH 077/148] added notes about powerpoint ram usage and directed people to the dual monitor section in dualmonitor.rst and addressed dual monitors/projectors using usb connections in dualmonitors.rst --- documentation/manual/source/troubleshooting.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/manual/source/troubleshooting.rst b/documentation/manual/source/troubleshooting.rst index 5452d99cb..f55c19e59 100644 --- a/documentation/manual/source/troubleshooting.rst +++ b/documentation/manual/source/troubleshooting.rst @@ -178,7 +178,7 @@ source. For more information about acquiring Bibles please see :ref:`bibleimport I am using high amounts of RAM when showing PowerPoint or Impress slides ------------------------------------------------------------------------ -The reason OpenLP usa greater amounts of RAM is because it does not load the +The reason OpenLP uses greater amounts of RAM is because it does not load the presentation by itself. OpenLP uses PowerPoint or Impress to load the presentation. Then OpenLP displays images of each slide. This results in the higher than expected RAM usage. From f2f49acd399e0780b3cbd85e2af0fd36148a6e62 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 14 Apr 2011 15:53:02 +0200 Subject: [PATCH 078/148] added ability to change language in a spelledit --- openlp/core/lib/__init__.py | 2 +- openlp/core/lib/spelltextedit.py | 32 +++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 491f3e652..89eeb6ad4 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -274,8 +274,8 @@ def check_directory_exists(dir): from listwidgetwithdnd import ListWidgetWithDnD from displaytags import DisplayTags -from spelltextedit import SpellTextEdit from eventreceiver import Receiver +from spelltextedit import SpellTextEdit from imagemanager import ImageManager from settingsmanager import SettingsManager from plugin import PluginStatus, StringContent, Plugin diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index 95befad09..a99539775 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -36,7 +36,9 @@ except ImportError: # http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check from PyQt4 import QtCore, QtGui + from openlp.core.lib import translate, DisplayTags +from openlp.core.lib.ui import checkable_action log = logging.getLogger(__name__) @@ -80,6 +82,19 @@ class SpellTextEdit(QtGui.QPlainTextEdit): if not cursor.hasSelection(): cursor.select(QtGui.QTextCursor.WordUnderCursor) self.setTextCursor(cursor) + # Add menu with available languages. + if ENCHANT_AVAILABLE: + lang_menu = QtGui.QMenu( + translate('OpenLP.SpellTextEdit', 'Language:')) + for lang in enchant.list_languages(): + action = checkable_action( + lang_menu, lang, lang == self.dictionary.tag) + action.setText(lang) + lang_menu.addAction(action) + popupMenu.insertSeparator(popupMenu.actions()[0]) + popupMenu.insertMenu(popupMenu.actions()[0], lang_menu) + QtCore.QObject.connect(lang_menu, + QtCore.SIGNAL(u'triggered(QAction*)'), self.setLanguage) # Check if the selected word is misspelled and offer spelling # suggestions if it is. if ENCHANT_AVAILABLE and self.textCursor().hasSelection(): @@ -93,19 +108,30 @@ class SpellTextEdit(QtGui.QPlainTextEdit): spell_menu.addAction(action) # Only add the spelling suggests to the menu if there are # suggestions. - if len(spell_menu.actions()) != 0: - popupMenu.insertSeparator(popupMenu.actions()[0]) + if len(spell_menu.actions()): popupMenu.insertMenu(popupMenu.actions()[0], spell_menu) tagMenu = QtGui.QMenu(translate('OpenLP.SpellTextEdit', 'Formatting Tags')) for html in DisplayTags.get_html_tags(): - action = SpellAction( html[u'desc'], tagMenu) + action = SpellAction(html[u'desc'], tagMenu) action.correct.connect(self.htmlTag) tagMenu.addAction(action) popupMenu.insertSeparator(popupMenu.actions()[0]) popupMenu.insertMenu(popupMenu.actions()[0], tagMenu) popupMenu.exec_(event.globalPos()) + def setLanguage(self, action): + """ + Changes the language for this spelltextedit. + + ``action`` + The action. + """ + self.dictionary = enchant.Dict(action.text()) + self.highlighter.spellingDictionary = self.dictionary + self.highlighter.highlightBlock(self.toPlainText()) + self.highlighter.rehighlight() + def correctWord(self, word): """ Replaces the selected text with word. From 27e9edad517fa75d09c9bafa7b42b296bdc3d1ea Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 14 Apr 2011 16:51:05 +0200 Subject: [PATCH 079/148] fixed wrong parentage --- openlp/core/ui/printserviceform.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 01b937d61..0de20d8a9 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -222,6 +222,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): unicode(datetime.timedelta(seconds=tme)), title) # Add the custom service notes: if self.footerTextEdit.toPlainText(): + div = self._addChildToParent(u'div', parent=html_data.body) self._addChildToParent(u'span', translate('OpenLP.ServiceManager', u'Custom Service Notes:'), div, u'class', u'customNotesTitle') self._addChildToParent( From 83e06b6eb1e08e83b0f7b96c44d5e214575b71ef Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 14 Apr 2011 20:05:00 +0200 Subject: [PATCH 080/148] don't allow to change the up/down shortcuts in the slidecontrollers --- openlp/core/lib/ui.py | 3 +-- openlp/core/ui/slidecontroller.py | 10 ++++------ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 3365b32a0..d54135937 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -87,7 +87,6 @@ class UiStrings(object): OpenService = translate('OpenLP.Ui', 'Open Service') Preview = translate('OpenLP.Ui', 'Preview') PreviewPanel = translate('OpenLP.Ui', 'Preview Panel') - PreviewToolbar = translate('OpenLP.Ui', 'Preview Toolbar') PrintServiceOrder = translate('OpenLP.Ui', 'Print Service Order') ReplaceBG = translate('OpenLP.Ui', 'Replace Background') ReplaceLiveBG = translate('OpenLP.Ui', 'Replace Live Background') @@ -427,4 +426,4 @@ def find_and_set_in_combo_box(combo_box, value_to_find): if index == -1: # Not Found. index = 0 - combo_box.setCurrentIndex(index) \ No newline at end of file + combo_box.setCurrentIndex(index) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 4f5ed1ea7..7a26bea19 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -368,10 +368,8 @@ class SlideController(QtGui.QWidget): self.previousItem.setObjectName(u'previousItemPreview') self.nextItem.setObjectName(u'nextItemPreview') action_list = ActionList.get_instance() - action_list.add_category( - UiStrings.PreviewToolbar, CategoryOrder.standardToolbar) - action_list.add_action(self.previousItem, UiStrings.PreviewToolbar) - action_list.add_action(self.nextItem, UiStrings.PreviewToolbar) + action_list.add_action(self.previousItem) + action_list.add_action(self.nextItem) def setLiveHotkeys(self, parent=None): self.previousItem.setObjectName(u'previousItemLive') @@ -379,8 +377,8 @@ class SlideController(QtGui.QWidget): action_list = ActionList.get_instance() action_list.add_category( UiStrings.LiveToolbar, CategoryOrder.standardToolbar) - action_list.add_action(self.previousItem, UiStrings.LiveToolbar) - action_list.add_action(self.nextItem, UiStrings.LiveToolbar) + action_list.add_action(self.previousItem) + action_list.add_action(self.nextItem) self.previousService = shortcut_action(parent, u'previousService', [QtCore.Qt.Key_Left], self.servicePrevious, UiStrings.LiveToolbar) self.previousService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) From 206cd90639eac949f23198347f482c1e3b718b2d Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 14 Apr 2011 19:30:53 +0100 Subject: [PATCH 081/148] Finished --- openlp/core/lib/plugin.py | 4 -- openlp/core/lib/pluginmanager.py | 13 ++---- openlp/core/ui/settingsform.py | 55 +++++++++++--------------- openlp/plugins/bibles/lib/mediaitem.py | 3 ++ 4 files changed, 28 insertions(+), 47 deletions(-) diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index e4359f6b0..a6cc5df63 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -290,8 +290,6 @@ class Plugin(QtCore.QObject): if self.mediaItem: self.mediaItem.initialise() self.mediadock.insert_dock(self.mediaItem, self.icon, self.weight) - if self.settings_tab: - self.settingsForm.insertTab(self.settings_tab, self.weight) def finalise(self): """ @@ -299,8 +297,6 @@ class Plugin(QtCore.QObject): """ if self.mediaItem: self.mediadock.remove_dock(self.mediaItem) - if self.settings_tab: - self.settingsForm.removeTab(self.settings_tab) def usesTheme(self, theme): """ diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index 6f1222276..0fddc75c4 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -137,7 +137,7 @@ class PluginManager(object): if plugin.status is not PluginStatus.Disabled: plugin.mediaItem = plugin.getMediaManagerItem() - def hook_settings_tabs(self, settingsform=None): + def hook_settings_tabs(self, settings_form=None): """ Loop through all the plugins. If a plugin has a valid settings tab item, add it to the settings tab. @@ -148,15 +148,8 @@ class PluginManager(object): """ for plugin in self.plugins: if plugin.status is not PluginStatus.Disabled: - plugin.settings_tab = plugin.getSettingsTab(settingsform) - visible_title = plugin.getString(StringContent.VisibleName) - if plugin.settings_tab and plugin.isActive(): - log.debug(u'Inserting settings tab item from %s' % - visible_title[u'title']) - settingsform.insertTab(plugin.settings_tab, plugin.weight) - else: - log.debug( - u'No tab settings in %s' % visible_title[u'title']) + plugin.settings_tab = plugin.getSettingsTab(settings_form) + settings_form.plugins = self.plugins def hook_import_menu(self, import_menu): """ diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 72e1b7fa4..6d1680b53 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -30,7 +30,7 @@ import logging from PyQt4 import QtGui, QtCore -from openlp.core.lib import Receiver, build_icon +from openlp.core.lib import Receiver, build_icon, PluginStatus from openlp.core.ui import AdvancedTab, GeneralTab, ThemesTab from settingsdialog import Ui_SettingsDialog @@ -47,53 +47,42 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): QtGui.QDialog.__init__(self, parent) self.setupUi(self) # General tab - generalTab = GeneralTab(self, screens) - self.insertTab(generalTab, 1) + self.generalTab = GeneralTab(self, screens) # Themes tab - themesTab = ThemesTab(self, mainWindow) - self.insertTab(themesTab, 2) + self.themesTab = ThemesTab(self, mainWindow) # Advanced tab - advancedTab = AdvancedTab(self, ) - self.insertTab(advancedTab, 3) + self.advancedTab = AdvancedTab(self) def exec_(self): # load all the settings - for tabIndex in range(0, self.stackedLayout.count()): - self.stackedLayout.widget(tabIndex).load() + self.settingListWidget.clear() + for tabIndex in range(0, self.stackedLayout.count() + 1): + # take at 0 and the rest shuffell up. + self.stackedLayout.takeAt(0) + self.insertTab(self.generalTab, 0, PluginStatus.Active) + self.insertTab(self.themesTab, 1, PluginStatus.Active) + self.insertTab(self.advancedTab, 2, PluginStatus.Active) + count = 3 + for plugin in self.plugins: + if plugin.settings_tab: + self.insertTab(plugin.settings_tab, count, plugin.status) + count += 1 self.settingListWidget.setCurrentRow(0) return QtGui.QDialog.exec_(self) - def insertTab(self, tab, location): + def insertTab(self, tab, location, is_active): """ Add a tab to the form at a specific location """ log.debug(u'Inserting %s tab' % tab.tabTitle) - # 14 : There are 3 tables currently and locations starts at -10 - match = False - for tabIndex in range(0, self.stackedLayout.count()): - if self.stackedLayout.widget(tabIndex): - if self.stackedLayout.widget(tabIndex).tabTitleVisible == \ - tab.tabTitleVisible: - self.stackedLayout.widget(tabIndex).setHidden(False) - match = True - break - if not match: - pos = self.stackedLayout.addWidget(tab) + pos = self.stackedLayout.addWidget(tab) + if is_active: item_name = QtGui.QListWidgetItem(tab.tabTitleVisible) icon = build_icon(tab.icon_path) item_name.setIcon(icon) - self.settingListWidget.insertItem(14 + location, item_name) - - def removeTab(self, tab): - """ - Remove a tab from the form - """ - log.debug(u'remove %s tab' % tab.tabTitleVisible) - for tabIndex in range(0, self.stackedLayout.count()): - if self.stackedLayout.widget(tabIndex): - if self.stackedLayout.widget(tabIndex).tabTitleVisible == \ - tab.tabTitleVisible: - self.settingListWidget.item(tabIndex).setHidden(True) + self.settingListWidget.insertItem(location, item_name) + else: + self.stackedLayout.takeAt(location) def accept(self): """ diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index b3ffff87c..736d3d82e 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -836,6 +836,9 @@ class BibleMediaItem(MediaManagerItem): return u'{su}%s{/su}' % verse_text def onlayoutStyleComboBoxChanged(self): + self.settings.layout_style = self.quickLayoutComboBox.currentIndex() + self.settings.layoutStyleComboBox.setCurrentIndex( + self.settings.layout_style) QtCore.QSettings().setValue( self.settingsSection + u'/verse layout style', QtCore.QVariant(self.settings.layout_style)) From 4dd70d454ff6c097f0afd002cfcd465c08bfcabe Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 14 Apr 2011 19:55:41 +0100 Subject: [PATCH 082/148] Fix Postsetup --- openlp/core/ui/settingsform.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 6d1680b53..949d907b4 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -106,5 +106,9 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ Run any post-setup code for the tabs on the form """ - for tabIndex in range(0, self.stackedLayout.count()): - self.stackedLayout.widget(tabIndex).postSetUp() + self.generalTab.postSetUp() + self.themesTab.postSetUp() + self.advancedTab.postSetUp() + for plugin in self.plugins: + if plugin.settings_tab: + plugin.settings_tab.postSetUp() From 77559e021071bef7bae19337ac2edbc7d58d8813 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 14 Apr 2011 23:32:21 +0200 Subject: [PATCH 083/148] started to implement #746243 Fixes: https://launchpad.net/bugs/746243 --- openlp/core/lib/searchedit.py | 14 ++++++++++++++ openlp/plugins/songs/lib/mediaitem.py | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/openlp/core/lib/searchedit.py b/openlp/core/lib/searchedit.py index d32961ef9..00e0f3ed3 100644 --- a/openlp/core/lib/searchedit.py +++ b/openlp/core/lib/searchedit.py @@ -110,6 +110,20 @@ class SearchEdit(QtGui.QLineEdit): """ return self._currentSearchType + def setCurrentSearchType(self, identifier): + """ + Set a new current search type. + + ``identifier`` + The search type identifier (int). + """ + menu = self.menuButton.menu() + for action in menu.actions(): + if identifier == action.data().toInt()[0]: + self.menuButton.setDefaultAction(action) + self._currentSearchType = identifier + return True + def setSearchTypes(self, items): """ A list of tuples to be used in the search type menu. The first item in diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index e2882ed29..2ce2478cb 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -156,8 +156,17 @@ class SongMediaItem(MediaManagerItem): (SongSearch.Themes, u':/slides/slide_theme.png', UiStrings.Themes) ]) self.configUpdated() + # FIXME: Saved search type need to be considered when loading the list. + self.searchTextEdit.setCurrentSearchType(QtCore.QSettings().value( + u'%s/last search type' % self.settingsSection, + QtCore.QVariant(SongSearch.Entire)).toInt()[0]) def onSearchTextButtonClick(self): + # Save the current search type to the config. so it can be restored. + QtCore.QSettings().setValue(u'%s/last search type' % + self.settingsSection, + QtCore.QVariant(self.searchTextEdit.currentSearchType())) + # Reload the list considering the new search type. search_keywords = unicode(self.searchTextEdit.displayText()) search_results = [] search_type = self.searchTextEdit.currentSearchType() From 4286f6389dda9888a90b61857e34ea7765c43d81 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 14 Apr 2011 22:34:01 +0100 Subject: [PATCH 084/148] Switching from ppt to songs now fine --- openlp/core/lib/htmlbuilder.py | 8 ++++---- openlp/core/ui/slidecontroller.py | 10 ++++++---- openlp/plugins/presentations/lib/messagelistener.py | 5 ----- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 2ba235265..1f2d2498d 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -343,11 +343,11 @@ def build_html(item, screen, alert, islive, background, image=None): webkitvers = webkit_version() # Image generated and poked in if background: - bgimage = u'src="data:image/png;base64,%s"' % background + bgimage_src = u'src="data:image/png;base64,%s"' % background elif item.bg_image_bytes: - bgimage = u'src="data:image/png;base64,%s"' % item.bg_image_bytes + bgimage_src = u'src="data:image/png;base64,%s"' % item.bg_image_bytes else: - bgimage = u'style="display:none;"' + bgimage_src = u'style="display:none;"' if image: image_src = u'src="data:image/png;base64,%s"' % image else: @@ -359,7 +359,7 @@ def build_html(item, screen, alert, islive, background, image=None): build_lyrics_css(item, webkitvers), u'true' if theme and theme.display_slide_transition and islive \ else u'false', - bgimage, image_src, + bgimage_src, image_src, build_lyrics_html(item, webkitvers)) return html diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index b940b1e73..7110ddf02 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -365,7 +365,7 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged) def setPreviewHotkeys(self, parent=None): - self.previousItem.setObjectName(u'previousItemPreview') + self.previousItem.setObjectName(u'previousItemPreview') self.nextItem.setObjectName(u'nextItemPreview') action_list = ActionList.get_instance() action_list.add_category( @@ -374,7 +374,7 @@ class SlideController(QtGui.QWidget): action_list.add_action(self.nextItem, UiStrings.PreviewToolbar) def setLiveHotkeys(self, parent=None): - self.previousItem.setObjectName(u'previousItemLive') + self.previousItem.setObjectName(u'previousItemLive') self.nextItem.setObjectName(u'nextItemLive') action_list = ActionList.get_instance() action_list.add_category( @@ -575,6 +575,7 @@ class SlideController(QtGui.QWidget): log.debug(u'processManagerItem live = %s' % self.isLive) self.onStopLoop() old_item = self.serviceItem + self.serviceItem = serviceItem if old_item and self.isLive and old_item.is_capable( ItemCapabilities.ProvidesOwnDisplay): self._resetBlank() @@ -582,7 +583,6 @@ class SlideController(QtGui.QWidget): [serviceItem, self.isLive, self.hideMode(), slideno]) self.slideList = {} width = self.parent.controlSplitter.sizes()[self.split] - self.serviceItem = serviceItem self.previewListWidget.clear() self.previewListWidget.setRowCount(0) self.previewListWidget.setColumnWidth(0, width) @@ -642,7 +642,7 @@ class SlideController(QtGui.QWidget): self.__updatePreviewSelection(slideno) self.enableToolBar(serviceItem) # Pass to display for viewing. - # Postpone image build, we need to do this later to avoid theme + # Postpone image build, we need to do this later to avoid the theme # flashing on the screen if not self.serviceItem.is_image(): self.display.buildHtml(self.serviceItem) @@ -1136,6 +1136,8 @@ class SlideController(QtGui.QWidget): self.onThemeDisplay(True) elif hide_mode == HideMode.Screen: self.onHideDisplay(True) + else: + self.hidePlugin(False) def hideMode(self): """ diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index b76fd7d4c..94cd2bfa4 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -173,12 +173,8 @@ class Controller(object): Based on the handler passed at startup triggers slide show to shut down """ log.debug(u'Live = %s, shutdown' % self.is_live) - if self.is_live: - Receiver.send_message(u'maindisplay_show') self.doc.close_presentation() self.doc = None - #self.doc.slidenumber = 0 - #self.timer.stop() def blank(self, hide_mode): """ @@ -345,7 +341,6 @@ class MessageListener(object): """ is_live = message[1] if is_live: - Receiver.send_message(u'maindisplay_show') self.live_handler.shutdown() else: self.preview_handler.shutdown() From cb7e8aadb24d10cf14c8356bbe60325b4e3a3a80 Mon Sep 17 00:00:00 2001 From: Wesley Stout Date: Thu, 14 Apr 2011 21:33:22 -0500 Subject: [PATCH 085/148] grammar correction to dualmonitors.rst --- documentation/manual/source/dualmonitors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index 00a5a9dbe..29884289c 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -38,7 +38,7 @@ equivalent. We have experienced difficulties with users using a projector with a USB connection. It seems that third party software many times is required to -properly setup dual monitors. When possible, it is best to use a direct output +properly setup dual monitors. If possible, it is best to use a direct output (VGA, DVI, HDMI, S-Video) from your machine's video card. If a USB connection is your only option please carefully read the manual from the manufacture on proper setup. From 14a2e8e4c2c332984bafe52a2a63ccfd52cfe914 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 15 Apr 2011 14:55:56 +0200 Subject: [PATCH 086/148] finished work on restoring current search methods --- openlp/core/lib/searchedit.py | 1 + openlp/plugins/bibles/lib/mediaitem.py | 21 ++++++++++++++------- openlp/plugins/songs/lib/mediaitem.py | 5 ++--- openlp/plugins/songs/songsplugin.py | 2 -- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/openlp/core/lib/searchedit.py b/openlp/core/lib/searchedit.py index 00e0f3ed3..94152ef2f 100644 --- a/openlp/core/lib/searchedit.py +++ b/openlp/core/lib/searchedit.py @@ -122,6 +122,7 @@ class SearchEdit(QtGui.QLineEdit): if identifier == action.data().toInt()[0]: self.menuButton.setDefaultAction(action) self._currentSearchType = identifier + self.emit(QtCore.SIGNAL(u'searchTypeChanged(int)'), identifier) return True def setSearchTypes(self, items): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 118bdfc66..241854985 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -99,12 +99,6 @@ class BibleMediaItem(MediaManagerItem): self.quickSearchEdit = SearchEdit(self.quickTab) self.quickSearchEdit.setObjectName(u'quickSearchEdit') self.quickSearchLabel.setBuddy(self.quickSearchEdit) - self.quickSearchEdit.setSearchTypes([ - (BibleSearch.Reference, u':/bibles/bibles_search_reference.png', - translate('BiblesPlugin.MediaItem', 'Scripture Reference')), - (BibleSearch.Text, u':/bibles/bibles_search_text.png', - translate('BiblesPlugin.MediaItem', 'Text Search')) - ]) self.quickLayout.addRow(self.quickSearchLabel, self.quickSearchEdit) self.quickLayoutLabel = QtGui.QLabel(self.quickTab) self.quickLayoutLabel.setObjectName(u'quickClearLabel') @@ -295,7 +289,15 @@ class BibleMediaItem(MediaManagerItem): self.settingsSection + u'/quick bible', QtCore.QVariant( self.quickVersionComboBox.currentText())).toString() find_and_set_in_combo_box(self.quickVersionComboBox, bible) - self.updateAutoCompleter() + self.quickSearchEdit.setSearchTypes([ + (BibleSearch.Reference, u':/bibles/bibles_search_reference.png', + translate('BiblesPlugin.MediaItem', 'Scripture Reference')), + (BibleSearch.Text, u':/bibles/bibles_search_text.png', + translate('BiblesPlugin.MediaItem', 'Text Search')) + ]) + self.quickSearchEdit.setCurrentSearchType(QtCore.QSettings().value( + u'%s/last search type' % self.settingsSection, + QtCore.QVariant(BibleSearch.Reference)).toInt()[0]) self.configUpdated() log.debug(u'bible manager initialise complete') @@ -386,6 +388,11 @@ class BibleMediaItem(MediaManagerItem): completion depends on the bible. It is only updated when we are doing a reference search, otherwise the auto completion list is removed. """ + # Save the current search type to the configuration. + QtCore.QSettings().setValue(u'%s/last search type' % + self.settingsSection, + QtCore.QVariant(self.quickSearchEdit.currentSearchType())) + # Save the current bible to the configuration. QtCore.QSettings().setValue(self.settingsSection + u'/quick bible', QtCore.QVariant(self.quickVersionComboBox.currentText())) books = [] diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 2ce2478cb..5890fc76d 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -155,14 +155,13 @@ class SongMediaItem(MediaManagerItem): SongStrings.Authors), (SongSearch.Themes, u':/slides/slide_theme.png', UiStrings.Themes) ]) - self.configUpdated() - # FIXME: Saved search type need to be considered when loading the list. self.searchTextEdit.setCurrentSearchType(QtCore.QSettings().value( u'%s/last search type' % self.settingsSection, QtCore.QVariant(SongSearch.Entire)).toInt()[0]) + self.configUpdated() def onSearchTextButtonClick(self): - # Save the current search type to the config. so it can be restored. + # Save the current search type to the configuration. QtCore.QSettings().setValue(u'%s/last search type' % self.settingsSection, QtCore.QVariant(self.searchTextEdit.currentSearchType())) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index af50f3f94..4fc098949 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -70,8 +70,6 @@ class SongsPlugin(Plugin): action_list.add_action(self.SongImportItem, UiStrings.Import) action_list.add_action(self.SongExportItem, UiStrings.Export) action_list.add_action(self.toolsReindexItem, UiStrings.Tools) - self.mediaItem.displayResultsSong( - self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) def addImportMenuItem(self, import_menu): """ From 237cabfeff8744971b7dd877cd6073025ccd9df1 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 15 Apr 2011 16:10:31 +0200 Subject: [PATCH 087/148] only try to import a database when it is a v1 database, clean ups --- openlp/plugins/songs/forms/songimportform.py | 5 +- openlp/plugins/songs/lib/olp1import.py | 4 +- openlp/plugins/songs/lib/songbeamerimport.py | 106 ++++++++++--------- 3 files changed, 58 insertions(+), 57 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 468d2f341..7666d8f52 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -459,10 +459,7 @@ class SongImportForm(OpenLPWizard): """ Return a list of file from the listbox """ - files = [] - for row in range(0, listbox.count()): - files.append(unicode(listbox.item(row).text())) - return files + return [unicode(listbox.item(i).text()) for i in range(listbox.count())] def removeSelectedItems(self, listbox): """ diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 232b17db0..61cdcbe06 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -61,10 +61,12 @@ class OpenLP1SongImport(SongImport): """ Run the import for an openlp.org 1.x song database. """ - # Connect to the database + if not self.import_source.endswith(u'.olp'): + return False encoding = self.get_encoding() if not encoding: return False + # Connect to the database connection = sqlite.connect(self.import_source, mode=0444, encoding=(encoding, 'replace')) cursor = connection.cursor() diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index 5cd2c4329..f90c05965 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -78,58 +78,60 @@ class SongBeamerImport(SongImport): """ Receive a single file or a list of files to import. """ - if isinstance(self.import_source, list): - self.import_wizard.progressBar.setMaximum( - len(self.import_source)) - for file in self.import_source: - # TODO: check that it is a valid SongBeamer file - self.set_defaults() - self.current_verse = u'' - self.current_verse_type = VerseType.Tags[VerseType.Verse] - read_verses = False - file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name, 0) - if os.path.isfile(file): - detect_file = open(file, u'r') - details = chardet.detect(detect_file.read(2048)) - detect_file.close() - infile = codecs.open(file, u'r', details['encoding']) - songData = infile.readlines() - infile.close() - else: - return False - self.title = file_name.split('.sng')[0] - read_verses = False - for line in songData: - # Just make sure that the line is of the type 'Unicode'. - line = unicode(line).strip() - if line.startswith(u'#') and not read_verses: - self.parse_tags(line) - elif line.startswith(u'---'): - if self.current_verse: - self.replace_html_tags() - self.add_verse(self.current_verse, - self.current_verse_type) - self.current_verse = u'' - self.current_verse_type = VerseType.Tags[VerseType.Verse] - read_verses = True - verse_start = True - elif read_verses: - if verse_start: - verse_start = False - if not self.check_verse_marks(line): - self.current_verse = line + u'\n' - else: - self.current_verse += line + u'\n' - if self.current_verse: - self.replace_html_tags() - self.add_verse(self.current_verse, self.current_verse_type) - if self.check_complete(): - self.finish() - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name) - return True + self.import_wizard.progressBar.setMaximum(len(self.import_source)) + if not isinstance(self.import_source, list): + return False + for file in self.import_source: + # TODO: check that it is a valid SongBeamer file + if self.stop_import_flag: + return False + self.set_defaults() + self.current_verse = u'' + self.current_verse_type = VerseType.Tags[VerseType.Verse] + read_verses = False + file_name = os.path.split(file)[1] + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % file_name, 0) + if os.path.isfile(file): + detect_file = open(file, u'r') + details = chardet.detect(detect_file.read(2048)) + detect_file.close() + infile = codecs.open(file, u'r', details['encoding']) + songData = infile.readlines() + infile.close() + else: + return False + self.title = file_name.split('.sng')[0] + read_verses = False + for line in songData: + # Just make sure that the line is of the type 'Unicode'. + line = unicode(line).strip() + if line.startswith(u'#') and not read_verses: + self.parse_tags(line) + elif line.startswith(u'---'): + if self.current_verse: + self.replace_html_tags() + self.add_verse(self.current_verse, + self.current_verse_type) + self.current_verse = u'' + self.current_verse_type = VerseType.Tags[VerseType.Verse] + read_verses = True + verse_start = True + elif read_verses: + if verse_start: + verse_start = False + if not self.check_verse_marks(line): + self.current_verse = line + u'\n' + else: + self.current_verse += line + u'\n' + if self.current_verse: + self.replace_html_tags() + self.add_verse(self.current_verse, self.current_verse_type) + if self.check_complete(): + self.finish() + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % file_name) + return True def replace_html_tags(self): """ From a13cf4994078f0d9dbaa1410ce774ed879de436a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 15 Apr 2011 18:01:15 +0200 Subject: [PATCH 088/148] idea to improve song import feedback --- openlp/core/ui/wizard.py | 1 + openlp/plugins/songs/forms/songimportform.py | 13 ++++++++----- openlp/plugins/songs/lib/cclifileimport.py | 1 - openlp/plugins/songs/lib/easislidesimport.py | 1 - openlp/plugins/songs/lib/ewimport.py | 3 ++- openlp/plugins/songs/lib/foilpresenterimport.py | 2 -- openlp/plugins/songs/lib/olp1import.py | 5 ++++- openlp/plugins/songs/lib/olpimport.py | 4 +++- openlp/plugins/songs/lib/oooimport.py | 9 ++------- openlp/plugins/songs/lib/openlyricsimport.py | 1 - openlp/plugins/songs/lib/opensongimport.py | 3 ++- openlp/plugins/songs/lib/sofimport.py | 2 +- openlp/plugins/songs/lib/songbeamerimport.py | 1 - openlp/plugins/songs/lib/songshowplusimport.py | 3 +-- openlp/plugins/songs/lib/wowimport.py | 1 - 15 files changed, 24 insertions(+), 26 deletions(-) diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index cb3a75294..a27086b33 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -132,6 +132,7 @@ class OpenLPWizard(QtGui.QWizard): self.progressLayout.addWidget(self.progressLabel) self.progressBar = QtGui.QProgressBar(self.progressPage) self.progressBar.setObjectName(u'progressBar') + self.progressLabel.setWordWrap(True) self.progressLayout.addWidget(self.progressBar) self.addPage(self.progressPage) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 7666d8f52..786bbb960 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -740,12 +740,15 @@ class SongImportForm(OpenLPWizard): importer = self.plugin.importSongs(SongFormat.FoilPresenter, filenames=self.getListOfFiles(self.foilPresenterFileListWidget) ) - if importer.do_import(): - self.progressLabel.setText(WizardStrings.FinishedImport) - else: - self.progressLabel.setText( + message = importer.do_import() + if isinstance(message, bool) and not message: + self.progressLabel.setText(self.progressLabel.setText( translate('SongsPlugin.SongImportForm', - 'Your song import failed.')) + 'Your song import failed.'))) + elif not isinstance(message, bool) and message: + self.progressLabel.setText(message) + else: + self.progressLabel.setText(WizardStrings.FinishedImport) def addFileSelectItem(self, prefix, obj_prefix=None, can_disable=False, single_select=False): diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 03a86c455..c63a9fa98 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -93,7 +93,6 @@ class CCLIFileImport(SongImport): song_count += 1 if self.stop_import_flag: return False - return True def do_import_usr_file(self, textList): """ diff --git a/openlp/plugins/songs/lib/easislidesimport.py b/openlp/plugins/songs/lib/easislidesimport.py index d326e83ca..8ef6dc1a7 100644 --- a/openlp/plugins/songs/lib/easislidesimport.py +++ b/openlp/plugins/songs/lib/easislidesimport.py @@ -75,7 +75,6 @@ class EasiSlidesImport(SongImport): return False elif self.commit: self.finish() - return True def _parse_song(self, song): self._success = True diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index e68b19494..43be5bd07 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -273,7 +273,8 @@ class EasyWorshipSongImport(SongImport): self.import_wizard.incrementProgressBar(u'') db_file.close() self.memo_file.close() - return success + if not success: + return False def find_field(self, field_name): return [i for i, x in enumerate(self.field_descs) \ diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index 44ea56147..fef2bd41b 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -131,7 +131,6 @@ class FoilPresenterImport(SongImport): log.debug(u'File could not be imported: %s' % file_path) except etree.XMLSyntaxError: log.exception(u'XML syntax error in file %s' % file_path) - return True class FoilPresenter(object): @@ -235,7 +234,6 @@ class FoilPresenter(object): self._process_topics(foilpresenterfolie, song) clean_song(self.manager, song) self.manager.save_object(song) - return song.id def _child(self, element): """ diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 61cdcbe06..b4995caed 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -32,6 +32,7 @@ import logging from chardet.universaldetector import UniversalDetector import sqlite +from openlp.core.lib import translate from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import retrieve_windows_encoding from songimport import SongImport @@ -62,7 +63,9 @@ class OpenLP1SongImport(SongImport): Run the import for an openlp.org 1.x song database. """ if not self.import_source.endswith(u'.olp'): - return False + return translate('SongsPlugin.OpenLP1SongImport', 'The file you ' + 'were trying to import is not a valid openlp.org 1.x song ' + 'database.') encoding = self.get_encoding() if not encoding: return False diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index e8b9f0dd7..4e0116198 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -100,6 +100,9 @@ class OpenLPSongImport(SongImport): """ Run the import for an OpenLP version 2 song database. """ + if not self.import_source.endswith(u'.sqlite'): + return translate('SongsPlugin.OpenLPSongImport', 'The file you were' + ' trying to import is not a valid OpenLP 2.0 song database.') engine = create_engine(self.import_source) source_meta = MetaData() source_meta.reflect(engine) @@ -217,4 +220,3 @@ class OpenLPSongImport(SongImport): if self.stop_import_flag: return False engine.dispose() - return True diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 2ab66820c..47cdace26 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -56,13 +56,11 @@ class OooImport(SongImport): self.process_started = False def do_import(self): - self.stop_import_flag = False - self.import_wizard.progressBar.setMaximum(0) self.start_ooo() + self.import_wizard.progressBar.setMaximum(self.import_source) for filename in self.import_source: if self.stop_import_flag: - self.import_wizard.incrementProgressBar(u'Import cancelled', 0) - return + return False filename = unicode(filename) if os.path.isfile(filename): self.open_ooo_file(filename) @@ -70,9 +68,6 @@ class OooImport(SongImport): self.process_ooo_document() self.close_ooo_file() self.close_ooo() - self.import_wizard.progressBar.setMaximum(1) - self.import_wizard.incrementProgressBar(u'', 1) - return True def process_ooo_document(self): """ diff --git a/openlp/plugins/songs/lib/openlyricsimport.py b/openlp/plugins/songs/lib/openlyricsimport.py index c29abc0b5..c72f1af89 100644 --- a/openlp/plugins/songs/lib/openlyricsimport.py +++ b/openlp/plugins/songs/lib/openlyricsimport.py @@ -71,4 +71,3 @@ class OpenLyricsImport(SongImport): log.debug(u'File could not be imported: %s' % file_path) except etree.XMLSyntaxError: log.exception(u'XML syntax error in file %s' % file_path) - return True diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 37fc2b5ef..a5798dc33 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -163,7 +163,8 @@ class OpenSongImport(SongImport): else: success = False break - return success + if not success: + return False def do_import_file(self, file): """ diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 0b7e0c139..84955f33a 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -89,7 +89,7 @@ class SofImport(OooImport): while paragraphs.hasMoreElements(): if self.stop_import_flag: self.import_wizard.incrementProgressBar(u'Import cancelled', 0) - return + return False paragraph = paragraphs.nextElement() if paragraph.supportsService("com.sun.star.text.Paragraph"): self.process_paragraph(paragraph) diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index f90c05965..fcfa2f44b 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -131,7 +131,6 @@ class SongBeamerImport(SongImport): self.finish() self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % file_name) - return True def replace_html_tags(self): """ diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index d5ab85f89..c7a6b6a3c 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -107,7 +107,7 @@ class SongShowPlusImport(SongImport): self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % file_name, 0) songData = open(file, 'rb') - while (1): + while True: blockKey, = struct.unpack("I", songData.read(4)) # The file ends with 4 NUL's if blockKey == 0: @@ -173,7 +173,6 @@ class SongShowPlusImport(SongImport): self.finish() self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % file_name) - return True def toOpenLPVerseTag(self, verseName, ignoreUnique=False): if verseName.find(" ") != -1: diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index cbdd40758..e6495a2b9 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -156,4 +156,3 @@ class WowImport(SongImport): self.finish() self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % file_name) - return True From 269c4fa044ef9093793027f0371aed005ab06336 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 15 Apr 2011 18:17:51 +0100 Subject: [PATCH 089/148] Fixups --- openlp/core/lib/plugin.py | 28 ++++++++++++++-------------- openlp/core/ui/advancedtab.py | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index a6cc5df63..2ec1045bb 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -115,7 +115,7 @@ class Plugin(QtCore.QObject): """ log.info(u'loaded') - def __init__(self, name, pluginHelpers=None, mediaItemClass=None, + def __init__(self, name, plugin_helpers=None, media_item_class=None, settings_tab_class=None, version=None): """ This is the constructor for the plugin object. This provides an easy @@ -132,10 +132,10 @@ class Plugin(QtCore.QObject): ``version`` Defaults to *None*. The version of the plugin. - ``pluginHelpers`` + ``plugin_helpers`` Defaults to *None*. A list of helper objects. - ``mediaItemClass`` + ``media_item_class`` The class name of the plugin's media item. ``settings_tab_class`` @@ -153,20 +153,20 @@ class Plugin(QtCore.QObject): self.version = get_application_version()[u'version'] self.settingsSection = self.name.lower() self.icon = None - self.mediaItemClass = mediaItemClass + self.media_item_class = media_item_class self.settings_tab_class = settings_tab_class self.weight = 0 self.status = PluginStatus.Inactive # Set up logging self.log = logging.getLogger(self.name) - self.previewController = pluginHelpers[u'preview'] - self.liveController = pluginHelpers[u'live'] - self.renderManager = pluginHelpers[u'render'] - self.serviceManager = pluginHelpers[u'service'] - self.settingsForm = pluginHelpers[u'settings form'] - self.mediadock = pluginHelpers[u'toolbox'] - self.pluginManager = pluginHelpers[u'pluginmanager'] - self.formparent = pluginHelpers[u'formparent'] + self.previewController = plugin_helpers[u'preview'] + self.liveController = plugin_helpers[u'live'] + self.renderManager = plugin_helpers[u'render'] + self.serviceManager = plugin_helpers[u'service'] + self.settingsForm = plugin_helpers[u'settings form'] + self.mediadock = plugin_helpers[u'toolbox'] + self.pluginManager = plugin_helpers[u'pluginmanager'] + self.formparent = plugin_helpers[u'formparent'] QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'%s_add_service_item' % self.name), self.processAddServiceEvent) @@ -213,8 +213,8 @@ class Plugin(QtCore.QObject): Construct a MediaManagerItem object with all the buttons and things you need, and return it for integration into openlp.org. """ - if self.mediaItemClass: - return self.mediaItemClass(self, self, self.icon) + if self.media_item_class: + return self.media_item_class(self, self, self.icon) return None def addImportMenuItem(self, importMenu): diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 3d9321fe1..199ebff60 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -45,7 +45,7 @@ class AdvancedTab(SettingsTab): SettingsTab.__init__(self, parent ,u'Advanced', generalTranslated) self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' - self.icon_path = u':/icon/openlp-logo-16x16.png' + self.icon_path = u':/system/system_settings.png' def setupUi(self): """ From 7dfce92bc2865a4b2a3e6c3ad5a6a1763b9b6147 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 15 Apr 2011 23:18:49 +0200 Subject: [PATCH 090/148] Fixed up the Bible import documentation so that we don't have the same two screenshots all the way down the page. --- documentation/manual/source/bibles.rst | 105 ++++++++++--------------- 1 file changed, 40 insertions(+), 65 deletions(-) diff --git a/documentation/manual/source/bibles.rst b/documentation/manual/source/bibles.rst index 9fbae9b81..005ab72db 100644 --- a/documentation/manual/source/bibles.rst +++ b/documentation/manual/source/bibles.rst @@ -21,20 +21,35 @@ You will see the Bible Importer window, click :guilabel:`Next`. .. image:: pics/bibleimport01.png -After clicking :guilabel:`Next` you can select from the various types of -software that OpenLP will convert Bibles from. +After clicking :guilabel:`Next` you can select from the various types of +software that OpenLP will convert Bibles from. Click on the file folder icon to +choose the file(s) of the Bible database you want to import. See the sections +below for more information on the different formats that OpenLP will import. +Click :guilabel:`Next` to continue. .. image:: pics/bibleimport02.png -Click on the file folder icon to choose the file of the Bible database you -want to import. See the following sections for information on the different -formats that OpenLP will import. +After selecting your file(s), you'll be asked to fill in the details of the +Bible you are importing. Remember to check what information you need to display +for your Bible's translation, as some of them have strict rules around the +copyright notice. Click :guilabel:`Next` to continue. -Importing from OpenLP Version 1 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. image:: pics/bibleimportdetails1.png -Converting from OpenLP Version 1 is a simple process. First you will need to -locate your Version 1 Bibles. +After filling in the copyright details, OpenLP will start to import your Bible. +It may take some time to import your Bible so please be patient. + +.. image:: pics/bibleimportfinished1.png + +When the import has finished click :guilabel:`Finish` and you should be +ready to use your Bible in OpenLP. + +Importing from openlp.org 1.x +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Importing Bibles from openlp.org 1.x is a simple process. First you will need to +locate your version 1.x Bibles. Version 1.x Bibles have the `.bible` file +extension. Windows XP:: @@ -44,22 +59,15 @@ Windows Vista / Windows 7:: C:\ProgramData\openlp.org\Data\Bibles\ -OpenLP Version 1 Bibles have the `.bible` file extension. After selecting -all of the OpenLP Version 1 Bibles you want to convert, click :guilabel:`Next` - -.. image:: pics/bibleimportdetails1.png - -Enter your Bible name and copyright details. Click :guilabel:`Next`. It may -take some time to convert your Bibles so please be patient. - -.. image:: pics/bibleimportfinished1.png - -When the import has finished click :guilabel:`Finish` and you should be -ready to use your OpenLP Version 1 Bibles. +After selecting all of the openlp.org 1.x Bibles you want to convert, click +:guilabel:`Next` to continue the import process. Importing OSIS Bibles ^^^^^^^^^^^^^^^^^^^^^ +Importing OSIS files is very simple. Select OSIS as your import source, select +your OSIS Bible file and continue the import process. + **About OSIS Formatted Bibles** The OSIS XML standard was designed to provide a common format for distribution @@ -69,24 +77,11 @@ of electronic Bibles. More information can be found out at the `Bible Technologi If you have any software installed that is part of the `Sword Project `_ it can be easily converted. -Importing OSIS files is very simple. Select your OSIS Bible file and click -:guilabel:`Next` - -.. image:: pics/bibleimportdetails1.png - -Enter you Bible name and copyright details. Click :guilabel:`Next`. It may take -some time to convert your Bibles so please be patient. - -.. image:: pics/bibleimportfinished1.png - -Click :guilabel:`Finish` and you should be ready to use your OpenLP Version -1 Bibles. - You can use the commands below convert Bibles from that software to OSIS format. The following commands are used in all platforms and the commands are case -sensitive across all platforms. To convert a Bible using Command Prompt in -Windows or a Terminal in Linux or MAC you would type:: +sensitive across all platforms. To convert a Bible using the command prompt in +Windows or a terminal in Linux or Mac OS X you would type:: mod2osis biblename > biblename.osis @@ -114,17 +109,9 @@ You may also import downloaded bibles from OpenSong. The process is the same, except you will need to extract the bible from a zip file. This is usually done by right clicking on the downloaded file and select `Extract` or `Extract Here`. -After selecting the OpenSong Bibles you want to convert, click :guilabel:`Next` - -.. image:: pics/bibleimportdetails1.png - -Enter your Bible name and copyright details. Click :guilabel:`Next`. It may -take some time to convert your Bibles so please be patient. - -.. image:: pics/bibleimportfinished1.png - -When the import has finished then click :guilabel:`Finish` and you should now be -ready to use your OpenSong Bibles. +After selecting the OpenSong Bibles you want to import, follow the rest of the +import process. When the import has finished you should be ready to use your +OpenSong Bibles. Importing Web Download Bibles ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -139,8 +126,6 @@ as another option and does require an internet connection. To use the web download feature select web download from the import wizard. -.. image:: pics/bibleimport01.png - You can select from several options of location to download from and also what Bible translation you need. You will probably want to choose the location from where you get the best performance or has the translation you need. @@ -154,30 +139,20 @@ not be needed. .. image:: pics/webbibleproxy1.png After selecting your download location and the Bible you wish to use, click -:guilabel:`Next` When your import is completed click :guilabel:`Finish` - -.. image:: pics/biblewebcomplete.png - -You should now be ready to use the web bible. +:guilabel:`Next` to continue the import process. When your import is completed +you should now be ready to use the web bible. Importing CSV formatted Bibles ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you have a Bible in .csv format OpenLP can import it. CSV Bibles will -consist of two files a `books` file and a `verse` file. - -Select CSV from the list of Bible types to import. - -.. image:: pics/bibleimport02.png +consist of two files a `books` file and a `verse` file. Select CSV from the list +of Bible types to import. You are now ready to select your .csv files. You will need to select both your books and verse file location. .. image:: pics/csvimport1.png -After you have selected the file locations you can click :guilabel:`Next` - -.. image:: pics/bibleimportfinished1.png - -Click :guilabel:`Finish` and you should now be ready to use your imported CSV -Bible \ No newline at end of file +After you have selected the file locations you can continue with the import +process. Once it is complete you should be ready to use your imported CSV Bible. From 8090adf1bc4167ede05e137f2c68efd763b05936 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 15 Apr 2011 23:43:59 +0200 Subject: [PATCH 091/148] Made UiStrings a Singleton, and updated all usage of it. --- openlp.pyw | 4 +- openlp/core/lib/mediamanageritem.py | 12 +- openlp/core/lib/plugin.py | 18 +- openlp/core/lib/serviceitem.py | 6 +- openlp/core/lib/theme.py | 4 +- openlp/core/lib/ui.py | 176 ++++++++++-------- openlp/core/ui/aboutdialog.py | 6 +- openlp/core/ui/advancedtab.py | 6 +- openlp/core/ui/displaytagdialog.py | 6 +- openlp/core/ui/exceptionform.py | 4 +- openlp/core/ui/generaltab.py | 4 +- openlp/core/ui/mainwindow.py | 86 ++++----- openlp/core/ui/plugindialog.py | 6 +- openlp/core/ui/printservicedialog.py | 4 +- openlp/core/ui/printserviceform.py | 6 +- openlp/core/ui/servicemanager.py | 30 +-- openlp/core/ui/slidecontroller.py | 22 +-- openlp/core/ui/starttimedialog.py | 14 +- openlp/core/ui/starttimeform.py | 8 +- openlp/core/ui/themeform.py | 6 +- openlp/core/ui/thememanager.py | 6 +- openlp/core/ui/themestab.py | 4 +- openlp/core/ui/themewizard.py | 16 +- openlp/core/ui/wizard.py | 4 +- openlp/plugins/alerts/alertsplugin.py | 4 +- openlp/plugins/alerts/lib/alertstab.py | 10 +- openlp/plugins/bibles/bibleplugin.py | 10 +- .../plugins/bibles/forms/bibleimportform.py | 24 +-- openlp/plugins/bibles/lib/biblestab.py | 12 +- openlp/plugins/bibles/lib/mediaitem.py | 20 +- .../plugins/custom/forms/editcustomdialog.py | 6 +- openlp/plugins/custom/lib/mediaitem.py | 6 +- openlp/plugins/images/lib/mediaitem.py | 14 +- openlp/plugins/media/lib/mediaitem.py | 14 +- openlp/plugins/presentations/lib/mediaitem.py | 4 +- .../presentations/lib/presentationtab.py | 4 +- openlp/plugins/songs/forms/editsongdialog.py | 12 +- openlp/plugins/songs/forms/editsongform.py | 6 +- openlp/plugins/songs/forms/songexportform.py | 6 +- openlp/plugins/songs/forms/songimportform.py | 52 +++--- .../songs/forms/songmaintenancedialog.py | 20 +- .../songs/forms/songmaintenanceform.py | 4 +- openlp/plugins/songs/lib/mediaitem.py | 12 +- openlp/plugins/songs/songsplugin.py | 16 +- 44 files changed, 366 insertions(+), 348 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 5c3b8ca77..425d3c874 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -140,7 +140,7 @@ class OpenLP(QtGui.QApplication): self.sharedMemory = QtCore.QSharedMemory('OpenLP') if self.sharedMemory.attach(): status = QtGui.QMessageBox.critical(None, - UiStrings.Error, UiStrings.OpenLPStart, + UiStrings().Error, UiStrings().OpenLPStart, QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) if status == QtGui.QMessageBox.No: @@ -250,4 +250,4 @@ if __name__ == u'__main__': """ Instantiate and run the application. """ - main() + main() \ No newline at end of file diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 7671064df..e7d7bc4ec 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -435,7 +435,7 @@ class MediaManagerItem(QtGui.QWidget): item to the preview slide controller. """ if not self.listView.selectedIndexes() and not self.remoteTriggered: - QtGui.QMessageBox.information(self, UiStrings.NISp, + QtGui.QMessageBox.information(self, UiStrings().NISp, translate('OpenLP.MediaManagerItem', 'You must select one or more items to preview.')) else: @@ -453,7 +453,7 @@ class MediaManagerItem(QtGui.QWidget): item to the live slide controller. """ if not self.listView.selectedIndexes(): - QtGui.QMessageBox.information(self, UiStrings.NISp, + QtGui.QMessageBox.information(self, UiStrings().NISp, translate('OpenLP.MediaManagerItem', 'You must select one or more items to send live.')) else: @@ -468,7 +468,7 @@ class MediaManagerItem(QtGui.QWidget): Add a selected item to the current service """ if not self.listView.selectedIndexes() and not self.remoteTriggered: - QtGui.QMessageBox.information(self, UiStrings.NISp, + QtGui.QMessageBox.information(self, UiStrings().NISp, translate('OpenLP.MediaManagerItem', 'You must select one or more items.')) else: @@ -494,14 +494,14 @@ class MediaManagerItem(QtGui.QWidget): Add a selected item to an existing item in the current service. """ if not self.listView.selectedIndexes() and not self.remoteTriggered: - QtGui.QMessageBox.information(self, UiStrings.NISp, + QtGui.QMessageBox.information(self, UiStrings().NISp, translate('OpenLP.MediaManagerItem', 'You must select one or more items.')) else: log.debug(u'%s Add requested', self.plugin.name) serviceItem = self.parent.serviceManager.getServiceItem() if not serviceItem: - QtGui.QMessageBox.information(self, UiStrings.NISs, + QtGui.QMessageBox.information(self, UiStrings().NISs, translate('OpenLP.MediaManagerItem', 'You must select an existing service item to add to.')) elif self.plugin.name.lower() == serviceItem.name.lower(): @@ -554,4 +554,4 @@ class MediaManagerItem(QtGui.QWidget): item_id = remoteItem else: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] - return item_id + return item_id \ No newline at end of file diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 2ec1045bb..08be86541 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -330,28 +330,28 @@ class Plugin(QtCore.QObject): """ ## Load Action ## self.__setNameTextString(StringContent.Load, - UiStrings.Load, tooltips[u'load']) + UiStrings().Load, tooltips[u'load']) ## Import Action ## self.__setNameTextString(StringContent.Import, - UiStrings.Import, tooltips[u'import']) + UiStrings().Import, tooltips[u'import']) ## New Action ## self.__setNameTextString(StringContent.New, - UiStrings.Add, tooltips[u'new']) + UiStrings().Add, tooltips[u'new']) ## Edit Action ## self.__setNameTextString(StringContent.Edit, - UiStrings.Edit, tooltips[u'edit']) + UiStrings().Edit, tooltips[u'edit']) ## Delete Action ## self.__setNameTextString(StringContent.Delete, - UiStrings.Delete, tooltips[u'delete']) + UiStrings().Delete, tooltips[u'delete']) ## Preview Action ## self.__setNameTextString(StringContent.Preview, - UiStrings.Preview, tooltips[u'preview']) + UiStrings().Preview, tooltips[u'preview']) ## Send Live Action ## self.__setNameTextString(StringContent.Live, - UiStrings.Live, tooltips[u'live']) + UiStrings().Live, tooltips[u'live']) ## Add to Service Action ## self.__setNameTextString(StringContent.Service, - UiStrings.Service, tooltips[u'service']) + UiStrings().Service, tooltips[u'service']) def __setNameTextString(self, name, title, tooltip): """ @@ -359,4 +359,4 @@ class Plugin(QtCore.QObject): use of the singular name of the plugin object so must only be called after this has been set. """ - self.textStrings[name] = {u'title': title, u'tooltip': tooltip} + self.textStrings[name] = {u'title': title, u'tooltip': tooltip} \ No newline at end of file diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 48a277633..5de25f6aa 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -441,10 +441,10 @@ class ServiceItem(object): start = None end = None if self.start_time != 0: - start = UiStrings.StartTimeCode % \ + start = UiStrings().StartTimeCode % \ unicode(datetime.timedelta(seconds=self.start_time)) if self.media_length != 0: - end = UiStrings.LengthTime % \ + end = UiStrings().LengthTime % \ unicode(datetime.timedelta(seconds=self.media_length)) if not start and not end: return None @@ -453,4 +453,4 @@ class ServiceItem(object): elif not start and end: return end else: - return u'%s : %s' % (start, end) + return u'%s : %s' % (start, end) \ No newline at end of file diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index 134df7652..698f0d644 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -192,7 +192,7 @@ class VerticalType(object): Bottom = 2 Names = [u'top', u'middle', u'bottom'] - TranslatedNames = [UiStrings.Top, UiStrings.Middle, UiStrings.Bottom] + TranslatedNames = [UiStrings().Top, UiStrings().Middle, UiStrings().Bottom] BOOLEAN_LIST = [u'bold', u'italics', u'override', u'outline', u'shadow', @@ -637,4 +637,4 @@ class ThemeXML(object): self.font_footer_shadow_size) self.add_display(self.display_horizontal_align, self.display_vertical_align, - self.display_slide_transition) + self.display_slide_transition) \ No newline at end of file diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index bd47ee627..013231b8c 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -39,78 +39,96 @@ class UiStrings(object): """ Provide standard strings for objects to use. """ - # These strings should need a good reason to be retranslated elsewhere. - # Should some/more/less of these have an & attached? - About = translate('OpenLP.Ui', 'About') - Add = translate('OpenLP.Ui', '&Add') - Advanced = translate('OpenLP.Ui', 'Advanced') - AllFiles = translate('OpenLP.Ui', 'All Files') - Bottom = translate('OpenLP.Ui', 'Bottom') - Browse = translate('OpenLP.Ui', 'Browse...') - Cancel = translate('OpenLP.Ui', 'Cancel') - CCLINumberLabel = translate('OpenLP.Ui', 'CCLI number:') - CreateService = translate('OpenLP.Ui', 'Create a new service.') - Continuous = translate('OpenLP.Ui', 'Continuous') - Default = unicode(translate('OpenLP.Ui', 'Default')) - Delete = translate('OpenLP.Ui', '&Delete') - DisplayStyle = translate('OpenLP.Ui', 'Display style:') - Edit = translate('OpenLP.Ui', '&Edit') - EmptyField = translate('OpenLP.Ui', 'Empty Field') - Error = translate('OpenLP.Ui', 'Error') - Export = translate('OpenLP.Ui', 'Export') - File = translate('OpenLP.Ui', 'File') - FontSizePtUnit = translate('OpenLP.Ui', 'pt', - 'Abbreviated font pointsize unit') - Help = translate('OpenLP.Ui', 'Help') - Hours = translate('OpenLP.Ui', 'h', 'The abbreviated unit for hours') - Image = translate('OpenLP.Ui', 'Image') - Import = translate('OpenLP.Ui', 'Import') - LayoutStyle = translate('OpenLP.Ui', 'Layout style:') - LengthTime = unicode(translate('OpenLP.Ui', 'Length %s')) - Live = translate('OpenLP.Ui', 'Live') - LiveBGError = translate('OpenLP.Ui', 'Live Background Error') - LivePanel = translate('OpenLP.Ui', 'Live Panel') - LiveToolbar = translate('OpenLP.Ui', 'Live Toolbar') - Load = translate('OpenLP.Ui', 'Load') - Minutes = translate('OpenLP.Ui', 'm', 'The abbreviated unit for minutes') - Middle = translate('OpenLP.Ui', 'Middle') - New = translate('OpenLP.Ui', 'New') - NewService = translate('OpenLP.Ui', 'New Service') - NewTheme = translate('OpenLP.Ui', 'New Theme') - NFSs = translate('OpenLP.Ui', 'No File Selected', 'Singular') - NFSp = translate('OpenLP.Ui', 'No Files Selected', 'Plural') - NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular') - NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural') - OLPV1 = translate('OpenLP.Ui', 'openlp.org 1.x') - OLPV2 = translate('OpenLP.Ui', 'OpenLP 2.0') - OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you ' - 'wish to continue?') - OpenService = translate('OpenLP.Ui', 'Open Service') - Preview = translate('OpenLP.Ui', 'Preview') - PreviewPanel = translate('OpenLP.Ui', 'Preview Panel') - PrintServiceOrder = translate('OpenLP.Ui', 'Print Service Order') - ReplaceBG = translate('OpenLP.Ui', 'Replace Background') - ReplaceLiveBG = translate('OpenLP.Ui', 'Replace Live Background') - ResetBG = translate('OpenLP.Ui', 'Reset Background') - ResetLiveBG = translate('OpenLP.Ui', 'Reset Live Background') - Seconds = translate('OpenLP.Ui', 's', 'The abbreviated unit for seconds') - SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview') - Search = translate('OpenLP.Ui', 'Search') - SelectDelete = translate('OpenLP.Ui', 'You must select an item to delete.') - SelectEdit = translate('OpenLP.Ui', 'You must select an item to edit.') - Settings = translate('OpenLP.Ui', 'Settings') - SaveService = translate('OpenLP.Ui', 'Save Service') - Service = translate('OpenLP.Ui', 'Service') - StartTimeCode = unicode(translate('OpenLP.Ui', 'Start %s')) - Theme = translate('OpenLP.Ui', 'Theme', 'Singular') - Themes = translate('OpenLP.Ui', 'Themes', 'Plural') - Tools = translate('OpenLP.Ui', 'Tools') - Top = translate('OpenLP.Ui', 'Top') - VersePerSlide = translate('OpenLP.Ui', 'Verse Per Slide') - VersePerLine = translate('OpenLP.Ui', 'Verse Per Line') - Version = translate('OpenLP.Ui', 'Version') - View = translate('OpenLP.Ui', 'View') - ViewMode = translate('OpenLP.Ui', 'View Model') + __instance__ = None + + def __new__(cls): + """ + Override the default object creation method to return a single instance. + """ + if not cls.__instance__: + cls.__instance__ = object.__new__(cls) + return cls.__instance__ + + def __init__(self): + """ + These strings should need a good reason to be retranslated elsewhere. + Should some/more/less of these have an & attached? + """ + self.About = translate('OpenLP.Ui', 'About') + self.Add = translate('OpenLP.Ui', '&Add') + self.Advanced = translate('OpenLP.Ui', 'Advanced') + self.AllFiles = translate('OpenLP.Ui', 'All Files') + self.Bottom = translate('OpenLP.Ui', 'Bottom') + self.Browse = translate('OpenLP.Ui', 'Browse...') + self.Cancel = translate('OpenLP.Ui', 'Cancel') + self.CCLINumberLabel = translate('OpenLP.Ui', 'CCLI number:') + self.CreateService = translate('OpenLP.Ui', 'Create a new service.') + self.Continuous = translate('OpenLP.Ui', 'Continuous') + self.Default = unicode(translate('OpenLP.Ui', 'Default')) + self.Delete = translate('OpenLP.Ui', '&Delete') + self.DisplayStyle = translate('OpenLP.Ui', 'Display style:') + self.Edit = translate('OpenLP.Ui', '&Edit') + self.EmptyField = translate('OpenLP.Ui', 'Empty Field') + self.Error = translate('OpenLP.Ui', 'Error') + self.Export = translate('OpenLP.Ui', 'Export') + self.File = translate('OpenLP.Ui', 'File') + self.FontSizePtUnit = translate('OpenLP.Ui', 'pt', + 'Abbreviated font pointsize unit') + self.Help = translate('OpenLP.Ui', 'Help') + self.Hours = translate('OpenLP.Ui', 'h', + 'The abbreviated unit for hours') + self.Image = translate('OpenLP.Ui', 'Image') + self.Import = translate('OpenLP.Ui', 'Import') + self.LayoutStyle = translate('OpenLP.Ui', 'Layout style:') + self.LengthTime = unicode(translate('OpenLP.Ui', 'Length %s')) + self.Live = translate('OpenLP.Ui', 'Live') + self.LiveBGError = translate('OpenLP.Ui', 'Live Background Error') + self.LivePanel = translate('OpenLP.Ui', 'Live Panel') + self.LiveToolbar = translate('OpenLP.Ui', 'Live Toolbar') + self.Load = translate('OpenLP.Ui', 'Load') + self.Minutes = translate('OpenLP.Ui', 'm', + 'The abbreviated unit for minutes') + self.Middle = translate('OpenLP.Ui', 'Middle') + self.New = translate('OpenLP.Ui', 'New') + self.NewService = translate('OpenLP.Ui', 'New Service') + self.NewTheme = translate('OpenLP.Ui', 'New Theme') + self.NFSs = translate('OpenLP.Ui', 'No File Selected', 'Singular') + self.NFSp = translate('OpenLP.Ui', 'No Files Selected', 'Plural') + self.NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular') + self.NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural') + self.OLPV1 = translate('OpenLP.Ui', 'openlp.org 1.x') + self.OLPV2 = translate('OpenLP.Ui', 'OpenLP 2.0') + self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. ' + 'Do you wish to continue?') + self.OpenService = translate('OpenLP.Ui', 'Open Service') + self.Preview = translate('OpenLP.Ui', 'Preview') + self.PreviewPanel = translate('OpenLP.Ui', 'Preview Panel') + self.PrintServiceOrder = translate('OpenLP.Ui', 'Print Service Order') + self.ReplaceBG = translate('OpenLP.Ui', 'Replace Background') + self.ReplaceLiveBG = translate('OpenLP.Ui', 'Replace Live Background') + self.ResetBG = translate('OpenLP.Ui', 'Reset Background') + self.ResetLiveBG = translate('OpenLP.Ui', 'Reset Live Background') + self.Seconds = translate('OpenLP.Ui', 's', + 'The abbreviated unit for seconds') + self.SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview') + self.Search = translate('OpenLP.Ui', 'Search') + self.SelectDelete = translate('OpenLP.Ui', 'You must select an item ' + 'to delete.') + self.SelectEdit = translate('OpenLP.Ui', 'You must select an item to ' + 'edit.') + self.Settings = translate('OpenLP.Ui', 'Settings') + self.SaveService = translate('OpenLP.Ui', 'Save Service') + self.Service = translate('OpenLP.Ui', 'Service') + self.StartTimeCode = unicode(translate('OpenLP.Ui', 'Start %s')) + self.Theme = translate('OpenLP.Ui', 'Theme', 'Singular') + self.Themes = translate('OpenLP.Ui', 'Themes', 'Plural') + self.Tools = translate('OpenLP.Ui', 'Tools') + self.Top = translate('OpenLP.Ui', 'Top') + self.VersePerSlide = translate('OpenLP.Ui', 'Verse Per Slide') + self.VersePerLine = translate('OpenLP.Ui', 'Verse Per Line') + self.Version = translate('OpenLP.Ui', 'Version') + self.View = translate('OpenLP.Ui', 'View') + self.ViewMode = translate('OpenLP.Ui', 'View Model') def add_welcome_page(parent, image): """ @@ -184,11 +202,11 @@ def critical_error_message_box(title=None, message=None, parent=None, Should this message box question the user. """ if question: - return QtGui.QMessageBox.critical(parent, UiStrings.Error, message, + return QtGui.QMessageBox.critical(parent, UiStrings().Error, message, QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) data = {u'message': message} - data[u'title'] = title if title else UiStrings.Error + data[u'title'] = title if title else UiStrings().Error return Receiver.send_message(u'openlp_error_message', data) def media_item_combo_box(parent, name): @@ -218,7 +236,7 @@ def create_delete_push_button(parent, icon=None): delete_button.setObjectName(u'deleteButton') delete_icon = icon if icon else u':/general/general_delete.png' delete_button.setIcon(build_icon(delete_icon)) - delete_button.setText(UiStrings.Delete) + delete_button.setText(UiStrings().Delete) delete_button.setToolTip( translate('OpenLP.Ui', 'Delete the selected item.')) QtCore.QObject.connect(delete_button, @@ -406,9 +424,9 @@ def create_valign_combo(form, parent, layout): verticalLabel.setText(translate('OpenLP.Ui', '&Vertical Align:')) form.verticalComboBox = QtGui.QComboBox(parent) form.verticalComboBox.setObjectName(u'VerticalComboBox') - form.verticalComboBox.addItem(UiStrings.Top) - form.verticalComboBox.addItem(UiStrings.Middle) - form.verticalComboBox.addItem(UiStrings.Bottom) + form.verticalComboBox.addItem(UiStrings().Top) + form.verticalComboBox.addItem(UiStrings().Middle) + form.verticalComboBox.addItem(UiStrings().Bottom) verticalLabel.setBuddy(form.verticalComboBox) layout.addRow(verticalLabel, form.verticalComboBox) @@ -427,4 +445,4 @@ def find_and_set_in_combo_box(combo_box, value_to_find): if index == -1: # Not Found. index = 0 - combo_box.setCurrentIndex(index) + combo_box.setCurrentIndex(index) \ No newline at end of file diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index 719cb02c2..d4ea463ea 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -87,7 +87,7 @@ class Ui_AboutDialog(object): QtCore.QMetaObject.connectSlotsByName(aboutDialog) def retranslateUi(self, aboutDialog): - aboutDialog.setWindowTitle(u'%s OpenLP' % UiStrings.About) + aboutDialog.setWindowTitle(u'%s OpenLP' % UiStrings().About) self.aboutTextEdit.setPlainText(translate('OpenLP.AboutForm', 'OpenLP - Open Source Lyrics ' 'Projection\n' @@ -105,7 +105,7 @@ class Ui_AboutDialog(object): 'consider contributing by using the button below.' )) self.aboutNotebook.setTabText( - self.aboutNotebook.indexOf(self.aboutTab), UiStrings.About) + self.aboutNotebook.indexOf(self.aboutTab), UiStrings().About) lead = u'Raoul "superfly" Snyman' developers = [u'Tim "TRB143" Bentley', u'Jonathan "gushie" Corwin', u'Michael "cocooncrash" Gorven', @@ -615,4 +615,4 @@ class Ui_AboutDialog(object): self.aboutNotebook.indexOf(self.licenseTab), translate('OpenLP.AboutForm', 'License')) self.contributeButton.setText(translate('OpenLP.AboutForm', - 'Contribute')) + 'Contribute')) \ No newline at end of file diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 199ebff60..94bcb0801 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -127,7 +127,7 @@ class AdvancedTab(SettingsTab): """ Setup the interface translation strings. """ - self.tabTitleVisible = UiStrings.Advanced + self.tabTitleVisible = UiStrings().Advanced self.uiGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'UI Settings')) self.recentLabel.setText( translate('OpenLP.AdvancedTab', @@ -226,10 +226,10 @@ class AdvancedTab(SettingsTab): def onDefaultBrowseButtonPressed(self): file_filters = u'%s;;%s (*.*) (*)' % (get_images_filter(), - UiStrings.AllFiles) + UiStrings().AllFiles) filename = QtGui.QFileDialog.getOpenFileName(self, translate('OpenLP.AdvancedTab', 'Open File'), '', file_filters) if filename: self.defaultFileEdit.setText(filename) - self.defaultFileEdit.setFocus() + self.defaultFileEdit.setFocus() \ No newline at end of file diff --git a/openlp/core/ui/displaytagdialog.py b/openlp/core/ui/displaytagdialog.py index 848818e88..8e71a60ff 100644 --- a/openlp/core/ui/displaytagdialog.py +++ b/openlp/core/ui/displaytagdialog.py @@ -136,10 +136,10 @@ class Ui_DisplayTagDialog(object): translate('OpenLP.DisplayTagDialog', 'Start tag')) self.endTagLabel.setText( translate('OpenLP.DisplayTagDialog', 'End tag')) - self.deletePushButton.setText(UiStrings.Delete) + self.deletePushButton.setText(UiStrings().Delete) self.defaultPushButton.setText( translate('OpenLP.DisplayTagDialog', 'Default')) - self.newPushButton.setText(UiStrings.New) + self.newPushButton.setText(UiStrings().New) self.tagTableWidget.horizontalHeaderItem(0).setText( translate('OpenLP.DisplayTagDialog', 'Description')) self.tagTableWidget.horizontalHeaderItem(1).setText( @@ -151,4 +151,4 @@ class Ui_DisplayTagDialog(object): self.tagTableWidget.setColumnWidth(0, 120) self.tagTableWidget.setColumnWidth(1, 40) self.tagTableWidget.setColumnWidth(2, 240) - self.tagTableWidget.setColumnWidth(3, 240) + self.tagTableWidget.setColumnWidth(3, 240) \ No newline at end of file diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index 0ae9497c9..622d60f79 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -178,11 +178,11 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): self,translate('ImagePlugin.ExceptionDialog', 'Select Attachment'), SettingsManager.get_last_dir(u'exceptions'), - u'%s (*.*) (*)' % UiStrings.AllFiles) + u'%s (*.*) (*)' % UiStrings().AllFiles) log.info(u'New files(s) %s', unicode(files)) if files: self.fileAttachment = unicode(files) def __buttonState(self, state): self.saveReportButton.setEnabled(state) - self.sendReportButton.setEnabled(state) + self.sendReportButton.setEnabled(state) \ No newline at end of file diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index cfde7810c..7dac2fe9d 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -238,7 +238,7 @@ class GeneralTab(SettingsTab): self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec')) self.ccliGroupBox.setTitle( translate('OpenLP.GeneralTab', 'CCLI Details')) - self.numberLabel.setText(UiStrings.CCLINumberLabel) + self.numberLabel.setText(UiStrings().CCLINumberLabel) self.usernameLabel.setText( translate('OpenLP.GeneralTab', 'SongSelect username:')) self.passwordLabel.setText( @@ -394,4 +394,4 @@ class GeneralTab(SettingsTab): """ Called when the width, height, x position or y position has changed. """ - self.overrideChanged = True + self.overrideChanged = True \ No newline at end of file diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 2038e1972..d2fbaef9e 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -163,82 +163,82 @@ class Ui_MainWindow(object): self.themeManagerDock) # Create the menu items action_list = ActionList.get_instance() - action_list.add_category(UiStrings.File, CategoryOrder.standardMenu) + action_list.add_category(UiStrings().File, CategoryOrder.standardMenu) self.FileNewItem = shortcut_action(mainWindow, u'FileNewItem', [QtGui.QKeySequence(u'Ctrl+N')], self.ServiceManagerContents.onNewServiceClicked, - u':/general/general_new.png', category=UiStrings.File) + u':/general/general_new.png', category=UiStrings().File) self.FileOpenItem = shortcut_action(mainWindow, u'FileOpenItem', [QtGui.QKeySequence(u'Ctrl+O')], self.ServiceManagerContents.onLoadServiceClicked, - u':/general/general_open.png', category=UiStrings.File) + u':/general/general_open.png', category=UiStrings().File) self.FileSaveItem = shortcut_action(mainWindow, u'FileSaveItem', [QtGui.QKeySequence(u'Ctrl+S')], self.ServiceManagerContents.saveFile, - u':/general/general_save.png', category=UiStrings.File) + u':/general/general_save.png', category=UiStrings().File) self.FileSaveAsItem = shortcut_action(mainWindow, u'FileSaveAsItem', [QtGui.QKeySequence(u'Ctrl+Shift+S')], - self.ServiceManagerContents.saveFileAs, category=UiStrings.File) + self.ServiceManagerContents.saveFileAs, category=UiStrings().File) self.printServiceOrderItem = shortcut_action(mainWindow, u'printServiceItem', [QtGui.QKeySequence(u'Ctrl+P')], self.ServiceManagerContents.printServiceOrder, - category=UiStrings.File) + category=UiStrings().File) self.FileExitItem = shortcut_action(mainWindow, u'FileExitItem', [QtGui.QKeySequence(u'Alt+F4')], mainWindow.close, - u':/system/system_exit.png', category=UiStrings.File) - action_list.add_category(UiStrings.Import, CategoryOrder.standardMenu) + u':/system/system_exit.png', category=UiStrings().File) + action_list.add_category(UiStrings().Import, CategoryOrder.standardMenu) self.ImportThemeItem = base_action( - mainWindow, u'ImportThemeItem', UiStrings.Import) + mainWindow, u'ImportThemeItem', UiStrings().Import) self.ImportLanguageItem = base_action( - mainWindow, u'ImportLanguageItem')#, UiStrings.Import) - action_list.add_category(UiStrings.Export, CategoryOrder.standardMenu) + mainWindow, u'ImportLanguageItem')#, UiStrings().Import) + action_list.add_category(UiStrings().Export, CategoryOrder.standardMenu) self.ExportThemeItem = base_action( - mainWindow, u'ExportThemeItem', UiStrings.Export) + mainWindow, u'ExportThemeItem', UiStrings().Export) self.ExportLanguageItem = base_action( - mainWindow, u'ExportLanguageItem')#, UiStrings.Export) - action_list.add_category(UiStrings.View, CategoryOrder.standardMenu) + mainWindow, u'ExportLanguageItem')#, UiStrings().Export) + action_list.add_category(UiStrings().View, CategoryOrder.standardMenu) self.ViewMediaManagerItem = shortcut_action(mainWindow, u'ViewMediaManagerItem', [QtGui.QKeySequence(u'F8')], self.toggleMediaManager, u':/system/system_mediamanager.png', - self.mediaManagerDock.isVisible(), UiStrings.View) + self.mediaManagerDock.isVisible(), UiStrings().View) self.ViewThemeManagerItem = shortcut_action(mainWindow, u'ViewThemeManagerItem', [QtGui.QKeySequence(u'F10')], self.toggleThemeManager, u':/system/system_thememanager.png', - self.themeManagerDock.isVisible(), UiStrings.View) + self.themeManagerDock.isVisible(), UiStrings().View) self.ViewServiceManagerItem = shortcut_action(mainWindow, u'ViewServiceManagerItem', [QtGui.QKeySequence(u'F9')], self.toggleServiceManager, u':/system/system_servicemanager.png', - self.serviceManagerDock.isVisible(), UiStrings.View) + self.serviceManagerDock.isVisible(), UiStrings().View) self.ViewPreviewPanel = shortcut_action(mainWindow, u'ViewPreviewPanel', [QtGui.QKeySequence(u'F11')], self.setPreviewPanelVisibility, checked=previewVisible, - category=UiStrings.View) + category=UiStrings().View) self.ViewLivePanel = shortcut_action(mainWindow, u'ViewLivePanel', [QtGui.QKeySequence(u'F12')], self.setLivePanelVisibility, - checked=liveVisible, category=UiStrings.View) - action_list.add_category(UiStrings.ViewMode, CategoryOrder.standardMenu) + checked=liveVisible, category=UiStrings().View) + action_list.add_category(UiStrings().ViewMode, CategoryOrder.standardMenu) self.ModeDefaultItem = checkable_action( - mainWindow, u'ModeDefaultItem', category=UiStrings.ViewMode) + mainWindow, u'ModeDefaultItem', category=UiStrings().ViewMode) self.ModeSetupItem = checkable_action( - mainWindow, u'ModeLiveItem', category=UiStrings.ViewMode) + mainWindow, u'ModeLiveItem', category=UiStrings().ViewMode) self.ModeLiveItem = checkable_action( - mainWindow, u'ModeLiveItem', True, UiStrings.ViewMode) + mainWindow, u'ModeLiveItem', True, UiStrings().ViewMode) self.ModeGroup = QtGui.QActionGroup(mainWindow) self.ModeGroup.addAction(self.ModeDefaultItem) self.ModeGroup.addAction(self.ModeSetupItem) self.ModeGroup.addAction(self.ModeLiveItem) self.ModeDefaultItem.setChecked(True) - action_list.add_category(UiStrings.Tools, CategoryOrder.standardMenu) + action_list.add_category(UiStrings().Tools, CategoryOrder.standardMenu) self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', - u':/tools/tools_add.png', category=UiStrings.Tools) + u':/tools/tools_add.png', category=UiStrings().Tools) self.ToolsOpenDataFolder = icon_action(mainWindow, u'ToolsOpenDataFolder', u':/general/general_open.png', - category=UiStrings.Tools) - action_list.add_category(UiStrings.Settings, CategoryOrder.standardMenu) + category=UiStrings().Tools) + action_list.add_category(UiStrings().Settings, CategoryOrder.standardMenu) self.settingsPluginListItem = shortcut_action(mainWindow, u'settingsPluginListItem', [QtGui.QKeySequence(u'Alt+F7')], self.onPluginItemClicked, u':/system/settings_plugin_list.png', - category=UiStrings.Settings) + category=UiStrings().Settings) # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, u'AutoLanguageItem', LanguageManager.auto_language) @@ -255,25 +255,25 @@ class Ui_MainWindow(object): self.SettingsShortcutsItem = icon_action(mainWindow, u'SettingsShortcutsItem', u':/system/system_configure_shortcuts.png', - category=UiStrings.Settings) + category=UiStrings().Settings) self.DisplayTagItem = icon_action(mainWindow, u'DisplayTagItem', u':/system/tag_editor.png', - category=UiStrings.Settings) + category=UiStrings().Settings) self.SettingsConfigureItem = icon_action(mainWindow, u'SettingsConfigureItem', u':/system/system_settings.png', - category=UiStrings.Settings) - action_list.add_category(UiStrings.Help, CategoryOrder.standardMenu) + category=UiStrings().Settings) + action_list.add_category(UiStrings().Help, CategoryOrder.standardMenu) self.HelpDocumentationItem = icon_action(mainWindow, u'HelpDocumentationItem', u':/system/system_help_contents.png', - category=None)#UiStrings.Help) + category=None)#UiStrings().Help) self.HelpDocumentationItem.setEnabled(False) self.HelpAboutItem = shortcut_action(mainWindow, u'HelpAboutItem', [QtGui.QKeySequence(u'Ctrl+F1')], self.onHelpAboutItemClicked, - u':/system/system_about.png', category=UiStrings.Help) + u':/system/system_about.png', category=UiStrings().Help) self.HelpOnlineHelpItem = base_action( - mainWindow, u'HelpOnlineHelpItem', category=UiStrings.Help) + mainWindow, u'HelpOnlineHelpItem', category=UiStrings().Help) self.helpWebSiteItem = base_action( - mainWindow, u'helpWebSiteItem', category=UiStrings.Help) + mainWindow, u'helpWebSiteItem', category=UiStrings().Help) add_actions(self.FileImportMenu, (self.ImportThemeItem, self.ImportLanguageItem)) add_actions(self.FileExportMenu, @@ -320,7 +320,7 @@ class Ui_MainWindow(object): """ Set up the translation system """ - mainWindow.mainTitle = UiStrings.OLPV2 + mainWindow.mainTitle = UiStrings().OLPV2 mainWindow.setWindowTitle(mainWindow.mainTitle) self.FileMenu.setTitle(translate('OpenLP.MainWindow', '&File')) self.FileImportMenu.setTitle(translate('OpenLP.MainWindow', '&Import')) @@ -339,14 +339,14 @@ class Ui_MainWindow(object): self.themeManagerDock.setWindowTitle( translate('OpenLP.MainWindow', 'Theme Manager')) self.FileNewItem.setText(translate('OpenLP.MainWindow', '&New')) - self.FileNewItem.setToolTip(UiStrings.NewService) - self.FileNewItem.setStatusTip(UiStrings.CreateService) + self.FileNewItem.setToolTip(UiStrings().NewService) + self.FileNewItem.setStatusTip(UiStrings().CreateService) self.FileOpenItem.setText(translate('OpenLP.MainWindow', '&Open')) - self.FileOpenItem.setToolTip(UiStrings.OpenService) + self.FileOpenItem.setToolTip(UiStrings().OpenService) self.FileOpenItem.setStatusTip( translate('OpenLP.MainWindow', 'Open an existing service.')) self.FileSaveItem.setText(translate('OpenLP.MainWindow', '&Save')) - self.FileSaveItem.setToolTip(UiStrings.SaveService) + self.FileSaveItem.setToolTip(UiStrings().SaveService) self.FileSaveItem.setStatusTip( translate('OpenLP.MainWindow', 'Save the current service to disk.')) self.FileSaveAsItem.setText( @@ -355,7 +355,7 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', 'Save Service As')) self.FileSaveAsItem.setStatusTip(translate('OpenLP.MainWindow', 'Save the current service under a new name.')) - self.printServiceOrderItem.setText(UiStrings.PrintServiceOrder) + self.printServiceOrderItem.setText(UiStrings().PrintServiceOrder) self.printServiceOrderItem.setStatusTip(translate('OpenLP.MainWindow', 'Print the current Service Order.')) self.FileExitItem.setText( @@ -1011,4 +1011,4 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.recentFiles.insert(0, QtCore.QString(filename)) while self.recentFiles.count() > maxRecentFiles: # Don't care what API says takeLast works, removeLast doesn't! - self.recentFiles.takeLast() + self.recentFiles.takeLast() \ No newline at end of file diff --git a/openlp/core/ui/plugindialog.py b/openlp/core/ui/plugindialog.py index 0ead739a5..84fb845c6 100644 --- a/openlp/core/ui/plugindialog.py +++ b/openlp/core/ui/plugindialog.py @@ -78,11 +78,11 @@ class Ui_PluginViewDialog(object): translate('OpenLP.PluginForm', 'Plugin List')) self.pluginInfoGroupBox.setTitle( translate('OpenLP.PluginForm', 'Plugin Details')) - self.versionLabel.setText(u'%s:' % UiStrings.Version) - self.aboutLabel.setText(u'%s:' % UiStrings.About) + self.versionLabel.setText(u'%s:' % UiStrings().Version) + self.aboutLabel.setText(u'%s:' % UiStrings().About) self.statusLabel.setText( translate('OpenLP.PluginForm', 'Status:')) self.statusComboBox.setItemText(0, translate('OpenLP.PluginForm', 'Active')) self.statusComboBox.setItemText(1, - translate('OpenLP.PluginForm', 'Inactive')) + translate('OpenLP.PluginForm', 'Inactive')) \ No newline at end of file diff --git a/openlp/core/ui/printservicedialog.py b/openlp/core/ui/printservicedialog.py index 9593e9ec4..889bc4f7d 100644 --- a/openlp/core/ui/printservicedialog.py +++ b/openlp/core/ui/printservicedialog.py @@ -148,7 +148,7 @@ class Ui_PrintServiceDialog(object): QtCore.SIGNAL(u'toggled(bool)'), self.toggleOptions) def retranslateUi(self, printServiceDialog): - printServiceDialog.setWindowTitle(UiStrings.PrintServiceOrder) + printServiceDialog.setWindowTitle(UiStrings().PrintServiceOrder) self.slideTextCheckBox.setText(translate('OpenLP.PrintServiceForm', 'Include slide text if available')) self.pageBreakAfterText.setText(translate('OpenLP.PrintServiceForm', @@ -164,4 +164,4 @@ class Ui_PrintServiceDialog(object): self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.OneHundred]) self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.SeventyFive]) self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.Fifty]) - self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.TwentyFive]) + self.zoomComboBox.addItem(ZoomSize.Sizes[ZoomSize.TwentyFive]) \ No newline at end of file diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 0de20d8a9..42b773198 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -354,9 +354,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): Called when html copy check box is selected. """ if value == QtCore.Qt.Checked: - self.copyTextButton.setText(UiStrings.CopyToHtml) + self.copyTextButton.setText(UiStrings().CopyToHtml) else: - self.copyTextButton.setText(UiStrings.CopyToText) + self.copyTextButton.setText(UiStrings().CopyToText) def onSlideTextCheckBoxChanged(self, state): """ @@ -380,4 +380,4 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): QtCore.QVariant(self.metaDataCheckBox.isChecked())) settings.setValue(u'print notes', QtCore.QVariant(self.notesCheckBox.isChecked())) - settings.endGroup() + settings.endGroup() \ No newline at end of file diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index ba9ca718a..d682f5b52 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -111,18 +111,18 @@ class ServiceManager(QtGui.QWidget): # Create the top toolbar self.toolbar = OpenLPToolbar(self) self.toolbar.addToolbarButton( - UiStrings.NewService, u':/general/general_new.png', - UiStrings.CreateService, self.onNewServiceClicked) + UiStrings().NewService, u':/general/general_new.png', + UiStrings().CreateService, self.onNewServiceClicked) self.toolbar.addToolbarButton( - UiStrings.OpenService, u':/general/general_open.png', + UiStrings().OpenService, u':/general/general_open.png', translate('OpenLP.ServiceManager', 'Load an existing service'), self.onLoadServiceClicked) self.toolbar.addToolbarButton( - UiStrings.SaveService, u':/general/general_save.png', + UiStrings().SaveService, u':/general/general_save.png', translate('OpenLP.ServiceManager', 'Save this service'), self.saveFile) self.toolbar.addSeparator() - self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings.Theme, self) + self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings().Theme, self) self.themeLabel.setMargin(3) self.themeLabel.setObjectName(u'themeLabel') self.toolbar.addToolbarWidget(u'ThemeLabel', self.themeLabel) @@ -169,9 +169,9 @@ class ServiceManager(QtGui.QWidget): self.onServiceTop, shortcuts=[QtCore.Qt.Key_Home]) self.serviceManagerList.moveTop.setObjectName(u'moveTop') action_list = ActionList.get_instance() - action_list.add_category(UiStrings.Service, CategoryOrder.standardToolbar) + action_list.add_category(UiStrings().Service, CategoryOrder.standardToolbar) action_list.add_action( - self.serviceManagerList.moveTop, UiStrings.Service) + self.serviceManagerList.moveTop, UiStrings().Service) self.serviceManagerList.moveUp = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &up'), u':/services/service_up.png', @@ -179,7 +179,7 @@ class ServiceManager(QtGui.QWidget): 'Move item up one position in the service.'), self.onServiceUp, shortcuts=[QtCore.Qt.Key_PageUp]) self.serviceManagerList.moveUp.setObjectName(u'moveUp') - action_list.add_action(self.serviceManagerList.moveUp, UiStrings.Service) + action_list.add_action(self.serviceManagerList.moveUp, UiStrings().Service) self.serviceManagerList.moveDown = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), u':/services/service_down.png', @@ -188,7 +188,7 @@ class ServiceManager(QtGui.QWidget): self.onServiceDown, shortcuts=[QtCore.Qt.Key_PageDown]) self.serviceManagerList.moveDown.setObjectName(u'moveDown') action_list.add_action( - self.serviceManagerList.moveDown, UiStrings.Service) + self.serviceManagerList.moveDown, UiStrings().Service) self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move to &bottom'), u':/services/service_bottom.png', @@ -197,7 +197,7 @@ class ServiceManager(QtGui.QWidget): self.onServiceEnd, shortcuts=[QtCore.Qt.Key_End]) self.serviceManagerList.moveBottom.setObjectName(u'moveBottom') action_list.add_action( - self.serviceManagerList.moveBottom, UiStrings.Service) + self.serviceManagerList.moveBottom, UiStrings().Service) self.serviceManagerList.down = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), None, @@ -231,7 +231,7 @@ class ServiceManager(QtGui.QWidget): 'Expand all the service items.'), self.onExpandAll, shortcuts=[QtCore.Qt.Key_Plus]) self.serviceManagerList.expand.setObjectName(u'expand') - action_list.add_action(self.serviceManagerList.expand, UiStrings.Service) + action_list.add_action(self.serviceManagerList.expand, UiStrings().Service) self.serviceManagerList.collapse = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', '&Collapse all'), u':/services/service_collapse_all.png', @@ -240,7 +240,7 @@ class ServiceManager(QtGui.QWidget): self.onCollapseAll, shortcuts=[QtCore.Qt.Key_Minus]) self.serviceManagerList.collapse.setObjectName(u'collapse') action_list.add_action( - self.serviceManagerList.collapse, UiStrings.Service) + self.serviceManagerList.collapse, UiStrings().Service) self.orderToolbar.addSeparator() self.serviceManagerList.makeLive = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Go Live'), @@ -250,7 +250,7 @@ class ServiceManager(QtGui.QWidget): shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return]) self.serviceManagerList.makeLive.setObjectName(u'orderToolbar') action_list.add_action( - self.serviceManagerList.makeLive, UiStrings.Service) + self.serviceManagerList.makeLive, UiStrings().Service) self.layout.addWidget(self.orderToolbar) # Connect up our signals and slots QtCore.QObject.connect(self.themeComboBox, @@ -525,7 +525,7 @@ class ServiceManager(QtGui.QWidget): save the file. """ fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, - UiStrings.SaveService, + UiStrings().SaveService, SettingsManager.get_last_dir( self.mainwindow.serviceSettingsSection), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) @@ -1311,4 +1311,4 @@ class ServiceManager(QtGui.QWidget): Print a Service Order Sheet. """ settingDialog = PrintServiceForm(self.mainwindow, self) - settingDialog.exec_() + settingDialog.exec_() \ No newline at end of file diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 2ae39c5e7..5f2c63c23 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -88,11 +88,11 @@ class SlideController(QtGui.QWidget): # Type label for the top of the slide controller self.typeLabel = QtGui.QLabel(self.panel) if self.isLive: - self.typeLabel.setText(UiStrings.Live) + self.typeLabel.setText(UiStrings().Live) self.split = 1 self.typePrefix = u'live' else: - self.typeLabel.setText(UiStrings.Preview) + self.typeLabel.setText(UiStrings().Preview) self.split = 0 self.typePrefix = u'preview' self.typeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;') @@ -161,18 +161,18 @@ class SlideController(QtGui.QWidget): translate('OpenLP.SlideController', 'Hide'), self.toolbar)) self.blankScreen = shortcut_action(self.hideMenu, u'blankScreen', [QtCore.Qt.Key_Period], self.onBlankDisplay, - u':/slides/slide_blank.png', False, UiStrings.LiveToolbar) + u':/slides/slide_blank.png', False, UiStrings().LiveToolbar) self.blankScreen.setText( translate('OpenLP.SlideController', 'Blank Screen')) self.themeScreen = shortcut_action(self.hideMenu, u'themeScreen', [QtGui.QKeySequence(u'T')], self.onThemeDisplay, - u':/slides/slide_theme.png', False, UiStrings.LiveToolbar) + u':/slides/slide_theme.png', False, UiStrings().LiveToolbar) self.themeScreen.setText( translate('OpenLP.SlideController', 'Blank to Theme')) self.desktopScreen = shortcut_action(self.hideMenu, u'desktopScreen', [QtGui.QKeySequence(u'D')], self.onHideDisplay, u':/slides/slide_desktop.png', False, - UiStrings.LiveToolbar) + UiStrings().LiveToolbar) self.desktopScreen.setText( translate('OpenLP.SlideController', 'Show Desktop')) self.hideMenu.setDefaultAction(self.blankScreen) @@ -194,7 +194,7 @@ class SlideController(QtGui.QWidget): self.delaySpinBox.setMinimum(1) self.delaySpinBox.setMaximum(180) self.toolbar.addToolbarWidget(u'Image SpinBox', self.delaySpinBox) - self.delaySpinBox.setSuffix(UiStrings.Seconds) + self.delaySpinBox.setSuffix(UiStrings().Seconds) self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', 'Delay between slides in seconds')) else: @@ -376,21 +376,21 @@ class SlideController(QtGui.QWidget): self.nextItem.setObjectName(u'nextItemLive') action_list = ActionList.get_instance() action_list.add_category( - UiStrings.LiveToolbar, CategoryOrder.standardToolbar) + UiStrings().LiveToolbar, CategoryOrder.standardToolbar) action_list.add_action(self.previousItem) action_list.add_action(self.nextItem) self.previousService = shortcut_action(parent, u'previousService', - [QtCore.Qt.Key_Left], self.servicePrevious, UiStrings.LiveToolbar) + [QtCore.Qt.Key_Left], self.servicePrevious, UiStrings().LiveToolbar) self.previousService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.previousService.setText( translate('OpenLP.SlideController', 'Previous Service')) self.nextService = shortcut_action(parent, 'nextService', - [QtCore.Qt.Key_Right], self.serviceNext, UiStrings.LiveToolbar) + [QtCore.Qt.Key_Right], self.serviceNext, UiStrings().LiveToolbar) self.nextService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.nextService.setText( translate('OpenLP.SlideController', 'Next Service')) self.escapeItem = shortcut_action(parent, 'escapeItem', - [QtCore.Qt.Key_Escape], self.liveEscape, UiStrings.LiveToolbar) + [QtCore.Qt.Key_Escape], self.liveEscape, UiStrings().LiveToolbar) self.escapeItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) self.escapeItem.setText( translate('OpenLP.SlideController', 'Escape Item')) @@ -1150,4 +1150,4 @@ class SlideController(QtGui.QWidget): elif self.desktopScreen.isChecked(): return HideMode.Screen else: - return None + return None \ No newline at end of file diff --git a/openlp/core/ui/starttimedialog.py b/openlp/core/ui/starttimedialog.py index be34b765e..2d1711231 100644 --- a/openlp/core/ui/starttimedialog.py +++ b/openlp/core/ui/starttimedialog.py @@ -107,15 +107,15 @@ class Ui_StartTimeDialog(object): def retranslateUi(self, StartTimeDialog): self.setWindowTitle(translate('OpenLP.StartTimeForm', 'Item Start and Finish Time')) - self.hourSpinBox.setSuffix(UiStrings.Hours) - self.minuteSpinBox.setSuffix(UiStrings.Minutes) - self.secondSpinBox.setSuffix(UiStrings.Seconds) - self.hourFinishSpinBox.setSuffix(UiStrings.Hours) - self.minuteFinishSpinBox.setSuffix(UiStrings.Minutes) - self.secondFinishSpinBox.setSuffix(UiStrings.Seconds) + self.hourSpinBox.setSuffix(UiStrings().Hours) + self.minuteSpinBox.setSuffix(UiStrings().Minutes) + self.secondSpinBox.setSuffix(UiStrings().Seconds) + self.hourFinishSpinBox.setSuffix(UiStrings().Hours) + self.minuteFinishSpinBox.setSuffix(UiStrings().Minutes) + self.secondFinishSpinBox.setSuffix(UiStrings().Seconds) self.hourLabel.setText(translate('OpenLP.StartTimeForm', 'Hours:')) self.minuteLabel.setText(translate('OpenLP.StartTimeForm', 'Minutes:')) self.secondLabel.setText(translate('OpenLP.StartTimeForm', 'Seconds:')) self.startLabel.setText(translate('OpenLP.StartTimeForm', 'Start')) self.finishLabel.setText(translate('OpenLP.StartTimeForm', 'Finish')) - self.lengthLabel.setText(translate('OpenLP.StartTimeForm', 'Length')) + self.lengthLabel.setText(translate('OpenLP.StartTimeForm', 'Length')) \ No newline at end of file diff --git a/openlp/core/ui/starttimeform.py b/openlp/core/ui/starttimeform.py index a30dd3b8e..b460bbbd0 100644 --- a/openlp/core/ui/starttimeform.py +++ b/openlp/core/ui/starttimeform.py @@ -53,11 +53,11 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): self.hourFinishSpinBox.setValue(hours) self.minuteFinishSpinBox.setValue(minutes) self.secondFinishSpinBox.setValue(seconds) - self.hourFinishLabel.setText(u'%s%s' % (unicode(hour), UiStrings.Hours)) + self.hourFinishLabel.setText(u'%s%s' % (unicode(hour), UiStrings().Hours)) self.minuteFinishLabel.setText(u'%s%s' % - (unicode(minutes), UiStrings.Minutes)) + (unicode(minutes), UiStrings().Minutes)) self.secondFinishLabel.setText(u'%s%s' % - (unicode(seconds), UiStrings.Seconds)) + (unicode(seconds), UiStrings().Seconds)) return QtGui.QDialog.exec_(self) def accept(self): @@ -90,4 +90,4 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): seconds -= 3600 * hours minutes = seconds / 60 seconds -= 60 * minutes - return hours, minutes, seconds + return hours, minutes, seconds \ No newline at end of file diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index 3a3b3bb61..ebba45e7c 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -290,7 +290,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): 'Edit Theme - %s')) % self.theme.theme_name) self.next() else: - self.setWindowTitle(UiStrings.NewTheme) + self.setWindowTitle(UiStrings().NewTheme) return QtGui.QWizard.exec_(self) def initializePage(self, id): @@ -473,7 +473,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): """ images_filter = get_images_filter() images_filter = u'%s;;%s (*.*) (*)' % ( - images_filter, UiStrings.AllFiles) + images_filter, UiStrings().AllFiles) filename = QtGui.QFileDialog.getOpenFileName(self, translate('OpenLP.ThemeForm', 'Select Image'), u'', images_filter) @@ -589,4 +589,4 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): QtGui.QColor(field), self) if new_color.isValid(): field = new_color.name() - return field + return field \ No newline at end of file diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 81da6e021..d2a653a26 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -63,7 +63,7 @@ class ThemeManager(QtGui.QWidget): self.layout.setMargin(0) self.layout.setObjectName(u'layout') self.toolbar = OpenLPToolbar(self) - self.toolbar.addToolbarButton(UiStrings.NewTheme, + self.toolbar.addToolbarButton(UiStrings().NewTheme, u':/themes/theme_new.png', translate('OpenLP.ThemeManager', 'Create a new theme.'), self.onAddTheme) @@ -449,7 +449,7 @@ class ThemeManager(QtGui.QWidget): # No themes have been found so create one if len(files) == 0: theme = ThemeXML() - theme.theme_name = UiStrings.Default + theme.theme_name = UiStrings().Default self._writeTheme(theme, None, None) QtCore.QSettings().setValue( self.settingsSection + u'/global theme', @@ -803,4 +803,4 @@ class ThemeManager(QtGui.QWidget): vAlignCorrection = VerticalType.Bottom newtheme.display_horizontal_align = theme.HorizontalAlign newtheme.display_vertical_align = vAlignCorrection - return newtheme.extract_xml() + return newtheme.extract_xml() \ No newline at end of file diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 372ee0cc8..fccef1244 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -102,7 +102,7 @@ class ThemesTab(SettingsTab): QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList) def retranslateUi(self): - self.tabTitleVisible = UiStrings.Themes + self.tabTitleVisible = UiStrings().Themes self.GlobalGroupBox.setTitle( translate('OpenLP.ThemesTab', 'Global Theme')) self.LevelGroupBox.setTitle( @@ -203,4 +203,4 @@ class ThemesTab(SettingsTab): if not preview.isNull(): preview = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - self.DefaultListView.setPixmap(preview) + self.DefaultListView.setPixmap(preview) \ No newline at end of file diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 9e464aa7a..759b36101 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -424,7 +424,7 @@ class Ui_ThemeWizard(object): self.backgroundComboBox.setItemText(BackgroundType.Gradient, translate('OpenLP.ThemeWizard', 'Gradient')) self.backgroundComboBox.setItemText( - BackgroundType.Image, UiStrings.Image) + BackgroundType.Image, UiStrings().Image) self.colorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:')) self.gradientStartLabel.setText( translate(u'OpenLP.ThemeWizard', 'Starting color:')) @@ -442,7 +442,7 @@ class Ui_ThemeWizard(object): translate('OpenLP.ThemeWizard', 'Top Left - Bottom Right')) self.gradientComboBox.setItemText(BackgroundGradientType.LeftBottom, translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right')) - self.imageLabel.setText(u'%s:' % UiStrings.Image) + self.imageLabel.setText(u'%s:' % UiStrings().Image) self.mainAreaPage.setTitle( translate('OpenLP.ThemeWizard', 'Main Area Font Details')) self.mainAreaPage.setSubTitle( @@ -451,17 +451,17 @@ class Ui_ThemeWizard(object): self.mainFontLabel.setText(translate('OpenLP.ThemeWizard', 'Font:')) self.mainColorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:')) self.mainSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) - self.mainSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.mainSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.lineSpacingLabel.setText( translate('OpenLP.ThemeWizard', 'Line Spacing:')) - self.lineSpacingSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.lineSpacingSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.outlineCheckBox.setText( translate('OpenLP.ThemeWizard', '&Outline:')) self.outlineSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) - self.outlineSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.outlineSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.shadowCheckBox.setText(translate('OpenLP.ThemeWizard', '&Shadow:')) self.shadowSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) - self.shadowSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.shadowSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.mainBoldCheckBox.setText(translate('OpenLP.ThemeWizard', 'Bold')) self.mainItalicsCheckBox.setText( translate('OpenLP.ThemeWizard', 'Italic')) @@ -473,7 +473,7 @@ class Ui_ThemeWizard(object): self.footerFontLabel.setText(translate('OpenLP.ThemeWizard', 'Font:')) self.footerColorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:')) self.footerSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:')) - self.footerSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.footerSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.alignmentPage.setTitle( translate('OpenLP.ThemeWizard', 'Text Formatting Details')) self.alignmentPage.setSubTitle( @@ -537,4 +537,4 @@ class Ui_ThemeWizard(object): labelWidth = max(self.backgroundLabel.minimumSizeHint().width(), self.horizontalLabel.minimumSizeHint().width()) self.spacer.changeSize(labelWidth, 0, - QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) \ No newline at end of file diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index cb3a75294..74ca0715a 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -212,11 +212,11 @@ class OpenLPWizard(QtGui.QWizard): """ if filters: filters += u';;' - filters += u'%s (*)' % UiStrings.AllFiles + filters += u'%s (*)' % UiStrings().AllFiles filename = QtGui.QFileDialog.getOpenFileName(self, title, os.path.dirname(SettingsManager.get_last_dir( self.plugin.settingsSection, 1)), filters) if filename: editbox.setText(filename) SettingsManager.set_last_dir(self.plugin.settingsSection, - filename, 1) + filename, 1) \ No newline at end of file diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index c5714c914..0cfa9c60a 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -77,7 +77,7 @@ class AlertsPlugin(Plugin): Plugin.initialise(self) self.toolsAlertItem.setVisible(True) action_list = ActionList.get_instance() - action_list.add_action(self.toolsAlertItem, UiStrings.Tools) + action_list.add_action(self.toolsAlertItem, UiStrings().Tools) self.liveController.alertTab = self.settings_tab def finalise(self): @@ -118,4 +118,4 @@ class AlertsPlugin(Plugin): ## Name for MediaDockManager, SettingsManager ## self.textStrings[StringContent.VisibleName] = { u'title': translate('AlertsPlugin', 'Alerts', 'container title') - } + } \ No newline at end of file diff --git a/openlp/plugins/alerts/lib/alertstab.py b/openlp/plugins/alerts/lib/alertstab.py index 3b6c50a10..2ec2be24b 100644 --- a/openlp/plugins/alerts/lib/alertstab.py +++ b/openlp/plugins/alerts/lib/alertstab.py @@ -109,12 +109,12 @@ class AlertsTab(SettingsTab): translate('AlertsPlugin.AlertsTab', 'Background color:')) self.FontSizeLabel.setText( translate('AlertsPlugin.AlertsTab', 'Font size:')) - self.FontSizeSpinBox.setSuffix(UiStrings.FontSizePtUnit) + self.FontSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) self.TimeoutLabel.setText( translate('AlertsPlugin.AlertsTab', 'Alert timeout:')) - self.TimeoutSpinBox.setSuffix(UiStrings.Seconds) - self.PreviewGroupBox.setTitle(UiStrings.Preview) - self.FontPreview.setText(UiStrings.OLPV2) + self.TimeoutSpinBox.setSuffix(UiStrings().Seconds) + self.PreviewGroupBox.setTitle(UiStrings().Preview) + self.FontPreview.setText(UiStrings().OLPV2) def onBackgroundColorButtonClicked(self): new_color = QtGui.QColorDialog.getColor( @@ -191,4 +191,4 @@ class AlertsTab(SettingsTab): font.setPointSize(self.font_size) self.FontPreview.setFont(font) self.FontPreview.setStyleSheet(u'background-color: %s; color: %s' % - (self.bg_color, self.font_color)) + (self.bg_color, self.font_color)) \ No newline at end of file diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index aea732688..5a631bf00 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -53,9 +53,9 @@ class BiblePlugin(Plugin): Plugin.initialise(self) self.importBibleItem.setVisible(True) action_list = ActionList.get_instance() - action_list.add_action(self.importBibleItem, UiStrings.Import) + action_list.add_action(self.importBibleItem, UiStrings().Import) # Do not add the action to the list yet. - #action_list.add_action(self.exportBibleItem, UiStrings.Export) + #action_list.add_action(self.exportBibleItem, UiStrings().Export) # Set to invisible until we can export bibles self.exportBibleItem.setVisible(False) @@ -67,9 +67,9 @@ class BiblePlugin(Plugin): self.manager.finalise() Plugin.finalise(self) action_list = ActionList.get_instance() - action_list.remove_action(self.importBibleItem, UiStrings.Import) + action_list.remove_action(self.importBibleItem, UiStrings().Import) self.importBibleItem.setVisible(False) - #action_list.remove_action(self.exportBibleItem, UiStrings.Export) + #action_list.remove_action(self.exportBibleItem, UiStrings().Export) self.exportBibleItem.setVisible(False) def addImportMenuItem(self, import_menu): @@ -146,4 +146,4 @@ class BiblePlugin(Plugin): u'service': translate('BiblesPlugin', 'Add the selected Bible to the service') } - self.setPluginUiTextStrings(tooltips) + self.setPluginUiTextStrings(tooltips) \ No newline at end of file diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 35cd17c4b..439724b66 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -377,7 +377,7 @@ class BibleImportForm(OpenLPWizard): self.formatComboBox.setItemText(BibleFormat.OpenSong, WizardStrings.OS) self.formatComboBox.setItemText(BibleFormat.WebDownload, translate('BiblesPlugin.ImportWizardForm', 'Web Download')) - self.formatComboBox.setItemText(BibleFormat.OpenLP1, UiStrings.OLPV1) + self.formatComboBox.setItemText(BibleFormat.OpenLP1, UiStrings().OLPV1) self.openlp1FileLabel.setText( translate('BiblesPlugin.ImportWizardForm', 'Bible file:')) self.osisFileLabel.setText( @@ -451,13 +451,13 @@ class BibleImportForm(OpenLPWizard): elif self.currentPage() == self.selectPage: if self.field(u'source_format').toInt()[0] == BibleFormat.OSIS: if not self.field(u'osis_location').toString(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, WizardStrings.YouSpecifyFile % WizardStrings.OSIS) self.osisFileEdit.setFocus() return False elif self.field(u'source_format').toInt()[0] == BibleFormat.CSV: if not self.field(u'csv_testamentsfile').toString(): - answer = critical_error_message_box(UiStrings.NFSs, + answer = critical_error_message_box(UiStrings().NFSs, translate('BiblesPlugin.ImportWizardForm', 'You have not specified a testaments file. Do you ' 'want to proceed with the import?'), question=True) @@ -465,14 +465,14 @@ class BibleImportForm(OpenLPWizard): self.csvTestamentsEdit.setFocus() return False if not self.field(u'csv_booksfile').toString(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, translate('BiblesPlugin.ImportWizardForm', 'You need to specify a file with books of ' 'the Bible to use in the import.')) self.csvBooksEdit.setFocus() return False elif not self.field(u'csv_versefile').toString(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, translate('BiblesPlugin.ImportWizardForm', 'You need to specify a file of Bible ' 'verses to import.')) @@ -481,14 +481,14 @@ class BibleImportForm(OpenLPWizard): elif self.field(u'source_format').toInt()[0] == \ BibleFormat.OpenSong: if not self.field(u'opensong_file').toString(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, WizardStrings.YouSpecifyFile % WizardStrings.OS) self.openSongFileEdit.setFocus() return False elif self.field(u'source_format').toInt()[0] == BibleFormat.OpenLP1: if not self.field(u'openlp1_location').toString(): - critical_error_message_box(UiStrings.NFSs, - WizardStrings.YouSpecifyFile % UiStrings.OLPV1) + critical_error_message_box(UiStrings().NFSs, + WizardStrings.YouSpecifyFile % UiStrings().OLPV1) self.openlp1FileEdit.setFocus() return False return True @@ -497,13 +497,13 @@ class BibleImportForm(OpenLPWizard): license_copyright = \ unicode(self.field(u'license_copyright').toString()) if not license_version: - critical_error_message_box(UiStrings.EmptyField, + critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.ImportWizardForm', 'You need to specify a version name for your Bible.')) self.versionNameEdit.setFocus() return False elif not license_copyright: - critical_error_message_box(UiStrings.EmptyField, + critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.ImportWizardForm', 'You need to set a copyright for your Bible. ' 'Bibles in the Public Domain need to be marked as such.')) @@ -576,7 +576,7 @@ class BibleImportForm(OpenLPWizard): """ Show the file open dialog for the openlp.org 1.x file. """ - self.getFileName(WizardStrings.OpenTypeFile % UiStrings.OLPV1, + self.getFileName(WizardStrings.OpenTypeFile % UiStrings().OLPV1, self.openlp1FileEdit, u'%s (*.bible)' % translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x Bible Files')) @@ -765,4 +765,4 @@ class BibleImportForm(OpenLPWizard): self.progressLabel.setText(translate( 'BiblesPlugin.ImportWizardForm', 'Your Bible import failed.')) del self.manager.db_cache[importer.name] - delete_database(self.plugin.settingsSection, importer.file) + delete_database(self.plugin.settingsSection, importer.file) \ No newline at end of file diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index b013c402a..33c2c1f9f 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -118,16 +118,16 @@ class BiblesTab(SettingsTab): self.newChaptersCheckBox.setText( translate('BiblesPlugin.BiblesTab', 'Only show new chapter numbers')) - self.layoutStyleLabel.setText(UiStrings.LayoutStyle) - self.displayStyleLabel.setText(UiStrings.DisplayStyle) + self.layoutStyleLabel.setText(UiStrings().LayoutStyle) + self.displayStyleLabel.setText(UiStrings().DisplayStyle) self.bibleThemeLabel.setText( translate('BiblesPlugin.BiblesTab', 'Bible theme:')) self.layoutStyleComboBox.setItemText(LayoutStyle.VersePerSlide, - UiStrings.VersePerSlide) + UiStrings().VersePerSlide) self.layoutStyleComboBox.setItemText(LayoutStyle.VersePerLine, - UiStrings.VersePerLine) + UiStrings().VersePerLine) self.layoutStyleComboBox.setItemText(LayoutStyle.Continuous, - UiStrings.Continuous) + UiStrings().Continuous) self.displayStyleComboBox.setItemText(DisplayStyle.NoBrackets, translate('BiblesPlugin.BiblesTab', 'No Brackets')) self.displayStyleComboBox.setItemText(DisplayStyle.Round, @@ -207,4 +207,4 @@ class BiblesTab(SettingsTab): self.bibleThemeComboBox.addItem(u'') for theme in theme_list: self.bibleThemeComboBox.addItem(theme) - find_and_set_in_combo_box(self.bibleThemeComboBox, self.bible_theme) + find_and_set_in_combo_box(self.bibleThemeComboBox, self.bible_theme) \ No newline at end of file diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index bb72b9ff2..e0e06b02f 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -193,7 +193,7 @@ class BibleMediaItem(MediaManagerItem): self.advancedSearchButtonLayout.addWidget(self.advancedSearchButton) self.advancedLayout.addLayout( self.advancedSearchButtonLayout, 7, 0, 1, 3) - self.searchTabWidget.addTab(self.advancedTab, UiStrings.Advanced) + self.searchTabWidget.addTab(self.advancedTab, UiStrings().Advanced) # Add the search tab widget to the page layout. self.pageLayout.addWidget(self.searchTabWidget) # Combo Boxes @@ -242,15 +242,15 @@ class BibleMediaItem(MediaManagerItem): def retranslateUi(self): log.debug(u'retranslateUi') - self.quickVersionLabel.setText(u'%s:' % UiStrings.Version) + self.quickVersionLabel.setText(u'%s:' % UiStrings().Version) self.quickSecondLabel.setText( translate('BiblesPlugin.MediaItem', 'Second:')) self.quickSearchLabel.setText( translate('BiblesPlugin.MediaItem', 'Find:')) - self.quickSearchButton.setText(UiStrings.Search) + self.quickSearchButton.setText(UiStrings().Search) self.quickClearLabel.setText( translate('BiblesPlugin.MediaItem', 'Results:')) - self.advancedVersionLabel.setText(u'%s:' % UiStrings.Version) + self.advancedVersionLabel.setText(u'%s:' % UiStrings().Version) self.advancedSecondLabel.setText( translate('BiblesPlugin.MediaItem', 'Second:')) self.advancedBookLabel.setText( @@ -265,7 +265,7 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'To:')) self.advancedClearLabel.setText( translate('BiblesPlugin.MediaItem', 'Results:')) - self.advancedSearchButton.setText(UiStrings.Search) + self.advancedSearchButton.setText(UiStrings().Search) self.quickClearComboBox.addItem( translate('BiblesPlugin.MediaItem', 'Clear')) self.quickClearComboBox.addItem( @@ -274,13 +274,13 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'Clear')) self.advancedClearComboBox.addItem( translate('BiblesPlugin.MediaItem', 'Keep')) - self.quickLayoutLabel.setText(UiStrings.LayoutStyle) + self.quickLayoutLabel.setText(UiStrings().LayoutStyle) self.quickLayoutComboBox.setItemText(LayoutStyle.VersePerSlide, - UiStrings.VersePerSlide) + UiStrings().VersePerSlide) self.quickLayoutComboBox.setItemText(LayoutStyle.VersePerLine, - UiStrings.VersePerLine) + UiStrings().VersePerLine) self.quickLayoutComboBox.setItemText(LayoutStyle.Continuous, - UiStrings.Continuous) + UiStrings().Continuous) def initialise(self): log.debug(u'bible manager initialise') @@ -849,4 +849,4 @@ class BibleMediaItem(MediaManagerItem): self.settings.layout_style) QtCore.QSettings().setValue( self.settingsSection + u'/verse layout style', - QtCore.QVariant(self.settings.layout_style)) + QtCore.QVariant(self.settings.layout_style)) \ No newline at end of file diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index 1ea0413ff..7a6c1f07b 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -107,11 +107,11 @@ class Ui_CustomEditDialog(object): translate('CustomPlugin.EditCustomForm', 'Edit Custom Slides')) self.titleLabel.setText( translate('CustomPlugin.EditCustomForm', '&Title:')) - self.addButton.setText(UiStrings.Add) + self.addButton.setText(UiStrings().Add) self.addButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Add a new slide at ' 'bottom.')) - self.editButton.setText(UiStrings.Edit) + self.editButton.setText(UiStrings().Edit) self.editButton.setToolTip( translate('CustomPlugin.EditCustomForm', 'Edit the selected ' 'slide.')) @@ -124,4 +124,4 @@ class Ui_CustomEditDialog(object): translate('CustomPlugin.EditCustomForm', 'The&me:')) self.creditLabel.setText( translate('CustomPlugin.EditCustomForm', '&Credits:')) - self.previewButton.setText(UiStrings.SaveAndPreview) + self.previewButton.setText(UiStrings().SaveAndPreview) \ No newline at end of file diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index b045c58a4..b508104c4 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -110,7 +110,7 @@ class CustomMediaItem(MediaManagerItem): """ Edit a custom item """ - if check_item_selected(self.listView, UiStrings.SelectEdit): + if check_item_selected(self.listView, UiStrings().SelectEdit): item = self.listView.currentItem() item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] self.parent.edit_custom_form.loadCustom(item_id, False) @@ -121,7 +121,7 @@ class CustomMediaItem(MediaManagerItem): """ Remove a custom item from the list and database """ - if check_item_selected(self.listView, UiStrings.SelectDelete): + if check_item_selected(self.listView, UiStrings().SelectDelete): row_list = [item.row() for item in self.listView.selectedIndexes()] row_list.sort(reverse=True) id_list = [(item.data(QtCore.Qt.UserRole)).toInt()[0] @@ -160,4 +160,4 @@ class CustomMediaItem(MediaManagerItem): else: raw_footer.append(u'') service_item.raw_footer = raw_footer - return True + return True \ No newline at end of file diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index c29adc3b1..298e701e3 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -55,11 +55,11 @@ class ImageMediaItem(MediaManagerItem): 'Select Image(s)') file_formats = get_images_filter() self.onNewFileMasks = u'%s;;%s (*.*) (*)' % (file_formats, - UiStrings.AllFiles) - self.replaceAction.setText(UiStrings.ReplaceBG) - self.replaceAction.setToolTip(UiStrings.ReplaceLiveBG) - self.resetAction.setText(UiStrings.ResetBG) - self.resetAction.setToolTip(UiStrings.ResetLiveBG) + UiStrings().AllFiles) + self.replaceAction.setText(UiStrings().ReplaceBG) + self.replaceAction.setToolTip(UiStrings().ReplaceLiveBG) + self.resetAction.setText(UiStrings().ResetBG) + self.resetAction.setToolTip(UiStrings().ResetLiveBG) def requiredIcons(self): MediaManagerItem.requiredIcons(self) @@ -198,7 +198,7 @@ class ImageMediaItem(MediaManagerItem): self.parent.liveController.display.directImage(name, filename) self.resetAction.setVisible(True) else: - critical_error_message_box(UiStrings.LiveBGError, + critical_error_message_box(UiStrings().LiveBGError, unicode(translate('ImagePlugin.MediaItem', 'There was a problem replacing your background, ' - 'the image file "%s" no longer exists.')) % filename) + 'the image file "%s" no longer exists.')) % filename) \ No newline at end of file diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 7612ab7c9..559af11e2 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -60,11 +60,11 @@ class MediaMediaItem(MediaManagerItem): self.onNewFileMasks = unicode(translate('MediaPlugin.MediaItem', 'Videos (%s);;Audio (%s);;%s (*)')) % ( u' '.join(self.parent.video_extensions_list), - u' '.join(self.parent.audio_extensions_list), UiStrings.AllFiles) - self.replaceAction.setText(UiStrings.ReplaceBG) - self.replaceAction.setToolTip(UiStrings.ReplaceLiveBG) - self.resetAction.setText(UiStrings.ResetBG) - self.resetAction.setToolTip(UiStrings.ResetLiveBG) + u' '.join(self.parent.audio_extensions_list), UiStrings().AllFiles) + self.replaceAction.setText(UiStrings().ReplaceBG) + self.replaceAction.setToolTip(UiStrings().ReplaceLiveBG) + self.resetAction.setText(UiStrings().ResetBG) + self.resetAction.setToolTip(UiStrings().ResetLiveBG) def requiredIcons(self): MediaManagerItem.requiredIcons(self) @@ -111,7 +111,7 @@ class MediaMediaItem(MediaManagerItem): self.parent.liveController.display.video(filename, 0, True) self.resetAction.setVisible(True) else: - critical_error_message_box(UiStrings.LiveBGError, + critical_error_message_box(UiStrings().LiveBGError, unicode(translate('MediaPlugin.MediaItem', 'There was a problem replacing your background, ' 'the media file "%s" no longer exists.')) % filename) @@ -209,4 +209,4 @@ class MediaMediaItem(MediaManagerItem): img = QtGui.QPixmap(u':/media/media_video.png').toImage() item_name.setIcon(build_icon(img)) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) - self.listView.addItem(item_name) + self.listView.addItem(item_name) \ No newline at end of file diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 6009ff906..74ff3fea8 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -203,7 +203,7 @@ class PresentationMediaItem(MediaManagerItem): """ Remove a presentation item from the list """ - if check_item_selected(self.listView, UiStrings.SelectDelete): + if check_item_selected(self.listView, UiStrings().SelectDelete): items = self.listView.selectedIndexes() row_list = [item.row() for item in items] row_list.sort(reverse=True) @@ -296,4 +296,4 @@ class PresentationMediaItem(MediaManagerItem): if self.controllers[controller].enabled(): if filetype in self.controllers[controller].alsosupports: return controller - return None + return None \ No newline at end of file diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index 8e3a98031..bba2b469e 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -86,7 +86,7 @@ class PresentationTab(SettingsTab): checkbox.setText( unicode(translate('PresentationPlugin.PresentationTab', '%s (unavailable)')) % controller.name) - self.AdvancedGroupBox.setTitle(UiStrings.Advanced) + self.AdvancedGroupBox.setTitle(UiStrings().Advanced) self.OverrideAppCheckBox.setText( translate('PresentationPlugin.PresentationTab', 'Allow presentation application to be overriden')) @@ -131,4 +131,4 @@ class PresentationTab(SettingsTab): QtCore.QVariant(self.OverrideAppCheckBox.checkState())) changed = True if changed: - Receiver.send_message(u'mediaitem_presentation_rebuild') + Receiver.send_message(u'mediaitem_presentation_rebuild') \ No newline at end of file diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index a9bd132cd..749d5184d 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -260,11 +260,11 @@ class Ui_EditSongDialog(object): translate('SongsPlugin.EditSongForm', '&Lyrics:')) self.verseOrderLabel.setText( translate('SongsPlugin.EditSongForm', '&Verse order:')) - self.verseAddButton.setText(UiStrings.Add) - self.verseEditButton.setText(UiStrings.Edit) + self.verseAddButton.setText(UiStrings().Add) + self.verseEditButton.setText(UiStrings().Edit) self.verseEditAllButton.setText( translate('SongsPlugin.EditSongForm', 'Ed&it All')) - self.verseDeleteButton.setText(UiStrings.Delete) + self.verseDeleteButton.setText(UiStrings().Delete) self.songTabWidget.setTabText( self.songTabWidget.indexOf(self.lyricsTab), translate('SongsPlugin.EditSongForm', 'Title && Lyrics')) @@ -289,13 +289,13 @@ class Ui_EditSongDialog(object): self.songTabWidget.indexOf(self.authorsTab), translate('SongsPlugin.EditSongForm', 'Authors, Topics && Song Book')) - self.themeGroupBox.setTitle(UiStrings.Theme) + self.themeGroupBox.setTitle(UiStrings().Theme) self.themeAddButton.setText( translate('SongsPlugin.EditSongForm', 'New &Theme')) self.rightsGroupBox.setTitle( translate('SongsPlugin.EditSongForm', 'Copyright Information')) self.copyrightInsertButton.setText(SongStrings.CopyrightSymbol) - self.CCLILabel.setText(UiStrings.CCLINumberLabel) + self.CCLILabel.setText(UiStrings().CCLINumberLabel) self.commentsGroupBox.setTitle( translate('SongsPlugin.EditSongForm', 'Comments')) self.songTabWidget.setTabText( @@ -313,4 +313,4 @@ def editSongDialogComboBox(parent, name): comboBox.setEditable(True) comboBox.setInsertPolicy(QtGui.QComboBox.NoInsert) comboBox.setObjectName(name) - return comboBox + return comboBox \ No newline at end of file diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 85294d92b..0b9c9316f 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -96,7 +96,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): QtCore.SIGNAL(u'theme_update_list'), self.loadThemes) self.previewButton = QtGui.QPushButton() self.previewButton.setObjectName(u'previewButton') - self.previewButton.setText(UiStrings.SaveAndPreview) + self.previewButton.setText(UiStrings().SaveAndPreview) self.buttonBox.addButton( self.previewButton, QtGui.QDialogButtonBox.ActionRole) QtCore.QObject.connect(self.buttonBox, @@ -355,7 +355,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.__addAuthorToList(author) self.authorsComboBox.setCurrentIndex(0) else: - QtGui.QMessageBox.warning(self, UiStrings.NISs, + QtGui.QMessageBox.warning(self, UiStrings().NISs, translate('SongsPlugin.EditSongForm', 'You have not selected ' 'a valid author. Either select an author from the list, ' 'or type in a new author and click the "Add Author to ' @@ -414,7 +414,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.topicsListView.addItem(topic_item) self.topicsComboBox.setCurrentIndex(0) else: - QtGui.QMessageBox.warning(self, UiStrings.NISs, + QtGui.QMessageBox.warning(self, UiStrings().NISs, translate('SongsPlugin.EditSongForm', 'You have not selected ' 'a valid topic. Either select a topic from the list, or ' 'type in a new topic and click the "Add Topic to Song" ' diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index d71321b98..745ee3f67 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -175,7 +175,7 @@ class SongExportForm(OpenLPWizard): self.availableSongsPage.setSubTitle( translate('SongsPlugin.ExportWizardForm', 'Check the songs you want to export.')) - self.searchLabel.setText(u'%s:' % UiStrings.Search) + self.searchLabel.setText(u'%s:' % UiStrings().Search) self.uncheckButton.setText( translate('SongsPlugin.ExportWizardForm', 'Uncheck All')) self.checkButton.setText( @@ -207,7 +207,7 @@ class SongExportForm(OpenLPWizard): self.availableListWidget) if item.checkState() ] if not items: - critical_error_message_box(UiStrings.NISp, + critical_error_message_box(UiStrings().NISp, translate('SongsPlugin.ExportWizardForm', 'You need to add at least one Song to export.')) return False @@ -360,4 +360,4 @@ class SongExportForm(OpenLPWizard): SettingsManager.get_last_dir(self.plugin.settingsSection, 1), options=QtGui.QFileDialog.ShowDirsOnly)) SettingsManager.set_last_dir(self.plugin.settingsSection, path, 1) - self.directoryLineEdit.setText(path) + self.directoryLineEdit.setText(path) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 468d2f341..dde8826e0 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -235,8 +235,8 @@ class SongImportForm(OpenLPWizard): self.sourcePage.setTitle(WizardStrings.ImportSelect) self.sourcePage.setSubTitle(WizardStrings.ImportSelectLong) self.formatLabel.setText(WizardStrings.FormatLabel) - self.formatComboBox.setItemText(SongFormat.OpenLP2, UiStrings.OLPV2) - self.formatComboBox.setItemText(SongFormat.OpenLP1, UiStrings.OLPV1) + self.formatComboBox.setItemText(SongFormat.OpenLP2, UiStrings().OLPV2) + self.formatComboBox.setItemText(SongFormat.OpenLP1, UiStrings().OLPV1) self.formatComboBox.setItemText( SongFormat.OpenLyrics, WizardStrings.OL) self.formatComboBox.setItemText(SongFormat.OpenSong, WizardStrings.OS) @@ -261,10 +261,10 @@ class SongImportForm(OpenLPWizard): # self.formatComboBox.setItemText(SongFormat.CSV, WizardStrings.CSV) self.openLP2FilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.openLP2BrowseButton.setText(UiStrings.Browse) + self.openLP2BrowseButton.setText(UiStrings().Browse) self.openLP1FilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.openLP1BrowseButton.setText(UiStrings.Browse) + self.openLP1BrowseButton.setText(UiStrings().Browse) self.openLP1DisabledLabel.setText(WizardStrings.NoSqlite) self.openLyricsAddButton.setText( translate('SongsPlugin.ImportWizardForm', 'Add Files...')) @@ -305,10 +305,10 @@ class SongImportForm(OpenLPWizard): 'find OpenOffice.org on your computer.')) self.easiSlidesFilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.easiSlidesBrowseButton.setText(UiStrings.Browse) + self.easiSlidesBrowseButton.setText(UiStrings().Browse) self.ewFilenameLabel.setText( translate('SongsPlugin.ImportWizardForm', 'Filename:')) - self.ewBrowseButton.setText(UiStrings.Browse) + self.ewBrowseButton.setText(UiStrings().Browse) self.songBeamerAddButton.setText( translate('SongsPlugin.ImportWizardForm', 'Add Files...')) self.songBeamerRemoveButton.setText( @@ -323,7 +323,7 @@ class SongImportForm(OpenLPWizard): translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) # self.csvFilenameLabel.setText( # translate('SongsPlugin.ImportWizardForm', 'Filename:')) -# self.csvBrowseButton.setText(UiStrings.Browse) +# self.csvBrowseButton.setText(UiStrings().Browse) self.progressPage.setTitle(WizardStrings.Importing) self.progressPage.setSubTitle( translate('SongsPlugin.ImportWizardForm', @@ -346,49 +346,49 @@ class SongImportForm(OpenLPWizard): source_format = self.formatComboBox.currentIndex() if source_format == SongFormat.OpenLP2: if self.openLP2FilenameEdit.text().isEmpty(): - critical_error_message_box(UiStrings.NFSs, - WizardStrings.YouSpecifyFile % UiStrings.OLPV2) + critical_error_message_box(UiStrings().NFSs, + WizardStrings.YouSpecifyFile % UiStrings().OLPV2) self.openLP2BrowseButton.setFocus() return False elif source_format == SongFormat.OpenLP1: if self.openLP1FilenameEdit.text().isEmpty(): - critical_error_message_box(UiStrings.NFSs, - WizardStrings.YouSpecifyFile % UiStrings.OLPV1) + critical_error_message_box(UiStrings().NFSs, + WizardStrings.YouSpecifyFile % UiStrings().OLPV1) self.openLP1BrowseButton.setFocus() return False elif source_format == SongFormat.OpenLyrics: if self.openLyricsFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.OL) self.openLyricsAddButton.setFocus() return False elif source_format == SongFormat.OpenSong: if self.openSongFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.OS) self.openSongAddButton.setFocus() return False elif source_format == SongFormat.WordsOfWorship: if self.wordsOfWorshipFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.WoW) self.wordsOfWorshipAddButton.setFocus() return False elif source_format == SongFormat.CCLI: if self.ccliFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.CCLI) self.ccliAddButton.setFocus() return False elif source_format == SongFormat.SongsOfFellowship: if self.songsOfFellowshipFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.SoF) self.songsOfFellowshipAddButton.setFocus() return False elif source_format == SongFormat.Generic: if self.genericFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, translate('SongsPlugin.ImportWizardForm', 'You need to specify at least one document or ' 'presentation file to import from.')) @@ -396,31 +396,31 @@ class SongImportForm(OpenLPWizard): return False elif source_format == SongFormat.EasiSlides: if self.easiSlidesFilenameEdit.text().isEmpty(): - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.ES) self.easiSlidesBrowseButton.setFocus() return False elif source_format == SongFormat.EasyWorship: if self.ewFilenameEdit.text().isEmpty(): - critical_error_message_box(UiStrings.NFSs, + critical_error_message_box(UiStrings().NFSs, WizardStrings.YouSpecifyFile % WizardStrings.EW) self.ewBrowseButton.setFocus() return False elif source_format == SongFormat.SongBeamer: if self.songBeamerFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.SB) self.songBeamerAddButton.setFocus() return False elif source_format == SongFormat.SongShowPlus: if self.songShowPlusFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.SSP) self.wordsOfWorshipAddButton.setFocus() return False elif source_format == SongFormat.FoilPresenter: if self.foilPresenterFileListWidget.count() == 0: - critical_error_message_box(UiStrings.NFSp, + critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.FP) self.foilPresenterAddButton.setFocus() return False @@ -446,7 +446,7 @@ class SongImportForm(OpenLPWizard): """ if filters: filters += u';;' - filters += u'%s (*)' % UiStrings.AllFiles + filters += u'%s (*)' % UiStrings().AllFiles filenames = QtGui.QFileDialog.getOpenFileNames(self, title, SettingsManager.get_last_dir(self.plugin.settingsSection, 1), filters) @@ -476,7 +476,7 @@ class SongImportForm(OpenLPWizard): """ Get OpenLP v2 song database file """ - self.getFileName(WizardStrings.OpenTypeFile % UiStrings.OLPV2, + self.getFileName(WizardStrings.OpenTypeFile % UiStrings().OLPV2, self.openLP2FilenameEdit, u'%s (*.sqlite)' % (translate('SongsPlugin.ImportWizardForm', 'OpenLP 2.0 Databases')) @@ -486,7 +486,7 @@ class SongImportForm(OpenLPWizard): """ Get OpenLP v1 song database file """ - self.getFileName(WizardStrings.OpenTypeFile % UiStrings.OLPV1, + self.getFileName(WizardStrings.OpenTypeFile % UiStrings().OLPV1, self.openLP1FilenameEdit, u'%s (*.olp)' % translate('SongsPlugin.ImportWizardForm', 'openlp.org v1.x Databases') @@ -836,4 +836,4 @@ class SongImportForm(OpenLPWizard): setattr(self, prefix + u'DisabledLayout', disabledLayout) setattr(self, prefix + u'DisabledLabel', disabledLabel) setattr(self, prefix + u'ImportWidget', importWidget) - return importWidget + return importWidget \ No newline at end of file diff --git a/openlp/plugins/songs/forms/songmaintenancedialog.py b/openlp/plugins/songs/forms/songmaintenancedialog.py index 9d4b7da91..3d65783ac 100644 --- a/openlp/plugins/songs/forms/songmaintenancedialog.py +++ b/openlp/plugins/songs/forms/songmaintenancedialog.py @@ -149,17 +149,17 @@ class Ui_SongMaintenanceDialog(object): self.listItemAuthors.setText(SongStrings.Authors) self.listItemTopics.setText(SongStrings.Topics) self.listItemBooks.setText(SongStrings.SongBooks) - self.authorsAddButton.setText(UiStrings.Add) - self.authorsEditButton.setText(UiStrings.Edit) - self.authorsDeleteButton.setText(UiStrings.Delete) - self.topicsAddButton.setText(UiStrings.Add) - self.topicsEditButton.setText(UiStrings.Edit) - self.topicsDeleteButton.setText(UiStrings.Delete) - self.booksAddButton.setText(UiStrings.Add) - self.booksEditButton.setText(UiStrings.Edit) - self.booksDeleteButton.setText(UiStrings.Delete) + self.authorsAddButton.setText(UiStrings().Add) + self.authorsEditButton.setText(UiStrings().Edit) + self.authorsDeleteButton.setText(UiStrings().Delete) + self.topicsAddButton.setText(UiStrings().Add) + self.topicsEditButton.setText(UiStrings().Edit) + self.topicsDeleteButton.setText(UiStrings().Delete) + self.booksAddButton.setText(UiStrings().Add) + self.booksEditButton.setText(UiStrings().Edit) + self.booksDeleteButton.setText(UiStrings().Delete) typeListWidth = max(self.fontMetrics().width(SongStrings.Authors), self.fontMetrics().width(SongStrings.Topics), self.fontMetrics().width(SongStrings.SongBooks)) self.typeListWidget.setFixedWidth(typeListWidth + - self.typeListWidget.iconSize().width() + 32) + self.typeListWidget.iconSize().width() + 32) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 0a1effcf3..48e614eeb 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -115,7 +115,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): else: critical_error_message_box(dlg_title, err_text) else: - critical_error_message_box(dlg_title, UiStrings.NISs) + critical_error_message_box(dlg_title, UiStrings().NISs) def resetAuthors(self): """ @@ -503,4 +503,4 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): editButton.setEnabled(False) else: deleteButton.setEnabled(True) - editButton.setEnabled(True) + editButton.setEnabled(True) \ No newline at end of file diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 5890fc76d..8245adfbc 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -137,8 +137,8 @@ class SongMediaItem(MediaManagerItem): QtCore.QVariant(u'True')).toBool() def retranslateUi(self): - self.searchTextLabel.setText(u'%s:' % UiStrings.Search) - self.searchTextButton.setText(UiStrings.Search) + self.searchTextLabel.setText(u'%s:' % UiStrings().Search) + self.searchTextButton.setText(UiStrings().Search) self.maintenanceAction.setText(SongStrings.SongMaintenance) self.maintenanceAction.setToolTip(translate('SongsPlugin.MediaItem', 'Maintain the lists of authors, topics and books')) @@ -153,7 +153,7 @@ class SongMediaItem(MediaManagerItem): translate('SongsPlugin.MediaItem', 'Lyrics')), (SongSearch.Authors, u':/songs/song_search_author.png', SongStrings.Authors), - (SongSearch.Themes, u':/slides/slide_theme.png', UiStrings.Themes) + (SongSearch.Themes, u':/slides/slide_theme.png', UiStrings().Themes) ]) self.searchTextEdit.setCurrentSearchType(QtCore.QSettings().value( u'%s/last search type' % self.settingsSection, @@ -312,7 +312,7 @@ class SongMediaItem(MediaManagerItem): Edit a song """ log.debug(u'onEditClick') - if check_item_selected(self.listView, UiStrings.SelectEdit): + if check_item_selected(self.listView, UiStrings().SelectEdit): self.editItem = self.listView.currentItem() item_id = (self.editItem.data(QtCore.Qt.UserRole)).toInt()[0] self.edit_song_form.loadSong(item_id, False) @@ -323,7 +323,7 @@ class SongMediaItem(MediaManagerItem): """ Remove a song from the list and database """ - if check_item_selected(self.listView, UiStrings.SelectDelete): + if check_item_selected(self.listView, UiStrings().SelectDelete): items = self.listView.selectedIndexes() if QtGui.QMessageBox.question(self, translate('SongsPlugin.MediaItem', 'Delete Song(s)?'), @@ -472,4 +472,4 @@ class SongMediaItem(MediaManagerItem): Locale aware collation of song titles """ return locale.strcoll(unicode(song_1.title.lower()), - unicode(song_2.title.lower())) + unicode(song_2.title.lower())) \ No newline at end of file diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 4fc098949..0cace4977 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -67,9 +67,9 @@ class SongsPlugin(Plugin): Plugin.initialise(self) self.toolsReindexItem.setVisible(True) action_list = ActionList.get_instance() - action_list.add_action(self.SongImportItem, UiStrings.Import) - action_list.add_action(self.SongExportItem, UiStrings.Export) - action_list.add_action(self.toolsReindexItem, UiStrings.Tools) + action_list.add_action(self.SongImportItem, UiStrings().Import) + action_list.add_action(self.SongExportItem, UiStrings().Export) + action_list.add_action(self.toolsReindexItem, UiStrings().Tools) def addImportMenuItem(self, import_menu): """ @@ -139,7 +139,7 @@ class SongsPlugin(Plugin): if maxSongs == 0: return progressDialog = QtGui.QProgressDialog( - translate('SongsPlugin', 'Reindexing songs...'), UiStrings.Cancel, + translate('SongsPlugin', 'Reindexing songs...'), UiStrings().Cancel, 0, maxSongs, self.formparent) progressDialog.setWindowModality(QtCore.Qt.WindowModal) songs = self.manager.get_all_objects(Song) @@ -258,7 +258,7 @@ class SongsPlugin(Plugin): self.manager.finalise() self.toolsReindexItem.setVisible(False) action_list = ActionList.get_instance() - action_list.remove_action(self.SongImportItem, UiStrings.Import) - action_list.remove_action(self.SongExportItem, UiStrings.Export) - action_list.remove_action(self.toolsReindexItem, UiStrings.Tools) - Plugin.finalise(self) + action_list.remove_action(self.SongImportItem, UiStrings().Import) + action_list.remove_action(self.SongExportItem, UiStrings().Export) + action_list.remove_action(self.toolsReindexItem, UiStrings().Tools) + Plugin.finalise(self) \ No newline at end of file From 7fdd4bb1c1828e1c1cc70f0c7de2a9ed8bf720f8 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 15 Apr 2011 23:55:11 +0200 Subject: [PATCH 092/148] Line length cleanups. --- openlp/core/lib/ui.py | 5 +++-- openlp/core/ui/servicemanager.py | 11 +++++++---- openlp/core/ui/starttimeform.py | 5 +++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 013231b8c..a0686416c 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -175,7 +175,8 @@ def create_accept_reject_button_box(parent, okay=False): accept_button = QtGui.QDialogButtonBox.Save if okay: accept_button = QtGui.QDialogButtonBox.Ok - button_box.setStandardButtons(accept_button | QtGui.QDialogButtonBox.Cancel) + button_box.setStandardButtons( + accept_button | QtGui.QDialogButtonBox.Cancel) button_box.setObjectName(u'%sButtonBox' % parent) QtCore.QObject.connect(button_box, QtCore.SIGNAL(u'accepted()'), parent.accept) @@ -445,4 +446,4 @@ def find_and_set_in_combo_box(combo_box, value_to_find): if index == -1: # Not Found. index = 0 - combo_box.setCurrentIndex(index) \ No newline at end of file + combo_box.setCurrentIndex(index) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index d682f5b52..66cc61989 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -169,7 +169,8 @@ class ServiceManager(QtGui.QWidget): self.onServiceTop, shortcuts=[QtCore.Qt.Key_Home]) self.serviceManagerList.moveTop.setObjectName(u'moveTop') action_list = ActionList.get_instance() - action_list.add_category(UiStrings().Service, CategoryOrder.standardToolbar) + action_list.add_category( + UiStrings().Service, CategoryOrder.standardToolbar) action_list.add_action( self.serviceManagerList.moveTop, UiStrings().Service) self.serviceManagerList.moveUp = self.orderToolbar.addToolbarButton( @@ -179,7 +180,8 @@ class ServiceManager(QtGui.QWidget): 'Move item up one position in the service.'), self.onServiceUp, shortcuts=[QtCore.Qt.Key_PageUp]) self.serviceManagerList.moveUp.setObjectName(u'moveUp') - action_list.add_action(self.serviceManagerList.moveUp, UiStrings().Service) + action_list.add_action( + self.serviceManagerList.moveUp, UiStrings().Service) self.serviceManagerList.moveDown = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', 'Move &down'), u':/services/service_down.png', @@ -231,7 +233,8 @@ class ServiceManager(QtGui.QWidget): 'Expand all the service items.'), self.onExpandAll, shortcuts=[QtCore.Qt.Key_Plus]) self.serviceManagerList.expand.setObjectName(u'expand') - action_list.add_action(self.serviceManagerList.expand, UiStrings().Service) + action_list.add_action( + self.serviceManagerList.expand, UiStrings().Service) self.serviceManagerList.collapse = self.orderToolbar.addToolbarButton( translate('OpenLP.ServiceManager', '&Collapse all'), u':/services/service_collapse_all.png', @@ -1311,4 +1314,4 @@ class ServiceManager(QtGui.QWidget): Print a Service Order Sheet. """ settingDialog = PrintServiceForm(self.mainwindow, self) - settingDialog.exec_() \ No newline at end of file + settingDialog.exec_() diff --git a/openlp/core/ui/starttimeform.py b/openlp/core/ui/starttimeform.py index b460bbbd0..956b01a9d 100644 --- a/openlp/core/ui/starttimeform.py +++ b/openlp/core/ui/starttimeform.py @@ -53,7 +53,8 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): self.hourFinishSpinBox.setValue(hours) self.minuteFinishSpinBox.setValue(minutes) self.secondFinishSpinBox.setValue(seconds) - self.hourFinishLabel.setText(u'%s%s' % (unicode(hour), UiStrings().Hours)) + self.hourFinishLabel.setText(u'%s%s' % (unicode(hour), + UiStrings().Hours)) self.minuteFinishLabel.setText(u'%s%s' % (unicode(minutes), UiStrings().Minutes)) self.secondFinishLabel.setText(u'%s%s' % @@ -90,4 +91,4 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): seconds -= 3600 * hours minutes = seconds / 60 seconds -= 60 * minutes - return hours, minutes, seconds \ No newline at end of file + return hours, minutes, seconds From b46aa38ce93836662c75efae5e35294dc3c53aa9 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 16 Apr 2011 00:46:24 +0200 Subject: [PATCH 093/148] Add a bit of spacing around the edges of the settings form to make it feel a little less crowded. --- openlp/core/ui/settingsdialog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/settingsdialog.py b/openlp/core/ui/settingsdialog.py index 485cb9c5f..50bcca4e2 100644 --- a/openlp/core/ui/settingsdialog.py +++ b/openlp/core/ui/settingsdialog.py @@ -37,7 +37,7 @@ class Ui_SettingsDialog(object): build_icon(u':/system/system_settings.png')) self.dialogLayout = QtGui.QGridLayout(settingsDialog) self.dialogLayout.setObjectName(u'dialogLayout') - self.dialogLayout.setMargin(0) + self.dialogLayout.setMargin(8) self.settingListWidget = QtGui.QListWidget(settingsDialog) self.settingListWidget.setUniformItemSizes(True) self.settingListWidget.setMinimumSize(QtCore.QSize(150, 0)) From bc3fca35fc70612d3992d08e65d37c7f5babc3a4 Mon Sep 17 00:00:00 2001 From: John Cegalis Date: Fri, 15 Apr 2011 20:50:55 -0400 Subject: [PATCH 094/148] added blank to --- documentation/manual/source/songs.rst | 29 +++++++++++++++------------ 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/documentation/manual/source/songs.rst b/documentation/manual/source/songs.rst index 23f054127..c718f812d 100644 --- a/documentation/manual/source/songs.rst +++ b/documentation/manual/source/songs.rst @@ -103,23 +103,25 @@ Creating or editing a song slide ================================ If you want to create a new song slide or, once you have a song imported, you -can edit and rearrange the Title & Lyrics, Author, Topics & Song Book, -assign a Theme, or edit *Copyright Info & Comments* as needed. This is done -through the `Song Editor`. To use the `Song Editor` to edit an existing song you -can click on a song in the `Media Manager` and then click the button to -:guilabel:`Edit the selected song` or right click a song from either the -`Media Manager` or from the `Service Manager` and click :guilabel:`Edit item`. -If you are adding a new song click :guilabel:`Add a new Song` in the -`Media Manager`. +want to edit and rearrange the Title & Lyrics, Author, Topics & Song Book, +assign a Theme, or edit Copyright Info & Comments, you will do this through the +`Song Editor`. + +**Edit:** To edit an existing song you can either click on a song in the +`Media Manager` and then click the button to :guilabel:`Edit the selected song` +or right click a song from either the `Media Manager` or additionally from the +`Service Manager` and click :guilabel:`Edit item`. If you are adding a new song +click :guilabel:`Add a new Song` in the `Media Manager`. .. image:: pics/song_edit_lyrics.png **Title:** This is where you would name your song or edit a song name. -**Alternate title:** You can add a name in this box that will bring up the song -in Titles search. **Example:** You could use an alternate title of "hymn" on all -your hymn song titles for grouping. When you search "hymn" it will show all the -hymns that have "hymn" for the Alternate title. +**Alternate title:**Alternate Title was for songs with two names +"Lord the Light" - "Shine Jesus Shine". You can also add a name in this box that +will bring up the song in Titles search. **Example:** You could use an alternate +title of "hymn" on all your hymn song titles for grouping. When you search "hymn" +it will show all the hymns that have "hymn" for the Alternate title. **Lyrics:** The *Lyrics* window shows all lyrics imported or added. On the left side of the lyrics you will see a capital letter followed by a number. A V1 @@ -135,7 +137,8 @@ displayed, with only a blank space in between each entry. The correct format wil look like this: V1 C1 V2 C1 V3 C1. If you forget to put a space in between the order, or if you do not have the corresponding verse number, OpenLP will politely tell you with a pop-up error message what is wrong so you can correct your -mistake and save it. +mistake and save it. Verse order is optional and if left blank the verses will +display in the order seen in *Lyrics*. .. image:: pics/song_edit_verse_error.png From de8e8ee422119212b1b44bc292efb58c0cf4ba8c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 16 Apr 2011 09:23:00 +0200 Subject: [PATCH 095/148] fixed missing space --- openlp/core/ui/servicemanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index ba9ca718a..b81c746d2 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -611,7 +611,7 @@ class ServiceManager(QtGui.QWidget): u'%s' % fileName) QtGui.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Corrupt File'), - translate('OpenLP.ServiceManager', 'This file is either' + translate('OpenLP.ServiceManager', 'This file is either ' 'corrupt or not an OpenLP 2.0 service file.')) return finally: From 336489d215fd581f5e7490c2184ea801fc93a30f Mon Sep 17 00:00:00 2001 From: John Cegalis Date: Sat, 16 Apr 2011 04:32:30 -0400 Subject: [PATCH 096/148] added blank to --- .../pics/song_edit_author_maintenance.png | Bin 0 -> 16943 bytes .../manual/source/pics/song_edit_authors.png | Bin 0 -> 37481 bytes .../manual/source/pics/song_edit_lyrics.png | Bin 0 -> 62750 bytes .../source/pics/song_edit_maintenance.png | Bin 0 -> 46167 bytes .../pics/song_edit_songbook_maintenance.png | Bin 0 -> 12072 bytes .../source/pics/song_edit_theme_copyright.png | Bin 0 -> 29992 bytes .../source/pics/song_edit_topic_maintenance.png | Bin 0 -> 9956 bytes .../source/pics/song_edit_verse_error.png | Bin 0 -> 14183 bytes .../manual/source/pics/song_edit_verse_type.png | Bin 0 -> 46119 bytes documentation/manual/source/songs.rst | 2 +- 10 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 documentation/manual/source/pics/song_edit_author_maintenance.png create mode 100644 documentation/manual/source/pics/song_edit_authors.png create mode 100644 documentation/manual/source/pics/song_edit_lyrics.png create mode 100644 documentation/manual/source/pics/song_edit_maintenance.png create mode 100644 documentation/manual/source/pics/song_edit_songbook_maintenance.png create mode 100644 documentation/manual/source/pics/song_edit_theme_copyright.png create mode 100644 documentation/manual/source/pics/song_edit_topic_maintenance.png create mode 100644 documentation/manual/source/pics/song_edit_verse_error.png create mode 100644 documentation/manual/source/pics/song_edit_verse_type.png diff --git a/documentation/manual/source/pics/song_edit_author_maintenance.png b/documentation/manual/source/pics/song_edit_author_maintenance.png new file mode 100644 index 0000000000000000000000000000000000000000..56b5550d2125f2abc768c40d7bd8d5d337f5e0f8 GIT binary patch literal 16943 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 U$~M01%fY%#4dDjmdTtN@0fq0r)Bpeg literal 0 HcmV?d00001 diff --git a/documentation/manual/source/pics/song_edit_lyrics.png b/documentation/manual/source/pics/song_edit_lyrics.png new file mode 100644 index 0000000000000000000000000000000000000000..10727376c7f8caee62e1b62017241cdbc3f09416 GIT binary patch literal 62750 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≈Dg1{%<21-q#C7^MS0d)*Vh1T;35X2xYRWRGPzh! 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 OLrIG(h*gLf`u`tbXK|$f literal 0 HcmV?d00001 diff --git a/documentation/manual/source/pics/song_edit_theme_copyright.png b/documentation/manual/source/pics/song_edit_theme_copyright.png new file mode 100644 index 0000000000000000000000000000000000000000..5234ccc1389595480af4e01362ff6ab5fae41ecd GIT binary patch literal 29992 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 literal 0 HcmV?d00001 diff --git a/documentation/manual/source/pics/song_edit_topic_maintenance.png b/documentation/manual/source/pics/song_edit_topic_maintenance.png new file mode 100644 index 0000000000000000000000000000000000000000..70446b81921adad28a71a053ff2e3d351b894c84 GIT binary patch literal 9956 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 literal 0 HcmV?d00001 diff --git a/documentation/manual/source/pics/song_edit_verse_error.png b/documentation/manual/source/pics/song_edit_verse_error.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa10fec3f5d1b83a48c1ac39a75ce7dc4dc1e87 GIT binary patch literal 14183 zcma)j1yEc;uq_S&f(3U1!QI{6-JPJpU6(*`C%C%@7Iz5{B)Bc^?hcFdA@BYA@5`(D zTU+<;o!ai{Iny)K-F0rbvZB;SM0`XD2#Aj|(&DNR5K!;G;}PKAuKBNVPj5FE7f~5? zgtw0`!q>33XFOL4ZC5o13s(;lXLATkdj~sn1{X7Db8~waD+kvz=q^DB2vP_caS?UT z%##%lPfXCm?~60rVS8@}G=w-|QPQclT-WN{{Lc|5}=kT^78W1@{r;(tMvYB9$>wdOz@lFq_d&_6PznA z5pNcXgv!K$tGJ{j+!hKVyKv=AIix2drelk`x`Kq7MwO2(-fpV>NV~Nrorc7FucIfe zmUCvKOCq(6L=q~>n6SU2_?VR;wJNo+Cit^NCr*}{=89VN^@YIDRXG4Ghy~c4N)^<1 zbJY`!^kb%r9vXg$0Lf|T(Z261vq8ui0)lZ)JJC7}l^$-LU-^Z5 zC>8^c_;=c#0tG#5xk}Rez+O&mQK**u^?T1*62cH091G_cOLq!H847QR{=Qi<;eRJS zGeq(dpNGxb>Si&!br#5{JfX%VJ+UQtv+l&aRWpr#<3_o?hsDzA!&;+a!tbs@Kkk1A zz2-n8KCN$6j)ax;>sa3q0ATqvo-RB$Vi;YX`{n`{9>wa!(Ocv{oXS3ePkk^5@Oo~C z>e~sYM`w^R^a)7{);px~BATXA+`qwwUPbYDutt9C$Cr*l+J31By|`|x_U^@Yr6l6j zh*f0UtX|Z@r4c0VXDb6MuiRM^q-^6%k1;bdRsT#w&9#VI|4l@p4vYBlhI+QXTC#mp%`$D`^l;|r>n7iVTG1QfDj=B@K( zZC%*6oa5mKbkV!bc?OmCYF?+qYwGf(V*&WTwA4i-yMKxT#xUf7Bc8M<#HEh_;MX2Z zsy-h0`728@sY+TnIfR-Mz6l;qv>#BVn$EXgI+|;;H#nP2BWkgt-zSBub(FqplQtQ! zW_roZK_NCN5GcMq!}jeEj?m=G;Z!Q>8Uh{(oZu1QmbWl$U_Pwxgvbpb?vjD>^AVHx z2>VR~>pj_iv`WNJF=j?Z!l`-IC*A}7#w4~Lua^Dh*nCbuqnH!@$@5TESLx{%SPHYA zn;g)f2(pSR28Dg9?YxUhGa`126^5D!j+-qZCmbTnQ-afSkNr&3BbrN0>+J6Qx+xSU zR4KIrHd^jADT>M^PFv>TiMOAGlXZ@*Hdz^OZx9F}F2hCy`^a4F_>~?IebGkC4=?Zg zFc34aqWUupyvu9f_J;`f>1YZ)S6DoZPdfFjskMk=jt4*&0j`7jXnlIBDE}e*6@gCs&sTe9cbW>;%Pki+w(O32eR$WYcbNhmK{`4pMQ#z`#;EQ+uW> zMeF&Y8vr%qixx@KC@{%O(1nBBY%J~5iU*-TukTIIOV?K=JO;k*YzSIsDe&?YAFQeG z+1gC??B;F-T+)C~BmV3&D3rvD*L%Z@A(7$lmPwIO@*-;dc$<(*pqvyMx(y^IqTEng zlPl3*BEIH56@eS-df{ASkLJU6OXsp?_UL`(Pck)>55*xEn5m*7;XgoYc6(#@LX$ur z46~41i?aZsG-hX9lWy$O3_jG7l?@gJvY;GwEUgB=u9f)@^aMUnuTM7>%@=w|{bpC% z_fHF0{Qkd#1*s7u@s+{PzY#_PPFk!z5!Sa;V!JF>LqtD^L~oacs}x4@1lOPWTV!Bs zdMvEFe|3!(Ide8iF)#?DEEAN>8?h0(Z5lQ75(x}^#Hzf+EDRYv{l(&NQ~xCJ!uc@M z8?%ftd%PTdSZ_9~frgV`V2~J(QiDCkJHQIC;-xI$TR^NxTJDv?WhoRg0^DIEB{PEC zj>Hf)M6!rssdi?|J=78Hj3?%Z`;AE{JK%{Fq!wCMH20ow4oKMo z;*Uu@>b{v`uE=i`hAu6ru9J-lE4!W=G1itKO|nZqUl3ros)HFakq{C8j{eD0UDZcWMTkspW^)kTK>Y!qEua{ zcHanx)FdXDo5IBw(fR_#9Y^IHX8h`J@5ONAAX*Natp~88prwg8_VczgRYgTZbe@*b53B?qKBD9r_+sicovmjM8*WYMfYFUVT*oD#^)O}k zQ(LW1EvJYj?j2jC&`kE4rVl*pO|xT~F}G&+63+1cw20Vihs56XOHeqjo|b`i#H?$O zRywJPSe?QYy_3@NV>UC-HFn{qVf27FB_-pfMEU;a(N0VC8$mFzahN2hCQ*S7v0u*% zCsU+oBeFq!;A$U`pn6Ku%pX!#-jMiJnxEHWACON$!OQKU*j){oz*&DOdwcBL2n@!S zTMPMJVZ3z;ahLK2ArNr^1PW)@{RhA2 zK8$h+Kbz42*da_VvsdnNsJr3TsCPy3Y4~dyCaoX%xxzFkQJx(!wX_xDXdx?7d=XVT zi1+P$TpMq1ZVe8BI=>>}fI}ma ztB~-kvTQSJ!E6^^u8jLW-N+w1VugGNM2U6$)76qb76L1sS4&uChh1q0MVUc}er zd=_#><59XVkKJR6agb`;oxAR*LndBVdZ;o;LtW`Y+pQIfBpXu%vH`12_k$P|6hM98wj!=lMKS`ekZKSclaN7DK7hn}Uyt|jGg?d6{>y}|=}geo-DMpr_qG&%0cB?B=xO0{ZwHny zsE`=;J=UzxtVJYhjoE44lC5lF~iw7P{JvUgC zrIC1g{DoeP>ae8WJE2Ohk0bweX(9*|KqMK>5*2xgx1j&|PYy;W6s7j-#hl=1#Wzpv z_pY7{WO7O0?g+sDP#vU&LH(|zhwcOBd-FyT4B~sdel833&os|30fFzT+J6d*y#LSe z{}jIw6sWD#sjH(|Ya-E8L}|<<96}|A(CGb{C@$>FzZ(QYPxQ08-eGN40_#0|{HfS1 zys@9m@Ri9(@w67zaeL1!Jn9byZrG$TDJdxgW^k=TSJB|XA6*p@2@|r1IJC`ifs|$! zO7ztV9QMtNG`k+RpqogXYRX&M)6C4MvdUqXTF2eaH`DW58wBujf3d~ z&7W7DJv#jUw(-n?!mB$PcOS6*?Ha(*$;*v1sxR}^KS4|B7km{T>%EvYnw`k?93F9W zO~}d)4uV|wzgINl?!}WQIxNndLmH_}NQuYI7a_^`J*wXBdDn78k{=eJQqmL=(8%OPFX25IRPnG|u8#T9^LD(3cXc%G zyqm(%Vwd#VW0s;n1gz`a@;}I<8e_VWw5jt`bm6^!PSzVVy5}Kkb0e=c5+c;mN%VUa zC_TKGhHo(XMv)&-yfHLBkd%Y^okcL4m|RM=-ho69*cA{b@?%iH9<5_xS(f8RUCw>n zwJDCV*%I5FBUq_7?Xd?`m<}Pvy^`-rZ{08z=AFjt(ichMBJqu3jxe3g!SCsB&3_tK zYsXQl07d8{0=X7Vpw#!^Fi6Ok99PXe#A(+9*pE9C2}~I$T3C1kNIY&qez)1lYN_$! zq;yi-#aXXflH`xpUcoZ zf#=TL&#e`;Tf*6~u0XZvC3LK;H+>nNesVIErxgXi?xk2&{D?QX^guq0D4qO2OAD=k z(a#(z4Wte4fel8iJ5*(&V#sKDgRfTkgVgBEmX5es8l^B)CRxP4+?Xs9JUX$L+iLXv z-CNqLvQW3E^;w;q_5zr7UohG_m_t+(ZBIXzFjFwZm+pV{&hiubhGbK8ru1CSVK|f?eIiVVDQ?qWc#cUfg6_(Eg&`qB7sY{7p~rSNAA#THcVmDzQ{vkB=>5 zi)r3}m*(7d!cFb(PZ~Pi&)xJco3ak=Qp$_1j0psGzs|2A-kVG!_un2IuO?6Rv+RYc zt{om!`o1(8`Q12MT&(GhTPRE7c(hRzvpG&xwqJa!WPE@dJ{EiAtao6yF{&!WzL=I{ zOXJR^W0_?6<0@SM9+dNPmV?bc_BKYlcpJ9Ffa7jNzNEc}9T4P$DeG~%9V)YjMnt3# zs;1P}Xa-+ZAhklm$&8>$6)KUBA?a`=L41~yPs^hH z%a>>l$T3oUnNr&DYzm7w25nC^U62bm_3;&93`Tx(nuoU889Cwi`-+-OfXoaj`{Mm2 zrL;8sb+a@At2I)g+i18ZJg_(Ml{QMRrO!ArwM4kPp{i`0aspr!#|J-@b%LIMYX$VkUum>m>*p=mzzPg zZjyMNNd-eHp-{B%f2*ow$^x9K_q4`Z^bD@5+pX>ppsET}i%CVB{rRqp2}ev^OYfG!zRu5L}(7FUcBD87`X6*Dp z(M#+kWyNSB@X)S} z2rVg$<*+kUhZ8>Tg;&4cBhG{eA!5Vo=%52S9o`Zqk?(YT8TU3bZslsIA65=Hf=C${p@UB7@3MXo#Px+R*m_OyvRPhR(f9@M?; z(7O7173+F97gHq+>P_Q3B)!?#Bti{-R@`k2i)=Ub^oM3nD=>0(J5rG=#QXa{?Nu=@l zzT!YvJ-q=g8#nS%49Q@5$^D7{%O7G(%pajtULAx$7V`@YKR1V8-`&$FG#jn`P6~U+ z@{(em?n~u)`v=fgcI2^7Loa&}a}L*sTW#!L?13PTqUZD}MbJ`F&C-5&N0;9?=Qo%i zQXa*(XOqRpk*nih_#UV8ZCzxd4La&v1}Au< zeyy7?psQMOLv7n~Aqh1!WF_RujMeqD*_oc#aO#n3t?mDsHE-BKy;L8b!_<}uIO__{ z=X2`MrIkdI%;Z-8sE?u#!}^dG>zS)`vzEXM^(o&*(xa6+#E=(e< zlHVbR!zNfuZ)D?ls~g?l=LeIumV{qTYZr7`v&OQ=Vi9?nm0c}XYn22mF$!fA!LuRvO)vFG=h=S3k1wtqST!$oCx$>fd)4QsQlDv0hmr_^qj^P2 zu4ONtg2!8mItQUCavR1<>f9FfSR=B|UlqyQ4t(q_&*^zt_+8Q2zaRD51YKD$t4(f5 z297p81PFH37VxJfXZ?H|4ycP04JlI7OGX%K9AGGJ^Pyp%s>zUi#Mq90gdqn_^%ik> ztNrtxNHDdPBGuAqrovv8fz!?|F-h~j3)JZae0s4L@rd>#NDu#eMLp&~o|x;N~<+>a@kJ-zMr8zRW5O<#n+QHxt9JGv&iM|&hrN#)+)`$kCvAwt9}7* z9C0P{`*UhcVQXq4ru!u@a6O3w-x}`(q5j13WY!cxiF9P5xt0dK#AQ61CX@3OqZod* z_X{3=7lU71399Q>4434L4~k+qcQg-|huPhhT5A5-Zu)c^ntp4z0cZ@LLmOLY*6(c% z(mI@cJ)O@{95I_Lh(zG=C(Zg%J8$5}#UdF;_+jDO>fSI>R$8h)odL;gl4f;!ni+6s z&&i?Yaw8y!y@Pk)ZV4rNWvt>`mHVY7fq)6PX@7E=t%KYwJH3Z}?nIs-GpL0kqt<@U z(Gc|&Ea8AptGC`AvP5m!r@!mo5hikh_4IICz~9g%z=n-VB?_5-{_JF%byw}co{S;z z(_bOl;<6yc#bx4^rKn=4YTVG0fVuE?1o8xLd3t2CiNwsLt3pQWwUGKiz8Kl+<csO>e`40a9?lCncW%(qO>uRzK z$3-g!3xOi;7q$aVuJ6k3&(zE(^i__oF3Kp373r(A8~^I>vC%# zQ~sXgc>X}zizuX`7#a%^ytAe^^#kP$Q1E81ql~{vO?WZ7o%dDA9`M9c+_m-MXA-kN z_&5)k>wr*FP}|3|faz$cLx|m-4kU5)Ow<8F`)F8t$}5&~n;M>y+7loiP&J zX}P*Ma`+xJvr?^wz*1Oix6zU+J$M)Uq5KXl(NZKWfgZzRGN)-_#L$#}m0PKd=}xhX z>k$WF*0c1o`M{sJZUe$&1QV68iv>HLyu1XKhC;nB*DgpjgWxSf2afX5{`Bip*RwSe zF)yC6Wqlx6TDko7?BM0Ys(rKieDE*|i0`+Oj7v2qFVL-Cbq56}?6BcRj{-9hyqDYj|07hv*hE)+E| zbEy2;08(48UTR}-?%M}M6iR0P%uAt{bH8)blVReDE-k<8MgPaUZ-0|=V!zOYpQqwF z3%zE#Sfsa8KuFGjTI9l& z#EDIgq&S_=Uw2)TlAflv||#I-T^nzPjfewp)3%+=s(AMqP%x4 z_Ql7L*u}OjSW|7>)FS3*NFoE< zUIG$6Jwj^oU-6&W@f^-oCLa|gUk-#M{aW2MTkK5KdaG^}>(VPzuQlN${Do;a?a_9t zj!ETD8(C@lyW9|&-R3^&vNyIh9YZuwaoj!4N{{Jih zRK9wue!n#GJpL(n-=*QzDNx%`Ief&_wK&mxyG!Taw6|OS!@~S^s6}7!bM*W^ZhnFf z%S*A=f^U6*V>OExH)`GK0zv9LS6b;l?xrf7)vl4tw{#n5D}%b zvd7e8%I%Fga3C6Sy?$&@zz^IJ3w_ORSw?r?*P2Xkr9jqUi|Q3vYR06E$H%+lb=OqH z_;aC1#4q@8@>|)KhTBCYmM$Xck@^`Zu#VVILq1>yllg_KyUu*wdsmiBcM!sel;G}7 z&bKwuUx}j*zVe3q+*QOF0Z`3Dk);!E#t%ny_s%yqo%$W=z~twI`iFi?PS#jS7Ps99 z9HHHt0|TD!Q}M%vznZJG(Y9j1r3}>cdI2sqBI?!O%Y3W(p6B%0KF=K49gIKx99|-6 zz_x{jX_v~baP_9-&sE-0b8Ch})6;4THQU~deinQ;f+YjM=f4uGI3COgyTHR`=N6vJ z^CKS-1k^VNanz}#{$5^AJb+No8CycE4(bpCfidN}Sm}1&#CHC!@iK1}ME~+UR4i7? z`op7EwNV8NyqsBZ+OMetkLoNxdogQuU1Jv59JeFJ_f}cBDx>Fgc823~buiwiaS1Yz zUXIWmXnEyOYaN)#UOQbAO@tbDDCTJa)dr8TV~bYFea$Yb>yCnv{vPA*0mO`gM<5`u zPu{rzqWW`W@>y*m`VK#kY`duU}}8W#lMmdD9Fn*TxqEy(28g zO-`QZxH&qAR3`s^jcE&?Yf5ZZ`ojHRN)i9Hj)Gr;?=HX`b~j|CYFR}MWyzSc=D|{O zBm0Hr&AIn6$9%5P6qR-=nfxoG?0{>3=80uajjUz-Qg8bKs9kUb+77Ej)5;{9Z@u=1{!!vvw>l7yBo55aAq`R5cTj4Z86E}!U2909Gayre%3b&H z`KGhq7}&cg$TkL-`?b1G#MX;hBz{F21ZX<u9(sIwq=QRSrg`!so*>He|Kd!NAP(+57KRYCOCDP zkiEY>4cC7t&t^MK9as?<{p#QuNyRCaIsiMg!0&;v#}NLt-^}4$Tot`ycg%D)n3vZf zbG-VyDZr>L{&=QM`}&$DHL~$yvi-5;L=@V9i^15+oc4dq+8xa=o-Z|yPaXNj$4JBr z3vj=XV?*~v5BUqhdT;ef){b(G z5lU~9cIY=J(6Q78*z=F7e1)z``@IqkjOcf749KF==PJ7Q%-CsBk2JG84k2UoZ;X;- zG`;q#;Iz~VuFkwhcQ2o2sv-%RxO96RauU0<_%b|(sl+oDCJyDpwGHMS%O_( zxk^0<+XQjDmyS@3iEtLyPqaYf6=`kkp^1ERSDSV#%j3Z$tJ!O-2E%ZuSKoq-t|oe( zku$+Y#Le800ux*pN`eI3Ide_?gVli3d(mk{v*XfLZQQ?QMBppX9TxqP=GcTQcrQ6f zot3qfQ0TjsJ7KUJ$!JhK$euv2LaZ$B=@A#@zZNOH%UT?cD&4*6dq6jH{#G|)=|DSa z=%oyg(K>;-5_C82;=nB6a!)~<(nidef^Zw=t^Vyir@QC6!PFXbtgxU5b60dJ{+PuBm+3V06c{y zK9uS?hixUIH(eF*A2j^=2usb)=ZA)>DX6#{b~wNX*jYeSdT`IwGwaJFXy`CFC*cH2 z>y#E7pdz^o!ih62PnRRJ*&Mcg*&>yy1?(NoSxy3;3*=kAlJWU9Yfd)t9~0`{85r%}H8RH|8S^O4YV5ohfqs&w38gm0b>Y^Dv|JZ;+|DO$^Q7 zZYIe$`;b^N=?p~+X1js~P=iZr#xFoaV6TgpGVvEMNhY9|ityHC`tl3vT+XZcZJ;Ql z_ogm?zwoGPY_T5`f{H=p$^Gshaa$Dlu}xFkP!yBlvHt9YALLA^QUJlR{LlJDMcl)~ zP7AiBik2&nwCY+%wSy0*Im&C#So&C4^DZtm=H_`e_$U%&)n?9hvn#kO(Tb3c=b-|L z9Om31Wo&BpxM8(U=)XRu$lNdpq`n|YIrMFS!M+H zOx7C0B1@h#DpwqKiO`H5rIbg#yY7&0l~0z7TTRRLHXRY&3s&TY1fYjWI2i)APswRkx(_+3*cRfAXe; zew)UV7D2(e?xC?1Cd;Q|gUpMe5`H&}_A@uzKi*TJ?uAla=$Ssf3GI*KMwfzjTsdDK z(P-FHLx(n)j7$ywk|oO@tMl}mBS*R{o7wy<`Blzyn;U)uA=HHvR9f7pC?Nh3uV?qk zxBkwPJqu;@R1dde|Arb4I%0DF0?VKhD8nSuS7V6OMg+2vXjo9Dqn*ecGrQjx6QzFG zLiLW}@A$xRLuyMprx>#l*+jhFmj>OulV~i|_VtEB{)y_-X=@OUk?z=rMi)9@_Ax5F zQmAuU9TxT@sD$Yz?+BYRYD6nW&{k0*Z=4l+~42Q}RIi89MLUkw)>H**!P>9(q4e29NCr zm6X!XvR0t! zqU2q_pLCQEc?%$`H!f+;ZK+X-SS-8#G(pqGoYBpm@Oy25d_7+D+Wnr_Tg|?t7ZFE4 z8=`GCV`84{>p@z?kjn1zN-6uHdJ5s3TWE z{v=XXbWK^coCu4+{0JHWCA?GkXHYW-ntGI-&P{EG;R*rnu(tQ@E_{3$=Q+rQdO+XM3d1GUnL_qeb-daI+fWTmcJNx;TE=1^oSx(R|WGS2Jw+sY} z0X(xw$S0i6m#L2wSBL&nJ{wt2yjIv+#h})yH4Vkn+a&(iV}9pf#xaNDKo{bTg4ed6 zRmJIMJWr$Kq$iSwS+7)FLNB<}YfeTNcK-?o%GVGfxAFjE%3+{?nvWrGXguny;Drs@ z)-0AUxdRKtW14Fj zYCz!sGv~izQMRJ?@7);ny*}$(PBMdqlG*oRjO}7ixYkveUiZFY^H&NG{jnq?rcNh; zg_eT7=R_!z(6k3P1ujFG74YpakYMmh{aZj%bt?kJrs=S~F;l#^K|4<6bJf;&2ft=B!u5n9eh6EW0T)FIiE6rP95)HY<}H*xKii`x2D9L+3ohBkG?+E z7EPz{2U%tQ5`)*N^<)|6@3LZ5hD_8_GzYy@LHuIiio#naGr+x zB7bwy7{x*s&_gbTK)@~?2t)RL>cl7k1VEevJETFY$(1m9y>VxCpJs1Yc9(}2cZNS8 zp-7To233q)nR)0|K+EIchG7uOcdvFJdu?xo;Gk_fklJozH2Us|t`VlFHHtj^3`Juo zk?_HUfHE~Z@H}z7jEG?V(;uifx1SBkKXNu#NS%uDiRWjERL}Nb7*6o>ry%a|0|f@3 zqt0YSqf4}W^Lo!*h>4xuj2Z%DLI%34M@(@)UxnVpROuFwY#B)Q(4a1(CHY_OuT%kp z7_x5s@Cp_~e2W_(Lk0&m2}*=__(KMz^(Eh!ut*2s91j)=DXwosZ=~R`u6)f8m=J-g zs?t8Uc+N;jlTgqsL0$ktWjSO|_Mp%LBvdLYp&WOY)4tT%_Hp-j4#P{i?iXccjijk5 zRpjRfbigRb*PXpB_6!zrDH4Bdm{E_2yoXd6GkIiPX#|~?mQ>2DXs18ciHV7-s)sxF zLT?&^xQjKQU@Ji0wyZfmD9Ji?gN%&D%R4=|pP=Ey>at9^If32ZX&6y5^5fj@m=AYS zOwxI=DjJ~Pz8Rp1m4PK$q&E(QzgFdJ!MbzV8`HVmW*-hkJk5p43kCjuXJ@}4eNUg4wv!f$Whf&v&Xsvp=1phqf}IIMa5L)izVSdMEngBq(^>Jw^KgU-Ohix*if*2 z+BWH?&}YR?IKE^o44gA#A97iE$M&KA?qdqXhy|Ns$)}WIjjK7|H?cV*se{#y`Bgw@ z0Xz!YS7tO!%pe+iWRQiJ3-6>pBfAEy2CRbE^pT1yFBm#MO41b)vRR)|)|OK?GNLpr zJnx!B%T!k33pI1xZ<~ZZ({9rmG;HjUs@nwWcaFD;*xUR=ba!{dz`*3rwfRpHL`%v; zLc*kurjBCMTCB+&#AGD`jg&5!x^kJAs3wd_g-gUNnRDk3CbWp>4bnsESl6q0vef5K zN+U$QB;jrYpjp1UQZ3t7AtOS4Kt`mPFeRg=4jUYlrpJza{G0GTnWb74u!sgvjdDgg~W5u+A;_;}%!9!$3Ge7Am&HP6@NLjgbbkq~p6aSg1?+NeHL zBXH0oGq7S)S0U0?F;+;EV6{PtQ zvm8d9_z#Cd?}4jn!vZxOLqUE%VQ6o_iv2)*YFM4WkUnFI4_f|VIm?}L$#kBYYtj}m z^8QCSc}em&J9BeM0|Nt@Ge%S8DS7(dX*_pj3Q)nc5&6cy_?tsv;Gs3Nq?_9n*HJL8 zz5TMv4*d=|-W@+(DgzENd*7AUl{ZU2{#`B;qEN~3&8GjG&-35VfewS(_*LI)bQ#6g z+exL{DZEbQ&TAR{6YN+ChEm$OqWYzfSyel8IsfQGy3xhf$2`ZRM~;GBXS{zldTJXP zr(`4`O+N?j$ESX0W|3#}sBV#eQ5-loe~ z8JiVYpx3*iduCrAJd*Pr+B|OHs>O@RqXtr zKT!E+2c|?QTxt{?p{AuC&R!uFnz3kahoD~izcDQa&CbH23C6$kpv0Hrq&Esl-)pR4 znkClw<&^P(UGEDoIq6U8I0jQ^G-5yf1lq*mNan1A+co=SY6oQ{Zr8k zg+Ov82s^M^U+Z##SC48xuyb}iu*zBF!0``$D{|cog~dsSG#4A%y|pHk>GK2r>TRs- zX6w%vdV5!~fR1LT9g`WeD=nsqqz(uD{vbV0mg@tKc1IO>c{|n6S@II%w@I$&RhU)= zaq`~eCRJZ_4{KL9&~X6`2Lzyd9M_i5KNlOYMO#v$Y`jVakl_4>joLd~Z3GIG1kw0p=CyRuV z(ZFyM%`gVjcu{A026qS%=h~{$Gk%=+q_ec8&pSGH(Dv2AL5^u1ZlDa!yLn*wM_Zdb zWLM}dYF(soNZEDHQB>B@FOOUtSD#XEI7HPiN78`C2xVDp|H-s#Futs|x>Kd%WakZ` zp?6W1;e7Z$eFPH|GmUA;=m)Nizh6G`Q9FU2+ik(#xA}21Y$ye~Jd%0Oup@fU3|IYo z)%*D@%blN*qzICX)Hv`8-d4{hP+_{hF+&v2aWqj}R_lo*(qAw__k^v%mq2chen)zq zqDp`PZfE{NTdbzgd9sJe%c*>b@0B~jr;9hR;^Wbz?msNUH1|3W^XwD_gwdYQd;`AC z=JW-A5L<8_)rdOE3feel`sKCdCAjdZ*9*u$GAR8Kq~UcaqNbvOQ_h%N6AKvpBqezP z9A^CD1@h5Pva!Fxx3W2U9!vS>pB2;W%1f6AQ{B)lM|C8)_4^{(kB($6$=e$UXTsh& z2mCGj?vzFF1*NB~n$PZ98p>F|<3_gcnJ%VNky`xwU66GFbZ@+$58~feL8||lfOf)S z-;P2Bw0W7GXE7wlF0W0@53WDRKhvj_f!3fC!_fI_X;P$YI@bPka9!-+-1f#}RqmFC z-PVNvG>R7JjrJ1%kM!s-lU|$;Ar+fkzc5X%#@7J$S~c)NZ7`O3vaI7%b_9+mQ~t;D zGMl0MBMDO@)D%`)9mh%28zTVko2?}vq7-{P&Ok=_86hEW2MCD!j~+gt&csi0gvWL* zjN*x@9-t9K)L@~w`(vS$3yD=}*tO zjn`71ot+cRRL3NxWDNu0Wm)0i$khK^{x7nwyupk$l<(V+l$41_8Fj=p^_}drx;z|_ zO1F3Zj~nXB^FjE3EXsOXiGWmPB9^@3M#hNqfFP&$)8_x1QTgBO!2cZ~6ZEKD`W83p zRS^CQP$0cNV!n9wx>f3+yzP0S^@8y0zcTf|>+)D9eag=MY6k%Y!Dd``t9#Sba_M3= zoNVxZ3NQ>p&O?0LQCH#7spwd2zoE8jCP&0MrS65?=ONa%N;-QFTQ;}1{}55nL+}mw z;FNn~v!DAO=9RaJRO$;GwK(38cJG+$y!V(%Sk4P|-25Z>u!Jlo3vljU4LnqE+~AQe zMSMSb5S*OLdHb~#G&&G92K=#nk5tYvDY)b0=-va51Rao5r_E)BRGxR7vfoG`%0D>Y zo3T(d25t|5(T6If4|+ChHh(it&-Z~;v xRMf4MDLTDaJL)#PxX^eXC>2v>-rOsEpp&217uD66w>RY=WF!>Dt3-_h{|D~A+Zq4> literal 0 HcmV?d00001 diff --git a/documentation/manual/source/pics/song_edit_verse_type.png b/documentation/manual/source/pics/song_edit_verse_type.png new file mode 100644 index 0000000000000000000000000000000000000000..e4cdfa1a676d8e0aa97a54e8ed101595fd8d3412 GIT binary patch literal 46119 zcmZ^K19+remuWu--6p)jC;fPi4dL!PLg_3b>ma2nY{IOps5}HRF84%~R53Yv^Wb z+_3H{R8$f*PL!WAl&cbttg_KmDe+e!bRlNtsa7Gpxdk~(7^)DtR)hFel05%R-eb~g zGJ*tAELT03k0hd+@dSP9@PjuKP38#OQtKoW>0NsL_=`Ut#D9CM3hVE>DSScwy+GVh z^w~Ja5Kp8x4HBtb4qAyyr9SQ7neUMJsE7c<=UTIWU`P-v3MAI!gXnDaK8&LEWA=NR z{Fgc3S5~y)h7B5{dL&q-a^Gs?)}AV9+>eh{4KpPWK7>Hd7^J(@I z7NqgJd%0htsz!|*4Nn4p1SoZC;{pRg3gpp!k=pnRemzzfZ0k_r&8VcvmMWgFw`Kxr zl9|n{uy>LMbiafhP|Ca@As8ɗ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

n>9%$gc-^-0ACY+uS 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 mqhnM+ZTi2_!!*>Ke}03iM`v2>t Date: Sat, 16 Apr 2011 17:14:21 +0100 Subject: [PATCH 097/148] Untidy the code I tided, so it functions correctly! --- .../lib/pptviewlib/pptviewlib.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp index 93e7b17d9..fcb7c66ca 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp @@ -350,18 +350,18 @@ BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) LRESULT lResult; DEBUG("GetPPTViewerPath: start\n"); - if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, + if (RegOpenKeyEx(HKEY_CLASSES_ROOT, "PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) - && (RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) - != ERROR_SUCCESS) - && (RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey) - != ERROR_SUCCESS)) - { - return FALSE; - } + if(RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + if (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + { + return FALSE; + } dwType = REG_SZ; dwSize = (DWORD)stringSize; lResult = RegQueryValueEx(hKey, NULL, NULL, &dwType, (LPBYTE)pptViewerPath, From 91d53b7adcf6bc7ce96fe2aac80fe2e351268bdc Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 16 Apr 2011 17:15:08 +0100 Subject: [PATCH 098/148] Add the dll too --- .../lib/pptviewlib/pptviewlib.dll | Bin 78848 -> 80896 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll index 36581e00bb3bde8d7d059b50bf7b0eb51bd92a6e..000115803f98b1b2fd8f3c4e8b41703a8250d882 100644 GIT binary patch delta 139 zcmZp8!P4-9Wx@|B$^9#R8KB?+1Ct^*BPRnx5m4aNWFf{ZCQhD-io%;GGWs)eaq<8~ z6POqn_$I$%(q=T;EXK@N!3@;DS-qN9K-6P_{nj57&pR(mJ@77gzwch4LI&r_p55B) h1x2aFsd*)vtGhip!Rn7sv6{MAVHwAEMlHtwoB&~)D(V0L delta 135 zcmZqp!P4-8Wx@}s@6L_B3{dcZfk}~@k&}U;2q Date: Sat, 16 Apr 2011 22:47:54 +0100 Subject: [PATCH 099/148] Further detection efforts --- .../lib/pptviewlib/pptviewlib.cpp | 91 +++++++++++++++--- .../lib/pptviewlib/pptviewlib.dll | Bin 80896 -> 80384 bytes .../presentations/lib/pptviewlib/pptviewlib.h | 1 + 3 files changed, 77 insertions(+), 15 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp index fcb7c66ca..75242eec4 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include #include #include @@ -88,7 +90,12 @@ DllExport BOOL CheckInstalled() char cmdLine[MAX_PATH * 2]; DEBUG("CheckInstalled\n"); - return GetPPTViewerPath(cmdLine, sizeof(cmdLine)); + BOOL found = GetPPTViewerPath(cmdLine, sizeof(cmdLine)); + if(found) + { + DEBUG("Exe: %s\n", cmdLine); + } + return found; } // Open the PointPoint, count the slides and take a snapshot of each slide @@ -160,7 +167,7 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, pptView[id].rect.bottom = rect.bottom; pptView[id].rect.right = rect.right; } - strcat_s(cmdLine, MAX_PATH * 2, "/F /S \""); + strcat_s(cmdLine, MAX_PATH * 2, " /F /S \""); strcat_s(cmdLine, MAX_PATH * 2, filename); strcat_s(cmdLine, MAX_PATH * 2, "\""); memset(&si, 0, sizeof(si)); @@ -189,7 +196,7 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, Sleep(10); if (!CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi)) { - DEBUG("OpenPPT: CreateProcess failed\n"); + DEBUG("OpenPPT: CreateProcess failed: %s\n", cmdLine); ClosePPT(id); return -1; } @@ -344,24 +351,79 @@ BOOL SavePPTInfo(int id) // Get the path of the PowerPoint viewer from the registry BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) +{ + char cwd[MAX_PATH]; + + DEBUG("GetPPTViewerPath: start\n"); + if(GetPPTViewerPathFromReg(pptViewerPath, stringSize)) + { + if(_access(pptViewerPath, 0) != -1) + { + DEBUG("GetPPTViewerPath: exit registry\n"); + return TRUE; + } + } + // This is where it gets ugly. PPT2007 it seems no longer stores its + // location in the registry. So we have to use the defaults which will + // upset those who like to put things somewhere else + + // Viewer 2007 in 64bit Windows: + if(_access("C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + 0) != -1) + { + strcpy_s( + "C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 64bit 2007\n"); + return TRUE; + } + // Viewer 2007 in 32bit Windows: + if(_access("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0) + != -1) + { + strcpy_s("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 32bit 2007\n"); + return TRUE; + } + // Give them the opportunity to place it in the same folder as the app + _getcwd(cwd, MAX_PATH); + strcat_s(cwd, MAX_PATH, "\\PPTVIEW.EXE"); + if(_access(cwd, 0) != -1) + { + strcpy_s(pptViewerPath, stringSize, cwd); + DEBUG("GetPPTViewerPath: exit local\n"); + return TRUE; + } + DEBUG("GetPPTViewerPath: exit fail\n"); + return FALSE; +} +BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize) { HKEY hKey; DWORD dwType, dwSize; LRESULT lResult; - DEBUG("GetPPTViewerPath: start\n"); - if (RegOpenKeyEx(HKEY_CLASSES_ROOT, + // The following registry settings are for, respectively, (I think) + // PPT Viewer 2007 (older versions. Latest not in registry) & PPT Viewer 2010 + // PPT Viewer 2003 (recent versions) + // PPT Viewer 2003 (older versions) + // PPT Viewer 97 + if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, "PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) - if(RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) - != ERROR_SUCCESS) - if (RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey) - != ERROR_SUCCESS) - { - return FALSE; - } + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "PowerPointViewer.Show.11\\shell\\Show\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS)) + { + return FALSE; + } dwType = REG_SZ; dwSize = (DWORD)stringSize; lResult = RegQueryValueEx(hKey, NULL, NULL, &dwType, (LPBYTE)pptViewerPath, @@ -373,7 +435,6 @@ BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) } // remove "%1" from end of key value pptViewerPath[strlen(pptViewerPath) - 4] = '\0'; - DEBUG("GetPPTViewerPath: exit ok\n"); return TRUE; } diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll index 000115803f98b1b2fd8f3c4e8b41703a8250d882..524b30ebb1f0c70089e3faa96c771c2e5d855358 100644 GIT binary patch delta 13402 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 E4^>buV*mgE delta 12282 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 diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h index 4c98f8bb3..98b0a21ab 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h @@ -49,6 +49,7 @@ LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK CwpProc(int nCode, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam); BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize); +BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize); HBITMAP CaptureWindow(HWND hWnd); VOID SaveBitmap(CHAR* filename, HBITMAP hBmp) ; VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename); From 4b3d506379b0f2eaaa5dab29ee447cae2be84992 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 17 Apr 2011 07:26:55 +0100 Subject: [PATCH 100/148] Allow alerts to be sent but not saved Fixes: https://launchpad.net/bugs/763066 --- openlp/plugins/alerts/forms/alertform.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index b87ff3c5d..5f81076db 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -61,6 +61,12 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): QtCore.QObject.connect(self.alertListWidget, QtCore.SIGNAL(u'currentRowChanged(int)'), self.onCurrentRowChanged) + def exec_(self): + self.displayButton.setEnabled(False) + self.displayCloseButton.setEnabled(False) + self.alertTextEdit.setText(u'') + return QtGui.QDialog.exec_(self) + def loadList(self): """ Loads the list with alerts. @@ -125,6 +131,13 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): # Only enable the button, if we are editing an item. if self.item_id: self.saveButton.setEnabled(True) + if self.alertTextEdit.text(): + self.displayButton.setEnabled(True) + self.displayCloseButton.setEnabled(True) + else: + self.displayButton.setEnabled(False) + self.displayCloseButton.setEnabled(False) + def onDoubleClick(self): """ From 946d74372de8564e0e89b58d17791b0875691347 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 17 Apr 2011 13:00:44 +0200 Subject: [PATCH 101/148] --- openlp/core/lib/ui.py | 4 ++-- openlp/core/ui/mainwindow.py | 10 +++------- openlp/core/ui/servicemanager.py | 3 ++- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index a0686416c..b544efab9 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -323,7 +323,7 @@ def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None, action.setShortcutContext(context) action_list = ActionList.get_instance() action_list.add_action(action, category) - QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), function) + QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), function) return action def context_menu_action(base, icon, text, slot, shortcuts=None, category=None, @@ -356,7 +356,7 @@ def context_menu_action(base, icon, text, slot, shortcuts=None, category=None, action = QtGui.QAction(text, base) if icon: action.setIcon(build_icon(icon)) - QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered()'), slot) + QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), slot) if shortcuts is not None: action.setShortcuts(shortcuts) action.setShortcutContext(context) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index d2fbaef9e..32a28d474 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -896,7 +896,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def toggleThemeManager(self): self.themeManagerDock.setVisible(not self.themeManagerDock.isVisible()) - def setPreviewPanelVisibility(self, visible=None): + def setPreviewPanelVisibility(self, visible): """ Sets the visibility of the preview panel including saving the setting and updating the menu. @@ -906,14 +906,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): True - Visible False - Hidden """ - if visible is None: - visible = self.ViewPreviewPanel.isVisible() self.previewController.panel.setVisible(visible) QtCore.QSettings().setValue(u'user interface/preview panel', QtCore.QVariant(visible)) self.ViewPreviewPanel.setChecked(visible) - def setLivePanelVisibility(self, visible=None): + def setLivePanelVisibility(self, visible): """ Sets the visibility of the live panel including saving the setting and updating the menu. @@ -923,8 +921,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): True - Visible False - Hidden """ - if visible is None: - visible = self.ViewLivePanel.isVisible() self.liveController.panel.setVisible(visible) QtCore.QSettings().setValue(u'user interface/live panel', QtCore.QVariant(visible)) @@ -1011,4 +1007,4 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.recentFiles.insert(0, QtCore.QString(filename)) while self.recentFiles.count() > maxRecentFiles: # Don't care what API says takeLast works, removeLast doesn't! - self.recentFiles.takeLast() \ No newline at end of file + self.recentFiles.takeLast() diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 9de82dd82..40bd5e9d4 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -347,7 +347,8 @@ class ServiceManager(QtGui.QWidget): has been modified. """ self._modified = modified - serviceFile = self.shortFileName() or u'Untitled Service' + serviceFile = self.shortFileName() or translate( + 'OpenLP.ServiceManager', 'Untitled Service') self.mainwindow.setServiceModified(modified, serviceFile) def isModified(self): From d3a0952d66a300378b4d6ab62dd8bcc0b1dfd310 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 17 Apr 2011 14:36:35 +0200 Subject: [PATCH 102/148] fixed a bug, where themes 'lost' their background image; fixed theme re name when the name has not been changed --- openlp/core/ui/thememanager.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 81da6e021..cc972e5c8 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -280,6 +280,8 @@ class ThemeManager(QtGui.QWidget): self.fileRenameForm.fileNameEdit.setText(oldThemeName) if self.fileRenameForm.exec_(): newThemeName = unicode(self.fileRenameForm.fileNameEdit.text()) + if oldThemeName == newThemeName: + return if self.checkIfThemeExists(newThemeName): oldThemeData = self.getThemeData(oldThemeName) self.cloneThemeData(oldThemeData, newThemeName) @@ -333,6 +335,7 @@ class ThemeManager(QtGui.QWidget): self.oldBackgroundImage = theme.background_filename self.themeForm.theme = theme self.themeForm.exec_(True) + self.oldBackgroundImage = None def onDeleteTheme(self): """ From b436c34742bfe06c08613127a3810ecca3fa9554 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 17 Apr 2011 13:53:35 +0100 Subject: [PATCH 103/148] Remove blank line --- openlp/plugins/alerts/forms/alertform.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index 5f81076db..6f6311392 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -138,7 +138,6 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): self.displayButton.setEnabled(False) self.displayCloseButton.setEnabled(False) - def onDoubleClick(self): """ List item has been double clicked to display it From 2d02f3e9a052469f117e349b7483310357b2c2c7 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 17 Apr 2011 17:47:02 +0200 Subject: [PATCH 104/148] --- openlp/plugins/songs/forms/songimportform.py | 14 +- openlp/plugins/songs/lib/cclifileimport.py | 18 +- openlp/plugins/songs/lib/easislidesimport.py | 36 ++-- openlp/plugins/songs/lib/ewimport.py | 23 +-- .../plugins/songs/lib/foilpresenterimport.py | 48 +++--- openlp/plugins/songs/lib/olp1import.py | 23 ++- openlp/plugins/songs/lib/olpimport.py | 12 +- openlp/plugins/songs/lib/oooimport.py | 2 +- openlp/plugins/songs/lib/openlyricsimport.py | 2 +- openlp/plugins/songs/lib/opensongimport.py | 47 ++---- openlp/plugins/songs/lib/sofimport.py | 3 +- openlp/plugins/songs/lib/songbeamerimport.py | 17 +- openlp/plugins/songs/lib/songimport.py | 23 +++ .../plugins/songs/lib/songshowplusimport.py | 154 +++++++++--------- 14 files changed, 209 insertions(+), 213 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 4ee7d9fd8..3fc802ed9 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -740,13 +740,17 @@ class SongImportForm(OpenLPWizard): importer = self.plugin.importSongs(SongFormat.FoilPresenter, filenames=self.getListOfFiles(self.foilPresenterFileListWidget) ) - message = importer.do_import() - if isinstance(message, bool) and not message: + test = importer.do_import() + print test + if test is not None: + raise A + print importer.import_error_log + if importer.stop_import_flag: + print u'cancelled' + elif importer.import_error_log: self.progressLabel.setText(self.progressLabel.setText( translate('SongsPlugin.SongImportForm', 'Your song import failed.'))) - elif not isinstance(message, bool) and message: - self.progressLabel.setText(message) else: self.progressLabel.setText(WizardStrings.FinishedImport) @@ -836,4 +840,4 @@ class SongImportForm(OpenLPWizard): setattr(self, prefix + u'DisabledLayout', disabledLayout) setattr(self, prefix + u'DisabledLabel', disabledLabel) setattr(self, prefix + u'ImportWidget', importWidget) - return importWidget \ No newline at end of file + return importWidget diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index c63a9fa98..35e138a19 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -59,16 +59,10 @@ class CCLIFileImport(SongImport): Import either a ``.usr`` or a ``.txt`` SongSelect file. """ log.debug(u'Starting CCLI File Import') - song_total = len(self.import_source) - self.import_wizard.progressBar.setMaximum(song_total) - song_count = 1 + self.import_wizard.progressBar.setMaximum(len(self.import_source)) for filename in self.import_source: - self.import_wizard.incrementProgressBar(unicode(translate( - 'SongsPlugin.CCLIFileImport', 'Importing song %d of %d')) % - (song_count, song_total)) filename = unicode(filename) log.debug(u'Importing CCLI File: %s', filename) - self.set_defaults() lines = [] if os.path.isfile(filename): detect_file = open(filename, u'r') @@ -81,6 +75,7 @@ class CCLIFileImport(SongImport): detect_file.close() infile = codecs.open(filename, u'r', details['encoding']) lines = infile.readlines() + infile.close() ext = os.path.splitext(filename)[1] if ext.lower() == u'.usr': log.info(u'SongSelect .usr format file found: %s', filename) @@ -89,10 +84,12 @@ class CCLIFileImport(SongImport): log.info(u'SongSelect .txt format file found: %s', filename) self.do_import_txt_file(lines) else: + self.log_error(filename, + translate('SongsPlugin.CCLIFileImport', + 'The file does not have a valid extension.')) log.info(u'Extension %s is not valid', filename) - song_count += 1 if self.stop_import_flag: - return False + return def do_import_usr_file(self, textList): """ @@ -333,6 +330,5 @@ class CCLIFileImport(SongImport): if len(author_list) < 2: author_list = song_author.split(u'|') # Clean spaces before and after author names. - for author_name in author_list: - self.add_author(author_name.strip()) + [self.add_author(author_name.strip()) for author_name in author_list] self.finish() diff --git a/openlp/plugins/songs/lib/easislidesimport.py b/openlp/plugins/songs/lib/easislidesimport.py index 8ef6dc1a7..f2b38c26e 100644 --- a/openlp/plugins/songs/lib/easislidesimport.py +++ b/openlp/plugins/songs/lib/easislidesimport.py @@ -26,11 +26,13 @@ import logging import os -from lxml import etree, objectify import re +from lxml import etree, objectify + from openlp.core.lib import translate from openlp.core.ui.wizard import WizardStrings +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport log = logging.getLogger(__name__) @@ -56,27 +58,19 @@ class EasiSlidesImport(SongImport): multiple opensong files. If `self.commit` is set False, the import will not be committed to the database (useful for test scripts). """ - self.import_wizard.progressBar.setMaximum(1) log.info(u'Importing EasiSlides XML file %s', self.import_source) parser = etree.XMLParser(remove_blank_text=True) file = etree.parse(self.import_source, parser) xml = unicode(etree.tostring(file)) song_xml = objectify.fromstring(xml) - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % os.path.split(self.import_source)[-1]) self.import_wizard.progressBar.setMaximum(len(song_xml.Item)) for song in song_xml.Item: - self.import_wizard.incrementProgressBar( - unicode(translate('SongsPlugin.ImportWizardForm', - u'Importing %s, song %s...')) % - (os.path.split(self.import_source)[-1], song.Title1)) - success = self._parse_song(song) - if not success or self.stop_import_flag: - return False - elif self.commit: - self.finish() + if self.stop_import_flag: + return + self._parse_song(song) def _parse_song(self, song): + self.set_defaults() self._success = True self._add_unicode_attribute(u'title', song.Title1, True) self._add_unicode_attribute(u'alternate_title', song.Title2) @@ -89,7 +83,8 @@ class EasiSlidesImport(SongImport): self._add_copyright(song.LicenceAdmin2) self._add_unicode_attribute(u'song_book_name', song.BookReference) self._parse_and_add_lyrics(song) - return self._success + if self._success: + self.finish() def _add_unicode_attribute(self, self_attribute, import_attribute, mandatory=False): @@ -187,12 +182,13 @@ class EasiSlidesImport(SongImport): # if the regions are inside verses regionsInVerses = (regions and regionlines[regionlines.keys()[0]] > 1) MarkTypes = { - u'CHORUS': u'C', - u'VERSE': u'V', - u'INTRO': u'I', - u'ENDING': u'E', - u'BRIDGE': u'B', - u'PRECHORUS': u'P'} + u'CHORUS': VerseType.Tags[VerseType.Chorus], + u'VERSE': VerseType.Tags[VerseType.Verse], + u'INTRO': VerseType.Tags[VerseType.Intro], + u'ENDING': VerseType.Tags[VerseType.Ending], + u'BRIDGE': VerseType.Tags[VerseType.Bridge], + u'PRECHORUS': VerseType.Tags[VerseType.PreChorus] + } verses = {} # list as [region, versetype, versenum, instance] our_verse_order = [] diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index 43be5bd07..66f6eec42 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -33,6 +33,7 @@ import struct from openlp.core.lib import translate from openlp.core.ui.wizard import WizardStrings +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib import retrieve_windows_encoding from songimport import SongImport @@ -203,8 +204,8 @@ class EasyWorshipSongImport(SongImport): field_size)) self.set_record_struct(field_descs) # Pick out the field description indexes we will need - success = True try: + success = True fi_title = self.find_field(u'Title') fi_author = self.find_field(u'Author') fi_copy = self.find_field(u'Copyright') @@ -223,24 +224,18 @@ class EasyWorshipSongImport(SongImport): # Loop through each record within the current block for i in range(rec_count): if self.stop_import_flag: - success = False break raw_record = db_file.read(record_size) self.fields = self.record_struct.unpack(raw_record) self.set_defaults() - # Get title and update progress bar message - title = self.get_field(fi_title) - if title: - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % title, 0) - self.title = title - # Get remaining fields + self.title = self.get_field(fi_title) + # Get remaining fields. copy = self.get_field(fi_copy) admin = self.get_field(fi_admin) ccli = self.get_field(fi_ccli) authors = self.get_field(fi_author) words = self.get_field(fi_words) - # Set the SongImport object members + # Set the SongImport object members. if copy: self.copyright = copy if admin: @@ -264,17 +259,13 @@ class EasyWorshipSongImport(SongImport): # Format the lyrics words = strip_rtf(words, self.encoding) for verse in words.split(u'\n\n'): - self.add_verse(verse.strip(), u'V') + self.add_verse( + verse.strip(), VerseType.Tags[VerseType.Verse]) if self.stop_import_flag: - success = False break self.finish() - if not self.stop_import_flag: - self.import_wizard.incrementProgressBar(u'') db_file.close() self.memo_file.close() - if not success: - return False def find_field(self, field_name): return [i for i, x in enumerate(self.field_descs) \ diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index fef2bd41b..dd98bc415 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -121,7 +121,7 @@ class FoilPresenterImport(SongImport): parser = etree.XMLParser(remove_blank_text=True) for file_path in self.import_source: if self.stop_import_flag: - return False + return self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % os.path.basename(file_path)) try: @@ -303,9 +303,8 @@ class FoilPresenter(object): for marker in markers: copyright = re.compile(marker).sub(u'', copyright, re.U) copyright = re.compile(u'(?<=) *:').sub(u'', copyright) - i = 0 x = 0 - while i != 1: + while True: if copyright.find(u'') != -1: temp = copyright.partition(u'') if temp[0].strip() and x > 0: @@ -314,9 +313,9 @@ class FoilPresenter(object): x += 1 elif x > 0: strings.append(copyright) - i = 1 + break else: - i = 1 + break author_temp = [] for author in strings: temp = re.split(u',(?=\D{2})|(?<=\D),|\/(?=\D{3,})|(?<=\D);', @@ -347,8 +346,8 @@ class FoilPresenter(object): if author is None: # We need to create a new author, as the author does not exist. author = Author.populate(display_name=display_name, - last_name = display_name.split(u' ')[-1], - first_name = u' '.join(display_name.split(u' ')[:-1])) + last_name=display_name.split(u' ')[-1], + first_name=u' '.join(display_name.split(u' ')[:-1])) self.manager.save_object(author) song.authors.append(author) @@ -412,8 +411,15 @@ class FoilPresenter(object): temp_verse_order_backup = [] temp_sortnr_backup = 1 temp_sortnr_liste = [] - versenumber = {u'V': 1, u'C': 1, u'B': 1, u'E': 1, u'O': 1, u'I': 1, - u'P': 1} + versenumber = { + VerseType.Tags[VerseType.Verse]: 1, + VerseType.Tags[VerseType.Chorus]: 1, + VerseType.Tags[VerseType.Bridge]: 1, + VerseType.Tags[VerseType.Ending]: 1, + VerseType.Tags[VerseType.Other]: 1, + VerseType.Tags[VerseType.Intro]: 1, + VerseType.Tags[VerseType.PreChorus]: 1 + } for strophe in foilpresenterfolie.strophen.strophe: text = self._child(strophe.text_) verse_name = self._child(strophe.key) @@ -432,25 +438,25 @@ class FoilPresenter(object): temp_verse_name = re.compile(u'[0-9].*').sub(u'', verse_name) temp_verse_name = temp_verse_name[:3].lower() if temp_verse_name == u'ref': - verse_type = u'C' + verse_type = VerseType.Tags[VerseType.Chorus] elif temp_verse_name == u'r': - verse_type = u'C' + verse_type = VerseType.Tags[VerseType.Chorus] elif temp_verse_name == u'': - verse_type = u'V' + verse_type = VerseType.Tags[VerseType.Verse] elif temp_verse_name == u'v': - verse_type = u'V' + verse_type = VerseType.Tags[VerseType.Verse] elif temp_verse_name == u'bri': - verse_type = u'B' + verse_type = VerseType.Tags[VerseType.Bridge] elif temp_verse_name == u'cod': - verse_type = u'E' + verse_type = VerseType.Tags[VerseType.Ending] elif temp_verse_name == u'sch': - verse_type = u'E' + verse_type = VerseType.Tags[VerseType.Ending] elif temp_verse_name == u'pre': - verse_type = u'P' + verse_type = VerseType.Tags[VerseType.PreChorus] elif temp_verse_name == u'int': - verse_type = u'I' + verse_type = VerseType.Tags[VerseType.Intro] else: - verse_type = u'O' + verse_type = VerseType.Tags[VerseType.Other] verse_number = re.compile(u'[a-zA-Z.+-_ ]*').sub(u'', verse_name) # Foilpresenter allows e. g. "C", but we need "C1". if not verse_number: @@ -464,8 +470,8 @@ class FoilPresenter(object): verse_number = unicode(int(verse_number) + 1) verse_type_index = VerseType.from_tag(verse_type[0]) verse_type = VerseType.Names[verse_type_index] - temp_verse_order[verse_sortnr] = (u''.join((verse_type[0], - verse_number))) + temp_verse_order[verse_sortnr] = u''.join((verse_type[0], + verse_number)) temp_verse_order_backup.append(u''.join((verse_type[0], verse_number))) sxml.add_verse_to_lyrics(verse_type, verse_number, text) diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index b4995caed..765794d05 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -63,12 +63,18 @@ class OpenLP1SongImport(SongImport): Run the import for an openlp.org 1.x song database. """ if not self.import_source.endswith(u'.olp'): - return translate('SongsPlugin.OpenLP1SongImport', 'The file you ' + self.log_error(self.import_source, + translate('SongsPlugin.OpenLP1SongImport', 'The file you ' 'were trying to import is not a valid openlp.org 1.x song ' - 'database.') + 'database.')) + return encoding = self.get_encoding() if not encoding: - return False + self.log_error(self.import_source, + translate('SongsPlugin.OpenLP1SongImport', 'The file you ' + 'were trying to import is not a valid openlp.org 1.x song ' + 'database.')) + return # Connect to the database connection = sqlite.connect(self.import_source, mode=0444, encoding=(encoding, 'replace')) @@ -81,7 +87,6 @@ class OpenLP1SongImport(SongImport): cursor.execute(u'-- types int') cursor.execute(u'SELECT COUNT(songid) FROM songs') count = cursor.fetchone()[0] - success = True self.import_wizard.progressBar.setMaximum(count) # "cache" our list of authors cursor.execute(u'-- types int, unicode') @@ -100,7 +105,6 @@ class OpenLP1SongImport(SongImport): for song in songs: self.set_defaults() if self.stop_import_flag: - success = False break song_id = song[0] title = song[1] @@ -110,9 +114,7 @@ class OpenLP1SongImport(SongImport): WizardStrings.ImportingType % title) self.title = title verses = lyrics.split(u'\n\n') - for verse in verses: - if verse.strip() != u'': - self.add_verse(verse.strip()) + [self.add_verse(verse.strip()) for verse in verses if verse.strip()] self.add_copyright(copyright) cursor.execute(u'-- types int') cursor.execute(u'SELECT authorid FROM songauthors ' @@ -120,14 +122,12 @@ class OpenLP1SongImport(SongImport): author_ids = cursor.fetchall() for author_id in author_ids: if self.stop_import_flag: - success = False break for author in authors: if author[0] == author_id[0]: self.parse_author(author[1]) break if self.stop_import_flag: - success = False break if new_db: cursor.execute(u'-- types int') @@ -136,17 +136,14 @@ class OpenLP1SongImport(SongImport): track_ids = cursor.fetchall() for track_id in track_ids: if self.stop_import_flag: - success = False break for track in tracks: if track[0] == track_id[0]: self.add_media_file(track[1]) break if self.stop_import_flag: - success = False break self.finish() - return success def get_encoding(self): """ diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index 4e0116198..d89ba5c46 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -101,8 +101,10 @@ class OpenLPSongImport(SongImport): Run the import for an OpenLP version 2 song database. """ if not self.import_source.endswith(u'.sqlite'): - return translate('SongsPlugin.OpenLPSongImport', 'The file you were' - ' trying to import is not a valid OpenLP 2.0 song database.') + self.log_error(self.import_source, + translate('SongsPlugin.OpenLPSongImport', 'The file you were ' + 'trying to import is not a valid OpenLP 2.0 song database.')) + return engine = create_engine(self.import_source) source_meta = MetaData() source_meta.reflect(engine) @@ -127,10 +129,10 @@ class OpenLPSongImport(SongImport): mapper(OldMediaFile, source_media_files_table) song_props = { 'authors': relation(OldAuthor, backref='songs', - secondary=source_authors_songs_table), + secondary=source_authors_songs_table), 'book': relation(OldBook, backref='songs'), 'topics': relation(OldTopic, backref='songs', - secondary=source_songs_topics_table) + secondary=source_songs_topics_table) } if has_media_files: song_props['media_files'] = relation(OldMediaFile, backref='songs', @@ -218,5 +220,5 @@ class OpenLPSongImport(SongImport): self.manager.save_object(new_song) song_count += 1 if self.stop_import_flag: - return False + break engine.dispose() diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 47cdace26..3abc17a7a 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -60,7 +60,7 @@ class OooImport(SongImport): self.import_wizard.progressBar.setMaximum(self.import_source) for filename in self.import_source: if self.stop_import_flag: - return False + break filename = unicode(filename) if os.path.isfile(filename): self.open_ooo_file(filename) diff --git a/openlp/plugins/songs/lib/openlyricsimport.py b/openlp/plugins/songs/lib/openlyricsimport.py index c72f1af89..cf46d7449 100644 --- a/openlp/plugins/songs/lib/openlyricsimport.py +++ b/openlp/plugins/songs/lib/openlyricsimport.py @@ -59,7 +59,7 @@ class OpenLyricsImport(SongImport): parser = etree.XMLParser(remove_blank_text=True) for file_path in self.import_source: if self.stop_import_flag: - return False + return self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % os.path.basename(file_path)) try: diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index a5798dc33..aebb865b8 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -26,12 +26,14 @@ import logging import os +import re from zipfile import ZipFile + from lxml import objectify from lxml.etree import Error, LxmlError -import re from openlp.core.ui.wizard import WizardStrings +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport log = logging.getLogger(__name__) @@ -105,29 +107,26 @@ class OpenSongImport(SongImport): Initialise the class. """ SongImport.__init__(self, manager, **kwargs) - self.commit = True def do_import(self): """ Import either each of the files in self.import_source - each element of which can be either a single opensong file, or a zipfile containing - multiple opensong files. If `self.commit` is set False, the - import will not be committed to the database (useful for test scripts). + multiple opensong files. """ - success = True numfiles = 0 for filename in self.import_source: ext = os.path.splitext(filename)[1] if ext.lower() == u'.zip': z = ZipFile(filename, u'r') numfiles += len(z.infolist()) + z.close() else: numfiles += 1 log.debug(u'Total number of files: %d', numfiles) self.import_wizard.progressBar.setMaximum(numfiles) for filename in self.import_source: if self.stop_import_flag: - success = False break ext = os.path.splitext(filename)[1] if ext.lower() == u'.zip': @@ -135,48 +134,36 @@ class OpenSongImport(SongImport): z = ZipFile(filename, u'r') for song in z.infolist(): if self.stop_import_flag: - success = False break parts = os.path.split(song.filename) if parts[-1] == u'': - #No final part => directory + # No final part => directory continue log.info(u'Zip importing %s', parts[-1]) self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % parts[-1]) - songfile = z.open(song) - if self.do_import_file(songfile) and self.commit and \ - not self.stop_import_flag: - self.finish() - else: - success = False - break + song_file = z.open(song) + self.do_import_file(song_file) + song_file.close() + z.close() else: # not a zipfile log.info(u'Direct import %s', filename) self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % os.path.split(filename)[-1]) song_file = open(filename) - if self.do_import_file(song_file) and self.commit and \ - not self.stop_import_flag: - self.finish() - else: - success = False - break - if not success: - return False + self.do_import_file(song_file) + song_file.close() def do_import_file(self, file): """ - Process the OpenSong file - pass in a file-like object, - not a filename + Process the OpenSong file - pass in a file-like object, not a file path. """ self.set_defaults() try: tree = objectify.parse(file) except (Error, LxmlError): log.exception(u'Error parsing XML') - return False root = tree.getroot() fields = dir(root) decode = { @@ -196,7 +183,7 @@ class OpenSongImport(SongImport): fn_or_string(ustring) if not len(self.title): # to prevent creation of empty songs from wrong files - return False + return if u'theme' in fields and unicode(root.theme) not in self.topics: self.topics.append(unicode(root.theme)) if u'alttheme' in fields and unicode(root.alttheme) not in self.topics: @@ -206,7 +193,7 @@ class OpenSongImport(SongImport): # keep track of verses appearance order our_verse_order = [] # default verse - verse_tag = u'v' + verse_tag = VerseType.Tags[VerseType.Verse] verse_num = u'1' # for the case where song has several sections with same marker inst = 1 @@ -244,7 +231,7 @@ class OpenSongImport(SongImport): if [verse_tag, verse_num, inst] in our_verse_order \ and verses.has_key(verse_tag) \ and verses[verse_tag].has_key(verse_num): - inst = len(verses[verse_tag][verse_num])+1 + inst = len(verses[verse_tag][verse_num]) + 1 our_verse_order.append([verse_tag, verse_num, inst]) continue # number at start of line.. it's verse number @@ -293,4 +280,4 @@ class OpenSongImport(SongImport): else: log.info(u'Got order %s but not in verse tags, dropping' u'this item from presentation order', verse_def) - return True + self.finish() diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 84955f33a..7f9fa16bc 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -88,8 +88,7 @@ class SofImport(OooImport): paragraphs = self.document.getText().createEnumeration() while paragraphs.hasMoreElements(): if self.stop_import_flag: - self.import_wizard.incrementProgressBar(u'Import cancelled', 0) - return False + return paragraph = paragraphs.nextElement() if paragraph.supportsService("com.sun.star.text.Paragraph"): self.process_paragraph(paragraph) diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index fcfa2f44b..be0fae589 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -33,7 +33,6 @@ import logging import os import re -from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport @@ -80,18 +79,16 @@ class SongBeamerImport(SongImport): """ self.import_wizard.progressBar.setMaximum(len(self.import_source)) if not isinstance(self.import_source, list): - return False + return for file in self.import_source: # TODO: check that it is a valid SongBeamer file if self.stop_import_flag: - return False + return self.set_defaults() self.current_verse = u'' self.current_verse_type = VerseType.Tags[VerseType.Verse] read_verses = False file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name, 0) if os.path.isfile(file): detect_file = open(file, u'r') details = chardet.detect(detect_file.read(2048)) @@ -100,7 +97,7 @@ class SongBeamerImport(SongImport): songData = infile.readlines() infile.close() else: - return False + continue self.title = file_name.split('.sng')[0] read_verses = False for line in songData: @@ -127,10 +124,7 @@ class SongBeamerImport(SongImport): if self.current_verse: self.replace_html_tags() self.add_verse(self.current_verse, self.current_verse_type) - if self.check_complete(): - self.finish() - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name) + self.finish() def replace_html_tags(self): """ @@ -288,5 +282,4 @@ class SongBeamerImport(SongImport): if marks[1].isdigit(): self.current_verse_type += marks[1] return True - else: - return False + return False diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 5bc1f15d0..87aa09bcb 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -29,6 +29,7 @@ import re from PyQt4 import QtCore from openlp.core.lib import Receiver, translate +from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import clean_song, VerseType from openlp.plugins.songs.lib.db import Song, Author, Topic, Book, MediaFile from openlp.plugins.songs.lib.ui import SongStrings @@ -66,6 +67,7 @@ class SongImport(QtCore.QObject): self.song = None self.stop_import_flag = False self.set_defaults() + self.import_error_log = [] QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import) @@ -94,6 +96,21 @@ class SongImport(QtCore.QObject): self.copyright_string = unicode(translate( 'SongsPlugin.SongImport', 'copyright')) + def log_error(self, filepath, reason=None): + """ + This should be called, when a song could not be imported. + + ``filepath`` + This should be the file path if ``self.import_source`` is a list + with different files. If it is not a list, but a single file (for + instance a database), then this should be the song's title. + + ``reason`` + The reason, why the import failed. The string should be as + informative as possible. + """ + self.import_error_log.append((filepath, unicode(reason))) + def stop_import(self): """ Sets the flag for importers to stop their import @@ -249,9 +266,15 @@ class SongImport(QtCore.QObject): """ All fields have been set to this song. Write the song to disk. """ + if not self.check_complete(): + self.set_defaults() + return log.info(u'committing song %s to database', self.title) song = Song() song.title = self.title + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % song.title) + print WizardStrings.ImportingType song.alternate_title = self.alternate_title # Values will be set when cleaning the song. song.search_title = u'' diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index c7a6b6a3c..28f07ea31 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -32,6 +32,7 @@ import logging import struct from openlp.core.ui.wizard import WizardStrings +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport TITLE = 1 @@ -97,82 +98,83 @@ class SongShowPlusImport(SongImport): Receive a single file or a list of files to import. """ if isinstance(self.import_source, list): - self.import_wizard.progressBar.setMaximum(len(self.import_source)) - for file in self.import_source: - author = u'' - self.sspVerseOrderList = [] - otherCount = 0 - otherList = {} - file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name, 0) - songData = open(file, 'rb') - while True: - blockKey, = struct.unpack("I", songData.read(4)) - # The file ends with 4 NUL's - if blockKey == 0: - break - nextBlockStarts, = struct.unpack("I", songData.read(4)) - if blockKey == VERSE or blockKey == CHORUS: - null, verseNo, = struct.unpack("BB", songData.read(2)) - elif blockKey == CUSTOM_VERSE: - null, verseNameLength, = struct.unpack("BB", - songData.read(2)) - verseName = songData.read(verseNameLength) - lengthDescriptorSize, = struct.unpack("B", songData.read(1)) - # Detect if/how long the length descriptor is - if lengthDescriptorSize == 12: - lengthDescriptor, = struct.unpack("I", songData.read(4)) - elif lengthDescriptorSize == 2: - lengthDescriptor = 1 - elif lengthDescriptorSize == 9: - lengthDescriptor = 0 - else: - lengthDescriptor, = struct.unpack("B", songData.read(1)) - data = songData.read(lengthDescriptor) - if blockKey == TITLE: - self.title = unicode(data, u'cp1252') - elif blockKey == AUTHOR: - authors = data.split(" / ") - for author in authors: - if author.find(",") !=-1: - authorParts = author.split(", ") - author = authorParts[1] + " " + authorParts[0] - self.parse_author(unicode(author, u'cp1252')) - elif blockKey == COPYRIGHT: - self.add_copyright(unicode(data, u'cp1252')) - elif blockKey == CCLI_NO: - self.ccli_number = int(data) - elif blockKey == VERSE: - self.add_verse(unicode(data, u'cp1252'), - "V%s" % verseNo) - elif blockKey == CHORUS: - self.add_verse(unicode(data, u'cp1252'), - "C%s" % verseNo) - elif blockKey == TOPIC: - self.topics.append(unicode(data, u'cp1252')) - elif blockKey == COMMENTS: - self.comments = unicode(data, u'cp1252') - elif blockKey == VERSE_ORDER: - verseTag = self.toOpenLPVerseTag(data, True) - if verseTag: - self.sspVerseOrderList.append(unicode(verseTag, - u'cp1252')) - elif blockKey == SONG_BOOK: - self.song_book_name = unicode(data, u'cp1252') - elif blockKey == SONG_NUMBER: - self.song_number = ord(data) - elif blockKey == CUSTOM_VERSE: - verseTag = self.toOpenLPVerseTag(verseName) - self.add_verse(unicode(data, u'cp1252'), verseTag) - else: - log.debug("Unrecognised blockKey: %s, data: %s" - %(blockKey, data)) - self.verse_order_list = self.sspVerseOrderList - songData.close() - self.finish() - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name) + return + self.import_wizard.progressBar.setMaximum(len(self.import_source)) + for file in self.import_source: + author = u'' + self.sspVerseOrderList = [] + otherCount = 0 + otherList = {} + file_name = os.path.split(file)[1] + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % file_name, 0) + songData = open(file, 'rb') + while True: + blockKey, = struct.unpack("I", songData.read(4)) + # The file ends with 4 NUL's + if blockKey == 0: + break + nextBlockStarts, = struct.unpack("I", songData.read(4)) + if blockKey == VERSE or blockKey == CHORUS: + null, verseNo, = struct.unpack("BB", songData.read(2)) + elif blockKey == CUSTOM_VERSE: + null, verseNameLength, = struct.unpack("BB", + songData.read(2)) + verseName = songData.read(verseNameLength) + lengthDescriptorSize, = struct.unpack("B", songData.read(1)) + # Detect if/how long the length descriptor is + if lengthDescriptorSize == 12: + lengthDescriptor, = struct.unpack("I", songData.read(4)) + elif lengthDescriptorSize == 2: + lengthDescriptor = 1 + elif lengthDescriptorSize == 9: + lengthDescriptor = 0 + else: + lengthDescriptor, = struct.unpack("B", songData.read(1)) + data = songData.read(lengthDescriptor) + if blockKey == TITLE: + self.title = unicode(data, u'cp1252') + elif blockKey == AUTHOR: + authors = data.split(" / ") + for author in authors: + if author.find(",") !=-1: + authorParts = author.split(", ") + author = authorParts[1] + " " + authorParts[0] + self.parse_author(unicode(author, u'cp1252')) + elif blockKey == COPYRIGHT: + self.add_copyright(unicode(data, u'cp1252')) + elif blockKey == CCLI_NO: + self.ccli_number = int(data) + elif blockKey == VERSE: + self.add_verse(unicode(data, u'cp1252'), + "V%s" % verseNo) + elif blockKey == CHORUS: + self.add_verse(unicode(data, u'cp1252'), + "C%s" % verseNo) + elif blockKey == TOPIC: + self.topics.append(unicode(data, u'cp1252')) + elif blockKey == COMMENTS: + self.comments = unicode(data, u'cp1252') + elif blockKey == VERSE_ORDER: + verseTag = self.toOpenLPVerseTag(data, True) + if verseTag: + self.sspVerseOrderList.append(unicode(verseTag, + u'cp1252')) + elif blockKey == SONG_BOOK: + self.song_book_name = unicode(data, u'cp1252') + elif blockKey == SONG_NUMBER: + self.song_number = ord(data) + elif blockKey == CUSTOM_VERSE: + verseTag = self.toOpenLPVerseTag(verseName) + self.add_verse(unicode(data, u'cp1252'), verseTag) + else: + log.debug("Unrecognised blockKey: %s, data: %s" + %(blockKey, data)) + self.verse_order_list = self.sspVerseOrderList + songData.close() + self.finish() + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % file_name) def toOpenLPVerseTag(self, verseName, ignoreUnique=False): if verseName.find(" ") != -1: From c7843012e961d262bf48e7e957cb2a3f7cb9da6f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 18 Apr 2011 16:57:37 +0200 Subject: [PATCH 105/148] fixed bug #76330 Fixes: https://launchpad.net/bugs/7633099 --- openlp/core/ui/firsttimeform.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index dc1932015..dade26cf9 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -140,6 +140,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): return FirstTimePage.Songs elif self.currentId() == FirstTimePage.Progress: return -1 + elif self.currentId() == FirstTimePage.NoInternet: + return FirstTimePage.Progress else: return self.currentId() + 1 @@ -147,11 +149,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ Detects Page changes and updates as approprate. """ - if pageId == FirstTimePage.NoInternet: - self.finishButton.setVisible(True) - self.finishButton.setEnabled(True) - self.nextButton.setVisible(False) - elif pageId == FirstTimePage.Defaults: + if pageId == FirstTimePage.Defaults: self.themeComboBox.clear() for iter in xrange(self.themesListWidget.count()): item = self.themesListWidget.item(iter) From 3c8568443be04767f931e304506a4916f76ed688 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 18 Apr 2011 16:30:32 +0100 Subject: [PATCH 106/148] Delete the correct item Fixes: https://launchpad.net/bugs/764651 --- openlp/core/ui/settingsform.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 949d907b4..9f3d5208f 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -82,7 +82,9 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): item_name.setIcon(icon) self.settingListWidget.insertItem(location, item_name) else: - self.stackedLayout.takeAt(location) + # add then remove tab to stop th UI displaying it even if + # it is not required. + self.stackedLayout.takeAt(pos) def accept(self): """ From 133145d5c226c4eff5ccb8905fe452c9f8010c29 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 18 Apr 2011 16:31:20 +0100 Subject: [PATCH 107/148] Fix comment --- openlp/core/ui/settingsform.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 9f3d5208f..1967412f5 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -75,6 +75,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): Add a tab to the form at a specific location """ log.debug(u'Inserting %s tab' % tab.tabTitle) + # add the tab to get it to display in the correct part of the screen pos = self.stackedLayout.addWidget(tab) if is_active: item_name = QtGui.QListWidgetItem(tab.tabTitleVisible) @@ -82,7 +83,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): item_name.setIcon(icon) self.settingListWidget.insertItem(location, item_name) else: - # add then remove tab to stop th UI displaying it even if + # then remove tab to stop the UI displaying it even if # it is not required. self.stackedLayout.takeAt(pos) From a530851124840e0f4d4547b5d85d3874b9afd882 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 18 Apr 2011 18:46:22 +0200 Subject: [PATCH 108/148] added error logger methods --- openlp/plugins/songs/forms/songimportform.py | 14 +++++--- openlp/plugins/songs/lib/cclifileimport.py | 10 +++--- openlp/plugins/songs/lib/easislidesimport.py | 12 +++---- openlp/plugins/songs/lib/ewimport.py | 3 +- .../plugins/songs/lib/foilpresenterimport.py | 3 ++ openlp/plugins/songs/lib/olp1import.py | 3 +- openlp/plugins/songs/lib/olpimport.py | 12 +++---- openlp/plugins/songs/lib/openlyricsimport.py | 3 ++ openlp/plugins/songs/lib/opensongimport.py | 11 +++--- openlp/plugins/songs/lib/songbeamerimport.py | 11 ++++-- openlp/plugins/songs/lib/songimport.py | 35 ++++++++++++++----- .../plugins/songs/lib/songshowplusimport.py | 22 +++++------- openlp/plugins/songs/lib/ui.py | 3 ++ openlp/plugins/songs/lib/wowimport.py | 24 +++++-------- 14 files changed, 97 insertions(+), 69 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 4986c26a4..e3b44237f 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -741,15 +741,19 @@ class SongImportForm(OpenLPWizard): filenames=self.getListOfFiles(self.foilPresenterFileListWidget) ) test = importer.do_import() + importer.write_error_report() if isinstance(test, bool): raise received_boolean if importer.stop_import_flag: - print importer.import_error_log - print u'cancelled' + self.progressLabel.setText(translate('SongsPlugin.SongImportForm', + 'Song import has been cancelled.')) elif importer.import_error_log: - self.progressLabel.setText(self.progressLabel.setText( - translate('SongsPlugin.SongImportForm', - 'Your song import failed.'))) + error_path = importer.write_error_report() + self.progressLabel.setTextInteractionFlags( + QtCore.Qt.TextSelectableByMouse) + self.progressLabel.setText(unicode(translate( + 'SongsPlugin.SongImportForm', 'Your song import failed. See ' + 'the error report for more details:\n%s')) % error_path) else: self.progressLabel.setText(WizardStrings.FinishedImport) diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 35e138a19..d304b0241 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -79,10 +79,12 @@ class CCLIFileImport(SongImport): ext = os.path.splitext(filename)[1] if ext.lower() == u'.usr': log.info(u'SongSelect .usr format file found: %s', filename) - self.do_import_usr_file(lines) + if not self.do_import_usr_file(lines): + self.log_error(filename) elif ext.lower() == u'.txt': log.info(u'SongSelect .txt format file found: %s', filename) - self.do_import_txt_file(lines) + if not self.do_import_txt_file(lines): + self.log_error(filename) else: self.log_error(filename, translate('SongsPlugin.CCLIFileImport', @@ -214,7 +216,7 @@ class CCLIFileImport(SongImport): else: self.add_author(author) self.topics = [topic.strip() for topic in song_topics.split(u'/t')] - self.finish() + return self.finish() def do_import_txt_file(self, textList): """ @@ -331,4 +333,4 @@ class CCLIFileImport(SongImport): author_list = song_author.split(u'|') # Clean spaces before and after author names. [self.add_author(author_name.strip()) for author_name in author_list] - self.finish() + return self.finish() diff --git a/openlp/plugins/songs/lib/easislidesimport.py b/openlp/plugins/songs/lib/easislidesimport.py index f2b38c26e..0c710377a 100644 --- a/openlp/plugins/songs/lib/easislidesimport.py +++ b/openlp/plugins/songs/lib/easislidesimport.py @@ -70,7 +70,6 @@ class EasiSlidesImport(SongImport): self._parse_song(song) def _parse_song(self, song): - self.set_defaults() self._success = True self._add_unicode_attribute(u'title', song.Title1, True) self._add_unicode_attribute(u'alternate_title', song.Title2) @@ -84,7 +83,10 @@ class EasiSlidesImport(SongImport): self._add_unicode_attribute(u'song_book_name', song.BookReference) self._parse_and_add_lyrics(song) if self._success: - self.finish() + if not self.finish(): + self.log_error(song.Title1 if song.Title1 else u'') + else: + self.set_defaults() def _add_unicode_attribute(self, self_attribute, import_attribute, mandatory=False): @@ -116,10 +118,8 @@ class EasiSlidesImport(SongImport): def _add_authors(self, song): try: authors = unicode(song.Writer).split(u',') - for author in authors: - author = author.strip() - if len(author): - self.authors.append(author) + self.authors = \ + [author.strip() for author in authors if author.strip()] except UnicodeDecodeError: log.exception(u'Unicode decode error while decoding Writer') self._success = False diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index 66f6eec42..85a0b88c2 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -263,7 +263,8 @@ class EasyWorshipSongImport(SongImport): verse.strip(), VerseType.Tags[VerseType.Verse]) if self.stop_import_flag: break - self.finish() + if not self.finish(): + self.log_error(self.import_source) db_file.close() self.memo_file.close() diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index dd98bc415..dcbc4367d 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -97,6 +97,7 @@ from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import clean_song, VerseType from openlp.plugins.songs.lib.songimport import SongImport from openlp.plugins.songs.lib.db import Author, Book, Song, Topic +from openlp.plugins.songs.lib.ui import SongStrings from openlp.plugins.songs.lib.xml import SongXML log = logging.getLogger(__name__) @@ -128,8 +129,10 @@ class FoilPresenterImport(SongImport): parsed_file = etree.parse(file_path, parser) xml = unicode(etree.tostring(parsed_file)) if self.FoilPresenter.xml_to_song(xml) is None: + self.log_error(file_path, SongStrings.NoXML) log.debug(u'File could not be imported: %s' % file_path) except etree.XMLSyntaxError: + self.log_error(file_path, SongStrings.XMLSyntaxError) log.exception(u'XML syntax error in file %s' % file_path) diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 765794d05..26fdf19a9 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -143,7 +143,8 @@ class OpenLP1SongImport(SongImport): break if self.stop_import_flag: break - self.finish() + if not self.finish(): + self.log_error(self.import_source) def get_encoding(self): """ diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index d89ba5c46..c69e5ded0 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -155,15 +155,9 @@ class OpenLPSongImport(SongImport): mapper(OldTopic, source_topics_table) source_songs = self.source_session.query(OldSong).all() - song_total = len(source_songs) if self.import_wizard: - self.import_wizard.progressBar.setMaximum(song_total) - song_count = 1 + self.import_wizard.progressBar.setMaximum(len(source_songs)) for song in source_songs: - if self.import_wizard: - self.import_wizard.incrementProgressBar( - unicode(translate('SongsPlugin.OpenLPSongImport', - 'Importing song %d of %d.')) % (song_count, song_total)) new_song = Song() new_song.title = song.title if has_media_files and hasattr(song, 'alternate_title'): @@ -218,7 +212,9 @@ class OpenLPSongImport(SongImport): # file_name=media_file.file_name)) clean_song(self.manager, new_song) self.manager.save_object(new_song) - song_count += 1 + if self.import_wizard: + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % new_song.title) if self.stop_import_flag: break engine.dispose() diff --git a/openlp/plugins/songs/lib/openlyricsimport.py b/openlp/plugins/songs/lib/openlyricsimport.py index cf46d7449..687a949af 100644 --- a/openlp/plugins/songs/lib/openlyricsimport.py +++ b/openlp/plugins/songs/lib/openlyricsimport.py @@ -35,6 +35,7 @@ from lxml import etree from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib.songimport import SongImport +from openlp.plugins.songs.lib.ui import SongStrings from openlp.plugins.songs.lib import OpenLyrics log = logging.getLogger(__name__) @@ -69,5 +70,7 @@ class OpenLyricsImport(SongImport): xml = unicode(etree.tostring(parsed_file)) if self.openLyrics.xml_to_song(xml) is None: log.debug(u'File could not be imported: %s' % file_path) + self.log_error(file_path, SongStrings.NoXML) except etree.XMLSyntaxError: log.exception(u'XML syntax error in file %s' % file_path) + self.log_error(file_path, SongStrings.XMLSyntaxError) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index aebb865b8..7cff1522f 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -35,6 +35,7 @@ from lxml.etree import Error, LxmlError from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport +from openlp.plugins.songs.lib.ui import SongStrings log = logging.getLogger(__name__) @@ -181,9 +182,6 @@ class OpenSongImport(SongImport): setattr(self, fn_or_string, ustring) else: fn_or_string(ustring) - if not len(self.title): - # to prevent creation of empty songs from wrong files - return if u'theme' in fields and unicode(root.theme) not in self.topics: self.topics.append(unicode(root.theme)) if u'alttheme' in fields and unicode(root.alttheme) not in self.topics: @@ -274,10 +272,11 @@ class OpenSongImport(SongImport): verse_tag = verse_def verse_num = u'1' verse_def = u'%s%s' % (verse_tag, verse_num) - if verses.has_key(verse_tag) \ - and verses[verse_tag].has_key(verse_num): + if verses.has_key(verse_tag) and \ + verses[verse_tag].has_key(verse_num): self.verse_order_list.append(verse_def) else: log.info(u'Got order %s but not in verse tags, dropping' u'this item from presentation order', verse_def) - self.finish() + if not self.finish(): + self.log_error(file.name) diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index be0fae589..2813240a4 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -35,6 +35,7 @@ import re from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport +from openlp.plugins.songs.lib.ui import SongStrings log = logging.getLogger(__name__) @@ -72,6 +73,11 @@ class SongBeamerImport(SongImport): Initialise the Song Beamer importer. """ SongImport.__init__(self, manager, **kwargs) + self.log_error(u'/home/andreas/1.sng', u'aaaa') + self.log_error(u'/home/andreas/4.sng', u'asdfsdfsadfds') + self.log_error(u'/home/andreas/3.sng', u'asdf3q4') + self.log_error(u'/home/andreas/2.sng', u'sadfasdf') + self.log_error(u'/home/andreas/ä.sng', u'kqwjw32w3') def do_import(self): """ @@ -124,7 +130,8 @@ class SongBeamerImport(SongImport): if self.current_verse: self.replace_html_tags() self.add_verse(self.current_verse, self.current_verse_type) - self.finish() + if not self.finish(): + self.log_error(file) def replace_html_tags(self): """ @@ -184,7 +191,7 @@ class SongBeamerImport(SongImport): elif tag_val[0] == u'#Bible': pass elif tag_val[0] == u'#Categories': - self.topics = line.split(',') + self.topics = tag_val[1].split(',') elif tag_val[0] == u'#CCLI': self.ccli_number = tag_val[1] elif tag_val[0] == u'#Chords': diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 87aa09bcb..80eebde43 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -23,13 +23,17 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +import codecs +import datetime import logging +import os import re + from PyQt4 import QtCore from openlp.core.lib import Receiver, translate from openlp.core.ui.wizard import WizardStrings +from openlp.core.utils import AppLocation from openlp.plugins.songs.lib import clean_song, VerseType from openlp.plugins.songs.lib.db import Song, Author, Topic, Book, MediaFile from openlp.plugins.songs.lib.ui import SongStrings @@ -67,7 +71,7 @@ class SongImport(QtCore.QObject): self.song = None self.stop_import_flag = False self.set_defaults() - self.import_error_log = [] + self.error_log = [] QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import) @@ -96,7 +100,7 @@ class SongImport(QtCore.QObject): self.copyright_string = unicode(translate( 'SongsPlugin.SongImport', 'copyright')) - def log_error(self, filepath, reason=None): + def log_error(self, filepath, reason=SongStrings.SongIncomplete): """ This should be called, when a song could not be imported. @@ -109,7 +113,22 @@ class SongImport(QtCore.QObject): The reason, why the import failed. The string should be as informative as possible. """ - self.import_error_log.append((filepath, unicode(reason))) + self.error_log.append((filepath, unicode(reason))) + + def write_error_report(self): + """ + Creates a error import containing all error messages. + """ + report_path = os.path.join(AppLocation.get_data_path(), unicode(translate( + 'SongsPlugin.SongImport','song_import_report (%s).txt')) % + datetime.datetime.now().strftime(u'%Y-%m-%dT%H:%M:%S')) + report_file = codecs.open(report_path, u'w', u'utf-8') + report_file.write(translate('SongsPlugin.SongImport', + 'The following songs could not be imported:\n')) + for filepath, reason in self.error_log: + report_file.write(u'- %s (%s)\n' % (filepath, reason)) + report_file.close() + return report_path def stop_import(self): """ @@ -257,7 +276,7 @@ class SongImport(QtCore.QObject): Author not checked here, if no author then "Author unknown" is automatically added """ - if self.title == u'' or len(self.verses) == 0: + if not self.title or not len(self.verses): return False else: return True @@ -268,13 +287,12 @@ class SongImport(QtCore.QObject): """ if not self.check_complete(): self.set_defaults() - return + return False log.info(u'committing song %s to database', self.title) song = Song() song.title = self.title self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % song.title) - print WizardStrings.ImportingType song.alternate_title = self.alternate_title # Values will be set when cleaning the song. song.search_title = u'' @@ -331,7 +349,7 @@ class SongImport(QtCore.QObject): publisher=self.song_book_pub) song.book = song_book for topictext in self.topics: - if len(topictext) == 0: + if not topictext: continue topic = self.manager.get_object_filtered(Topic, Topic.name == topictext) @@ -341,6 +359,7 @@ class SongImport(QtCore.QObject): clean_song(self.manager, song) self.manager.save_object(song) self.set_defaults() + return True def print_song(self): """ diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index 28f07ea31..27620d11a 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -169,12 +169,11 @@ class SongShowPlusImport(SongImport): self.add_verse(unicode(data, u'cp1252'), verseTag) else: log.debug("Unrecognised blockKey: %s, data: %s" - %(blockKey, data)) + % (blockKey, data)) self.verse_order_list = self.sspVerseOrderList songData.close() - self.finish() - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name) + if not self.finish(): + self.log_error(file) def toOpenLPVerseTag(self, verseName, ignoreUnique=False): if verseName.find(" ") != -1: @@ -186,22 +185,19 @@ class SongShowPlusImport(SongImport): verseNumber = "1" verseType = verseType.lower() if verseType == "verse": - verseTag = "V" + verseTag = VerseType.Tags[VerseType.Verse] elif verseType == "chorus": - verseTag = "C" + verseTag = VerseType.Tags[VerseType.Chorus] elif verseType == "bridge": - verseTag = "B" + verseTag = VerseType.Tags[VerseType.Bridge] elif verseType == "pre-chorus": - verseTag = "P" - elif verseType == "bridge": - verseTag = "B" + verseTag = VerseType.Tags[VerseType.PreChorus] else: if not self.otherList.has_key(verseName): if ignoreUnique: return None self.otherCount = self.otherCount + 1 self.otherList[verseName] = str(self.otherCount) - verseTag = "O" + verseTag = VerseType.Tags[VerseType.Other] verseNumber = self.otherList[verseName] - verseTag = verseTag + verseNumber - return verseTag + return verseTag + verseNumber diff --git a/openlp/plugins/songs/lib/ui.py b/openlp/plugins/songs/lib/ui.py index 0a389087e..e9dfd0f13 100644 --- a/openlp/plugins/songs/lib/ui.py +++ b/openlp/plugins/songs/lib/ui.py @@ -38,8 +38,11 @@ class SongStrings(object): Authors = translate('OpenLP.Ui', 'Authors', 'Plural') AuthorUnknown = u'Author Unknown' # Used to populate the database. CopyrightSymbol = translate('OpenLP.Ui', '\xa9', 'Copyright symbol.') + NoXML = translate('OpenLP.Ui', 'Song does not contain any XML') SongBook = translate('OpenLP.Ui', 'Song Book', 'Singular') SongBooks = translate('OpenLP.Ui', 'Song Books', 'Plural') + SongIncomplete = translate('OpenLP.Ui','Title and/or verses not found') SongMaintenance = translate('OpenLP.Ui', 'Song Maintenance') Topic = translate('OpenLP.Ui', 'Topic', 'Singular') Topics = translate('OpenLP.Ui', 'Topics', 'Plural') + XMLSyntaxError = translate('OpenLP.Ui', 'XML syntax error') diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index e6495a2b9..661e6787d 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -105,11 +105,7 @@ class WowImport(SongImport): if isinstance(self.import_source, list): self.import_wizard.progressBar.setMaximum(len(self.import_source)) for file in self.import_source: - author = u'' - copyright = u'' file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name, 0) # Get the song title self.title = file_name.rpartition(u'.')[0] songData = open(file, 'rb') @@ -129,7 +125,7 @@ class WowImport(SongImport): self.line_text = unicode( songData.read(ord(songData.read(1))), u'cp1252') songData.seek(1, os.SEEK_CUR) - if block_text != u'': + if block_text: block_text += u'\n' block_text += self.line_text self.lines_to_read -= 1 @@ -143,16 +139,14 @@ class WowImport(SongImport): self.add_verse(block_text, block_type) # Now to extract the author author_length = ord(songData.read(1)) - if author_length != 0: - author = unicode(songData.read(author_length), u'cp1252') + if author_length: + self.parse_author( + unicode(songData.read(author_length), u'cp1252')) # Finally the copyright copyright_length = ord(songData.read(1)) - if copyright_length != 0: - copyright = unicode( - songData.read(copyright_length), u'cp1252') - self.parse_author(author) - self.add_copyright(copyright) + if copyright_length: + self.add_copyright(unicode( + songData.read(copyright_length), u'cp1252')) songData.close() - self.finish() - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % file_name) + if not self.finish(): + self.log_error(file) From 16fa78bbe32c12a3272240bf13ff36b9c4a21e31 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 18 Apr 2011 19:15:41 +0200 Subject: [PATCH 109/148] fixes --- openlp/plugins/songs/forms/songimportform.py | 3 +-- openlp/plugins/songs/lib/foilpresenterimport.py | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index e3b44237f..36fdf0181 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -741,13 +741,12 @@ class SongImportForm(OpenLPWizard): filenames=self.getListOfFiles(self.foilPresenterFileListWidget) ) test = importer.do_import() - importer.write_error_report() if isinstance(test, bool): raise received_boolean if importer.stop_import_flag: self.progressLabel.setText(translate('SongsPlugin.SongImportForm', 'Song import has been cancelled.')) - elif importer.import_error_log: + elif importer.error_log: error_path = importer.write_error_report() self.progressLabel.setTextInteractionFlags( QtCore.Qt.TextSelectableByMouse) diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index dcbc4367d..6f4164d17 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -237,6 +237,7 @@ class FoilPresenter(object): self._process_topics(foilpresenterfolie, song) clean_song(self.manager, song) self.manager.save_object(song) + return song.id def _child(self, element): """ From 757933c448480daa964e6944c42f996ee768adfc Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 18 Apr 2011 20:03:41 +0200 Subject: [PATCH 110/148] clean ups --- openlp/plugins/songs/forms/songimportform.py | 4 +--- openlp/plugins/songs/lib/ewimport.py | 14 +++++++------- openlp/plugins/songs/lib/olp1import.py | 10 ++++------ openlp/plugins/songs/lib/olpimport.py | 4 ++-- openlp/plugins/songs/lib/opensongimport.py | 4 ++-- openlp/plugins/songs/lib/songbeamerimport.py | 16 ++++++---------- openlp/plugins/songs/lib/songshowplusimport.py | 1 - openlp/plugins/songs/lib/wowimport.py | 2 +- 8 files changed, 23 insertions(+), 32 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 36fdf0181..73fa7c79d 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -740,9 +740,7 @@ class SongImportForm(OpenLPWizard): importer = self.plugin.importSongs(SongFormat.FoilPresenter, filenames=self.getListOfFiles(self.foilPresenterFileListWidget) ) - test = importer.do_import() - if isinstance(test, bool): - raise received_boolean + importer.do_import() if importer.stop_import_flag: self.progressLabel.setText(translate('SongsPlugin.SongImportForm', 'Song import has been cancelled.')) diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index 85a0b88c2..784558c5b 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -143,12 +143,12 @@ class EasyWorshipSongImport(SongImport): # Open the DB and MB files if they exist import_source_mb = self.import_source.replace('.DB', '.MB') if not os.path.isfile(self.import_source): - return False + return if not os.path.isfile(import_source_mb): - return False + return db_size = os.path.getsize(self.import_source) if db_size < 0x800: - return False + return db_file = open(self.import_source, 'rb') self.memo_file = open(import_source_mb, 'rb') # Don't accept files that are clearly not paradox files @@ -157,7 +157,7 @@ class EasyWorshipSongImport(SongImport): if header_size != 0x800 or block_size < 1 or block_size > 4: db_file.close() self.memo_file.close() - return False + return # Take a stab at how text is encoded self.encoding = u'cp1252' db_file.seek(106) @@ -184,7 +184,7 @@ class EasyWorshipSongImport(SongImport): self.encoding = u'cp874' self.encoding = retrieve_windows_encoding(self.encoding) if not self.encoding: - return False + return # There does not appear to be a _reliable_ way of getting the number # of songs/records, so let's use file blocks for measuring progress. total_blocks = (db_size - header_size) / (block_size * 1024) @@ -242,7 +242,7 @@ class EasyWorshipSongImport(SongImport): if copy: self.copyright += u', ' self.copyright += \ - unicode(translate('SongsPlugin.ImportWizardForm', + unicode(translate('SongsPlugin.EasyWorshipSongImport', 'Administered by %s')) % admin if ccli: self.ccli_number = ccli @@ -269,7 +269,7 @@ class EasyWorshipSongImport(SongImport): self.memo_file.close() def find_field(self, field_name): - return [i for i, x in enumerate(self.field_descs) \ + return [i for i, x in enumerate(self.field_descs) if x.name == field_name][0] def set_record_struct(self, field_descs): diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 26fdf19a9..b282a8dd7 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -64,16 +64,14 @@ class OpenLP1SongImport(SongImport): """ if not self.import_source.endswith(u'.olp'): self.log_error(self.import_source, - translate('SongsPlugin.OpenLP1SongImport', 'The file you ' - 'were trying to import is not a valid openlp.org 1.x song ' - 'database.')) + translate('SongsPlugin.OpenLP1SongImport', + 'Not a valid openlp.org 1.x song database.')) return encoding = self.get_encoding() if not encoding: self.log_error(self.import_source, - translate('SongsPlugin.OpenLP1SongImport', 'The file you ' - 'were trying to import is not a valid openlp.org 1.x song ' - 'database.')) + translate('SongsPlugin.OpenLP1SongImport', + 'Not a valid openlp.org 1.x song database.')) return # Connect to the database connection = sqlite.connect(self.import_source, mode=0444, diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index c69e5ded0..bbfabce3e 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -102,8 +102,8 @@ class OpenLPSongImport(SongImport): """ if not self.import_source.endswith(u'.sqlite'): self.log_error(self.import_source, - translate('SongsPlugin.OpenLPSongImport', 'The file you were ' - 'trying to import is not a valid OpenLP 2.0 song database.')) + translate('SongsPlugin.OpenLPSongImport', + 'Not a valid OpenLP 2.0 song database.')) return engine = create_engine(self.import_source) source_meta = MetaData() diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 7cff1522f..acf672ca0 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -255,7 +255,7 @@ class OpenSongImport(SongImport): lines = u'\n'.join(verses[verse_tag][verse_num][inst]) self.add_verse(lines, verse_def) # figure out the presentation order, if present - if u'presentation' in fields and root.presentation != u'': + if u'presentation' in fields and root.presentation: order = unicode(root.presentation) # We make all the tags in the lyrics lower case, so match that here # and then split into a list on the whitespace @@ -266,7 +266,7 @@ class OpenSongImport(SongImport): verse_tag = match.group(1) verse_num = match.group(2) if not len(verse_tag): - verse_tag = u'v' + verse_tag = VerseType.Tags[VerseType.Verse] else: # Assume it's no.1 if there are no digits verse_tag = verse_def diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index 2813240a4..5a8ee9ca8 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -73,11 +73,6 @@ class SongBeamerImport(SongImport): Initialise the Song Beamer importer. """ SongImport.__init__(self, manager, **kwargs) - self.log_error(u'/home/andreas/1.sng', u'aaaa') - self.log_error(u'/home/andreas/4.sng', u'asdfsdfsadfds') - self.log_error(u'/home/andreas/3.sng', u'asdf3q4') - self.log_error(u'/home/andreas/2.sng', u'sadfasdf') - self.log_error(u'/home/andreas/ä.sng', u'kqwjw32w3') def do_import(self): """ @@ -238,11 +233,12 @@ class SongBeamerImport(SongImport): pass elif tag_val[0] == u'#Rights': song_book_pub = tag_val[1] - elif tag_val[0] == u'#Songbook': - book_num = tag_val[1].split(' / ') - self.song_book_name = book_num[0] - if len(book_num) == book_num[1]: - self.song_number = u'' + elif tag_val[0] == u'#Songbook' or tag_val[0] == u'#SongBook': + book_data = tag_val[1].split(u'/') + self.song_book_name = book_data[0].strip() + if len(book_data) == 2: + number = book_data[1].strip() + self.song_number = number if number.isdigit() else u'' elif tag_val[0] == u'#Speed': pass elif tag_val[0] == u'Tempo': diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index 27620d11a..9fdc5804a 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -101,7 +101,6 @@ class SongShowPlusImport(SongImport): return self.import_wizard.progressBar.setMaximum(len(self.import_source)) for file in self.import_source: - author = u'' self.sspVerseOrderList = [] otherCount = 0 otherList = {} diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index 661e6787d..f5293a53c 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -134,7 +134,7 @@ class WowImport(SongImport): songData.seek(3, os.SEEK_CUR) # Blocks are seperated by 2 bytes, skip them, but not if # this is the last block! - if (block + 1) < no_of_blocks: + if block + 1 < no_of_blocks: songData.seek(2, os.SEEK_CUR) self.add_verse(block_text, block_type) # Now to extract the author From 6baefdadced3cc201e38cfeb6f6007e69080b5b2 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 18 Apr 2011 20:57:58 +0200 Subject: [PATCH 111/148] more fixes --- openlp/plugins/songs/forms/songimportform.py | 5 +---- openlp/plugins/songs/lib/olp1import.py | 18 +++--------------- openlp/plugins/songs/lib/olpimport.py | 1 + openlp/plugins/songs/lib/oooimport.py | 2 +- 4 files changed, 6 insertions(+), 20 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 73fa7c79d..3d3421d8b 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -741,10 +741,7 @@ class SongImportForm(OpenLPWizard): filenames=self.getListOfFiles(self.foilPresenterFileListWidget) ) importer.do_import() - if importer.stop_import_flag: - self.progressLabel.setText(translate('SongsPlugin.SongImportForm', - 'Song import has been cancelled.')) - elif importer.error_log: + if importer.error_log: error_path = importer.write_error_report() self.progressLabel.setTextInteractionFlags( QtCore.Qt.TextSelectableByMouse) diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index b282a8dd7..7ba933a8f 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -33,7 +33,6 @@ from chardet.universaldetector import UniversalDetector import sqlite from openlp.core.lib import translate -from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import retrieve_windows_encoding from songimport import SongImport @@ -69,9 +68,6 @@ class OpenLP1SongImport(SongImport): return encoding = self.get_encoding() if not encoding: - self.log_error(self.import_source, - translate('SongsPlugin.OpenLP1SongImport', - 'Not a valid openlp.org 1.x song database.')) return # Connect to the database connection = sqlite.connect(self.import_source, mode=0444, @@ -81,11 +77,6 @@ class OpenLP1SongImport(SongImport): cursor.execute(u'SELECT name FROM sqlite_master ' u'WHERE type = \'table\' AND name = \'tracks\'') new_db = len(cursor.fetchall()) > 0 - # Count the number of records we need to import, for the progress bar - cursor.execute(u'-- types int') - cursor.execute(u'SELECT COUNT(songid) FROM songs') - count = cursor.fetchone()[0] - self.import_wizard.progressBar.setMaximum(count) # "cache" our list of authors cursor.execute(u'-- types int, unicode') cursor.execute(u'SELECT authorid, authorname FROM authors') @@ -100,20 +91,17 @@ class OpenLP1SongImport(SongImport): cursor.execute(u'SELECT songid, songtitle, lyrics || \'\' AS lyrics, ' u'copyrightinfo FROM songs') songs = cursor.fetchall() + self.import_wizard.progressBar.setMaximum(len(songs)) for song in songs: self.set_defaults() if self.stop_import_flag: break song_id = song[0] - title = song[1] + self.title = song[1] lyrics = song[2].replace(u'\r\n', u'\n') - copyright = song[3] - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % title) - self.title = title + self.add_copyright(song[3]) verses = lyrics.split(u'\n\n') [self.add_verse(verse.strip()) for verse in verses if verse.strip()] - self.add_copyright(copyright) cursor.execute(u'-- types int') cursor.execute(u'SELECT authorid FROM songauthors ' u'WHERE songid = %s' % song_id) diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index bbfabce3e..f17ac188b 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -36,6 +36,7 @@ from sqlalchemy.orm.exc import UnmappedClassError from openlp.core.lib import translate from openlp.core.lib.db import BaseModel +from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import clean_song from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile from songimport import SongImport diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 3abc17a7a..d43541bc7 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -57,7 +57,7 @@ class OooImport(SongImport): def do_import(self): self.start_ooo() - self.import_wizard.progressBar.setMaximum(self.import_source) + self.import_wizard.progressBar.setMaximum(len(self.import_source)) for filename in self.import_source: if self.stop_import_flag: break From 974a90a173f97454795f8b9176a0d4b8d4624f1c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 18 Apr 2011 21:24:06 +0200 Subject: [PATCH 112/148] no xml raises XMLSyntaxError, that is why this is not needed --- openlp/plugins/songs/lib/foilpresenterimport.py | 7 ++----- openlp/plugins/songs/lib/openlyricsimport.py | 4 +--- openlp/plugins/songs/lib/ui.py | 1 - 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index 6f4164d17..0c7152bfd 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -128,9 +128,7 @@ class FoilPresenterImport(SongImport): try: parsed_file = etree.parse(file_path, parser) xml = unicode(etree.tostring(parsed_file)) - if self.FoilPresenter.xml_to_song(xml) is None: - self.log_error(file_path, SongStrings.NoXML) - log.debug(u'File could not be imported: %s' % file_path) + self.FoilPresenter.xml_to_song(xml) except etree.XMLSyntaxError: self.log_error(file_path, SongStrings.XMLSyntaxError) log.exception(u'XML syntax error in file %s' % file_path) @@ -213,7 +211,7 @@ class FoilPresenter(object): """ # No xml get out of here. if not xml: - return None + return if xml[:5] == u' Date: Tue, 19 Apr 2011 13:34:04 +0200 Subject: [PATCH 113/148] fixed OpenSong import --- openlp/plugins/songs/lib/opensongimport.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index acf672ca0..fa20dfcac 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -164,7 +164,9 @@ class OpenSongImport(SongImport): try: tree = objectify.parse(file) except (Error, LxmlError): + self.log_error(file.name, SongStrings.XMLSyntaxError) log.exception(u'Error parsing XML') + return root = tree.getroot() fields = dir(root) decode = { From d45f93b5941f4bb4970d99d2ee1ef17a5263e9c4 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 19 Apr 2011 13:46:25 +0200 Subject: [PATCH 114/148] return where possible instead of breaking --- openlp/plugins/songs/lib/opensongimport.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index fa20dfcac..54b96043d 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -128,14 +128,15 @@ class OpenSongImport(SongImport): self.import_wizard.progressBar.setMaximum(numfiles) for filename in self.import_source: if self.stop_import_flag: - break + return ext = os.path.splitext(filename)[1] if ext.lower() == u'.zip': log.debug(u'Zipfile found %s', filename) z = ZipFile(filename, u'r') for song in z.infolist(): if self.stop_import_flag: - break + z.close() + return parts = os.path.split(song.filename) if parts[-1] == u'': # No final part => directory From 48d0d39a17d80911460ba579f53ed21073b400bf Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 19 Apr 2011 17:55:36 +0200 Subject: [PATCH 115/148] ask before creating an error report copy not imported files to a folder --- openlp/plugins/songs/forms/songimportform.py | 13 ++++++++++--- openlp/plugins/songs/lib/olpimport.py | 2 +- openlp/plugins/songs/lib/songimport.py | 12 ++++++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 3d3421d8b..05de6c8a1 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -742,12 +742,19 @@ class SongImportForm(OpenLPWizard): ) importer.do_import() if importer.error_log: - error_path = importer.write_error_report() self.progressLabel.setTextInteractionFlags( QtCore.Qt.TextSelectableByMouse) + self.progressLabel.setText(translate( + 'SongsPlugin.SongImportForm', 'Your song import failed.')) + if critical_error_message_box(translate('SongsPlugin.SongImportForm', + 'Song import failed.'), translate('SongsPlugin.SongImportForm', + 'Your song import failed. Do you want to create an error ' + 'report?'), self, True) == QtGui.QMessageBox.No: + return + error_path = importer.write_error_report() self.progressLabel.setText(unicode(translate( - 'SongsPlugin.SongImportForm', 'Your song import failed. See ' - 'the error report for more details:\n%s')) % error_path) + 'SongsPlugin.SongImportForm', 'Your song import failed. ' + 'For more details see the error report:\n%s')) % error_path) else: self.progressLabel.setText(WizardStrings.FinishedImport) diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index f17ac188b..a201c1783 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -94,7 +94,6 @@ class OpenLPSongImport(SongImport): The database providing the data to import. """ SongImport.__init__(self, manager, **kwargs) - self.import_source = u'sqlite:///%s' % self.import_source self.source_session = None def do_import(self): @@ -106,6 +105,7 @@ class OpenLPSongImport(SongImport): translate('SongsPlugin.OpenLPSongImport', 'Not a valid OpenLP 2.0 song database.')) return + self.import_source = u'sqlite:///%s' % self.import_source engine = create_engine(self.import_source) source_meta = MetaData() source_meta.reflect(engine) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 80eebde43..b8163fab6 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -28,10 +28,11 @@ import datetime import logging import os import re +import shutil from PyQt4 import QtCore -from openlp.core.lib import Receiver, translate +from openlp.core.lib import Receiver, translate, check_directory_exists from openlp.core.ui.wizard import WizardStrings from openlp.core.utils import AppLocation from openlp.plugins.songs.lib import clean_song, VerseType @@ -121,12 +122,19 @@ class SongImport(QtCore.QObject): """ report_path = os.path.join(AppLocation.get_data_path(), unicode(translate( 'SongsPlugin.SongImport','song_import_report (%s).txt')) % - datetime.datetime.now().strftime(u'%Y-%m-%dT%H:%M:%S')) + datetime.datetime.now().strftime(u'%Y-%m-%d %H:%M:%S')) report_file = codecs.open(report_path, u'w', u'utf-8') report_file.write(translate('SongsPlugin.SongImport', 'The following songs could not be imported:\n')) for filepath, reason in self.error_log: report_file.write(u'- %s (%s)\n' % (filepath, reason)) + if not os.path.isfile(filepath): + continue + check_directory_exists(report_path[:-4]) + new_song_path = \ + os.path.join(report_path[:-4], os.path.basename(filepath)) + if not os.path.exists(new_song_path): + shutil.copyfile(filepath, new_song_path) report_file.close() return report_path From 8cd3742c874f1acdc829a7a9991bfdae53cd250f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 20 Apr 2011 19:36:16 +0200 Subject: [PATCH 116/148] added textEdit and buttons for better feedback --- openlp/core/ui/wizard.py | 46 +++++++++++++++++++- openlp/plugins/songs/forms/songimportform.py | 39 ++++++++++++----- openlp/plugins/songs/lib/opensongimport.py | 5 --- openlp/plugins/songs/lib/songimport.py | 43 ++++++------------ 4 files changed, 86 insertions(+), 47 deletions(-) diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index bc21c1295..9d1147638 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -95,6 +95,10 @@ class OpenLPWizard(QtGui.QWizard): self.customSignals() QtCore.QObject.connect(self, QtCore.SIGNAL(u'currentIdChanged(int)'), self.onCurrentIdChanged) + QtCore.QObject.connect(self.errorCopyToButton, + QtCore.SIGNAL(u'clicked()'), self.onErrorCopyToButtonClicked) + QtCore.QObject.connect(self.errorSaveToButton, + QtCore.SIGNAL(u'clicked()'), self.onErrorSaveToButtonClicked) def setupUi(self, image): """ @@ -129,11 +133,36 @@ class OpenLPWizard(QtGui.QWizard): self.progressLayout.setObjectName(u'progressLayout') self.progressLabel = QtGui.QLabel(self.progressPage) self.progressLabel.setObjectName(u'progressLabel') + self.progressLabel.setWordWrap(True) self.progressLayout.addWidget(self.progressLabel) self.progressBar = QtGui.QProgressBar(self.progressPage) self.progressBar.setObjectName(u'progressBar') - self.progressLabel.setWordWrap(True) self.progressLayout.addWidget(self.progressBar) + # Add a QTextEdit and a copy to file and copy to clipboard button to be + # able to provide feedback to the user. Hidden by default. + self.errorReportTextEdit = QtGui.QTextEdit(self.progressPage) + self.errorReportTextEdit.setObjectName(u'progresserrorReportTextEdit') + self.errorReportTextEdit.setHidden(True) + self.errorReportTextEdit.setReadOnly(True) + self.progressLayout.addWidget(self.errorReportTextEdit) + self.errorButtonLayout = QtGui.QHBoxLayout() + self.errorButtonLayout.setObjectName(u'errorButtonLayout') + spacer = QtGui.QSpacerItem(40, 20, + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.errorButtonLayout.addItem(spacer) + self.errorCopyToButton = QtGui.QPushButton(self.progressPage) + self.errorCopyToButton.setObjectName(u'errorCopyToButton') + self.errorCopyToButton.setHidden(True) + self.errorCopyToButton.setIcon( + build_icon(u':/system/system_edit_copy.png')) + self.errorButtonLayout.addWidget(self.errorCopyToButton) + self.errorSaveToButton = QtGui.QPushButton(self.progressPage) + self.errorSaveToButton.setObjectName(u'errorSaveToButton') + self.errorSaveToButton.setHidden(True) + self.errorSaveToButton.setIcon( + build_icon(u':/general/general_save.png')) + self.errorButtonLayout.addWidget(self.errorSaveToButton) + self.progressLayout.addLayout(self.errorButtonLayout) self.addPage(self.progressPage) def exec_(self): @@ -161,6 +190,18 @@ class OpenLPWizard(QtGui.QWizard): self.performWizard() self.postWizard() + def onErrorCopyToButtonClicked(self): + """ + Called when the ``onErrorCopyToButtonClicked`` has been clicked. + """ + pass + + def onErrorSaveToButtonClicked(self): + """ + Called when the ``onErrorSaveToButtonClicked`` has been clicked. + """ + pass + def incrementProgressBar(self, status_text, increment=1): """ Update the wizard progress page. @@ -220,4 +261,5 @@ class OpenLPWizard(QtGui.QWizard): if filename: editbox.setText(filename) SettingsManager.set_last_dir(self.plugin.settingsSection, - filename, 1) \ No newline at end of file + filename, 1) + diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 05de6c8a1..8c5dbeb8a 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -26,6 +26,7 @@ """ The song import functions for OpenLP. """ +import codecs import logging import os @@ -55,6 +56,7 @@ class SongImportForm(OpenLPWizard): ``plugin`` The songs plugin. """ + self.clipboard = plugin.formparent.clipboard OpenLPWizard.__init__(self, parent, plugin, u'songImportWizard', u':/wizards/wizard_importsong.bmp') @@ -330,6 +332,10 @@ class SongImportForm(OpenLPWizard): 'Please wait while your songs are imported.')) self.progressLabel.setText(WizardStrings.Ready) self.progressBar.setFormat(WizardStrings.PercentSymbolFormat) + self.errorCopyToButton.setText(translate('SongsPlugin.ImportWizardForm', + 'Copy')) + self.errorSaveToButton.setText(translate('SongsPlugin.ImportWizardForm', + 'Save to File')) # Align all QFormLayouts towards each other. width = max(self.formatLabel.minimumSizeHint().width(), self.openLP2FilenameLabel.minimumSizeHint().width()) @@ -656,6 +662,10 @@ class SongImportForm(OpenLPWizard): self.songShowPlusFileListWidget.clear() self.foilPresenterFileListWidget.clear() #self.csvFilenameEdit.setText(u'') + self.errorReportTextEdit.clear() + self.errorReportTextEdit.setHidden(True) + self.errorCopyToButton.setHidden(True) + self.errorSaveToButton.setHidden(True) def preWizard(self): """ @@ -742,22 +752,29 @@ class SongImportForm(OpenLPWizard): ) importer.do_import() if importer.error_log: - self.progressLabel.setTextInteractionFlags( - QtCore.Qt.TextSelectableByMouse) self.progressLabel.setText(translate( 'SongsPlugin.SongImportForm', 'Your song import failed.')) - if critical_error_message_box(translate('SongsPlugin.SongImportForm', - 'Song import failed.'), translate('SongsPlugin.SongImportForm', - 'Your song import failed. Do you want to create an error ' - 'report?'), self, True) == QtGui.QMessageBox.No: - return - error_path = importer.write_error_report() - self.progressLabel.setText(unicode(translate( - 'SongsPlugin.SongImportForm', 'Your song import failed. ' - 'For more details see the error report:\n%s')) % error_path) else: self.progressLabel.setText(WizardStrings.FinishedImport) + def onErrorCopyToButtonClicked(self): + """ + Copy the error report to the clipboard. + """ + self.clipboard.setText(self.errorReportTextEdit.toPlainText()) + + def onErrorSaveToButtonClicked(self): + """ + Save the error report to a file. + """ + filename = QtGui.QFileDialog.getSaveFileName(self, + SettingsManager.get_last_dir(self.plugin.settingsSection, 1)) + if not filename: + return + file = codecs.open(filename, u'w', u'utf-8') + file.write(self.errorReportTextEdit.toPlainText()) + file.close() + def addFileSelectItem(self, prefix, obj_prefix=None, can_disable=False, single_select=False): if not obj_prefix: diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 54b96043d..ab8f8c9fa 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -32,7 +32,6 @@ from zipfile import ZipFile from lxml import objectify from lxml.etree import Error, LxmlError -from openlp.core.ui.wizard import WizardStrings from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport from openlp.plugins.songs.lib.ui import SongStrings @@ -142,8 +141,6 @@ class OpenSongImport(SongImport): # No final part => directory continue log.info(u'Zip importing %s', parts[-1]) - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % parts[-1]) song_file = z.open(song) self.do_import_file(song_file) song_file.close() @@ -151,8 +148,6 @@ class OpenSongImport(SongImport): else: # not a zipfile log.info(u'Direct import %s', filename) - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % os.path.split(filename)[-1]) song_file = open(filename) self.do_import_file(song_file) song_file.close() diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index b8163fab6..3c7ab8885 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -23,12 +23,8 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -import codecs -import datetime import logging -import os import re -import shutil from PyQt4 import QtCore @@ -114,29 +110,17 @@ class SongImport(QtCore.QObject): The reason, why the import failed. The string should be as informative as possible. """ - self.error_log.append((filepath, unicode(reason))) - - def write_error_report(self): - """ - Creates a error import containing all error messages. - """ - report_path = os.path.join(AppLocation.get_data_path(), unicode(translate( - 'SongsPlugin.SongImport','song_import_report (%s).txt')) % - datetime.datetime.now().strftime(u'%Y-%m-%d %H:%M:%S')) - report_file = codecs.open(report_path, u'w', u'utf-8') - report_file.write(translate('SongsPlugin.SongImport', - 'The following songs could not be imported:\n')) - for filepath, reason in self.error_log: - report_file.write(u'- %s (%s)\n' % (filepath, reason)) - if not os.path.isfile(filepath): - continue - check_directory_exists(report_path[:-4]) - new_song_path = \ - os.path.join(report_path[:-4], os.path.basename(filepath)) - if not os.path.exists(new_song_path): - shutil.copyfile(filepath, new_song_path) - report_file.close() - return report_path + if self.import_wizard is None: + return + if self.import_wizard.errorReportTextEdit.isHidden(): + self.import_wizard.errorReportTextEdit.setText( + translate('SongsPlugin.SongImport', + 'The following songs could not be imported:')) + self.import_wizard.errorReportTextEdit.setVisible(True) + self.import_wizard.errorCopyToButton.setVisible(True) + self.import_wizard.errorSaveToButton.setVisible(True) + self.import_wizard.errorReportTextEdit.append( + u'- %s (%s)' % (filepath, reason)) def stop_import(self): """ @@ -299,8 +283,9 @@ class SongImport(QtCore.QObject): log.info(u'committing song %s to database', self.title) song = Song() song.title = self.title - self.import_wizard.incrementProgressBar( - WizardStrings.ImportingType % song.title) + if self.import_wizard is not None: + self.import_wizard.incrementProgressBar( + WizardStrings.ImportingType % song.title) song.alternate_title = self.alternate_title # Values will be set when cleaning the song. song.search_title = u'' From c402e5c0750fa1a317756fc415728f45a8cd3307 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Wed, 20 Apr 2011 19:01:25 +0100 Subject: [PATCH 117/148] non-debug version of dll --- .../lib/pptviewlib/pptviewlib.dll | Bin 80384 -> 44032 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll index 524b30ebb1f0c70089e3faa96c771c2e5d855358..14bcf4eb8059ab0c863e3d9427b4dce76adeee57 100644 GIT binary patch literal 44032 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 Avj6}9 From f3f18361504d32084e491a3f860a97515afb2835 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 21 Apr 2011 00:21:31 +0100 Subject: [PATCH 118/148] remove pptviewlib.dll and build it via windows-builder.py --- .../lib/pptviewlib/pptviewlib.dll | Bin 44032 -> 0 bytes scripts/windows-builder.py | 60 +++++++++++++++--- 2 files changed, 51 insertions(+), 9 deletions(-) delete mode 100644 openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll deleted file mode 100644 index 14bcf4eb8059ab0c863e3d9427b4dce76adeee57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44032 zcmeHwe|%Hr+4tQxg-{BOuGOklBZfUppd>j-n>0z&(pHL6O@D({N@-J)&^9$W!Lk9u z(ssl{kxhrX*T;_x-}&Ql(``=i$FS0Bbx(DOifr?7Y%klwsFO_x=y=Tgz3y|;rl8O3 z-XDLx=kU4CIrp#Yy6*3N-Pe8Hcgp9~+_Z~jFvc{XM1rw>c+yqI@Bj5Jj^epjJ~x*= zHS6`O_NA?O{i+6^KdkQ!1=oezy7ldCJv~8Dzt*b{MSAr99)0DF_4@8$hqrLfoGgRF zdRxU~54}8Z^mLNOZ)!e0hV=MNwWmk-1u9J*Cg+b^oXRP47!l{gd z%aW=od1Z{Xfd3a=g`&4lMB%BcaU=bxuaJ{^=^0y780u&f+ZY?a03~Ih3qcD&DOVXv z3gv37gN$Yki270jO1a7y8!q&C8k&|@HE;K#pcm8$a)MH>GR6)ThQgtChOv85?V_4P|2AXOSPd#l@-4lmkhoQYRQ<7tuQ z_RRiwm`*JB-CNFdiM*%Em@Yc1*++(UAe%*9RLaD;zDH7vn}k!ln&LOjVeDE|j((=w z^w-tNCgaN0Bw2}>Zyz;0458Vmx|i4u42xO5QJ#&g)gy9)Z4=qBustv}oiG~fH)xSk z#5XldF5-n|2dUY+Xg0LMpp8F*DJ`8GI3?yM70nq!?>xSvN;R#t!=MABR_T@1!gzf3 zrHpMGB{?JGjnYK)*qLn;o2E(ao02M3>FcFivXy=`OPjT^O@;-rO2Z=2=xO#%C>_X7 zioQ&$%9m;iq(+@bs>-dc^VIt^OR4YC(R^sz7ynet*uZe)8U^w!-vXsr6MZ$&y8345 zO5&mC)0d!Mf4F5tIJK`~1Jj+z7+TJvHYVm|uEcD(*7f#pm~PWwPGrYKgAQaEIJJ36 zQjMSbRuJ3dNS@33W`(u?6tVKrZD=RvtuDZ7Zvssl8DbaXEewvDeiLi9}v55Eq7HgA1tDpaFL& zFB^8cFppeGY_}0Pdw?-pI5Rf52#FI{NR7F%-Bcf=65CBpVuMsIwv);w*Em^d2k?T~ zZ1R!GdC=1p1`9e;JJg`$q4!Apde5ncyg(&J)H8B z$UyO#JzHV^FkZ}nnVv*mH992a(VPshI^XcscxEQ@oXFiv6=5sIimlA`iK&BHAAcW~ z4@T#X?&gbS!;vl*(X&9-*dPrCP3FW~=whyi)U6G$seeOv8}3DMU4SL>y3htf%M_ts zL5n_*@7@&2T41BAjj#E9>4}SE>CydMs?=a8fYs>HCO@{jfBzSpfpH&$Xx3@ zwZ3e^0e#ZFNcLghPtrD-rW!REbpAuTQI_$pr1>sQad^ElrBU`W2XCQd> z9*4%JW~>0ciUu0#al<(3_&?x240h%j8d`xq)W*6DhD6@mGzOzu*mK>`56NXU`ufon z_CAd6Dqbz`e$?{qqWpftIPz(NECQ&H^VS8JsFx)XneFl2t;p62!^hV`HrcaeeG+x+ zFjpD^9UiQ7D-3#a9cuy|bx64$K`9D-vSVqvFFIP_cr~KMm{&RuhzpY3vwZs|JGR1* z3l$D>6*LeQw zd<6TL(gR}185EGA$P+AfFJC6MlYJt{$giB5nsN++`8f(bT36pf)AIqus@q1%PDYZr z&Gnt79w(POVfch%Rof;iQE$qgC~{XCDfYz8$w(q;W=l^Q8c;=E7cpQu&(MA{r{)w> z5(|@JXE*yQm6k9DdGRI*Q1TN5*4su&_=vn#*2;$0V5pvEbscC=RztuWrkR|OlmZ4u$+ZvT;M;-Pvb8w@zKzDbw$8U}TCSm%XVB;m(hy)+j2@na z!BhN2rNNonta{QW%aZzK`R-OU(_o-z_X8w^aUKfB|B6kBf&&f7wh1lDr^bWAigU+9 z`UDgF@g&Rmqo^WTA3~on4_yJ)OtF-fOv^Z>!K=yYt#SxTVHEMkNCdeCBz6QobAl=+ z8B{j&)n3lbqi6@qc9QAOe2c0St2m$OrPG*Vw>ibMT4BmF&taO=-vXEH+y2FjU&mxHQUPI7O|3k*bUCQZyAO6<&!WT=g zn3A4^Ab-*6e=@PtkR(I_%6YQ5vZR93oKV`YvM2l z@n&>FQ=2SXaBXUt8y(WrCCeJ7m0dlJ=hkUuGlk*R7`zeKIo}o3HiJoM4lFjfm4zF(%6tE?G9~O|7(#?79QBX!giLMFlU?Wpn^)H zw3uRoCh4R&yUF)BG)cSzqmEIM!)r@5}TZGqno2tNHX`7_eiqJ7R8X|V_CK#DCNO5(5_8K|TAjMhm&>kp# zVm3gb1ceOJPAZXHYf!-Fd@hpk2lAGHD+mDNKg**>l z#5>YlSjYmD1k7@nELpQDC2xbu6NmAZ4wBy}cj;sv-kKBd)XVKD3`qhq4G$>CjWcOq zNp~QFs+cJZh|E+mpy-4yxfsH4r*O-sxvm#=%}u^dDILxpNaXDJ@0jEDGV{hjRv-&* zG2hc1+fPH7$a@e|86ly9%n=zGX(ypjE5#Fe9Gu;h1m@H5a1kEDshp=PExP_;@p2g& zcrTtK!-Led(a*9r{aP*z%t^c}7tk93BJPbc-&<~mi_LANBbO7{kVB`D@yYR&x(wL} zz2?j3Lyf*&)JeWBD~C<98|BGLdD7pLQ1Xc?yAHm2U&vjD#Jdwn!+vIRqM~!;IOM>_ z(-{8_mOgnCCU1+uR!A(|Nyia=UD9H*aynm8q+dF@C(Fg2Y`R(VeOdHO+LoEs=WWOo zYpzYaLpxb%H*K~S?j|A29G`C4gI?#-=8>jn+LlYCgfzCyWsESkd5*mEhu(M^Ve41SzYk5dOjBiJuOn6Awk_$eG>fPw{GEe1u0&OQ4e z5T@YZ4qeFwkxTmzi5K4CNh_&Mi_DD`hdhQK-Vvf=2F1Xik|XCMFPTI3A4 zAhjvLAkhPf!l`FzlW$KGbGN-je)igJpFD^YjZGgM{|YJ&oXXiT8_%R-I@7=kC*Dj9aDbaJZ}~~hPU@3E*KLF)2&@pP8xX;08|&*JPY>?2Q{uaxM{p93 zGejK6Dz1?~Xxw#DMpLtJstGMP?1wn)LtD~d&j9~I8T^cQ74#t_<-~`#v(v$c(gov`0(ZM`oS2kIb5;IJDN)*VZ-3 z8e;*TQgYiwE`~U1vi&@MY{Z_O;xVZzyBWa+HtIS=X1N?Vxd#ck2e5}J<5@OoJR@j3 z75DIC%NPuuJmbSCioPI6dpQI5A+>F@_97e%<_vUE5kHv7sL$zt71E>!s8a*K*|L0S zHysTO91`8qfg#^y4EVCRu)a>-=r$M@q;A{LYXjzz(Ib^-$9=?kG#`^sCsom@p4L9N z5(g!b`SL_(TM8t85V~~gz)C(7J$@K!3=HQCzJX_g`xSqJ4qN22pNuo$7t{QlPF0z28|68@`Ts%@8TBStYJBW65gZ-s^uPCA-$`d+PoEY@>3fY!7(7Qpk_R-wev0C zrukB%W@snrOY_fufjGA;`jW=M3%8s+F(W3sJMOYrVCW$3SxjBQ&HblU|MfE@Q*2 z=Sb?pH!}`k%2;xqI8q;956wB=aoZ7+##9GEg;W1;_(x0IdYI zbmB(GyO)Bl0L_CqOD8O`5`8f~mk$=ruxsZ6ymZDI4A-GfC5p=uc}96+dbV85VjQXj}U*5GN&=C=dG73-*%=EQ&v=V`X6vvd$9rz%p z{}CupF#~1d2b`RKI!A4UpaSIhUXXi?lhh7Mjv@&c=fgX?c)hf^4B$Xk7h}I<3gZLyvao8b3O(SB69O zlu%#faSm!==XuM`I3gQaExjziIOfm~SdsLPMvgy^XGPIS-cv4-)Ar}UHo70Hl{HY8S#D@-d92J zh?KyTsI3)-?N!;4x%N!m8m8OgOw6HYbaQr^H0LadnT7cho3jGUa|Ygq^bTnb8K|^T zBU!6aAy$>`dAstF(zK@i$i;PmBP78J#F42e>yR9tSXx($Q}>s2hvx= z7ji0GOU5rqDfo!~t_egT*Qft&$4IqBHL`_`w4 zde7qMi25h@E$6@N)LGJ%cPe@&U7Uk1^^wTqKSOrHN~0rLC%`LlcopCxkMS*DLPLhx z181F$0$psgHu|B)u{k?b8+9}BqeNbu`Z7~Io+wTnj#Xi=LK(4{iN-TB+r;67m6%Z3 zVX5W}cG~tDT_n?9r4^rw)#ze1*|93EbmqjviAZ)L?-*LIl9_OG;f5m&?|TH6;D4(KfpI7|ZFu3w4ka5C12EsH$TG%T^`p z&foE@=x1pW11v}1?5U4`19@2W>*E!u&skzfXHZV!Ab!GysEkMj@w*!3Xq0i4EJ&2) zqw@Tu{1f=Cbwbigvtl(zJ+<*SVXLcFjY!^j)O(E4(2rG}MbMv!*m zs-wFr8~4r~c{cu-vxq+~*YZcEhCk*r{#bk#^6$Sh(})ye(7gu!)a+e==TMb)uZ7YB zN6#h_W0}3EnuecL_fX+p15#s|`MA&0u;H=H0$!?wSFwR3XtGCxyx72dc*O>=42^uq z2&Bb-N$Akedp2bHc9jEyJSSeGE~>yHTGaVBs^cTxiM&3P!P{2i@!E*545k(T4i%3C za(ySslmb{h&zlv;a0CexrOCMqEmxgb7tqGLs2z<*(%NArvcY2}Va6OCsygZ!sygN& z{H^2+k?)BwL9BeI2aw%I6e#gwUu0I)4pM61m^ThA>CFey#jgQk zSnUByBOn z4)dtfBwh(eum!}Om%!*?n}Z-0n3@KI!@^vX*|b+b>#tfbQE!!aufSlxQ_Ya@yI_o7*1 z{#JhP=lAXWzJuTI=64P7Bh=)p32`IEj-4R7URl9dA>NPTc?vWS?-zk)DCK8w#PSXL z1?Wehi#&`C;^_m`f!OtoeHD35P#vfP=?2hJkP&n#=t9uI+Cfp&tng3i6Z z2_s78CI1Eyo{8NF%C80){EG0&It{^~zPqhwqaHOOTEFC4{gQh9JkpPD zll9PvW`9pd@V0PuFu1;|@AG(7guHE{*Aoi1d&6O+g3_Z&KFfPLgZi#uTZgw}k-jIW z4|zL7-ms54Jy{2O<8M$qgQ(k2Shv)kX*LL?p%rqXz0&=3hGZ^V1G*WqZ z(FJ{QJ*m&?+ctPHs?$1fZXPOk!m=hu^R{!_b@C3SR^s582#ZM8bQvkaWu2x>ZwkSr zzNuxrVaU7A9~MI!x$YGuEwCg0x5?K6*06p-pRMR?Ej9l3P%s?q6!kZDcKX}BE%L); zZXrX*->?=|t;E9pg))jPYk`m1Xe@@5b7g#4?&tT7>o1s7cz;QK@OQFpUDV+(;7Jpf zL>afjdSCFiLi9WA^LBN$P^zUp*o~Ro!M>ob>GSHA_x5)A+uKBcuqT|V zvr?A^f0FP2qV6;u8hdY=x1y^p9ImWj;r5W%+rv}rwzW7I3423= znPg%JWk<@el>F~sSa+U8h)dhvy86ocyzj*RFkpH4hR41xXf(I3qMs1RzDaDjB@pa^ z_iyWIsSLIQ#U3%-fe&#N=uq#Wlsu7Q733LG+FB5Y zY(?JZU22T>|1L%=)HHZQ-G11zx50-{qk~zcwOz!x-DU z*|dNJIr?<+vxra1J33(SVaEQNz5=nx3jf+rTWBL{RLCBw8h*6P%dW4gyP;}@U@q+F z>camgNv{cR@G6s+?IM|SLe@r!dzN=Fc6EB{JpWa??D?j}Pwa|xPcSUjK#R6@UPyj8 zeKN#C0b@^0rInDYoUKS#<{UiCeBS3ER?QH_0g76eQZ7nYqjgWm6!(q9?OIHKaGpbT zD!Tlb?{)A2>@rq?2$Vde9NNL!W!}8@*X5Sy$k|RcWSN{tmdq2*?}oN+bSE=oy?5i< zj#lpmNMVijRdq=e7b~Mu5$x`TUqLjy)Gv0oA<8K{uLK?8J?Vm)H?Adz1+T#>;dexD zGW`@uu3Qc#VfMOGM(r+S$XeQk7RxG^E5g?Szjd_{Z)jsvTUW$e)d$>fqP!d71+VvR zq>O7Q&6gl#u=2{La!;~3Tb3E_B?sQw8fKm8t$s1shPQvP*0y#EdD)AaHZkaD>^B-7 zHlgetP3Jl{paA?1+gVpf*Z6ekGrKYo;mQKcYWwc@$5{oQ;T3>R&#|%DTvz++U)HhYs*^S(Q z18J?^o_74FuGU@(B)lQ^t@PGz41KV@wLK)VV;Y3w;J7|nucNgm0>fXE*4p8n)=q=I z_xMGy=*Fy=d~fx#ytLM~?(n)+TDcjUjZ{Y<5*AxKJNz54OJl9A6}`PH+k0uYk_OkO zk!bM8{%D;y)JjnUc6F%Nj>V;?RovL?1^>=qYY*%yj90YkX~S&%V@7MF2db}UyHOhx zG}yz1Zb)zCxdj=mN=_L4>1+4)img}!F|9+ERtlAZJ?!V{%ZVS=_jXkE$#FS*E;W~% zX$YpG6tcxrUPzhoj6KS&UyeDFnWY-cdM=MRLpnk%rPC}=gW33n#c!rB5AzKp06~mG z>oRM|;AZRbhB|{GM0xFA9`OLdPV#9D{`U1egRvi`=ps8N@<@-RwymMr@I~ z8~m8IVe+B$#;(ci_I8K87{lpTazAXT<^QXW%|$WMBOaVXfbx<5q@J+{u|hw2Ijr+a z#5|x~S7GMjsl(s9mZ5y>JnZ$az<)PGy_0x)P+ozy%RwtaZJ=90w}WD!?|{As+6#ID z^fc&2&?tyBNoN^Mga7$AgUw`GHj8Dk*({sQVN>A>p8`C*J7?oP8G}*~o*Fn(dMdbN zlOZ5W29wDhZ(OrX;2R>5ERRetgM`l?ZqE^-nWU8>k4V z2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C z2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C z2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C z2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f3C2&f4Be~bXWc8@EK z<>L<8N-4UM`RRB!eoj6<4$r?ix$-DuO{jECZor)QYMZxvZP!M9Uw2ne*flQ_>M04g z`@G$4;l8q~VQMkHoZKFv4{WW# z_vX6vU37QNYYQ*$*$`as4b9U>{N?-$ZLWEpZCzpSyi(_qN#4^NPx4Qxah`PNl4-g+ zmrQnA#-PKC@5y!GV{6I2IFmVIxq|hSoFw|o(LhA^_4Lg%*Sy>OJ%V|jo<4i#nm75~ z+rp*_e9f(*u3?^jLlS#?p|Q|xGMdeWwt4zq`RmKUP$@R zUh!GG2B1QN*4b`bE3CD*nY<>OS6EB1oU4tZr*p~Y_h2fY_jRg$sR!SntE^mp!?Kn5 zrX7D#)Bk69&{t0ln75h6ON@HsSB=F+x3S6?Huf0@jdvO!Ha=~9(fEq-sPO~i<)%d@ zhsk5Q*(92FnC>z?V;VR8-t=eFNmGHj&}=bZXKpbE%)RCf=1t~rnzx&Gn(sD$&wRlA z3-dwq@68{YKQ(6vvxFQWPqg_ng7h10^-mcpj-*TYqT%sdd=;iuG64-&y};{n+}S){LTAMHduZRrIwYchR*)bw%rndW#+|db((T z(W^y&C^}j6pG6tP7ZqPtTv+TVt}MQ(xUcxW;yuMbF8*!tpNdZxSJ!(MH#wQsO*vhT2e+rG#CBl`>XKiL0lXC)Vu zTv}o%SzJrM=7oQsZ*$(|e8Tzf&Y7-U*HYJYu0~gdS1`$6{)+|RgQb{}%b-5;j0$fHr-Xk9i!DA& z5H@qSv(c-@se^xxlmT$YpX0esnZnQPpZnm}Ax@_OH?X?}Z4cZ^JKVg5) z{+|5<`_(0-C2b|alC34*EqS=)@sg)Yo-a92GG213~MV7 zald1a;~B?@<9CkZj*lFlIdYwsJFU(d=UV4FXSZ{^bI5t0^HEsF)6UnOZ#h49e&Wn> z&2yEw%3KYuh-=XGZP$ISQP;n_4!YiPz2`da`qXuCsiD+adS~eir5d->z0_UpzQNt# zzRBI@_PK-Z4erhEez)Yl%l+Tnd)-gC_ql)W9&x|!KJ5OT`vdpi+_d=P1DPz{IMX=C z_!Z;VjQHL;JcY;DWDFQ@H{N0VzHy)NWn;Q&rfGp`u_2?h&3BMuayoj=vU;3V#$Pgue-_3}4lSET3r?>?Yf$ YvmLd?Z4)-F-C$o}M}d0%Uqj%30 1 and (sys.argv[1] == u'-v' or sys.argv[1] == u'--verbose'): - print "Script path:", script_path - print "Branch path:", branch_path - print "Source path:", source_path - print "\"dist\" path:", dist_path - print "PyInstaller:", pyi_build - print "Inno Setup path:", innosetup_path - print "Windows resources:", winres_path - update_code() + for arg in sys.argv: + if arg == u'-v' or arg == u'--verbose': + print "Script path:", script_path + print "Branch path:", branch_path + print "Source path:", source_path + print "\"dist\" path:", dist_path + print "PyInstaller:", pyi_build + print "Inno Setup path:", innosetup_exe + print "Windows resources:", winres_path + print "VC++ path:", vcenv_bat + print "PPTVIEWLIB path:", pptviewlib_path + elif arg == u'--skip-update': + skip_update = True + elif arg == u'/?' or arg == u'-h' or arg == u'--help': + print u'Command options:' + print u' -v --verbose : More verbose output' + print u' --skip-update : Do not update or revert current branch' + exit() + if not skip_update: + update_code() + build_pptviewlib() run_pyinstaller() write_version_file() copy_enchant() From c0b0c1a82d390586dc6d2e9bc84b975c9f463976 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 21 Apr 2011 08:35:17 +0100 Subject: [PATCH 119/148] tabs to spaces *grr at VC++* --- .../lib/pptviewlib/pptviewlib.cpp | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp index 75242eec4..a679df582 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp @@ -91,11 +91,11 @@ DllExport BOOL CheckInstalled() DEBUG("CheckInstalled\n"); BOOL found = GetPPTViewerPath(cmdLine, sizeof(cmdLine)); - if(found) - { - DEBUG("Exe: %s\n", cmdLine); - } - return found; + if(found) + { + DEBUG("Exe: %s\n", cmdLine); + } + return found; } // Open the PointPoint, count the slides and take a snapshot of each slide @@ -196,7 +196,7 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, Sleep(10); if (!CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi)) { - DEBUG("OpenPPT: CreateProcess failed: %s\n", cmdLine); + DEBUG("OpenPPT: CreateProcess failed: %s\n", cmdLine); ClosePPT(id); return -1; } @@ -355,48 +355,48 @@ BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) char cwd[MAX_PATH]; DEBUG("GetPPTViewerPath: start\n"); - if(GetPPTViewerPathFromReg(pptViewerPath, stringSize)) - { - if(_access(pptViewerPath, 0) != -1) - { - DEBUG("GetPPTViewerPath: exit registry\n"); - return TRUE; - } - } - // This is where it gets ugly. PPT2007 it seems no longer stores its - // location in the registry. So we have to use the defaults which will - // upset those who like to put things somewhere else + if(GetPPTViewerPathFromReg(pptViewerPath, stringSize)) + { + if(_access(pptViewerPath, 0) != -1) + { + DEBUG("GetPPTViewerPath: exit registry\n"); + return TRUE; + } + } + // This is where it gets ugly. PPT2007 it seems no longer stores its + // location in the registry. So we have to use the defaults which will + // upset those who like to put things somewhere else - // Viewer 2007 in 64bit Windows: - if(_access("C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", - 0) != -1) - { - strcpy_s( - "C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", - stringSize, pptViewerPath); - DEBUG("GetPPTViewerPath: exit 64bit 2007\n"); - return TRUE; - } - // Viewer 2007 in 32bit Windows: - if(_access("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0) - != -1) - { - strcpy_s("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", - stringSize, pptViewerPath); - DEBUG("GetPPTViewerPath: exit 32bit 2007\n"); - return TRUE; - } - // Give them the opportunity to place it in the same folder as the app - _getcwd(cwd, MAX_PATH); - strcat_s(cwd, MAX_PATH, "\\PPTVIEW.EXE"); - if(_access(cwd, 0) != -1) - { - strcpy_s(pptViewerPath, stringSize, cwd); - DEBUG("GetPPTViewerPath: exit local\n"); - return TRUE; - } + // Viewer 2007 in 64bit Windows: + if(_access("C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + 0) != -1) + { + strcpy_s( + "C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 64bit 2007\n"); + return TRUE; + } + // Viewer 2007 in 32bit Windows: + if(_access("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0) + != -1) + { + strcpy_s("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 32bit 2007\n"); + return TRUE; + } + // Give them the opportunity to place it in the same folder as the app + _getcwd(cwd, MAX_PATH); + strcat_s(cwd, MAX_PATH, "\\PPTVIEW.EXE"); + if(_access(cwd, 0) != -1) + { + strcpy_s(pptViewerPath, stringSize, cwd); + DEBUG("GetPPTViewerPath: exit local\n"); + return TRUE; + } DEBUG("GetPPTViewerPath: exit fail\n"); - return FALSE; + return FALSE; } BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize) { @@ -404,11 +404,11 @@ BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize) DWORD dwType, dwSize; LRESULT lResult; - // The following registry settings are for, respectively, (I think) - // PPT Viewer 2007 (older versions. Latest not in registry) & PPT Viewer 2010 - // PPT Viewer 2003 (recent versions) - // PPT Viewer 2003 (older versions) - // PPT Viewer 97 + // The following registry settings are for, respectively, (I think) + // PPT Viewer 2007 (older versions. Latest not in registry) & PPT Viewer 2010 + // PPT Viewer 2003 (recent versions) + // PPT Viewer 2003 (older versions) + // PPT Viewer 97 if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, "PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) From 073e68e8d5aaf399275676e14da17dc0366f0b80 Mon Sep 17 00:00:00 2001 From: M2j Date: Thu, 21 Apr 2011 10:47:52 +0200 Subject: [PATCH 120/148] translation string fixes --- openlp/core/ui/printserviceorderform.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/printserviceorderform.py b/openlp/core/ui/printserviceorderform.py index 70128cb89..44cbac180 100644 --- a/openlp/core/ui/printserviceorderform.py +++ b/openlp/core/ui/printserviceorderform.py @@ -113,11 +113,11 @@ class PrintServiceOrderForm(QtGui.QDialog, Ui_PrintServiceOrderDialog): # Add play length of media files. if item.is_media() and self.printMetaDataCheckBox.isChecked(): text += u'

%s %s

' % (translate( - 'OpenLP.ServiceManager', u'Playing time:'), + 'OpenLP.ServiceManager', 'Playing time:'), unicode(datetime.timedelta(seconds=item.media_length))) if self.customNoteEdit.toPlainText(): text += u'

%s

%s' % (translate('OpenLP.ServiceManager', - u'Custom Service Notes:'), self.customNoteEdit.toPlainText()) + 'Custom Service Notes:'), self.customNoteEdit.toPlainText()) self.document.setHtml(text) self.previewWidget.updatePreview() From 8439d1ed4f8d729d77ff6f5a30b0f30f519512e5 Mon Sep 17 00:00:00 2001 From: M2j Date: Thu, 21 Apr 2011 10:53:48 +0200 Subject: [PATCH 121/148] fix verse order rebuild to handle single character verse references rename variable to avoid using the 'type' keyword --- openlp/plugins/songs/lib/__init__.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 4f95791b3..6c8e187a9 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -278,24 +278,29 @@ def clean_song(manager, song): # List for later comparison. compare_order = [] for verse in verses: - type = VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])] + verse_type = + VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])] sxml.add_verse_to_lyrics( - type, + verse_type, verse[0][u'label'], verse[1], verse[0][u'lang'] if verse[0].has_key(u'lang') else None ) - compare_order.append((u'%s%s' % (type, verse[0][u'label'])).upper()) + compare_order.append((u'%s%s' % (verse_type, verse[0][u'label']) + ).upper()) + if verse[0][u'label'] == u'1': + compare_order.append(verse_type.upper()) song.lyrics = unicode(sxml.extract_xml(), u'utf-8') # Rebuild the verse order, to convert translated verse tags, which might # have been added prior to 1.9.5. order = song.verse_order.strip().split() new_order = [] for verse_def in order: - new_order.append((u'%s%s' % ( - VerseType.Tags[VerseType.from_loose_input(verse_def[0])], - verse_def[1:])).upper() - ) + verse_type = VerseType.Tags[VerseType.from_loose_input(verse_def[0])] + if len(verse_def) > 1: + new_order.append((u'%s%s' % (verse_type, verse_def[1:])).upper()) + else: + new_order.append(verse_type.upper()) song.verse_order = u' '.join(new_order) # Check if the verse order contains tags for verses which do not exist. for order in new_order: From 2582b337683e2e661a7c955166a90540b2212b3e Mon Sep 17 00:00:00 2001 From: M2j Date: Thu, 21 Apr 2011 11:02:41 +0200 Subject: [PATCH 122/148] syntax fix --- openlp/plugins/songs/lib/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 6c8e187a9..249a76a38 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -278,8 +278,8 @@ def clean_song(manager, song): # List for later comparison. compare_order = [] for verse in verses: - verse_type = - VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])] + verse_type = VerseType.Tags[VerseType.from_loose_input( + verse[0][u'type'])] sxml.add_verse_to_lyrics( verse_type, verse[0][u'label'], From ba45d7e113fa9fa3a81e3644ae0b1bf81f0a37b0 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 21 Apr 2011 19:14:07 +0200 Subject: [PATCH 123/148] fixed names; hide/show menu entries when disabeling/enabeling the songs plugin --- openlp/plugins/songs/songsplugin.py | 35 ++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 0cace4977..85294dee2 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -65,10 +65,12 @@ class SongsPlugin(Plugin): def initialise(self): log.info(u'Songs Initialising') Plugin.initialise(self) + self.songImportItem.setVisible(True) + self.songExportItem.setVisible(True) self.toolsReindexItem.setVisible(True) action_list = ActionList.get_instance() - action_list.add_action(self.SongImportItem, UiStrings().Import) - action_list.add_action(self.SongExportItem, UiStrings().Export) + action_list.add_action(self.songImportItem, UiStrings().Import) + action_list.add_action(self.songExportItem, UiStrings().Export) action_list.add_action(self.toolsReindexItem, UiStrings().Tools) def addImportMenuItem(self, import_menu): @@ -81,13 +83,13 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongImportItem = base_action(import_menu, u'SongImportItem') - self.SongImportItem.setText(translate('SongsPlugin', '&Song')) - self.SongImportItem.setToolTip(translate('SongsPlugin', + self.songImportItem = base_action(import_menu, u'songImportItem') + self.songImportItem.setText(translate('SongsPlugin', '&Song')) + self.songImportItem.setToolTip(translate('SongsPlugin', 'Import songs using the import wizard.')) - import_menu.addAction(self.SongImportItem) + import_menu.addAction(self.songImportItem) # Signals and slots - QtCore.QObject.connect(self.SongImportItem, + QtCore.QObject.connect(self.songImportItem, QtCore.SIGNAL(u'triggered()'), self.onSongImportItemClicked) def addExportMenuItem(self, export_menu): @@ -100,13 +102,13 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongExportItem = base_action(export_menu, u'SongExportItem') - self.SongExportItem.setText(translate('SongsPlugin', '&Song')) - self.SongExportItem.setToolTip(translate('SongsPlugin', + self.songExportItem = base_action(export_menu, u'songExportItem') + self.songExportItem.setText(translate('SongsPlugin', '&Song')) + self.songExportItem.setToolTip(translate('SongsPlugin', 'Exports songs using the export wizard.')) - export_menu.addAction(self.SongExportItem) + export_menu.addAction(self.songExportItem) # Signals and slots - QtCore.QObject.connect(self.SongExportItem, + QtCore.QObject.connect(self.songExportItem, QtCore.SIGNAL(u'triggered()'), self.onSongExportItemClicked) def addToolsMenuItem(self, tools_menu): @@ -256,9 +258,12 @@ class SongsPlugin(Plugin): """ log.info(u'Songs Finalising') self.manager.finalise() + self.songImportItem.setVisible(False) + self.songExportItem.setVisible(False) self.toolsReindexItem.setVisible(False) action_list = ActionList.get_instance() - action_list.remove_action(self.SongImportItem, UiStrings().Import) - action_list.remove_action(self.SongExportItem, UiStrings().Export) + action_list.remove_action(self.songImportItem, UiStrings().Import) + action_list.remove_action(self.songExportItem, UiStrings().Export) action_list.remove_action(self.toolsReindexItem, UiStrings().Tools) - Plugin.finalise(self) \ No newline at end of file + Plugin.finalise(self) + From 65925efd253bc07f1631fd89144a96aab5391b98 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 22 Apr 2011 08:30:07 +0200 Subject: [PATCH 124/148] fixed logo pixelation --- openlp/core/ui/maindisplay.py | 2 -- openlp/core/ui/mainwindow.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 3931139d1..d5960f966 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -69,8 +69,6 @@ class MainDisplay(DisplayWidget): self.hideMode = None self.videoHide = False self.override = {} - mainIcon = build_icon(u':/icon/openlp-logo-16x16.png') - self.setWindowIcon(mainIcon) self.retranslateUi() self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;') self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 32a28d474..cb01e37a1 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -71,7 +71,7 @@ class Ui_MainWindow(object): mainWindow.setObjectName(u'MainWindow') mainWindow.resize(self.settingsmanager.width, self.settingsmanager.height) - mainWindow.setWindowIcon(build_icon(u':/icon/openlp-logo-16x16.png')) + mainWindow.setWindowIcon(build_icon(u':/icon/openlp-logo-64x64.png')) mainWindow.setDockNestingEnabled(True) # Set up the main container, which contains all the other form widgets. self.MainContent = QtGui.QWidget(mainWindow) From c66ffbd725c160018abb1bab5cc65de7e8061390 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 22 Apr 2011 09:06:38 +0200 Subject: [PATCH 125/148] removed import --- openlp/core/ui/maindisplay.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index d5960f966..c413ec8c9 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -34,7 +34,7 @@ from PyQt4 import QtCore, QtGui, QtWebKit from PyQt4.phonon import Phonon from openlp.core.lib import Receiver, build_html, ServiceItem, image_to_byte, \ - build_icon, translate + translate from openlp.core.ui import HideMode From 9a7aef29c396e13d52a5c2819094aaf3d85c0aa3 Mon Sep 17 00:00:00 2001 From: Wesley Stout Date: Fri, 22 Apr 2011 16:00:51 -0500 Subject: [PATCH 126/148] more corrections --- documentation/manual/source/dualmonitors.rst | 10 +++++----- documentation/manual/source/troubleshooting.rst | 16 ++++++++++------ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index 0566395e8..bf5db7208 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -37,11 +37,11 @@ equivalent. **Special Note For Projectors Using USB Connections** Users have reported experiencing difficulties when using a projector with a USB -connection. It seems that third party software many times is required to -properly setup dual monitors. If possible, it is best to use a direct output -(VGA, DVI, HDMI, S-Video) from your machine's video card. f a USB connection is -your only option please consult the manufacturer's manual for instructions on a -proper setup. +connection. It seems that third party software often is required to properly +setup dual monitors. If possible, it is best to use a direct output(VGA, DVI, +HDMI, S-Video) from your machine's video card. If a USB connection is your only +option please consult the manufacturer's manual for instructions on proper +setup. Microsoft Windows ----------------- diff --git a/documentation/manual/source/troubleshooting.rst b/documentation/manual/source/troubleshooting.rst index 1bd374e18..6f5f21a74 100644 --- a/documentation/manual/source/troubleshooting.rst +++ b/documentation/manual/source/troubleshooting.rst @@ -175,13 +175,17 @@ only download the section you search for. If you do not have an internet connection where you intend to use OpenLP you will need another scripture source. For more information about acquiring Bibles please see :ref:`bibleimporter`. -I am using high amounts of RAM when showing PowerPoint or Impress slides ------------------------------------------------------------------------- +OpenLP is using a large amount of RAM when showing a presentation +----------------------------------------------------------------- -The reason OpenLP uses greater amounts of RAM is because it does not load the -presentation by itself. OpenLP uses PowerPoint or Impress to load the -presentation. Then OpenLP displays images of each slide. This results in the -higher than expected RAM usage. +OpenLP uses a large amount of RAM when showing a presentation due to the way it +handles presentations. OpenLP itself is unable to show those presentations or +load the presentation files, so it interacts with the presentation through +either Microsoft PowerPoint or LibreOffice Impress. In order to show the slides +in the slide controller, OpenLP requests that the presentation application +export the slides to images, and then uses those images as slides. This results +in a large amount of RAM being used, especially in presentations with more than +about 20 slides. OpenLP is not displaying correctly, or is not on the correct screen ------------------------------------------------------------------- From a73012e3f6903d995ae1b82386b88704472aa040 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 22 Apr 2011 23:32:08 +0100 Subject: [PATCH 127/148] StevanP's changes, so vc variables don't need setting now --- scripts/windows-builder.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index 1046fb71e..c74da4e09 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -108,8 +108,8 @@ sphinx_exe = os.path.join(os.path.split(python_exe)[0], u'Scripts', u'sphinx-build.exe') hhc_exe = os.path.join(os.getenv(u'PROGRAMFILES'), 'HTML Help Workshop', u'hhc.exe') -vcenv_bat = os.path.join(os.getenv(u'PROGRAMFILES'), 'Microsoft Visual Studio 9.0', - u'VC', 'vcvarsall.bat') +vcbuild_exe = os.path.join(os.getenv(u'PROGRAMFILES'), + 'Microsoft Visual Studio 9.0', 'VC','vcpackages','vcbuild.exe') # Base paths script_path = os.path.split(os.path.abspath(__file__))[0] @@ -280,13 +280,8 @@ def run_innosetup(): def build_pptviewlib(): print u'Building PPTVIEWLIB.DLL...' - vcenv = Popen(vcenv_bat) - code = vcenv.wait() - if code != 0: - raise Exception(u'Error creating VC++ environment') - vcbuild = Popen((u'vcbuild', '/rebuild', - os.path.join(pptviewlib_path, u'pptviewlib.vcproj'), - u'Release|Win32')) + vcbuild = Popen((vcbuild_exe, '/rebuild', + os.path.join(pptviewlib_path, u'pptviewlib.vcproj'), u'Release|Win32')) code = vcbuild.wait() if code != 0: raise Exception(u'Error building pptviewlib.dll') @@ -305,7 +300,7 @@ def main(): print "PyInstaller:", pyi_build print "Inno Setup path:", innosetup_exe print "Windows resources:", winres_path - print "VC++ path:", vcenv_bat + print "VCBuild path:", vcbuild_exe print "PPTVIEWLIB path:", pptviewlib_path elif arg == u'--skip-update': skip_update = True From 9b1c9243195bc37c6d72f761215580dabebc7bb7 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 23 Apr 2011 11:06:47 +0100 Subject: [PATCH 128/148] u's and spaces --- scripts/windows-builder.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index c74da4e09..ef5528cd7 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -109,7 +109,7 @@ sphinx_exe = os.path.join(os.path.split(python_exe)[0], u'Scripts', hhc_exe = os.path.join(os.getenv(u'PROGRAMFILES'), 'HTML Help Workshop', u'hhc.exe') vcbuild_exe = os.path.join(os.getenv(u'PROGRAMFILES'), - 'Microsoft Visual Studio 9.0', 'VC','vcpackages','vcbuild.exe') + u'Microsoft Visual Studio 9.0', u'VC', u'vcpackages', u'vcbuild.exe') # Base paths script_path = os.path.split(os.path.abspath(__file__))[0] @@ -280,12 +280,12 @@ def run_innosetup(): def build_pptviewlib(): print u'Building PPTVIEWLIB.DLL...' - vcbuild = Popen((vcbuild_exe, '/rebuild', + vcbuild = Popen((vcbuild_exe, u'/rebuild', os.path.join(pptviewlib_path, u'pptviewlib.vcproj'), u'Release|Win32')) code = vcbuild.wait() if code != 0: raise Exception(u'Error building pptviewlib.dll') - copy(os.path.join(pptviewlib_path, u'Release', 'pptviewlib.dll'), + copy(os.path.join(pptviewlib_path, u'Release', u'pptviewlib.dll'), pptviewlib_path) def main(): From d534440d2a941e84bd56b8a74f0637c70fee2723 Mon Sep 17 00:00:00 2001 From: Wesley Stout Date: Sat, 23 Apr 2011 22:03:12 -0500 Subject: [PATCH 129/148] corrections --- documentation/manual/source/dualmonitors.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index bf5db7208..0299f2467 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -37,11 +37,10 @@ equivalent. **Special Note For Projectors Using USB Connections** Users have reported experiencing difficulties when using a projector with a USB -connection. It seems that third party software often is required to properly -setup dual monitors. If possible, it is best to use a direct output(VGA, DVI, -HDMI, S-Video) from your machine's video card. If a USB connection is your only -option please consult the manufacturer's manual for instructions on proper -setup. +connection, as third party software is often required to properly configure +dual monitors. If possible, it is best to use a direct output (VGA, DVI, HDMI, +S-Video) from your machine's video card. f a USB connection is your only option +please consult the manufacturer's manual for instructions on a proper setup. Microsoft Windows ----------------- From f7e81ad70a0800d8c6d76867e74f10d6b329c307 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 24 Apr 2011 16:44:40 +0200 Subject: [PATCH 130/148] fixe possible bug when using the clear buttons --- openlp/core/ui/shortcutlistform.py | 105 +++++++++++++++++++---------- 1 file changed, 68 insertions(+), 37 deletions(-) diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 26bfddadd..3136c9b1f 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -29,6 +29,7 @@ import re from PyQt4 import QtCore, QtGui +from openlp.core.lib import Receiver from openlp.core.utils import translate from openlp.core.utils.actions import ActionList from shortcutlistdialog import Ui_ShortcutListDialog @@ -95,43 +96,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): QtCore.Qt.ShiftModifier: key_string = u'Shift+' + key_string key_sequence = QtGui.QKeySequence(key_string) - # The action we are attempting to change. - changing_action = self._currentItemAction() - shortcut_valid = True - for category in self.action_list.categories: - for action in category.actions: - shortcuts = self._actionShortcuts(action) - if key_sequence not in shortcuts: - continue - if action is changing_action: - if self.primaryPushButton.isChecked() and \ - shortcuts.index(key_sequence) == 0: - continue - if self.alternatePushButton.isChecked() and \ - shortcuts.index(key_sequence) == 1: - continue - # Have the same parent, thus they cannot have the same shortcut. - if action.parent() is changing_action.parent(): - shortcut_valid = False - # The new shortcut is already assigned, but if both shortcuts - # are only valid in a different widget the new shortcut is - # vaild, because they will not interfere. - if action.shortcutContext() in [QtCore.Qt.WindowShortcut, - QtCore.Qt.ApplicationShortcut]: - shortcut_valid = False - if changing_action.shortcutContext() in \ - [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]: - shortcut_valid = False - if not shortcut_valid: - QtGui.QMessageBox.warning(self, - translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'), - unicode(translate('OpenLP.ShortcutListDialog', 'The shortcut ' - '"%s" is already assigned to another action, please ' - 'use a different shortcut.')) % key_sequence.toString(), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok), - QtGui.QMessageBox.Ok - ) - else: + if self._validiate_shortcut(self._currentItemAction(), key_sequence): if self.primaryPushButton.isChecked(): self._adjustButton(self.primaryPushButton, False, text=key_sequence.toString()) @@ -227,6 +192,12 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): new_shortcuts.append( QtGui.QKeySequence(self.alternatePushButton.text())) self.changedActions[action] = new_shortcuts + if not self.primaryPushButton.text(): + # When we do not have a primary shortcut, the just entered alternate + # shortcut will automatically become the primary shortcut. That is + # why we have to adjust the primary button's text. + self.primaryPushButton.setText(self.alternatePushButton.text()) + self.alternatePushButton.setText(u'') self.refreshShortcutList() def onItemDoubleClicked(self, item, column): @@ -374,6 +345,16 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): new_shortcuts = [] if len(action.defaultShortcuts) != 0: new_shortcuts.append(action.defaultShortcuts[0]) + # We have to check if the primary default shortcut is available. But + # we only have to check, if the action has a default primary + # shortcut (an "empty" shortcut is always valid and if the action + # does not have a default primary shortcut, then the alternative + # shortcut (not the default one) will become primary shortcut, thus + # the check will assume that an action were going to have the same + # shortcut twice. + if not self._validiate_shortcut(action, new_shortcuts[0]) and \ + new_shortcuts[0] != shortcuts[0]: + return if len(shortcuts) == 2: new_shortcuts.append(shortcuts[1]) self.changedActions[action] = new_shortcuts @@ -394,10 +375,60 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): new_shortcuts.append(shortcuts[0]) if len(action.defaultShortcuts) == 2: new_shortcuts.append(action.defaultShortcuts[1]) + if len(new_shortcuts) == 2: + if not self._validiate_shortcut(action, new_shortcuts[1]): + return self.changedActions[action] = new_shortcuts self.refreshShortcutList() self.onCurrentItemChanged(self.treeWidget.currentItem()) + def _validiate_shortcut(self, changing_action, key_sequence): + """ + Checks if the given ``changing_action `` can use the given + ``key_sequence``. Returns ``True`` if the ``key_sequence`` can be used + by the action, otherwise displays a dialog and returns ``False``. + + ``changing_action`` + The action which wants to use the ``key_sequence``. + + ``key_sequence`` + The key sequence which the action want so use. + """ + is_valid = True + for category in self.action_list.categories: + for action in category.actions: + shortcuts = self._actionShortcuts(action) + if key_sequence not in shortcuts: + continue + if action is changing_action: + if self.primaryPushButton.isChecked() and \ + shortcuts.index(key_sequence) == 0: + continue + if self.alternatePushButton.isChecked() and \ + shortcuts.index(key_sequence) == 1: + continue + # Have the same parent, thus they cannot have the same shortcut. + if action.parent() is changing_action.parent(): + is_valid = False + # The new shortcut is already assigned, but if both shortcuts + # are only valid in a different widget the new shortcut is + # vaild, because they will not interfere. + if action.shortcutContext() in [QtCore.Qt.WindowShortcut, + QtCore.Qt.ApplicationShortcut]: + is_valid = False + if changing_action.shortcutContext() in \ + [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]: + is_valid = False + if not is_valid: + Receiver.send_message(u'openlp_warning_message', { + u'title': translate('OpenLP.ShortcutListDialog', + 'Duplicate Shortcut'), + u'message': unicode(translate('OpenLP.ShortcutListDialog', + 'The shortcut "%s" is already assigned to another action, ' + 'please use a different shortcut.')) % key_sequence.toString() + }) + return is_valid + def _actionShortcuts(self, action): """ This returns the shortcuts for the given ``action``, which also includes From 393f25cd88b76e61086797a2c4db6e666a62c3e2 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 24 Apr 2011 17:36:12 +0200 Subject: [PATCH 131/148] fixed a bug where a song's author/topic/songbooks might not be saved --- openlp/plugins/songs/forms/songmaintenanceform.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 48e614eeb..c1437ce0e 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -386,7 +386,8 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): existing_author = self.manager.get_object_filtered(Author, and_(Author.first_name == old_author.first_name, Author.last_name == old_author.last_name, - Author.display_name == old_author.display_name)) + Author.display_name == old_author.display_name, + Author.id != old_author.id)) # Find the songs, which have the old_author as author. songs = self.manager.get_all_objects(Song, Song.authors.contains(old_author)) @@ -408,7 +409,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): """ # Find the duplicate. existing_topic = self.manager.get_object_filtered(Topic, - Topic.name == old_topic.name) + and_(Topic.name == old_topic.name, Topic.id != old_topic.id)) # Find the songs, which have the old_topic as topic. songs = self.manager.get_all_objects(Song, Song.topics.contains(old_topic)) @@ -431,7 +432,8 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): # Find the duplicate. existing_book = self.manager.get_object_filtered(Book, and_(Book.name == old_book.name, - Book.publisher == old_book.publisher)) + Book.publisher == old_book.publisher, + Book.id != old_book.id)) # Find the songs, which have the old_book as book. songs = self.manager.get_all_objects(Song, Song.song_book_id == old_book.id) @@ -503,4 +505,5 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): editButton.setEnabled(False) else: deleteButton.setEnabled(True) - editButton.setEnabled(True) \ No newline at end of file + editButton.setEnabled(True) + From ae874f09bfac685cf90936a9af1791bee4aa7dc2 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sun, 24 Apr 2011 20:50:28 +0100 Subject: [PATCH 132/148] Print Service cleanups --- openlp/core/ui/printserviceform.py | 192 +++++++++++++++-------------- 1 file changed, 100 insertions(+), 92 deletions(-) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 0de20d8a9..dce7f63bd 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -61,15 +61,23 @@ http://doc.trolltech.com/4.7/richtext-html-subset.html#css-properties color:black; } +.itemNotes { + color:black; +} + .itemNotesTitle { font-weight:bold; font-size:12px; - color:black; } .itemNotesText { font-size:11px; - color:black; +} + +.mediaTitle { + font-weight:bold; + font-size:11px; + color:black; } .customNotesTitle { @@ -82,6 +90,10 @@ http://doc.trolltech.com/4.7/richtext-html-subset.html#css-properties font-size:11px; color:black; } + +.newPage { + page-break-before:always; +} """ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): @@ -153,86 +165,90 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ Creates the html text and updates the html of *self.document*. """ - html_data = html.fromstring( - u'%s' % unicode(self.titleLineEdit.text())) + html_data = self._addElement(u'html') + self._addElement(u'head', parent=html_data) + self._addElement(u'title', unicode(self.titleLineEdit.text()), + html_data.head) css_path = os.path.join( - AppLocation.get_data_path(), u'servicePrint.css') - if not os.path.isfile(css_path): - # Create default css file. - css_file = open(css_path, u'w') - css_file.write(DEFAULT_CSS) - css_file.close() + AppLocation.get_data_path(), u'service_print.css') custom_css = get_text_file_string(css_path) - self._addChildToParent( - u'style', custom_css, html_data.head, u'type', u'text/css') - self._addChildToParent(u'body', parent=html_data) - self._addChildToParent(u'span', unicode(self.titleLineEdit.text()), - html_data.body, u'class', u'serviceTitle') + if not custom_css: + custom_css = DEFAULT_CSS + self._addElement(u'style', custom_css, html_data.head, + attribute=(u'type', u'text/css')) + self._addElement(u'body', parent=html_data) + self._addElement(u'h1', unicode(self.titleLineEdit.text()), + html_data.body, classId=u'serviceTitle') for index, item in enumerate(self.serviceManager.serviceItems): - item = item[u'service_item'] - div = self._addChildToParent(u'div', parent=html_data.body) - # Add the title of the service item. - item_title = self._addChildToParent( - u'h2', parent=div, attribute=u'class', value=u'itemTitle') - self._addChildToParent( - u'img', parent=item_title, attribute=u'src', value=item.icon) - self._fromstring( - u' %s' % item.get_display_title(), item_title) - if self.slideTextCheckBox.isChecked(): - # Add the text of the service item. - if item.is_text(): - verse_def = None - for slide in item.get_frames(): - if not verse_def or verse_def != slide[u'verseTag']: - p = self._addChildToParent(u'p', parent=div, - attribute=u'class', value=u'itemText') - else: - self._addChildToParent(u'br', parent=p) - self._fromstring(u'%s' % slide[u'html'], p) - verse_def = slide[u'verseTag'] - # Break the page before the div element. - if index != 0 and self.pageBreakAfterText.isChecked(): - div.set(u'style', u'page-break-before:always') - # Add the image names of the service item. - elif item.is_image(): - ol = self._addChildToParent(u'ol', parent=div) - for slide in range(len(item.get_frames())): - self._addChildToParent(u'li', item.get_frame_title(slide), ol) - # add footer - if item.foot_text: - self._fromstring( - item.foot_text, div, u'class', u'itemFooter') - # Add service items' notes. - if self.notesCheckBox.isChecked(): - if item.notes: - p = self._addChildToParent(u'p', parent=div) - self._addChildToParent(u'span', unicode( - translate('OpenLP.ServiceManager', 'Notes:')), p, - u'class', u'itemNotesTitle') - self._fromstring(u' %s' % item.notes.replace( - u'\n', u'
'), p, u'class', u'itemNotesText') - # Add play length of media files. - if item.is_media() and self.metaDataCheckBox.isChecked(): - tme = item.media_length - if item.end_time > 0: - tme = item.end_time - item.start_time - title = self._fromstring(u'

%s

' % - translate('OpenLP.ServiceManager', 'Playing time:'), div) - self._fromstring(u'%s' % - unicode(datetime.timedelta(seconds=tme)), title) + self._addPreviewItem(html_data.body, item[u'service_item'], index) # Add the custom service notes: if self.footerTextEdit.toPlainText(): - div = self._addChildToParent(u'div', parent=html_data.body) - self._addChildToParent(u'span', translate('OpenLP.ServiceManager', - u'Custom Service Notes:'), div, u'class', u'customNotesTitle') - self._addChildToParent( - u'span', u' %s' % self.footerTextEdit.toPlainText(), div, - u'class', u'customNotesText') + div = self._addElement(u'div', parent=html_data.body, + classId=u'customNotes') + self._addElement(u'span', translate('OpenLP.ServiceManager', + u'Custom Service Notes: '), div, classId=u'customNotesTitle') + self._addElement(u'span', self.footerTextEdit.toPlainText(), div, + classId=u'customNotesText') self.document.setHtml(html.tostring(html_data)) + print html.tostring(html_data) self.previewWidget.updatePreview() - def _addChildToParent(self, tag, text=None, parent=None, attribute=None, - value=None): + def _addPreviewItem(self, body, item, index): + div = self._addElement(u'div', classId=u'item', parent=body) + # Add the title of the service item. + item_title = self._addElement(u'h2', parent=div, classId=u'itemTitle') + self._addElement(u'img', parent=item_title, + attribute=(u'src', item.icon)) + self._addElement(u'span', item.get_display_title(), item_title) + if self.slideTextCheckBox.isChecked(): + # Add the text of the service item. + if item.is_text(): + verse_def = None + for slide in item.get_frames(): + if not verse_def or verse_def != slide[u'verseTag']: + p = self._addElement(u'div', parent=div, + classId=u'itemText') + else: + self._addElement(u'br', parent=p) + self._addElement(u'p', slide[u'html'], p) + verse_def = slide[u'verseTag'] + # Break the page before the div element. + if index != 0 and self.pageBreakAfterText.isChecked(): + div.set(u'class', u'item newPage') + # Add the image names of the service item. + elif item.is_image(): + ol = self._addElement(u'ol', parent=div, classId=u'imageList') + for slide in range(len(item.get_frames())): + self._addElement(u'li', item.get_frame_title(slide), ol) + # add footer + foot_text = item.foot_text + foot_text = foot_text.partition(u'
')[2] + if foot_text: + foot = self._addElement(u'div', foot_text, parent=div, + classId=u'itemFooter') + # Add service items' notes. + if self.notesCheckBox.isChecked(): + if item.notes: + p = self._addElement(u'div', classId=u'itemNotes', parent=div) + self._addElement(u'span', + translate('OpenLP.ServiceManager', 'Notes: '), p, + classId=u'itemNotesTitle') + notes = self._addElement(u'span', + item.notes.replace(u'\n', u'
'), p, + classId=u'itemNotesText') + # Add play length of media files. + if item.is_media() and self.metaDataCheckBox.isChecked(): + tme = item.media_length + if item.end_time > 0: + tme = item.end_time - item.start_time + title = self._addElement(u'div', classId=u'media', parent=div) + self._addElement(u'span', translate('OpenLP.ServiceManager', + 'Playing time: '), title, classId=u'mediaTitle') + self._addElement(u'span', unicode(datetime.timedelta(seconds=tme)), + title, classId=u'mediaText') + + def _addElement(self, tag, text=None, parent=None, classId=None, + attribute=None): """ Creates a html element. If ``text`` is given, the element's text will set and if a ``parent`` is given, the element is appended. @@ -246,30 +262,22 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): ``parent`` The parent element. Defaults to ``None``. - ``attribute`` - An optional attribute, for instance ``u'class``. + ``classId`` + Value for the class attribute - ``value`` - The value for the given ``attribute``. It does not have a meaning, - if the attribute is left to its default. + ``attribute`` + Tuple name/value pair to add as an optional attribute """ - element = html.Element(tag) if text is not None: - element.text = unicode(text) + element = html.fragment_fromstring(unicode(text), create_parent=tag) + else: + element = html.Element(tag) if parent is not None: parent.append(element) + if classId is not None: + element.set(u'class', classId) if attribute is not None: - element.set(attribute, value if value is not None else u'') - return element - - def _fromstring(self, string, parent, attribute=None, value=None): - """ - This is used to create a child html element from a string. - """ - element = html.fromstring(string) - if attribute is not None: - element.set(attribute, value if value is not None else u'') - parent.append(element) + element.set(attribute[0], attribute[1]) return element def paintRequested(self, printer): From 81c63146f5c0a19c015d554830f543e154c7962a Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sun, 24 Apr 2011 20:54:48 +0100 Subject: [PATCH 133/148] remove print statement --- openlp/core/ui/printserviceform.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index d7e8d1827..6d6f1ecba 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -190,7 +190,6 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): self._addElement(u'span', self.footerTextEdit.toPlainText(), div, classId=u'customNotesText') self.document.setHtml(html.tostring(html_data)) - print html.tostring(html_data) self.previewWidget.updatePreview() def _addPreviewItem(self, body, item, index): @@ -388,4 +387,4 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): QtCore.QVariant(self.metaDataCheckBox.isChecked())) settings.setValue(u'print notes', QtCore.QVariant(self.notesCheckBox.isChecked())) - settings.endGroup() \ No newline at end of file + settings.endGroup() From 100d60eea4e79501dfc4020afdb3af23da9a3e6b Mon Sep 17 00:00:00 2001 From: Wesley Stout Date: Sun, 24 Apr 2011 15:15:00 -0500 Subject: [PATCH 134/148] corrections --- documentation/manual/source/dualmonitors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index 0299f2467..7e39edb45 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -39,7 +39,7 @@ equivalent. Users have reported experiencing difficulties when using a projector with a USB connection, as third party software is often required to properly configure dual monitors. If possible, it is best to use a direct output (VGA, DVI, HDMI, -S-Video) from your machine's video card. f a USB connection is your only option +S-Video) from your machine's video card. If a USB connection is your only option please consult the manufacturer's manual for instructions on a proper setup. Microsoft Windows From 10fca2dd05605df9c2d65d7fd21e6396440f82e8 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 25 Apr 2011 08:06:35 +0100 Subject: [PATCH 135/148] Remove theme image if moving from image to solid or gradient. Fixes: https://launchpad.net/bugs/769988 --- openlp/core/lib/theme.py | 2 +- openlp/core/ui/themeform.py | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index 698f0d644..7f2204c67 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -637,4 +637,4 @@ class ThemeXML(object): self.font_footer_shadow_size) self.add_display(self.display_horizontal_align, self.display_vertical_align, - self.display_slide_transition) \ No newline at end of file + self.display_slide_transition) diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index ebba45e7c..a03cbea3b 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -56,6 +56,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.setupUi(self) self.registerFields() self.updateThemeAllowed = True + self.temp_background_filename = u'' QtCore.QObject.connect(self.backgroundComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onBackgroundComboBoxCurrentIndexChanged) @@ -279,6 +280,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): Run the wizard. """ log.debug(u'Editing theme %s' % self.theme.theme_name) + self.theme.background_filename != u'' self.updateThemeAllowed = False self.setDefaults() self.updateThemeAllowed = True @@ -432,6 +434,15 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): # do not allow updates when screen is building for the first time. if self.updateThemeAllowed: self.theme.background_type = BackgroundType.to_string(index) + if self.theme.background_type != \ + BackgroundType.to_string(BackgroundType.Image): + self.temp_background_filename = self.theme.background_filename + self.theme.background_filename = u'' + if self.theme.background_type == \ + BackgroundType.to_string(BackgroundType.Image) and \ + self.temp_background_filename != u'': + self.theme.background_filename = self.temp_background_filename + self.temp_background_filename = u'' self.setBackgroundPageValues() def onGradientComboBoxCurrentIndexChanged(self, index): @@ -589,4 +600,4 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): QtGui.QColor(field), self) if new_color.isValid(): field = new_color.name() - return field \ No newline at end of file + return field From a173bce04719679db23196147da32e1d851abc5e Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 25 Apr 2011 08:13:17 +0100 Subject: [PATCH 136/148] Minor fix --- openlp/core/ui/themeform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index a03cbea3b..f459289f6 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -280,7 +280,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): Run the wizard. """ log.debug(u'Editing theme %s' % self.theme.theme_name) - self.theme.background_filename != u'' + self.theme.background_filename = u'' self.updateThemeAllowed = False self.setDefaults() self.updateThemeAllowed = True From 77063381d27ba7265a42e9351778c35ebb2bfb84 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 25 Apr 2011 09:23:45 +0200 Subject: [PATCH 137/148] call set_defaults() when logging an error --- openlp/plugins/songs/lib/songimport.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 3c7ab8885..78275d210 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -110,6 +110,7 @@ class SongImport(QtCore.QObject): The reason, why the import failed. The string should be as informative as possible. """ + self.set_defaults() if self.import_wizard is None: return if self.import_wizard.errorReportTextEdit.isHidden(): From abf44320c34f01f9b8d11081ba849f45d39e5e6e Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 25 Apr 2011 08:56:13 +0100 Subject: [PATCH 138/148] Set correct field to blank --- openlp/core/ui/themeform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index f459289f6..621493488 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -280,7 +280,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): Run the wizard. """ log.debug(u'Editing theme %s' % self.theme.theme_name) - self.theme.background_filename = u'' + self.temp_background_filename = u'' self.updateThemeAllowed = False self.setDefaults() self.updateThemeAllowed = True From f89e362b5d2dbd749be924be8c1e4732af63d50d Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 25 Apr 2011 10:35:48 +0200 Subject: [PATCH 139/148] mark service as modified when item notes have been edited --- openlp/core/ui/servicemanager.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 40bd5e9d4..a2260cce9 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -686,6 +686,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems[item][u'service_item'].notes = \ self.serviceNoteForm.textEdit.toPlainText() self.repaintServiceList(item, -1) + self.setModified() def onStartTimeForm(self): item = self.findServiceItem()[0] @@ -789,7 +790,7 @@ class ServiceManager(QtGui.QWidget): # Top Item was selected so set the last one if setLastItem: lastItem.setSelected(True) - self.setModified(True) + self.setModified() def onMoveSelectionDown(self): """ @@ -811,7 +812,7 @@ class ServiceManager(QtGui.QWidget): serviceIterator += 1 if setSelected: firstItem.setSelected(True) - self.setModified(True) + self.setModified() def onCollapseAll(self): """ @@ -855,7 +856,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(0, temp) self.repaintServiceList(0, child) - self.setModified(True) + self.setModified() def onServiceUp(self): """ @@ -867,7 +868,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(item - 1, temp) self.repaintServiceList(item - 1, child) - self.setModified(True) + self.setModified() def onServiceDown(self): """ @@ -879,7 +880,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(item + 1, temp) self.repaintServiceList(item + 1, child) - self.setModified(True) + self.setModified() def onServiceEnd(self): """ @@ -891,7 +892,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.insert(len(self.serviceItems), temp) self.repaintServiceList(len(self.serviceItems) - 1, child) - self.setModified(True) + self.setModified() def onDeleteFromService(self): """ @@ -901,7 +902,7 @@ class ServiceManager(QtGui.QWidget): if item != -1: self.serviceItems.remove(self.serviceItems[item]) self.repaintServiceList(item - 1, -1) - self.setModified(True) + self.setModified() def repaintServiceList(self, serviceItem, serviceItemChild): """ @@ -1026,7 +1027,7 @@ class ServiceManager(QtGui.QWidget): item[u'service_item'], False, expand=item[u'expanded']) # Set to False as items may have changed rendering # does not impact the saved song so True may also be valid - self.setModified(True) + self.setModified() Receiver.send_message(u'cursor_normal') def serviceItemUpdate(self, message): @@ -1037,7 +1038,7 @@ class ServiceManager(QtGui.QWidget): for item in self.serviceItems: if item[u'service_item']._uuid == uuid: item[u'service_item'].edit_id = int(editId) - self.setModified(True) + self.setModified() def replaceServiceItem(self, newItem): """ @@ -1053,7 +1054,7 @@ class ServiceManager(QtGui.QWidget): self.repaintServiceList(itemcount + 1, 0) self.mainwindow.liveController.replaceServiceManagerItem( newItem) - self.setModified(True) + self.setModified() def addServiceItem(self, item, rebuild=False, expand=None, replace=False): """ @@ -1098,7 +1099,7 @@ class ServiceManager(QtGui.QWidget): if rebuild: self.mainwindow.liveController.replaceServiceManagerItem(item) self.dropPosition = 0 - self.setModified(True) + self.setModified() def makePreview(self): """ @@ -1235,7 +1236,7 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(serviceItem) self.serviceItems.insert(endpos, serviceItem) self.repaintServiceList(endpos, child) - self.setModified(True) + self.setModified() else: # we are not over anything so drop replace = False From a3c99e5b5370d18e3a26e267bf7498138638b166 Mon Sep 17 00:00:00 2001 From: John Cegalis Date: Mon, 25 Apr 2011 04:38:29 -0400 Subject: [PATCH 140/148] changed images to new ui --- .../manual/source/pics/configureadvanced.png | Bin 29262 -> 62469 bytes .../manual/source/pics/configurealerts.png | Bin 38072 -> 50842 bytes .../manual/source/pics/configurebibles.png | Bin 37379 -> 53800 bytes .../manual/source/pics/configurecustom.png | Bin 22058 -> 34610 bytes .../manual/source/pics/configuregeneral.png | Bin 61526 -> 82755 bytes .../manual/source/pics/configuremedia.png | Bin 22589 -> 35459 bytes .../source/pics/configurepresentations.png | Bin 28494 -> 44760 bytes .../manual/source/pics/configureremotes.png | Bin 24794 -> 37123 bytes .../manual/source/pics/configuresongs.png | Bin 29651 -> 43736 bytes .../manual/source/pics/configurethemes.png | Bin 46101 -> 199640 bytes 10 files changed, 0 insertions(+), 0 deletions(-) diff --git a/documentation/manual/source/pics/configureadvanced.png b/documentation/manual/source/pics/configureadvanced.png index f31812f93f14d8a6e963f8348768503bda5a2d0c..44908e8284f4c104eb5edd00b78219b0419249cd 100644 GIT binary patch literal 62469 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 z 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 literal 29262 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 aZZ4V_e*dPxt@U@Mq^_c)T=nABhyMk^I8E6A literal 38072 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 diff --git a/documentation/manual/source/pics/configurebibles.png b/documentation/manual/source/pics/configurebibles.png index cd44ee4afd7ecd02624268b696123d5328d4d605..ab8bc193014ad6e0227521a5889099277f7748d5 100644 GIT binary patch literal 53800 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 R5oq>`h`1RI`d}rO{};{A8sh)} diff --git a/documentation/manual/source/pics/configuregeneral.png b/documentation/manual/source/pics/configuregeneral.png index b1bae76e004da4c6d7e4dba488d3b7acb69eed92..18a89474e154fc0de3538893faeaac57236b5cf3 100644 GIT binary patch literal 82755 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 YU#3~B$WSli;(3phxV%{TM}vU>0Y8#xkN^Mx literal 61526 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

O-U!C=xjt@=ibxJCYY^yoV=k0AL>}u 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 literal 28494 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 O2&HGNTlmM7d;bFwye?z_ diff --git a/documentation/manual/source/pics/configureremotes.png b/documentation/manual/source/pics/configureremotes.png index 9eb22131c4895d604656ccd10bd4c2f9ee0726f9..d8801aa788e0804903d526842b3f5bdee8755268 100644 GIT binary patch literal 37123 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 gWxCR=6UHx3vIVCg!04V{=+yDRo literal 24794 zcmb@tbySqm+ci9bih_s=h_rxocY}g}w3KvrcbAHEN%x?14#M)sGxlsTD zc?}VN|4z{*d3(;;1#4{L_rcz7*4cNW7eZ7d&)k&qhLhySQWdqav7Xamp#@NVB@OtX z@cU~JmEKPrY9#sl4`SxUg^8-3d<)+2vo73nW3EU{ z21|}Bd3Jc`cxp+>{vB9accAzOaxw*NyC%JO)6pufX$aG0MA%!g&+#ew zS?&=r8OBJs)d>GO<=J4Var8hp7pZQ3cKN^06tMM%LLg?c6|4WI{0zEfI$VU}R{u3P z3SI888idEm`~IKtex(uk_n05%5W*?pfwF}j+`J;JgaY+y_HLS=SUlsJ|K=tNGwBC8 zk3a$%<>^rR!biLdp153SFz3=_?J^G1j04J#*z|H;Ehng@^ruKDubh9au+H)4H0lg1 zCD;(_NsIpzQVQxqsnDM1m~JmEJLN`g*9TRmzxa|-xvexY|9eati4QW%qp6KUmqvW!>+J}>+XgL{@C;k1cJ+}+!?-iG@bWBe_q~(nhpO7Kch^be@cC}_;zt-4B z&$?vMP*TQv5F;U?u|d71(xyxNN9^l#3YIQnlK@Wz2i6bjofxpysr3au!=w zGf}!O~`Oqh!vC zcBY*7xj4pS9V`|~!ACHwj@IXH%P+ff)js|nA5W}l(5kA5-WjONEMNa!qIYF5@I~KM zD=ER$#?~oKuBApLKJFO8O7gABnPzP6`Ri)T?Lzmb`b9&71-71b{BwtN_N+@B*#p{b z12YL;nre3Z66!ztNe|8Pw{Pt!H>)X?N{kzZ*S5Ho$3_&E9z8m4>gYg`JhIQAftV4n zkbbChe6b~7%J40R%hY+-W^2?{^u$u)=phl;w3;0|U)VyJ_VVad51aY$K6K*wOQLt4 z&S+Wad!b2X^uqHh16dcc&tArK{=&X;Db`%2+y>*w3Jb=D3C#P|Xvt6o37Hrm;bUm6 z99Nqpax|QIQT5OJbOh~0C0|sNXU;FKv^{E=cTA-C@+Gnujbyi$ugmQ;=49t8jLGr1 zWm45t<$UfP)`L1ejeAwtxP7bere2pzT>^_jm4lo$Zds2;Clwma2yicD{!sp4Sc)G@vZ(3G_9MOgwtB5Bq*fg>{3QUZ1|4 z8vHzGj0W#~G)~TC3g)!X9(tFZloZ6nvs@43(q7fE25(M z?4yc0{wem&n>T+pHag=M>#J>-A6}j9QT9!v;ERv@KEqxSb-8~-loMW=&+jkmdw6iU ztP-EJY+&BM6nC}%KKykB;ncVAa7yaj-249XZ>Y(!v31P#eHv3aWx}39wgr!Iz~!rI zxNKPuIbN=4d&qum6nicQY%~zBziX+CaK%6j1nkOh5WfTo!t6HTbXF@d26b%HyJavZ{sb0 zaCr9>@=pY=|Gn-WbxSRk!kipWVsRJ!LEONCKmDXFiqz6-a3=|23Q$;Q7Fgya$-h0zl$&IV7e$Ac?$`SGWq53L7SU;gA>cHKJ`j2`%?lfC{c2)OU$29 zHLff6m@7%J3=}*(VNb)^9{vd~ydBPS#VjZ+tipZX=5HPjmLJc%ae6i+pjk9szkAto z|IA59?)4i|=-yc}8J$Q^jQLNC#M}Fem6#VtQm;JQ9p4C0hhjG(q|GE~i29vCqJW%N z@qUlUT~8OUe;h1fuyyEJRmFw*$Fxn7@$`51a0vQU|Iy+1U2qiBM)?WEkAzeqZVy>! zv9)>K`uv7qB>QC5*O%91{&$LV>SjoIE&tF#?zP(=Qey^f${$U0v@4aQX}E*)#N}#j zaWe=J{nZaw5229RN40H=6Yf02I&ylO&}~RbF%u%f zL}a1gJf}CTejpiN)dtphr|?wO)?igJm&fZeneA$c52R$|cQuq2F%*>qrM=?ZJfZqr zFMx_sW|GKm{Z2*YmHJcdRf`}D^;^j$Kb~jVJbgp(llBSPC@GdMhwvzlou^t1sx8_t zgt~KYnAoE41#}>+Qm^fC8CgyG5NGuNu4gEypG*)5(p4p8TuvODH^>b3I`BH2-ZFR_1>-P@RWa(V_=5jhWXOm25}&!&H?a*bG}P zb-kpIQO!gZ72hO>Hms2>MGlWFXblqCuj9+7m1XJ(RDrbU_jQ9v`7#C9GYVdmtd z#TqDv&Ut;yQbUobjvc4!yJi*%l?uNqE%h=c_B`B&S2@#90v2OGIqeo6_OPTpxQ>uR~td)M`q^FRB1u0?TWMqpN7^TfoqUoil3kd4D zMEjjYduF?4hJ{y-Cnzg6%zDgbv0=@%S5q^tw-=~$DLDB(8>M1pj@{d4>(~|Rcgs{z zHj2|bnDV4M>0~if?ddqzq>9bKuo99-DO7|QH%Z9B!z=<$7wV7_)}vg6t5sVw?>X=J zUWx@1XXp2DGZHH+E1)ED3ylmvu+DfR05J{bYtbp~fOfREVPfM(oEZ(5qr8)g=c!R2 zm(EVFDYe;ocZ@n}*MHe#Br~twJE9|@*uGw1Ouof|D>rGVLHR?;d}(=k(u)+y9JV$U z8nMVA6wtlCyW3sS61Oqbo+?1NHB#5WD|e84f84fdxH)9cDW!eB>5H^K!-0;1wifYR zpwI2M&!{!!1;JXd;?2QKcQYT+Lfuc(s%>9f@gVa)*uVb6aebgo)dzPUENI}(=SW#mGMc6yU%~hRrFx`$(s!mJ$U;a z1Hv1wNiINL*y-rEAj6g?s6kMez_HZCw?}x*7}8U%rLLwjNS9*^Wr@r|BcTz}mGyay z(b$DA%O6cC=WIW4nZE)65?%ayR8G^?yU!~*nE-86b=+Ph0alQd{Y@vgUg~X9MQiK( zvULZ7*xk?}IICRlXtYg=_#+aUZ)%zCjb8*6;&yZ`8jaZU_uhTBrnh=eUb@psj;MYS z-snvTii7>}tp(RoV+A6Mt>CZCzTZu}ChZ?u8VxNEg_`-O^)19%l^I=mKiQc4ekyHN zwzF?oQ-0XO>wX@PYHj)H+U_fk->;w0N=$cI4Y72&(x}(H}ExX|EsYB-Sq_$jfUqPe~Lo)k9sd(b35}VhN3Xqk(2sf zBD~&rv?AHC@&qE^eq$7m0b6`&$_Q%hwdK6|aqlr@ zYT{cH1CO6*bAh#AR3)f(63;&i__QdGl$@GaR81*9BFRe(33<|NE&4q<`KwHJ%W(G# zXJus#Gj7~|^{%e2**fe%kj#JRSXze0W%HgosV?`)BHZyLCDFd(aU%WMz6hSJj*@}L z_Mv*FD9rbb#Wm_bfeblL zt^W-Lg)L>hjwd%9<--T5m9@SP!@ILh&9el~oH!bqn!$Y7ly4|r;NnWFsg0wje){yu zrK)x*{)X-%>K4kuM{0Mtq?z;a=eWuKp+g6`JAsicoGv$92H{>a=yWlD+TPcfIrz%= zSsE$#q}t(3g|^FeV1!03uDQ$Y=w?~GIh%{CJ9d>F5pnA8!lcT5fJa|qL%Fb%V}xf^ zRBdd|DBLh!N$7PG3cG6hL6>VM%C2V4{O+l}W_Oq9Iw^bkfp&!HmF2ZG0o-W`W-s=k zo2g?6Mz}dW3h0ys$d96#@`g7~Y4SgXd?hruqey+9Ej0|8^yVzX75;d(?PE+%PY)Hp zYwDn0OGZ;KH;G+$jQTCw*3eH)Oyq@zqHgc!gk~_=5*jEg(L(KBcS-E+x3s+ykoGwx zg;3g#GPgWfTkx|_J@V5~f*=cfucxO^xhCZ|AM2X#tBr9viEHmK61wMB-h7Q$9VYLvvrSa54BH49I?&H zAC@QJ;<4KI_R>Lhg#w1o( z7{BF+E7I&A9qI2iMqK~8eNhwQ(A!66V`ujp7Pi2j(%PdQZ1nDln2XJ;GOW&Nl8((!q`fiKRny0 zYEnvMLfqG`=^d@^^Iwvf^Mh%zvY7xo5iQjPw%f;g`e{8S;{O!0fc;|p0%vL8&D6hIJKk9PDw>|VO`(+2+bczC z)lup;@>rCQ;B8#Ry_mT-auSh%YJ7XvY;bdZ<*HU`5fl}LHtq00q$>xU!i9ojJpIe0 z|Fn@&qErh#M!l2>7q=-B4d;W51RabfpMcjL1qliHo|M4&teM$trmmT%fy6<)Jl$Am z?s0u?s~ld|GkcjQl~$C48NOuVrU@}~84`wu>+f54GPs|^SmD%d@^kSL3rP|LnYyUV>#h4| zCHf|#&u~4SiojsoMoK)Pe4jGZXyOcRhA)oTOsBDEX=&vnrOzrkz%RXheUD6LCs+P2 zS5#M39jY>YX5>w*-;ah&Q_HQ?e4FL1H6{Jb@FPQ)o1NW@r%%H+%zs-K=H}+IQ~b|Q zUFPFMW`y?<>w$>elf4e|tYX_e!EYk%Ke5U@95awS_{^Cz+-Z{uEDn2F^98&Ko>xcD z#5J9lTbJH387T`p;S@;g{ugn)f$=oMly zw<+bYcO-`(y}5Y!Q^mun@JxhG8?Hq7K3-#7Z> zJ7+BZb7sEbdU`yiQz^_eIdhYd)>PTsT6vwTgoN=ua(2HraKn#LdjIokBpGU|p^%^1 z5MkqCQ(YENw*E4mVHjXpTU)#T@Zn)Q95$3AmmXwp!9A3tq}u31&mOJa! z(T$7oY1ZLni@iPUMi4M|890Zf>)MoUGQWF&jv=jHjn@s2#$Db9 ztt0Gtt@$V3+qMjvHHw>**t}G-WC>gH`P7C^&g%>Uv5{-)YHE6>rjOs+*`Y#;ii&)TU>P-e zFZ5^J5X}#YG^(2`7rgp5hV-l5cJNNFZ-R3x9Zr;A>Q9?WJ*oAY>EqP)7Ww$`8DwW> zVrgfp%;jW^x{mc~$IjH;mDwqYi+6%$d)dm$st$4K0QGbt2ul02z1?dLlO90)p{tp{ zswa+SkHwfz?eQVxjf#&CsIR~AG)*dDVLfT>=)lL8M3h!n3X8BhrKIpU8o zhF7OMR6)(3?;*#ZH{S;&#bjaeo>6~%Q>FRD3u5AdoCq>od;8_G7+P^Dsg*!VBID+x z0p#z|(XC>^FKsslb?NBoHpXf>8KqpH*-$rB5xI?#Yz$s!3r5=%ZvvjyAneo^FJ632 zO2QuqC6>KK+}NS07BjvtSI|`+4=3PmR*(&)|9INRskJ_34CSbkk(D*xtvfTFso=Mq zuFwa+ip$E1$zff?*>#rNrH?nJl3voQA5C>Dkux~oxG^D4@N72rb$Oh&dJh^AdVBNr z$He=OzJ&UiOd#%k^0-X+360carud{Ed+&TXTyW!bu!YTfC)IBX-|aNZ zG0Cam{Fv42VpW;Pc~i7(jb7z^h%|i*L=&Uu)oHezj(&}UXMncXMfvQ~e4Q&AA$lhwhuJu+2xvQd<>OFkESI5qT#jSP9=Xfp_MOEG;x#$9qF z5o$!8^>#_h?YUc(dpOcTtkbOm)&o}d4Q$k>K0^yBSP$eC%7G3TnH(u$FlreKJCB~P zzxpv0kKgTCx$EBC+zgNkT{4bg`TU?!?hVtE)8-Q?+V`##``+U>&i81+;pH(#0;!`Zzrf+Hj~)EoLg}TOBE~O%eod z9R1Mo+q0yT&Kqyt6P@Q%gzbW2d$$SrZ<$_IH~n&>X*AG;G1^H;N|Lc1KSYO5aMr~o zN58j|e*t`g^UL#B^S6gRjCat5&xvTBwr*J4h)4&EU9yW%Pk zZEJtosBvl?lL|v5KOpY!7?_BA%vkr~V-&^qOj#1=f=lQFw3kNVu(7yTlHx~bQX->| z_pcB)7E`|>F7^iWo0`J|LIaueFc4f00ova4zmH87REu>;+|PCmug3f85Yy&#+6`%~ zZt{^)30wyvqTzU5O*f54ORbNkymuVIyL;SLo<O5kzz*G77FADbaF!oIjF`rK7hgP;5se z3C8~Uqcfj)!Xcf+(Kgid^Y=xDxQsy9aW*aZ2qE&0*OmsY`$bCLDG&vA_44)wWT%zBur?21h`%5_FdvyGJ;NCXgR3s^DrwHv#mz#pKmOBK& z^>|S&)#c#5gPR|*d`A`O*VbP0vDmzJKih7ixnjIp30IADlv}22BLTP358FFCxGXNuJ}=4|h|r6j z+KpsOFMoMTXk%le17DNwbu)hmRAd)7HzY7P6DoBrWjrhq>Qb4{#;LA&>gwulr@b|9 z-|gEfGX!3pZL@-MoW*4@9m01u>tbPPiOb;-Aa|0Hot>_XB`>c~TwJU(IruaA`id(y zHuj9*tnv1yqfq_%@#Y-bT`sD{iGyh@F0}=NBSxkPvAg+^zj~7bJ zE(Dpc*PqI*%cO8s-8zpKs!P^ZSYBMjX}jjQ%W_!G>s4+2a-88X>P!9tgJFQP>kbbM zyymKMCsi8Nj@V(+sWNf>DYi~dY5E-~t{1Cae?$6-hr_cz^@=Q!e2(L-k?=C(0T!FL zw@4jt`v2Bkvb#{w;M0?H|Mg64{Q%S4iCg!r&H|(N-8QC z?C(IlXF;ru@Gg?QG{^72yI!p@OEz`hq7PwzJMY;zlI3WgoSbYYVAAa|yB5}%aU`y~ z+h}{gT z0_{d9nOK<3O6T*_-I!(o@X1?H8u3r zf{7J=!nx#8fKl@BBudp2F)}g=*Uy)mV?M_fH*(@{FBlo`4+FqqyERJv@CiX@)xk2i z?co~hcFlh5(7^F~5S9t#}_E1sb!f@*5 z%^K+M?`K-*>!UaK2Lf_|vRw3wxT7@!jZJ8mokwNfXEy~jC_GzzqNuIiNNQHS!h(#I zHOh&QsP_mlZaL$csVi(XS0kdMqXVr$!g~Nw)kdF77jv%In-#ygJefSZ+OwEHmkgXK ztnwt|yQc7RynbT1HIXlN<8}f<%YjETVy7-nKtfvDaAEIibD|Q1K9Mt9qi zcj>o_Bf%8_*a2Z-qOgf&INUr37G_OIN=h0O%Ff0X4HDRjsW7`08_4GuW7X~!<42S;-ymyj9OiuIA2y(gqu?wddoRqo`qZy#PNpXDVgCcy4Hgsp}6=8V0ri1q%lUhe5kR z2yBtVUS7vbHtPW|e@F91`eGoBeQH0p?Z0iexMKm`c&yPL|AmID+C>FdsR?+BG}w6_ zu4cRBb}t892fDk1?jb+ihr{s8w)(XuhlT=WmFYSKw67rmH{E zzZG#gm%fG@hQcvwpZg^x)&A7jt-vnt|MiRQ*v;2Mw@PWxT69lia>>aXa`K-enMVg=XyOx_lMS9I%c)7fe+oYR6Ycpqj(iu?{S}rA z{pKUt%pT`VEmu9U^v3Xt9Vri8r1JWDZue6<^wOvgpV4p_@V53AV2nrex1UAtp_>k8 zFqfN8Fxb{&S6Wxq);@oM_qEYm^EI3z2jKFb>VxIaX=jyPjP)88ygk!mn>>WDIv!sh zM-NkiS0*lv0D@F+m%}$4cnAmxKIV^U)OyVoBj6LT<;7hsi-P%iEsZLhFPA4yvegs(^zq!#Dd+mg<8I1#cdq6}9 zFa$?K$5OqUD1&iu8CoINhj3AcO&(CCJh2=yE00e|c$nJiu3wQ}l8R#( zIu(D^P}1RqxZ$|9Ydev)y-F1gU4*f?u2f&hzw2_w%qt9KSF@y{rtSi%1!;d!SW~sZ zgB#FQQgZUY!2$}6cn(Ji5=Sh=v{ZVQ@cX*PkI?UC(9sf~NSqtONy z78XI8>nq}nET)HV=3R|B3f0OBV$=>WIr3X^LG?2I7I<+ zWMrf=x13sfD`5L|a#H2t@m_dndATm$V58vApFfiYy`hv)m*fX%f}nizoNe$- z5=3yd4jcA7IdS&bfA<0t6I9s`g#Di|o7G}ZV1xrOUTTx9a@b^vW6)fyKU;fFM5MKZ z_#}T9SRCWyPuz~5Yo)M+fZ(9m);uneHzoSm%bzii=Yp zRCQ`|IM4Ldge$#Y$R9IvJK64V3dZoYJ1=I z9ZxL$SrNRoSzHpiD?|1g)H@^@rG?~5tyoYdf4Q=Xi;H_)?KnG!N9bL0-Ez>wo!H#G zIZ2K5`>#ZaXD+(2C;fYhZ>c3trDJ?U5S^+ba#2Z1yyN2>tsM)V(M$HrsV&p(ena|D zy=F8_(~pfLn3OVfB}LaGqtpsEj*hFj*@$o)O6e?6hlb#?K9ps&PGq+fy}cJ6T_uBt zCTY}{*j8#t`-*E{Zrt;Xf3MFK0}ZVwxrp{{QGv4Ts*_>Liv}2Hu^eQbR zIKGXueY!$+m`B+ft!OBbxe6k)i;-pT=HiL_wyh!!d%fF5pFZHkRAf8|QK?>Jf%6ykF3;$EJ?d(PJ>_vb3Lfrim_ghs1A$&wkInIXVbK?K5o zKJ|>~POc~nc;w;fq4I0LrC^~wIJEG*3an)lGU4>{(o%A^MHIysP&5_mughp9@;y#r zNWsAIdhc*-iG=sCSOIP453P{SI8#IKTkeML%k=*)@l^}0H9&?*-i9W0T5`{uW_v?SEnP@e#lj+R5# z1rMJy!T5pYTlW|C_V(auTFz|;KF$j4gWf6`Q6mcbwO(=t0q9HmMAnlrWf%C4^X?4C z0JGibtCj(pm>@rNy#0eT-<+{Lp&34l$!Ad9GXhgnH6mQD?=F1R=eba6ZSAFUOGYMo4SS0p z1m|52Q*Y}$5}#ViQR+!Z^}2>);4m!3C}#t=PN?1uL8pHCc&^6j9#(QnN<81Dh=9ia z^ZZYqcj=?lc|ky8OW)cW<}vfjVy5JLA~P5uBVu1y_-NE{d)*P?(o=J5I_ey?!WXgX z=6T#1fwY&aXm+|g6}9e(kFO3ypvSDJ<1vk4OIkBCy!)pGm1vfG-7&PGTE^kK{2LKB zqsh%n-Na=YsxT;O?Z|JBVYGp4MpXoL3G2xdkCw{Fh74y3hs*xJ z>qBryt6!))-g=g8J{xIYlU`9Sx`@aYds39~GH|xJ#j4nCj3&0|+~U=b2l8dv(Hes0 zUw+xuHT|kH%eyp_FQ^_Ht&&Vi-+A*8OBCBSsZ<^Jgd7-IoiCI*Y?zo zOB(MoadvF&i6_N6ga7i5*8XE|J0H`NH(hSHqZump`MI`nez_+R)NT3_C5oI`!)IA9 z#7yIbdVMvei3X_ycKioQy=I2w`B~CBzGlol|1xt^koO$z1=rYYM(xCpyf7Y{Q z^s+O0i8)gx4_{%^T_G@?%}lRXNRfRtwjfo|y`nBJ@9_V6XqHvScwfxi{irngTu`IF z`C+SHS64T*=|Ik?C;=`KPH^Smssx-(p+|B>!y|i&PM9<)D`u;V?Bu@R|ClFV>lG`?O~pIofA*PWPVwV zR3xka>-m>@=SvBPH6ApIaR#)xWC8oE&WUh= z%SZe*&WvYHcV4AXz}7%PnsSxv(MwR@b31HcY;SLW`0(Ke&|Nt!r+Xu11#&mmqBpdr zXY!qiAzyubaM?_la@8!M6Ggbq=FD&G;41UF2`XDhTtGoF*ERhnwo|Jkx`x^*<77k z5)h;SHT;YGL`-b#r=p#DryV>9E-o&pHgR0g2dgDil`jS6_DkQ%*HbB@~mAlA^AR z{JXk2s5E@4sa&?C5KJu>U>|t_wL7?cp{T9D|LNyO*<_v8&WOpWDQ3@0w(G6Y#f!&` z#bC;W3FYME>aM%~QwkVn8*Ol)p$ehnX69?q166d*jfk=ibCf31HF8udf9g0P$jip|@v)su9gsxXRs@v1mK4ktFpz&a`fehY#-ltv( zd4z_x4Dy=BK!csf#UZvZVS|8x-^%ptZ1PWGKbxIPN8rY_0_JKmmxm3^AxX`N8#8Ou zu_8@;US3`{JoKU>E2CD9AePg=?)~t(xpZ-LT~$4eY9m%?^zxjC@+TF|)iCR? zJ!v`o*Dm0eyKmsRQM~A|J(>VGIb>@z*C!?h8(43U^UF)5Vo;>Mz+4J!AZ$w&3*T=! zTfpBMj9zfrab>8M`Y+rxzD{W)fa z%VNL;(H9LD%9KCo&Q}0th}aWco@f-J?ap2P+TemR5MN-Fhs%EGkTXRPViV2HUyF;G z8ZOpmgtX(@ZxLtj$8TlBbeho^2f>zQVP!pvc0KCDJ>Ho}z0;JNFVG<87Z)*Zn*V0w zP|2lKz`p&7QLhUoF!q6Z7Q#U0qpanXP-)zU^uu%{tKfFgebkKoXx+QBFR4=H*9IBX zb1i`su9&OH$Kk;R0mfPL%uH>sV~n%Ab~4xV7zyy?UaA}LVUUDh?KK=d1x-rZlO<8i z`l1Rjt$IGgPcXGROK-vB2)%J=b)I* z0n*c4Z)b^YRCN5uhC)nNy32EYp|8Rlryn`*DhVKk<1*V}L7`BMI-7>lB+5HDk|QIh zpeXjg{m#e=Hn}_ z-p4s|F(a@4_M6yh14fWvae z%tS+8H3d8;qp79-H@QfP=jd7glE$Ou5C8X6Vds;ZQ-LKy0yGV_!j~d)pkrc5U>JU4 z(#xh2udb(W?jxZzsr>$Kin7Ea9p&h$gFx+tG*P6vcwVCaUPM%)*{T`HIJ-nd4kot{ zpk%&JA5wIRx&wJslCGMZSP*PgPCKYqXE!nnUN`%PrxEx2zXAX386IA9Lw&8SjU9k} zOcsZlZmU=@fwl`Ex#eZD6~;D(5oT*QB7S)n>l<>4DMA`+9BmyPfy+V9_Sj6qZ)FQS zq8X&RNl{S}6x1O8|7>d3mL`$Xd~ET%_x}AX5>N}lC=%b@4Lf(t3`->9CnI}ELN#|# z+K*2?xnSMj_q|Sa`8QMldwNx>HQ)!|vEelC{Q(*as;b=wLB+M!pCYEFre?@lsKLd> zV|y}P&IhxXE%)@m1t@$U#Xq{|vPi4e&nI0Wcl{q^Ucsix;R@N(>y5Vv{hi7MJH)JN zETeXN#m-Cu_fcWD)wE}s@tL(ogF}QQ4r8(Yl@nGy)VL!wAN0X+Z*FeZ-JH(+G8y_> zVL4Oka-at`RlbGlUoehTtQF(5nyCoY_P$7nrB{di+1l#rlzyfH{aXYw zo7IbN+M3>4-plAMcFv%EuriFe)@g^P0@~c#LAgJBgt?y&mreiOUdOHPr)v`Cla2}Z zzK-CqoRRAo2yY7(tj-qbbVZU7eXeW)P8ZMa*R(m?&v@4YdFgr0{Qab=MOHvnsOMAR z!C{f~fL8qluv{gR;~E#ji1^hk7Qklr0f-flpTygj$hq!M?8Wq}u*&s}XL~Il*09va zx$x%o>(4;9XSH2=50EQ~M*Y)WT&KMmV^Gzuad-@T_t!tiC*)Xs_FBL_8gU_`p;NScT};%5Dg{dz;k_SD`pLc%`aldVLNOM>gvUfUnu z2X4!1VWrVMEM7+MMt1A@y3Pi0Io;#eTGcaRV&bn~zq*{II8T*1!*mg~dkw+>9A0r)P?eOFBww!+LpUtX z1E0$Z1cFT}cd`O(@ayBF0S_*30R+PFF)FIwS_p2zt#19#-gDb!TRS_0)&R4*b6;5j~iN1V2&s);J-stzOK?){1(*b4Gr>a?mhUiA0)&UI~%CU^V! z)d;bNOPibGKs<0YKAnNI_4h1TS5#DpoJzaZJgwJ~m9Rqv94ll;< zp`i#sdtS{kR=2gbLR7t7yB7cadF$Zd@L$_OH^eOFjw$bt3WQB?+Vmh7;*- zMN_*LA^H3H4Kw|SSbR+5^ALmL&C2eG0umAuq`0I+_w6mhVzvs*JeJe;Y}dw6dPota zn4%(ra3% zK;w40{Z3TWZ;>AdCywv2mC1)kSEswoy#pyscO(K3_105DUX!U(a?rrVSpy~5-QCR@ z+u~~>EYikkpXq^H@zQSK>$eNE^)O1W4HBbVxD1iD)bTiO*{t;@@U0GLb7?Qt z5ma9l<}?67XXC`J;bskANcbx*uMu0gAmTpQBW?Y)%3uM3#=Rc6I9qK$O1l!5nD_DT z-fez0Mx$C;R<_(lnQE}DAX@?yad7vw$r614G88TT7@X1WD-mMx{O%lg(kHjQABnJk zsoB_;5PW;Sp7-G3pf`m#oVmIvFD{D+h(dnogx$Y3M;qm)n2ETo3wkpZmLLI@x(^Vo_4ncVXwTL)V~ueF&FGzv zf3fL^5m0YF$WGjm*3fdtk|PLc{W!mbmo9{G>$N_5Nv8s0jg5qa#N%=^JA{Dy#b;1W zfS6ItHT>H*Dv>|UUt`;LXy{R;bFXZ{H7;KnwzRw3KloGFg>^zf)2N<3Y7N{TvatgG7uP-_Zsais7G+B|48$PeG|4zBbk0&Nvv0sUq%?9N}s zuX_#}{$0K2`2f#SwXm>EU|Ci2!@zI<{!_TxW0Q1qljp8~!TToB{2};2s#B9mvit6FBx>=3WrXV5t z0$@@Hj4Pg5{}qn|6=Wn!I$ggb%_&?OzdF1t4;S!mo z!rA%TSplfgKSw|{F$h12nZvrvA3}g*<&lSq`uO`(ayDCm&ffPAYCJApK%rVcsQ%kA zK);=KcKKZI?zIeX)wKajG9C(g{`-~OOTPT47a)bdB^=(EEe3-c7eT-0T7#EaoKFBTY9qLr(C8jBh#5A`61e z#53i84w*c%Ab9_A#OO0>xfanX&JKKE2{WH4ve8-CJKmka*qauJ{H??as?k{L5iQO<3*d+}O~6X6_lUL$cXHv{sZUZo z91FqeBb0v$>d4;yM9K2;=0qxmbds*MF$xRY-AFQ9?^<8ko;j!CR=XFg~J{=mWyf-xup2zH=__#=UhJ0?R70;;2 z8#!1zR%ubeI#ec^PyB7VXfl^;>2E$XG&IPl8TVa@orAlADf>vy6ieh?syPoZzCACG z7pKe3k2gpBF)3x&5@4Kqop*t%D{@Dd*CibQ+H$wEV!Fo6Cv0pS^0tj0$x+*3*d{RR zQyi`J88&}=43Z+NZu9-MzN8-DKpaJ5-d!dVTn2f2>IOfKQFCRu4GknFLJ`>dlYj7uoC)X7^JIwQ@6&7C&^?!!F9lkGrlUwZMXa zZk)a&Xc|?4O37DH*pKAMkx@t|e*2VP7{DY2P5Ydt{P7qSP%hox4Q9WIAg#Msi@8$r z0e3K%_tNt8QI0su%6xo$`^U!_u17|6nl;~+JHkP)rAnR~_^Ki3D7_k$kW&Rw=L*b% z4>B_SM+l%*^nutq-^zz^*{wVR`Ks=6D<1+3+7hcd9x!Spoz(N|qk+4c>wLRxV6w`V zERIpzXtCKB`(?Pe0-~{=7o)6*hsk}5#+EQ{`|EQ$t-319t}a67YZl%HYX_&f6UN9lWR-JPBNSW za|@}Keoy-*8og{IW8z?SH%`K-eRd~ff}K{ije;$H;hhrMs+yNb<6#WlE{efQT8R^MD9kL0zH5q$FiG`m8kJYyB-EZaMgANro*i-`f`((%^!0)3 zawzBFG3&rew1RA3k$#6!a37~^WU|w=>BTa!b}wP&0u=7;q3LxHJYzRB(KzpP&Dn4e zs$qMvT76Y?D-+3gvVv*u(U4?SL)}<)GR`Jr*{d2wu{u_s9NGxVFZ+(2N<%>M68Kyt z5b#E?Sa&Z+=YA`TUS-Cr*RY05vzZ2EZBIw5D#WG6nYCay7x_Gy(t`EO&cH107r07}(dy~v-AnfJyjsJL(Q)idQk3$FAs<8UD zmLdwT14=~&1wroE@>*V0z=DEAAt(^!E`)o4;8>(q0S!XrmS_TS!s} zBqRX>atRPZfN%?mWS+dU)_j@|^LbX+B5UQq;pCis_TJC_|DOGvB*+-&M9b|`=1gC{ zZ|c(Pn!5gnCb;JSg$>{w?YaI*{+nY+mT}*kTU~Lxa*=4A?FpZH{^60XNG`&&40l(u z(qfrwGptFmFXCvilUzKnOmGOWeIwPYSS;eK5~BLqTmZzj8fpwkHljP_Xn zoLOjDf)ABCW}ew$f9e#Wbyt|t!cnNk?`btp-+^8@lv!{LlP8n(K=oy6SYjFK@p>fu zfeu=%Z9wHH%mbEmP8RM_2^D%^V&XA*`7Fo#h~le6Y`8ED@D6NcpnB zDh+lUNF~fn9$G0((4QALYz%ux37zFL-n>*XA>SCp9797#X(of?v2r4dj%-BClHp@~ zvb2p_xSt1l&YwK|+5|ED$Inr;_e((7$@_h&nBYED{6ML#WgiA@l5LQB#{jidZ-oPG zYdGHRN2i8Bn_VJ2B0_vHblDF@8eW?#dBjO=+^3nD!_d?fZ)|MH-yg{i9>Y?fh2qN! zTn*FDdh6>83g6cD3xrm|QIX{M?u4Cny&`9HhFQC^A<1#h*j6^MnzFc1g;Ys1uzlW@ zGv0VRQ@6Ocd$fYrX8P3GeXZ9hZ)OshvzeAYYsy;P5feoUp^EDqaj1+ZV>#n>;c4|z zV4?zEbT-Tj^9nS@)z_c#bp8~NVByMQ&QQw*%>CIC~>FdjfN;TdsRz_L{Y*DFG8Mp(JTL%ulAx7%66ky*>THXfFkk`IJq5 zL`BH4i1HXAwa6y+N9G}CC&QgTvt`xgxjT*BY3rf6%zIh}&s=mq1v_ol(-_Y9yFX%P zY9D?*1Pc4K6&J()U3AiUki#xldXzQvBRedTqN#U3K16eDtb;{3RJ5k{q313-j%U@e z54wt#H@xWX1HNSd3)aie^fYOh3lY9XEjf zBQ0XKJe-$SjN<u4frHcmd9OyudB~Su3#oDCeGbqjIS5Oi*|54v9PS#wd5-edDnT zPrQ?SYCQssUf?`1cx@8Qi!j0`5B~Sgh9~9RnVk2*R}-)H#U8$M=Hc)djefT5oI3Lb#-PM zn)?QTZ*d1*rdajsI+wYLD9MN~n+R83%lKRmiv0DxU6~hmXJ@Higlm3_|G*jRkzyxlW@3_UcBoGjsJ)<_)HC?KPK}KEbkd3ZK-|0n<#Rts|;G)9* zVPbh_Win0LF7y+BQf!K`G(HNy&#*qKxTKgL8w_31uJ@<{Xxxi%t#SMhiDl}52N3Y! z=dj~Rz8eYV9!_c^`()Wc`UliI!r^%1>T5M}_Qwy09S%a7o3|Kt5cJK(S`Fy@%lCi1 z{mTx2Il*7S@K+}ID}yYT4S%9k%a+Z{Z)8?l(5?U$ar zW~iYG?s_GbjXZVA8orj4ZX7=r8#+MK~UL6)Gw(Y z#{(hg#r4~VA?VAaoITKsEC2gj@oYNyE2ji@ia;1?YHE7rwJ`rK-fSe?s-UfHc;wm; zDI(oedUsC*2^Nr1UfjADHsqC1&%HqKac?$DSYVf9?(O&Y_T@TpJ;7Kw`^N}SF3&&} zeZ(@<36nx(i08jbFummTbK?<#^i9wM?Zd^(C6NvMbZ|UeF}qY(G{6`z3Fs~5eoM_Z zk|<5xc48(hgUABAy;_k^pK7#`=;l~(=HLGm5n*NCv68k7rbw4$gES`4xZZHMaIkCf zY;p1KvnqUsUDBtu+^b%6fEg+;aj%IcPQ+Z5eOzjlON>}Ezp50vdRFm)i{gqY{*Je| zw?Xm9fheFx+7KCqheV;2Hf?IeeEQ~o&WGQ=^mu4)8KKHsjo4pV(<~Z6f zy$M=0?W1fdP48z%76njH#5kevw@ovHCh*>;==O+-b8+;o?D)(hYV^%iO8SJjnoO=u#LsbHa~Omrkn#9K?e|#9fFjV2s93SMS`jf$8!{D)&Sior_4<0<&02EI!zbPyX zENvE4fobEEj}J|JY@++09bXXA&>1R)Fll~UkbhkZvi=gZQZfK)C|Nbr*143fNQb< z#|sby`L`!BthhJx!Fp2Ap^zb8^raPphrIz>e7X4Saez9(LOcyw5i9K&k+KOB#Jan? z>z#|fsi|X7`on$A5Mb{xunzaekM(EF@3+nsM_AnI{6#I|@1pYz9OL+5RkK>o+wZ>Q zE&vgm@h=LnUggXH8@t+uw2;#fgsw~hj<&hP<7Fr$zNxjo!~h^K)B)AISg(ouew2>EPlq_RB3s`N!PDRk{H!AZUZ(IoG_|c+5%pFT-i#Lw!rp>L|dkO1>X<3CqZ8MSwT9>zOB z*%J>Kv;!uI9C9-O-ilVc|BTvZ;Dra#L}pC*)Qpf<_Z_l14Mb&BI(R4uLk)<&GWw}W zVi`XC2bg+(E!hNY5H$1rdH~l9<|QSo8*&(TWQWQT|Nipj5g;vlfxLePTs5?!$1rW> z<>SNl9$D}pQC6&FEcj86+1@K`yYODzPa z*euzIq-=0NLgE3BLjv?K8V$;$ccjQ_{j{KDbCT;7cR&M|+r)Kgn~it|Wox1YbZpqL zE7OmHKCTPL-0e;Pa_~sk+yi8Fz!Vzq4E_#c*Ve7DHUxd5*7xxi?3Ar?r3*}6K2!53 z%TVUP@v72dzeZeyK$@wc-3y*3VHv@xbpSir&cC=1jOH8cCrSuDpBO)n%h*`}OE9s3 zE~BwGqU9;Lw6(smZ#uV2A$v^NA&MJ1(2{U^Dn%E)8Ox zpBhj+nDpor;JfIeFTOrD!^S(=?fv#-FUUL=K|AY9%~C2**bD4GpMMSt zbHm;qOcSTohlkQuj-)L1nG|Z*wS627A1RGn>+@>~yrpe7KY0??^u1!aJqEC!A+qrO z7t_d{h0vM%X!*OVi;HoSJUk<@#%~pR$DQzQi#(-QFUK@2k!w4vM8l zJ-hfj+Mg6O))yv+@X;F^F*z}<5kdmh3G2T}NLw#QmuWa>ywy~2O4Q@92cht);8u5B z4WYUJnvfP=p}?Z+rgQDhdJZSu6i8HCd8$z|D}qRA>)fSBoAeELR~PYZ5(-2TUX3p` zW#OERaf#O2IoM|_-PLfjg`{Tf9TsyRnCAwtn%)b_8_;8vK~FK<(oJ5*F-kCxMu-A|gY zKr6yw$6Al_iV7=pnuQ6ib&Jajt125JpteSq+x_y|9vhGnqT3XGODZ&(Zmn_9OX%^g z^+Xz)>lDk+53*DTAPBBkS3nB^m2DuAC3RpCguM4=+TLUoj_d=%tAvH(~%G~dR#5f=I>xf4o7s$!2L^N!C zAobLx*Ho)Z7iqR`*p35Rq>3#K2ol#Fy>$DNr(5wF=cJ-RZxhzA7;>6kIbL%~XTD*5 za@K{CVAb<)5G0M{{gUim_?cqu(rtcWXRTQamhrk7G4hgn^5Y&TGoiV*5gSEEaIsd& zR(|b88`rW@ksT5v2}@+~sSIAYv9Si{cK>rl2);<* zpX%=j2t%avw)`7z|3O?V3kFx8M6RvJ=55Z>>S7U;!UMwTdQ3Bdj|KZ@CitQRK8*hT pRQ_aL?W`{ZO^#Pn*j$xPiV(BT9|QmMzW|_XGSC13 diff --git a/documentation/manual/source/pics/configuresongs.png b/documentation/manual/source/pics/configuresongs.png index 19796f3b5b49a79d9fc74e19ff33799ab049f351..9da70deb27a681b03874b7f746c370409b2e309d 100644 GIT binary patch literal 43736 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 LJM${jEBF5m=gp{O literal 29651 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 E14)Zo2LJ#7 literal 46101 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

brnC)GnD_5R? zD+82@(BiYQ-}XW+BF)X_yd>kF*^1FeMn-}_V0|x7{Wdilev}Qk@CNq)`PiTiN67Bi_rbn z;4yFW@wv&xg$>TY0_eR#^CwuS$3Rbi79SssCGVJZ8|T#H|5b1i3$?)FHZ36^Z_J4k zr>tyjCL^sTiODV}F}wXkkT}LytyFG&6$FXgutm_L#Q@PKFCVfRv}tW4^(SYM@u1=k z&XCixus{@7hZPN2nP*a(IkrV`245gzS{T)^F_&K%w*GEFwa{HU+ZHLVHLiO)5Kp_F zP;z2o$qyuh+~&FiKUQzduxdCZ>NhN~UD51ydAe)&S66FY=XUD~^cwZcOx)aLw6y8i zHmeRx&kedJ8bI6YYwss^b`)r>kKu*BACsRg%Awns(jA?ToD|aXC~)LX$q#6RavZ7S zsf9ro2BpDJaZf1VBITuK2c)Ycc)oD($sa{Vd;>c<_@r(Ot8WG#UB>*}ZY*5Vq^wUq z-`^9KTmC!=cn@X+6r)bw0dNd;t^8Wp1m4-}{pB1gScY&Sih%!%5^$o#61*!=dVnv< z#gIkzhcBJIyY4n#t1M{9&Q^^L&x=p(cboB>E*$;^0K#E=M&nTaZg`TxQi7}7+AuiL z*S8!M{{8n$^Nt<5m!`HH^o(&9*HuumFOz@NCRSzqr5qWk^7?(iU*`_DM=a*AjtiLEg{I@%ZXPHJkSFHM>+qc#8!qNHRAG2h|(o}A7BDRyVZhrYkB+8;Jq zu!h9wFVIOz@*l~WNcb1`KGS8G?v`1K(g7ew7xKGs&l10@^rnRmVH~|RM~9Zy_K!2g zdNV1-f5{ap3L1MjNoxms<89k}J~)o%*JXT!A4QYOfZJrtYy$1s#bN;ot!T!9^mkD5zPqp*L zx82*Zkn|V?F-`xjyI62yWnuX?RD2;-K={WZLRL-YHCTg8WE4+*_(N><5g!}GyLQyL zYUVrj-MxJI3M|pG($Zg2@|$-L4%SB#Jt3atGF3b#C!ClcP14=NpO}}2@9|%qPefx3 zY0vK~sRlaueCHkW4g1-o=g+T$R3sWnS%*S}gmq`i(qhicmx$r( zmoFy_Xlb!pT3Si|rN#Meyf7B~BYQ~tJ3w_SOGq=NgkY*YQ`Aq4&qx@K?Vw{kvaL#yXGjIV|^R zsgjYARoEBn8t7wZ%gO@v--txU0|msYvukO`36b_#00@m-sr@aTO~Wk#RCZ!Qy2>qD98f{;mVN)ivcm7GA2_ zD>5aZ14u^^c;(0!^3{gFr8vSmg}z`Ph7+- z$7|-V7_aLJ<1|dW51qGToFYrmy)!%`FUcWjWOqG1er}``;WXs#hA#gteb8+R__?@v z;WKQ@WeJeDm?ojeud=S~^)+4c78gxeTbr1VkI$~l0AovgVq<8q!Zu~&+_ziUQU-NKBv-*Soy+21iStC7{e}1GUanr}o z?>d-7V}7WCuo)agOwG*}zx6u#T8|&V_9nAP9D>X7A08XO3NmrPf zt$!i|>Q9fsUa9U}52L)KsVVM-q+}AVtxI2N#AOgY{qeSD#|qO|FHv^1k+4P_l@9Ih z?HE8j&F#Bafp_4b%bwpneP3_kN~7O7{lndJ7*9ERf1}k2#g?dSQ=1sk`EveE)Ya?( zDHrL|d-jDa-H{LMNUu&u)h=VS$^u1Upl_s=jFXZSy__2kfeeru<(c{7FN?x};Qyz_ ze9bR8!ig9=qH0x?XtN+=h!}so#z1Q!IOol9& zxr(sd-h64@hQ>zDUVJRM(_gu;5{8HJwX1I%A;*yC%`_{wZOlgZ-^|o*1tlfxh6DxO z6prF|e+8pNk=`av?yhM$1PUdUl^LCxHTzK}9nEeoC1zWcCgI<|(06VaJ6@*|%A!pDCUE3@W~?n5|!buIBN8 zqi*B3o*vnw1ODs6q}=v7@F6zKaZf#C9IO_yc&+pBU9jwn2F1jjM?9sbrOh@nEEE`l zB-ZmadCSVGK~oD0DpNK>BPTpIo+;sAsqxW=-Q+mf-!}%k`FW%6CqY1#=iL&*4=>-_ zfbS%4FuM;|_TH^qb%~Qs+e?`MyxisFRIapNmVp!_6vWkpmDdIhJ02`Mgv7;Z%&?zG zxb0s$SC)zL|6{b3=z%){0t%pP(ZES4Ql}<9Es#-_~7LtnATaoSsNGd{RoGff@iqBWu z^$Y24-I8qzBp)cKYqH(?#+;g#a`zsqDtmNpR;%X?eDddVT2hws;nGHVMT^zMd}Cuy zhwIGK_Ay2gr)I9_oGR0aZQ)B5#37hpTpmHqr&G=QL&wz4am{F+mTF<~*i^A)T~661 zN6#Fn_38zO&T3=wiy82|FT6sZDuT8A^^ttFj!I;WG~)g}DVbIkl@6K|y!KB-`8ASsg#ufe zo7a!!&=8rlU~l5UW;l+x8t=~jz+Z#g+-Y(M1IS* zD&!WyW|psA6|&_agV6Z0wg2mAuRAPvMHCj_)F#+14~qv~u@>(U7=eJTgtfJP%*o6` zIGatSeWg00cKz*e@oEA#9@%^zC2t69tTn~-(8y@sY3`@=dED~~g)i)k>Z>-hGc5$ z?Z{)_8Q24{Z({g95EivQE{wvCj*d~>4sj}_$PODF_#fCdZuP((r9iB7|yMEUm2Tm%2hdvd{OZ5 z$2P<^+t%T67>@lYKTlwhy0)ee1xa9-7k9`;Bjae{QrHTKK1!xg9t?e6o`PlcN9P*bOhE!S*z=(I;L z%l4%6XUFm{f8Vv5MD@x_YFftJ_NU_4a7Q~zK@IHfmgMW-hcMjPH?=dp6Aiwo`R>&H z-DHAd2UB}N`ZawvLVe4a>1hoU2AqHd{v4p z6Ct)vdCEpurOfis^s@3s->QlXu@Ys;`F7JVx9h+eY;7NER`ppoC-n;p%PMdVeC zl1eXGl|K8yXkkI+y0gq-4W77+Wyp~+>8&GZwbu9?7=JCj3B70daaL}|$H>S>wXb5Z zuQ@9$SU0p?UsnHF+K*8a!|~5JC}-;+W5_%gRyka$baLybhb_6DgIocwLstcAk;2@) zZLVnwsw5@vO3>}pwA9ed(KAf7IfH}5qrED(sD72>G#@NDC^`4tTZ$#9LOKSln}JJrxv6EvKv?oGYmQ@!H_HaCD{hD2%xF_y`b3)}w@kvmL%yEJ54B4Cpt9IQog zxY_x7_Qs7HXEeRp&9WdesI|Ra91JFX{8VJQFz(z`lxm&OL6nvlm2BK_C!ryFZ;{ zpG)?<-+DkzOKnuQZx=u$-R6^$yv%O?L+O}zwHUYdaDVYk6R=d0fJ=#piO~<*k3UKx zjlq)$DzZSeTW7U)x-Z-2Mx^nSi0tDG!9o|O9AFG;Hhuze`nVeJmF!g<>ID_wY zrer+dzG=gGhNCUnQAMag+CTMhg11n4;DfdH5f`d4{Jk08oTU;0>~4EgK12T-r|V} z3wMG0>I&8I(wV06ii#{vWKGn4t0XYX7QqYOP~Uj%5cM=D&XGpuV0(4I0qKs&?CK(Y zxb`@fFE$zQsq%_)I=JpV6O)~4O~Ori$yJCQng41vryNuLB_T*O6o5vfo(Z)7D#HQwKv?LB^lPNlSH zA-}V1uxAbJuw?`I4#F&AEA}UMrep$-CU;)!9UO3P#Vx|qQ868+x&>i%8u=Db9DRA3 zBChrnil|UjhV(W2tW5ZbfwY%uyyPvl?6@mrZ_#$DmRq1ze1R zVd0Duh$^?XRV}h0$~Y*cIXFoUB5_B1GlN$ax?~wtHPRy@E+F-p?q7dI!EIkP-nrRe zRWu6m7$#e~fksP&x_x)6ia}4CT{cL(x4*ApxdeHoP@fU1Tn-9|G1p$$u?wn4iPkX` z8F;WQMx9q(D>gg0w>pKWLIVR!C zRe`aeY5PY|V-pk&z$g2E)_KDhA*>OuV9j!JX(N96>=|8^9hrDMI%W(~zdjX9zb&^c zKq}57RJB31ky*LAqP%34*8Zy7EsV+FDZ|xrzU^;yoRGtp6EaC%tHOg^fQ?7SKO}NF zCe0yVp7?xQIdW)!pMS(|Yw!{t1zPHTQ_cFq%{S~8dG^cP-=czLjYqg0R^)cxjXZ#q ziBWf?>!+b5m2%@$g@h8Hq${%3QngdOdZbB%F2=Z z2mEid21XqgU!e&y#G@DcQf&;{<5*QeEe(;bWuV_kNjxUb^7#D7b)&iI|Fw6WQB9_8 zn$ZDAgkdefC~XHpgisu%kHCxwOhBrH5~?DCgd!y%T~T2Kg^^ywfb;-~5FkJ(I*14= zJwdu6p(IohgwXbW{l2q%zTNq;XMgUQADnPPc;Dp7Q|{}&ulu?<%_2Vil)fU|!bmXZ z@@pabTA4%f_6n>h_t9w_QU6-y~DFZRT0?>Grm;aHi@l|L5-XaREY2M zKO+(=rCqbbuRLDC*W_O;10XTcUpz~C%Ern{OY5;2Cys=UOydp*oc?%csCqZcPb|zW z2?X*yjL$_yY%Lp%25yRR+PZTMjg2q<$)bCVH3a`7CTX&x85ASh<-Ee4r zsL`&);C_FC&Vm_;tu<{-iL}0Kz4n`4^C{}F`sJ4*O2avdm`;0jJS!RSPCtTT$D#V< zhZ7czOTlwlOX1=%ZSmrC)}5|N+hIFuz$|tts!u1vlu`JAo$}Dv0#w8>4>DDfgVw_D z-TIWAl~uaF?zXy;8uTYo= z`^_&wbfO&mNy->zFVW~%!P5J6*ZYjsWb2}w)*pN_K(>aC$R2m#(XUeD)n2u?+X|r} z!4ycFpVMNk9UA81%8^7O_GLf+*V9R=jSbgPZ1&ysJNMl_u4J__ejcuy zMo$q;xl6Q2*-j2@N~3mh6TZV;mWVGdi%`V4zRfl=cX;^;*^Ic}A6mZ=%3f}3OAZ;i zwf7!?9>vw#SU>MXWu5G_<+%enUNBCda%5b8-Q*u#anRdU4CK|X&Rh0S_nKm zLvTQtX4slnTk1s4 zyoyOq4Vq02LLG35)L6Zk zoH!Mmx5~rA%`Pb-D5@i^{(2FnhM6v|<+R#hPnM04H925P^^t(~mKiAGTL0pl<9Oo| zNvhqO%3f6)Go!7E_2*nVK1$DvK@1*VQu23*B43k2z_ZL37ghi5!-w+E9|gv7Lsja= z*~iKuNR>Tv<|54G9*`QY3LP*pessz_PdwNXYS7XPN%=^i*`*@@XyyTy)82+{j<`M5 zuoNXEf5Y~5s?q=$dK4q!Ab|W#4cyfX*3f?@pW+FBnP~b;JR`@^_4KAGoD)&=N|Xw( z4yQq`XthyIF?sc6%fAMDqIf| zw#*M7K6KZ{|7#ZS$@quj+Ippegx;b1_wF&?ss&kqleb(IAx!#hN@f2rbUgldl(frD zFvJdt`d2L^PF37~02DmrMQPRsS? zE;`_KVau@m87QJdv>-C)^L&ws+W3>8@ldk!IL3Ozo!%kH;bf8N4SEMgBigb#ew%^N z_?=R_2vZcsmG}D{Hg}+L=C|zkgh&?HP5>B8ikgSmJs(I5EBs!ba?1>Cx)5`5Ta>!Cp5fn-e?p*kj?8uH*|`qGtQ!V_JEqe zRCl^zVsmq|6zKL$-Z1;;nvIT*)(jI%>osjkoHDd!tu8HfI|PlDfLiBx$D23(tUKTG zA5&h6+A+*>iDx+Up4DzvHNZ^TXj+h)n+a0wbb7V(@U6Z30=(jc?sBe;mD!eTV+`mN z53Xl|3jZ^5&wC4Hg|}DxCW6My{VbkD^NHtgF3_A{w~=0eIOj1mW+tbn+jKKv*Y$Y6 zs03XfkVzHx+?_4Th6QPr!IF#pOL)Qi-FMyKG{GyjiG=!BL?CL6{e6Zch_d!rYzpTU z5EuY$3f2nsC5tlR4mIG*8x)L>5wZUy*-u zQqpmdb#!%e!(qc3q+~x{iIx|N3t3&r1Kl0=WP4IadqoGGjuBVErPg-AFWbP`yL0bw zN_u)eEP|6KRINZjk04&V`;A`P3lEqILln1!mk%VIPTFW#SU26j-`un?NGU2b$tHp! zHY9nC!r=-ias%;0OSIf+k3=izP;QA4V6WiW%3j!>FEU2GUI(eOupF&vHC{{>iwFWm z?8eA#BLwpTbG~9a+s?@L$k!1`RYm0ykSW22E0;o(7hIx&N4SEhSkkXCh*2Mrb zW#i}x%Ot)Vl-sK#T6kbhxdRs?#?mg!qAh3-TJzESVyT)xs7STK} zS}LX1hf!vmxjvax4{;<=!%Cc*n~>|k(4MB8rqfKFKr&nQNoY_jn3k82oFX@DA(pr7 z>%PhvC+w3(C&}ntn@BQc!Kgvj4y;pXf`<<)z`nc}W zhe4X?q%SGCz)?+2ZFOPP4qT!tKt>L8#R2Tb6@240uvE*fv)W%6iBBx)a0dFIL92_@ zFmm=m_~o+rqWog;caM#G(37_tR@T3R-~u&#J$h_xtiUmEe=LU<&2~vR`{<0%&TB)B zh&Q?VR%9E}z8F4w`(gSt^$4WqElnZ1@PJ;e+<`z47DVFQ{+eI47pWvL zrL+@&i|kEwL%nbD_kwOCzuyN`4G(<(iwBJ2A_WS?X5MpwOy(fu6Hsvl#JCbiD6Pqx zm_QoyRck9I)qE8cBVZs4VJ+TBs_q%2BOgO)sTktr!t6nj($ARpJMm{AgB zCdJOK#{dE-sOqmGl8Uh!EB7)TJs1sl_w3!vbj;JQXd9Y`#MNc`^W$yRn^c_uDHX~g zRQZm4BFhnDG@#;D_9ny{mH*i8?v@`K`6Mr2y{612=tMvgG`vW0)Ei@F_7tRXO6$u! zj>}9}tu2m|%d^zlC25&=?2o&pJ^46Rk)$eiHq3r}K{IEE>O}5-#__{TAJb$7n8dHm zZ4$Hxmy(9=4l*4mO{|cVU9qV!12`mq^7AhrY7C_UFel1#^N@tj^t`RI*kJLMN8r`Kik0(Ur8xDb}AhPJ7_y zgZQgwQG1|%z{QnT(hJFyspH7Mb44T3F4xC*^J~1pqTrwe4jX3IuRlfT6uG+l!a1`= zf()l?2_Rf%48~c4y@8knysh}rqenAOU5Ww^Dg|)L#zPY-=wwu4%emXsfBu;bvgW7& z$AEw;C?A$0!eWMO@^46r<+`4F#8xfXOQ8e=1R8gDHaVcfjTC}#&u)H$g-k9cEvOaA znL}nU2Vu}cxoH52Sc)Ep818ZgngfQtsIYj*uT~yIVH6r*tZ|GobHGrjI#x%^feYUN zX1N5woHbHMaSUIjM?vj4v>X`w`QU6OD=GPex0L1w2#^RC%p9omFz4pv(Y*Zp7$}}W zb+dpv7Gl&A&5sJ`1dLHuTdNMPi27i3RuWr@;ztJWnYy5F>7O7cpc3+V=0J^UrZSq` z#PN8(B8ajo1`A3ewA>*+SKuQ;awb5)ga8pJ6_!8%3dQ6?D9@Bxl@?yecmgpo9WbnJ zG@m&z4W0)Bo%+)VE1bzg7iS6+nNiN;;2%TAv$Y3` z%@f=~PzpZ0cLBpr5Q<3fc7ar(YPS(CnNOusky#D!t{5^^ch^8EBnXHoGF4ZNqoDBi znN4m6Mu51vzW&wctn#;4QN=}|{{rU#_ZRD7PgR6e1Qj0cwmZ?$a>~k8?}IHY5;K*r zSrj|Ln~2(G2A8{H##|hPzy*#7Xd1j@b3y0P{^@R;L{Ks4IC8H7{~{hKG=sG&(I}0? zqO%tyyJ(NDBk}$zvyE}5axhg9wl@Wkb17D6Sk+TiXvr3P8u7=|BLo5xf$>?xFf#O;Pd_nE zd_8PFzVpI_;$EiQsZbR`AmtBjj-92AKzH(=sRgD~vK@i07YxVCQn>6_$oWIdRZ9Ei zijyB-?60e>PlbX?f@t7O?Q3S>ANHjfi}nE*>hP6^0niy-S7&7`)gaoWq`|Pa4M0x1 zuh(z6T!HZYpzvUEJDR_={*ebz6m&n;vE*#!Q!gj@;%kb>FxANc>c&6vlSnUEic091 zKFcpete<~LdeC{9e;%+um*~aeR#zjNEMi2w%|CnqNC>8=N^RXF4 z$eHNOCoF8u{Vh+2;NC>`D-f$Ch)IdFO*-anJwzeq?i9U@&-e=iKrPuB#lJmmcf9 z)%>n2J|&Ar^8knGiCW+x9pXr3e7pAAQ*4q|SFi1ptbLEH# z!$3!qcp3>)xJb%Y=sGuv;6zV1i8YFVZLE5`ULr03Sfa<{6`!2}mCl8r@^?cJ(cXNW zis`+EF6z{-?9w*LURj)-uwu+>Cb3omPR!a#Yp}`JeROC@y!^``lXbyHM?uygvb=Jd z{B*eBiO=nJr$B19*7J?I_GzBghRdDY@ItftE$(H}?EQ1oV}~wYM_ur}^>ZXf%T#aQ z>ejyrz~6J`KKTdk9FN3n>D(TcYO`X*@v^LzYZBm3&ssaWhBgx7u(mpC#e`4+S`xAp zkf$T3)3(CG7n)tMwq3hJws&ubm@i5pL0C?}#?j4@?udnEX;RrRW?f5MfrBg99{D;b yl@!94r?Y?ZIeNaYQD0Yrm*0$YQJNp$-B*)ylkr~n`U7~13$15zo^;MR>OTPdlbX~3 From 504a47149183907b6f66fba3447be4d0e9aeabd4 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Mon, 25 Apr 2011 11:13:13 +0100 Subject: [PATCH 141/148] o123hallo points --- openlp/core/ui/printserviceform.py | 38 +++++++++++++++++------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 6d6f1ecba..08b229ad3 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -46,24 +46,22 @@ http://doc.trolltech.com/4.7/richtext-html-subset.html#css-properties color:black; } +.item { + color:black; +} + .itemTitle { font-weight:600; font-size:large; - color:black; } -.itemText { - color:black; -} +.itemText {} .itemFooter { font-size:8px; - color:black; } -.itemNotes { - color:black; -} +.itemNotes {} .itemNotesTitle { font-weight:bold; @@ -74,21 +72,28 @@ http://doc.trolltech.com/4.7/richtext-html-subset.html#css-properties font-size:11px; } +.media {} + .mediaTitle { font-weight:bold; font-size:11px; - color:black; +} + +.mediaText {} + +.imageList {} + +.customNotes { + margin-top: 10px; } .customNotesTitle { font-weight:bold; font-size:11px; - color:black; } .customNotesText { font-size:11px; - color:black; } .newPage { @@ -188,7 +193,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): self._addElement(u'span', translate('OpenLP.ServiceManager', u'Custom Service Notes: '), div, classId=u'customNotesTitle') self._addElement(u'span', self.footerTextEdit.toPlainText(), div, - classId=u'customNotesText') + classId=u'customNotesText') self.document.setHtml(html.tostring(html_data)) self.previewWidget.updatePreview() @@ -197,8 +202,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): # Add the title of the service item. item_title = self._addElement(u'h2', parent=div, classId=u'itemTitle') self._addElement(u'img', parent=item_title, - attribute=(u'src', item.icon)) - self._addElement(u'span', item.get_display_title(), item_title) + attribute=(u'src', item.icon)) + self._addElement(u'span', u' ' + item.get_display_title(), + item_title) if self.slideTextCheckBox.isChecked(): # Add the text of the service item. if item.is_text(): @@ -244,10 +250,10 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): self._addElement(u'span', translate('OpenLP.ServiceManager', 'Playing time: '), title, classId=u'mediaTitle') self._addElement(u'span', unicode(datetime.timedelta(seconds=tme)), - title, classId=u'mediaText') + title, classId=u'mediaText') def _addElement(self, tag, text=None, parent=None, classId=None, - attribute=None): + attribute=None): """ Creates a html element. If ``text`` is given, the element's text will set and if a ``parent`` is given, the element is appended. From 100fb77456fe162f3a996f4c8d4fee77f5f8bb1d Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 25 Apr 2011 11:26:21 +0100 Subject: [PATCH 142/148] Fix double edit --- openlp/core/ui/themeform.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index 621493488..019ab5bfe 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -435,7 +435,8 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): if self.updateThemeAllowed: self.theme.background_type = BackgroundType.to_string(index) if self.theme.background_type != \ - BackgroundType.to_string(BackgroundType.Image): + BackgroundType.to_string(BackgroundType.Image) and \ + self.temp_background_filename == u'': self.temp_background_filename = self.theme.background_filename self.theme.background_filename = u'' if self.theme.background_type == \ From 5bc0c27970d112c749a359f05bcef06e8c388437 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Mon, 25 Apr 2011 23:15:38 +0100 Subject: [PATCH 143/148] OpenSong fixes bug 759586 --- openlp/plugins/songs/lib/opensongimport.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 37fc2b5ef..4d32f7f81 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -32,6 +32,7 @@ from lxml.etree import Error, LxmlError import re from openlp.core.ui.wizard import WizardStrings +from openlp.plugins.songs.lib import VerseType from openlp.plugins.songs.lib.songimport import SongImport log = logging.getLogger(__name__) @@ -209,7 +210,10 @@ class OpenSongImport(SongImport): verse_num = u'1' # for the case where song has several sections with same marker inst = 1 - lyrics = unicode(root.lyrics) + if u'lyrics' in fields: + lyrics = unicode(root.lyrics) + else: + lyrics = u'' for this_line in lyrics.split(u'\n'): # remove comments semicolon = this_line.find(u';') @@ -230,7 +234,7 @@ class OpenSongImport(SongImport): # have we got any digits? # If so, verse number is everything from the digits # to the end (even if there are some alpha chars on the end) - match = re.match(u'(.*)(\d+.*)', content) + match = re.match(u'([A-Za-z]*)(\d+.*)', content) if match is not None: verse_tag = match.group(1) verse_num = match.group(2) @@ -239,12 +243,13 @@ class OpenSongImport(SongImport): # the verse tag verse_tag = content verse_num = u'1' + verse_index = VerseType.from_loose_input(verse_tag) + verse_tag = VerseType.Tags[verse_index] inst = 1 if [verse_tag, verse_num, inst] in our_verse_order \ and verses.has_key(verse_tag) \ and verses[verse_tag].has_key(verse_num): inst = len(verses[verse_tag][verse_num])+1 - our_verse_order.append([verse_tag, verse_num, inst]) continue # number at start of line.. it's verse number if this_line[0].isdigit(): @@ -257,6 +262,7 @@ class OpenSongImport(SongImport): verses[verse_tag][verse_num] = {} if not verses[verse_tag][verse_num].has_key(inst): verses[verse_tag][verse_num][inst] = [] + our_verse_order.append([verse_tag, verse_num, inst]) # Tidy text and remove the ____s from extended words this_line = self.tidy_text(this_line) this_line = this_line.replace(u'_', u'') @@ -268,6 +274,8 @@ class OpenSongImport(SongImport): verse_def = u'%s%s' % (verse_tag, verse_num) lines = u'\n'.join(verses[verse_tag][verse_num][inst]) self.add_verse(lines, verse_def) + if not self.verses: + self.add_verse('') # figure out the presentation order, if present if u'presentation' in fields and root.presentation != u'': order = unicode(root.presentation) From 86a05a38b5cb3d54adb3bdf0f94c016747e60acc Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 27 Apr 2011 11:00:37 +0200 Subject: [PATCH 144/148] Fixed bug #752212. Added a revert button to revert the image to the default OpenLP image. Also moved things slightly to for the dialog to look a little better on other platforms/DEs. --- openlp/core/ui/advancedtab.py | 46 +++++++++++++++++++--------- openlp/core/ui/maindisplay.py | 5 +-- resources/images/general_revert.png | Bin 0 -> 737 bytes resources/images/openlp-2.qrc | 1 + 4 files changed, 36 insertions(+), 16 deletions(-) create mode 100644 resources/images/general_revert.png diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 94bcb0801..7172701c8 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -41,11 +41,11 @@ class AdvancedTab(SettingsTab): """ Initialise the settings tab """ - generalTranslated = translate('AdvancedTab', 'Advanced') - SettingsTab.__init__(self, parent ,u'Advanced', generalTranslated) + advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') self.default_image = u':/graphics/openlp-splash-screen.png' - self.default_color = u'#ffffff' + self.default_color = u'#009900' self.icon_path = u':/system/system_settings.png' + SettingsTab.__init__(self, parent, u'Advanced', advancedTranslated) def setupUi(self): """ @@ -82,14 +82,6 @@ class AdvancedTab(SettingsTab): u'enableAutoCloseCheckBox') self.uiLayout.addRow(self.enableAutoCloseCheckBox) self.leftLayout.addWidget(self.uiGroupBox) - self.hideMouseGroupBox = QtGui.QGroupBox(self.leftColumn) - self.hideMouseGroupBox.setObjectName(u'hideMouseGroupBox') - self.hideMouseLayout = QtGui.QVBoxLayout(self.hideMouseGroupBox) - self.hideMouseLayout.setObjectName(u'hideMouseLayout') - self.hideMouseCheckBox = QtGui.QCheckBox(self.hideMouseGroupBox) - self.hideMouseCheckBox.setObjectName(u'hideMouseCheckBox') - self.hideMouseLayout.addWidget(self.hideMouseCheckBox) - self.leftLayout.addWidget(self.hideMouseGroupBox) self.leftLayout.addStretch() self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) self.defaultImageGroupBox.setObjectName(u'defaultImageGroupBox') @@ -109,26 +101,42 @@ class AdvancedTab(SettingsTab): self.defaultBrowseButton.setObjectName(u'defaultBrowseButton') self.defaultBrowseButton.setIcon( build_icon(u':/general/general_open.png')) + self.defaultRevertButton = QtGui.QToolButton(self.defaultImageGroupBox) + self.defaultRevertButton.setObjectName(u'defaultRevertButton') + self.defaultRevertButton.setIcon( + build_icon(u':/general/general_revert.png')) self.defaultFileLayout = QtGui.QHBoxLayout() self.defaultFileLayout.setObjectName(u'defaultFileLayout') self.defaultFileLayout.addWidget(self.defaultFileEdit) self.defaultFileLayout.addWidget(self.defaultBrowseButton) + self.defaultFileLayout.addWidget(self.defaultRevertButton) self.defaultImageLayout.addRow(self.defaultFileLabel, self.defaultFileLayout) self.rightLayout.addWidget(self.defaultImageGroupBox) + self.hideMouseGroupBox = QtGui.QGroupBox(self.leftColumn) + self.hideMouseGroupBox.setObjectName(u'hideMouseGroupBox') + self.hideMouseLayout = QtGui.QVBoxLayout(self.hideMouseGroupBox) + self.hideMouseLayout.setObjectName(u'hideMouseLayout') + self.hideMouseCheckBox = QtGui.QCheckBox(self.hideMouseGroupBox) + self.hideMouseCheckBox.setObjectName(u'hideMouseCheckBox') + self.hideMouseLayout.addWidget(self.hideMouseCheckBox) + self.rightLayout.addWidget(self.hideMouseGroupBox) self.rightLayout.addStretch() QtCore.QObject.connect(self.defaultColorButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultColorButtonPressed) QtCore.QObject.connect(self.defaultBrowseButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultBrowseButtonPressed) + QtCore.QObject.connect(self.defaultRevertButton, + QtCore.SIGNAL(u'pressed()'), self.onDefaultRevertButtonPressed) def retranslateUi(self): """ Setup the interface translation strings. """ self.tabTitleVisible = UiStrings().Advanced - self.uiGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'UI Settings')) + self.uiGroupBox.setTitle( + translate('OpenLP.AdvancedTab', 'UI Settings')) self.recentLabel.setText( translate('OpenLP.AdvancedTab', 'Number of recent files to display:')) @@ -150,8 +158,14 @@ class AdvancedTab(SettingsTab): 'Default Image')) self.defaultColorLabel.setText(translate('OpenLP.AdvancedTab', 'Background color:')) + self.defaultColorButton.setToolTip(translate('OpenLP.AdvancedTab', + 'Click to select a color.')) self.defaultFileLabel.setText(translate('OpenLP.AdvancedTab', 'Image file:')) + self.defaultBrowseButton.setToolTip(translate('OpenLP.AdvancedTab', + 'Browse for an image file to display.')) + self.defaultRevertButton.setToolTip(translate('OpenLP.AdvancedTab', + 'Revert to the default OpenLP logo.')) def load(self): """ @@ -184,7 +198,7 @@ class AdvancedTab(SettingsTab): self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) self.default_color = settings.value(u'default color', - QtCore.QVariant(u'#ffffff')).toString() + QtCore.QVariant(u'#000099')).toString() self.defaultFileEdit.setText(settings.value(u'default image', QtCore.QVariant(u':/graphics/openlp-splash-screen.png'))\ .toString()) @@ -232,4 +246,8 @@ class AdvancedTab(SettingsTab): file_filters) if filename: self.defaultFileEdit.setText(filename) - self.defaultFileEdit.setFocus() \ No newline at end of file + self.defaultFileEdit.setFocus() + + def onDefaultRevertButtonPressed(self): + self.defaultFileEdit.setText(u':/graphics/openlp-splash-screen.png') + self.defaultFileEdit.setFocus() diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index c413ec8c9..30457f569 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -142,9 +142,10 @@ class MainDisplay(DisplayWidget): image_file = QtCore.QSettings().value(u'advanced/default image', QtCore.QVariant(u':/graphics/openlp-splash-screen.png'))\ .toString() - background_color = QtGui.QColor(QtCore.QSettings().value( + background_color = QtGui.QColor() + background_color.setNamedColor(QtCore.QSettings().value( u'advanced/default color', - QtCore.QVariant(u'#ffffff')).toString()) + QtCore.QVariant(u'#990000')).toString()) if not background_color.isValid(): background_color = QtCore.Qt.white splash_image = QtGui.QImage(image_file) diff --git a/resources/images/general_revert.png b/resources/images/general_revert.png new file mode 100644 index 0000000000000000000000000000000000000000..47d7415e279876d68e1fa4db643045c572be29fc GIT binary patch literal 737 zcmV<70v`Q|P)xv}~cde{Q?GcXw{PyWh_4=F~7c@Zs=-^ZopOaLy3{5FjgoAdQm# ze}r=hD+N-U%?69r3Y*;y$HD>@oK84hF1XxoxG742@^}PjhJheiAxO7a|0#%tJyDp5 zAbpj<%db&h_8Y_mQKNs^|hhcwz5}xr(U`$s8WTy8PI(;Awd>=Q0+! zAqm=5i7*a!3uAH|2iomGd(8=$TMrUR4lF&V(Oi)d7Nm*pp51O~yu6jylqK;^*Y`kM zDM8bXZO|$+;c?j!3WdP)Jo?%jG2EJmfi4Ygeneral_open.png general_save.png general_email.png + general_revert.png slide_close.png From 35cb2b2fa67f883432c03918c3958d868cf8ac3a Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 27 Apr 2011 12:30:29 +0200 Subject: [PATCH 145/148] Fix up the multicolouredness. --- openlp/core/ui/advancedtab.py | 4 ++-- openlp/core/ui/maindisplay.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 7172701c8..b6dd1cb27 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -43,7 +43,7 @@ class AdvancedTab(SettingsTab): """ advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') self.default_image = u':/graphics/openlp-splash-screen.png' - self.default_color = u'#009900' + self.default_color = u'#ffffff' self.icon_path = u':/system/system_settings.png' SettingsTab.__init__(self, parent, u'Advanced', advancedTranslated) @@ -198,7 +198,7 @@ class AdvancedTab(SettingsTab): self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) self.default_color = settings.value(u'default color', - QtCore.QVariant(u'#000099')).toString() + QtCore.QVariant(u'#ffffff')).toString() self.defaultFileEdit.setText(settings.value(u'default image', QtCore.QVariant(u':/graphics/openlp-splash-screen.png'))\ .toString()) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 30457f569..7843284b3 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -145,7 +145,7 @@ class MainDisplay(DisplayWidget): background_color = QtGui.QColor() background_color.setNamedColor(QtCore.QSettings().value( u'advanced/default color', - QtCore.QVariant(u'#990000')).toString()) + QtCore.QVariant(u'#ffffff')).toString()) if not background_color.isValid(): background_color = QtCore.Qt.white splash_image = QtGui.QImage(image_file) From f732d24f35aadebecec2d0f232f2a7871122fd2d Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 27 Apr 2011 16:54:27 +0200 Subject: [PATCH 146/148] Fixed bug #744515, OSIS import fails to import certain words in ESV (at least). --- openlp/plugins/bibles/lib/osis.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index e2eb25b4f..130356241 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -37,6 +37,9 @@ from openlp.plugins.bibles.lib.db import BibleDB log = logging.getLogger(__name__) +def replacement(match): + return match.group(2).upper() + class OSISBible(BibleDB): """ `OSIS `_ Bible format importer class. @@ -106,6 +109,7 @@ class OSISBible(BibleDB): detect_file.close() try: osis = codecs.open(self.filename, u'r', details['encoding']) + repl = replacement for file_record in osis: if self.stop_import_flag: break @@ -148,12 +152,12 @@ class OSISBible(BibleDB): verse_text = self.rf_regex.sub(u'', verse_text) verse_text = self.lb_regex.sub(u' ', verse_text) verse_text = self.lg_regex.sub(u'', verse_text) - verse_text = self.l_regex.sub(u'', verse_text) + verse_text = self.l_regex.sub(u' ', verse_text) verse_text = self.w_regex.sub(u'', verse_text) verse_text = self.q1_regex.sub(u'"', verse_text) verse_text = self.q2_regex.sub(u'\'', verse_text) + verse_text = self.divine_name_regex.sub(repl, verse_text) verse_text = self.trans_regex.sub(u'', verse_text) - verse_text = self.divine_name_regex.sub(u'', verse_text) verse_text = verse_text.replace(u'', u'')\ .replace(u'', u'').replace(u'', u'')\ .replace(u'', u'').replace(u'', u'')\ From d23e564539127c7dbe7c591be40330436d3874e3 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 27 Apr 2011 18:15:35 +0200 Subject: [PATCH 147/148] Fixed bug #744515, funny quotes in KJV imported from OSIS. --- openlp/plugins/bibles/lib/osis.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index 130356241..a080524eb 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -63,6 +63,7 @@ class OSISBible(BibleDB): self.lg_regex = re.compile(r'') self.l_regex = re.compile(r'') self.w_regex = re.compile(r'') + self.q_regex = re.compile(r'') self.q1_regex = re.compile(r'') self.q2_regex = re.compile(r'') self.trans_regex = re.compile(r'(.*?)') @@ -156,6 +157,7 @@ class OSISBible(BibleDB): verse_text = self.w_regex.sub(u'', verse_text) verse_text = self.q1_regex.sub(u'"', verse_text) verse_text = self.q2_regex.sub(u'\'', verse_text) + verse_text = self.q_regex.sub(u'', verse_text) verse_text = self.divine_name_regex.sub(repl, verse_text) verse_text = self.trans_regex.sub(u'', verse_text) verse_text = verse_text.replace(u'', u'')\ From 9aa1f580d2cb00123066d161487b241989cc40de Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 28 Apr 2011 08:36:04 +0200 Subject: [PATCH 148/148] fixed right/left shortcuts --- openlp/core/ui/slidecontroller.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 5f2c63c23..dfa313cc1 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -380,18 +380,21 @@ class SlideController(QtGui.QWidget): action_list.add_action(self.previousItem) action_list.add_action(self.nextItem) self.previousService = shortcut_action(parent, u'previousService', - [QtCore.Qt.Key_Left], self.servicePrevious, UiStrings().LiveToolbar) - self.previousService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) + [QtCore.Qt.Key_Left], self.servicePrevious, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) self.previousService.setText( translate('OpenLP.SlideController', 'Previous Service')) self.nextService = shortcut_action(parent, 'nextService', - [QtCore.Qt.Key_Right], self.serviceNext, UiStrings().LiveToolbar) - self.nextService.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) + [QtCore.Qt.Key_Right], self.serviceNext, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) self.nextService.setText( translate('OpenLP.SlideController', 'Next Service')) self.escapeItem = shortcut_action(parent, 'escapeItem', - [QtCore.Qt.Key_Escape], self.liveEscape, UiStrings().LiveToolbar) - self.escapeItem.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut) + [QtCore.Qt.Key_Escape], self.liveEscape, + category=UiStrings().LiveToolbar, + context=QtCore.Qt.WidgetWithChildrenShortcut) self.escapeItem.setText( translate('OpenLP.SlideController', 'Escape Item')) @@ -1150,4 +1153,5 @@ class SlideController(QtGui.QWidget): elif self.desktopScreen.isChecked(): return HideMode.Screen else: - return None \ No newline at end of file + return None +

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 literal 37379 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 N3Tn3s0V9Bh1h#0r1r!25ARGn7m7sw?p3p|Y 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