From ed385ec31daf3fe8a2b9fa374f4ecd2773b997df Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 27 Aug 2009 06:17:20 +0100 Subject: [PATCH] SlideController cleanup - merge Main and Image --- openlp/core/lib/__init__.py | 1 + openlp/core/lib/serviceitem.py | 30 ++-- openlp/core/lib/toolbar.py | 4 +- openlp/core/ui/__init__.py | 2 +- openlp/core/ui/slidecontroller.py | 204 ++++++++----------------- openlp/plugins/images/lib/__init__.py | 1 - openlp/plugins/images/lib/mediaitem.py | 4 - 7 files changed, 87 insertions(+), 159 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index be1848fed..824ec62db 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -66,6 +66,7 @@ from mediamanageritem import MediaManagerItem from xmlrootclass import XmlRootClass from serviceitem import ServiceItem from eventreceiver import Receiver +from serviceitem import ServiceType from serviceitem import ServiceItem from toolbar import OpenLPToolbar from songxmlhandler import SongXMLBuilder diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index f9dfa2097..77edf8901 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -25,6 +25,11 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import buildIcon +class ServiceType(object): + Text = 1 + Image = 2 + Command = 3 + class ServiceItem(object): """ The service item is a base class for the plugins to use to interact with @@ -83,16 +88,16 @@ class ServiceItem(object): self.RenderManager.set_override_theme(self.theme) log.debug(u'Formatting slides') self.frames = [] - if self.service_item_type == u'text': + if self.service_item_type == ServiceType.Text: for slide in self.service_frames: formated = self.RenderManager.format_slide(slide[u'raw_slide']) for format in formated: frame = self.RenderManager.generate_slide(format, self.raw_footer) self.frames.append({u'title': slide[u'title'], u'image': frame}) - elif self.service_item_type == u'command': + elif self.service_item_type == ServiceType.Command: self.frames = self.service_frames self.service_frames = [] - elif self.service_item_type == u'image': + elif self.service_item_type == ServiceType.Image: #print "image" #print self.service_frames for slide in self.service_frames: @@ -115,7 +120,7 @@ class ServiceItem(object): ``image`` The actual image file name. """ - self.service_item_type = u'image' + self.service_item_type = ServiceType.Image self.service_item_path = path self.service_frames.append({u'title': frame_title, u'image': image}) @@ -129,7 +134,7 @@ class ServiceItem(object): ``raw_slide`` The raw text of the slide. """ - self.service_item_type = u'text' + self.service_item_type = ServiceType.Text frame_title = frame_title.split(u'\n')[0] self.service_frames.append({u'title': frame_title, u'raw_slide': raw_slide}) @@ -143,7 +148,7 @@ class ServiceItem(object): ``command`` The command of/for the slide. """ - self.service_item_type = u'command' + self.service_item_type = ServiceType.Command self.service_frames.append({u'title': frame_title, u'command': command}) def get_oos_repr(self): @@ -160,15 +165,12 @@ class ServiceItem(object): u'type':self.service_item_type } oos_data = [] - if self.service_item_type == u'text': + if self.service_item_type == ServiceType.Text: for slide in self.service_frames: oos_data.append(slide) - elif self.service_item_type == u'image': - #print "sf", self.service_frames + elif self.service_item_type == ServiceType.Image: for slide in self.service_frames: - #print "s", slide oos_data.append(slide[u'title']) - #print "od", oos_data return {u'header': oos_header, u'data': oos_data} def set_from_oos(self, serviceitem, path=None): @@ -182,7 +184,6 @@ class ServiceItem(object): ``path`` Defaults to *None*. Any path data, usually for images. """ - #print "sfs", serviceitem header = serviceitem[u'serviceitem'][u'header'] self.title = header[u'title'] self.service_item_type = header[u'type'] @@ -190,12 +191,11 @@ class ServiceItem(object): self.theme = header[u'theme'] self.addIcon(header[u'icon']) self.raw_footer = header[u'footer'] - if self.service_item_type == u'text': + if self.service_item_type == ServiceType.Text: for slide in serviceitem[u'serviceitem'][u'data']: self.service_frames.append(slide) - elif self.service_item_type == u'image': + elif self.service_item_type == ServiceType.Image: for text_image in serviceitem[u'serviceitem'][u'data']: filename = os.path.join(path, text_image) - #print "fn", filename real_image = QtGui.QImage(unicode(filename)) self.add_from_image(path, text_image, real_image) diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index 0f89abed4..f5ab7a92d 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -34,8 +34,9 @@ class OpenLPToolbar(QtGui.QToolBar): QtGui.QToolBar.__init__(self, None) # useful to be able to reuse button icons... self.icons = {} + self.actions = {} self.log = logging.getLogger(u'OpenLPToolbar') - self.log.info(u'Init done') + self.log.debug(u'Init done') def addToolbarButton(self, title, icon, tooltip=None, slot=None, objectname=None): """ @@ -76,6 +77,7 @@ class OpenLPToolbar(QtGui.QToolBar): if slot is not None: QtCore.QObject.connect(ToolbarButton, QtCore.SIGNAL(u'triggered()'), slot) self.icons[title] = ButtonIcon + self.actions[title] = ToolbarButton def getIconFromTitle(self, title): """ diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 7f8cc54eb..a8d6384e6 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -17,7 +17,7 @@ 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 slidecontroller import MasterToolbar +#from slidecontroller import MasterToolbar from maindisplay import MainDisplay from amendthemeform import AmendThemeForm from slidecontroller import SlideController diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 2ca39f30c..7c03cce88 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -21,7 +21,7 @@ import logging import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver +from openlp.core.lib import OpenLPToolbar, translate, buildIcon, Receiver, ServiceType class SlideList(QtGui.QTableWidget): """ @@ -63,12 +63,8 @@ class SlideController(QtGui.QWidget): """ Set up the Slide Controller. """ - self.toolbarList = {} QtGui.QWidget.__init__(self, parent) self.isLive = isLive - self.prefix = u'preview_' - if isLive: - self.prefix = u'live_' self.parent = parent self.Panel = QtGui.QWidget(parent.ControlSplitter) self.Splitter = QtGui.QSplitter(self.Panel) @@ -96,10 +92,57 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.isLive = self.isLive self.PreviewListWidget.setObjectName(u'PreviewListWidget') self.ControllerLayout.addWidget(self.PreviewListWidget) - # Plugin the Base Toolbar class - self.BaseToolbar = MasterToolbar(self.isLive) - self.registerToolbar(u'master', self.BaseToolbar) - self.Toolbar = self.BaseToolbar.getToolbar() + # Build the full toolbar + self.Toolbar = OpenLPToolbar(self) + sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, + QtGui.QSizePolicy.Fixed) + sizeToolbarPolicy.setHorizontalStretch(0) + sizeToolbarPolicy.setVerticalStretch(0) + sizeToolbarPolicy.setHeightForWidth( + self.Toolbar.sizePolicy().hasHeightForWidth()) + self.Toolbar.setSizePolicy(sizeToolbarPolicy) + if self.isLive: + self.Toolbar.addToolbarButton(u'First Slide', + u':/slides/slide_first.png', + translate(u'SlideController', u'Move to first'), + self.onSlideSelectedFirst) + self.Toolbar.addToolbarButton(u'Previous Slide', + u':/slides/slide_previous.png', + translate(u'SlideController', u'Move to previous'), + self.onSlideSelectedPrevious) + self.Toolbar.addToolbarButton(u'Next Slide', + u':/slides/slide_next.png', + translate(u'SlideController', u'Move to next'), + self.onSlideSelectedNext) + if self.isLive: + self.Toolbar.addToolbarButton(u'Last Slide', + u':/slides/slide_last.png', + translate(u'SlideController', u'Move to last'), + self.onSlideSelectedLast) + if self.isLive: + self.Toolbar.addSeparator() + self.Toolbar.addToolbarButton(u'Close Screen', + u':/slides/slide_close.png', + translate(u'SlideController', u'Close Screen'), + self.onBlankScreen) + if isLive: + self.Toolbar.addSeparator() + self.Toolbar.addToolbarButton(u'Start Loop', + u':/media/media_time.png', + translate(u'SlideController', u'Start continuous loop'), + self.onStartLoop) + self.Toolbar.addToolbarButton(u'Stop Loop', + u':/media/media_stop.png', + translate(u'SlideController', u'Stop continuous loop'), + self.onStopLoop) + self.Toolbar.addSeparator() + self.DelaySpinBox = QtGui.QSpinBox(self.Toolbar) + self.SpinWidget = QtGui.QWidgetAction(self.Toolbar) + self.SpinWidget.setDefaultWidget(self.DelaySpinBox) + self.Toolbar.addAction(self.SpinWidget) + #self.DelaySpinBox.setValue(self.parent.parent.ImageTab.loop_delay) + self.DelaySpinBox.setSuffix(translate(u'SlideController', u's')) + self.ControllerLayout.addWidget(self.Toolbar) sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) @@ -140,45 +183,26 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) QtCore.QObject.connect(self.PreviewListWidget, QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) - # Window Event Handlers - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'%sslide_first'% self.prefix), self.onSlideSelectedFirst) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'%sslide_previous'% self.prefix), self.onSlideSelectedPrevious) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'%sslide_next'% self.prefix), self.onSlideSelectedNext) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'%sslide_last'% self.prefix), self.onSlideSelectedLast) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'%sslide_start_loop'% self.prefix), self.onStartLoop) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'%sslide_stop_loop'% self.prefix), self.onStopLoop) + def enableToolBar(self, item): + if self.isLive: + self.enableLiveToolBar(item) + else: + self.enablePreviewToolBar(item) - def registerToolbar(self, handle,controller): + def enableLiveToolBar(self, item): """ - Register a new toolbar with the controller - ``handle`` - Identifier for the toolbar being stored this should equal the - plugins name. - ``controller`` - The toolbar class which should extend MasterToolbar + Allows the live toolbar to be customised """ - #store the handle name in lower case so no probems later - self.toolbarList[handle.lower()] = controller + if item.service_item_type == ServiceType.Text: + a = c + pass - def retrieveToolbar(self, handle): + def enablePreviewToolBar(self, item): """ - Find the toolbar and return master if none present - Add extra information back into toolbar class - ``handle`` - Identifier for the toolbar being requested + Allows the Preview toolbar to be customised """ - try: - toolbar = self.toolbarList[handle.lower()] - except: - toolbar = self.toolbarList[u'master'] - return toolbar + pass def addServiceItem(self, item): """ @@ -186,12 +210,7 @@ class SlideController(QtGui.QWidget): request the correct the toolbar of the plugin Called by plugins """ - self.BaseToolbar = self.retrieveToolbar(item.shortname) - self.ControllerLayout.removeWidget(self.Toolbar) - #remove the old toolbar - self.Toolbar.clear() - self.Toolbar = self.BaseToolbar.getToolbar() - self.ControllerLayout.addWidget(self.Toolbar) + self.enableToolBar(item) item.render() self.displayServiceManagerItems(item, 0) @@ -201,12 +220,7 @@ class SlideController(QtGui.QWidget): request the correct the toolbar of the plugin Called by ServiceManager """ - self.BaseToolbar = self.retrieveToolbar(item.shortname) - self.ControllerLayout.removeWidget(self.Toolbar) - #remove the old toolbar - self.Toolbar.clear() - self.Toolbar = self.BaseToolbar.getToolbar() - self.ControllerLayout.addWidget(self.Toolbar) + self.enableToolBar(item) self.displayServiceManagerItems(item, slideno) def displayServiceManagerItems(self, serviceitem, slideno): @@ -261,7 +275,6 @@ class SlideController(QtGui.QWidget): """ Go to the first slide. """ - print "oSSF" self.PreviewListWidget.selectRow(0) self.onSlideSelected() @@ -329,88 +342,5 @@ class SlideController(QtGui.QWidget): if event.timerId() == self.timer_id: self.onSlideSelectedNext() -class MasterToolbar(QtCore.QObject): - """ - Class from which all toolbars should extend - """ - def __init__(self, isLive): - self.Toolbar = None - QtCore.QObject.__init__(self) - self.PreviewListWidget = QtGui.QListWidget() - self.isLive = isLive - self.prefix = u'preview_' - if isLive: - self.prefix = u'live_' - def getToolbar(self): - #define toolbar here as it needs to be redefined each time - #as the clear destroys it. - self.defineToolbar() - self.defineZone1() - self.defineZone2() - self.defineZone3() - self.defineZone4() - self.defineZone5() - return self.Toolbar - def defineToolbar(self): - # Controller toolbar - self.Toolbar = OpenLPToolbar(self) - sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, - QtGui.QSizePolicy.Fixed) - sizeToolbarPolicy.setHorizontalStretch(0) - sizeToolbarPolicy.setVerticalStretch(0) - sizeToolbarPolicy.setHeightForWidth( - self.Toolbar.sizePolicy().hasHeightForWidth()) - self.Toolbar.setSizePolicy(sizeToolbarPolicy) - - def defineZone1(self): - #Dummy Zone - pass - - def defineZone2(self): - if self.isLive: - self.Toolbar.addToolbarButton(u'First Slide', - u':/slides/slide_first.png', - translate(u'SlideController', u'Move to first'), - self.onSlideFirst) - self.Toolbar.addToolbarButton(u'Previous Slide', - u':/slides/slide_previous.png', - translate(u'SlideController', u'Move to previous'), - self.onSlidePrevious) - self.Toolbar.addToolbarButton(u'Next Slide', - u':/slides/slide_next.png', - translate(u'SlideController', u'Move to next'), - self.onSlideNext) - if self.isLive: - self.Toolbar.addToolbarButton(u'Last Slide', - u':/slides/slide_last.png', - translate(u'SlideController', u'Move to last'), - self.onSlideLast) - - def defineZone3(self): - #Dummy Zone - pass - - def defineZone4(self): - if self.isLive: - self.Toolbar.addSeparator() - self.Toolbar.addToolbarButton(u'Close Screen', - u':/slides/slide_close.png', - translate(u'SlideController', u'Close Screen'), - self.onSlideBlank) - - def defineZone5(self): - #Dummy Zone - pass - - def onSlideFirst(self): - Receiver().send_message(u'%sslide_first'% self.prefix) - def onSlidePrevious(self): - Receiver().send_message(u'%sslide_previous'% self.prefix) - def onSlideNext(self): - Receiver().send_message(u'%sslide_next'% self.prefix) - def onSlideLast(self): - Receiver().send_message(u'%sslide_last' % self.prefix) - def onSlideBlank(self): - Receiver().send_message(u'%sslide_blank' % self.prefix) diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index 8d037bd80..12baa1c29 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -18,5 +18,4 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ from mediaitem import ImageMediaItem -from imagetoolbar import ImageToolbar from imagetab import ImageTab diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 560b23be5..93c714c1d 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -22,7 +22,6 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon -from openlp.plugins.images.lib.imagetoolbar import ImageToolbar # We have to explicitly create separate classes for each plugin # in order for DnD to the Service manager to work correctly. @@ -56,9 +55,6 @@ class ImageMediaItem(MediaManagerItem): self.ServiceItemIconName = u':/media/media_image.png' self.servicePath = None MediaManagerItem.__init__(self, parent, icon, title) - #create and install our own slide controller toolbar - imageToolbar = ImageToolbar(self, True) - parent.live_controller.registerToolbar(self.ConfigSection, imageToolbar) def initialise(self): self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)