From 66f13e5edec6cf638ad832e379f3aaebaf2ee966 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 23 Mar 2009 19:17:07 +0000 Subject: [PATCH] Clean up Plugin Interface to be more Generic Clean up Mainwindow for adding plugins Add ThemeManager to Main window and pass to plugins Add event Manager code to plugins and define some listners Revert changes to Alert Form. --- openlp/core/lib/__init__.py | 7 +++--- openlp/core/lib/event.py | 16 ++++++++----- openlp/core/lib/eventmanager.py | 2 +- openlp/core/lib/plugin.py | 6 ++--- openlp/core/pluginmanager.py | 2 +- openlp/core/ui/alertform.py | 19 ++------------- openlp/core/ui/mainwindow.py | 25 ++++---------------- openlp/core/ui/servicemanager.py | 22 ++---------------- openlp/core/ui/settingsform.py | 6 +++++ openlp/core/ui/thememanager.py | 40 +++++++------------------------- openlp/core/ui/themestab.py | 26 +++++++-------------- 11 files changed, 48 insertions(+), 123 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index eefcbd969..989277e66 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -17,13 +17,12 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from event import EventType -from event import Event -from eventmanager import EventManager from pluginconfig import PluginConfig from plugin import Plugin from settingstab import SettingsTab from mediamanageritem import MediaManagerItem +from event import Event +from eventmanager import EventManager from xmlrootclass import XmlRootClass from serviceitem import ServiceItem from eventreceiver import Receiver @@ -32,6 +31,6 @@ from toolbar import OpenLPToolbar from songxmlhandler import SongXMLBuilder from songxmlhandler import SongXMLParser -__all__ = ['PluginConfig', 'Plugin', 'SettingsTab', 'MediaManagerItem', 'Event','EventType', +__all__ = ['PluginConfig', 'Plugin', 'SettingsTab', 'MediaManagerItem', 'Event', 'XmlRootClass', 'ServiceItem', 'Receiver', 'OpenLPToolbar', 'SongXMLBuilder', 'SongXMLParser', 'EventManager'] diff --git a/openlp/core/lib/event.py b/openlp/core/lib/event.py index 4655613af..38579d21c 100644 --- a/openlp/core/lib/event.py +++ b/openlp/core/lib/event.py @@ -40,17 +40,21 @@ class EventType(object): PreviewAfterLoad = 12 PreviewBeforeShow = 13 PreviewAfterShow = 14 - ThemeData = 15 - LoadThemeData = 16 class Event(object): """ Provides an Event class to encapsulate events within openlp.org. """ - def __init__(self, event_type=EventType.Default, payload=None): - self.event_type = event_type + def __init__(self, event_type=EventType.Default): + self.type = event_type + self.payload = None + + def get_payload(self): + return self.payload + + def set_payload(self, payload): self.payload = payload - + def get_type(self): - return self.event_type + return self.type diff --git a/openlp/core/lib/eventmanager.py b/openlp/core/lib/eventmanager.py index 12dfd2ac1..bbd907bc5 100644 --- a/openlp/core/lib/eventmanager.py +++ b/openlp/core/lib/eventmanager.py @@ -33,7 +33,7 @@ class EventManager(object): def __init__(self): self.endpoints=[] - log.info(u'Initialising') + log.info(u'Starting') def register(self, plugin): log.debug(u'plugin %s registered with EventManager'%plugin) diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 6e9bf7b4e..c94b12531 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -88,10 +88,8 @@ class Plugin(object): self.weight = 0 # Set up logging self.log = logging.getLogger(self.name) - self.preview_controller = plugin_helpers[u'preview'] - self.live_controller = plugin_helpers[u'live'] - self.theme_manager = plugin_helpers[u'theme'] - self.event_manager = plugin_helpers[u'event'] + self.preview_controller=plugin_helpers[u'preview'] + self.live_controller=plugin_helpers[u'live'] def check_pre_conditions(self): """ diff --git a/openlp/core/pluginmanager.py b/openlp/core/pluginmanager.py index d805efa20..c47df85e7 100644 --- a/openlp/core/pluginmanager.py +++ b/openlp/core/pluginmanager.py @@ -31,7 +31,7 @@ class PluginManager(object): """ global log log=logging.getLogger(u'PluginMgr') - log.info(u'"Plugin manager loaded') + log.info(u'Plugin manager loaded') def __init__(self, dir): """ diff --git a/openlp/core/ui/alertform.py b/openlp/core/ui/alertform.py index c695fdcdf..68319a65a 100644 --- a/openlp/core/ui/alertform.py +++ b/openlp/core/ui/alertform.py @@ -23,22 +23,15 @@ from PyQt4.QtGui import QDialog from openlp.core import translate from openlp.core.resources import * -from openlp.core.ui import AlertsTab -from openlp.core.lib import EventManager, Event class AlertForm(QDialog): global log log=logging.getLogger(u'AlertForm') - def __init__(self, eventmanager, parent=None): + def __init__(self, parent=None): QDialog.__init__(self, parent) - self.alertsTab = AlertsTab() - self.eventmanager = eventmanager self.setupUi(self) log.info(u'Defined') - - def get_settings_tab(self): - return self.alertsTab def setupUi(self, AlertForm): AlertForm.setObjectName("AlertForm") @@ -102,14 +95,6 @@ class AlertForm(QDialog): self.DisplayButton.setText(translate("AlertForm", u'Display')) self.CancelButton.setText(translate("AlertForm", u'Cancel')) -# def show(self): -# self.AlertForm.show() - - def handle_event(self, event): - """ - Handle the event contained in the event object. - """ - log.debug(u'Handle event called with event %s' %event.get_type()) def load_settings(self): pass @@ -118,4 +103,4 @@ class AlertForm(QDialog): pass def onDisplayClicked(self): - self.eventmanager.post_event(Event()) + pass diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 137251cf3..56904343f 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -28,7 +28,7 @@ from openlp.core.resources import * from openlp.core.ui import AboutForm, SettingsForm, AlertForm, \ SlideController, ServiceManager, ThemeManager -from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab, EventManager, Event, EventType +from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab, EventManager from openlp.core import PluginManager @@ -40,7 +40,7 @@ class MainWindow(object): def __init__(self): self.main_window = QtGui.QMainWindow() self.EventManager = EventManager() - self.alert_form = AlertForm(self.EventManager) + self.alert_form = AlertForm() self.about_form = AboutForm() self.settings_form = SettingsForm() @@ -51,10 +51,6 @@ class MainWindow(object): self.setupUi() - # Add the core components which have settings tabs - self.settings_form.addTab(self.ThemeManagerContents.get_settings_tab()) - self.settings_form.addTab(self.alert_form.get_settings_tab()) - log.info(u'Load Plugins') self.plugin_helpers[u'preview'] = self.PreviewController self.plugin_helpers[u'live'] = self.LiveController @@ -83,15 +79,6 @@ class MainWindow(object): # Call the initialise method to setup plugins. log.info(u'initialise plugins') self.plugin_manager.initialise_plugins() - - # Register the different UI components with Event Manager - self.EventManager.register(self.ServiceManagerContents) - self.EventManager.register(self.ThemeManagerContents) - self.EventManager.register(self.alert_form) - - # Now all windows are defiened and initialised Update the theme data - event = Event(EventType.LoadThemeData) - self.EventManager.post_event(event) def setupUi(self): self.main_window.setObjectName("main_window") @@ -120,10 +107,8 @@ class MainWindow(object): self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal) self.ControlSplitter.setObjectName("ControlSplitter") self.MainContentLayout.addWidget(self.ControlSplitter) - self.PreviewController = SlideController(self.ControlSplitter) self.LiveController = SlideController(self.ControlSplitter) - self.MenuBar = QtGui.QMenuBar(self.main_window) self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27)) self.MenuBar.setObjectName("MenuBar") @@ -180,7 +165,6 @@ class MainWindow(object): self.MediaManagerLayout.addWidget(self.MediaToolBox) self.MediaManagerDock.setWidget(self.MediaManagerContents) self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock) - #Sevice Manager Defined self.ServiceManagerDock = QtGui.QDockWidget(self.main_window) ServiceManagerIcon = QtGui.QIcon() @@ -189,10 +173,9 @@ class MainWindow(object): self.ServiceManagerDock.setWindowIcon(ServiceManagerIcon) self.ServiceManagerDock.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures) self.ServiceManagerDock.setObjectName("ServiceManagerDock") - self.ServiceManagerContents = ServiceManager(self, self.EventManager) + self.ServiceManagerContents = ServiceManager(self) self.ServiceManagerDock.setWidget(self.ServiceManagerContents) self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock) - #Theme Manager Defined self.ThemeManagerDock = QtGui.QDockWidget(self.main_window) ThemeManagerIcon = QtGui.QIcon() @@ -202,7 +185,7 @@ class MainWindow(object): self.ThemeManagerDock.setFloating(False) self.ThemeManagerDock.setObjectName("ThemeManagerDock") - self.ThemeManagerContents = ThemeManager(self, self.EventManager) + self.ThemeManagerContents = ThemeManager(self) # self.ThemeManagerContents = QtGui.QWidget() # self.ThemeManagerContents.setObjectName("ThemeManagerContents") diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index f153f1466..f2f45e5ce 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -29,7 +29,6 @@ from PyQt4.QtGui import * # from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController from openlp.core.lib import OpenLPToolbar from openlp.core.lib import ServiceItem -from openlp.core.lib import Event, EventType # from openlp.core import PluginManager import logging @@ -42,30 +41,24 @@ class ServiceData(QAbstractItemModel): """ global log log=logging.getLogger(u'ServiceData') - def __init__(self): QAbstractItemModel.__init__(self) self.items=[] - log.info(u'Starting') - + log.info("Starting") def columnCount(self, parent): return 1; # always only a single column (for now) - def rowCount(self, parent): return len(self.items) - def insertRow(self, row, service_item): # self.beginInsertRows(QModelIndex(),row,row) log.info("insert row %d:%s"%(row,service_item)) self.items.insert(row, service_item) log.info("Items: %s" % self.items) # self.endInsertRows() - def removeRow(self, row): self.beginRemoveRows(QModelIndex(), row,row) self.items.pop(row) self.endRemoveRows() - def addRow(self, item): self.insertRow(len(self.items), item) @@ -74,7 +67,6 @@ class ServiceData(QAbstractItemModel): def parent(self, index=QModelIndex()): return QModelIndex() # no children as yet - def data(self, index, role): """ Called by the service manager to draw us in the service window @@ -119,10 +111,9 @@ class ServiceManager(QWidget): global log log=logging.getLogger(u'ServiceManager') - def __init__(self, parent, eventManager): + def __init__(self, parent): QWidget.__init__(self) self.parent=parent - self.EventManager = eventManager self.Layout = QtGui.QVBoxLayout(self) self.Layout.setSpacing(0) self.Layout.setMargin(0) @@ -198,12 +189,3 @@ class ServiceManager(QWidget): oosfile.write(self.oos_as_text) oosfile.write("# END OOS\n") oosfile.close() - - def handle_event(self, event): - """ - Handle the event contained in the event object. - """ - log.debug(u'Handle event called with event %s' %event.get_type()) - if event.get_type() == EventType.ThemeData: - print event.payload - diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 8e4754d89..20fb8ed20 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -37,6 +37,12 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): # General tab self.GeneralTab = GeneralTab() self.addTab(self.GeneralTab) + # Themes tab + self.ThemesTab = ThemesTab() + self.addTab(self.ThemesTab) + # Alert tab + self.AlertsTab = AlertsTab() + self.addTab(self.AlertsTab) def addTab(self, tab): log.info(u'Inserting %s' % tab.title()) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 7bb70f51e..3c2f7c2bc 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -18,7 +18,6 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ import os -import logging from time import sleep from copy import deepcopy @@ -28,11 +27,11 @@ from PyQt4.QtCore import * from PyQt4.QtGui import * # from openlp.core.resources import * # from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController -from openlp.core.lib import OpenLPToolbar, Event, EventType -from openlp.core.ui import ThemesTab +from openlp.core.lib import OpenLPToolbar #from openlp.core.lib import ThemeItem # from openlp.core import PluginManager +import logging class ThemeData(QAbstractItemModel): """ @@ -42,30 +41,24 @@ class ThemeData(QAbstractItemModel): """ global log log=logging.getLogger(u'ThemeData') - def __init__(self): QAbstractItemModel.__init__(self) self.items=[] - log.info(u'Starting') - + log.info("Starting") def columnCount(self, parent): return 1; # always only a single column (for now) - def rowCount(self, parent): return len(self.items) - def insertRow(self, row, Theme_item): # self.beginInsertRows(QModelIndex(),row,row) log.info("insert row %d:%s"%(row,Theme_item)) self.items.insert(row, Theme_item) log.info("Items: %s" % self.items) # self.endInsertRows() - def removeRow(self, row): self.beginRemoveRows(QModelIndex(), row,row) self.items.pop(row) self.endRemoveRows() - def addRow(self, item): self.insertRow(len(self.items), item) @@ -74,7 +67,6 @@ class ThemeData(QAbstractItemModel): def parent(self, index=QModelIndex()): return QModelIndex() # no children as yet - def data(self, index, role): """ Called by the Theme manager to draw us in the Theme window @@ -106,6 +98,7 @@ class ThemeData(QAbstractItemModel): def item(self, row): log.info("Get Item:%d -> %s" %(row, str(self.items))) return self.items[row] + class ThemeManager(QWidget): @@ -118,10 +111,9 @@ class ThemeManager(QWidget): global log log=logging.getLogger(u'ThemeManager') - def __init__(self, parent, eventmanager): + def __init__(self, parent): QWidget.__init__(self) self.parent=parent - self.EventManager = eventmanager self.Layout = QtGui.QVBoxLayout(self) self.Layout.setSpacing(0) self.Layout.setMargin(0) @@ -142,8 +134,6 @@ class ThemeManager(QWidget): self.TreeView.setModel(self.Theme_data) self.Layout.addWidget(self.TreeView) - self.themeTab = ThemesTab(self.EventManager) - # def addThemeItem(self, item): # """Adds Theme item""" # log.info("addThemeItem") @@ -191,21 +181,7 @@ class ThemeManager(QWidget): # oosfile.write(self.oos_as_text) # oosfile.write("# END OOS\n") # oosfile.close() - - def addEventManager(self, eventmanager): - self.eventManager = eventmanager - - def get_settings_tab(self): - return self.themeTab - - def handle_event(self, event): - """ - Handle the event contained in the event object. - """ - log.debug(u'Handle event called with event %s' %event.get_type()) - if event.get_type() == EventType.LoadThemeData: - event = Event(EventType.ThemeData, self.themeTab.themelist) - self.EventManager.post_event(event) - def getThemes(self): - return self.themeTab.themelist + def get_themes(self): + return [u'Theme A', u'Theme B'] + diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 04ecec933..98b3f0e73 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -17,26 +17,19 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -import logging from PyQt4 import QtCore, QtGui from openlp.core import translate -from openlp.core.lib import SettingsTab, EventManager, Event, EventType +from openlp.core.lib import SettingsTab from openlp.core.resources import * class ThemesTab(SettingsTab): """ ThemesTab is the theme settings tab in the settings dialog. """ - global log - log=logging.getLogger(u'ThemesTab') - - def __init__(self, eventmanager): - log.debug(u'Initialise') - self.eventmanager = eventmanager - print eventmanager - SettingsTab.__init__(self, u'Themes') + def __init__(self): + SettingsTab.__init__(self, u'Themes') def setupUi(self): self.setObjectName(u'ThemesTab') @@ -52,6 +45,9 @@ class ThemesTab(SettingsTab): self.GlobalGroupBoxLayout.setObjectName(u'GlobalGroupBoxLayout') self.DefaultComboBox = QtGui.QComboBox(self.GlobalGroupBox) self.DefaultComboBox.setObjectName(u'DefaultComboBox') + self.DefaultComboBox.addItem(QtCore.QString()) + self.DefaultComboBox.addItem(QtCore.QString()) + self.DefaultComboBox.addItem(QtCore.QString()) self.GlobalGroupBoxLayout.addWidget(self.DefaultComboBox) self.DefaultListView = QtGui.QListView(self.GlobalGroupBox) self.DefaultListView.setObjectName(u'DefaultListView') @@ -99,6 +95,9 @@ class ThemesTab(SettingsTab): def retranslateUi(self): self.GlobalGroupBox.setTitle(translate(u'ThemesTab', u'Global theme')) + self.DefaultComboBox.setItemText(0, translate(u'ThemesTab', u'African Sunset')) + self.DefaultComboBox.setItemText(1, translate(u'ThemesTab', u'Snowy Mountains')) + self.DefaultComboBox.setItemText(2, translate(u'ThemesTab', u'Wilderness')) self.LevelGroupBox.setTitle(translate(u'ThemesTab', u'Theme level')) self.SongLevelRadioButton.setText(translate(u'ThemesTab', u'Song level')) self.SongLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from each song in the database. If a song doesn\'t have a theme associated with it, then use the service\'s theme. If the service doesn\'t have a theme, then use the global theme.')) @@ -106,10 +105,3 @@ class ThemesTab(SettingsTab): self.ServiceLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from the service , overriding any of the individual songs\' themes. If the service doesn\'t have a theme, then use the global theme.')) self.GlobalLevelRadioButton.setText(translate(u'ThemesTab', u'Global level')) self.GlobalLevelLabel.setText(translate(u'ThemesTab', u'Use the global theme, overriding any themes associated wither either the service or the songs.')) - - def load(self): - log.debug(u'Load') - self.themelist = [u'African Sunset', u'Snowy Mountains', u'Wilderness', u'Wet and Windy London'] - - for theme in self.themelist: - self.DefaultComboBox.addItem(translate(u'ThemesTab', theme))