forked from openlp/openlp
Fix on_slide_select bugs
This commit is contained in:
parent
d4ce5489ad
commit
a5ca17246f
@ -31,7 +31,6 @@ The :mod:`slidecontroller` module contains the most important part of OpenLP - t
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import logging
|
|
||||||
import copy
|
import copy
|
||||||
from collections import deque
|
from collections import deque
|
||||||
|
|
||||||
@ -45,8 +44,6 @@ from openlp.core.lib.ui import create_action
|
|||||||
from openlp.core.utils.actions import ActionList, CategoryOrder
|
from openlp.core.utils.actions import ActionList, CategoryOrder
|
||||||
from openlp.core.ui.listpreviewwidget import ListPreviewWidget
|
from openlp.core.ui.listpreviewwidget import ListPreviewWidget
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
# Threshold which has to be trespassed to toggle.
|
# Threshold which has to be trespassed to toggle.
|
||||||
HIDE_MENU_THRESHOLD = 27
|
HIDE_MENU_THRESHOLD = 27
|
||||||
AUDIO_TIME_LABEL_STYLESHEET = 'background-color: palette(background); ' \
|
AUDIO_TIME_LABEL_STYLESHEET = 'background-color: palette(background); ' \
|
||||||
@ -280,8 +277,7 @@ class SlideController(DisplayController):
|
|||||||
self.audio_menu = QtGui.QMenu(translate('OpenLP.SlideController', 'Background Audio'), self.toolbar)
|
self.audio_menu = QtGui.QMenu(translate('OpenLP.SlideController', 'Background Audio'), self.toolbar)
|
||||||
self.audio_pause_item.setMenu(self.audio_menu)
|
self.audio_pause_item.setMenu(self.audio_menu)
|
||||||
self.audio_pause_item.setParent(self.toolbar)
|
self.audio_pause_item.setParent(self.toolbar)
|
||||||
self.toolbar.widgetForAction(self.audio_pause_item).setPopupMode(
|
self.toolbar.widgetForAction(self.audio_pause_item).setPopupMode(QtGui.QToolButton.MenuButtonPopup)
|
||||||
QtGui.QToolButton.MenuButtonPopup)
|
|
||||||
self.next_track_item = create_action(self, 'nextTrackItem', text=UiStrings().NextTrack,
|
self.next_track_item = create_action(self, 'nextTrackItem', text=UiStrings().NextTrack,
|
||||||
icon=':/slides/media_playback_next.png',
|
icon=':/slides/media_playback_next.png',
|
||||||
tooltip=translate('OpenLP.SlideController',
|
tooltip=translate('OpenLP.SlideController',
|
||||||
@ -358,7 +354,7 @@ class SlideController(DisplayController):
|
|||||||
triggers=self._slide_shortcut_activated) for s in shortcuts])
|
triggers=self._slide_shortcut_activated) for s in shortcuts])
|
||||||
self.shortcut_timer.timeout.connect(self._slide_shortcut_activated)
|
self.shortcut_timer.timeout.connect(self._slide_shortcut_activated)
|
||||||
# Signals
|
# Signals
|
||||||
self.preview_widget.clicked.connect(self.on_slide_selected)
|
self.preview_widget.itemSelectionChanged.connect(self.on_slide_selected)
|
||||||
if self.is_live:
|
if self.is_live:
|
||||||
# Need to use event as called across threads and UI is updated
|
# Need to use event as called across threads and UI is updated
|
||||||
QtCore.QObject.connect(self, QtCore.SIGNAL('slidecontroller_toggle_display'), self.toggle_display)
|
QtCore.QObject.connect(self, QtCore.SIGNAL('slidecontroller_toggle_display'), self.toggle_display)
|
||||||
@ -674,7 +670,6 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
Method to update the service item if the screen has changed
|
Method to update the service item if the screen has changed
|
||||||
"""
|
"""
|
||||||
log.debug('refresh_service_item live = %s' % self.is_live)
|
|
||||||
if self.service_item.is_text() or self.service_item.is_image():
|
if self.service_item.is_text() or self.service_item.is_image():
|
||||||
item = self.service_item
|
item = self.service_item
|
||||||
item.render()
|
item.render()
|
||||||
@ -685,7 +680,6 @@ class SlideController(DisplayController):
|
|||||||
Method to install the service item into the controller
|
Method to install the service item into the controller
|
||||||
Called by plugins
|
Called by plugins
|
||||||
"""
|
"""
|
||||||
log.debug('add_service_item live = %s' % self.is_live)
|
|
||||||
item.render()
|
item.render()
|
||||||
slide_no = 0
|
slide_no = 0
|
||||||
if self.song_edit:
|
if self.song_edit:
|
||||||
@ -705,7 +699,6 @@ class SlideController(DisplayController):
|
|||||||
Method to install the service item into the controller and request the correct toolbar for the plugin. Called by
|
Method to install the service item into the controller and request the correct toolbar for the plugin. Called by
|
||||||
:class:`~openlp.core.ui.ServiceManager`
|
:class:`~openlp.core.ui.ServiceManager`
|
||||||
"""
|
"""
|
||||||
log.debug('add_service_manager_item live = %s' % self.is_live)
|
|
||||||
# If no valid slide number is specified we take the first one, but we remember the initial value to see if we
|
# If no valid slide number is specified we take the first one, but we remember the initial value to see if we
|
||||||
# should reload the song or not
|
# should reload the song or not
|
||||||
slide_num = slide_no
|
slide_num = slide_no
|
||||||
@ -730,7 +723,6 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
Loads a ServiceItem into the system from ServiceManager. Display the slide number passed.
|
Loads a ServiceItem into the system from ServiceManager. Display the slide number passed.
|
||||||
"""
|
"""
|
||||||
log.debug('processManagerItem live = %s' % self.is_live)
|
|
||||||
self.on_stop_loop()
|
self.on_stop_loop()
|
||||||
old_item = self.service_item
|
old_item = self.service_item
|
||||||
# take a copy not a link to the servicemanager copy.
|
# take a copy not a link to the servicemanager copy.
|
||||||
@ -747,7 +739,7 @@ class SlideController(DisplayController):
|
|||||||
self.audio_pause_item.setChecked(False)
|
self.audio_pause_item.setChecked(False)
|
||||||
# If the current item has background audio
|
# If the current item has background audio
|
||||||
if self.service_item.is_capable(ItemCapabilities.HasBackgroundAudio):
|
if self.service_item.is_capable(ItemCapabilities.HasBackgroundAudio):
|
||||||
log.debug('Starting to play...')
|
self.log_debug('Starting to play...')
|
||||||
self.display.audio_player.add_to_playlist(self.service_item.background_audio)
|
self.display.audio_player.add_to_playlist(self.service_item.background_audio)
|
||||||
self.track_menu.clear()
|
self.track_menu.clear()
|
||||||
for counter in range(len(self.service_item.background_audio)):
|
for counter in range(len(self.service_item.background_audio)):
|
||||||
@ -826,7 +818,6 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
Allow the main display to blank the main display at startup time
|
Allow the main display to blank the main display at startup time
|
||||||
"""
|
"""
|
||||||
log.debug('main_display_set_background live = %s' % self.is_live)
|
|
||||||
display_type = Settings().value(self.main_window.general_settings_section + '/screen blank')
|
display_type = Settings().value(self.main_window.general_settings_section + '/screen blank')
|
||||||
if self.screens.which_screen(self.window()) != self.screens.which_screen(self.display):
|
if self.screens.which_screen(self.window()) != self.screens.which_screen(self.display):
|
||||||
# Order done to handle initial conversion
|
# Order done to handle initial conversion
|
||||||
@ -859,7 +850,7 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
if checked is None:
|
if checked is None:
|
||||||
checked = self.blank_screen.isChecked()
|
checked = self.blank_screen.isChecked()
|
||||||
log.debug('on_blank_display %s' % checked)
|
self.log_debug('on_blank_display %s' % checked)
|
||||||
self.hide_menu.setDefaultAction(self.blank_screen)
|
self.hide_menu.setDefaultAction(self.blank_screen)
|
||||||
self.blank_screen.setChecked(checked)
|
self.blank_screen.setChecked(checked)
|
||||||
self.theme_screen.setChecked(False)
|
self.theme_screen.setChecked(False)
|
||||||
@ -878,7 +869,7 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
if checked is None:
|
if checked is None:
|
||||||
checked = self.theme_screen.isChecked()
|
checked = self.theme_screen.isChecked()
|
||||||
log.debug('on_theme_display %s' % checked)
|
self.log_debug('on_theme_display %s' % checked)
|
||||||
self.hide_menu.setDefaultAction(self.theme_screen)
|
self.hide_menu.setDefaultAction(self.theme_screen)
|
||||||
self.blank_screen.setChecked(False)
|
self.blank_screen.setChecked(False)
|
||||||
self.theme_screen.setChecked(checked)
|
self.theme_screen.setChecked(checked)
|
||||||
@ -897,7 +888,7 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
if checked is None:
|
if checked is None:
|
||||||
checked = self.desktop_screen.isChecked()
|
checked = self.desktop_screen.isChecked()
|
||||||
log.debug('on_hide_display %s' % checked)
|
self.log_debug('on_hide_display %s' % checked)
|
||||||
self.hide_menu.setDefaultAction(self.desktop_screen)
|
self.hide_menu.setDefaultAction(self.desktop_screen)
|
||||||
self.blank_screen.setChecked(False)
|
self.blank_screen.setChecked(False)
|
||||||
self.theme_screen.setChecked(False)
|
self.theme_screen.setChecked(False)
|
||||||
@ -915,7 +906,7 @@ class SlideController(DisplayController):
|
|||||||
Blank/Hide the display screen within a plugin if required.
|
Blank/Hide the display screen within a plugin if required.
|
||||||
"""
|
"""
|
||||||
hide_mode = self.hide_mode()
|
hide_mode = self.hide_mode()
|
||||||
log.debug('blank_plugin %s ', hide_mode)
|
self.log_debug('blank_plugin %s ', hide_mode)
|
||||||
if self.service_item is not None:
|
if self.service_item is not None:
|
||||||
if hide_mode:
|
if hide_mode:
|
||||||
if not self.service_item.is_command():
|
if not self.service_item.is_command():
|
||||||
@ -936,7 +927,7 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
Tell the plugin to hide the display screen.
|
Tell the plugin to hide the display screen.
|
||||||
"""
|
"""
|
||||||
log.debug('hide_plugin %s ', hide)
|
self.log_debug('hide_plugin %s ', hide)
|
||||||
if self.service_item is not None:
|
if self.service_item is not None:
|
||||||
if hide:
|
if hide:
|
||||||
Registry().execute('live_display_hide', HideMode.Screen)
|
Registry().execute('live_display_hide', HideMode.Screen)
|
||||||
@ -951,9 +942,10 @@ class SlideController(DisplayController):
|
|||||||
else:
|
else:
|
||||||
Registry().execute('live_display_show')
|
Registry().execute('live_display_show')
|
||||||
|
|
||||||
def on_slide_selected(self):
|
def on_slide_selected(self, field=None):
|
||||||
"""
|
"""
|
||||||
Slide selected in controller
|
Slide selected in controller
|
||||||
|
Note for some reason a dummy field is required. Nothing is passed!
|
||||||
"""
|
"""
|
||||||
self.slide_selected()
|
self.slide_selected()
|
||||||
|
|
||||||
@ -998,7 +990,7 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
This updates the preview frame, for example after changing a slide or using *Blank to Theme*.
|
This updates the preview frame, for example after changing a slide or using *Blank to Theme*.
|
||||||
"""
|
"""
|
||||||
log.debug('update_preview %s ' % self.screens.current['primary'])
|
self.log_debug('update_preview %s ' % self.screens.current['primary'])
|
||||||
if not self.screens.current['primary'] and self.service_item and \
|
if not self.screens.current['primary'] and self.service_item and \
|
||||||
self.service_item.is_capable(ItemCapabilities.ProvidesOwnDisplay):
|
self.service_item.is_capable(ItemCapabilities.ProvidesOwnDisplay):
|
||||||
# Grab now, but try again in a couple of seconds if slide change is slow
|
# Grab now, but try again in a couple of seconds if slide change is slow
|
||||||
@ -1109,7 +1101,7 @@ class SlideController(DisplayController):
|
|||||||
checked = self.play_slides_loop.isChecked()
|
checked = self.play_slides_loop.isChecked()
|
||||||
else:
|
else:
|
||||||
self.play_slides_loop.setChecked(checked)
|
self.play_slides_loop.setChecked(checked)
|
||||||
log.debug('on_play_slides_loop %s' % checked)
|
self.log_debug('on_play_slides_loop %s' % checked)
|
||||||
if checked:
|
if checked:
|
||||||
self.play_slides_loop.setIcon(build_icon(':/media/media_stop.png'))
|
self.play_slides_loop.setIcon(build_icon(':/media/media_stop.png'))
|
||||||
self.play_slides_loop.setText(UiStrings().StopPlaySlidesInLoop)
|
self.play_slides_loop.setText(UiStrings().StopPlaySlidesInLoop)
|
||||||
@ -1130,7 +1122,7 @@ class SlideController(DisplayController):
|
|||||||
checked = self.play_slides_once.isChecked()
|
checked = self.play_slides_once.isChecked()
|
||||||
else:
|
else:
|
||||||
self.play_slides_once.setChecked(checked)
|
self.play_slides_once.setChecked(checked)
|
||||||
log.debug('on_play_slides_once %s' % checked)
|
self.log_debug('on_play_slides_once %s' % checked)
|
||||||
if checked:
|
if checked:
|
||||||
self.play_slides_once.setIcon(build_icon(':/media/media_stop.png'))
|
self.play_slides_once.setIcon(build_icon(':/media/media_stop.png'))
|
||||||
self.play_slides_once.setText(UiStrings().StopPlaySlidesToEnd)
|
self.play_slides_once.setText(UiStrings().StopPlaySlidesToEnd)
|
||||||
@ -1211,7 +1203,6 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
Respond to the arrival of a media service item
|
Respond to the arrival of a media service item
|
||||||
"""
|
"""
|
||||||
log.debug('SlideController on_media_start')
|
|
||||||
self.media_controller.video(self.controller_type, item, self.hide_mode())
|
self.media_controller.video(self.controller_type, item, self.hide_mode())
|
||||||
if not self.is_live:
|
if not self.is_live:
|
||||||
self.preview_display.show()
|
self.preview_display.show()
|
||||||
@ -1221,7 +1212,6 @@ class SlideController(DisplayController):
|
|||||||
"""
|
"""
|
||||||
Respond to a request to close the Video
|
Respond to a request to close the Video
|
||||||
"""
|
"""
|
||||||
log.debug('SlideController on_media_close')
|
|
||||||
self.media_controller.media_reset(self)
|
self.media_controller.media_reset(self)
|
||||||
self.preview_display.hide()
|
self.preview_display.hide()
|
||||||
self.slide_preview.show()
|
self.slide_preview.show()
|
||||||
@ -1339,7 +1329,7 @@ class SlideController(DisplayController):
|
|||||||
main_window = property(_get_main_window)
|
main_window = property(_get_main_window)
|
||||||
|
|
||||||
|
|
||||||
class PreviewController(RegistryMixin, SlideController, OpenLPMixin):
|
class PreviewController(RegistryMixin, OpenLPMixin, SlideController):
|
||||||
"""
|
"""
|
||||||
Set up the Live Controller.
|
Set up the Live Controller.
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user