Presentation, Custom , bug fixes

bzr-revno: 689
This commit is contained in:
Tim Bentley 2009-12-14 18:56:29 +00:00
commit 69d818222f
14 changed files with 321 additions and 116 deletions

View File

@ -357,7 +357,7 @@ class MediaManagerItem(QtGui.QWidget):
self.trUtf8('No items selected...'), self.trUtf8('No items selected...'),
self.trUtf8('You must select one or more items')) self.trUtf8('You must select one or more items'))
else: else:
log.debug(self.PluginNameShort + u' Preview Requested') log.debug(self.PluginNameShort + u' Preview requested')
service_item = self.buildServiceItem() service_item = self.buildServiceItem()
if service_item: if service_item:
service_item.fromPlugin = True service_item.fromPlugin = True
@ -369,7 +369,7 @@ class MediaManagerItem(QtGui.QWidget):
self.trUtf8('No items selected...'), self.trUtf8('No items selected...'),
self.trUtf8('You must select one or more items')) self.trUtf8('You must select one or more items'))
else: else:
log.debug(self.PluginNameShort + u' Live Requested') log.debug(self.PluginNameShort + u' Live requested')
service_item = self.buildServiceItem() service_item = self.buildServiceItem()
if service_item: if service_item:
service_item.fromPlugin = True service_item.fromPlugin = True
@ -381,7 +381,7 @@ class MediaManagerItem(QtGui.QWidget):
self.trUtf8('No items selected...'), self.trUtf8('No items selected...'),
self.trUtf8('You must select one or more items')) self.trUtf8('You must select one or more items'))
else: else:
log.debug(self.PluginNameShort + u' Add Requested') log.debug(self.PluginNameShort + u' Add requested')
service_item = self.buildServiceItem() service_item = self.buildServiceItem()
if service_item: if service_item:
service_item.fromPlugin = False service_item.fromPlugin = False

View File

@ -578,7 +578,7 @@ class Renderer(object):
painter.drawText(x, y + metrics.ascent(), line) painter.drawText(x, y + metrics.ascent(), line)
painter.end() painter.end()
if self._theme.display_slideTransition: if self._theme.display_slideTransition:
# Print 2nd image with 50% weight # Print 2nd image with 70% weight
painter = QtGui.QPainter() painter = QtGui.QPainter()
painter.begin(self._frameOp) painter.begin(self._frameOp)
painter.setRenderHint(QtGui.QPainter.Antialiasing); painter.setRenderHint(QtGui.QPainter.Antialiasing);

View File

@ -112,6 +112,8 @@ class ServiceItem(object):
for slide in self._raw_frames: for slide in self._raw_frames:
slide[u'image'] = \ slide[u'image'] = \
self.RenderManager.resize_image(slide[u'image']) self.RenderManager.resize_image(slide[u'image'])
elif self.service_item_type == ServiceItemType.Command:
pass
else: else:
log.error(u'Invalid value renderer :%s' % self.service_item_type) log.error(u'Invalid value renderer :%s' % self.service_item_type)

View File

@ -99,4 +99,4 @@ class AlertForm(QtGui.QDialog):
self.CancelButton.setText(self.trUtf8('Cancel')) self.CancelButton.setText(self.trUtf8('Cancel'))
def onDisplayClicked(self): def onDisplayClicked(self):
self.parent.mainDisplay.displayAlert(self.AlertEntryEditItem.text()) self.parent.mainDisplay.displayAlert(unicode(self.AlertEntryEditItem.text()))

View File

@ -234,8 +234,12 @@ class MainDisplay(DisplayWidget):
``text`` ``text``
display text display text
""" """
log.debug(u'display alert called %s' % text)
alertTab = self.parent.settingsForm.AlertsTab alertTab = self.parent.settingsForm.AlertsTab
alertframe = QtGui.QPixmap.fromImage(self.frame) if isinstance(self.frame, QtGui.QImage):
alertframe = QtGui.QPixmap.fromImage(self.frame)
else:
alertframe = QtGui.QPixmap.fromImage(self.frame[u'main'])
painter = QtGui.QPainter(alertframe) painter = QtGui.QPainter(alertframe)
top = alertframe.rect().height() * 0.9 top = alertframe.rect().height() * 0.9
painter.fillRect( painter.fillRect(
@ -261,7 +265,10 @@ class MainDisplay(DisplayWidget):
def timerEvent(self, event): def timerEvent(self, event):
if event.timerId() == self.timer_id: if event.timerId() == self.timer_id:
self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame)) if isinstance(self.frame, QtGui.QImage):
self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame))
else:
self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame[u'main']))
self.killTimer(self.timer_id) self.killTimer(self.timer_id)
self.timer_id = 0 self.timer_id = 0

View File

@ -246,7 +246,7 @@ class SlideController(QtGui.QWidget):
self.SlidePreview.sizePolicy().hasHeightForWidth()) self.SlidePreview.sizePolicy().hasHeightForWidth())
self.SlidePreview.setSizePolicy(sizePolicy) self.SlidePreview.setSizePolicy(sizePolicy)
self.SlidePreview.setFixedSize( self.SlidePreview.setFixedSize(
QtCore.QSize(self.settingsmanager.slidecontroller_image, 225)) QtCore.QSize(self.settingsmanager.slidecontroller_image,self.settingsmanager.slidecontroller_image / 1.3 ))
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)
@ -390,14 +390,12 @@ class SlideController(QtGui.QWidget):
#If old item was a command tell it to stop #If old item was a command tell it to stop
if self.serviceItem and self.serviceItem.is_command(): if self.serviceItem and self.serviceItem.is_command():
self.onMediaStop() self.onMediaStop()
if item.is_command(): if item.is_media():
if self.isLive: self.onMediaStart(item)
Receiver.send_message(u'%s_start' % item.name.lower(), \ elif item.is_command():
[item.title, item.service_item_path, Receiver.send_message(u'%s_start' % item.name.lower(), \
item.get_frame_title(), slideno, self.isLive]) [item.title, item.service_item_path,
else: item.get_frame_title(), slideno, self.isLive])
if item.is_media():
self.onMediaStart(item)
self.displayServiceManagerItems(item, slideno) self.displayServiceManagerItems(item, slideno)
def displayServiceManagerItems(self, serviceItem, slideno): def displayServiceManagerItems(self, serviceItem, slideno):
@ -475,7 +473,8 @@ class SlideController(QtGui.QWidget):
if not self.serviceItem: if not self.serviceItem:
return return
if self.serviceItem.is_command(): if self.serviceItem.is_command():
Receiver.send_message(u'%s_first'% self.serviceItem.name.lower()) Receiver.send_message(u'%s_first'% \
self.serviceItem.name.lower(), self.isLive)
self.updatePreview() self.updatePreview()
else: else:
self.PreviewListWidget.selectRow(0) self.PreviewListWidget.selectRow(0)
@ -504,17 +503,20 @@ class SlideController(QtGui.QWidget):
row = self.PreviewListWidget.currentRow() row = self.PreviewListWidget.currentRow()
self.selectedRow = 0 self.selectedRow = 0
if row > -1 and row < self.PreviewListWidget.rowCount(): if row > -1 and row < self.PreviewListWidget.rowCount():
if self.serviceItem.is_command(): if self.serviceItem.is_command() and self.isLive:
Receiver.send_message(u'%s_slide'% self.serviceItem.name.lower(), [row]) Receiver.send_message(u'%s_slide'% \
if self.isLive: self.serviceItem.name.lower(), u'%s:%s' % (row, self.isLive))
self.updatePreview() self.updatePreview()
else: else:
before = time.time() before = time.time()
frame = self.serviceItem.get_rendered_frame(row) frame = self.serviceItem.get_rendered_frame(row)
if isinstance(frame, QtGui.QImage): if isinstance(frame, QtGui.QImage):
self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
else: else:
self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[u'main'])) if isinstance(frame[u'main'], basestring):
self.SlidePreview.setPixmap(QtGui.QPixmap(frame[u'main']))
else:
self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[u'main']))
log.log(15, u'Slide Rendering took %4s' % (time.time() - before)) log.log(15, u'Slide Rendering took %4s' % (time.time() - before))
if self.isLive: if self.isLive:
self.parent.mainDisplay.frameView(frame, True) self.parent.mainDisplay.frameView(frame, True)
@ -553,7 +555,8 @@ class SlideController(QtGui.QWidget):
if not self.serviceItem: if not self.serviceItem:
return return
if self.serviceItem.is_command(): if self.serviceItem.is_command():
Receiver.send_message(u'%s_next'% self.serviceItem.name.lower()) Receiver.send_message(u'%s_next' % \
self.serviceItem.name.lower(), self.isLive)
self.updatePreview() self.updatePreview()
else: else:
row = self.PreviewListWidget.currentRow() + 1 row = self.PreviewListWidget.currentRow() + 1
@ -570,7 +573,7 @@ class SlideController(QtGui.QWidget):
return return
if self.serviceItem.is_command(): if self.serviceItem.is_command():
Receiver.send_message( Receiver.send_message(
u'%s_previous'% self.serviceItem.name.lower()) u'%s_previous'% self.serviceItem.name.lower(), self.isLive)
self.updatePreview() self.updatePreview()
else: else:
row = self.PreviewListWidget.currentRow() - 1 row = self.PreviewListWidget.currentRow() - 1
@ -586,7 +589,8 @@ class SlideController(QtGui.QWidget):
if not self.serviceItem: if not self.serviceItem:
return return
if self.serviceItem.is_command(): if self.serviceItem.is_command():
Receiver.send_message(u'%s_last'% self.serviceItem.name.lower()) Receiver.send_message(u'%s_last' % \
self.serviceItem.name.lower(), self.isLive)
self.updatePreview() self.updatePreview()
else: else:
self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)
@ -628,11 +632,16 @@ class SlideController(QtGui.QWidget):
self.serviceItem, row) self.serviceItem, row)
def onMediaStart(self, item): def onMediaStart(self, item):
self.mediaObject.stop() if self.isLive:
self.mediaObject.clearQueue() Receiver.send_message(u'%s_start' % item.name.lower(), \
file = os.path.join(item.service_item_path, item.get_frame_title()) [item.title, item.service_item_path,
self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) item.get_frame_title(), slideno, self.isLive])
self.onMediaPlay() else:
self.mediaObject.stop()
self.mediaObject.clearQueue()
file = os.path.join(item.service_item_path, item.get_frame_title())
self.mediaObject.setCurrentSource(Phonon.MediaSource(file))
self.onMediaPlay()
def onMediaPause(self): def onMediaPause(self):
if self.isLive: if self.isLive:

View File

@ -28,6 +28,7 @@ import os.path
import logging import logging
import chardet import chardet
import codecs import codecs
import time
from PyQt4 import QtCore from PyQt4 import QtCore
@ -174,12 +175,17 @@ class BibleOSISImpl():
testament) testament)
dialogobject.incrementProgressBar( dialogobject.incrementProgressBar(
self.booksOfBible[p[0]]) self.booksOfBible[p[0]])
Receiver.send_message(u'process_events')
#minor delay to get the events processed
time.sleep(0.1)
count = 0 count = 0
self.bibledb.add_verse(book.id, p[1], p[2], text) self.bibledb.add_verse(book.id, p[1], p[2], text)
count += 1 count += 1
#Every 3 verses repaint the screen #Every 3 verses repaint the screen
if count % 3 == 0: if count % 30 == 0:
Receiver.send_message(u'process_events') Receiver.send_message(u'process_events')
#minor delay to get the events processed
time.sleep(0.1)
count = 0 count = 0
except: except:
log.exception(u'Loading bible from OSIS file failed') log.exception(u'Loading bible from OSIS file failed')

View File

@ -27,7 +27,7 @@ import logging
from forms import EditCustomForm from forms import EditCustomForm
from openlp.core.lib import Plugin, build_icon from openlp.core.lib import Plugin, build_icon
from openlp.plugins.custom.lib import CustomManager, CustomMediaItem from openlp.plugins.custom.lib import CustomManager, CustomMediaItem, CustomTab
class CustomPlugin(Plugin): class CustomPlugin(Plugin):
@ -51,6 +51,9 @@ class CustomPlugin(Plugin):
self.edit_custom_form = EditCustomForm(self.custommanager) self.edit_custom_form = EditCustomForm(self.custommanager)
self.icon = build_icon(u':/media/media_custom.png') self.icon = build_icon(u':/media/media_custom.png')
def get_settings_tab(self):
return CustomTab(self.name)
def get_media_manager_item(self): def get_media_manager_item(self):
# Create the CustomManagerItem object # Create the CustomManagerItem object
return CustomMediaItem(self, self.icon, self.name) return CustomMediaItem(self, self.icon, self.name)

View File

@ -25,3 +25,4 @@
from manager import CustomManager from manager import CustomManager
from mediaitem import CustomMediaItem from mediaitem import CustomMediaItem
from customtab import CustomTab

View File

@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2009 Raoul Snyman #
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# 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 PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsTab, str_to_bool
class CustomTab(SettingsTab):
"""
CustomTab is the Custom settings tab in the settings dialog.
"""
def __init__(self, title, section=None):
SettingsTab.__init__(self, title, section)
def setupUi(self):
self.setObjectName(u'CustomTab')
self.tabTitleVisible = self.trUtf8('Custom')
self.CustomLayout = QtGui.QFormLayout(self)
self.CustomLayout.setObjectName(u'CustomLayout')
self.CustomModeGroupBox = QtGui.QGroupBox(self)
self.CustomModeGroupBox.setObjectName(u'CustomModeGroupBox')
self.CustomModeLayout = QtGui.QVBoxLayout(self.CustomModeGroupBox)
self.CustomModeLayout.setSpacing(8)
self.CustomModeLayout.setMargin(8)
self.CustomModeLayout.setObjectName(u'CustomModeLayout')
self.DisplayFooterCheckBox = QtGui.QCheckBox(self.CustomModeGroupBox)
self.DisplayFooterCheckBox.setObjectName(u'DisplayFooterCheckBox')
self.CustomModeLayout.addWidget(self.DisplayFooterCheckBox)
self.CustomLayout.setWidget(
0, QtGui.QFormLayout.LabelRole, self.CustomModeGroupBox)
QtCore.QObject.connect(self.DisplayFooterCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'),
self.onDisplayFooterCheckBoxChanged)
def retranslateUi(self):
self.CustomModeGroupBox.setTitle(self.trUtf8('Custom Display'))
self.DisplayFooterCheckBox.setText(
self.trUtf8('Display Footer:'))
def onDisplayFooterCheckBoxChanged(self, check_state):
self.displayFooter = False
# we have a set value convert to True/False
if check_state == QtCore.Qt.Checked:
self.displayFooter = True
def load(self):
self.displayFooter = str_to_bool(
self.config.get_config(u'display footer', True))
self.DisplayFooterCheckBox.setChecked(self.displayFooter)
def save(self):
self.config.set_config(u'display footer', unicode(self.displayFooter))

View File

@ -27,7 +27,8 @@ import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD, Receiver from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD,\
Receiver, str_to_bool
class CustomListView(BaseListWithDnD): class CustomListView(BaseListWithDnD):
def __init__(self, parent=None): def __init__(self, parent=None):
@ -155,9 +156,13 @@ class CustomMediaItem(MediaManagerItem):
verseList = songXML.get_verses() verseList = songXML.get_verses()
for verse in verseList: for verse in verseList:
raw_slides.append(verse[1]) raw_slides.append(verse[1])
raw_footer.append(title + u' '+ credit)
service_item.title = title service_item.title = title
for slide in raw_slides: for slide in raw_slides:
service_item.add_from_text(slide[:30], slide) service_item.add_from_text(slide[:30], slide)
if str_to_bool(self.parent.config.get_config(u'display footer', True)) or \
len(credit) > 0:
raw_footer.append(title + u' '+ credit)
else:
raw_footer.append(u'')
service_item.raw_footer = raw_footer service_item.raw_footer = raw_footer
return True return True

View File

@ -30,6 +30,122 @@ from PyQt4 import QtCore
from openlp.core.lib import Receiver from openlp.core.lib import Receiver
class Controller(object):
"""
This is the Presentation listener who acts on events from the slide
controller and passes the messages on the the correct presentation handlers
"""
global log
log = logging.getLogger(u'Controller')
log.info(u'Controller loaded')
def __init__(self, live):
self.isLive = live
log.info(u'%s controller loaded' % live)
def addHandler(self, controller, file):
log.debug(u'Live = %s, addHandler %s' % (self.isLive, file))
self.controller = controller
if self.controller.is_loaded():
self.shutdown(None)
self.controller.load_presentation(file)
if self.isLive:
self.controller.start_presentation()
Receiver.send_message(u'live_slide_hide')
self.controller.slidenumber = 0
def activate(self):
log.debug(u'Live = %s, activate' % self.isLive)
if self.controller.is_active():
return
if not self.controller.is_loaded():
self.controller.load_presentation(self.controller.filepath)
if self.isLive:
self.controller.start_presentation()
if self.controller.slidenumber > 1:
self.controller.goto_slide(self.controller.slidenumber)
def slide(self, slide, live):
log.debug(u'Live = %s, slide' % live)
# if not isLive:
# return
self.activate()
self.controller.goto_slide(int(slide) + 1)
self.controller.poll_slidenumber(live)
def first(self, message):
"""
Based on the handler passed at startup triggers the first slide
"""
log.debug(u'Live = %s, first' % self.isLive)
print "first ", message
if not self.isLive:
return
self.activate()
self.controller.start_presentation()
self.controller.poll_slidenumber(self.isLive)
def last(self, message):
"""
Based on the handler passed at startup triggers the first slide
"""
log.debug(u'Live = %s, last' % self.isLive)
print "last ", message
if not self.isLive:
return
self.activate()
self.controller.goto_slide(self.controller.get_slide_count())
self.controller.poll_slidenumber(self.isLive)
def next(self, message):
"""
Based on the handler passed at startup triggers the next slide event
"""
log.debug(u'Live = %s, next' % self.isLive)
print "next ", message
if not self.isLive:
return
self.activate()
self.controller.next_step()
self.controller.poll_slidenumber(self.isLive)
def previous(self, message):
"""
Based on the handler passed at startup triggers the previous slide event
"""
log.debug(u'Live = %s, previous' % self.isLive)
if not self.isLive:
return
print "previous ", message
self.activate()
self.controller.previous_step()
self.controller.poll_slidenumber(self.isLive)
def shutdown(self, message):
"""
Based on the handler passed at startup triggers slide show to shut down
"""
log.debug(u'Live = %s, shutdown' % self.isLive)
self.controller.close_presentation()
self.controller.slidenumber = 0
#self.timer.stop()
def blank(self):
if not self.isLive:
return
if not self.controller.is_loaded():
return
if not self.controller.is_active():
return
self.controller.blank_screen()
def unblank(self):
if not self.is_live:
return
self.activate()
self.controller.unblank_screen()
class MessageListener(object): class MessageListener(object):
""" """
This is the Presentation listener who acts on events from the slide This is the Presentation listener who acts on events from the slide
@ -41,8 +157,9 @@ class MessageListener(object):
def __init__(self, controllers): def __init__(self, controllers):
self.controllers = controllers self.controllers = controllers
self.handler = None self.previewHandler = Controller(False)
self.is_live = None self.liveHandler = Controller(True)
self.isLive = None
# messages are sent from core.ui.slidecontroller # messages are sent from core.ui.slidecontroller
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'presentations_start'), self.startup) QtCore.SIGNAL(u'presentations_start'), self.startup)
@ -71,108 +188,84 @@ class MessageListener(object):
Start of new presentation Start of new presentation
Save the handler as any new presentations start here Save the handler as any new presentations start here
""" """
self.handler, file, self.is_live = self.decodeMessage(message) log.debug(u'Startup called with message %s' % message)
self.controller = self.controllers[self.handler] self.handler, file, isLive = self.decodeMessage(message)
if self.controller.is_loaded(): if isLive:
self.shutdown(None) self.liveHandler.addHandler(self.controllers[self.handler], file)
self.controller.load_presentation(file) else:
if self.is_live: self.previewHandler.addHandler(self.controllers[self.handler], file)
self.controller.start_presentation()
Receiver.send_message(u'live_slide_hide')
self.controller.slidenumber = 0
self.timer.start()
def activate(self):
if self.controller.is_active():
return
if not self.controller.is_loaded():
self.controller.load_presentation(self.controller.filepath)
self.controller.start_presentation()
if self.controller.slidenumber > 1:
self.controller.goto_slide(self.controller.slidenumber)
def slide(self, message): def slide(self, message):
if not self.is_live: slide, live = self.splitMessage(message)
return if live:
self.activate() self.liveHandler.slide(slide, live)
if message: else:
self.controller.goto_slide(message[0]+1) self.previewHandler.slide(slide, live)
self.controller.poll_slidenumber(self.is_live)
def first(self, message): def first(self, message):
""" if self.isLive:
Based on the handler passed at startup triggers the first slide self.liveHandler.first(message)
""" else:
if not self.is_live: self.previewHandler.first(message)
return
self.activate()
self.controller.start_presentation()
self.controller.poll_slidenumber(self.is_live)
def last(self, message): def last(self, message):
""" if self.isLive:
Based on the handler passed at startup triggers the first slide self.liveHandler.last(message)
""" else:
if not self.is_live: self.previewHandler.last(message)
return
self.activate()
self.controller.goto_slide(self.controller.get_slide_count())
self.controller.poll_slidenumber(self.is_live)
def next(self, message): def next(self, message):
""" if self.isLive:
Based on the handler passed at startup triggers the next slide event self.liveHandler.next(message)
""" else:
if not self.is_live: self.previewHandler.next(message)
return
self.activate()
self.controller.next_step()
self.controller.poll_slidenumber(self.is_live)
def previous(self, message): def previous(self, message):
""" if self.isLive:
Based on the handler passed at startup triggers the previous slide event self.liveHandler.previous(message)
""" else:
if not self.is_live: self.previewHandler.previous(message)
return
self.activate()
self.controller.previous_step()
self.controller.poll_slidenumber(self.is_live)
def shutdown(self, message): def shutdown(self, message):
""" if self.isLive:
Based on the handler passed at startup triggers slide show to shut down self.liveHandler.shutdown(message)
"""
if self.is_live:
Receiver.send_message(u'live_slide_show') Receiver.send_message(u'live_slide_show')
self.controller.close_presentation() else:
self.controller.slidenumber = 0 self.previewHandler.shutdown(message)
self.timer.stop()
def blank(self): def blank(self):
if not self.is_live: if self.isLive:
return self.liveHandler.blank()
if not self.controller.is_loaded(): else:
return self.previewHandler.blank()
if not self.controller.is_active():
return
self.controller.blank_screen()
def unblank(self): def unblank(self):
if not self.is_live: if self.isLive:
return self.liveHandler.unblank()
self.activate() else:
self.controller.unblank_screen() self.previewHandler.unblank()
def splitMessage(self, message):
"""
Splits the selection messages
into it's component parts
``message``
Message containing Presentaion handler name and file to be presented.
"""
bits = message.split(u':')
return bits[0], bits[1]
def decodeMessage(self, message): def decodeMessage(self, message):
""" """
Splits the message from the SlideController into it's component parts Splits the initial message from the SlideController
into it's component parts
``message`` ``message``
Message containing Presentaion handler name and file to be presented. Message containing Presentaion handler name and file to be presented.
""" """
file = os.path.join(message[1], message[2]) file = os.path.join(message[1], message[2])
return message[0], file, message[3] return message[0], file, message[4]
def timeout(self): def timeout(self):
self.controller.poll_slidenumber(self.is_live) self.controller.poll_slidenumber(self.is_live)

View File

@ -336,14 +336,19 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
data = u'%s:%s' %(verse, subVerse) data = u'%s:%s' %(verse, subVerse)
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data)) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data))
item.setText(afterText) item.setText(afterText)
#number of lines has change #number of lines has change so repaint the list moving the data
if len(tempText.split(u'\n')) != len(afterText.split(u'\n')): if len(tempText.split(u'\n')) != len(afterText.split(u'\n')):
tempList = {} tempList = {}
tempId = {}
for row in range(0, self.VerseListWidget.count()): for row in range(0, self.VerseListWidget.count()):
tempList[row] = self.VerseListWidget.item(row).text() tempList[row] = self.VerseListWidget.item(row).text()
tempId[row] = self.VerseListWidget.item(row).\
data(QtCore.Qt.UserRole)
self.VerseListWidget.clear() self.VerseListWidget.clear()
for row in range (0, len(tempList)): for row in range (0, len(tempList)):
self.VerseListWidget.addItem(tempList[row]) item = QtGui.QListWidgetItem(tempList[row])
item.setData(QtCore.Qt.UserRole, tempId[row])
self.VerseListWidget.addItem(item)
self.VerseListWidget.repaint() self.VerseListWidget.repaint()
self.VerseEditButton.setEnabled(False) self.VerseEditButton.setEnabled(False)
self.VerseDeleteButton.setEnabled(False) self.VerseDeleteButton.setEnabled(False)

View File

@ -1 +1 @@
1.9.0-688 1.9.0-689