Address some issues with preview slide controller and presentations

This commit is contained in:
Jonathan Corwin 2009-11-05 23:21:23 +00:00
parent 3853a257b3
commit e931fa023a
4 changed files with 64 additions and 33 deletions

View File

@ -47,16 +47,16 @@ class DisplayWidget(QtGui.QWidget):
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:
Receiver().send_message(u'slidecontroller_previous') Receiver().send_message(u'live_slidecontroller_previous')
event.accept() event.accept()
elif event.key() == QtCore.Qt.Key_Down: elif event.key() == QtCore.Qt.Key_Down:
Receiver().send_message(u'slidecontroller_next') Receiver().send_message(u'live_slidecontroller_next')
event.accept() event.accept()
elif event.key() == QtCore.Qt.Key_PageUp: elif event.key() == QtCore.Qt.Key_PageUp:
Receiver().send_message(u'slidecontroller_first') Receiver().send_message(u'live_slidecontroller_first')
event.accept() event.accept()
elif event.key() == QtCore.Qt.Key_PageDown: elif event.key() == QtCore.Qt.Key_PageDown:
Receiver().send_message(u'slidecontroller_last') Receiver().send_message(u'live_slidecontroller_last')
event.accept() event.accept()
elif event.key() == QtCore.Qt.Key_Escape: elif event.key() == QtCore.Qt.Key_Escape:
self.resetDisplay() self.resetDisplay()
@ -116,9 +116,9 @@ class MainDisplay(DisplayWidget):
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'alert_text'), self.displayAlert) QtCore.SIGNAL(u'alert_text'), self.displayAlert)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'presentations_start'), self.hideDisplay) QtCore.SIGNAL(u'live_slide_hide'), self.hideDisplay)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'presentations_stop'), self.showDisplay) QtCore.SIGNAL(u'live_slide_show'), self.showDisplay)
QtCore.QObject.connect(self.mediaObject, QtCore.QObject.connect(self.mediaObject,
QtCore.SIGNAL(u'finished()'), self.onMediaFinish) QtCore.SIGNAL(u'finished()'), self.onMediaFinish)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),

View File

@ -253,16 +253,20 @@ class SlideController(QtGui.QWidget):
self.Toolbar.makeWidgetsInvisible(self.media_list) self.Toolbar.makeWidgetsInvisible(self.media_list)
else: else:
self.Toolbar.makeWidgetsInvisible(self.song_list) self.Toolbar.makeWidgetsInvisible(self.song_list)
if isLive:
prefix = u'live_slidecontroller'
else:
prefix = u'preview_slidecontroller'
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_first'), self.onSlideSelectedFirst) QtCore.SIGNAL(u'%s_first' % prefix), self.onSlideSelectedFirst)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_next'), self.onSlideSelectedNext) QtCore.SIGNAL(u'%s_next' % prefix), self.onSlideSelectedNext)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_previous'), self.onSlideSelectedPrevious) QtCore.SIGNAL(u'%s_previous' % prefix), self.onSlideSelectedPrevious)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_last'), self.onSlideSelectedLast) QtCore.SIGNAL(u'%s_last' % prefix), self.onSlideSelectedLast)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_change'), self.onSlideChange) QtCore.SIGNAL(u'%s_change' % prefix), self.onSlideChange)
def onSongBarHandler(self): def onSongBarHandler(self):
request = self.sender().text() request = self.sender().text()
@ -350,7 +354,7 @@ class SlideController(QtGui.QWidget):
if item.service_item_type == ServiceItemType.Command: if item.service_item_type == ServiceItemType.Command:
Receiver().send_message(u'%s_start' % item.name.lower(), \ Receiver().send_message(u'%s_start' % item.name.lower(), \
[item.shortname, item.service_item_path, [item.shortname, item.service_item_path,
item.service_frames[0][u'title']]) item.service_frames[0][u'title'], self.isLive])
slideno = 0 slideno = 0
if self.songEdit: if self.songEdit:
slideno = self.row slideno = self.row
@ -381,7 +385,7 @@ class SlideController(QtGui.QWidget):
if item.service_item_type == ServiceItemType.Command: if item.service_item_type == ServiceItemType.Command:
Receiver().send_message(u'%s_start' % item.name.lower(), \ Receiver().send_message(u'%s_start' % item.name.lower(), \
[item.shortname, item.service_item_path, [item.shortname, item.service_item_path,
item.service_frames[0][u'title'], slideno]) item.service_frames[0][u'title'], slideno, self.isLive])
self.displayServiceManagerItems(item, slideno) self.displayServiceManagerItems(item, slideno)
def displayServiceManagerItems(self, serviceitem, slideno): def displayServiceManagerItems(self, serviceitem, slideno):

View File

@ -41,6 +41,7 @@ class MessageListener(object):
def __init__(self, controllers): def __init__(self, controllers):
self.controllers = controllers self.controllers = controllers
self.handler = None self.handler = None
self.is_live = 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)
@ -60,20 +61,25 @@ class MessageListener(object):
QtCore.SIGNAL(u'presentations_blank'), self.blank) QtCore.SIGNAL(u'presentations_blank'), self.blank)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'presentations_unblank'), self.unblank) QtCore.SIGNAL(u'presentations_unblank'), self.unblank)
self.timer = QtCore.QTimer()
self.timer.setInterval(500)
QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.timeout)
def startup(self, message): def startup(self, message):
""" """
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.decodeMessage(message) self.handler, file, self.is_live = self.decodeMessage(message)
self.controller = self.controllers[self.handler] self.controller = self.controllers[self.handler]
if self.controller.is_loaded(): if self.controller.is_loaded():
self.shutdown(None) self.shutdown(None)
self.controller.load_presentation(file) self.controller.load_presentation(file)
self.controller.start_presentation() if self.is_live:
self.controller.start_presentation()
Receiver().send_message(u'live_slide_hide')
self.controller.slidenumber = 0 self.controller.slidenumber = 0
self.controller.timer.start() self.timer.start()
def activate(self): def activate(self):
if self.controller.is_active(): if self.controller.is_active():
@ -85,52 +91,66 @@ class MessageListener(object):
self.controller.goto_slide(self.controller.slidenumber) self.controller.goto_slide(self.controller.slidenumber)
def slide(self, message): def slide(self, message):
if not self.is_live:
return
self.activate() self.activate()
if message: if message:
self.controller.goto_slide(message[0]+1) self.controller.goto_slide(message[0]+1)
self.controller.poll_slidenumber() self.controller.poll_slidenumber(self.is_live)
def first(self, message): def first(self, message):
""" """
Based on the handler passed at startup triggers the first slide Based on the handler passed at startup triggers the first slide
""" """
if not self.is_live:
return
self.activate() self.activate()
self.controller.start_presentation() self.controller.start_presentation()
self.controller.poll_slidenumber() self.controller.poll_slidenumber(self.is_live)
def last(self, message): def last(self, message):
""" """
Based on the handler passed at startup triggers the first slide Based on the handler passed at startup triggers the first slide
""" """
if not self.is_live:
return
self.activate() self.activate()
self.controller.goto_slide(self.controller.get_slide_count()) self.controller.goto_slide(self.controller.get_slide_count())
self.controller.poll_slidenumber() self.controller.poll_slidenumber(self.is_live)
def next(self, message): def next(self, message):
""" """
Based on the handler passed at startup triggers the next slide event Based on the handler passed at startup triggers the next slide event
""" """
if not self.is_live:
return
self.activate() self.activate()
self.controller.next_step() self.controller.next_step()
self.controller.poll_slidenumber() self.controller.poll_slidenumber(self.is_live)
def previous(self, message): def previous(self, message):
""" """
Based on the handler passed at startup triggers the previous slide event Based on the handler passed at startup triggers the previous slide event
""" """
if not self.is_live:
return
self.activate() self.activate()
self.controller.previous_step() self.controller.previous_step()
self.controller.poll_slidenumber() self.controller.poll_slidenumber(self.is_live)
def shutdown(self, message): def shutdown(self, message):
""" """
Based on the handler passed at startup triggers slide show to shut down Based on the handler passed at startup triggers slide show to shut down
""" """
if not self.is_live:
Receiver().send_message(u'live_slide_show')
self.controller.close_presentation() self.controller.close_presentation()
self.controller.slidenumber = 0 self.controller.slidenumber = 0
self.controller.timer.shutdown() self.timer.stop()
def blank(self): def blank(self):
if not self.is_live:
return
if not self.controller.is_loaded(): if not self.controller.is_loaded():
return return
if not self.controller.is_active(): if not self.controller.is_active():
@ -138,6 +158,8 @@ class MessageListener(object):
self.controller.blank_screen() self.controller.blank_screen()
def unblank(self): def unblank(self):
if not self.is_live:
return
self.activate() self.activate()
self.controller.unblank_screen() self.controller.unblank_screen()
@ -149,4 +171,7 @@ class MessageListener(object):
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 return message[0], file, message[3]
def timeout(self):
self.controller.poll_slidenumber(self.is_live)

View File

@ -149,9 +149,6 @@ class PresentationController(object):
self.thumbnailprefix = u'slide' self.thumbnailprefix = u'slide'
if not os.path.isdir(self.thumbnailroot): if not os.path.isdir(self.thumbnailroot):
os.makedirs(self.thumbnailroot) os.makedirs(self.thumbnailroot)
self.timer = QtCore.QTimer()
self.timer.setInterval(500)
QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.poll_slidenumber)
def check_available(self): def check_available(self):
""" """
@ -181,13 +178,16 @@ class PresentationController(object):
log.debug(u'Kill') log.debug(u'Kill')
self.close_presentation() self.close_presentation()
def load_presentation(self, presentation): def load_presentation(self, presentation, is_live):
""" """
Called when a presentation is added to the SlideController. Called when a presentation is added to the SlideController.
Loads the presentation and starts it Loads the presentation and starts it
``presentation`` ``presentation``
The file name of the presentations to the run. The file name of the presentations to the run.
``is_live``
True if Live controller is opening the presentation
""" """
pass pass
@ -207,9 +207,7 @@ class PresentationController(object):
recent than the powerpoint recent than the powerpoint
""" """
lastimage = self.get_slide_preview_file(self.get_slide_count()) lastimage = self.get_slide_preview_file(self.get_slide_count())
if lastimage is None: if not (lastimage and os.path.isfile(lastimage)):
return False
if not os.path.isfile(lastimage):
return False return False
imgdate = os.stat(lastimage).st_mtime imgdate = os.stat(lastimage).st_mtime
pptdate = os.stat(self.filepath).st_mtime pptdate = os.stat(self.filepath).st_mtime
@ -301,7 +299,7 @@ class PresentationController(object):
""" """
return None return None
def poll_slidenumber(self): def poll_slidenumber(self, is_live):
""" """
Check the current slide number Check the current slide number
""" """
@ -311,5 +309,9 @@ class PresentationController(object):
if current == self.slidenumber: if current == self.slidenumber:
return return
self.slidenumber = current self.slidenumber = current
Receiver().send_message(u'slidecontroller_change', self.slidenumber - 1) if is_live:
prefix = u'live'
else:
prefix = u'preview'
Receiver().send_message(u'%s_slidecontroller_change' % prefix,
self.slidenumber - 1)