From bdb9089409c0108689ceac7d72cc2cf5e6b2575e Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 27 Jan 2013 07:36:04 +0000 Subject: [PATCH] Cleanup ServiceManager code --- openlp/core/lib/settings.py | 2 +- openlp/core/ui/mainwindow.py | 38 +- openlp/core/ui/media/mediacontroller.py | 4 +- openlp/core/ui/media/playertab.py | 2 +- openlp/core/ui/printserviceform.py | 3 +- openlp/core/ui/serviceitemeditform.py | 15 +- openlp/core/ui/servicemanager.py | 990 +++++++++--------- openlp/core/ui/servicenoteform.py | 16 +- openlp/core/ui/settingsform.py | 2 +- openlp/core/ui/starttimeform.py | 16 +- openlp/plugins/media/lib/mediatab.py | 2 +- openlp/plugins/presentations/lib/mediaitem.py | 2 +- .../presentations/lib/presentationtab.py | 2 +- .../openlp_core_ui/test_starttimedialog.py | 11 +- 14 files changed, 575 insertions(+), 530 deletions(-) diff --git a/openlp/core/lib/settings.py b/openlp/core/lib/settings.py index aad851dca..63140d608 100644 --- a/openlp/core/lib/settings.py +++ b/openlp/core/lib/settings.py @@ -165,7 +165,7 @@ class Settings(QtCore.QSettings): u'shortcuts/importBibleItem': [], u'shortcuts/modeDefaultItem': [], u'shortcuts/modeLiveItem': [], - u'shortcuts/makeLive': [QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return], + u'shortcuts/make_live': [QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return], u'shortcuts/moveUp': [QtCore.Qt.Key_PageUp], u'shortcuts/moveTop': [QtCore.Qt.Key_Home], u'shortcuts/modeSetupItem': [], diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index b5f069854..75ad56d8a 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -174,25 +174,25 @@ class Ui_MainWindow(object): icon=u':/general/general_new.png', shortcuts=[QtGui.QKeySequence(u'Ctrl+N')], category=UiStrings().File, - triggers=self.serviceManagerContents.onNewServiceClicked) + triggers=self.serviceManagerContents.on_new_service_clicked) self.fileOpenItem = create_action(mainWindow, u'fileOpenItem', icon=u':/general/general_open.png', shortcuts=[QtGui.QKeySequence(u'Ctrl+O')], category=UiStrings().File, - triggers=self.serviceManagerContents.onLoadServiceClicked) + triggers=self.serviceManagerContents.on_load_service_clicked) self.fileSaveItem = create_action(mainWindow, u'fileSaveItem', icon=u':/general/general_save.png', shortcuts=[QtGui.QKeySequence(u'Ctrl+S')], category=UiStrings().File, - triggers=self.serviceManagerContents.saveFile) + triggers=self.serviceManagerContents.save_file) self.fileSaveAsItem = create_action(mainWindow, u'fileSaveAsItem', shortcuts=[QtGui.QKeySequence(u'Ctrl+Shift+S')], category=UiStrings().File, - triggers=self.serviceManagerContents.saveFileAs) + triggers=self.serviceManagerContents.save_file_as) self.printServiceOrderItem = create_action(mainWindow, u'printServiceItem', shortcuts=[QtGui.QKeySequence(u'Ctrl+P')], category=UiStrings().File, - triggers=self.serviceManagerContents.printServiceOrder) + triggers=self.serviceManagerContents.print_service_order) self.fileExitItem = create_action(mainWindow, u'fileExitItem', icon=u':/system/system_exit.png', shortcuts=[QtGui.QKeySequence(u'Alt+F4')], @@ -528,7 +528,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'live_display_blank_check'), self.blankCheck) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'), self.screenChanged) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'mainwindow_status_text'), self.showStatusMessage) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cleanup'), self.cleanUp) + QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cleanup'), self.clean_up) # Media Manager QtCore.QObject.connect(self.mediaToolBox, QtCore.SIGNAL(u'currentChanged(int)'), self.onMediaToolBoxChanged) Receiver.send_message(u'cursor_busy') @@ -618,9 +618,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): filename = args[0] if not isinstance(filename, unicode): filename = unicode(filename, sys.getfilesystemencoding()) - self.serviceManagerContents.loadFile(filename) + self.serviceManagerContents.load_file(filename) elif Settings().value(self.generalSettingsSection + u'/auto open'): - self.serviceManagerContents.loadLastFile() + self.serviceManagerContents.load_Last_file() view_mode = Settings().value(u'%s/view mode' % self.generalSettingsSection) if view_mode == u'default': self.modeDefaultItem.setChecked(True) @@ -866,7 +866,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 'be applied the next time you start OpenLP.'), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) self.settingsImported = True - self.cleanUp() + self.clean_up() QtCore.QCoreApplication.exit() def onSettingsExportItemClicked(self): @@ -999,18 +999,18 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): return # If we just did a settings import, close without saving changes. if self.settingsImported: - self.cleanUp(False) + self.clean_up(False) event.accept() - if self.serviceManagerContents.isModified(): - ret = self.serviceManagerContents.saveModifiedService() + if self.serviceManagerContents.is_modified(): + ret = self.serviceManagerContents.save_modified_service() if ret == QtGui.QMessageBox.Save: - if self.serviceManagerContents.decideSaveMethod(): - self.cleanUp() + if self.serviceManagerContents.decide_save_method(): + self.clean_up() event.accept() else: event.ignore() elif ret == QtGui.QMessageBox.Discard: - self.cleanUp() + self.clean_up() event.accept() else: event.ignore() @@ -1021,15 +1021,15 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.Yes) if ret == QtGui.QMessageBox.Yes: - self.cleanUp() + self.clean_up() event.accept() else: event.ignore() else: - self.cleanUp() + self.clean_up() event.accept() - def cleanUp(self, save_settings=True): + def clean_up(self, save_settings=True): """ Runs all the cleanup code before OpenLP shuts down. @@ -1223,7 +1223,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): action = create_action(self, u'', text=u'&%d %s' % (fileId + 1, os.path.splitext(os.path.basename( unicode(filename)))[0]), data=filename, - triggers=self.serviceManagerContents.onRecentServiceClicked) + triggers=self.serviceManagerContents.on_recent_service_clicked) self.recentFilesMenu.addAction(action) clearRecentFilesAction = create_action(self, u'', text=translate('OpenLP.MainWindow', 'Clear List', 'Clear List of recent files'), diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index 73f311186..0ac91c226 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -131,14 +131,14 @@ class MediaController(object): for item in player.audio_extensions_list: if not item in self.audio_extensions_list: self.audio_extensions_list.append(item) - self.service_manager.supportedSuffixes(item[2:]) + self.service_manager.supported_suffixes(item[2:]) self.video_extensions_list = [] for player in self.mediaPlayers.values(): if player.isActive: for item in player.video_extensions_list: if item not in self.video_extensions_list: self.video_extensions_list.extend(item) - self.service_manager.supportedSuffixes(item[2:]) + self.service_manager.supported_suffixes(item[2:]) def register_players(self, player): """ diff --git a/openlp/core/ui/media/playertab.py b/openlp/core/ui/media/playertab.py index a0cab2e48..eb1a36ca6 100644 --- a/openlp/core/ui/media/playertab.py +++ b/openlp/core/ui/media/playertab.py @@ -194,7 +194,7 @@ class PlayerTab(SettingsTab): set_media_players(self.usedPlayers, override_player) player_string_changed = True if player_string_changed: - self.parent.resetSupportedSuffixes() + self.parent.reset_supported_suffixes() Receiver.send_message(u'mediaitem_media_rebuild') Receiver.send_message(u'config_screen_changed') diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 02ad00ad0..d10fe7ba0 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -138,7 +138,8 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): QtCore.QObject.connect(self.zoomComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.displaySizeChanged) QtCore.QObject.connect(self.plainCopy, 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) + QtCore.QObject.connect(self.slideTextCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), + self.onSlideTextCheckBoxChanged) self.updatePreviewText() def toggleOptions(self, checked): diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index 5392d6418..f471a08b6 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -28,6 +28,7 @@ ############################################################################### from PyQt4 import QtCore, QtGui +from openlp.core.lib import Registry from serviceitemeditdialog import Ui_ServiceItemEditDialog @@ -35,11 +36,11 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): """ This is the form that is used to edit the verses of the song. """ - def __init__(self, parent=None): + def __init__(self): """ Constructor """ - QtGui.QDialog.__init__(self, parent) + QtGui.QDialog.__init__(self, self.main_window) self.setupUi(self) self.itemList = [] QtCore.QObject.connect(self.listWidget, QtCore.SIGNAL(u'currentRowChanged(int)'), self.onCurrentRowChanged) @@ -143,3 +144,13 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): else: self.upButton.setEnabled(True) self.deleteButton.setEnabled(True) + + def _get_main_window(self): + """ + Adds the main window to the class dynamically + """ + if not hasattr(self, u'_main_window'): + self._main_window = Registry().get(u'main_window') + return self._main_window + + main_window = property(_get_main_window) \ No newline at end of file diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index dd1266190..4ab1f81c0 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -57,13 +57,16 @@ class ServiceManagerList(QtGui.QTreeWidget): self.serviceManager = serviceManager def keyPressEvent(self, event): + """ + Capture Key press and respond accordingly. + """ if isinstance(event, QtGui.QKeyEvent): # here accept the event and do something if event.key() == QtCore.Qt.Key_Up: - self.serviceManager.onMoveSelectionUp() + self.serviceManager.on_move_selection_up() event.accept() elif event.key() == QtCore.Qt.Key_Down: - self.serviceManager.onMoveSelectionDown() + self.serviceManager.on_move_selection_down() event.accept() elif event.key() == QtCore.Qt.Key_Delete: self.serviceManager.onDeleteFromService() @@ -85,148 +88,122 @@ class ServiceManagerList(QtGui.QTreeWidget): event.ignore() return drag = QtGui.QDrag(self) - mimeData = QtCore.QMimeData() - drag.setMimeData(mimeData) - mimeData.setText(u'ServiceManager') + mime_data = QtCore.QMimeData() + drag.setMimeData(mime_data) + mime_data.setText(u'ServiceManager') drag.start(QtCore.Qt.CopyAction) - -class ServiceManager(QtGui.QWidget): +class ServiceManagerDialog(object): """ - Manages the services. This involves taking text strings from plugins and - adding them to the service. This service can then be zipped up with all - the resources used into one OSZ or oszl file for use on any OpenLP v2 - installation. Also handles the UI tasks of moving things up and down etc. """ - def __init__(self, parent=None): - """ - Sets up the service manager, toolbars, list view, et al. - """ - QtGui.QWidget.__init__(self, parent) - self.active = build_icon(QtGui.QImage(u':/media/auto-start_active.png')) - self.inactive = build_icon(QtGui.QImage(u':/media/auto-start_inactive.png')) - Registry().register(u'service_manager', self) - self.serviceItems = [] - self.suffixes = [] - self.dropPosition = 0 - self.expandTabs = False - self.service_id = 0 - # is a new service and has not been saved - self._modified = False - self._fileName = u'' - self.service_has_all_original_files = True - self.serviceNoteForm = ServiceNoteForm(self.main_window) - self.serviceItemEditForm = ServiceItemEditForm(self.main_window) - self.startTimeForm = StartTimeForm(self.main_window) - # start with the layout - self.layout = QtGui.QVBoxLayout(self) - self.layout.setSpacing(0) - self.layout.setMargin(0) + def setup_ui(self,widget): # Create the top toolbar self.toolbar = OpenLPToolbar(self) self.toolbar.addToolbarAction(u'newService', text=UiStrings().NewService, icon=u':/general/general_new.png', - tooltip=UiStrings().CreateService, triggers=self.onNewServiceClicked) + tooltip=UiStrings().CreateService, triggers=self.on_new_service_clicked) self.toolbar.addToolbarAction(u'openService', text=UiStrings().OpenService, icon=u':/general/general_open.png', - tooltip=translate('OpenLP.ServiceManager', 'Load an existing service.'), triggers=self.onLoadServiceClicked) + tooltip=translate('OpenLP.ServiceManager', 'Load an existing service.'), triggers=self.on_load_service_clicked) self.toolbar.addToolbarAction(u'saveService', text=UiStrings().SaveService, icon=u':/general/general_save.png', - tooltip=translate('OpenLP.ServiceManager', 'Save this service.'), triggers=self.decideSaveMethod) + tooltip=translate('OpenLP.ServiceManager', 'Save this service.'), triggers=self.decide_save_method) self.toolbar.addSeparator() - self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings().Theme, self) - self.themeLabel.setMargin(3) - self.themeLabel.setObjectName(u'themeLabel') - self.toolbar.addToolbarWidget(self.themeLabel) - self.themeComboBox = QtGui.QComboBox(self.toolbar) - self.themeComboBox.setToolTip(translate('OpenLP.ServiceManager', 'Select a theme for the service.')) - self.themeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToMinimumContentsLength) - self.themeComboBox.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) - self.themeComboBox.setObjectName(u'themeComboBox') - self.toolbar.addToolbarWidget(self.themeComboBox) + self.theme_label = QtGui.QLabel(u'%s:' % UiStrings().Theme, self) + self.theme_label.setMargin(3) + self.theme_label.setObjectName(u'theme_label') + self.toolbar.addToolbarWidget(self.theme_label) + self.theme_combo_box = QtGui.QComboBox(self.toolbar) + self.theme_combo_box.setToolTip(translate('OpenLP.ServiceManager', 'Select a theme for the service.')) + self.theme_combo_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToMinimumContentsLength) + self.theme_combo_box.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) + self.theme_combo_box.setObjectName(u'theme_combo_box') + self.toolbar.addToolbarWidget(self.theme_combo_box) self.toolbar.setObjectName(u'toolbar') self.layout.addWidget(self.toolbar) # Create the service manager list - self.serviceManagerList = ServiceManagerList(self) - self.serviceManagerList.setEditTriggers( + self.service_manager_list = ServiceManagerList(self) + self.service_manager_list.setEditTriggers( QtGui.QAbstractItemView.CurrentChanged | QtGui.QAbstractItemView.DoubleClicked | QtGui.QAbstractItemView.EditKeyPressed) - self.serviceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop) - self.serviceManagerList.setAlternatingRowColors(True) - self.serviceManagerList.setHeaderHidden(True) - self.serviceManagerList.setExpandsOnDoubleClick(False) - self.serviceManagerList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) - QtCore.QObject.connect(self.serviceManagerList, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), - self.contextMenu) - self.serviceManagerList.setObjectName(u'serviceManagerList') + self.service_manager_list.setDragDropMode(QtGui.QAbstractItemView.DragDrop) + self.service_manager_list.setAlternatingRowColors(True) + self.service_manager_list.setHeaderHidden(True) + self.service_manager_list.setExpandsOnDoubleClick(False) + self.service_manager_list.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + QtCore.QObject.connect(self.service_manager_list, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), + self.context_menu) + self.service_manager_list.setObjectName(u'service_manager_list') # enable drop - self.serviceManagerList.__class__.dragEnterEvent = self.dragEnterEvent - self.serviceManagerList.__class__.dragMoveEvent = self.dragEnterEvent - self.serviceManagerList.__class__.dropEvent = self.dropEvent - self.layout.addWidget(self.serviceManagerList) + self.service_manager_list.__class__.dragEnterEvent = self.drag_enter_event + self.service_manager_list.__class__.dragMoveEvent = self.drag_enter_event + self.service_manager_list.__class__.dropEvent = self.drop_event + self.layout.addWidget(self.service_manager_list) # Add the bottom toolbar - self.orderToolbar = OpenLPToolbar(self) + self.order_toolbar = OpenLPToolbar(self) action_list = ActionList.get_instance() action_list.add_category(UiStrings().Service, CategoryOrder.standardToolbar) - self.serviceManagerList.moveTop = self.orderToolbar.addToolbarAction(u'moveTop', + self.service_manager_list.moveTop = self.order_toolbar.addToolbarAction(u'moveTop', text=translate('OpenLP.ServiceManager', 'Move to &top'), icon=u':/services/service_top.png', tooltip=translate('OpenLP.ServiceManager', 'Move item to the top of the service.'), shortcuts=[QtCore.Qt.Key_Home], category=UiStrings().Service, triggers=self.onServiceTop) - self.serviceManagerList.moveUp = self.orderToolbar.addToolbarAction(u'moveUp', + self.service_manager_list.moveUp = self.order_toolbar.addToolbarAction(u'moveUp', text=translate('OpenLP.ServiceManager', 'Move &up'), icon=u':/services/service_up.png', tooltip=translate('OpenLP.ServiceManager', 'Move item up one position in the service.'), shortcuts=[QtCore.Qt.Key_PageUp], category=UiStrings().Service, triggers=self.onServiceUp) - self.serviceManagerList.moveDown = self.orderToolbar.addToolbarAction(u'moveDown', + self.service_manager_list.moveDown = self.order_toolbar.addToolbarAction(u'moveDown', text=translate('OpenLP.ServiceManager', 'Move &down'), icon=u':/services/service_down.png', tooltip=translate('OpenLP.ServiceManager', 'Move item down one position in the service.'), shortcuts=[QtCore.Qt.Key_PageDown], category=UiStrings().Service, triggers=self.onServiceDown) - self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarAction(u'moveBottom', + self.service_manager_list.moveBottom = self.order_toolbar.addToolbarAction(u'moveBottom', text=translate('OpenLP.ServiceManager', 'Move to &bottom'), icon=u':/services/service_bottom.png', tooltip=translate('OpenLP.ServiceManager', 'Move item to the end of the service.'), shortcuts=[QtCore.Qt.Key_End], category=UiStrings().Service, triggers=self.onServiceEnd) - self.serviceManagerList.down = self.orderToolbar.addToolbarAction(u'down', + self.service_manager_list.down = self.order_toolbar.addToolbarAction(u'down', text=translate('OpenLP.ServiceManager', 'Move &down'), tooltip=translate('OpenLP.ServiceManager', 'Moves the selection down the window.'), visible=False, - shortcuts=[QtCore.Qt.Key_Down], triggers=self.onMoveSelectionDown) - action_list.add_action(self.serviceManagerList.down) - self.serviceManagerList.up = self.orderToolbar.addToolbarAction(u'up', + shortcuts=[QtCore.Qt.Key_Down], triggers=self.on_move_selection_down) + action_list.add_action(self.service_manager_list.down) + self.service_manager_list.up = self.order_toolbar.addToolbarAction(u'up', text=translate('OpenLP.ServiceManager', 'Move up'), tooltip=translate('OpenLP.ServiceManager', - 'Moves the selection up the window.'), visible=False, shortcuts=[QtCore.Qt.Key_Up], - triggers=self.onMoveSelectionUp) - action_list.add_action(self.serviceManagerList.up) - self.orderToolbar.addSeparator() - self.serviceManagerList.delete = self.orderToolbar.addToolbarAction(u'delete', + 'Moves the selection up the window.'), visible=False, shortcuts=[QtCore.Qt.Key_Up], + triggers=self.on_move_selection_up) + action_list.add_action(self.service_manager_list.up) + self.order_toolbar.addSeparator() + self.service_manager_list.delete = self.order_toolbar.addToolbarAction(u'delete', text=translate('OpenLP.ServiceManager', '&Delete From Service'), icon=u':/general/general_delete.png', tooltip=translate('OpenLP.ServiceManager', 'Delete the selected item from the service.'), shortcuts=[QtCore.Qt.Key_Delete], triggers=self.onDeleteFromService) - self.orderToolbar.addSeparator() - self.serviceManagerList.expand = self.orderToolbar.addToolbarAction(u'expand', + self.order_toolbar.addSeparator() + self.service_manager_list.expand = self.order_toolbar.addToolbarAction(u'expand', text=translate('OpenLP.ServiceManager', '&Expand all'), icon=u':/services/service_expand_all.png', tooltip=translate('OpenLP.ServiceManager', 'Expand all the service items.'), shortcuts=[QtCore.Qt.Key_Plus], category=UiStrings().Service, triggers=self.onExpandAll) - self.serviceManagerList.collapse = self.orderToolbar.addToolbarAction(u'collapse', + self.service_manager_list.collapse = self.order_toolbar.addToolbarAction(u'collapse', text=translate('OpenLP.ServiceManager', '&Collapse all'), icon=u':/services/service_collapse_all.png', tooltip=translate('OpenLP.ServiceManager', 'Collapse all the service items.'), shortcuts=[QtCore.Qt.Key_Minus], category=UiStrings().Service, triggers=self.onCollapseAll) - self.orderToolbar.addSeparator() - self.serviceManagerList.makeLive = self.orderToolbar.addToolbarAction(u'makeLive', + self.order_toolbar.addSeparator() + self.service_manager_list.make_live = self.order_toolbar.addToolbarAction(u'make_live', text=translate('OpenLP.ServiceManager', 'Go Live'), icon=u':/general/general_live.png', tooltip=translate('OpenLP.ServiceManager', 'Send the selected item to Live.'), - shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return], category=UiStrings().Service, triggers=self.makeLive) - self.layout.addWidget(self.orderToolbar) + shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return], category=UiStrings().Service, triggers=self.make_live) + self.layout.addWidget(self.order_toolbar) # Connect up our signals and slots - QtCore.QObject.connect(self.themeComboBox, QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected) - QtCore.QObject.connect(self.serviceManagerList, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onMakeLive) - QtCore.QObject.connect(self.serviceManagerList, QtCore.SIGNAL(u'itemCollapsed(QTreeWidgetItem*)'), + QtCore.QObject.connect(self.theme_combo_box, QtCore.SIGNAL(u'activated(int)'), + self.on_theme_combo_box_selected) + QtCore.QObject.connect(self.service_manager_list, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), + self.on_make_live) + QtCore.QObject.connect(self.service_manager_list, QtCore.SIGNAL(u'itemCollapsed(QTreeWidgetItem*)'), self.collapsed) - QtCore.QObject.connect(self.serviceManagerList, QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_preview_live'), self.previewLive) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_next_item'), self.nextItem) + QtCore.QObject.connect(self.service_manager_list, QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded) + QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.update_theme_list) + QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_preview_live'), self.preview_live) + QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_next_item'), self.next_item) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_previous_item'), - self.previousItem) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_set_item'), self.onSetItem) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.configUpdated) + self.previous_item) + QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_set_item'), self.on_set_item) + QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.config_updated) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'), - self.regenerateServiceItems) + self.regenerate_service_Items) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_global'), self.themeChange) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate) # Last little bits of setting up @@ -241,56 +218,99 @@ class ServiceManager(QtGui.QWidget): # build the context menu self.menu = QtGui.QMenu() self.editAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Edit Item'), - icon=u':/general/general_edit.png', triggers=self.remoteEdit) + icon=u':/general/general_edit.png', triggers=self.remote_edit) self.maintainAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Reorder Item'), - icon=u':/general/general_edit.png', triggers=self.onServiceItemEditForm) + icon=u':/general/general_edit.png', triggers=self.on_service_item_edit_form) self.notesAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Notes'), - icon=u':/services/service_notes.png', triggers=self.onServiceItemNoteForm) + icon=u':/services/service_notes.png', triggers=self.on_service_item_note_form) self.timeAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Start Time'), - icon=u':/media/media_time.png', triggers=self.onStartTimeForm) + icon=u':/media/media_time.png', triggers=self.on_start_time_form) self.autoStartAction = create_widget_action(self.menu, text=u'', - icon=u':/media/auto-start_active.png', triggers=self.onAutoStart) + icon=u':/media/auto-start_active.png', triggers=self.on_auto_start) # Add already existing delete action to the menu. - self.menu.addAction(self.serviceManagerList.delete) + self.menu.addAction(self.service_manager_list.delete) self.create_custom_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', 'Create New &Custom Slide'), icon=u':/general/general_edit.png', triggers=self.create_custom) self.menu.addSeparator() # Add AutoPlay menu actions - self.autoPlaySlidesGroup = QtGui.QMenu(translate('OpenLP.ServiceManager', '&Auto play slides')) - self.menu.addMenu(self.autoPlaySlidesGroup) - self.autoPlaySlidesLoop = create_widget_action(self.autoPlaySlidesGroup, + self.auto_play_slides_group = QtGui.QMenu(translate('OpenLP.ServiceManager', '&Auto play slides')) + self.menu.addMenu(self.auto_play_slides_group) + self.auto_play_slides_loop = create_widget_action(self.auto_play_slides_group, text=translate('OpenLP.ServiceManager', 'Auto play slides &Loop'), - checked=False, triggers=self.toggleAutoPlaySlidesLoop) - self.autoPlaySlidesOnce = create_widget_action(self.autoPlaySlidesGroup, + checked=False, triggers=self.toggle_auto_play_slides_loop) + self.auto_play_slides_once = create_widget_action(self.auto_play_slides_group, text=translate('OpenLP.ServiceManager', 'Auto play slides &Once'), - checked=False, triggers=self.toggleAutoPlaySlidesOnce) - self.autoPlaySlidesGroup.addSeparator() - self.timedSlideInterval = create_widget_action(self.autoPlaySlidesGroup, + checked=False, triggers=self.toggle_auto_play_slides_once) + self.auto_play_slides_group.addSeparator() + self.timed_slide_interval = create_widget_action(self.auto_play_slides_group, text=translate('OpenLP.ServiceManager', '&Delay between slides'), - checked=False, triggers=self.onTimedSlideInterval) + checked=False, triggers=self.on_timed_slide_interval) self.menu.addSeparator() - self.previewAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', 'Show &Preview'), + self.preview_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', 'Show &Preview'), icon=u':/general/general_preview.png', triggers=self.makePreview) # Add already existing make live action to the menu. - self.menu.addAction(self.serviceManagerList.makeLive) + self.menu.addAction(self.service_manager_list.make_live) self.menu.addSeparator() - self.themeMenu = QtGui.QMenu(translate('OpenLP.ServiceManager', '&Change Item Theme')) - self.menu.addMenu(self.themeMenu) - self.serviceManagerList.addActions( - [self.serviceManagerList.moveDown, - self.serviceManagerList.moveUp, - self.serviceManagerList.makeLive, - self.serviceManagerList.moveTop, - self.serviceManagerList.moveBottom, - self.serviceManagerList.up, - self.serviceManagerList.down, - self.serviceManagerList.expand, - self.serviceManagerList.collapse + self.theme_menu = QtGui.QMenu(translate('OpenLP.ServiceManager', '&Change Item Theme')) + self.menu.addMenu(self.theme_menu) + self.service_manager_list.addActions( + [self.service_manager_list.moveDown, + self.service_manager_list.moveUp, + self.service_manager_list.make_live, + self.service_manager_list.moveTop, + self.service_manager_list.moveBottom, + self.service_manager_list.up, + self.service_manager_list.down, + self.service_manager_list.expand, + self.service_manager_list.collapse ]) - self.configUpdated() - def setModified(self, modified=True): + def drag_enter_event(self, event): + """ + Accept Drag events + + ``event`` + Handle of the event pint passed + """ + event.accept() + + +class ServiceManager(QtGui.QWidget, ServiceManagerDialog): + """ + Manages the services. This involves taking text strings from plugins and + adding them to the service. This service can then be zipped up with all + the resources used into one OSZ or oszl file for use on any OpenLP v2 + installation. Also handles the UI tasks of moving things up and down etc. + """ + def __init__(self, parent=None): + """ + Sets up the service manager, toolbars, list view, et al. + """ + QtGui.QWidget.__init__(self, parent) + self.active = build_icon(QtGui.QImage(u':/media/auto-start_active.png')) + self.inactive = build_icon(QtGui.QImage(u':/media/auto-start_inactive.png')) + Registry().register(u'service_manager', self) + self.service_items = [] + self.suffixes = [] + self.drop_position = 0 + self.expand_tabs = False + self.service_id = 0 + # is a new service and has not been saved + self._modified = False + self._file_name = u'' + self.service_has_all_original_files = True + self.serviceNoteForm = ServiceNoteForm() + self.serviceItemEditForm = ServiceItemEditForm() + self.startTimeForm = StartTimeForm() + # start with the layout + self.layout = QtGui.QVBoxLayout(self) + self.layout.setSpacing(0) + self.layout.setMargin(0) + self.setup_ui(self) + self.config_updated() + + def set_modified(self, modified=True): """ Setter for property "modified". Sets whether or not the current service has been modified. @@ -298,50 +318,50 @@ class ServiceManager(QtGui.QWidget): if modified: self.service_id += 1 self._modified = modified - serviceFile = self.shortFileName() or translate('OpenLP.ServiceManager', 'Untitled Service') - self.main_window.setServiceModified(modified, serviceFile) + service_file = self.short_file_name() or translate('OpenLP.ServiceManager', 'Untitled Service') + self.main_window.setServiceModified(modified, service_file) - def isModified(self): + def is_modified(self): """ Getter for boolean property "modified". """ return self._modified - def setFileName(self, fileName): + def set_file_name(self, file_name): """ Setter for service file. """ - self._fileName = unicode(fileName) - self.main_window.setServiceModified(self.isModified(), self.shortFileName()) - Settings().setValue(u'servicemanager/last file', fileName) - self._saveLite = self._fileName.endswith(u'.oszl') + self._file_name = unicode(file_name) + self.main_window.setServiceModified(self.is_modified(), self.short_file_name()) + Settings().setValue(u'servicemanager/last file', file_name) + self._saveLite = self._file_name.endswith(u'.oszl') - def fileName(self): + def file_name(self): """ Return the current file name including path. """ - return self._fileName + return self._file_name - def shortFileName(self): + def short_file_name(self): """ Return the current file name, excluding the path. """ - return split_filename(self._fileName)[1] + return split_filename(self._file_name)[1] - def configUpdated(self): + def config_updated(self): """ Triggered when Config dialog is updated. """ - self.expandTabs = Settings().value(u'advanced/expand service item') + self.expand_tabs = Settings().value(u'advanced/expand service item') - def resetSupportedSuffixes(self): + def reset_supported_suffixes(self): """ Resets the Suffixes list. """ self.suffixes = [] - def supportedSuffixes(self, suffix): + def supported_suffixes(self, suffix): """ Adds Suffixes supported to the master list. Called from Plugins. @@ -351,48 +371,48 @@ class ServiceManager(QtGui.QWidget): if not suffix in self.suffixes: self.suffixes.append(suffix) - def onNewServiceClicked(self): + def on_new_service_clicked(self): """ Create a new service. """ - if self.isModified(): - result = self.saveModifiedService() + if self.is_modified(): + result = self.save_modified_service() if result == QtGui.QMessageBox.Cancel: return False elif result == QtGui.QMessageBox.Save: - if not self.decideSaveMethod(): + if not self.decide_save_method(): return False - self.newFile() + self.new_file() - def onLoadServiceClicked(self, loadFile=None): + def on_load_service_clicked(self, load_file=None): """ Loads the service file and saves the existing one it there is one unchanged - ``loadFile`` + ``load_File`` The service file to the loaded. Will be None is from menu so selection will be required. """ - if self.isModified(): - result = self.saveModifiedService() + if self.is_modified(): + result = self.save_modified_service() if result == QtGui.QMessageBox.Cancel: return False elif result == QtGui.QMessageBox.Save: - self.decideSaveMethod() - if not loadFile: - fileName = QtGui.QFileDialog.getOpenFileName(self.main_window, + self.decide_save_method() + if not load_file: + file_name = QtGui.QFileDialog.getOpenfile_name(self.main_window, translate('OpenLP.ServiceManager', 'Open File'), SettingsManager.get_last_dir(self.main_window.serviceManagerSettingsSection), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz *.oszl)')) - if not fileName: + if not file_name: return False else: - fileName = loadFile + file_name = load_file Settings().setValue(self.main_window.serviceManagerSettingsSection + u'/last directory', - split_filename(fileName)[0]) - self.loadFile(fileName) + split_filename(file_name)[0]) + self.load_file(file_name) - def saveModifiedService(self): + def save_modified_service(self): """ Check to see if a service needs to be saved. """ @@ -402,26 +422,26 @@ class ServiceManager(QtGui.QWidget): 'The current service has been modified. Would you like to save this service?'), QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save) - def onRecentServiceClicked(self): + def on_recent_service_clicked(self): """ Load a recent file as the service triggered by mainwindow recent service list. """ sender = self.sender() - self.loadFile(sender.data()) + self.load_file(sender.data()) - def newFile(self): + def new_file(self): """ Create a blank new service file. """ - self.serviceManagerList.clear() - self.serviceItems = [] - self.setFileName(u'') + self.service_manager_list.clear() + self.service_items = [] + self.set_file_name(u'') self.service_id += 1 - self.setModified(False) + self.set_modified(False) Settings().setValue(u'servicemanager/last file', u'') Receiver.send_message(u'servicemanager_new_service') - def saveFile(self): + def save_file(self): """ Save the current service file. @@ -430,17 +450,17 @@ class ServiceManager(QtGui.QWidget): Audio files are also copied into the service manager directory, and then packaged into the zip file. """ - if not self.fileName(): - return self.saveFileAs() + if not self.file_name(): + return self.save_file_as() temp_file, temp_file_name = mkstemp(u'.osz', u'openlp_') # We don't need the file handle. os.close(temp_file) log.debug(temp_file_name) - path_file_name = unicode(self.fileName()) + path_file_name = unicode(self.file_name()) path, file_name = os.path.split(path_file_name) base_name = os.path.splitext(file_name)[0] service_file_name = '%s.osd' % base_name - log.debug(u'ServiceManager.saveFile - %s', path_file_name) + log.debug(u'ServiceManager.save_file - %s', path_file_name) Settings().setValue(self.main_window.serviceManagerSettingsSection + u'/last directory', path) service = [] write_list = [] @@ -449,9 +469,9 @@ class ServiceManager(QtGui.QWidget): total_size = 0 Receiver.send_message(u'cursor_busy') # Number of items + 1 to zip it - self.main_window.displayProgressBar(len(self.serviceItems) + 1) + self.main_window.displayProgressBar(len(self.service_items) + 1) # Get list of missing files, and list of files to write - for item in self.serviceItems: + for item in self.service_items: if not item[u'service_item'].uses_file(): continue for frame in item[u'service_item'].get_frames(): @@ -475,17 +495,17 @@ class ServiceManager(QtGui.QWidget): return False Receiver.send_message(u'cursor_busy') # Check if item contains a missing file. - for item in list(self.serviceItems): + for item in list(self.service_items): self.main_window.incrementProgressBar() item[u'service_item'].remove_invalid_frames(missing_list) if item[u'service_item'].missing_frames(): - self.serviceItems.remove(item) + self.service_items.remove(item) else: service_item = item[u'service_item'].get_service_repr(self._saveLite) if service_item[u'header'][u'background_audio']: - for i, filename in enumerate(service_item[u'header'][u'background_audio']): - new_file = os.path.join(u'audio', item[u'service_item'].unique_identifier, filename) - audio_files.append((filename, new_file)) + for i, file_name in enumerate(service_item[u'header'][u'background_audio']): + new_file = os.path.join(u'audio', item[u'service_item'].unique_identifier, file_name) + audio_files.append((file_name, new_file)) service_item[u'header'][u'background_audio'][i] = new_file # Add the service item to the service. service.append({u'serviceitem': service_item}) @@ -493,19 +513,19 @@ class ServiceManager(QtGui.QWidget): for file_item in write_list: file_size = os.path.getsize(file_item) total_size += file_size - log.debug(u'ServiceManager.savefile - ZIP contents size is %i bytes' % total_size) + log.debug(u'ServiceManager.save_file - ZIP contents size is %i bytes' % total_size) service_content = cPickle.dumps(service) # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be # extracted using unzip in UNIX. allow_zip_64 = (total_size > 2147483648 + len(service_content)) - log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % allow_zip_64) + log.debug(u'ServiceManager.save_file - allowZip64 is %s' % allow_zip_64) zip_file = None success = True self.main_window.incrementProgressBar() try: zip_file = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED, allow_zip_64) # First we add service contents. - # We save ALL filenames into ZIP using UTF-8. + # We save ALL file_names into ZIP using UTF-8. zip_file.writestr(service_file_name.encode(u'utf-8'), service_content) # Finally add all the listed media files. for write_from in write_list: @@ -539,34 +559,34 @@ class ServiceManager(QtGui.QWidget): try: shutil.copy(temp_file_name, path_file_name) except: - return self.saveFileAs() + return self.save_file_as() self.main_window.addRecentFile(path_file_name) - self.setModified(False) + self.set_modified(False) delete_file(temp_file_name) return success - def saveLocalFile(self): + def save_local_file(self): """ Save the current service file but leave all the file references alone to point to the current machine. This format is not transportable as it will not contain any files. """ - if not self.fileName(): - return self.saveFileAs() + if not self.file_name(): + return self.save_file_as() temp_file, temp_file_name = mkstemp(u'.oszl', u'openlp_') # We don't need the file handle. os.close(temp_file) log.debug(temp_file_name) - path_file_name = unicode(self.fileName()) + path_file_name = unicode(self.file_name()) path, file_name = os.path.split(path_file_name) base_name = os.path.splitext(file_name)[0] service_file_name = '%s.osd' % base_name - log.debug(u'ServiceManager.saveFile - %s', path_file_name) + log.debug(u'ServiceManager.save_file - %s', path_file_name) Settings().setValue(self.main_window.serviceManagerSettingsSection + u'/last directory', path) service = [] Receiver.send_message(u'cursor_busy') # Number of items + 1 to zip it - self.main_window.displayProgressBar(len(self.serviceItems) + 1) - for item in self.serviceItems: + self.main_window.displayProgressBar(len(self.service_items) + 1) + for item in self.service_items: self.main_window.incrementProgressBar() service_item = item[u'service_item'].get_service_repr(self._saveLite) #@todo check for file item on save. @@ -597,15 +617,15 @@ class ServiceManager(QtGui.QWidget): try: shutil.copy(temp_file_name, path_file_name) except: - return self.saveFileAs() + return self.save_file_as() self.main_window.addRecentFile(path_file_name) - self.setModified(False) + self.set_modified(False) delete_file(temp_file_name) return success - def saveFileAs(self): + def save_file_as(self): """ - Get a file name and then call :func:`ServiceManager.saveFile` to + Get a file name and then call :func:`ServiceManager.save_file` to save the file. """ default_service_enabled = Settings().value(u'advanced/default service enabled') @@ -623,59 +643,59 @@ class ServiceManager(QtGui.QWidget): time = now + timedelta(days=day_delta) local_time = time.replace(hour=service_hour, minute=service_minute) default_pattern = Settings().value(u'advanced/default service name') - default_filename = format_time(default_pattern, local_time) + default_file_name = format_time(default_pattern, local_time) else: - default_filename = u'' + default_file_name = u'' directory = Settings().value(self.main_window.serviceManagerSettingsSection + u'/last directory') - path = os.path.join(directory, default_filename) + path = os.path.join(directory, default_file_name) # SaveAs from osz to oszl is not valid as the files will be deleted # on exit which is not sensible or usable in the long term. - if self._fileName.endswith(u'oszl') or self.service_has_all_original_files: - fileName = QtGui.QFileDialog.getSaveFileName(self.main_window, UiStrings().SaveService, path, + if self._file_name.endswith(u'oszl') or self.service_has_all_original_files: + file_name = QtGui.QFileDialog.getSavefile_name(self.main_window, UiStrings().SaveService, path, translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz);; OpenLP Service Files - lite (*.oszl)')) else: - fileName = QtGui.QFileDialog.getSaveFileName(self.main_window, UiStrings().SaveService, path, + file_name = QtGui.QFileDialog.getSavefile_name(self.main_window, UiStrings().SaveService, path, translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz);;')) - if not fileName: + if not file_name: return False - if os.path.splitext(fileName)[1] == u'': - fileName += u'.osz' + if os.path.splitext(file_name)[1] == u'': + file_name += u'.osz' else: - ext = os.path.splitext(fileName)[1] - fileName.replace(ext, u'.osz') - self.setFileName(fileName) - self.decideSaveMethod() + ext = os.path.splitext(file_name)[1] + file_name.replace(ext, u'.osz') + self.set_file_name(file_name) + self.decide_save_method() - def decideSaveMethod(self): + def decide_save_method(self): """ Determine which type of save method to use. """ - if not self.fileName(): - return self.saveFileAs() + if not self.file_name(): + return self.save_file_as() if self._saveLite: - return self.saveLocalFile() + return self.save_local_file() else: - return self.saveFile() + return self.save_file() - def loadFile(self, fileName): + def load_file(self, file_name): """ Load an existing service file """ - if not fileName: + if not file_name: return False - fileName = unicode(fileName) - if not os.path.exists(fileName): + file_name = unicode(file_name) + if not os.path.exists(file_name): return False zip_file = None - fileTo = None + file_to = None try: - zip_file = zipfile.ZipFile(fileName) - for zipinfo in zip_file.infolist(): + zip_file = zipfile.ZipFile(file_name) + for zip_info in zip_file.infolist(): try: - ucsfile = zipinfo.filename.decode(u'utf-8') + ucsfile = zip_info.filename.decode(u'utf-8') except UnicodeDecodeError: - log.exception(u'Filename "%s" is not valid UTF-8' % zipinfo.filename.decode(u'utf-8', u'replace')) + log.exception(u'file_name "%s" is not valid UTF-8' % zip_info.file_name.decode(u'utf-8', u'replace')) critical_error_message_box(message=translate('OpenLP.ServiceManager', 'File is not a valid service.\n The content encoding is not UTF-8.')) continue @@ -683,198 +703,197 @@ class ServiceManager(QtGui.QWidget): if not osfile.startswith(u'audio'): osfile = os.path.split(osfile)[1] log.debug(u'Extract file: %s', osfile) - zipinfo.filename = osfile - zip_file.extract(zipinfo, self.servicePath) + zip_info.filename = osfile + zip_file.extract(zip_info, self.servicePath) if osfile.endswith(u'osd'): p_file = os.path.join(self.servicePath, osfile) if 'p_file' in locals(): Receiver.send_message(u'cursor_busy') - fileTo = open(p_file, u'r') - items = cPickle.load(fileTo) - fileTo.close() - self.newFile() - self.setFileName(fileName) + file_to = open(p_file, u'r') + items = cPickle.load(file_to) + file_to.close() + self.new_file() + self.set_file_name(file_name) self.main_window.displayProgressBar(len(items)) for item in items: self.main_window.incrementProgressBar() - serviceItem = ServiceItem() + service_item = ServiceItem() if self._saveLite: - serviceItem.set_from_service(item) + service_item.set_from_service(item) else: - serviceItem.set_from_service(item, self.servicePath) - serviceItem.validate_item(self.suffixes) + service_item.set_from_service(item, self.servicePath) + service_item.validate_item(self.suffixes) self.load_item_unique_identifier = 0 - if serviceItem.is_capable(ItemCapabilities.OnLoadUpdate): - Receiver.send_message(u'%s_service_load' % serviceItem.name.lower(), serviceItem) + if service_item.is_capable(ItemCapabilities.OnLoadUpdate): + Receiver.send_message(u'%s_service_load' % service_item.name.lower(), service_item) # if the item has been processed - if serviceItem.unique_identifier == self.load_item_unique_identifier: - serviceItem.edit_id = int(self.load_item_edit_id) - serviceItem.temporary_edit = self.load_item_temporary - self.addServiceItem(serviceItem, repaint=False) + if service_item.unique_identifier == self.load_item_unique_identifier: + service_item.edit_id = int(self.load_item_edit_id) + service_item.temporary_edit = self.load_item_temporary + self.addServiceItem(service_item, repaint=False) delete_file(p_file) - self.main_window.addRecentFile(fileName) - self.setModified(False) - Settings().setValue('servicemanager/last file', fileName) + self.main_window.addRecentFile(file_name) + self.set_modified(False) + Settings().setValue('servicemanager/last file', file_name) else: critical_error_message_box(message=translate('OpenLP.ServiceManager', 'File is not a valid service.')) log.exception(u'File contains no service data') except (IOError, NameError, zipfile.BadZipfile): - log.exception(u'Problem loading service file %s' % fileName) + log.exception(u'Problem loading service file %s' % file_name) critical_error_message_box(message=translate('OpenLP.ServiceManager', 'File could not be opened because it is corrupt.')) except zipfile.BadZipfile: - if os.path.getsize(fileName) == 0: - log.exception(u'Service file is zero sized: %s' % fileName) + if os.path.getsize(file_name) == 0: + log.exception(u'Service file is zero sized: %s' % file_name) QtGui.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Empty File'), translate('OpenLP.ServiceManager', 'This service file does not contain any data.')) else: log.exception(u'Service file is cannot be extracted as zip: ' - u'%s' % fileName) + u'%s' % file_name) QtGui.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Corrupt File'), translate('OpenLP.ServiceManager', 'This file is either corrupt or it is not an OpenLP 2 service file.')) return finally: - if fileTo: - fileTo.close() + if file_to: + file_to.close() if zip_file: zip_file.close() self.main_window.finishedProgressBar() Receiver.send_message(u'cursor_normal') self.repaintServiceList(-1, -1) - def loadLastFile(self): + def load_Last_file(self): """ Load the last service item from the service manager when the service was last closed. Can be blank if there was no service present. """ - fileName = Settings().value(u'servicemanager/last file') - if fileName: - self.loadFile(fileName) + file_name = Settings().value(u'servicemanager/last file') + if file_name: + self.load_file(file_name) - def contextMenu(self, point): + def context_menu(self, point): """ The Right click context menu from the Serviceitem list """ - item = self.serviceManagerList.itemAt(point) + item = self.service_manager_list.itemAt(point) if item is None: return if item.parent(): pos = item.parent().data(0, QtCore.Qt.UserRole) else: pos = item.data(0, QtCore.Qt.UserRole) - serviceItem = self.serviceItems[pos - 1] + service_item = self.service_items[pos - 1] self.editAction.setVisible(False) self.create_custom_action.setVisible(False) self.maintainAction.setVisible(False) self.notesAction.setVisible(False) self.timeAction.setVisible(False) self.autoStartAction.setVisible(False) - if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanEdit) and serviceItem[u'service_item'].edit_id: + if service_item[u'service_item'].is_capable(ItemCapabilities.CanEdit) and service_item[u'service_item'].edit_id: self.editAction.setVisible(True) - if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanMaintain): + if service_item[u'service_item'].is_capable(ItemCapabilities.CanMaintain): self.maintainAction.setVisible(True) if item.parent() is None: self.notesAction.setVisible(True) - if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanLoop) and \ - len(serviceItem[u'service_item'].get_frames()) > 1: - self.autoPlaySlidesGroup.menuAction().setVisible(True) - self.autoPlaySlidesOnce.setChecked(serviceItem[u'service_item'].auto_play_slides_once) - self.autoPlaySlidesLoop.setChecked(serviceItem[u'service_item'].auto_play_slides_loop) - self.timedSlideInterval.setChecked(serviceItem[u'service_item'].timed_slide_interval > 0) - if serviceItem[u'service_item'].timed_slide_interval > 0: - delay_suffix = u' %s s' % unicode(serviceItem[u'service_item'].timed_slide_interval) + if service_item[u'service_item'].is_capable(ItemCapabilities.CanLoop) and \ + len(service_item[u'service_item'].get_frames()) > 1: + self.auto_play_slides_group.menuAction().setVisible(True) + self.auto_play_slides_once.setChecked(service_item[u'service_item'].auto_play_slides_once) + self.auto_play_slides_loop.setChecked(service_item[u'service_item'].auto_play_slides_loop) + self.timed_slide_interval.setChecked(service_item[u'service_item'].timed_slide_interval > 0) + if service_item[u'service_item'].timed_slide_interval > 0: + delay_suffix = u' %s s' % unicode(service_item[u'service_item'].timed_slide_interval) else: delay_suffix = u' ...' - self.timedSlideInterval.setText(translate('OpenLP.ServiceManager', '&Delay between slides') + delay_suffix) + self.timed_slide_interval.setText(translate('OpenLP.ServiceManager', '&Delay between slides') + delay_suffix) # TODO for future: make group explains itself more visually else: - self.autoPlaySlidesGroup.menuAction().setVisible(False) - if serviceItem[u'service_item'].is_capable(ItemCapabilities.HasVariableStartTime): + self.auto_play_slides_group.menuAction().setVisible(False) + if service_item[u'service_item'].is_capable(ItemCapabilities.HasVariableStartTime): self.timeAction.setVisible(True) - if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanAutoStartForLive): + if service_item[u'service_item'].is_capable(ItemCapabilities.CanAutoStartForLive): self.autoStartAction.setVisible(True) self.autoStartAction.setIcon(self.inactive) self.autoStartAction.setText(translate('OpenLP.ServiceManager','&Auto Start - inactive')) - if serviceItem[u'service_item'].will_auto_start: + if service_item[u'service_item'].will_auto_start: self.autoStartAction.setText(translate('OpenLP.ServiceManager', '&Auto Start - active')) self.autoStartAction.setIcon(self.active) - if serviceItem[u'service_item'].is_text(): + if service_item[u'service_item'].is_text(): for plugin in self.plugin_manager.plugins: if plugin.name == u'custom' and plugin.status == PluginStatus.Active: self.create_custom_action.setVisible(True) break - self.themeMenu.menuAction().setVisible(False) + self.theme_menu.menuAction().setVisible(False) # Set up the theme menu. - if serviceItem[u'service_item'].is_text() and self.renderer.theme_level == ThemeLevel.Song: - self.themeMenu.menuAction().setVisible(True) + if service_item[u'service_item'].is_text() and self.renderer.theme_level == ThemeLevel.Song: + self.theme_menu.menuAction().setVisible(True) # The service item does not have a theme, check the "Default". - if serviceItem[u'service_item'].theme is None: - themeAction = self.themeMenu.defaultAction() + if service_item[u'service_item'].theme is None: + themeAction = self.theme_menu.defaultAction() else: - themeAction = self.themeMenu.findChild(QtGui.QAction, serviceItem[u'service_item'].theme) + themeAction = self.theme_menu.findChild(QtGui.QAction, service_item[u'service_item'].theme) if themeAction is not None: themeAction.setChecked(True) - self.menu.exec_(self.serviceManagerList.mapToGlobal(point)) + self.menu.exec_(self.service_manager_list.mapToGlobal(point)) - def onServiceItemNoteForm(self): + def on_service_item_note_form(self): """ Allow the service note to be edited """ - item = self.findServiceItem()[0] + item = self.find_service_item()[0] self.serviceNoteForm.textEdit.setPlainText( - self.serviceItems[item][u'service_item'].notes) + self.service_items[item][u'service_item'].notes) if self.serviceNoteForm.exec_(): - self.serviceItems[item][u'service_item'].notes = self.serviceNoteForm.textEdit.toPlainText() + self.service_items[item][u'service_item'].notes = self.serviceNoteForm.textEdit.toPlainText() self.repaintServiceList(item, -1) - self.setModified() + self.set_modified() - def onStartTimeForm(self): + def on_start_time_form(self): """ Opens a dialog to type in service item notes. """ - item = self.findServiceItem()[0] - self.startTimeForm.item = self.serviceItems[item] + item = self.find_service_item()[0] + self.startTimeForm.item = self.service_items[item] if self.startTimeForm.exec_(): self.repaintServiceList(item, -1) - def toggleAutoPlaySlidesOnce(self): + def toggle_auto_play_slides_once(self): """ Toggle Auto play slide once. Inverts auto play once option for the item """ - item = self.findServiceItem()[0] - service_item = self.serviceItems[item][u'service_item'] + item = self.find_service_item()[0] + service_item = self.service_items[item][u'service_item'] service_item.auto_play_slides_once = not service_item.auto_play_slides_once if service_item.auto_play_slides_once: service_item.auto_play_slides_loop = False - self.autoPlaySlidesLoop.setChecked(False) + self.auto_play_slides_loop.setChecked(False) if service_item.auto_play_slides_once and service_item.timed_slide_interval == 0: service_item.timed_slide_interval = Settings().value(u'loop delay') - self.setModified() + self.set_modified() - def toggleAutoPlaySlidesLoop(self): + def toggle_auto_play_slides_loop(self): """ Toggle Auto play slide loop. """ - item = self.findServiceItem()[0] - service_item = self.serviceItems[item][u'service_item'] + item = self.find_service_item()[0] + service_item = self.service_items[item][u'service_item'] service_item.auto_play_slides_loop = not service_item.auto_play_slides_loop if service_item.auto_play_slides_loop: service_item.auto_play_slides_once = False - self.autoPlaySlidesOnce.setChecked(False) + self.auto_play_slides_once.setChecked(False) if service_item.auto_play_slides_loop and service_item.timed_slide_interval == 0: service_item.timed_slide_interval = Settings().value(u'loop delay') - self.setModified() + self.set_modified() - def onTimedSlideInterval(self): + def on_timed_slide_interval(self): """ - on set times slide interval. Shows input dialog for enter interval in seconds for delay """ - item = self.findServiceItem()[0] - service_item = self.serviceItems[item][u'service_item'] + item = self.find_service_item()[0] + service_item = self.service_items[item][u'service_item'] if service_item.timed_slide_interval == 0: timed_slide_interval = Settings().value(u'loop delay') else: @@ -890,82 +909,82 @@ class ServiceManager(QtGui.QWidget): elif service_item.timed_slide_interval == 0: service_item.auto_play_slides_loop = False service_item.auto_play_slides_once = False - self.setModified() + self.set_modified() - def onAutoStart(self): + def on_auto_start(self): """ Toggles to Auto Start Setting. """ - item = self.findServiceItem()[0] - self.serviceItems[item][u'service_item'].will_auto_start = \ - not self.serviceItems[item][u'service_item'].will_auto_start + item = self.find_service_item()[0] + self.service_items[item][u'service_item'].will_auto_start = \ + not self.service_items[item][u'service_item'].will_auto_start - def onServiceItemEditForm(self): + def on_service_item_edit_form(self): """ Opens a dialog to edit the service item and update the service display if changes are saved. """ - item = self.findServiceItem()[0] + item = self.find_service_item()[0] self.serviceItemEditForm.setServiceItem( - self.serviceItems[item][u'service_item']) + self.service_items[item][u'service_item']) if self.serviceItemEditForm.exec_(): self.addServiceItem(self.serviceItemEditForm.getServiceItem(), - replace=True, expand=self.serviceItems[item][u'expanded']) + replace=True, expand=self.service_items[item][u'expanded']) - def previewLive(self, message): + def preview_live(self, message): """ Called by the SlideController to request a preview item be made live and allows the next preview to be updated if relevant. """ unique_identifier, row = message.split(u':') - for sitem in self.serviceItems: + for sitem in self.service_items: if sitem[u'service_item'].unique_identifier == unique_identifier: - item = self.serviceManagerList.topLevelItem(sitem[u'order'] - 1) - self.serviceManagerList.setCurrentItem(item) - self.makeLive(int(row)) + item = self.service_manager_list.topLevelItem(sitem[u'order'] - 1) + self.service_manager_list.setCurrentItem(item) + self.make_live(int(row)) return - def nextItem(self): + def next_item(self): """ Called by the SlideController to select the next service item. """ - if not self.serviceManagerList.selectedItems(): + if not self.service_manager_list.selectedItems(): return - selected = self.serviceManagerList.selectedItems()[0] + selected = self.service_manager_list.selectedItems()[0] lookFor = 0 - serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList) + serviceIterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list) while serviceIterator.value(): if lookFor == 1 and serviceIterator.value().parent() is None: - self.serviceManagerList.setCurrentItem(serviceIterator.value()) - self.makeLive() + self.service_manager_list.setCurrentItem(serviceIterator.value()) + self.make_live() return if serviceIterator.value() == selected: lookFor = 1 serviceIterator += 1 - def previousItem(self, message): + def previous_item(self, message): """ Called by the SlideController to select the previous service item. """ - if not self.serviceManagerList.selectedItems(): + if not self.service_manager_list.selectedItems(): return - selected = self.serviceManagerList.selectedItems()[0] + selected = self.service_manager_list.selectedItems()[0] prevItem = None prevItemLastSlide = None - serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList) + serviceIterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list) while serviceIterator.value(): if serviceIterator.value() == selected: if message == u'last slide' and prevItemLastSlide: pos = prevItem.data(0, QtCore.Qt.UserRole) - check_expanded = self.serviceItems[pos - 1][u'expanded'] - self.serviceManagerList.setCurrentItem(prevItemLastSlide) + check_expanded = self.service_items[pos - 1][u'expanded'] + self.service_manager_list.setCurrentItem(prevItemLastSlide) if not check_expanded: - self.serviceManagerList.collapseItem(prevItem) - self.makeLive() - self.serviceManagerList.setCurrentItem(prevItem) + self.service_manager_list.collapseItem(prevItem) + self.make_live() + self.service_manager_list.setCurrentItem(prevItem) elif prevItem: - self.serviceManagerList.setCurrentItem(prevItem) - self.makeLive() + self.service_manager_list.setCurrentItem(prevItem) + self.make_live() return if serviceIterator.value().parent() is None: prevItem = serviceIterator.value() @@ -973,50 +992,50 @@ class ServiceManager(QtGui.QWidget): prevItemLastSlide = serviceIterator.value() serviceIterator += 1 - def onSetItem(self, message): + def on_set_item(self, message): """ Called by a signal to select a specific item. """ - self.setItem(int(message)) + self.set_item(int(message)) - def setItem(self, index): + def set_item(self, index): """ Makes a specific item in the service live. """ - if index >= 0 and index < self.serviceManagerList.topLevelItemCount: - item = self.serviceManagerList.topLevelItem(index) - self.serviceManagerList.setCurrentItem(item) - self.makeLive() + if index >= 0 and index < self.service_manager_list.topLevelItemCount: + item = self.service_manager_list.topLevelItem(index) + self.service_manager_list.setCurrentItem(item) + self.make_live() - def onMoveSelectionUp(self): + def on_move_selection_up(self): """ Moves the cursor selection up the window. Called by the up arrow. """ - item = self.serviceManagerList.currentItem() - itemBefore = self.serviceManagerList.itemAbove(item) + item = self.service_manager_list.currentItem() + itemBefore = self.service_manager_list.itemAbove(item) if itemBefore is None: return - self.serviceManagerList.setCurrentItem(itemBefore) + self.service_manager_list.setCurrentItem(itemBefore) - def onMoveSelectionDown(self): + def on_move_selection_down(self): """ Moves the cursor selection down the window. Called by the down arrow. """ - item = self.serviceManagerList.currentItem() - itemAfter = self.serviceManagerList.itemBelow(item) + item = self.service_manager_list.currentItem() + itemAfter = self.service_manager_list.itemBelow(item) if itemAfter is None: return - self.serviceManagerList.setCurrentItem(itemAfter) + self.service_manager_list.setCurrentItem(itemAfter) def onCollapseAll(self): """ Collapse all the service items. """ - for item in self.serviceItems: + for item in self.service_items: item[u'expanded'] = False - self.serviceManagerList.collapseAll() + self.service_manager_list.collapseAll() def collapsed(self, item): """ @@ -1024,15 +1043,15 @@ class ServiceManager(QtGui.QWidget): correct state. """ pos = item.data(0, QtCore.Qt.UserRole) - self.serviceItems[pos - 1][u'expanded'] = False + self.service_items[pos - 1][u'expanded'] = False def onExpandAll(self): """ Collapse all the service items. """ - for item in self.serviceItems: + for item in self.service_items: item[u'expanded'] = True - self.serviceManagerList.expandAll() + self.service_manager_list.expandAll() def expanded(self, item): """ @@ -1040,65 +1059,65 @@ class ServiceManager(QtGui.QWidget): correct state. """ pos = item.data(0, QtCore.Qt.UserRole) - self.serviceItems[pos - 1][u'expanded'] = True + self.service_items[pos - 1][u'expanded'] = True def onServiceTop(self): """ Move the current ServiceItem to the top of the list. """ - item, child = self.findServiceItem() - if item < len(self.serviceItems) and item != -1: - temp = self.serviceItems[item] - self.serviceItems.remove(self.serviceItems[item]) - self.serviceItems.insert(0, temp) + item, child = self.find_service_item() + if item < len(self.service_items) and item != -1: + temp = self.service_items[item] + self.service_items.remove(self.service_items[item]) + self.service_items.insert(0, temp) self.repaintServiceList(0, child) - self.setModified() + self.set_modified() def onServiceUp(self): """ Move the current ServiceItem one position up in the list. """ - item, child = self.findServiceItem() + item, child = self.find_service_item() if item > 0: - temp = self.serviceItems[item] - self.serviceItems.remove(self.serviceItems[item]) - self.serviceItems.insert(item - 1, temp) + temp = self.service_items[item] + self.service_items.remove(self.service_items[item]) + self.service_items.insert(item - 1, temp) self.repaintServiceList(item - 1, child) - self.setModified() + self.set_modified() def onServiceDown(self): """ Move the current ServiceItem one position down in the list. """ - item, child = self.findServiceItem() - if item < len(self.serviceItems) and item != -1: - temp = self.serviceItems[item] - self.serviceItems.remove(self.serviceItems[item]) - self.serviceItems.insert(item + 1, temp) + item, child = self.find_service_item() + if item < len(self.service_items) and item != -1: + temp = self.service_items[item] + self.service_items.remove(self.service_items[item]) + self.service_items.insert(item + 1, temp) self.repaintServiceList(item + 1, child) - self.setModified() + self.set_modified() def onServiceEnd(self): """ Move the current ServiceItem to the bottom of the list. """ - item, child = self.findServiceItem() - if item < len(self.serviceItems) and item != -1: - temp = self.serviceItems[item] - self.serviceItems.remove(self.serviceItems[item]) - self.serviceItems.insert(len(self.serviceItems), temp) - self.repaintServiceList(len(self.serviceItems) - 1, child) - self.setModified() + item, child = self.find_service_item() + if item < len(self.service_items) and item != -1: + temp = self.service_items[item] + self.service_items.remove(self.service_items[item]) + self.service_items.insert(len(self.service_items), temp) + self.repaintServiceList(len(self.service_items) - 1, child) + self.set_modified() def onDeleteFromService(self): """ Remove the current ServiceItem from the list. """ - item = self.findServiceItem()[0] + item = self.find_service_item()[0] if item != -1: - self.serviceItems.remove(self.serviceItems[item]) + self.service_items.remove(self.service_items[item]) self.repaintServiceList(item - 1, -1) - self.setModified() + self.set_modified() def repaintServiceList(self, serviceItem, serviceItemChild): """ @@ -1115,16 +1134,16 @@ class ServiceManager(QtGui.QWidget): # Correct order of items in array count = 1 self.service_has_all_original_files = True - for item in self.serviceItems: + for item in self.service_items: item[u'order'] = count count += 1 if not item[u'service_item'].has_original_files: self.service_has_all_original_files = False # Repaint the screen - self.serviceManagerList.clear() - for item_count, item in enumerate(self.serviceItems): + self.service_manager_list.clear() + for item_count, item in enumerate(self.service_items): serviceitem = item[u'service_item'] - treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList) + treewidgetitem = QtGui.QTreeWidgetItem(self.service_manager_list) if serviceitem.is_valid: if serviceitem.notes: icon = QtGui.QImage(serviceitem.icon) @@ -1173,9 +1192,9 @@ class ServiceManager(QtGui.QWidget): child.setData(0, QtCore.Qt.UserRole, count) if serviceItem == item_count: if item[u'expanded'] and serviceItemChild == count: - self.serviceManagerList.setCurrentItem(child) + self.service_manager_list.setCurrentItem(child) elif serviceItemChild == -1: - self.serviceManagerList.setCurrentItem(treewidgetitem) + self.service_manager_list.setCurrentItem(treewidgetitem) treewidgetitem.setExpanded(item[u'expanded']) def cleanUp(self): @@ -1189,15 +1208,15 @@ class ServiceManager(QtGui.QWidget): if os.path.exists(os.path.join(self.servicePath, u'audio')): shutil.rmtree(os.path.join(self.servicePath, u'audio'), True) - def onThemeComboBoxSelected(self, currentIndex): + def on_theme_combo_box_selected(self, currentIndex): """ Set the theme for the current service. """ - log.debug(u'onThemeComboBoxSelected') - self.service_theme = self.themeComboBox.currentText() + log.debug(u'ontheme_combo_box_selected') + self.service_theme = self.theme_combo_box.currentText() self.renderer.set_service_theme(self.service_theme) Settings().setValue(self.main_window.serviceManagerSettingsSection + u'/service theme', self.service_theme) - self.regenerateServiceItems(True) + self.regenerate_service_Items(True) def themeChange(self): """ @@ -1206,22 +1225,22 @@ class ServiceManager(QtGui.QWidget): """ log.debug(u'themeChange') visible = self.renderer.theme_level == ThemeLevel.Global - self.themeLabel.setVisible(visible) - self.themeComboBox.setVisible(visible) + self.theme_label.setVisible(visible) + self.theme_combo_box.setVisible(visible) - def regenerateServiceItems(self, changed=False): + def regenerate_service_Items(self, changed=False): """ Rebuild the service list as things have changed and a repaint is the easiest way to do this. """ Receiver.send_message(u'cursor_busy') - log.debug(u'regenerateServiceItems') + log.debug(u'regenerate_service_Items') # force reset of renderer as theme data has changed self.service_has_all_original_files = True - if self.serviceItems: - for item in self.serviceItems: + if self.service_items: + for item in self.service_items: item[u'selected'] = False - serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList) + serviceIterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list) selectedItem = None while serviceIterator.value(): if serviceIterator.value().isSelected(): @@ -1232,10 +1251,10 @@ class ServiceManager(QtGui.QWidget): pos = selectedItem.data(0, QtCore.Qt.UserRole) else: pos = selectedItem.parent().data(0, QtCore.Qt.UserRole) - self.serviceItems[pos - 1][u'selected'] = True - tempServiceItems = self.serviceItems - self.serviceManagerList.clear() - self.serviceItems = [] + self.service_items[pos - 1][u'selected'] = True + tempServiceItems = self.service_items + self.service_manager_list.clear() + self.service_items = [] self.isNew = True for item in tempServiceItems: self.addServiceItem(item[u'service_item'], False, expand=item[u'expanded'], repaint=False, @@ -1243,7 +1262,7 @@ class ServiceManager(QtGui.QWidget): # Set to False as items may have changed rendering # does not impact the saved song so True may also be valid if changed: - self.setModified() + self.set_modified() # Repaint it once only at the end self.repaintServiceList(-1, -1) Receiver.send_message(u'cursor_normal') @@ -1262,14 +1281,14 @@ class ServiceManager(QtGui.QWidget): Using the service item passed replace the one with the same edit id if found. """ - for item_count, item in enumerate(self.serviceItems): + for item_count, item in enumerate(self.service_items): if item[u'service_item'].edit_id == newItem.edit_id and item[u'service_item'].name == newItem.name: newItem.render() newItem.merge(item[u'service_item']) item[u'service_item'] = newItem self.repaintServiceList(item_count + 1, 0) self.live_controller.replaceServiceManagerItem(newItem) - self.setModified() + self.set_modified() def addServiceItem(self, item, rebuild=False, expand=None, replace=False, repaint=True, selected=False): """ @@ -1283,48 +1302,48 @@ class ServiceManager(QtGui.QWidget): """ # if not passed set to config value if expand is None: - expand = self.expandTabs + expand = self.expand_tabs item.from_service = True if replace: - sitem, child = self.findServiceItem() - item.merge(self.serviceItems[sitem][u'service_item']) - self.serviceItems[sitem][u'service_item'] = item + sitem, child = self.find_service_item() + item.merge(self.service_items[sitem][u'service_item']) + self.service_items[sitem][u'service_item'] = item self.repaintServiceList(sitem, child) self.live_controller.replaceServiceManagerItem(item) else: item.render() # nothing selected for dnd - if self.dropPosition == 0: + if self.drop_position == 0: if isinstance(item, list): for inditem in item: - self.serviceItems.append({u'service_item': inditem, - u'order': len(self.serviceItems) + 1, + self.service_items.append({u'service_item': inditem, + u'order': len(self.service_items) + 1, u'expanded': expand, u'selected': selected}) else: - self.serviceItems.append({u'service_item': item, - u'order': len(self.serviceItems) + 1, + self.service_items.append({u'service_item': item, + u'order': len(self.service_items) + 1, u'expanded': expand, u'selected': selected}) if repaint: - self.repaintServiceList(len(self.serviceItems) - 1, -1) + self.repaintServiceList(len(self.service_items) - 1, -1) else: - self.serviceItems.insert(self.dropPosition, - {u'service_item': item, u'order': self.dropPosition, + self.service_items.insert(self.drop_position, + {u'service_item': item, u'order': self.drop_position, u'expanded': expand, u'selected': selected}) - self.repaintServiceList(self.dropPosition, -1) + self.repaintServiceList(self.drop_position, -1) # if rebuilding list make sure live is fixed. if rebuild: self.live_controller.replaceServiceManagerItem(item) - self.dropPosition = 0 - self.setModified() + self.drop_position = 0 + self.set_modified() def makePreview(self): """ Send the current item to the Preview slide controller """ Receiver.send_message(u'cursor_busy') - item, child = self.findServiceItem() - if self.serviceItems[item][u'service_item'].is_valid: - self.preview_controller.addServiceManagerItem(self.serviceItems[item][u'service_item'], child) + item, child = self.find_service_item() + if self.service_items[item][u'service_item'].is_valid: + self.preview_controller.addServiceManagerItem(self.service_items[item][u'service_item'], child) else: critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'), translate('OpenLP.ServiceManager', @@ -1335,20 +1354,20 @@ class ServiceManager(QtGui.QWidget): """ Send the current item to the Preview slide controller """ - item = self.findServiceItem()[0] + item = self.find_service_item()[0] if item == -1: return False else: - return self.serviceItems[item][u'service_item'] + return self.service_items[item][u'service_item'] - def onMakeLive(self): + def on_make_live(self): """ Send the current item to the Live slide controller but triggered by a tablewidget click event. """ - self.makeLive() + self.make_live() - def makeLive(self, row=-1): + def make_live(self, row=-1): """ Send the current item to the Live slide controller @@ -1356,22 +1375,22 @@ class ServiceManager(QtGui.QWidget): Row number to be displayed if from preview. -1 is passed if the value is not set """ - item, child = self.findServiceItem() + item, child = self.find_service_item() # No items in service if item == -1: return if row != -1: child = row Receiver.send_message(u'cursor_busy') - if self.serviceItems[item][u'service_item'].is_valid: - self.live_controller.addServiceManagerItem(self.serviceItems[item][u'service_item'], child) + if self.service_items[item][u'service_item'].is_valid: + self.live_controller.addServiceManagerItem(self.service_items[item][u'service_item'], child) if Settings().value(self.main_window.generalSettingsSection + u'/auto preview'): item += 1 - if self.serviceItems and item < len(self.serviceItems) and \ - self.serviceItems[item][u'service_item'].is_capable(ItemCapabilities.CanPreview): - self.preview_controller.addServiceManagerItem(self.serviceItems[item][u'service_item'], 0) - next_item = self.serviceManagerList.topLevelItem(item) - self.serviceManagerList.setCurrentItem(next_item) + if self.service_items and item < len(self.service_items) and \ + self.service_items[item][u'service_item'].is_capable(ItemCapabilities.CanPreview): + self.preview_controller.addServiceManagerItem(self.service_items[item][u'service_item'], 0) + next_item = self.service_manager_list.topLevelItem(item) + self.service_manager_list.setCurrentItem(next_item) self.live_controller.previewListWidget.setFocus() else: critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'), @@ -1379,23 +1398,23 @@ class ServiceManager(QtGui.QWidget): 'Your item cannot be displayed as the plugin required to display it is missing or inactive')) Receiver.send_message(u'cursor_normal') - def remoteEdit(self): + def remote_edit(self): """ Posts a remote edit message to a plugin to allow item to be edited. """ - item = self.findServiceItem()[0] - if self.serviceItems[item][u'service_item'].is_capable(ItemCapabilities.CanEdit): - Receiver.send_message(u'%s_edit' % self.serviceItems[item][u'service_item'].name.lower(), - u'L:%s' % self.serviceItems[item][u'service_item'].edit_id) + item = self.find_service_item()[0] + if self.service_items[item][u'service_item'].is_capable(ItemCapabilities.CanEdit): + Receiver.send_message(u'%s_edit' % self.service_items[item][u'service_item'].name.lower(), + u'L:%s' % self.service_items[item][u'service_item'].edit_id) def create_custom(self): """ Saves the current text item as a custom slide """ - item = self.findServiceItem()[0] - Receiver.send_message(u'custom_create_from_service', self.serviceItems[item][u'service_item']) + item = self.find_service_item()[0] + Receiver.send_message(u'custom_create_from_service', self.service_items[item][u'service_item']) - def findServiceItem(self): + def find_service_item(self): """ Finds the first selected ServiceItem in the list and returns the position of the serviceitem and its selected child item. For example, @@ -1404,7 +1423,7 @@ class ServiceManager(QtGui.QWidget): (1, 2) """ - items = self.serviceManagerList.selectedItems() + items = self.service_manager_list.selectedItems() serviceItem = -1 serviceItemChild = -1 for item in items: @@ -1420,16 +1439,7 @@ class ServiceManager(QtGui.QWidget): break return serviceItem, serviceItemChild - def dragEnterEvent(self, event): - """ - Accept Drag events - - ``event`` - Handle of the event pint passed - """ - event.accept() - - def dropEvent(self, event): + def drop_event(self, event): """ Receive drop event and trigger an internal event to get the plugins to build and push the correct service item @@ -1443,83 +1453,83 @@ class ServiceManager(QtGui.QWidget): event.setDropAction(QtCore.Qt.CopyAction) event.accept() for url in link.urls(): - filename = url.toLocalFile() - if filename.endswith(u'.osz'): - self.onLoadServiceClicked(filename) - elif filename.endswith(u'.oszl'): + file_name = url.toLocalFile() + if file_name.endswith(u'.osz'): + self.on_load_service_clicked(file_name) + elif file_name.endswith(u'.oszl'): # todo correct - self.onLoadServiceClicked(filename) + self.on_load_service_clicked(file_name) elif link.hasText(): plugin = link.text() - item = self.serviceManagerList.itemAt(event.pos()) + item = self.service_manager_list.itemAt(event.pos()) # ServiceManager started the drag and drop if plugin == u'ServiceManager': - startpos, child = self.findServiceItem() + startpos, child = self.find_service_item() # If no items selected if startpos == -1: return if item is None: - endpos = len(self.serviceItems) + endpos = len(self.service_items) else: endpos = self._get_parent_item_data(item) - 1 - serviceItem = self.serviceItems[startpos] - self.serviceItems.remove(serviceItem) - self.serviceItems.insert(endpos, serviceItem) + serviceItem = self.service_items[startpos] + self.service_items.remove(serviceItem) + self.service_items.insert(endpos, serviceItem) self.repaintServiceList(endpos, child) - self.setModified() + self.set_modified() else: # we are not over anything so drop replace = False if item is None: - self.dropPosition = len(self.serviceItems) + self.drop_position = len(self.service_items) else: # we are over something so lets investigate pos = self._get_parent_item_data(item) - 1 - serviceItem = self.serviceItems[pos] + serviceItem = self.service_items[pos] if (plugin == serviceItem[u'service_item'].name and serviceItem[u'service_item'].is_capable(ItemCapabilities.CanAppend)): action = self.dndMenu.exec_(QtGui.QCursor.pos()) # New action required if action == self.newAction: - self.dropPosition = self._get_parent_item_data(item) + self.drop_position = self._get_parent_item_data(item) # Append to existing action if action == self.addToAction: - self.dropPosition = self._get_parent_item_data(item) + self.drop_position = self._get_parent_item_data(item) item.setSelected(True) replace = True else: - self.dropPosition = self._get_parent_item_data(item) + self.drop_position = self._get_parent_item_data(item) Receiver.send_message(u'%s_add_service_item' % plugin, replace) - def updateThemeList(self, theme_list): + def update_theme_list(self, theme_list): """ Called from ThemeManager when the Themes have changed ``theme_list`` A list of current themes to be displayed """ - self.themeComboBox.clear() - self.themeMenu.clear() - self.themeComboBox.addItem(u'') - themeGroup = QtGui.QActionGroup(self.themeMenu) - themeGroup.setExclusive(True) - themeGroup.setObjectName(u'themeGroup') + self.theme_combo_box.clear() + self.theme_menu.clear() + self.theme_combo_box.addItem(u'') + theme_group = QtGui.QActionGroup(self.theme_menu) + theme_group.setExclusive(True) + theme_group.setObjectName(u'theme_group') # Create a "Default" theme, which allows the user to reset the item's # theme to the service theme or global theme. - defaultTheme = create_widget_action(self.themeMenu, text=UiStrings().Default, checked=False, - triggers=self.onThemeChangeAction) - self.themeMenu.setDefaultAction(defaultTheme) - themeGroup.addAction(defaultTheme) - self.themeMenu.addSeparator() + defaultTheme = create_widget_action(self.theme_menu, text=UiStrings().Default, checked=False, + triggers=self.on_theme_change_action) + self.theme_menu.setDefaultAction(defaultTheme) + theme_group.addAction(defaultTheme) + self.theme_menu.addSeparator() for theme in theme_list: - self.themeComboBox.addItem(theme) - themeGroup.addAction(create_widget_action(self.themeMenu, theme, text=theme, checked=False, - triggers=self.onThemeChangeAction)) - find_and_set_in_combo_box(self.themeComboBox, self.service_theme) + self.theme_combo_box.addItem(theme) + theme_group.addAction(create_widget_action(self.theme_menu, theme, text=theme, checked=False, + triggers=self.on_theme_change_action)) + find_and_set_in_combo_box(self.theme_combo_box, self.service_theme) self.renderer.set_service_theme(self.service_theme) - self.regenerateServiceItems() + self.regenerate_service_Items() - def onThemeChangeAction(self): + def on_theme_change_action(self): """ Handles theme change events """ @@ -1527,9 +1537,9 @@ class ServiceManager(QtGui.QWidget): # No object name means that the "Default" theme is supposed to be used. if not theme: theme = None - item = self.findServiceItem()[0] - self.serviceItems[item][u'service_item'].update_theme(theme) - self.regenerateServiceItems(True) + item = self.find_service_item()[0] + self.service_items[item][u'service_item'].update_theme(theme) + self.regenerate_service_Items(True) def _get_parent_item_data(self, item): """ @@ -1541,7 +1551,7 @@ class ServiceManager(QtGui.QWidget): else: return parent_item.data(0, QtCore.Qt.UserRole) - def printServiceOrder(self): + def print_service_order(self): """ Print a Service Order Sheet. """ diff --git a/openlp/core/ui/servicenoteform.py b/openlp/core/ui/servicenoteform.py index d14675d6a..a47c10234 100644 --- a/openlp/core/ui/servicenoteform.py +++ b/openlp/core/ui/servicenoteform.py @@ -29,18 +29,18 @@ from PyQt4 import QtGui -from openlp.core.lib import translate, SpellTextEdit +from openlp.core.lib import translate, SpellTextEdit, Registry from openlp.core.lib.ui import create_button_box class ServiceNoteForm(QtGui.QDialog): """ This is the form that is used to edit the verses of the song. """ - def __init__(self, parent=None): + def __init__(self): """ Constructor """ - QtGui.QDialog.__init__(self, parent) + QtGui.QDialog.__init__(self, self.main_window) self.setupUi() self.retranslateUi() @@ -62,3 +62,13 @@ class ServiceNoteForm(QtGui.QDialog): def retranslateUi(self): self.setWindowTitle(translate('OpenLP.ServiceNoteForm', 'Service Item Notes')) + + def _get_main_window(self): + """ + Adds the main window to the class dynamically + """ + if not hasattr(self, u'_main_window'): + self._main_window = Registry().get(u'main_window') + return self._main_window + + main_window = property(_get_main_window) \ No newline at end of file diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 17961b001..992128dc3 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -140,7 +140,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): per save. """ if self.resetSuffixes: - self.service_manager.resetSupportedSuffixes() + self.service_manager.reset_supported_suffixes() self.resetSuffixes = False def _get_main_window(self): diff --git a/openlp/core/ui/starttimeform.py b/openlp/core/ui/starttimeform.py index b2577da5b..f53b995b1 100644 --- a/openlp/core/ui/starttimeform.py +++ b/openlp/core/ui/starttimeform.py @@ -31,15 +31,15 @@ from PyQt4 import QtGui from starttimedialog import Ui_StartTimeDialog -from openlp.core.lib import translate, UiStrings +from openlp.core.lib import translate, UiStrings, Registry from openlp.core.lib.ui import critical_error_message_box class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): """ The exception dialog """ - def __init__(self, parent): - QtGui.QDialog.__init__(self, parent) + def __init__(self): + QtGui.QDialog.__init__(self, self.main_window) self.setupUi(self) def exec_(self): @@ -84,3 +84,13 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): minutes = seconds / 60 seconds -= 60 * minutes return hours, minutes, seconds + + def _get_main_window(self): + """ + Adds the main window to the class dynamically + """ + if not hasattr(self, u'_main_window'): + self._main_window = Registry().get(u'main_window') + return self._main_window + + main_window = property(_get_main_window) \ No newline at end of file diff --git a/openlp/plugins/media/lib/mediatab.py b/openlp/plugins/media/lib/mediatab.py index 0b220698c..87a56f238 100644 --- a/openlp/plugins/media/lib/mediatab.py +++ b/openlp/plugins/media/lib/mediatab.py @@ -85,6 +85,6 @@ class MediaTab(SettingsTab): if Settings().value(setting_key) != self.autoStartCheckBox.checkState(): Settings().setValue(setting_key, self.autoStartCheckBox.checkState()) if override_changed: - self.parent.resetSupportedSuffixes() + self.parent.reset_supported_suffixes() Receiver.send_message(u'mediaitem_media_rebuild') Receiver.send_message(u'mediaitem_suffixes') diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index c7c98d5a4..eee1c5801 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -85,7 +85,7 @@ class PresentationMediaItem(MediaManagerItem): for type in types: if fileType.find(type) == -1: fileType += u'*.%s ' % type - self.service_manager.supportedSuffixes(type) + self.service_manager.supported_suffixes(type) self.onNewFileMasks = translate('PresentationPlugin.MediaItem', 'Presentations (%s)') % fileType def requiredIcons(self): diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index 2c8d3002f..c72676860 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -129,7 +129,7 @@ class PresentationTab(SettingsTab): Settings().setValue(setting_key, self.OverrideAppCheckBox.checkState()) changed = True if changed: - self.parent.resetSupportedSuffixes() + self.parent.reset_supported_suffixes() Receiver.send_message(u'mediaitem_presentation_rebuild') Receiver.send_message(u'mediaitem_suffixes') diff --git a/tests/functional/openlp_core_ui/test_starttimedialog.py b/tests/functional/openlp_core_ui/test_starttimedialog.py index f936e0302..f3789aae8 100644 --- a/tests/functional/openlp_core_ui/test_starttimedialog.py +++ b/tests/functional/openlp_core_ui/test_starttimedialog.py @@ -5,6 +5,7 @@ import sys from unittest import TestCase from mock import MagicMock, patch +from openlp.core.lib import Registry from openlp.core.ui import starttimeform from PyQt4 import QtCore, QtGui, QtTest @@ -14,21 +15,23 @@ class TestStartTimeDialog(TestCase): """ Create the UI """ + registry = Registry.create() self.app = QtGui.QApplication([]) - self.window = QtGui.QMainWindow() - self.form = starttimeform.StartTimeForm(self.window) + self.main_window = QtGui.QMainWindow() + Registry().register(u'main_window', self.main_window) + self.form = starttimeform.StartTimeForm() def tearDown(self): """ Delete all the C++ objects at the end so that we don't have a segfault """ del self.form - del self.window + del self.main_window del self.app def ui_defaults_test(self): """ - Test StartTimeDialog defaults + Test StartTimeDialog are defaults correct """ self.assertEqual(self.form.hourSpinBox.minimum(), 0) self.assertEqual(self.form.hourSpinBox.maximum(), 4)