Sort out SlideController

bzr-revno: 515
This commit is contained in:
Tim Bentley 2009-08-29 19:18:24 +01:00
commit 0f1ac7cfb2
14 changed files with 171 additions and 201 deletions

View File

@ -66,6 +66,7 @@ from mediamanageritem import MediaManagerItem
from xmlrootclass import XmlRootClass from xmlrootclass import XmlRootClass
from serviceitem import ServiceItem from serviceitem import ServiceItem
from eventreceiver import Receiver from eventreceiver import Receiver
from serviceitem import ServiceType
from serviceitem import ServiceItem from serviceitem import ServiceItem
from toolbar import OpenLPToolbar from toolbar import OpenLPToolbar
from songxmlhandler import SongXMLBuilder from songxmlhandler import SongXMLBuilder

View File

@ -29,27 +29,31 @@ class EventReceiver(QtCore.QObject):
``stop_import`` ``stop_import``
Stops the Bible Import Stops the Bible Import
``pre_load_bibles`` ``pre_load_bibles``
Triggers the plugin to relaod the bible lists Triggers the plugin to relaod the bible lists
``process_events`` ``process_events``
Requests the Application to flush the events queue Requests the Application to flush the events queue
``{preview|live}_slide_first``
display the first slide on the list
``{preview|live}_slide_previous``
display the previous slide on the list
``{preview|live}_slide_next``
display the next slide on the list
``{preview|live}_slide_last``
display the last slide on the list
``{plugin}_add_service_item `` ``{plugin}_add_service_item ``
ask the plugin to push the selected items to the service item ask the plugin to push the selected items to the service item
``update_themes `` ``update_themes ``
send out message with new themes send out message with new themes
``update_global_theme `` ``update_global_theme ``
Tell the components we have a new global theme Tell the components we have a new global theme
``load_song_list`` ``load_song_list``
Tells the the song plugin to reload the song list Tells the the song plugin to reload the song list
``update_spin_delay``
Pushes out the Image loop delay
``request_spin_delay``
Requests a spin delay
""" """
global log global log
log = logging.getLogger(u'EventReceiver') log = logging.getLogger(u'EventReceiver')

View File

@ -25,6 +25,11 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import buildIcon from openlp.core.lib import buildIcon
class ServiceType(object):
Text = 1
Image = 2
Command = 3
class ServiceItem(object): class ServiceItem(object):
""" """
The service item is a base class for the plugins to use to interact with The service item is a base class for the plugins to use to interact with
@ -83,22 +88,19 @@ class ServiceItem(object):
self.RenderManager.set_override_theme(self.theme) self.RenderManager.set_override_theme(self.theme)
log.debug(u'Formatting slides') log.debug(u'Formatting slides')
self.frames = [] self.frames = []
if self.service_item_type == u'text': if self.service_item_type == ServiceType.Text:
for slide in self.service_frames: for slide in self.service_frames:
formated = self.RenderManager.format_slide(slide[u'raw_slide']) formated = self.RenderManager.format_slide(slide[u'raw_slide'])
for format in formated: for format in formated:
frame = self.RenderManager.generate_slide(format, self.raw_footer) frame = self.RenderManager.generate_slide(format, self.raw_footer)
self.frames.append({u'title': slide[u'title'], u'image': frame}) 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.frames = self.service_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: for slide in self.service_frames:
slide[u'image'] = self.RenderManager.resize_image(slide[u'image']) slide[u'image'] = self.RenderManager.resize_image(slide[u'image'])
self.frames = self.service_frames self.frames = self.service_frames
#self.service_frames = []
else: else:
log.error(u'Invalid value renderer :%s' % self.service_item_type) log.error(u'Invalid value renderer :%s' % self.service_item_type)
@ -115,7 +117,7 @@ class ServiceItem(object):
``image`` ``image``
The actual image file name. The actual image file name.
""" """
self.service_item_type = u'image' self.service_item_type = ServiceType.Image
self.service_item_path = path self.service_item_path = path
self.service_frames.append({u'title': frame_title, u'image': image}) self.service_frames.append({u'title': frame_title, u'image': image})
@ -129,7 +131,7 @@ class ServiceItem(object):
``raw_slide`` ``raw_slide``
The raw text of the 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] frame_title = frame_title.split(u'\n')[0]
self.service_frames.append({u'title': frame_title, u'raw_slide': raw_slide}) self.service_frames.append({u'title': frame_title, u'raw_slide': raw_slide})
@ -143,7 +145,7 @@ class ServiceItem(object):
``command`` ``command``
The command of/for the slide. 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}) self.service_frames.append({u'title': frame_title, u'command': command})
def get_oos_repr(self): def get_oos_repr(self):
@ -160,15 +162,12 @@ class ServiceItem(object):
u'type':self.service_item_type u'type':self.service_item_type
} }
oos_data = [] oos_data = []
if self.service_item_type == u'text': if self.service_item_type == ServiceType.Text:
for slide in self.service_frames: for slide in self.service_frames:
oos_data.append(slide) oos_data.append(slide)
elif self.service_item_type == u'image': elif self.service_item_type == ServiceType.Image:
#print "sf", self.service_frames
for slide in self.service_frames: for slide in self.service_frames:
#print "s", slide
oos_data.append(slide[u'title']) oos_data.append(slide[u'title'])
#print "od", oos_data
return {u'header': oos_header, u'data': oos_data} return {u'header': oos_header, u'data': oos_data}
def set_from_oos(self, serviceitem, path=None): def set_from_oos(self, serviceitem, path=None):
@ -182,7 +181,6 @@ class ServiceItem(object):
``path`` ``path``
Defaults to *None*. Any path data, usually for images. Defaults to *None*. Any path data, usually for images.
""" """
#print "sfs", serviceitem
header = serviceitem[u'serviceitem'][u'header'] header = serviceitem[u'serviceitem'][u'header']
self.title = header[u'title'] self.title = header[u'title']
self.service_item_type = header[u'type'] self.service_item_type = header[u'type']
@ -190,12 +188,11 @@ class ServiceItem(object):
self.theme = header[u'theme'] self.theme = header[u'theme']
self.addIcon(header[u'icon']) self.addIcon(header[u'icon'])
self.raw_footer = header[u'footer'] 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']: for slide in serviceitem[u'serviceitem'][u'data']:
self.service_frames.append(slide) 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']: for text_image in serviceitem[u'serviceitem'][u'data']:
filename = os.path.join(path, text_image) filename = os.path.join(path, text_image)
#print "fn", filename
real_image = QtGui.QImage(unicode(filename)) real_image = QtGui.QImage(unicode(filename))
self.add_from_image(path, text_image, real_image) self.add_from_image(path, text_image, real_image)

View File

@ -93,3 +93,9 @@ class SettingsTab(QtGui.QWidget):
Save settings to disk. Save settings to disk.
""" """
pass pass
def postSetUp(self):
"""
Changes which need to be made after setup of application
"""
pass

View File

@ -34,8 +34,9 @@ class OpenLPToolbar(QtGui.QToolBar):
QtGui.QToolBar.__init__(self, None) QtGui.QToolBar.__init__(self, None)
# useful to be able to reuse button icons... # useful to be able to reuse button icons...
self.icons = {} self.icons = {}
self.actions = {}
self.log = logging.getLogger(u'OpenLPToolbar') 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): def addToolbarButton(self, title, icon, tooltip=None, slot=None, objectname=None):
""" """
@ -70,12 +71,28 @@ class OpenLPToolbar(QtGui.QToolBar):
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
QtGui.QIcon.Normal, QtGui.QIcon.Off) QtGui.QIcon.Normal, QtGui.QIcon.Off)
if ButtonIcon is not None: if ButtonIcon is not None:
if slot is not None:
ToolbarButton = self.addAction(ButtonIcon, title, slot)
else:
ToolbarButton = self.addAction(ButtonIcon, title) ToolbarButton = self.addAction(ButtonIcon, title)
if tooltip is not None: if tooltip is not None:
ToolbarButton.setToolTip(tooltip) ToolbarButton.setToolTip(tooltip)
if slot is not None:
QtCore.QObject.connect(ToolbarButton, QtCore.SIGNAL(u'triggered()'), slot)
self.icons[title] = ButtonIcon self.icons[title] = ButtonIcon
self.actions[title] = ToolbarButton
def addToolbarSeparator(self, handle):
"""
Add a Separator bar to the toolbar and store it's Handle
"""
action = self.addSeparator()
self.actions[handle] = action
def addToolbarWidget(self, handle, widget):
"""
Add a Widget to the toolbar and store it's Handle
"""
action = self.addWidget(widget)
self.actions[handle] = action
def getIconFromTitle(self, title): def getIconFromTitle(self, title):
""" """
@ -90,3 +107,11 @@ class OpenLPToolbar(QtGui.QToolBar):
else: else:
self.log.error(u'getIconFromTitle - no icon for %s' % title) self.log.error(u'getIconFromTitle - no icon for %s' % title)
return QtGui.QIcon() return QtGui.QIcon()
def makeWidgetsInvisible(self, widgets):
for widget in widgets:
self.actions[widget].setVisible(False)
def makeWidgetsVisible(self, widgets):
for widget in widgets:
self.actions[widget].setVisible(True)

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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from slidecontroller import MasterToolbar #from slidecontroller import MasterToolbar
from maindisplay import MainDisplay from maindisplay import MainDisplay
from amendthemeform import AmendThemeForm from amendthemeform import AmendThemeForm
from slidecontroller import SlideController from slidecontroller import SlideController

View File

@ -313,8 +313,6 @@ class Ui_MainWindow(object):
translate(u'mainWindow', u'Service Manager')) translate(u'mainWindow', u'Service Manager'))
self.ThemeManagerDock.setWindowTitle( self.ThemeManagerDock.setWindowTitle(
translate(u'mainWindow', u'Theme Manager')) translate(u'mainWindow', u'Theme Manager'))
self.DefaultThemeLabel.setText(MainWindow.defaultThemeText + \
self.ThemeManagerContents.getDefault())
self.FileNewItem.setText(translate(u'mainWindow', u'&New')) self.FileNewItem.setText(translate(u'mainWindow', u'&New'))
self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service')) self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service'))
self.FileNewItem.setStatusTip( self.FileNewItem.setStatusTip(
@ -492,6 +490,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
# Once all components are initialised load the Themes # Once all components are initialised load the Themes
log.info(u'Load Themes') log.info(u'Load Themes')
self.ThemeManagerContents.loadThemes() self.ThemeManagerContents.loadThemes()
log.info(u'Load data from Settings')
self.settingsForm.postSetUp()
def getMonitorNumber(self): def getMonitorNumber(self):
""" """

View File

@ -51,3 +51,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog):
for tab_index in range(0, self.SettingsTabWidget.count()): for tab_index in range(0, self.SettingsTabWidget.count()):
self.SettingsTabWidget.widget(tab_index).save() self.SettingsTabWidget.widget(tab_index).save()
return QtGui.QDialog.accept(self) return QtGui.QDialog.accept(self)
def postSetUp(self):
for tab_index in range(0, self.SettingsTabWidget.count()):
self.SettingsTabWidget.widget(tab_index).postSetUp()

View File

@ -21,7 +21,7 @@ import logging
import os import os
from PyQt4 import QtCore, QtGui 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): class SlideList(QtGui.QTableWidget):
""" """
@ -36,16 +36,16 @@ class SlideList(QtGui.QTableWidget):
if type(event) == QtGui.QKeyEvent: if type(event) == QtGui.QKeyEvent:
#here accept the event and do something #here accept the event and do something
if event.key() == QtCore.Qt.Key_Up: if event.key() == QtCore.Qt.Key_Up:
self.parent.BaseToolbar.onSlideSelectedPrevious() self.parent.onSlideSelectedPrevious()
event.accept() event.accept()
elif event.key() == QtCore.Qt.Key_Down: elif event.key() == QtCore.Qt.Key_Down:
self.parent.BaseToolbar.onSlideSelectedNext() self.parent.onSlideSelectedNext()
event.accept() event.accept()
elif event.key() == QtCore.Qt.Key_PageUp: elif event.key() == QtCore.Qt.Key_PageUp:
self.parent.BaseToolbar.onSlideSelectedFirst() self.parent.onSlideSelectedFirst()
event.accept() event.accept()
elif event.key() == QtCore.Qt.Key_PageDown: elif event.key() == QtCore.Qt.Key_PageDown:
self.parent.BaseToolbar.onSlideSelectedLast() self.parent.onSlideSelectedLast()
event.accept() event.accept()
event.ignore() event.ignore()
else: else:
@ -63,13 +63,11 @@ class SlideController(QtGui.QWidget):
""" """
Set up the Slide Controller. Set up the Slide Controller.
""" """
self.toolbarList = {}
QtGui.QWidget.__init__(self, parent) QtGui.QWidget.__init__(self, parent)
self.isLive = isLive self.isLive = isLive
self.prefix = u'preview_'
if isLive:
self.prefix = u'live_'
self.parent = parent self.parent = parent
self.image_list = [u'Start Loop', u'Stop Loop', u'Loop Spearator', u'Image SpinBox']
self.timer_id = 0
self.Panel = QtGui.QWidget(parent.ControlSplitter) self.Panel = QtGui.QWidget(parent.ControlSplitter)
self.Splitter = QtGui.QSplitter(self.Panel) self.Splitter = QtGui.QSplitter(self.Panel)
self.Splitter.setOrientation(QtCore.Qt.Vertical) self.Splitter.setOrientation(QtCore.Qt.Vertical)
@ -96,10 +94,53 @@ class SlideController(QtGui.QWidget):
self.PreviewListWidget.isLive = self.isLive self.PreviewListWidget.isLive = self.isLive
self.PreviewListWidget.setObjectName(u'PreviewListWidget') self.PreviewListWidget.setObjectName(u'PreviewListWidget')
self.ControllerLayout.addWidget(self.PreviewListWidget) self.ControllerLayout.addWidget(self.PreviewListWidget)
# Plugin the Base Toolbar class # Build the full toolbar
self.BaseToolbar = MasterToolbar(self.isLive) self.Toolbar = OpenLPToolbar(self)
self.registerToolbar(u'master', self.BaseToolbar) sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
self.Toolbar = self.BaseToolbar.getToolbar() 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.addToolbarSeparator(u'Close Separator')
self.Toolbar.addToolbarButton(u'Close Screen',
u':/slides/slide_close.png',
translate(u'SlideController', u'Close Screen'),
self.onBlankScreen)
if isLive:
self.Toolbar.addToolbarSeparator(u'Loop Spearator')
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.DelaySpinBox = QtGui.QSpinBox()
self.Toolbar.addToolbarWidget(u'Image SpinBox', self.DelaySpinBox)
self.DelaySpinBox.setSuffix(translate(u'SlideController', u's'))
self.ControllerLayout.addWidget(self.Toolbar) self.ControllerLayout.addWidget(self.Toolbar)
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
QtGui.QSizePolicy.Fixed) QtGui.QSizePolicy.Fixed)
@ -110,7 +151,7 @@ class SlideController(QtGui.QWidget):
self.Toolbar.setSizePolicy(sizeToolbarPolicy) self.Toolbar.setSizePolicy(sizeToolbarPolicy)
# Screen preview area # Screen preview area
self.PreviewFrame = QtGui.QFrame(self.Splitter) self.PreviewFrame = QtGui.QFrame(self.Splitter)
self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 280, 190)) self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225))
self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy(
QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum))
self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
@ -128,7 +169,7 @@ class SlideController(QtGui.QWidget):
sizePolicy.setHeightForWidth( sizePolicy.setHeightForWidth(
self.SlidePreview.sizePolicy().hasHeightForWidth()) self.SlidePreview.sizePolicy().hasHeightForWidth())
self.SlidePreview.setSizePolicy(sizePolicy) self.SlidePreview.setSizePolicy(sizePolicy)
self.SlidePreview.setFixedSize(QtCore.QSize(250, 210)) self.SlidePreview.setFixedSize(QtCore.QSize(300, 225))
self.SlidePreview.setFrameShape(QtGui.QFrame.Box) self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain) self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
self.SlidePreview.setLineWidth(1) self.SlidePreview.setLineWidth(1)
@ -140,45 +181,46 @@ class SlideController(QtGui.QWidget):
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
QtCore.QObject.connect(self.PreviewListWidget, QtCore.QObject.connect(self.PreviewListWidget,
QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
# Window Event Handlers if isLive:
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'%sslide_first'% self.prefix), self.onSlideSelectedFirst) QtCore.SIGNAL(u'update_spin_delay'), self.receiveSpinDelay)
QtCore.QObject.connect(Receiver.get_receiver(), Receiver().send_message(u'request_spin_delay')
QtCore.SIGNAL(u'%sslide_previous'% self.prefix), self.onSlideSelectedPrevious) if isLive:
QtCore.QObject.connect(Receiver.get_receiver(), self.Toolbar.makeWidgetsInvisible(self.image_list)
QtCore.SIGNAL(u'%sslide_next'% self.prefix), self.onSlideSelectedNext) else:
QtCore.QObject.connect(Receiver.get_receiver(), pass
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 receiveSpinDelay(self, value):
self.DelaySpinBox.setValue(int(value))
def registerToolbar(self, handle,controller): def enableToolBar(self, item):
""" """
Register a new toolbar with the controller Allows the toolbars to be reconfigured based on Controller Type
``handle`` and ServiceItem Type
Identifier for the toolbar being stored this should equal the
plugins name.
``controller``
The toolbar class which should extend MasterToolbar
""" """
#store the handle name in lower case so no probems later if self.isLive:
self.toolbarList[handle.lower()] = controller self.enableLiveToolBar(item)
else:
self.enablePreviewToolBar(item)
def retrieveToolbar(self, handle): def enableLiveToolBar(self, item):
""" """
Find the toolbar and return master if none present Allows the live toolbar to be customised
Add extra information back into toolbar class
``handle``
Identifier for the toolbar being requested
""" """
try: if item.service_item_type == ServiceType.Text:
toolbar = self.toolbarList[handle.lower()] self.Toolbar.makeWidgetsInvisible(self.image_list)
except: elif item.service_item_type == ServiceType.Image:
toolbar = self.toolbarList[u'master'] #Not sensible to allow loops with 1 frame
return toolbar if len(item.frames) > 1:
self.Toolbar.makeWidgetsVisible(self.image_list)
else:
self.Toolbar.makeWidgetsInvisible(self.image_list)
def enablePreviewToolBar(self, item):
"""
Allows the Preview toolbar to be customised
"""
pass
def addServiceItem(self, item): def addServiceItem(self, item):
""" """
@ -186,13 +228,8 @@ class SlideController(QtGui.QWidget):
request the correct the toolbar of the plugin request the correct the toolbar of the plugin
Called by plugins 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)
item.render() item.render()
self.enableToolBar(item)
self.displayServiceManagerItems(item, 0) self.displayServiceManagerItems(item, 0)
def addServiceManagerItem(self, item, slideno): def addServiceManagerItem(self, item, slideno):
@ -201,12 +238,7 @@ class SlideController(QtGui.QWidget):
request the correct the toolbar of the plugin request the correct the toolbar of the plugin
Called by ServiceManager Called by ServiceManager
""" """
self.BaseToolbar = self.retrieveToolbar(item.shortname) self.enableToolBar(item)
self.ControllerLayout.removeWidget(self.Toolbar)
#remove the old toolbar
self.Toolbar.clear()
self.Toolbar = self.BaseToolbar.getToolbar()
self.ControllerLayout.addWidget(self.Toolbar)
self.displayServiceManagerItems(item, slideno) self.displayServiceManagerItems(item, slideno)
def displayServiceManagerItems(self, serviceitem, slideno): def displayServiceManagerItems(self, serviceitem, slideno):
@ -243,25 +275,10 @@ class SlideController(QtGui.QWidget):
self.PreviewListWidget.setFocus() self.PreviewListWidget.setFocus()
#Screen event methods #Screen event methods
def onSlideSelected(self):
"""
Generate the preview when you click on a slide.
if this is the Live Controller also display on the screen
"""
row = self.PreviewListWidget.currentRow()
if row > -1 and row < self.PreviewListWidget.rowCount():
label = self.PreviewListWidget.cellWidget(row, 0)
smallframe = label.pixmap()
frame = self.serviceitem.frames[row][u'image']
self.SlidePreview.setPixmap(smallframe)
if self.isLive:
self.parent.mainDisplay.frameView(frame)
def onSlideSelectedFirst(self): def onSlideSelectedFirst(self):
""" """
Go to the first slide. Go to the first slide.
""" """
print "oSSF"
self.PreviewListWidget.selectRow(0) self.PreviewListWidget.selectRow(0)
self.onSlideSelected() self.onSlideSelected()
@ -312,12 +329,12 @@ class SlideController(QtGui.QWidget):
self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)
self.onSlideSelected() self.onSlideSelected()
def onStartLoop(self, value): def onStartLoop(self):
""" """
Go to the last slide. Go to the last slide.
""" """
if self.PreviewListWidget.rowCount() > 1: if self.PreviewListWidget.rowCount() > 1:
self.timer_id = self.startTimer(int(value) * 1000) self.timer_id = self.startTimer(int(self.DelaySpinBox.value()) * 1000)
def onStopLoop(self): def onStopLoop(self):
""" """
@ -329,88 +346,5 @@ class SlideController(QtGui.QWidget):
if event.timerId() == self.timer_id: if event.timerId() == self.timer_id:
self.onSlideSelectedNext() 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

@ -85,9 +85,6 @@ class ThemeManager(QtGui.QWidget):
self.servicePath = self.config.get_data_path() self.servicePath = self.config.get_data_path()
self.global_theme = unicode(self.config.get_config(u'theme global theme', u'')) self.global_theme = unicode(self.config.get_config(u'theme global theme', u''))
def getDefault(self):
return self.global_theme
def changeGlobalFromTab(self, themeName): def changeGlobalFromTab(self, themeName):
log.debug(u'changeGlobalFromTab %s', themeName) log.debug(u'changeGlobalFromTab %s', themeName)
for count in range (0, self.ThemeListWidget.count()): for count in range (0, self.ThemeListWidget.count()):

View File

@ -124,6 +124,9 @@ class ThemesTab(SettingsTab):
self.config.set_config(u'theme global theme',self.global_theme) self.config.set_config(u'theme global theme',self.global_theme)
Receiver().send_message(u'update_global_theme', self.global_theme ) Receiver().send_message(u'update_global_theme', self.global_theme )
def postSetUp(self):
Receiver().send_message(u'update_global_theme', self.global_theme )
def onSongLevelButtonPressed(self): def onSongLevelButtonPressed(self):
self.global_style= u'Song' self.global_style= u'Song'
self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style) self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)

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 Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from mediaitem import ImageMediaItem from mediaitem import ImageMediaItem
from imagetoolbar import ImageToolbar
from imagetab import ImageTab from imagetab import ImageTab

View File

@ -20,7 +20,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsTab, str_to_bool, translate from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver
class ImageTab(SettingsTab): class ImageTab(SettingsTab):
""" """
@ -67,3 +67,7 @@ class ImageTab(SettingsTab):
def save(self): def save(self):
self.config.set_config(u'loop delay', self.loop_delay) self.config.set_config(u'loop delay', self.loop_delay)
Receiver().send_message(u'update_spin_delay', self.loop_delay )
def postSetUp(self):
Receiver().send_message(u'update_spin_delay', self.loop_delay )

View File

@ -22,7 +22,6 @@ import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon 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 # We have to explicitly create separate classes for each plugin
# in order for DnD to the Service manager to work correctly. # 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.ServiceItemIconName = u':/media/media_image.png'
self.servicePath = None self.servicePath = None
MediaManagerItem.__init__(self, parent, icon, title) 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): def initialise(self):
self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)