From bc4f31ef93e72ec9d41a7ae4dd85d47befc996e4 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 8 Apr 2010 10:15:40 +0100 Subject: [PATCH] More fixes and new features --- openlp/core/lib/serviceitem.py | 1 + openlp/core/ui/maindisplay.py | 47 ++++++++++++++++++++-- openlp/core/ui/slidecontroller.py | 18 ++++++--- openlp/plugins/alerts/lib/alertsmanager.py | 4 ++ 4 files changed, 62 insertions(+), 8 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 7bb58af2b..8601e818e 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -47,6 +47,7 @@ class ItemCapabilities(object): AllowsEdit = 2 AllowsMaintain = 3 RequiresMedia = 4 + AllowsLoop = 5 class ServiceItem(object): diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 08cd97b10..b52d50502 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -276,7 +276,48 @@ class MainDisplay(DisplayWidget): self.display_alert.setPixmap(self.transparent) self.display_text.setPixmap(self.transparent) -class VideoDisplay(QtGui.QWidget): +class VideoWidget(QtGui.QWidget): + """ + Customised version of QTableWidget which can respond to keyboard + events. + """ + log.info(u'MainDisplay loaded') + + def __init__(self, parent=None, name=None): + QtGui.QWidget.__init__(self, None) + self.parent = parent + self.hotkey_map = {QtCore.Qt.Key_Return: 'servicemanager_next_item', + QtCore.Qt.Key_Space: 'live_slidecontroller_next_noloop', + QtCore.Qt.Key_Enter: 'live_slidecontroller_next_noloop', + QtCore.Qt.Key_0: 'servicemanager_next_item', + QtCore.Qt.Key_Backspace: 'live_slidecontroller_previous_noloop'} + + def keyPressEvent(self, event): + if type(event) == QtGui.QKeyEvent: + #here accept the event and do something + if event.key() == QtCore.Qt.Key_Up: + Receiver.send_message(u'live_slidecontroller_previous') + event.accept() + elif event.key() == QtCore.Qt.Key_Down: + Receiver.send_message(u'live_slidecontroller_next') + event.accept() + elif event.key() == QtCore.Qt.Key_PageUp: + Receiver.send_message(u'live_slidecontroller_first') + event.accept() + elif event.key() == QtCore.Qt.Key_PageDown: + Receiver.send_message(u'live_slidecontroller_last') + event.accept() + elif event.key() in self.hotkey_map: + Receiver.send_message(self.hotkey_map[event.key()]) + event.accept() + elif event.key() == QtCore.Qt.Key_Escape: + self.resetDisplay() + event.accept() + event.ignore() + else: + event.ignore() + +class VideoDisplay(VideoWidget): """ This is the form that is used to display videos on the projector. """ @@ -293,7 +334,7 @@ class VideoDisplay(QtGui.QWidget): The list of screens. """ log.debug(u'VideoDisplay Initilisation started') - QtGui.QWidget.__init__(self, None) + VideoWidget.__init__(self, parent) self.setWindowTitle(u'OpenLP Video Display') self.parent = parent self.screens = screens @@ -331,7 +372,7 @@ class VideoDisplay(QtGui.QWidget): log.debug(u'VideoDisplay Queue new media message %s' % message) file = os.path.join(message[1], message[2]) if self.firstTime: - self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) + source = self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) self.firstTime = False else: self.mediaObject.enqueue(Phonon.MediaSource(file)) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 9b5e4d319..db4c1a8ec 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -96,7 +96,7 @@ class SlideController(QtGui.QWidget): self.isLive = isLive self.parent = parent self.songsconfig = PluginConfig(u'Songs') - self.image_list = [ + self.loop_list = [ u'Start Loop', u'Stop Loop', u'Loop Separator', @@ -233,6 +233,12 @@ class SlideController(QtGui.QWidget): self.Mediabar.addToolbarButton( u'Media Stop', u':/slides/media_playback_stop.png', self.trUtf8('Start playing media'), self.onMediaStop) + if not self.isLive: + self.seekSlider = Phonon.SeekSlider() + self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) + self.seekSlider.setObjectName(u'seekSlider') + self.Mediabar.addToolbarWidget( + u'Seek Slider', self.seekSlider) self.volumeSlider = Phonon.VolumeSlider() self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24)) self.volumeSlider.setObjectName(u'volumeSlider') @@ -299,7 +305,7 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'update_spin_delay'), self.receiveSpinDelay) Receiver.send_message(u'request_spin_delay') if isLive: - self.Toolbar.makeWidgetsInvisible(self.image_list) + self.Toolbar.makeWidgetsInvisible(self.loop_list) else: self.Toolbar.makeWidgetsInvisible(self.song_edit_list) self.Mediabar.setVisible(False) @@ -374,16 +380,16 @@ class SlideController(QtGui.QWidget): self.Toolbar.setVisible(True) self.Mediabar.setVisible(False) self.Toolbar.makeWidgetsInvisible([u'Song Menu']) - self.Toolbar.makeWidgetsInvisible(self.image_list) + self.Toolbar.makeWidgetsInvisible(self.loop_list) if item.is_text(): - self.Toolbar.makeWidgetsInvisible(self.image_list) + self.Toolbar.makeWidgetsInvisible(self.loop_list) if str_to_bool(self.songsconfig.get_config(u'show songbar', True)) \ and len(self.slideList) > 0: self.Toolbar.makeWidgetsVisible([u'Song Menu']) elif item.is_image(): #Not sensible to allow loops with 1 frame if len(item.get_frames()) > 1: - self.Toolbar.makeWidgetsVisible(self.image_list) + self.Toolbar.makeWidgetsVisible(self.loop_list) elif item.is_media(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) @@ -766,6 +772,8 @@ class SlideController(QtGui.QWidget): self.mediaObject.clearQueue() file = os.path.join(item.get_frame_path(), item.get_frame_title()) self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) + self.seekSlider.setMediaObject(self.mediaObject) + self.seekSlider.show() self.onMediaPlay() def onMediaPause(self): diff --git a/openlp/plugins/alerts/lib/alertsmanager.py b/openlp/plugins/alerts/lib/alertsmanager.py index bd78ad428..dde8d0d4c 100644 --- a/openlp/plugins/alerts/lib/alertsmanager.py +++ b/openlp/plugins/alerts/lib/alertsmanager.py @@ -82,6 +82,7 @@ class AlertsManager(QtCore.QObject): self.parent.maindisplay.parent.StatusBar.showMessage(u'') self.alertList.append(text) if self.timer_id != 0: # or self.parent.maindisplay.mediaLoaded: + print self.timer_id, self.alertList, len(self.alertList) self.parent.maindisplay.parent.StatusBar.showMessage(\ self.trUtf8(u'Alert message created and delayed')) return @@ -91,7 +92,9 @@ class AlertsManager(QtCore.QObject): log.debug(u'Generate Alert called') if len(self.alertList) == 0: return + print len(self.alertList) text = self.alertList.pop(0) + print text alertTab = self.parent.alertsTab alertframe = \ QtGui.QPixmap(self.screen[u'size'].width(), self.alertHeight) @@ -113,6 +116,7 @@ class AlertsManager(QtCore.QObject): self.parent.maindisplay.addAlertImage(alertframe) # check to see if we have a timer running if self.timer_id == 0: + print "timer tripped" self.timer_id = self.startTimer(int(alertTab.timeout) * 1000) def timerEvent(self, event):