SlideController cleanup - merge Main and Image

This commit is contained in:
Tim Bentley 2009-08-27 06:17:20 +01:00
parent 63f67ea756
commit ed385ec31d
7 changed files with 87 additions and 159 deletions

View File

@ -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

View File

@ -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)

View File

@ -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):
"""

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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)