forked from openlp/openlp
Merge master
This commit is contained in:
commit
34bec28074
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -37,8 +37,7 @@ import logging
|
||||||
import os
|
import os
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from openlp.core.lib import build_icon, clean_tags, expand_tags, translate, \
|
from openlp.core.lib import build_icon, clean_tags, expand_tags, translate, ImageSource
|
||||||
ImageSource
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -247,12 +246,10 @@ class ServiceItem(object):
|
||||||
previous_pages = {}
|
previous_pages = {}
|
||||||
for slide in self._raw_frames:
|
for slide in self._raw_frames:
|
||||||
verse_tag = slide[u'verseTag']
|
verse_tag = slide[u'verseTag']
|
||||||
if verse_tag in previous_pages and \
|
if verse_tag in previous_pages and previous_pages[verse_tag][0] == slide[u'raw_slide']:
|
||||||
previous_pages[verse_tag][0] == slide[u'raw_slide']:
|
|
||||||
pages = previous_pages[verse_tag][1]
|
pages = previous_pages[verse_tag][1]
|
||||||
else:
|
else:
|
||||||
pages = \
|
pages = self.renderer.format_slide(slide[u'raw_slide'], self)
|
||||||
self.renderer.format_slide(slide[u'raw_slide'], self)
|
|
||||||
previous_pages[verse_tag] = (slide[u'raw_slide'], pages)
|
previous_pages[verse_tag] = (slide[u'raw_slide'], pages)
|
||||||
for page in pages:
|
for page in pages:
|
||||||
page = page.replace(u'<br>', u'{br}')
|
page = page.replace(u'<br>', u'{br}')
|
||||||
|
@ -263,8 +260,7 @@ class ServiceItem(object):
|
||||||
u'html': html.replace(u'&nbsp;', u' '),
|
u'html': html.replace(u'&nbsp;', u' '),
|
||||||
u'verseTag': verse_tag
|
u'verseTag': verse_tag
|
||||||
})
|
})
|
||||||
elif self.service_item_type == ServiceItemType.Image or \
|
elif self.service_item_type == ServiceItemType.Image or self.service_item_type == ServiceItemType.Command:
|
||||||
self.service_item_type == ServiceItemType.Command:
|
|
||||||
pass
|
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)
|
||||||
|
@ -290,8 +286,7 @@ class ServiceItem(object):
|
||||||
self.image_border = background
|
self.image_border = background
|
||||||
self.service_item_type = ServiceItemType.Image
|
self.service_item_type = ServiceItemType.Image
|
||||||
self._raw_frames.append({u'title': title, u'path': path})
|
self._raw_frames.append({u'title': title, u'path': path})
|
||||||
self.renderer.image_manager.addImage(
|
self.renderer.image_manager.addImage(path, ImageSource.ImagePlugin, self.image_border)
|
||||||
path, ImageSource.ImagePlugin, self.image_border)
|
|
||||||
self._new_item()
|
self._new_item()
|
||||||
|
|
||||||
def add_from_text(self, raw_slide, verse_tag=None):
|
def add_from_text(self, raw_slide, verse_tag=None):
|
||||||
|
@ -305,8 +300,7 @@ class ServiceItem(object):
|
||||||
verse_tag = verse_tag.upper()
|
verse_tag = verse_tag.upper()
|
||||||
self.service_item_type = ServiceItemType.Text
|
self.service_item_type = ServiceItemType.Text
|
||||||
title = raw_slide[:30].split(u'\n')[0]
|
title = raw_slide[:30].split(u'\n')[0]
|
||||||
self._raw_frames.append(
|
self._raw_frames.append({u'title': title, u'raw_slide': raw_slide, u'verseTag': verse_tag})
|
||||||
{u'title': title, u'raw_slide': raw_slide, u'verseTag': verse_tag})
|
|
||||||
self._new_item()
|
self._new_item()
|
||||||
|
|
||||||
def add_from_command(self, path, file_name, image):
|
def add_from_command(self, path, file_name, image):
|
||||||
|
@ -323,8 +317,7 @@ class ServiceItem(object):
|
||||||
The command of/for the slide.
|
The command of/for the slide.
|
||||||
"""
|
"""
|
||||||
self.service_item_type = ServiceItemType.Command
|
self.service_item_type = ServiceItemType.Command
|
||||||
self._raw_frames.append(
|
self._raw_frames.append({u'title': file_name, u'image': image, u'path': path})
|
||||||
{u'title': file_name, u'image': image, u'path': path})
|
|
||||||
self._new_item()
|
self._new_item()
|
||||||
|
|
||||||
def get_service_repr(self, lite_save):
|
def get_service_repr(self, lite_save):
|
||||||
|
@ -360,15 +353,12 @@ class ServiceItem(object):
|
||||||
elif self.service_item_type == ServiceItemType.Image:
|
elif self.service_item_type == ServiceItemType.Image:
|
||||||
if lite_save:
|
if lite_save:
|
||||||
for slide in self._raw_frames:
|
for slide in self._raw_frames:
|
||||||
service_data.append(
|
service_data.append({u'title': slide[u'title'], u'path': slide[u'path']})
|
||||||
{u'title': slide[u'title'], u'path': slide[u'path']})
|
|
||||||
else:
|
else:
|
||||||
service_data = [slide[u'title'] for slide in self._raw_frames]
|
service_data = [slide[u'title'] for slide in self._raw_frames]
|
||||||
elif self.service_item_type == ServiceItemType.Command:
|
elif self.service_item_type == ServiceItemType.Command:
|
||||||
for slide in self._raw_frames:
|
for slide in self._raw_frames:
|
||||||
service_data.append(
|
service_data.append({u'title': slide[u'title'], u'image': slide[u'image'], u'path': slide[u'path']})
|
||||||
{u'title': slide[u'title'], u'image': slide[u'image'],
|
|
||||||
u'path': slide[u'path']})
|
|
||||||
return {u'header': service_header, u'data': service_data}
|
return {u'header': service_header, u'data': service_data}
|
||||||
|
|
||||||
def set_from_service(self, serviceitem, path=None):
|
def set_from_service(self, serviceitem, path=None):
|
||||||
|
@ -421,17 +411,13 @@ class ServiceItem(object):
|
||||||
self.add_from_image(filename, text_image)
|
self.add_from_image(filename, text_image)
|
||||||
else:
|
else:
|
||||||
for text_image in serviceitem[u'serviceitem'][u'data']:
|
for text_image in serviceitem[u'serviceitem'][u'data']:
|
||||||
self.add_from_image(text_image[u'path'],
|
self.add_from_image(text_image[u'path'], text_image[u'title'])
|
||||||
text_image[u'title'])
|
|
||||||
elif self.service_item_type == ServiceItemType.Command:
|
elif self.service_item_type == ServiceItemType.Command:
|
||||||
for text_image in serviceitem[u'serviceitem'][u'data']:
|
for text_image in serviceitem[u'serviceitem'][u'data']:
|
||||||
if path:
|
if path:
|
||||||
self.add_from_command(
|
self.add_from_command(path, text_image[u'title'], text_image[u'image'])
|
||||||
path, text_image[u'title'], text_image[u'image'])
|
|
||||||
else:
|
else:
|
||||||
self.add_from_command(
|
self.add_from_command(text_image[u'path'], text_image[u'title'], text_image[u'image'])
|
||||||
text_image[u'path'], text_image[u'title'],
|
|
||||||
text_image[u'image'])
|
|
||||||
|
|
||||||
self._new_item()
|
self._new_item()
|
||||||
|
|
||||||
|
@ -505,8 +491,7 @@ class ServiceItem(object):
|
||||||
"""
|
"""
|
||||||
Confirms if the ServiceItem uses a file
|
Confirms if the ServiceItem uses a file
|
||||||
"""
|
"""
|
||||||
return self.service_item_type == ServiceItemType.Image or \
|
return self.service_item_type == ServiceItemType.Image or self.service_item_type == ServiceItemType.Command
|
||||||
self.service_item_type == ServiceItemType.Command
|
|
||||||
|
|
||||||
def is_text(self):
|
def is_text(self):
|
||||||
"""
|
"""
|
||||||
|
@ -573,7 +558,7 @@ class ServiceItem(object):
|
||||||
|
|
||||||
def remove_frame(self, frame):
|
def remove_frame(self, frame):
|
||||||
"""
|
"""
|
||||||
Remove the soecified frame from the item
|
Remove the specified frame from the item
|
||||||
"""
|
"""
|
||||||
if frame in self._raw_frames:
|
if frame in self._raw_frames:
|
||||||
self._raw_frames.remove(frame)
|
self._raw_frames.remove(frame)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -89,8 +89,7 @@ def get_media_players():
|
||||||
overridden_player = u'auto'
|
overridden_player = u'auto'
|
||||||
else:
|
else:
|
||||||
overridden_player = u''
|
overridden_player = u''
|
||||||
saved_players_list = saved_players.replace(u'[', u'').\
|
saved_players_list = saved_players.replace(u'[', u'').replace(u']',u'').split(u',')
|
||||||
replace(u']',u'').split(u',')
|
|
||||||
return saved_players_list, overridden_player
|
return saved_players_list, overridden_player
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,9 +106,8 @@ def set_media_players(players_list, overridden_player=u'auto'):
|
||||||
"""
|
"""
|
||||||
log.debug(u'set_media_players')
|
log.debug(u'set_media_players')
|
||||||
players = u','.join(players_list)
|
players = u','.join(players_list)
|
||||||
if Settings().value(u'media/override player',
|
if Settings().value(u'media/override player', QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == \
|
||||||
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == \
|
QtCore.Qt.Checked and overridden_player != u'auto':
|
||||||
QtCore.Qt.Checked and overridden_player != u'auto':
|
|
||||||
players = players.replace(overridden_player, u'[%s]' % overridden_player)
|
players = players.replace(overridden_player, u'[%s]' % overridden_player)
|
||||||
Settings().setValue(u'media/players', QtCore.QVariant(players))
|
Settings().setValue(u'media/players', QtCore.QVariant(players))
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -66,33 +66,21 @@ class MediaController(object):
|
||||||
self.timer = QtCore.QTimer()
|
self.timer = QtCore.QTimer()
|
||||||
self.timer.setInterval(200)
|
self.timer.setInterval(200)
|
||||||
# Signals
|
# Signals
|
||||||
QtCore.QObject.connect(self.timer,
|
QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.media_state)
|
||||||
QtCore.SIGNAL("timeout()"), self.media_state)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'playbackPlay'), self.media_play_msg)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'playbackPause'), self.media_pause_msg)
|
||||||
QtCore.SIGNAL(u'playbackPlay'), self.media_play_msg)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'playbackStop'), self.media_stop_msg)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'seekSlider'), self.media_seek)
|
||||||
QtCore.SIGNAL(u'playbackPause'), self.media_pause_msg)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'volumeSlider'), self.media_volume)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'media_hide'), self.media_hide)
|
||||||
QtCore.SIGNAL(u'playbackStop'), self.media_stop_msg)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'media_blank'), self.media_blank)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'media_unblank'), self.media_unblank)
|
||||||
QtCore.SIGNAL(u'seekSlider'), self.media_seek)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'volumeSlider'), self.media_volume)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'media_hide'), self.media_hide)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'media_blank'), self.media_blank)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'media_unblank'), self.media_unblank)
|
|
||||||
# Signals for background video
|
# Signals for background video
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'songs_hide'), self.media_hide)
|
||||||
QtCore.SIGNAL(u'songs_hide'), self.media_hide)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'songs_unblank'), self.media_unblank)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'mediaitem_media_rebuild'),
|
||||||
QtCore.SIGNAL(u'songs_unblank'), self.media_unblank)
|
self._set_active_players)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'mediaitem_suffixes'),
|
||||||
QtCore.SIGNAL(u'mediaitem_media_rebuild'), self._set_active_players)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'mediaitem_suffixes'),
|
|
||||||
self._generate_extensions_lists)
|
self._generate_extensions_lists)
|
||||||
|
|
||||||
def _set_active_players(self):
|
def _set_active_players(self):
|
||||||
|
@ -113,16 +101,14 @@ class MediaController(object):
|
||||||
for item in player.audio_extensions_list:
|
for item in player.audio_extensions_list:
|
||||||
if not item in self.audio_extensions_list:
|
if not item in self.audio_extensions_list:
|
||||||
self.audio_extensions_list.append(item)
|
self.audio_extensions_list.append(item)
|
||||||
self.mainWindow.serviceManagerContents. \
|
self.mainWindow.serviceManagerContents.supportedSuffixes(item[2:])
|
||||||
supportedSuffixes(item[2:])
|
|
||||||
self.video_extensions_list = []
|
self.video_extensions_list = []
|
||||||
for player in self.mediaPlayers.values():
|
for player in self.mediaPlayers.values():
|
||||||
if player.isActive:
|
if player.isActive:
|
||||||
for item in player.video_extensions_list:
|
for item in player.video_extensions_list:
|
||||||
if item not in self.video_extensions_list:
|
if item not in self.video_extensions_list:
|
||||||
self.video_extensions_list.extend(item)
|
self.video_extensions_list.extend(item)
|
||||||
self.mainWindow.serviceManagerContents. \
|
self.mainWindow.serviceManagerContents.supportedSuffixes(item[2:])
|
||||||
supportedSuffixes(item[2:])
|
|
||||||
|
|
||||||
def register_players(self, player):
|
def register_players(self, player):
|
||||||
"""
|
"""
|
||||||
|
@ -143,20 +129,17 @@ class MediaController(object):
|
||||||
AppLocation.get_directory(AppLocation.AppDir),
|
AppLocation.get_directory(AppLocation.AppDir),
|
||||||
u'core', u'ui', u'media')
|
u'core', u'ui', u'media')
|
||||||
for filename in os.listdir(controller_dir):
|
for filename in os.listdir(controller_dir):
|
||||||
if filename.endswith(u'player.py') and \
|
if filename.endswith(u'player.py') and not filename == 'mediaplayer.py':
|
||||||
not filename == 'mediaplayer.py':
|
|
||||||
path = os.path.join(controller_dir, filename)
|
path = os.path.join(controller_dir, filename)
|
||||||
if os.path.isfile(path):
|
if os.path.isfile(path):
|
||||||
modulename = u'openlp.core.ui.media.' + \
|
modulename = u'openlp.core.ui.media.' + os.path.splitext(filename)[0]
|
||||||
os.path.splitext(filename)[0]
|
|
||||||
log.debug(u'Importing controller %s', modulename)
|
log.debug(u'Importing controller %s', modulename)
|
||||||
try:
|
try:
|
||||||
__import__(modulename, globals(), locals(), [])
|
__import__(modulename, globals(), locals(), [])
|
||||||
# On some platforms importing vlc.py might cause
|
# On some platforms importing vlc.py might cause
|
||||||
# also OSError exceptions. (e.g. Mac OS X)
|
# also OSError exceptions. (e.g. Mac OS X)
|
||||||
except (ImportError, OSError):
|
except (ImportError, OSError):
|
||||||
log.warn(u'Failed to import %s on path %s',
|
log.warn(u'Failed to import %s on path %s', modulename, path)
|
||||||
modulename, path)
|
|
||||||
player_classes = MediaPlayer.__subclasses__()
|
player_classes = MediaPlayer.__subclasses__()
|
||||||
for player_class in player_classes:
|
for player_class in player_classes:
|
||||||
player = player_class(self)
|
player = player_class(self)
|
||||||
|
@ -165,8 +148,7 @@ class MediaController(object):
|
||||||
return False
|
return False
|
||||||
savedPlayers, overriddenPlayer = get_media_players()
|
savedPlayers, overriddenPlayer = get_media_players()
|
||||||
invalidMediaPlayers = [mediaPlayer for mediaPlayer in savedPlayers
|
invalidMediaPlayers = [mediaPlayer for mediaPlayer in savedPlayers
|
||||||
if not mediaPlayer in self.mediaPlayers or not
|
if not mediaPlayer in self.mediaPlayers or not self.mediaPlayers[mediaPlayer].check_available()]
|
||||||
self.mediaPlayers[mediaPlayer].check_available()]
|
|
||||||
if invalidMediaPlayers:
|
if invalidMediaPlayers:
|
||||||
for invalidPlayer in invalidMediaPlayers:
|
for invalidPlayer in invalidMediaPlayers:
|
||||||
savedPlayers.remove(invalidPlayer)
|
savedPlayers.remove(invalidPlayer)
|
||||||
|
@ -188,8 +170,7 @@ class MediaController(object):
|
||||||
display = self._define_display(self.displayControllers[source])
|
display = self._define_display(self.displayControllers[source])
|
||||||
self.currentMediaPlayer[source].resize(display)
|
self.currentMediaPlayer[source].resize(display)
|
||||||
self.currentMediaPlayer[source].update_ui(display)
|
self.currentMediaPlayer[source].update_ui(display)
|
||||||
if self.currentMediaPlayer[source].state == \
|
if self.currentMediaPlayer[source].state == MediaState.Playing:
|
||||||
MediaState.Playing:
|
|
||||||
any_active = True
|
any_active = True
|
||||||
# There are still any active players - no need to stop timer.
|
# There are still any active players - no need to stop timer.
|
||||||
if any_active:
|
if any_active:
|
||||||
|
@ -251,28 +232,20 @@ class MediaController(object):
|
||||||
controller.media_info = MediaInfo()
|
controller.media_info = MediaInfo()
|
||||||
# Build a Media ToolBar
|
# Build a Media ToolBar
|
||||||
controller.mediabar = OpenLPToolbar(controller)
|
controller.mediabar = OpenLPToolbar(controller)
|
||||||
controller.mediabar.addToolbarAction(u'playbackPlay',
|
controller.mediabar.addToolbarAction(u'playbackPlay', text=u'media_playback_play',
|
||||||
text=u'media_playback_play',
|
|
||||||
icon=u':/slides/media_playback_start.png',
|
icon=u':/slides/media_playback_start.png',
|
||||||
tooltip=translate('OpenLP.SlideController', 'Start playing media.'),
|
tooltip=translate('OpenLP.SlideController', 'Start playing media.'), triggers=controller.sendToPlugins)
|
||||||
triggers=controller.sendToPlugins)
|
controller.mediabar.addToolbarAction(u'playbackPause', text=u'media_playback_pause',
|
||||||
controller.mediabar.addToolbarAction(u'playbackPause',
|
|
||||||
text=u'media_playback_pause',
|
|
||||||
icon=u':/slides/media_playback_pause.png',
|
icon=u':/slides/media_playback_pause.png',
|
||||||
tooltip=translate('OpenLP.SlideController',
|
tooltip=translate('OpenLP.SlideController', 'Pause playing media.'), triggers=controller.sendToPlugins)
|
||||||
'Pause playing media.'),
|
controller.mediabar.addToolbarAction(u'playbackStop', text=u'media_playback_stop',
|
||||||
triggers=controller.sendToPlugins)
|
|
||||||
controller.mediabar.addToolbarAction(u'playbackStop',
|
|
||||||
text=u'media_playback_stop',
|
|
||||||
icon=u':/slides/media_playback_stop.png',
|
icon=u':/slides/media_playback_stop.png',
|
||||||
tooltip=translate('OpenLP.SlideController', 'Stop playing media.'),
|
tooltip=translate('OpenLP.SlideController', 'Stop playing media.'), triggers=controller.sendToPlugins)
|
||||||
triggers=controller.sendToPlugins)
|
|
||||||
# Build the seekSlider.
|
# Build the seekSlider.
|
||||||
controller.seekSlider = QtGui.QSlider(QtCore.Qt.Horizontal)
|
controller.seekSlider = QtGui.QSlider(QtCore.Qt.Horizontal)
|
||||||
controller.seekSlider.setMaximum(1000)
|
controller.seekSlider.setMaximum(1000)
|
||||||
controller.seekSlider.setTracking(False)
|
controller.seekSlider.setTracking(False)
|
||||||
controller.seekSlider.setToolTip(translate(
|
controller.seekSlider.setToolTip(translate('OpenLP.SlideController', 'Video position.'))
|
||||||
'OpenLP.SlideController', 'Video position.'))
|
|
||||||
controller.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
|
controller.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
|
||||||
controller.seekSlider.setObjectName(u'seekSlider')
|
controller.seekSlider.setObjectName(u'seekSlider')
|
||||||
controller.mediabar.addToolbarWidget(controller.seekSlider)
|
controller.mediabar.addToolbarWidget(controller.seekSlider)
|
||||||
|
@ -283,8 +256,7 @@ class MediaController(object):
|
||||||
controller.volumeSlider.setMinimum(0)
|
controller.volumeSlider.setMinimum(0)
|
||||||
controller.volumeSlider.setMaximum(100)
|
controller.volumeSlider.setMaximum(100)
|
||||||
controller.volumeSlider.setTracking(True)
|
controller.volumeSlider.setTracking(True)
|
||||||
controller.volumeSlider.setToolTip(translate(
|
controller.volumeSlider.setToolTip(translate('OpenLP.SlideController', 'Audio Volume.'))
|
||||||
'OpenLP.SlideController', 'Audio Volume.'))
|
|
||||||
controller.volumeSlider.setValue(controller.media_info.volume)
|
controller.volumeSlider.setValue(controller.media_info.volume)
|
||||||
controller.volumeSlider.setGeometry(QtCore.QRect(90, 160, 221, 24))
|
controller.volumeSlider.setGeometry(QtCore.QRect(90, 160, 221, 24))
|
||||||
controller.volumeSlider.setObjectName(u'volumeSlider')
|
controller.volumeSlider.setObjectName(u'volumeSlider')
|
||||||
|
@ -292,10 +264,8 @@ class MediaController(object):
|
||||||
controller.controllerLayout.addWidget(controller.mediabar)
|
controller.controllerLayout.addWidget(controller.mediabar)
|
||||||
controller.mediabar.setVisible(False)
|
controller.mediabar.setVisible(False)
|
||||||
# Signals
|
# Signals
|
||||||
QtCore.QObject.connect(controller.seekSlider,
|
QtCore.QObject.connect(controller.seekSlider, QtCore.SIGNAL(u'valueChanged(int)'), controller.sendToPlugins)
|
||||||
QtCore.SIGNAL(u'valueChanged(int)'), controller.sendToPlugins)
|
QtCore.QObject.connect(controller.volumeSlider, QtCore.SIGNAL(u'valueChanged(int)'), controller.sendToPlugins)
|
||||||
QtCore.QObject.connect(controller.volumeSlider,
|
|
||||||
QtCore.SIGNAL(u'valueChanged(int)'), controller.sendToPlugins)
|
|
||||||
|
|
||||||
|
|
||||||
def setup_display(self, display, preview):
|
def setup_display(self, display, preview):
|
||||||
|
@ -337,8 +307,7 @@ class MediaController(object):
|
||||||
controller.mediabar.setVisible(value)
|
controller.mediabar.setVisible(value)
|
||||||
if controller.isLive and controller.display:
|
if controller.isLive and controller.display:
|
||||||
if self.currentMediaPlayer and value:
|
if self.currentMediaPlayer and value:
|
||||||
if self.currentMediaPlayer[controller.controllerType] != \
|
if self.currentMediaPlayer[controller.controllerType] != self.mediaPlayers[u'webkit']:
|
||||||
self.mediaPlayers[u'webkit']:
|
|
||||||
controller.display.setTransparency(False)
|
controller.display.setTransparency(False)
|
||||||
|
|
||||||
def resize(self, display, player):
|
def resize(self, display, player):
|
||||||
|
@ -382,8 +351,7 @@ class MediaController(object):
|
||||||
else:
|
else:
|
||||||
controller.media_info.volume = controller.volumeSlider.value()
|
controller.media_info.volume = controller.volumeSlider.value()
|
||||||
controller.media_info.is_background = False
|
controller.media_info.is_background = False
|
||||||
controller.media_info.file_info = \
|
controller.media_info.file_info = QtCore.QFileInfo(serviceItem.get_frame_path())
|
||||||
QtCore.QFileInfo(serviceItem.get_frame_path())
|
|
||||||
display = self._define_display(controller)
|
display = self._define_display(controller)
|
||||||
if controller.isLive:
|
if controller.isLive:
|
||||||
isValid = self._check_file_type(controller, display, serviceItem)
|
isValid = self._check_file_type(controller, display, serviceItem)
|
||||||
|
@ -394,45 +362,36 @@ class MediaController(object):
|
||||||
controller.media_info.start_time = 0
|
controller.media_info.start_time = 0
|
||||||
controller.media_info.end_time = 0
|
controller.media_info.end_time = 0
|
||||||
else:
|
else:
|
||||||
controller.media_info.start_time = \
|
controller.media_info.start_time = display.serviceItem.start_time
|
||||||
display.serviceItem.start_time
|
|
||||||
controller.media_info.end_time = serviceItem.end_time
|
controller.media_info.end_time = serviceItem.end_time
|
||||||
elif controller.previewDisplay:
|
elif controller.previewDisplay:
|
||||||
isValid = self._check_file_type(controller, display, serviceItem)
|
isValid = self._check_file_type(controller, display, serviceItem)
|
||||||
if not isValid:
|
if not isValid:
|
||||||
# Media could not be loaded correctly
|
# Media could not be loaded correctly
|
||||||
critical_error_message_box(
|
critical_error_message_box(translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
||||||
translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
unicode(translate('MediaPlugin.MediaItem', 'Unsupported File')))
|
||||||
unicode(translate('MediaPlugin.MediaItem',
|
|
||||||
'Unsupported File')))
|
|
||||||
return False
|
return False
|
||||||
# dont care about actual theme, set a black background
|
# dont care about actual theme, set a black background
|
||||||
if controller.isLive and not controller.media_info.is_background:
|
if controller.isLive and not controller.media_info.is_background:
|
||||||
display.frame.evaluateJavaScript(u'show_video( \
|
display.frame.evaluateJavaScript(u'show_video( "setBackBoard", null, null, null,"visible");')
|
||||||
"setBackBoard", null, null, null,"visible");')
|
|
||||||
# now start playing - Preview is autoplay!
|
# now start playing - Preview is autoplay!
|
||||||
autoplay = False
|
autoplay = False
|
||||||
# Preview requested
|
# Preview requested
|
||||||
if not controller.isLive:
|
if not controller.isLive:
|
||||||
autoplay = True
|
autoplay = True
|
||||||
# Visible or background requested or Service Item wants to autostart
|
# Visible or background requested or Service Item wants to autostart
|
||||||
elif not hidden or controller.media_info.is_background or \
|
elif not hidden or controller.media_info.is_background or serviceItem.will_auto_start:
|
||||||
serviceItem.will_auto_start:
|
|
||||||
autoplay = True
|
autoplay = True
|
||||||
# Unblank on load set
|
# Unblank on load set
|
||||||
elif Settings().value(u'general/auto unblank',
|
elif Settings().value(u'general/auto unblank', QtCore.QVariant(False)).toBool():
|
||||||
QtCore.QVariant(False)).toBool():
|
|
||||||
autoplay = True
|
autoplay = True
|
||||||
if autoplay:
|
if autoplay:
|
||||||
if not self.media_play(controller):
|
if not self.media_play(controller):
|
||||||
critical_error_message_box(
|
critical_error_message_box(translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
||||||
translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
unicode(translate('MediaPlugin.MediaItem', 'Unsupported File')))
|
||||||
unicode(translate('MediaPlugin.MediaItem',
|
|
||||||
'Unsupported File')))
|
|
||||||
return False
|
return False
|
||||||
self.set_controls_visible(controller, True)
|
self.set_controls_visible(controller, True)
|
||||||
log.debug(u'use %s controller' %
|
log.debug(u'use %s controller' % self.currentMediaPlayer[controller.controllerType])
|
||||||
self.currentMediaPlayer[controller.controllerType])
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def media_length(self, serviceItem):
|
def media_length(self, serviceItem):
|
||||||
|
@ -448,26 +407,20 @@ class MediaController(object):
|
||||||
self.media_reset(controller)
|
self.media_reset(controller)
|
||||||
controller.media_info = MediaInfo()
|
controller.media_info = MediaInfo()
|
||||||
controller.media_info.volume = 0
|
controller.media_info.volume = 0
|
||||||
controller.media_info.file_info = QtCore.QFileInfo(serviceItem
|
controller.media_info.file_info = QtCore.QFileInfo(serviceItem.get_frame_path())
|
||||||
.get_frame_path())
|
|
||||||
display = controller.previewDisplay
|
display = controller.previewDisplay
|
||||||
if not self._check_file_type(controller, display, serviceItem):
|
if not self._check_file_type(controller, display, serviceItem):
|
||||||
# Media could not be loaded correctly
|
# Media could not be loaded correctly
|
||||||
critical_error_message_box(
|
critical_error_message_box(translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
||||||
translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
unicode(translate('MediaPlugin.MediaItem', 'Unsupported File')))
|
||||||
unicode(translate('MediaPlugin.MediaItem',
|
|
||||||
'Unsupported File')))
|
|
||||||
return False
|
return False
|
||||||
if not self.media_play(controller):
|
if not self.media_play(controller):
|
||||||
critical_error_message_box(
|
critical_error_message_box(translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
||||||
translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
unicode(translate('MediaPlugin.MediaItem', 'Unsupported File')))
|
||||||
unicode(translate('MediaPlugin.MediaItem',
|
|
||||||
'Unsupported File')))
|
|
||||||
return False
|
return False
|
||||||
serviceItem.set_media_length(controller.media_info.length)
|
serviceItem.set_media_length(controller.media_info.length)
|
||||||
self.media_stop(controller)
|
self.media_stop(controller)
|
||||||
log.debug(u'use %s controller' %
|
log.debug(u'use %s controller' % self.currentMediaPlayer[controller.controllerType])
|
||||||
self.currentMediaPlayer[controller.controllerType])
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _check_file_type(self, controller, display, serviceItem):
|
def _check_file_type(self, controller, display, serviceItem):
|
||||||
|
@ -484,24 +437,20 @@ class MediaController(object):
|
||||||
if serviceItem.title != UiStrings().Automatic:
|
if serviceItem.title != UiStrings().Automatic:
|
||||||
usedPlayers = [serviceItem.title.lower()]
|
usedPlayers = [serviceItem.title.lower()]
|
||||||
if controller.media_info.file_info.isFile():
|
if controller.media_info.file_info.isFile():
|
||||||
suffix = u'*.%s' % \
|
suffix = u'*.%s' % controller.media_info.file_info.suffix().toLower()
|
||||||
controller.media_info.file_info.suffix().toLower()
|
|
||||||
for title in usedPlayers:
|
for title in usedPlayers:
|
||||||
player = self.mediaPlayers[title]
|
player = self.mediaPlayers[title]
|
||||||
if suffix in player.video_extensions_list:
|
if suffix in player.video_extensions_list:
|
||||||
if not controller.media_info.is_background or \
|
if not controller.media_info.is_background or controller.media_info.is_background and \
|
||||||
controller.media_info.is_background and \
|
player.canBackground:
|
||||||
player.canBackground:
|
|
||||||
self.resize(display, player)
|
self.resize(display, player)
|
||||||
if player.load(display):
|
if player.load(display):
|
||||||
self.currentMediaPlayer[controller.controllerType] \
|
self.currentMediaPlayer[controller.controllerType] = player
|
||||||
= player
|
|
||||||
controller.media_info.media_type = MediaType.Video
|
controller.media_info.media_type = MediaType.Video
|
||||||
return True
|
return True
|
||||||
if suffix in player.audio_extensions_list:
|
if suffix in player.audio_extensions_list:
|
||||||
if player.load(display):
|
if player.load(display):
|
||||||
self.currentMediaPlayer[controller.controllerType] \
|
self.currentMediaPlayer[controller.controllerType] = player
|
||||||
= player
|
|
||||||
controller.media_info.media_type = MediaType.Audio
|
controller.media_info.media_type = MediaType.Audio
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
@ -510,8 +459,7 @@ class MediaController(object):
|
||||||
if player.canFolder:
|
if player.canFolder:
|
||||||
self.resize(display, player)
|
self.resize(display, player)
|
||||||
if player.load(display):
|
if player.load(display):
|
||||||
self.currentMediaPlayer[controller.controllerType] \
|
self.currentMediaPlayer[controller.controllerType] = player
|
||||||
= player
|
|
||||||
controller.media_info.media_type = MediaType.Video
|
controller.media_info.media_type = MediaType.Video
|
||||||
return True
|
return True
|
||||||
# no valid player found
|
# no valid player found
|
||||||
|
@ -541,8 +489,7 @@ class MediaController(object):
|
||||||
return False
|
return False
|
||||||
if status:
|
if status:
|
||||||
display.frame.evaluateJavaScript(u'show_blank("desktop");')
|
display.frame.evaluateJavaScript(u'show_blank("desktop");')
|
||||||
self.currentMediaPlayer[controller.controllerType]\
|
self.currentMediaPlayer[controller.controllerType].set_visible(display, True)
|
||||||
.set_visible(display, True)
|
|
||||||
# Flash needs to be played and will not AutoPlay
|
# Flash needs to be played and will not AutoPlay
|
||||||
if controller.media_info.is_flash:
|
if controller.media_info.is_flash:
|
||||||
controller.mediabar.actions[u'playbackPlay'].setVisible(True)
|
controller.mediabar.actions[u'playbackPlay'].setVisible(True)
|
||||||
|
@ -605,8 +552,7 @@ class MediaController(object):
|
||||||
if controller.controllerType in self.currentMediaPlayer:
|
if controller.controllerType in self.currentMediaPlayer:
|
||||||
display.frame.evaluateJavaScript(u'show_blank("black");')
|
display.frame.evaluateJavaScript(u'show_blank("black");')
|
||||||
self.currentMediaPlayer[controller.controllerType].stop(display)
|
self.currentMediaPlayer[controller.controllerType].stop(display)
|
||||||
self.currentMediaPlayer[controller.controllerType] \
|
self.currentMediaPlayer[controller.controllerType].set_visible(display, False)
|
||||||
.set_visible(display, False)
|
|
||||||
controller.seekSlider.setSliderPosition(0)
|
controller.seekSlider.setSliderPosition(0)
|
||||||
controller.mediabar.actions[u'playbackPlay'].setVisible(True)
|
controller.mediabar.actions[u'playbackPlay'].setVisible(True)
|
||||||
controller.mediabar.actions[u'playbackStop'].setVisible(False)
|
controller.mediabar.actions[u'playbackStop'].setVisible(False)
|
||||||
|
@ -637,8 +583,7 @@ class MediaController(object):
|
||||||
controller = msg[0]
|
controller = msg[0]
|
||||||
seekVal = msg[1][0]
|
seekVal = msg[1][0]
|
||||||
display = self._define_display(controller)
|
display = self._define_display(controller)
|
||||||
self.currentMediaPlayer[controller.controllerType] \
|
self.currentMediaPlayer[controller.controllerType].seek(display, seekVal)
|
||||||
.seek(display, seekVal)
|
|
||||||
|
|
||||||
def media_reset(self, controller):
|
def media_reset(self, controller):
|
||||||
"""
|
"""
|
||||||
|
@ -650,10 +595,8 @@ class MediaController(object):
|
||||||
if controller.controllerType in self.currentMediaPlayer:
|
if controller.controllerType in self.currentMediaPlayer:
|
||||||
display.override = {}
|
display.override = {}
|
||||||
self.currentMediaPlayer[controller.controllerType].reset(display)
|
self.currentMediaPlayer[controller.controllerType].reset(display)
|
||||||
self.currentMediaPlayer[controller.controllerType] \
|
self.currentMediaPlayer[controller.controllerType].set_visible(display, False)
|
||||||
.set_visible(display, False)
|
display.frame.evaluateJavaScript(u'show_video( "setBackBoard", null, null, null,"hidden");')
|
||||||
display.frame.evaluateJavaScript(u'show_video( \
|
|
||||||
"setBackBoard", null, null, null,"hidden");')
|
|
||||||
del self.currentMediaPlayer[controller.controllerType]
|
del self.currentMediaPlayer[controller.controllerType]
|
||||||
|
|
||||||
def media_hide(self, msg):
|
def media_hide(self, msg):
|
||||||
|
@ -668,11 +611,9 @@ class MediaController(object):
|
||||||
return
|
return
|
||||||
controller = self.mainWindow.liveController
|
controller = self.mainWindow.liveController
|
||||||
display = self._define_display(controller)
|
display = self._define_display(controller)
|
||||||
if self.currentMediaPlayer[controller.controllerType].state \
|
if self.currentMediaPlayer[controller.controllerType].state == MediaState.Playing:
|
||||||
== MediaState.Playing:
|
|
||||||
self.currentMediaPlayer[controller.controllerType].pause(display)
|
self.currentMediaPlayer[controller.controllerType].pause(display)
|
||||||
self.currentMediaPlayer[controller.controllerType] \
|
self.currentMediaPlayer[controller.controllerType].set_visible(display, False)
|
||||||
.set_visible(display, False)
|
|
||||||
|
|
||||||
def media_blank(self, msg):
|
def media_blank(self, msg):
|
||||||
"""
|
"""
|
||||||
|
@ -689,11 +630,9 @@ class MediaController(object):
|
||||||
Receiver.send_message(u'live_display_hide', hide_mode)
|
Receiver.send_message(u'live_display_hide', hide_mode)
|
||||||
controller = self.mainWindow.liveController
|
controller = self.mainWindow.liveController
|
||||||
display = self._define_display(controller)
|
display = self._define_display(controller)
|
||||||
if self.currentMediaPlayer[controller.controllerType].state \
|
if self.currentMediaPlayer[controller.controllerType].state == MediaState.Playing:
|
||||||
== MediaState.Playing:
|
|
||||||
self.currentMediaPlayer[controller.controllerType].pause(display)
|
self.currentMediaPlayer[controller.controllerType].pause(display)
|
||||||
self.currentMediaPlayer[controller.controllerType] \
|
self.currentMediaPlayer[controller.controllerType].set_visible(display, False)
|
||||||
.set_visible(display, False)
|
|
||||||
|
|
||||||
def media_unblank(self, msg):
|
def media_unblank(self, msg):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -102,8 +102,7 @@ class PhononPlayer(MediaPlayer):
|
||||||
ext = u'*%s' % extension
|
ext = u'*%s' % extension
|
||||||
if ext not in list:
|
if ext not in list:
|
||||||
list.append(ext)
|
list.append(ext)
|
||||||
log.info(u'MediaPlugin: %s extensions: %s' % (mimetype,
|
log.info(u'MediaPlugin: %s extensions: %s' % (mimetype, u' '.join(extensions)))
|
||||||
u' '.join(extensions)))
|
|
||||||
# Add extensions for this mimetype from self.additional_extensions.
|
# Add extensions for this mimetype from self.additional_extensions.
|
||||||
# This hack clears mimetypes' and operating system's shortcomings
|
# This hack clears mimetypes' and operating system's shortcomings
|
||||||
# by providing possibly missing extensions.
|
# by providing possibly missing extensions.
|
||||||
|
@ -112,8 +111,8 @@ class PhononPlayer(MediaPlayer):
|
||||||
ext = u'*%s' % extension
|
ext = u'*%s' % extension
|
||||||
if ext not in list:
|
if ext not in list:
|
||||||
list.append(ext)
|
list.append(ext)
|
||||||
log.info(u'MediaPlugin: %s additional extensions: %s' % (mimetype,
|
log.info(u'MediaPlugin: %s additional extensions: %s' %
|
||||||
u' '.join(self.additional_extensions[mimetype])))
|
(mimetype, u' '.join(self.additional_extensions[mimetype])))
|
||||||
|
|
||||||
def setup(self, display):
|
def setup(self, display):
|
||||||
display.phononWidget = Phonon.VideoWidget(display)
|
display.phononWidget = Phonon.VideoWidget(display)
|
||||||
|
@ -121,8 +120,7 @@ class PhononPlayer(MediaPlayer):
|
||||||
display.mediaObject = Phonon.MediaObject(display)
|
display.mediaObject = Phonon.MediaObject(display)
|
||||||
Phonon.createPath(display.mediaObject, display.phononWidget)
|
Phonon.createPath(display.mediaObject, display.phononWidget)
|
||||||
if display.hasAudio:
|
if display.hasAudio:
|
||||||
display.audio = Phonon.AudioOutput(
|
display.audio = Phonon.AudioOutput(Phonon.VideoCategory, display.mediaObject)
|
||||||
Phonon.VideoCategory, display.mediaObject)
|
|
||||||
Phonon.createPath(display.mediaObject, display.audio)
|
Phonon.createPath(display.mediaObject, display.audio)
|
||||||
display.phononWidget.raise_()
|
display.phononWidget.raise_()
|
||||||
display.phononWidget.hide()
|
display.phononWidget.hide()
|
||||||
|
@ -173,8 +171,7 @@ class PhononPlayer(MediaPlayer):
|
||||||
if start_time > 0:
|
if start_time > 0:
|
||||||
self.seek(display, controller.media_info.start_time * 1000)
|
self.seek(display, controller.media_info.start_time * 1000)
|
||||||
self.volume(display, controller.media_info.volume)
|
self.volume(display, controller.media_info.volume)
|
||||||
controller.media_info.length = \
|
controller.media_info.length = int(display.mediaObject.totalTime() / 1000)
|
||||||
int(display.mediaObject.totalTime() / 1000)
|
|
||||||
controller.seekSlider.setMaximum(controller.media_info.length * 1000)
|
controller.seekSlider.setMaximum(controller.media_info.length * 1000)
|
||||||
self.state = MediaState.Playing
|
self.state = MediaState.Playing
|
||||||
display.phononWidget.raise_()
|
display.phononWidget.raise_()
|
||||||
|
@ -211,13 +208,11 @@ class PhononPlayer(MediaPlayer):
|
||||||
display.phononWidget.setVisible(status)
|
display.phononWidget.setVisible(status)
|
||||||
|
|
||||||
def update_ui(self, display):
|
def update_ui(self, display):
|
||||||
if display.mediaObject.state() == Phonon.PausedState and \
|
if display.mediaObject.state() == Phonon.PausedState and self.state != MediaState.Paused:
|
||||||
self.state != MediaState.Paused:
|
|
||||||
self.stop(display)
|
self.stop(display)
|
||||||
controller = display.controller
|
controller = display.controller
|
||||||
if controller.media_info.end_time > 0:
|
if controller.media_info.end_time > 0:
|
||||||
if display.mediaObject.currentTime() > \
|
if display.mediaObject.currentTime() > controller.media_info.end_time * 1000:
|
||||||
controller.media_info.end_time * 1000:
|
|
||||||
self.stop(display)
|
self.stop(display)
|
||||||
self.set_visible(display, False)
|
self.set_visible(display, False)
|
||||||
if not controller.seekSlider.isSliderDown():
|
if not controller.seekSlider.isSliderDown():
|
||||||
|
@ -228,14 +223,13 @@ class PhononPlayer(MediaPlayer):
|
||||||
"""
|
"""
|
||||||
Add css style sheets to htmlbuilder
|
Add css style sheets to htmlbuilder
|
||||||
"""
|
"""
|
||||||
background = unicode(QtGui.QColor(Settings().value(
|
background = unicode(QtGui.QColor(Settings().value(u'players/background color',
|
||||||
u'players/background color', QtCore.QVariant(u'#000000'))).name())
|
QtCore.QVariant(u'#000000'))).name())
|
||||||
return VIDEO_CSS % (background,background,background)
|
return VIDEO_CSS % (background,background,background)
|
||||||
|
|
||||||
def get_info(self):
|
def get_info(self):
|
||||||
return(translate('Media.player', 'Phonon is a media player which '
|
return(translate('Media.player', 'Phonon is a media player which '
|
||||||
'interacts with the operating system to provide media capabilities'
|
'interacts with the operating system to provide media capabilities.') +
|
||||||
'.') +
|
|
||||||
u'<br/> <strong>' + translate('Media.player', 'Audio') +
|
u'<br/> <strong>' + translate('Media.player', 'Audio') +
|
||||||
u'</strong><br/>' + unicode(self.audio_extensions_list) +
|
u'</strong><br/>' + unicode(self.audio_extensions_list) +
|
||||||
u'<br/><strong>' + translate('Media.player', 'Video') +
|
u'<br/><strong>' + translate('Media.player', 'Video') +
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -76,8 +76,7 @@ class PlayerTab(SettingsTab):
|
||||||
self.formLayout.addRow(self.informationLabel)
|
self.formLayout.addRow(self.informationLabel)
|
||||||
self.leftLayout.addWidget(self.bgColorGroupBox)
|
self.leftLayout.addWidget(self.bgColorGroupBox)
|
||||||
self.leftLayout.addStretch()
|
self.leftLayout.addStretch()
|
||||||
self.rightColumn.setSizePolicy(
|
self.rightColumn.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
|
||||||
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
|
|
||||||
self.rightLayout.addStretch()
|
self.rightLayout.addStretch()
|
||||||
self.mediaPlayerGroupBox = QtGui.QGroupBox(self.leftColumn)
|
self.mediaPlayerGroupBox = QtGui.QGroupBox(self.leftColumn)
|
||||||
self.mediaPlayerGroupBox.setObjectName(u'mediaPlayerGroupBox')
|
self.mediaPlayerGroupBox.setObjectName(u'mediaPlayerGroupBox')
|
||||||
|
@ -91,28 +90,22 @@ class PlayerTab(SettingsTab):
|
||||||
self.playerOrderLayout.setObjectName(u'playerOrderLayout')
|
self.playerOrderLayout.setObjectName(u'playerOrderLayout')
|
||||||
self.playerOrderlistWidget = QtGui.QListWidget(
|
self.playerOrderlistWidget = QtGui.QListWidget(
|
||||||
self.playerOrderGroupBox)
|
self.playerOrderGroupBox)
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
|
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||||
QtGui.QSizePolicy.Expanding)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
sizePolicy.setVerticalStretch(0)
|
||||||
sizePolicy.setHeightForWidth(self.playerOrderlistWidget.\
|
sizePolicy.setHeightForWidth(self.playerOrderlistWidget.sizePolicy().hasHeightForWidth())
|
||||||
sizePolicy().hasHeightForWidth())
|
|
||||||
self.playerOrderlistWidget.setSizePolicy(sizePolicy)
|
self.playerOrderlistWidget.setSizePolicy(sizePolicy)
|
||||||
self.playerOrderlistWidget.setVerticalScrollBarPolicy(
|
self.playerOrderlistWidget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
|
||||||
QtCore.Qt.ScrollBarAsNeeded)
|
self.playerOrderlistWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
self.playerOrderlistWidget.setHorizontalScrollBarPolicy(
|
self.playerOrderlistWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
|
||||||
QtCore.Qt.ScrollBarAlwaysOff)
|
|
||||||
self.playerOrderlistWidget.setEditTriggers(
|
|
||||||
QtGui.QAbstractItemView.NoEditTriggers)
|
|
||||||
self.playerOrderlistWidget.setObjectName(u'playerOrderlistWidget')
|
self.playerOrderlistWidget.setObjectName(u'playerOrderlistWidget')
|
||||||
self.playerOrderLayout.addWidget(self.playerOrderlistWidget)
|
self.playerOrderLayout.addWidget(self.playerOrderlistWidget)
|
||||||
self.orderingButtonLayout = QtGui.QVBoxLayout()
|
self.orderingButtonLayout = QtGui.QVBoxLayout()
|
||||||
self.orderingButtonLayout.setObjectName(u'orderingButtonLayout')
|
self.orderingButtonLayout.setObjectName(u'orderingButtonLayout')
|
||||||
self.orderingButtonLayout.addStretch(1)
|
self.orderingButtonLayout.addStretch(1)
|
||||||
self.orderingUpButton = create_button(self, u'orderingUpButton',
|
self.orderingUpButton = create_button(self, u'orderingUpButton', role=u'up', click=self.onUpButtonClicked)
|
||||||
role=u'up', click=self.onUpButtonClicked)
|
self.orderingDownButton = create_button(self, u'orderingDownButton', role=u'down',
|
||||||
self.orderingDownButton = create_button(self, u'orderingDownButton',
|
click=self.onDownButtonClicked)
|
||||||
role=u'down', click=self.onDownButtonClicked)
|
|
||||||
self.orderingButtonLayout.addWidget(self.orderingUpButton)
|
self.orderingButtonLayout.addWidget(self.orderingUpButton)
|
||||||
self.orderingButtonLayout.addWidget(self.orderingDownButton)
|
self.orderingButtonLayout.addWidget(self.orderingDownButton)
|
||||||
self.orderingButtonLayout.addStretch(1)
|
self.orderingButtonLayout.addStretch(1)
|
||||||
|
@ -121,28 +114,23 @@ class PlayerTab(SettingsTab):
|
||||||
self.leftLayout.addStretch()
|
self.leftLayout.addStretch()
|
||||||
self.rightLayout.addStretch()
|
self.rightLayout.addStretch()
|
||||||
# Signals and slots
|
# Signals and slots
|
||||||
QtCore.QObject.connect(self.backgroundColorButton,
|
QtCore.QObject.connect(self.backgroundColorButton, QtCore.SIGNAL(u'clicked()'),
|
||||||
QtCore.SIGNAL(u'clicked()'), self.onbackgroundColorButtonClicked)
|
self.onbackgroundColorButtonClicked)
|
||||||
|
|
||||||
def retranslateUi(self):
|
def retranslateUi(self):
|
||||||
self.mediaPlayerGroupBox.setTitle(
|
self.mediaPlayerGroupBox.setTitle(translate('OpenLP.PlayerTab', 'Available Media Players'))
|
||||||
translate('OpenLP.PlayerTab', 'Available Media Players'))
|
self.playerOrderGroupBox.setTitle(translate('OpenLP.PlayerTab', 'Player Search Order'))
|
||||||
self.playerOrderGroupBox.setTitle(
|
|
||||||
translate('OpenLP.PlayerTab', 'Player Search Order'))
|
|
||||||
self.bgColorGroupBox.setTitle(UiStrings().BackgroundColor)
|
self.bgColorGroupBox.setTitle(UiStrings().BackgroundColor)
|
||||||
self.backgroundColorLabel.setText(UiStrings().DefaultColor)
|
self.backgroundColorLabel.setText(UiStrings().DefaultColor)
|
||||||
self.informationLabel.setText(
|
self.informationLabel.setText(translate('OpenLP.PlayerTab',
|
||||||
translate('OpenLP.PlayerTab', 'Visible background for videos '
|
'Visible background for videos with aspect ratio different to screen.'))
|
||||||
'with aspect ratio different to screen.'))
|
|
||||||
self.retranslatePlayers()
|
self.retranslatePlayers()
|
||||||
|
|
||||||
def onbackgroundColorButtonClicked(self):
|
def onbackgroundColorButtonClicked(self):
|
||||||
new_color = QtGui.QColorDialog.getColor(
|
new_color = QtGui.QColorDialog.getColor(QtGui.QColor(self.bg_color), self)
|
||||||
QtGui.QColor(self.bg_color), self)
|
|
||||||
if new_color.isValid():
|
if new_color.isValid():
|
||||||
self.bg_color = new_color.name()
|
self.bg_color = new_color.name()
|
||||||
self.backgroundColorButton.setStyleSheet(
|
self.backgroundColorButton.setStyleSheet(u'background-color: %s' % self.bg_color)
|
||||||
u'background-color: %s' % self.bg_color)
|
|
||||||
|
|
||||||
def onPlayerCheckBoxChanged(self, check_state):
|
def onPlayerCheckBoxChanged(self, check_state):
|
||||||
player = self.sender().playerName
|
player = self.sender().playerName
|
||||||
|
@ -163,8 +151,7 @@ class PlayerTab(SettingsTab):
|
||||||
self.playerCheckBoxes[u'%s' % player].setEnabled(False)
|
self.playerCheckBoxes[u'%s' % player].setEnabled(False)
|
||||||
else:
|
else:
|
||||||
self.playerCheckBoxes[u'%s' % player].setEnabled(True)
|
self.playerCheckBoxes[u'%s' % player].setEnabled(True)
|
||||||
self.playerOrderlistWidget.addItem(
|
self.playerOrderlistWidget.addItem(self.mediaPlayers[unicode(player)].original_name)
|
||||||
self.mediaPlayers[unicode(player)].original_name)
|
|
||||||
|
|
||||||
def onUpButtonClicked(self):
|
def onUpButtonClicked(self):
|
||||||
row = self.playerOrderlistWidget.currentRow()
|
row = self.playerOrderlistWidget.currentRow()
|
||||||
|
@ -189,16 +176,13 @@ class PlayerTab(SettingsTab):
|
||||||
self.usedPlayers = self.savedUsedPlayers
|
self.usedPlayers = self.savedUsedPlayers
|
||||||
self.usedPlayers = get_media_players()[0]
|
self.usedPlayers = get_media_players()[0]
|
||||||
self.savedUsedPlayers = self.usedPlayers
|
self.savedUsedPlayers = self.usedPlayers
|
||||||
|
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
settings.beginGroup(self.settingsSection)
|
settings.beginGroup(self.settingsSection)
|
||||||
self.updatePlayerList()
|
self.updatePlayerList()
|
||||||
self.bg_color = unicode(settings.value(
|
self.bg_color = unicode(settings.value(u'background color', QtCore.QVariant(u'#000000')).toString())
|
||||||
u'background color', QtCore.QVariant(u'#000000')).toString())
|
|
||||||
self.initial_color = self.bg_color
|
self.initial_color = self.bg_color
|
||||||
settings.endGroup()
|
settings.endGroup()
|
||||||
self.backgroundColorButton.setStyleSheet(
|
self.backgroundColorButton.setStyleSheet(u'background-color: %s' % self.bg_color)
|
||||||
u'background-color: %s' % self.bg_color)
|
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
player_string_changed = False
|
player_string_changed = False
|
||||||
|
@ -229,8 +213,7 @@ class PlayerTab(SettingsTab):
|
||||||
checkbox.setToolTip(player.get_info())
|
checkbox.setToolTip(player.get_info())
|
||||||
checkbox.setPlayerName(player.name)
|
checkbox.setPlayerName(player.name)
|
||||||
self.playerCheckBoxes[player.name] = checkbox
|
self.playerCheckBoxes[player.name] = checkbox
|
||||||
QtCore.QObject.connect(checkbox,QtCore.SIGNAL(u'stateChanged(int)'),
|
QtCore.QObject.connect(checkbox,QtCore.SIGNAL(u'stateChanged(int)'), self.onPlayerCheckBoxChanged)
|
||||||
self.onPlayerCheckBoxChanged)
|
|
||||||
self.mediaPlayerLayout.addWidget(checkbox)
|
self.mediaPlayerLayout.addWidget(checkbox)
|
||||||
if player.available and player.name in self.usedPlayers:
|
if player.available and player.name in self.usedPlayers:
|
||||||
checkbox.setChecked(True)
|
checkbox.setChecked(True)
|
||||||
|
@ -250,6 +233,4 @@ class PlayerTab(SettingsTab):
|
||||||
if player.available:
|
if player.available:
|
||||||
checkbox.setText(player.display_name)
|
checkbox.setText(player.display_name)
|
||||||
else:
|
else:
|
||||||
checkbox.setText(
|
checkbox.setText(unicode(translate('OpenLP.PlayerTab', '%s (unavailable)')) % player.display_name)
|
||||||
unicode(translate('OpenLP.PlayerTab',
|
|
||||||
'%s (unavailable)')) % player.display_name)
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -114,8 +114,7 @@ class VlcPlayer(MediaPlayer):
|
||||||
command_line_options = u'--no-video-title-show'
|
command_line_options = u'--no-video-title-show'
|
||||||
if not display.hasAudio:
|
if not display.hasAudio:
|
||||||
command_line_options += u' --no-audio --no-video-title-show'
|
command_line_options += u' --no-audio --no-video-title-show'
|
||||||
if Settings().value(u'advanced/hide mouse',
|
if Settings().value(u'advanced/hide mouse', QtCore.QVariant(True)).toBool() and display.controller.isLive:
|
||||||
QtCore.QVariant(True)).toBool() and display.controller.isLive:
|
|
||||||
command_line_options += u' --mouse-hide-timeout=0'
|
command_line_options += u' --mouse-hide-timeout=0'
|
||||||
display.vlcInstance = vlc.Instance(command_line_options)
|
display.vlcInstance = vlc.Instance(command_line_options)
|
||||||
display.vlcInstance.set_log_verbosity(2)
|
display.vlcInstance.set_log_verbosity(2)
|
||||||
|
@ -148,8 +147,7 @@ class VlcPlayer(MediaPlayer):
|
||||||
log.debug(u'load vid in Vlc Controller')
|
log.debug(u'load vid in Vlc Controller')
|
||||||
controller = display.controller
|
controller = display.controller
|
||||||
volume = controller.media_info.volume
|
volume = controller.media_info.volume
|
||||||
file_path = str(
|
file_path = str(controller.media_info.file_info.absoluteFilePath().toUtf8())
|
||||||
controller.media_info.file_info.absoluteFilePath().toUtf8())
|
|
||||||
path = os.path.normcase(file_path)
|
path = os.path.normcase(file_path)
|
||||||
# create the media
|
# create the media
|
||||||
display.vlcMedia = display.vlcInstance.media_new_path(path)
|
display.vlcMedia = display.vlcInstance.media_new_path(path)
|
||||||
|
@ -163,8 +161,7 @@ class VlcPlayer(MediaPlayer):
|
||||||
# and once to just get media length.
|
# and once to just get media length.
|
||||||
#
|
#
|
||||||
# Media plugin depends on knowing media length before playback.
|
# Media plugin depends on knowing media length before playback.
|
||||||
controller.media_info.length = \
|
controller.media_info.length = int(display.vlcMediaPlayer.get_media().get_duration() / 1000)
|
||||||
int(display.vlcMediaPlayer.get_media().get_duration() / 1000)
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def media_state_wait(self, display, mediaState):
|
def media_state_wait(self, display, mediaState):
|
||||||
|
@ -187,16 +184,14 @@ class VlcPlayer(MediaPlayer):
|
||||||
def play(self, display):
|
def play(self, display):
|
||||||
controller = display.controller
|
controller = display.controller
|
||||||
start_time = 0
|
start_time = 0
|
||||||
if self.state != MediaState.Paused and \
|
if self.state != MediaState.Paused and controller.media_info.start_time > 0:
|
||||||
controller.media_info.start_time > 0:
|
|
||||||
start_time = controller.media_info.start_time
|
start_time = controller.media_info.start_time
|
||||||
display.vlcMediaPlayer.play()
|
display.vlcMediaPlayer.play()
|
||||||
if not self.media_state_wait(display, vlc.State.Playing):
|
if not self.media_state_wait(display, vlc.State.Playing):
|
||||||
return False
|
return False
|
||||||
if start_time > 0:
|
if start_time > 0:
|
||||||
self.seek(display, controller.media_info.start_time * 1000)
|
self.seek(display, controller.media_info.start_time * 1000)
|
||||||
controller.media_info.length = \
|
controller.media_info.length = int(display.vlcMediaPlayer.get_media().get_duration() / 1000)
|
||||||
int(display.vlcMediaPlayer.get_media().get_duration() / 1000)
|
|
||||||
controller.seekSlider.setMaximum(controller.media_info.length * 1000)
|
controller.seekSlider.setMaximum(controller.media_info.length * 1000)
|
||||||
self.state = MediaState.Playing
|
self.state = MediaState.Playing
|
||||||
display.vlcWidget.raise_()
|
display.vlcWidget.raise_()
|
||||||
|
@ -236,13 +231,11 @@ class VlcPlayer(MediaPlayer):
|
||||||
self.stop(display)
|
self.stop(display)
|
||||||
controller = display.controller
|
controller = display.controller
|
||||||
if controller.media_info.end_time > 0:
|
if controller.media_info.end_time > 0:
|
||||||
if display.vlcMediaPlayer.get_time() > \
|
if display.vlcMediaPlayer.get_time() > controller.media_info.end_time * 1000:
|
||||||
controller.media_info.end_time * 1000:
|
|
||||||
self.stop(display)
|
self.stop(display)
|
||||||
self.set_visible(display, False)
|
self.set_visible(display, False)
|
||||||
if not controller.seekSlider.isSliderDown():
|
if not controller.seekSlider.isSliderDown():
|
||||||
controller.seekSlider.setSliderPosition( \
|
controller.seekSlider.setSliderPosition(display.vlcMediaPlayer.get_time())
|
||||||
display.vlcMediaPlayer.get_time())
|
|
||||||
|
|
||||||
def get_info(self):
|
def get_info(self):
|
||||||
return(translate('Media.player', 'VLC is an external player which '
|
return(translate('Media.player', 'VLC is an external player which '
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -283,8 +283,8 @@ class WebkitPlayer(MediaPlayer):
|
||||||
"""
|
"""
|
||||||
Add css style sheets to htmlbuilder
|
Add css style sheets to htmlbuilder
|
||||||
"""
|
"""
|
||||||
background = unicode(QtGui.QColor(Settings().value(
|
background = unicode(QtGui.QColor(Settings().value(u'players/background color',
|
||||||
u'players/background color', QtCore.QVariant(u'#000000'))).name())
|
QtCore.QVariant(u'#000000'))).name())
|
||||||
css = VIDEO_CSS % (background,background,background)
|
css = VIDEO_CSS % (background,background,background)
|
||||||
return css + FLASH_CSS
|
return css + FLASH_CSS
|
||||||
|
|
||||||
|
@ -324,11 +324,9 @@ class WebkitPlayer(MediaPlayer):
|
||||||
display.webView.setVisible(True)
|
display.webView.setVisible(True)
|
||||||
if controller.media_info.file_info.suffix() == u'swf':
|
if controller.media_info.file_info.suffix() == u'swf':
|
||||||
controller.media_info.is_flash = True
|
controller.media_info.is_flash = True
|
||||||
js = u'show_flash("load","%s");' % \
|
js = u'show_flash("load","%s");' % (path.replace(u'\\', u'\\\\'))
|
||||||
(path.replace(u'\\', u'\\\\'))
|
|
||||||
else:
|
else:
|
||||||
js = u'show_video("init", "%s", %s, %s);' % \
|
js = u'show_video("init", "%s", %s, %s);' % (path.replace(u'\\', u'\\\\'), str(vol), loop)
|
||||||
(path.replace(u'\\', u'\\\\'), str(vol), loop)
|
|
||||||
display.frame.evaluateJavaScript(js)
|
display.frame.evaluateJavaScript(js)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -340,8 +338,7 @@ class WebkitPlayer(MediaPlayer):
|
||||||
display.webLoaded = True
|
display.webLoaded = True
|
||||||
length = 0
|
length = 0
|
||||||
start_time = 0
|
start_time = 0
|
||||||
if self.state != MediaState.Paused and \
|
if self.state != MediaState.Paused and controller.media_info.start_time > 0:
|
||||||
controller.media_info.start_time > 0:
|
|
||||||
start_time = controller.media_info.start_time
|
start_time = controller.media_info.start_time
|
||||||
self.set_visible(display, True)
|
self.set_visible(display, True)
|
||||||
if controller.media_info.is_flash:
|
if controller.media_info.is_flash:
|
||||||
|
@ -407,19 +404,15 @@ class WebkitPlayer(MediaPlayer):
|
||||||
else:
|
else:
|
||||||
is_visible = "hidden"
|
is_visible = "hidden"
|
||||||
if controller.media_info.is_flash:
|
if controller.media_info.is_flash:
|
||||||
display.frame.evaluateJavaScript(u'show_flash( \
|
display.frame.evaluateJavaScript(u'show_flash("setVisible", null, null, "%s");' % (is_visible))
|
||||||
"setVisible", null, null, "%s");' % (is_visible))
|
|
||||||
else:
|
else:
|
||||||
display.frame.evaluateJavaScript(u'show_video( \
|
display.frame.evaluateJavaScript(u'show_video("setVisible", null, null, null, "%s");' % (is_visible))
|
||||||
"setVisible", null, null, null, "%s");' % (is_visible))
|
|
||||||
|
|
||||||
def update_ui(self, display):
|
def update_ui(self, display):
|
||||||
controller = display.controller
|
controller = display.controller
|
||||||
if controller.media_info.is_flash:
|
if controller.media_info.is_flash:
|
||||||
currentTime = display.frame.evaluateJavaScript(
|
currentTime = display.frame.evaluateJavaScript(u'show_flash("currentTime");').toInt()[0]
|
||||||
u'show_flash("currentTime");').toInt()[0]
|
length = display.frame.evaluateJavaScript(u'show_flash("length");').toInt()[0]
|
||||||
length = display.frame.evaluateJavaScript(
|
|
||||||
u'show_flash("length");').toInt()[0]
|
|
||||||
else:
|
else:
|
||||||
if display.frame.evaluateJavaScript(
|
if display.frame.evaluateJavaScript(
|
||||||
u'show_video("isEnded");').toString() == 'true':
|
u'show_video("isEnded");').toString() == 'true':
|
||||||
|
@ -429,8 +422,7 @@ class WebkitPlayer(MediaPlayer):
|
||||||
# check if conversion was ok and value is not 'NaN'
|
# check if conversion was ok and value is not 'NaN'
|
||||||
if ok and currentTime != float('inf'):
|
if ok and currentTime != float('inf'):
|
||||||
currentTime = int(currentTime * 1000)
|
currentTime = int(currentTime * 1000)
|
||||||
(length, ok) = display.frame.evaluateJavaScript(
|
(length, ok) = display.frame.evaluateJavaScript(u'show_video("length");').toFloat()
|
||||||
u'show_video("length");').toFloat()
|
|
||||||
# check if conversion was ok and value is not 'NaN'
|
# check if conversion was ok and value is not 'NaN'
|
||||||
if ok and length != float('inf'):
|
if ok and length != float('inf'):
|
||||||
length = int(length * 1000)
|
length = int(length * 1000)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -39,17 +39,14 @@ log = logging.getLogger(__name__)
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.lib import OpenLPToolbar, ServiceItem, Receiver, build_icon, \
|
from openlp.core.lib import OpenLPToolbar, ServiceItem, Receiver, build_icon, ItemCapabilities, SettingsManager, \
|
||||||
ItemCapabilities, SettingsManager, translate, str_to_bool, \
|
translate, str_to_bool, check_directory_exists
|
||||||
check_directory_exists
|
|
||||||
from openlp.core.lib.theme import ThemeLevel
|
from openlp.core.lib.theme import ThemeLevel
|
||||||
from openlp.core.lib.settings import Settings
|
from openlp.core.lib.settings import Settings
|
||||||
from openlp.core.lib.ui import UiStrings, critical_error_message_box, \
|
from openlp.core.lib.ui import UiStrings, critical_error_message_box, create_widget_action, find_and_set_in_combo_box
|
||||||
create_widget_action, find_and_set_in_combo_box
|
|
||||||
from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm
|
from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm
|
||||||
from openlp.core.ui.printserviceform import PrintServiceForm
|
from openlp.core.ui.printserviceform import PrintServiceForm
|
||||||
from openlp.core.utils import AppLocation, delete_file, split_filename, \
|
from openlp.core.utils import AppLocation, delete_file, split_filename, format_time
|
||||||
format_time
|
|
||||||
from openlp.core.utils.actions import ActionList, CategoryOrder
|
from openlp.core.utils.actions import ActionList, CategoryOrder
|
||||||
|
|
||||||
class ServiceManagerList(QtGui.QTreeWidget):
|
class ServiceManagerList(QtGui.QTreeWidget):
|
||||||
|
@ -127,30 +124,21 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self.layout.setMargin(0)
|
self.layout.setMargin(0)
|
||||||
# Create the top toolbar
|
# Create the top toolbar
|
||||||
self.toolbar = OpenLPToolbar(self)
|
self.toolbar = OpenLPToolbar(self)
|
||||||
self.toolbar.addToolbarAction(u'newService',
|
self.toolbar.addToolbarAction(u'newService', text=UiStrings().NewService, icon=u':/general/general_new.png',
|
||||||
text=UiStrings().NewService, icon=u':/general/general_new.png',
|
tooltip=UiStrings().CreateService, triggers=self.onNewServiceClicked)
|
||||||
tooltip=UiStrings().CreateService,
|
self.toolbar.addToolbarAction(u'openService', text=UiStrings().OpenService, icon=u':/general/general_open.png',
|
||||||
triggers=self.onNewServiceClicked)
|
tooltip=translate('OpenLP.ServiceManager', 'Load an existing service.'), triggers=self.onLoadServiceClicked)
|
||||||
self.toolbar.addToolbarAction(u'openService',
|
self.toolbar.addToolbarAction(u'saveService', text=UiStrings().SaveService, icon=u':/general/general_save.png',
|
||||||
text=UiStrings().OpenService, icon=u':/general/general_open.png',
|
tooltip=translate('OpenLP.ServiceManager', 'Save this service.'), triggers=self.decideSaveMethod)
|
||||||
tooltip=translate('OpenLP.ServiceManager',
|
|
||||||
'Load an existing service.'), triggers=self.onLoadServiceClicked)
|
|
||||||
self.toolbar.addToolbarAction(u'saveService',
|
|
||||||
text=UiStrings().SaveService, icon=u':/general/general_save.png',
|
|
||||||
tooltip=translate('OpenLP.ServiceManager', 'Save this service.'),
|
|
||||||
triggers=self.decideSaveMethod)
|
|
||||||
self.toolbar.addSeparator()
|
self.toolbar.addSeparator()
|
||||||
self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings().Theme, self)
|
self.themeLabel = QtGui.QLabel(u'%s:' % UiStrings().Theme, self)
|
||||||
self.themeLabel.setMargin(3)
|
self.themeLabel.setMargin(3)
|
||||||
self.themeLabel.setObjectName(u'themeLabel')
|
self.themeLabel.setObjectName(u'themeLabel')
|
||||||
self.toolbar.addToolbarWidget(self.themeLabel)
|
self.toolbar.addToolbarWidget(self.themeLabel)
|
||||||
self.themeComboBox = QtGui.QComboBox(self.toolbar)
|
self.themeComboBox = QtGui.QComboBox(self.toolbar)
|
||||||
self.themeComboBox.setToolTip(translate('OpenLP.ServiceManager',
|
self.themeComboBox.setToolTip(translate('OpenLP.ServiceManager', 'Select a theme for the service.'))
|
||||||
'Select a theme for the service.'))
|
self.themeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToMinimumContentsLength)
|
||||||
self.themeComboBox.setSizeAdjustPolicy(
|
self.themeComboBox.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
||||||
QtGui.QComboBox.AdjustToMinimumContentsLength)
|
|
||||||
self.themeComboBox.setSizePolicy(
|
|
||||||
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
|
||||||
self.themeComboBox.setObjectName(u'themeComboBox')
|
self.themeComboBox.setObjectName(u'themeComboBox')
|
||||||
self.toolbar.addToolbarWidget(self.themeComboBox)
|
self.toolbar.addToolbarWidget(self.themeComboBox)
|
||||||
self.toolbar.setObjectName(u'toolbar')
|
self.toolbar.setObjectName(u'toolbar')
|
||||||
|
@ -161,15 +149,12 @@ class ServiceManager(QtGui.QWidget):
|
||||||
QtGui.QAbstractItemView.CurrentChanged |
|
QtGui.QAbstractItemView.CurrentChanged |
|
||||||
QtGui.QAbstractItemView.DoubleClicked |
|
QtGui.QAbstractItemView.DoubleClicked |
|
||||||
QtGui.QAbstractItemView.EditKeyPressed)
|
QtGui.QAbstractItemView.EditKeyPressed)
|
||||||
self.serviceManagerList.setDragDropMode(
|
self.serviceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
|
||||||
QtGui.QAbstractItemView.DragDrop)
|
|
||||||
self.serviceManagerList.setAlternatingRowColors(True)
|
self.serviceManagerList.setAlternatingRowColors(True)
|
||||||
self.serviceManagerList.setHeaderHidden(True)
|
self.serviceManagerList.setHeaderHidden(True)
|
||||||
self.serviceManagerList.setExpandsOnDoubleClick(False)
|
self.serviceManagerList.setExpandsOnDoubleClick(False)
|
||||||
self.serviceManagerList.setContextMenuPolicy(
|
self.serviceManagerList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||||
QtCore.Qt.CustomContextMenu)
|
QtCore.QObject.connect(self.serviceManagerList, QtCore.SIGNAL('customContextMenuRequested(QPoint)'),
|
||||||
QtCore.QObject.connect(self.serviceManagerList,
|
|
||||||
QtCore.SIGNAL('customContextMenuRequested(QPoint)'),
|
|
||||||
self.contextMenu)
|
self.contextMenu)
|
||||||
self.serviceManagerList.setObjectName(u'serviceManagerList')
|
self.serviceManagerList.setObjectName(u'serviceManagerList')
|
||||||
# enable drop
|
# enable drop
|
||||||
|
@ -182,54 +167,37 @@ class ServiceManager(QtGui.QWidget):
|
||||||
action_list = ActionList.get_instance()
|
action_list = ActionList.get_instance()
|
||||||
action_list.add_category(
|
action_list.add_category(
|
||||||
unicode(UiStrings().Service), CategoryOrder.standardToolbar)
|
unicode(UiStrings().Service), CategoryOrder.standardToolbar)
|
||||||
self.serviceManagerList.moveTop = self.orderToolbar.addToolbarAction(
|
self.serviceManagerList.moveTop = self.orderToolbar.addToolbarAction(u'moveTop',
|
||||||
u'moveTop', text=translate('OpenLP.ServiceManager', 'Move to &top'),
|
text=translate('OpenLP.ServiceManager', 'Move to &top'), icon=u':/services/service_top.png',
|
||||||
icon=u':/services/service_top.png', tooltip=translate(
|
tooltip=translate('OpenLP.ServiceManager', 'Move item to the top of the service.'),
|
||||||
'OpenLP.ServiceManager', 'Move item to the top of the service.'),
|
shortcuts=[QtCore.Qt.Key_Home], category=UiStrings().Service, triggers=self.onServiceTop)
|
||||||
shortcuts=[QtCore.Qt.Key_Home], category=UiStrings().Service,
|
self.serviceManagerList.moveUp = self.orderToolbar.addToolbarAction(u'moveUp',
|
||||||
triggers=self.onServiceTop)
|
text=translate('OpenLP.ServiceManager', 'Move &up'), icon=u':/services/service_up.png',
|
||||||
self.serviceManagerList.moveUp = self.orderToolbar.addToolbarAction(
|
tooltip=translate('OpenLP.ServiceManager', 'Move item up one position in the service.'),
|
||||||
u'moveUp', text=translate('OpenLP.ServiceManager', 'Move &up'),
|
shortcuts=[QtCore.Qt.Key_PageUp], category=UiStrings().Service, triggers=self.onServiceUp)
|
||||||
icon=u':/services/service_up.png',
|
self.serviceManagerList.moveDown = self.orderToolbar.addToolbarAction(u'moveDown',
|
||||||
tooltip=translate('OpenLP.ServiceManager',
|
text=translate('OpenLP.ServiceManager', 'Move &down'), icon=u':/services/service_down.png',
|
||||||
'Move item up one position in the service.'),
|
tooltip=translate('OpenLP.ServiceManager', 'Move item down one position in the service.'),
|
||||||
shortcuts=[QtCore.Qt.Key_PageUp], category=UiStrings().Service,
|
shortcuts=[QtCore.Qt.Key_PageDown], category=UiStrings().Service, triggers=self.onServiceDown)
|
||||||
triggers=self.onServiceUp)
|
self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarAction(u'moveBottom',
|
||||||
self.serviceManagerList.moveDown = self.orderToolbar.addToolbarAction(
|
text=translate('OpenLP.ServiceManager', 'Move to &bottom'), icon=u':/services/service_bottom.png',
|
||||||
u'moveDown', text=translate('OpenLP.ServiceManager', 'Move &down'),
|
tooltip=translate('OpenLP.ServiceManager', 'Move item to the end of the service.'),
|
||||||
icon=u':/services/service_down.png',
|
shortcuts=[QtCore.Qt.Key_End], category=UiStrings().Service, triggers=self.onServiceEnd)
|
||||||
tooltip=translate('OpenLP.ServiceManager',
|
self.serviceManagerList.down = self.orderToolbar.addToolbarAction(u'down',
|
||||||
'Move item down one position in the service.'),
|
text=translate('OpenLP.ServiceManager', 'Move &down'), tooltip=translate('OpenLP.ServiceManager',
|
||||||
shortcuts=[QtCore.Qt.Key_PageDown], category=UiStrings().Service,
|
'Moves the selection down the window.'), visible=False, shortcuts=[QtCore.Qt.Key_Down],
|
||||||
triggers=self.onServiceDown)
|
triggers=self.onMoveSelectionDown)
|
||||||
self.serviceManagerList.moveBottom = self.orderToolbar.addToolbarAction(
|
|
||||||
u'moveBottom',
|
|
||||||
text=translate('OpenLP.ServiceManager', 'Move to &bottom'),
|
|
||||||
icon=u':/services/service_bottom.png', tooltip=translate(
|
|
||||||
'OpenLP.ServiceManager', 'Move item to the end of the service.'),
|
|
||||||
shortcuts=[QtCore.Qt.Key_End], category=UiStrings().Service,
|
|
||||||
triggers=self.onServiceEnd)
|
|
||||||
self.serviceManagerList.down = self.orderToolbar.addToolbarAction(
|
|
||||||
u'down', text=translate('OpenLP.ServiceManager', 'Move &down'),
|
|
||||||
tooltip=translate('OpenLP.ServiceManager',
|
|
||||||
'Moves the selection down the window.'), visible=False,
|
|
||||||
shortcuts=[QtCore.Qt.Key_Down], triggers=self.onMoveSelectionDown)
|
|
||||||
action_list.add_action(self.serviceManagerList.down)
|
action_list.add_action(self.serviceManagerList.down)
|
||||||
self.serviceManagerList.up = self.orderToolbar.addToolbarAction(
|
self.serviceManagerList.up = self.orderToolbar.addToolbarAction(u'up',
|
||||||
u'up', text=translate('OpenLP.ServiceManager', 'Move up'),
|
text=translate('OpenLP.ServiceManager', 'Move up'), tooltip=translate('OpenLP.ServiceManager',
|
||||||
tooltip=translate('OpenLP.ServiceManager',
|
'Moves the selection up the window.'), visible=False, shortcuts=[QtCore.Qt.Key_Up],
|
||||||
'Moves the selection up the window.'), visible=False,
|
triggers=self.onMoveSelectionUp)
|
||||||
shortcuts=[QtCore.Qt.Key_Up], triggers=self.onMoveSelectionUp)
|
|
||||||
action_list.add_action(self.serviceManagerList.up)
|
action_list.add_action(self.serviceManagerList.up)
|
||||||
self.orderToolbar.addSeparator()
|
self.orderToolbar.addSeparator()
|
||||||
self.serviceManagerList.delete = self.orderToolbar.addToolbarAction(
|
self.serviceManagerList.delete = self.orderToolbar.addToolbarAction(u'delete',
|
||||||
u'delete',
|
text=translate('OpenLP.ServiceManager', '&Delete From Service'), icon=u':/general/general_delete.png',
|
||||||
text=translate('OpenLP.ServiceManager', '&Delete From Service'),
|
tooltip=translate('OpenLP.ServiceManager', 'Delete the selected item from the service.'),
|
||||||
icon=u':/general/general_delete.png',
|
shortcuts=[QtCore.Qt.Key_Delete], triggers=self.onDeleteFromService)
|
||||||
tooltip=translate('OpenLP.ServiceManager',
|
|
||||||
'Delete the selected item from the service.'),
|
|
||||||
shortcuts=[QtCore.Qt.Key_Delete],
|
|
||||||
triggers=self.onDeleteFromService)
|
|
||||||
self.orderToolbar.addSeparator()
|
self.orderToolbar.addSeparator()
|
||||||
self.serviceManagerList.expand = self.orderToolbar.addToolbarAction(
|
self.serviceManagerList.expand = self.orderToolbar.addToolbarAction(
|
||||||
u'expand', text=translate('OpenLP.ServiceManager', '&Expand all'),
|
u'expand', text=translate('OpenLP.ServiceManager', '&Expand all'),
|
||||||
|
@ -237,52 +205,35 @@ class ServiceManager(QtGui.QWidget):
|
||||||
'OpenLP.ServiceManager', 'Expand all the service items.'),
|
'OpenLP.ServiceManager', 'Expand all the service items.'),
|
||||||
shortcuts=[QtCore.Qt.Key_Plus], category=UiStrings().Service,
|
shortcuts=[QtCore.Qt.Key_Plus], category=UiStrings().Service,
|
||||||
triggers=self.onExpandAll)
|
triggers=self.onExpandAll)
|
||||||
self.serviceManagerList.collapse = self.orderToolbar.addToolbarAction(
|
self.serviceManagerList.collapse = self.orderToolbar.addToolbarAction(u'collapse',
|
||||||
u'collapse',
|
text=translate('OpenLP.ServiceManager', '&Collapse all'), icon=u':/services/service_collapse_all.png',
|
||||||
text=translate('OpenLP.ServiceManager', '&Collapse all'),
|
tooltip=translate('OpenLP.ServiceManager', 'Collapse all the service items.'),
|
||||||
icon=u':/services/service_collapse_all.png', tooltip=translate(
|
shortcuts=[QtCore.Qt.Key_Minus], category=UiStrings().Service, triggers=self.onCollapseAll)
|
||||||
'OpenLP.ServiceManager', 'Collapse all the service items.'),
|
|
||||||
shortcuts=[QtCore.Qt.Key_Minus], category=UiStrings().Service,
|
|
||||||
triggers=self.onCollapseAll)
|
|
||||||
self.orderToolbar.addSeparator()
|
self.orderToolbar.addSeparator()
|
||||||
self.serviceManagerList.makeLive = self.orderToolbar.addToolbarAction(
|
self.serviceManagerList.makeLive = self.orderToolbar.addToolbarAction(u'makeLive',
|
||||||
u'makeLive', text=translate('OpenLP.ServiceManager', 'Go Live'),
|
text=translate('OpenLP.ServiceManager', 'Go Live'), icon=u':/general/general_live.png',
|
||||||
icon=u':/general/general_live.png', tooltip=translate(
|
tooltip=translate('OpenLP.ServiceManager', 'Send the selected item to Live.'),
|
||||||
'OpenLP.ServiceManager', 'Send the selected item to Live.'),
|
shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return], category=UiStrings().Service, triggers=self.makeLive)
|
||||||
shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return],
|
|
||||||
category=UiStrings().Service, triggers=self.makeLive)
|
|
||||||
self.layout.addWidget(self.orderToolbar)
|
self.layout.addWidget(self.orderToolbar)
|
||||||
# Connect up our signals and slots
|
# Connect up our signals and slots
|
||||||
QtCore.QObject.connect(self.themeComboBox,
|
QtCore.QObject.connect(self.themeComboBox, QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected)
|
||||||
QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected)
|
QtCore.QObject.connect(self.serviceManagerList, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onMakeLive)
|
||||||
QtCore.QObject.connect(self.serviceManagerList,
|
QtCore.QObject.connect(self.serviceManagerList, QtCore.SIGNAL(u'itemCollapsed(QTreeWidgetItem*)'),
|
||||||
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onMakeLive)
|
self.collapsed)
|
||||||
QtCore.QObject.connect(self.serviceManagerList,
|
QtCore.QObject.connect(self.serviceManagerList, QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded)
|
||||||
QtCore.SIGNAL(u'itemCollapsed(QTreeWidgetItem*)'), self.collapsed)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
|
||||||
QtCore.QObject.connect(self.serviceManagerList,
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_preview_live'), self.previewLive)
|
||||||
QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_next_item'), self.nextItem)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_previous_item'),
|
||||||
QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
|
self.previousItem)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_set_item'), self.onSetItem)
|
||||||
QtCore.SIGNAL(u'servicemanager_preview_live'), self.previewLive)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.configUpdated)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'),
|
||||||
QtCore.SIGNAL(u'servicemanager_next_item'), self.nextItem)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'servicemanager_previous_item'), self.previousItem)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'servicemanager_set_item'), self.onSetItem)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'config_updated'), self.configUpdated)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'config_screen_changed'),
|
|
||||||
self.regenerateServiceItems)
|
self.regenerateServiceItems)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_global'), self.themeChange)
|
||||||
QtCore.SIGNAL(u'theme_update_global'), self.themeChange)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate)
|
|
||||||
# Last little bits of setting up
|
# Last little bits of setting up
|
||||||
self.service_theme = unicode(Settings().value(
|
self.service_theme = unicode(Settings().value(self.mainwindow.serviceManagerSettingsSection + u'/service theme',
|
||||||
self.mainwindow.serviceManagerSettingsSection + u'/service theme',
|
|
||||||
QtCore.QVariant(u'')).toString())
|
QtCore.QVariant(u'')).toString())
|
||||||
self.servicePath = AppLocation.get_section_data_path(u'servicemanager')
|
self.servicePath = AppLocation.get_section_data_path(u'servicemanager')
|
||||||
# build the drag and drop context menu
|
# build the drag and drop context menu
|
||||||
|
@ -295,34 +246,25 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self.addToAction.setIcon(build_icon(u':/general/general_edit.png'))
|
self.addToAction.setIcon(build_icon(u':/general/general_edit.png'))
|
||||||
# build the context menu
|
# build the context menu
|
||||||
self.menu = QtGui.QMenu()
|
self.menu = QtGui.QMenu()
|
||||||
self.editAction = create_widget_action(self.menu,
|
self.editAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Edit Item'),
|
||||||
text=translate('OpenLP.ServiceManager', '&Edit Item'),
|
|
||||||
icon=u':/general/general_edit.png', triggers=self.remoteEdit)
|
icon=u':/general/general_edit.png', triggers=self.remoteEdit)
|
||||||
self.maintainAction = create_widget_action(self.menu,
|
self.maintainAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Reorder Item'),
|
||||||
text=translate('OpenLP.ServiceManager', '&Reorder Item'),
|
icon=u':/general/general_edit.png', triggers=self.onServiceItemEditForm)
|
||||||
icon=u':/general/general_edit.png',
|
self.notesAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Notes'),
|
||||||
triggers=self.onServiceItemEditForm)
|
icon=u':/services/service_notes.png', triggers=self.onServiceItemNoteForm)
|
||||||
self.notesAction = create_widget_action(self.menu,
|
self.timeAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Start Time'),
|
||||||
text=translate('OpenLP.ServiceManager', '&Notes'),
|
|
||||||
icon=u':/services/service_notes.png',
|
|
||||||
triggers=self.onServiceItemNoteForm)
|
|
||||||
self.timeAction = create_widget_action(self.menu,
|
|
||||||
text=translate('OpenLP.ServiceManager', '&Start Time'),
|
|
||||||
icon=u':/media/media_time.png', triggers=self.onStartTimeForm)
|
icon=u':/media/media_time.png', triggers=self.onStartTimeForm)
|
||||||
self.autoStartAction = create_widget_action(self.menu,
|
self.autoStartAction = create_widget_action(self.menu, text=u'',
|
||||||
text=u'',
|
|
||||||
icon=u':/media/auto-start_active.png', triggers=self.onAutoStart)
|
icon=u':/media/auto-start_active.png', triggers=self.onAutoStart)
|
||||||
# Add already existing delete action to the menu.
|
# Add already existing delete action to the menu.
|
||||||
self.menu.addAction(self.serviceManagerList.delete)
|
self.menu.addAction(self.serviceManagerList.delete)
|
||||||
self.menu.addSeparator()
|
self.menu.addSeparator()
|
||||||
self.previewAction = create_widget_action(self.menu,
|
self.previewAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', 'Show &Preview'),
|
||||||
text=translate('OpenLP.ServiceManager', 'Show &Preview'),
|
|
||||||
icon=u':/general/general_preview.png', triggers=self.makePreview)
|
icon=u':/general/general_preview.png', triggers=self.makePreview)
|
||||||
# Add already existing make live action to the menu.
|
# Add already existing make live action to the menu.
|
||||||
self.menu.addAction(self.serviceManagerList.makeLive)
|
self.menu.addAction(self.serviceManagerList.makeLive)
|
||||||
self.menu.addSeparator()
|
self.menu.addSeparator()
|
||||||
self.themeMenu = QtGui.QMenu(
|
self.themeMenu = QtGui.QMenu(translate('OpenLP.ServiceManager', '&Change Item Theme'))
|
||||||
translate('OpenLP.ServiceManager', '&Change Item Theme'))
|
|
||||||
self.menu.addMenu(self.themeMenu)
|
self.menu.addMenu(self.themeMenu)
|
||||||
self.serviceManagerList.addActions(
|
self.serviceManagerList.addActions(
|
||||||
[self.serviceManagerList.moveDown,
|
[self.serviceManagerList.moveDown,
|
||||||
|
@ -345,8 +287,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
if modified:
|
if modified:
|
||||||
self.serviceId += 1
|
self.serviceId += 1
|
||||||
self._modified = modified
|
self._modified = modified
|
||||||
serviceFile = self.shortFileName() or translate(
|
serviceFile = self.shortFileName() or translate('OpenLP.ServiceManager', 'Untitled Service')
|
||||||
'OpenLP.ServiceManager', 'Untitled Service')
|
|
||||||
self.mainwindow.setServiceModified(modified, serviceFile)
|
self.mainwindow.setServiceModified(modified, serviceFile)
|
||||||
|
|
||||||
def isModified(self):
|
def isModified(self):
|
||||||
|
@ -362,8 +303,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self._fileName = unicode(fileName)
|
self._fileName = unicode(fileName)
|
||||||
self.mainwindow.setServiceModified(self.isModified(),
|
self.mainwindow.setServiceModified(self.isModified(),
|
||||||
self.shortFileName())
|
self.shortFileName())
|
||||||
Settings(). \
|
Settings().setValue(u'servicemanager/last file',QtCore.QVariant(fileName))
|
||||||
setValue(u'servicemanager/last file',QtCore.QVariant(fileName))
|
|
||||||
self._saveLite = True if self._fileName.endswith(u'.oszl') else False
|
self._saveLite = True if self._fileName.endswith(u'.oszl') else False
|
||||||
|
|
||||||
def fileName(self):
|
def fileName(self):
|
||||||
|
@ -382,9 +322,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
"""
|
"""
|
||||||
Triggered when Config dialog is updated.
|
Triggered when Config dialog is updated.
|
||||||
"""
|
"""
|
||||||
self.expandTabs = Settings().value(
|
self.expandTabs = Settings().value(u'advanced/expand service item', QtCore.QVariant(u'False')).toBool()
|
||||||
u'advanced/expand service item',
|
|
||||||
QtCore.QVariant(u'False')).toBool()
|
|
||||||
|
|
||||||
def resetSupportedSuffixes(self):
|
def resetSupportedSuffixes(self):
|
||||||
"""
|
"""
|
||||||
|
@ -432,29 +370,23 @@ class ServiceManager(QtGui.QWidget):
|
||||||
elif result == QtGui.QMessageBox.Save:
|
elif result == QtGui.QMessageBox.Save:
|
||||||
self.decideSaveMethod()
|
self.decideSaveMethod()
|
||||||
if not loadFile:
|
if not loadFile:
|
||||||
fileName = unicode(QtGui.QFileDialog.getOpenFileName(
|
fileName = unicode(QtGui.QFileDialog.getOpenFileName(self.mainwindow,
|
||||||
self.mainwindow,
|
|
||||||
translate('OpenLP.ServiceManager', 'Open File'),
|
translate('OpenLP.ServiceManager', 'Open File'),
|
||||||
SettingsManager.get_last_dir(
|
SettingsManager.get_last_dir(self.mainwindow.serviceManagerSettingsSection),
|
||||||
self.mainwindow.serviceManagerSettingsSection),
|
translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz *.oszl)')))
|
||||||
translate('OpenLP.ServiceManager',
|
|
||||||
'OpenLP Service Files (*.osz *.oszl)')))
|
|
||||||
if not fileName:
|
if not fileName:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
fileName = loadFile
|
fileName = loadFile
|
||||||
SettingsManager.set_last_dir(
|
SettingsManager.set_last_dir(self.mainwindow.serviceManagerSettingsSection, split_filename(fileName)[0])
|
||||||
self.mainwindow.serviceManagerSettingsSection,
|
|
||||||
split_filename(fileName)[0])
|
|
||||||
self.loadFile(fileName)
|
self.loadFile(fileName)
|
||||||
|
|
||||||
def saveModifiedService(self):
|
def saveModifiedService(self):
|
||||||
return QtGui.QMessageBox.question(self.mainwindow,
|
return QtGui.QMessageBox.question(self.mainwindow,
|
||||||
translate('OpenLP.ServiceManager', 'Modified Service'),
|
translate('OpenLP.ServiceManager', 'Modified Service'),
|
||||||
translate('OpenLP.ServiceManager', 'The current service has '
|
translate('OpenLP.ServiceManager',
|
||||||
'been modified. Would you like to save this service?'),
|
'The current service has been modified. Would you like to save this service?'),
|
||||||
QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard |
|
QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save)
|
||||||
QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save)
|
|
||||||
|
|
||||||
def onRecentServiceClicked(self):
|
def onRecentServiceClicked(self):
|
||||||
sender = self.sender()
|
sender = self.sender()
|
||||||
|
@ -469,8 +401,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self.setFileName(u'')
|
self.setFileName(u'')
|
||||||
self.serviceId += 1
|
self.serviceId += 1
|
||||||
self.setModified(False)
|
self.setModified(False)
|
||||||
Settings(). \
|
Settings().setValue(u'servicemanager/last file',QtCore.QVariant(u''))
|
||||||
setValue(u'servicemanager/last file',QtCore.QVariant(u''))
|
|
||||||
Receiver.send_message(u'servicemanager_new_service')
|
Receiver.send_message(u'servicemanager_new_service')
|
||||||
|
|
||||||
def saveFile(self):
|
def saveFile(self):
|
||||||
|
@ -518,16 +449,12 @@ class ServiceManager(QtGui.QWidget):
|
||||||
write_list.append(path_from)
|
write_list.append(path_from)
|
||||||
if missing_list:
|
if missing_list:
|
||||||
Receiver.send_message(u'cursor_normal')
|
Receiver.send_message(u'cursor_normal')
|
||||||
title = unicode(translate('OpenLP.ServiceManager',
|
title = unicode(translate('OpenLP.ServiceManager', 'Service File(s) Missing'))
|
||||||
'Service File(s) Missing'))
|
|
||||||
message = unicode(translate('OpenLP.ServiceManager',
|
message = unicode(translate('OpenLP.ServiceManager',
|
||||||
'The following file(s) in the service are missing:\n\t%s\n\n'
|
'The following file(s) in the service are missing:\n\t%s\n\n'
|
||||||
'These files will be removed if you continue to save.')
|
'These files will be removed if you continue to save.')) % "\n\t".join(missing_list)
|
||||||
) % "\n\t".join(missing_list)
|
answer = QtGui.QMessageBox.critical(self, title, message,
|
||||||
answer = QtGui.QMessageBox.critical(self, title,
|
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel))
|
||||||
message,
|
|
||||||
QtGui.QMessageBox.StandardButtons(
|
|
||||||
QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel))
|
|
||||||
if answer == QtGui.QMessageBox.Cancel:
|
if answer == QtGui.QMessageBox.Cancel:
|
||||||
self.mainwindow.finishedProgressBar()
|
self.mainwindow.finishedProgressBar()
|
||||||
return False
|
return False
|
||||||
|
@ -546,16 +473,14 @@ class ServiceManager(QtGui.QWidget):
|
||||||
new_file = os.path.join(u'audio',
|
new_file = os.path.join(u'audio',
|
||||||
item[u'service_item']._uuid, filename)
|
item[u'service_item']._uuid, filename)
|
||||||
audio_files.append((filename, new_file))
|
audio_files.append((filename, new_file))
|
||||||
service_item[u'header'][u'background_audio'][i] = \
|
service_item[u'header'][u'background_audio'][i] = new_file
|
||||||
new_file
|
|
||||||
# Add the service item to the service.
|
# Add the service item to the service.
|
||||||
service.append({u'serviceitem': service_item})
|
service.append({u'serviceitem': service_item})
|
||||||
self.repaintServiceList(-1, -1)
|
self.repaintServiceList(-1, -1)
|
||||||
for file in write_list:
|
for file in write_list:
|
||||||
file_size = os.path.getsize(file)
|
file_size = os.path.getsize(file)
|
||||||
total_size += file_size
|
total_size += file_size
|
||||||
log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' %
|
log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' % total_size)
|
||||||
total_size)
|
|
||||||
service_content = cPickle.dumps(service)
|
service_content = cPickle.dumps(service)
|
||||||
# Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be
|
# Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be
|
||||||
# extracted using unzip in UNIX.
|
# extracted using unzip in UNIX.
|
||||||
|
@ -565,8 +490,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
success = True
|
success = True
|
||||||
self.mainwindow.incrementProgressBar()
|
self.mainwindow.incrementProgressBar()
|
||||||
try:
|
try:
|
||||||
zip = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED,
|
zip = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED, allow_zip_64)
|
||||||
allow_zip_64)
|
|
||||||
# First we add service contents.
|
# First we add service contents.
|
||||||
# We save ALL filenames into ZIP using UTF-8.
|
# We save ALL filenames into ZIP using UTF-8.
|
||||||
zip.writestr(service_file_name.encode(u'utf-8'), service_content)
|
zip.writestr(service_file_name.encode(u'utf-8'), service_content)
|
||||||
|
@ -589,10 +513,8 @@ class ServiceManager(QtGui.QWidget):
|
||||||
except IOError:
|
except IOError:
|
||||||
log.exception(u'Failed to save service to disk: %s', temp_file_name)
|
log.exception(u'Failed to save service to disk: %s', temp_file_name)
|
||||||
Receiver.send_message(u'openlp_error_message', {
|
Receiver.send_message(u'openlp_error_message', {
|
||||||
u'title': translate(u'OpenLP.ServiceManager',
|
u'title': translate(u'OpenLP.ServiceManager', u'Error Saving File'),
|
||||||
u'Error Saving File'),
|
u'message': translate(u'OpenLP.ServiceManager', u'There was an error saving your file.')
|
||||||
u'message': translate(u'OpenLP.ServiceManager',
|
|
||||||
u'There was an error saving your file.')
|
|
||||||
})
|
})
|
||||||
success = False
|
success = False
|
||||||
finally:
|
finally:
|
||||||
|
@ -630,17 +552,14 @@ class ServiceManager(QtGui.QWidget):
|
||||||
basename = os.path.splitext(file_name)[0]
|
basename = os.path.splitext(file_name)[0]
|
||||||
service_file_name = '%s.osd' % basename
|
service_file_name = '%s.osd' % basename
|
||||||
log.debug(u'ServiceManager.saveFile - %s', path_file_name)
|
log.debug(u'ServiceManager.saveFile - %s', path_file_name)
|
||||||
SettingsManager.set_last_dir(
|
SettingsManager.set_last_dir(self.mainwindow.serviceManagerSettingsSection, path)
|
||||||
self.mainwindow.serviceManagerSettingsSection,
|
|
||||||
path)
|
|
||||||
service = []
|
service = []
|
||||||
Receiver.send_message(u'cursor_busy')
|
Receiver.send_message(u'cursor_busy')
|
||||||
# Number of items + 1 to zip it
|
# Number of items + 1 to zip it
|
||||||
self.mainwindow.displayProgressBar(len(self.serviceItems) + 1)
|
self.mainwindow.displayProgressBar(len(self.serviceItems) + 1)
|
||||||
for item in self.serviceItems:
|
for item in self.serviceItems:
|
||||||
self.mainwindow.incrementProgressBar()
|
self.mainwindow.incrementProgressBar()
|
||||||
service_item = item[u'service_item']. \
|
service_item = item[u'service_item'].get_service_repr(self._saveLite)
|
||||||
get_service_repr(self._saveLite)
|
|
||||||
#@todo check for file item on save.
|
#@todo check for file item on save.
|
||||||
service.append({u'serviceitem': service_item})
|
service.append({u'serviceitem': service_item})
|
||||||
self.mainwindow.incrementProgressBar()
|
self.mainwindow.incrementProgressBar()
|
||||||
|
@ -656,10 +575,8 @@ class ServiceManager(QtGui.QWidget):
|
||||||
except IOError:
|
except IOError:
|
||||||
log.exception(u'Failed to save service to disk: %s', temp_file_name)
|
log.exception(u'Failed to save service to disk: %s', temp_file_name)
|
||||||
Receiver.send_message(u'openlp_error_message', {
|
Receiver.send_message(u'openlp_error_message', {
|
||||||
u'title': translate(u'OpenLP.ServiceManager',
|
u'title': translate(u'OpenLP.ServiceManager', u'Error Saving File'),
|
||||||
u'Error Saving File'),
|
u'message': translate(u'OpenLP.ServiceManager', u'There was an error saving your file.')
|
||||||
u'message': translate(u'OpenLP.ServiceManager',
|
|
||||||
u'There was an error saving your file.')
|
|
||||||
})
|
})
|
||||||
success = False
|
success = False
|
||||||
finally:
|
finally:
|
||||||
|
@ -682,50 +599,39 @@ class ServiceManager(QtGui.QWidget):
|
||||||
Get a file name and then call :func:`ServiceManager.saveFile` to
|
Get a file name and then call :func:`ServiceManager.saveFile` to
|
||||||
save the file.
|
save the file.
|
||||||
"""
|
"""
|
||||||
default_service_enabled = Settings().value(
|
default_service_enabled = Settings().value(u'advanced/default service enabled', QtCore.QVariant(True)).toBool()
|
||||||
u'advanced/default service enabled', QtCore.QVariant(True)).toBool()
|
|
||||||
if default_service_enabled:
|
if default_service_enabled:
|
||||||
service_day = Settings().value(
|
service_day = Settings().value(u'advanced/default service day', 7).toInt()[0]
|
||||||
u'advanced/default service day', 7).toInt()[0]
|
|
||||||
if service_day == 7:
|
if service_day == 7:
|
||||||
local_time = datetime.now()
|
local_time = datetime.now()
|
||||||
else:
|
else:
|
||||||
service_hour = Settings().value(
|
service_hour = Settings().value(u'advanced/default service hour', 11).toInt()[0]
|
||||||
u'advanced/default service hour', 11).toInt()[0]
|
service_minute = Settings().value(u'advanced/default service minute', 0).toInt()[0]
|
||||||
service_minute = Settings().value(
|
|
||||||
u'advanced/default service minute', 0).toInt()[0]
|
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
day_delta = service_day - now.weekday()
|
day_delta = service_day - now.weekday()
|
||||||
if day_delta < 0:
|
if day_delta < 0:
|
||||||
day_delta += 7
|
day_delta += 7
|
||||||
time = now + timedelta(days=day_delta)
|
time = now + timedelta(days=day_delta)
|
||||||
local_time = time.replace(hour=service_hour, minute=service_minute)
|
local_time = time.replace(hour=service_hour, minute=service_minute)
|
||||||
default_pattern = unicode(Settings().value(
|
default_pattern = unicode(Settings().value(u'advanced/default service name',
|
||||||
u'advanced/default service name',
|
|
||||||
translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M',
|
translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M',
|
||||||
'This may not contain any of the following characters: '
|
'This may not contain any of the following characters: '
|
||||||
'/\\?*|<>\[\]":+\nSee http://docs.python.org/library/'
|
'/\\?*|<>\[\]":+\nSee http://docs.python.org/library/'
|
||||||
'datetime.html#strftime-strptime-behavior for more '
|
'datetime.html#strftime-strptime-behavior for more information.')).toString())
|
||||||
'information.')).toString())
|
|
||||||
default_filename = format_time(default_pattern, local_time)
|
default_filename = format_time(default_pattern, local_time)
|
||||||
else:
|
else:
|
||||||
default_filename = u''
|
default_filename = u''
|
||||||
directory = unicode(SettingsManager.get_last_dir(
|
directory = unicode(SettingsManager.get_last_dir(self.mainwindow.serviceManagerSettingsSection))
|
||||||
self.mainwindow.serviceManagerSettingsSection))
|
|
||||||
path = os.path.join(directory, default_filename)
|
path = os.path.join(directory, default_filename)
|
||||||
# SaveAs from osz to oszl is not valid as the files will be deleted
|
# SaveAs from osz to oszl is not valid as the files will be deleted
|
||||||
# on exit which is not sensible or usable in the long term.
|
# on exit which is not sensible or usable in the long term.
|
||||||
if self._fileName.endswith(u'oszl') or not self._fileName:
|
if self._fileName.endswith(u'oszl') or not self._fileName:
|
||||||
fileName = unicode(QtGui.QFileDialog.getSaveFileName(
|
fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, UiStrings().SaveService, path,
|
||||||
self.mainwindow, UiStrings().SaveService, path,
|
|
||||||
translate('OpenLP.ServiceManager',
|
translate('OpenLP.ServiceManager',
|
||||||
'OpenLP Service Files (*.osz);;'
|
'OpenLP Service Files (*.osz);; OpenLP Service Files - lite (*.oszl)')))
|
||||||
'OpenLP Service Files - lite (*.oszl)')))
|
|
||||||
else:
|
else:
|
||||||
fileName = unicode(QtGui.QFileDialog.getSaveFileName(
|
fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, UiStrings().SaveService, path,
|
||||||
self.mainwindow, UiStrings().SaveService, path,
|
translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz);;')))
|
||||||
translate('OpenLP.ServiceManager',
|
|
||||||
'OpenLP Service Files (*.osz);;')))
|
|
||||||
if not fileName:
|
if not fileName:
|
||||||
return False
|
return False
|
||||||
if os.path.splitext(fileName)[1] == u'':
|
if os.path.splitext(fileName)[1] == u'':
|
||||||
|
@ -764,12 +670,9 @@ class ServiceManager(QtGui.QWidget):
|
||||||
try:
|
try:
|
||||||
ucsfile = zipinfo.filename.decode(u'utf-8')
|
ucsfile = zipinfo.filename.decode(u'utf-8')
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
log.exception(u'Filename "%s" is not valid UTF-8' %
|
log.exception(u'Filename "%s" is not valid UTF-8' % zipinfo.filename.decode(u'utf-8', u'replace'))
|
||||||
zipinfo.filename.decode(u'utf-8', u'replace'))
|
critical_error_message_box(message=translate('OpenLP.ServiceManager',
|
||||||
critical_error_message_box(
|
'File is not a valid service.\n The content encoding is not UTF-8.'))
|
||||||
message=translate('OpenLP.ServiceManager',
|
|
||||||
'File is not a valid service.\n'
|
|
||||||
'The content encoding is not UTF-8.'))
|
|
||||||
continue
|
continue
|
||||||
osfile = ucsfile.replace(u'/', os.path.sep)
|
osfile = ucsfile.replace(u'/', os.path.sep)
|
||||||
if not osfile.startswith(u'audio'):
|
if not osfile.startswith(u'audio'):
|
||||||
|
@ -798,8 +701,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self.validateItem(serviceItem)
|
self.validateItem(serviceItem)
|
||||||
self.load_item_uuid = 0
|
self.load_item_uuid = 0
|
||||||
if serviceItem.is_capable(ItemCapabilities.OnLoadUpdate):
|
if serviceItem.is_capable(ItemCapabilities.OnLoadUpdate):
|
||||||
Receiver.send_message(u'%s_service_load' %
|
Receiver.send_message(u'%s_service_load' % serviceItem.name.lower(), serviceItem)
|
||||||
serviceItem.name.lower(), serviceItem)
|
|
||||||
# if the item has been processed
|
# if the item has been processed
|
||||||
if serviceItem._uuid == self.load_item_uuid:
|
if serviceItem._uuid == self.load_item_uuid:
|
||||||
serviceItem.edit_id = int(self.load_item_edit_id)
|
serviceItem.edit_id = int(self.load_item_edit_id)
|
||||||
|
@ -808,32 +710,25 @@ class ServiceManager(QtGui.QWidget):
|
||||||
delete_file(p_file)
|
delete_file(p_file)
|
||||||
self.mainwindow.addRecentFile(fileName)
|
self.mainwindow.addRecentFile(fileName)
|
||||||
self.setModified(False)
|
self.setModified(False)
|
||||||
Settings().setValue(
|
Settings().setValue(u'servicemanager/last file', QtCore.QVariant(fileName))
|
||||||
'servicemanager/last file', QtCore.QVariant(fileName))
|
|
||||||
else:
|
else:
|
||||||
critical_error_message_box(
|
critical_error_message_box(message=translate('OpenLP.ServiceManager', 'File is not a valid service.'))
|
||||||
message=translate('OpenLP.ServiceManager',
|
|
||||||
'File is not a valid service.'))
|
|
||||||
log.exception(u'File contains no service data')
|
log.exception(u'File contains no service data')
|
||||||
except (IOError, NameError, zipfile.BadZipfile):
|
except (IOError, NameError, zipfile.BadZipfile):
|
||||||
log.exception(u'Problem loading service file %s' % fileName)
|
log.exception(u'Problem loading service file %s' % fileName)
|
||||||
critical_error_message_box(
|
critical_error_message_box(message=translate('OpenLP.ServiceManager',
|
||||||
message=translate('OpenLP.ServiceManager',
|
|
||||||
'File could not be opened because it is corrupt.'))
|
'File could not be opened because it is corrupt.'))
|
||||||
except zipfile.BadZipfile:
|
except zipfile.BadZipfile:
|
||||||
if os.path.getsize(fileName) == 0:
|
if os.path.getsize(fileName) == 0:
|
||||||
log.exception(u'Service file is zero sized: %s' % fileName)
|
log.exception(u'Service file is zero sized: %s' % fileName)
|
||||||
QtGui.QMessageBox.information(self,
|
QtGui.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Empty File'),
|
||||||
translate('OpenLP.ServiceManager', 'Empty File'),
|
translate('OpenLP.ServiceManager', 'This service file does not contain any data.'))
|
||||||
translate('OpenLP.ServiceManager', 'This service file '
|
|
||||||
'does not contain any data.'))
|
|
||||||
else:
|
else:
|
||||||
log.exception(u'Service file is cannot be extracted as zip: '
|
log.exception(u'Service file is cannot be extracted as zip: '
|
||||||
u'%s' % fileName)
|
u'%s' % fileName)
|
||||||
QtGui.QMessageBox.information(self,
|
QtGui.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Corrupt File'),
|
||||||
translate('OpenLP.ServiceManager', 'Corrupt File'),
|
translate('OpenLP.ServiceManager',
|
||||||
translate('OpenLP.ServiceManager', 'This file is either '
|
'This file is either corrupt or it is not an OpenLP 2 service file.'))
|
||||||
'corrupt or it is not an OpenLP 2.0 service file.'))
|
|
||||||
return
|
return
|
||||||
finally:
|
finally:
|
||||||
if fileTo:
|
if fileTo:
|
||||||
|
@ -850,8 +745,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
service was last closed. Can be blank if there was no service
|
service was last closed. Can be blank if there was no service
|
||||||
present.
|
present.
|
||||||
"""
|
"""
|
||||||
fileName = Settings(). \
|
fileName = Settings().value(u'servicemanager/last file',QtCore.QVariant(u'')).toString()
|
||||||
value(u'servicemanager/last file',QtCore.QVariant(u'')).toString()
|
|
||||||
if fileName:
|
if fileName:
|
||||||
self.loadFile(fileName)
|
self.loadFile(fileName)
|
||||||
|
|
||||||
|
@ -869,19 +763,15 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self.notesAction.setVisible(False)
|
self.notesAction.setVisible(False)
|
||||||
self.timeAction.setVisible(False)
|
self.timeAction.setVisible(False)
|
||||||
self.autoStartAction.setVisible(False)
|
self.autoStartAction.setVisible(False)
|
||||||
if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanEdit)\
|
if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanEdit) and serviceItem[u'service_item'].edit_id:
|
||||||
and serviceItem[u'service_item'].edit_id:
|
|
||||||
self.editAction.setVisible(True)
|
self.editAction.setVisible(True)
|
||||||
if serviceItem[u'service_item']\
|
if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanMaintain):
|
||||||
.is_capable(ItemCapabilities.CanMaintain):
|
|
||||||
self.maintainAction.setVisible(True)
|
self.maintainAction.setVisible(True)
|
||||||
if item.parent() is None:
|
if item.parent() is None:
|
||||||
self.notesAction.setVisible(True)
|
self.notesAction.setVisible(True)
|
||||||
if serviceItem[u'service_item']\
|
if serviceItem[u'service_item'].is_capable(ItemCapabilities.HasVariableStartTime):
|
||||||
.is_capable(ItemCapabilities.HasVariableStartTime):
|
|
||||||
self.timeAction.setVisible(True)
|
self.timeAction.setVisible(True)
|
||||||
if serviceItem[u'service_item']\
|
if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanAutoStartForLive):
|
||||||
.is_capable(ItemCapabilities.CanAutoStartForLive):
|
|
||||||
self.autoStartAction.setVisible(True)
|
self.autoStartAction.setVisible(True)
|
||||||
self.autoStartAction.setIcon(self.inactive)
|
self.autoStartAction.setIcon(self.inactive)
|
||||||
self.autoStartAction.setText(translate('OpenLP.ServiceManager','&Auto Start - inactive'))
|
self.autoStartAction.setText(translate('OpenLP.ServiceManager','&Auto Start - inactive'))
|
||||||
|
@ -890,15 +780,13 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self.autoStartAction.setIcon(self.active)
|
self.autoStartAction.setIcon(self.active)
|
||||||
self.themeMenu.menuAction().setVisible(False)
|
self.themeMenu.menuAction().setVisible(False)
|
||||||
# Set up the theme menu.
|
# Set up the theme menu.
|
||||||
if serviceItem[u'service_item'].is_text() and \
|
if serviceItem[u'service_item'].is_text() and self.mainwindow.renderer.theme_level == ThemeLevel.Song:
|
||||||
self.mainwindow.renderer.theme_level == ThemeLevel.Song:
|
|
||||||
self.themeMenu.menuAction().setVisible(True)
|
self.themeMenu.menuAction().setVisible(True)
|
||||||
# The service item does not have a theme, check the "Default".
|
# The service item does not have a theme, check the "Default".
|
||||||
if serviceItem[u'service_item'].theme is None:
|
if serviceItem[u'service_item'].theme is None:
|
||||||
themeAction = self.themeMenu.defaultAction()
|
themeAction = self.themeMenu.defaultAction()
|
||||||
else:
|
else:
|
||||||
themeAction = self.themeMenu.findChild(
|
themeAction = self.themeMenu.findChild(QtGui.QAction, serviceItem[u'service_item'].theme)
|
||||||
QtGui.QAction, serviceItem[u'service_item'].theme)
|
|
||||||
if themeAction is not None:
|
if themeAction is not None:
|
||||||
themeAction.setChecked(True)
|
themeAction.setChecked(True)
|
||||||
self.menu.exec_(self.serviceManagerList.mapToGlobal(point))
|
self.menu.exec_(self.serviceManagerList.mapToGlobal(point))
|
||||||
|
@ -908,8 +796,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self.serviceNoteForm.textEdit.setPlainText(
|
self.serviceNoteForm.textEdit.setPlainText(
|
||||||
self.serviceItems[item][u'service_item'].notes)
|
self.serviceItems[item][u'service_item'].notes)
|
||||||
if self.serviceNoteForm.exec_():
|
if self.serviceNoteForm.exec_():
|
||||||
self.serviceItems[item][u'service_item'].notes = \
|
self.serviceItems[item][u'service_item'].notes = self.serviceNoteForm.textEdit.toPlainText()
|
||||||
self.serviceNoteForm.textEdit.toPlainText()
|
|
||||||
self.repaintServiceList(item, -1)
|
self.repaintServiceList(item, -1)
|
||||||
self.setModified()
|
self.setModified()
|
||||||
|
|
||||||
|
@ -1155,22 +1042,18 @@ class ServiceManager(QtGui.QWidget):
|
||||||
if serviceitem.is_valid:
|
if serviceitem.is_valid:
|
||||||
if serviceitem.notes:
|
if serviceitem.notes:
|
||||||
icon = QtGui.QImage(serviceitem.icon)
|
icon = QtGui.QImage(serviceitem.icon)
|
||||||
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio,
|
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||||
QtCore.Qt.SmoothTransformation)
|
|
||||||
overlay = QtGui.QImage(':/services/service_item_notes.png')
|
overlay = QtGui.QImage(':/services/service_item_notes.png')
|
||||||
overlay = overlay.scaled(80, 80, QtCore.Qt.KeepAspectRatio,
|
overlay = overlay.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||||
QtCore.Qt.SmoothTransformation)
|
|
||||||
painter = QtGui.QPainter(icon)
|
painter = QtGui.QPainter(icon)
|
||||||
painter.drawImage(0, 0, overlay)
|
painter.drawImage(0, 0, overlay)
|
||||||
painter.end()
|
painter.end()
|
||||||
treewidgetitem.setIcon(0, build_icon(icon))
|
treewidgetitem.setIcon(0, build_icon(icon))
|
||||||
elif serviceitem.temporary_edit:
|
elif serviceitem.temporary_edit:
|
||||||
icon = QtGui.QImage(serviceitem.icon)
|
icon = QtGui.QImage(serviceitem.icon)
|
||||||
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio,
|
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||||
QtCore.Qt.SmoothTransformation)
|
|
||||||
overlay = QtGui.QImage(':/general/general_export.png')
|
overlay = QtGui.QImage(':/general/general_export.png')
|
||||||
overlay = overlay.scaled(40, 40, QtCore.Qt.KeepAspectRatio,
|
overlay = overlay.scaled(40, 40, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||||
QtCore.Qt.SmoothTransformation)
|
|
||||||
painter = QtGui.QPainter(icon)
|
painter = QtGui.QPainter(icon)
|
||||||
painter.drawImage(40, 0, overlay)
|
painter.drawImage(40, 0, overlay)
|
||||||
painter.end()
|
painter.end()
|
||||||
|
@ -1178,29 +1061,23 @@ class ServiceManager(QtGui.QWidget):
|
||||||
else:
|
else:
|
||||||
treewidgetitem.setIcon(0, serviceitem.iconic_representation)
|
treewidgetitem.setIcon(0, serviceitem.iconic_representation)
|
||||||
else:
|
else:
|
||||||
treewidgetitem.setIcon(0,
|
treewidgetitem.setIcon(0, build_icon(u':/general/general_delete.png'))
|
||||||
build_icon(u':/general/general_delete.png'))
|
|
||||||
treewidgetitem.setText(0, serviceitem.get_display_title())
|
treewidgetitem.setText(0, serviceitem.get_display_title())
|
||||||
tips = []
|
tips = []
|
||||||
if serviceitem.temporary_edit:
|
if serviceitem.temporary_edit:
|
||||||
tips.append(u'<strong>%s:</strong> <em>%s</em>' %
|
tips.append(u'<strong>%s:</strong> <em>%s</em>' %
|
||||||
(unicode(translate('OpenLP.ServiceManager', 'Edit')),
|
(unicode(translate('OpenLP.ServiceManager', 'Edit')),
|
||||||
(unicode(translate('OpenLP.ServiceManager',
|
(unicode(translate('OpenLP.ServiceManager', 'Service copy only')))))
|
||||||
'Service copy only')))))
|
|
||||||
if serviceitem.theme and serviceitem.theme != -1:
|
if serviceitem.theme and serviceitem.theme != -1:
|
||||||
tips.append(u'<strong>%s:</strong> <em>%s</em>' %
|
tips.append(u'<strong>%s:</strong> <em>%s</em>' %
|
||||||
(unicode(translate('OpenLP.ServiceManager', 'Slide theme')),
|
(unicode(translate('OpenLP.ServiceManager', 'Slide theme')), serviceitem.theme))
|
||||||
serviceitem.theme))
|
|
||||||
if serviceitem.notes:
|
if serviceitem.notes:
|
||||||
tips.append(u'<strong>%s: </strong> %s' %
|
tips.append(u'<strong>%s: </strong> %s' %
|
||||||
(unicode(translate('OpenLP.ServiceManager', 'Notes')),
|
(unicode(translate('OpenLP.ServiceManager', 'Notes')), cgi.escape(unicode(serviceitem.notes))))
|
||||||
cgi.escape(unicode(serviceitem.notes))))
|
if item[u'service_item'].is_capable(ItemCapabilities.HasVariableStartTime):
|
||||||
if item[u'service_item'] \
|
|
||||||
.is_capable(ItemCapabilities.HasVariableStartTime):
|
|
||||||
tips.append(item[u'service_item'].get_media_time())
|
tips.append(item[u'service_item'].get_media_time())
|
||||||
treewidgetitem.setToolTip(0, u'<br>'.join(tips))
|
treewidgetitem.setToolTip(0, u'<br>'.join(tips))
|
||||||
treewidgetitem.setData(0, QtCore.Qt.UserRole,
|
treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order']))
|
||||||
QtCore.QVariant(item[u'order']))
|
|
||||||
treewidgetitem.setSelected(item[u'selected'])
|
treewidgetitem.setSelected(item[u'selected'])
|
||||||
# Add the children to their parent treewidgetitem.
|
# Add the children to their parent treewidgetitem.
|
||||||
for count, frame in enumerate(serviceitem.get_frames()):
|
for count, frame in enumerate(serviceitem.get_frames()):
|
||||||
|
@ -1245,9 +1122,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
log.debug(u'onThemeComboBoxSelected')
|
log.debug(u'onThemeComboBoxSelected')
|
||||||
self.service_theme = unicode(self.themeComboBox.currentText())
|
self.service_theme = unicode(self.themeComboBox.currentText())
|
||||||
self.mainwindow.renderer.set_service_theme(self.service_theme)
|
self.mainwindow.renderer.set_service_theme(self.service_theme)
|
||||||
Settings().setValue(
|
Settings().setValue(self.mainwindow.serviceManagerSettingsSection + u'/service theme',
|
||||||
self.mainwindow.serviceManagerSettingsSection +
|
|
||||||
u'/service theme',
|
|
||||||
QtCore.QVariant(self.service_theme))
|
QtCore.QVariant(self.service_theme))
|
||||||
self.regenerateServiceItems(True)
|
self.regenerateServiceItems(True)
|
||||||
|
|
||||||
|
@ -1273,8 +1148,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
if self.serviceItems:
|
if self.serviceItems:
|
||||||
for item in self.serviceItems:
|
for item in self.serviceItems:
|
||||||
item[u'selected'] = False
|
item[u'selected'] = False
|
||||||
serviceIterator = QtGui.QTreeWidgetItemIterator(
|
serviceIterator = QtGui.QTreeWidgetItemIterator(self.serviceManagerList)
|
||||||
self.serviceManagerList)
|
|
||||||
selectedItem = None
|
selectedItem = None
|
||||||
while serviceIterator.value():
|
while serviceIterator.value():
|
||||||
if serviceIterator.value().isSelected():
|
if serviceIterator.value().isSelected():
|
||||||
|
@ -1284,17 +1158,15 @@ class ServiceManager(QtGui.QWidget):
|
||||||
if selectedItem.parent() is None:
|
if selectedItem.parent() is None:
|
||||||
pos = selectedItem.data(0, QtCore.Qt.UserRole).toInt()[0]
|
pos = selectedItem.data(0, QtCore.Qt.UserRole).toInt()[0]
|
||||||
else:
|
else:
|
||||||
pos = selectedItem.parent().data(0, QtCore.Qt.UserRole). \
|
pos = selectedItem.parent().data(0, QtCore.Qt.UserRole).toInt()[0]
|
||||||
toInt()[0]
|
|
||||||
self.serviceItems[pos - 1][u'selected'] = True
|
self.serviceItems[pos - 1][u'selected'] = True
|
||||||
tempServiceItems = self.serviceItems
|
tempServiceItems = self.serviceItems
|
||||||
self.serviceManagerList.clear()
|
self.serviceManagerList.clear()
|
||||||
self.serviceItems = []
|
self.serviceItems = []
|
||||||
self.isNew = True
|
self.isNew = True
|
||||||
for item in tempServiceItems:
|
for item in tempServiceItems:
|
||||||
self.addServiceItem(
|
self.addServiceItem(item[u'service_item'], False, expand=item[u'expanded'], repaint=False,
|
||||||
item[u'service_item'], False, expand=item[u'expanded'],
|
selected=item[u'selected'])
|
||||||
repaint=False, selected=item[u'selected'])
|
|
||||||
# Set to False as items may have changed rendering
|
# Set to False as items may have changed rendering
|
||||||
# does not impact the saved song so True may also be valid
|
# does not impact the saved song so True may also be valid
|
||||||
if changed:
|
if changed:
|
||||||
|
@ -1318,18 +1190,15 @@ class ServiceManager(QtGui.QWidget):
|
||||||
if found.
|
if found.
|
||||||
"""
|
"""
|
||||||
for itemcount, item in enumerate(self.serviceItems):
|
for itemcount, item in enumerate(self.serviceItems):
|
||||||
if item[u'service_item'].edit_id == newItem.edit_id and \
|
if item[u'service_item'].edit_id == newItem.edit_id and item[u'service_item'].name == newItem.name:
|
||||||
item[u'service_item'].name == newItem.name:
|
|
||||||
newItem.render()
|
newItem.render()
|
||||||
newItem.merge(item[u'service_item'])
|
newItem.merge(item[u'service_item'])
|
||||||
item[u'service_item'] = newItem
|
item[u'service_item'] = newItem
|
||||||
self.repaintServiceList(itemcount + 1, 0)
|
self.repaintServiceList(itemcount + 1, 0)
|
||||||
self.mainwindow.liveController.replaceServiceManagerItem(
|
self.mainwindow.liveController.replaceServiceManagerItem(newItem)
|
||||||
newItem)
|
|
||||||
self.setModified()
|
self.setModified()
|
||||||
|
|
||||||
def addServiceItem(self, item, rebuild=False, expand=None, replace=False,
|
def addServiceItem(self, item, rebuild=False, expand=None, replace=False, repaint=True, selected=False):
|
||||||
repaint=True, selected=False):
|
|
||||||
"""
|
"""
|
||||||
Add a Service item to the list
|
Add a Service item to the list
|
||||||
|
|
||||||
|
@ -1385,10 +1254,9 @@ class ServiceManager(QtGui.QWidget):
|
||||||
self.mainwindow.previewController.addServiceManagerItem(
|
self.mainwindow.previewController.addServiceManagerItem(
|
||||||
self.serviceItems[item][u'service_item'], child)
|
self.serviceItems[item][u'service_item'], child)
|
||||||
else:
|
else:
|
||||||
critical_error_message_box(
|
critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'),
|
||||||
translate('OpenLP.ServiceManager', 'Missing Display Handler'),
|
translate('OpenLP.ServiceManager',
|
||||||
translate('OpenLP.ServiceManager', 'Your item cannot be '
|
'Your item cannot be displayed as there is no handler to display it'))
|
||||||
'displayed as there is no handler to display it'))
|
|
||||||
Receiver.send_message(u'cursor_normal')
|
Receiver.send_message(u'cursor_normal')
|
||||||
|
|
||||||
def getServiceItem(self):
|
def getServiceItem(self):
|
||||||
|
@ -1431,17 +1299,13 @@ class ServiceManager(QtGui.QWidget):
|
||||||
QtCore.QVariant(False)).toBool():
|
QtCore.QVariant(False)).toBool():
|
||||||
item += 1
|
item += 1
|
||||||
if self.serviceItems and item < len(self.serviceItems) and \
|
if self.serviceItems and item < len(self.serviceItems) and \
|
||||||
self.serviceItems[item][u'service_item'].is_capable(
|
self.serviceItems[item][u'service_item'].is_capable(ItemCapabilities.CanPreview):
|
||||||
ItemCapabilities.CanPreview):
|
self.mainwindow.previewController.addServiceManagerItem(self.serviceItems[item][u'service_item'], 0)
|
||||||
self.mainwindow.previewController.addServiceManagerItem(
|
|
||||||
self.serviceItems[item][u'service_item'], 0)
|
|
||||||
self.mainwindow.liveController.previewListWidget.setFocus()
|
self.mainwindow.liveController.previewListWidget.setFocus()
|
||||||
else:
|
else:
|
||||||
critical_error_message_box(
|
critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'),
|
||||||
translate('OpenLP.ServiceManager', 'Missing Display Handler'),
|
translate('OpenLP.ServiceManager',
|
||||||
translate('OpenLP.ServiceManager', 'Your item cannot be '
|
'Your item cannot be displayed as the plugin required to display it is missing or inactive'))
|
||||||
'displayed as the plugin required to display it is missing '
|
|
||||||
'or inactive'))
|
|
||||||
Receiver.send_message(u'cursor_normal')
|
Receiver.send_message(u'cursor_normal')
|
||||||
|
|
||||||
def remoteEdit(self):
|
def remoteEdit(self):
|
||||||
|
@ -1449,10 +1313,8 @@ class ServiceManager(QtGui.QWidget):
|
||||||
Posts a remote edit message to a plugin to allow item to be edited.
|
Posts a remote edit message to a plugin to allow item to be edited.
|
||||||
"""
|
"""
|
||||||
item = self.findServiceItem()[0]
|
item = self.findServiceItem()[0]
|
||||||
if self.serviceItems[item][u'service_item']\
|
if self.serviceItems[item][u'service_item'].is_capable(ItemCapabilities.CanEdit):
|
||||||
.is_capable(ItemCapabilities.CanEdit):
|
Receiver.send_message(u'%s_edit' % self.serviceItems[item][u'service_item'].name.lower(),
|
||||||
Receiver.send_message(u'%s_edit' %
|
|
||||||
self.serviceItems[item][u'service_item'].name.lower(),
|
|
||||||
u'L:%s' % self.serviceItems[item][u'service_item'].edit_id)
|
u'L:%s' % self.serviceItems[item][u'service_item'].edit_id)
|
||||||
|
|
||||||
def findServiceItem(self):
|
def findServiceItem(self):
|
||||||
|
@ -1537,8 +1399,7 @@ class ServiceManager(QtGui.QWidget):
|
||||||
pos = self._getParentItemData(item) - 1
|
pos = self._getParentItemData(item) - 1
|
||||||
serviceItem = self.serviceItems[pos]
|
serviceItem = self.serviceItems[pos]
|
||||||
if (plugin == serviceItem[u'service_item'].name and
|
if (plugin == serviceItem[u'service_item'].name and
|
||||||
serviceItem[u'service_item'].is_capable(
|
serviceItem[u'service_item'].is_capable(ItemCapabilities.CanAppend)):
|
||||||
ItemCapabilities.CanAppend)):
|
|
||||||
action = self.dndMenu.exec_(QtGui.QCursor.pos())
|
action = self.dndMenu.exec_(QtGui.QCursor.pos())
|
||||||
# New action required
|
# New action required
|
||||||
if action == self.newAction:
|
if action == self.newAction:
|
||||||
|
@ -1567,16 +1428,15 @@ class ServiceManager(QtGui.QWidget):
|
||||||
themeGroup.setObjectName(u'themeGroup')
|
themeGroup.setObjectName(u'themeGroup')
|
||||||
# Create a "Default" theme, which allows the user to reset the item's
|
# Create a "Default" theme, which allows the user to reset the item's
|
||||||
# theme to the service theme or global theme.
|
# theme to the service theme or global theme.
|
||||||
defaultTheme = create_widget_action(self.themeMenu,
|
defaultTheme = create_widget_action(self.themeMenu, text=UiStrings().Default, checked=False,
|
||||||
text=UiStrings().Default, checked=False,
|
|
||||||
triggers=self.onThemeChangeAction)
|
triggers=self.onThemeChangeAction)
|
||||||
self.themeMenu.setDefaultAction(defaultTheme)
|
self.themeMenu.setDefaultAction(defaultTheme)
|
||||||
themeGroup.addAction(defaultTheme)
|
themeGroup.addAction(defaultTheme)
|
||||||
self.themeMenu.addSeparator()
|
self.themeMenu.addSeparator()
|
||||||
for theme in theme_list:
|
for theme in theme_list:
|
||||||
self.themeComboBox.addItem(theme)
|
self.themeComboBox.addItem(theme)
|
||||||
themeGroup.addAction(create_widget_action(self.themeMenu, theme,
|
themeGroup.addAction(create_widget_action(self.themeMenu, theme, text=theme, checked=False,
|
||||||
text=theme, checked=False, triggers=self.onThemeChangeAction))
|
triggers=self.onThemeChangeAction))
|
||||||
find_and_set_in_combo_box(self.themeComboBox, self.service_theme)
|
find_and_set_in_combo_box(self.themeComboBox, self.service_theme)
|
||||||
self.mainwindow.renderer.set_service_theme(self.service_theme)
|
self.mainwindow.renderer.set_service_theme(self.service_theme)
|
||||||
self.regenerateServiceItems()
|
self.regenerateServiceItems()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -65,8 +65,7 @@ class DisplayController(QtGui.QWidget):
|
||||||
created from within other plugins
|
created from within other plugins
|
||||||
This function is needed to catch the current controller
|
This function is needed to catch the current controller
|
||||||
"""
|
"""
|
||||||
sender = self.sender().objectName() if self.sender().objectName() \
|
sender = self.sender().objectName() if self.sender().objectName() else self.sender().text()
|
||||||
else self.sender().text()
|
|
||||||
controller = self
|
controller = self
|
||||||
Receiver.send_message('%s' % sender, [controller, args])
|
Receiver.send_message('%s' % sender, [controller, args])
|
||||||
|
|
||||||
|
@ -83,8 +82,7 @@ class SlideController(DisplayController):
|
||||||
DisplayController.__init__(self, parent, isLive)
|
DisplayController.__init__(self, parent, isLive)
|
||||||
self.screens = ScreenList()
|
self.screens = ScreenList()
|
||||||
try:
|
try:
|
||||||
self.ratio = float(self.screens.current[u'size'].width()) / \
|
self.ratio = float(self.screens.current[u'size'].width()) / float(self.screens.current[u'size'].height())
|
||||||
float(self.screens.current[u'size'].height())
|
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError:
|
||||||
self.ratio = 1
|
self.ratio = 1
|
||||||
self.imageManager = self.parent().imageManager
|
self.imageManager = self.parent().imageManager
|
||||||
|
@ -120,8 +118,7 @@ class SlideController(DisplayController):
|
||||||
self.keypress_queue = deque()
|
self.keypress_queue = deque()
|
||||||
self.keypress_loop = False
|
self.keypress_loop = False
|
||||||
self.category = UiStrings().LiveToolbar
|
self.category = UiStrings().LiveToolbar
|
||||||
ActionList.get_instance().add_category(
|
ActionList.get_instance().add_category(unicode(self.category), CategoryOrder.standardToolbar)
|
||||||
unicode(self.category), CategoryOrder.standardToolbar)
|
|
||||||
else:
|
else:
|
||||||
self.typeLabel.setText(UiStrings().Preview)
|
self.typeLabel.setText(UiStrings().Preview)
|
||||||
self.split = 0
|
self.split = 0
|
||||||
|
@ -137,9 +134,7 @@ class SlideController(DisplayController):
|
||||||
# Actual controller section
|
# Actual controller section
|
||||||
self.controller = QtGui.QWidget(self.splitter)
|
self.controller = QtGui.QWidget(self.splitter)
|
||||||
self.controller.setGeometry(QtCore.QRect(0, 0, 100, 536))
|
self.controller.setGeometry(QtCore.QRect(0, 0, 100, 536))
|
||||||
self.controller.setSizePolicy(
|
self.controller.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum))
|
||||||
QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
|
|
||||||
QtGui.QSizePolicy.Maximum))
|
|
||||||
self.controllerLayout = QtGui.QVBoxLayout(self.controller)
|
self.controllerLayout = QtGui.QVBoxLayout(self.controller)
|
||||||
self.controllerLayout.setSpacing(0)
|
self.controllerLayout.setSpacing(0)
|
||||||
self.controllerLayout.setMargin(0)
|
self.controllerLayout.setMargin(0)
|
||||||
|
@ -150,40 +145,29 @@ class SlideController(DisplayController):
|
||||||
self.previewListWidget.setColumnWidth(0, self.controller.width())
|
self.previewListWidget.setColumnWidth(0, self.controller.width())
|
||||||
self.previewListWidget.isLive = self.isLive
|
self.previewListWidget.isLive = self.isLive
|
||||||
self.previewListWidget.setObjectName(u'previewListWidget')
|
self.previewListWidget.setObjectName(u'previewListWidget')
|
||||||
self.previewListWidget.setSelectionBehavior(
|
self.previewListWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
|
||||||
QtGui.QAbstractItemView.SelectRows)
|
self.previewListWidget.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
|
||||||
self.previewListWidget.setSelectionMode(
|
self.previewListWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
|
||||||
QtGui.QAbstractItemView.SingleSelection)
|
self.previewListWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
self.previewListWidget.setEditTriggers(
|
|
||||||
QtGui.QAbstractItemView.NoEditTriggers)
|
|
||||||
self.previewListWidget.setHorizontalScrollBarPolicy(
|
|
||||||
QtCore.Qt.ScrollBarAlwaysOff)
|
|
||||||
self.previewListWidget.setAlternatingRowColors(True)
|
self.previewListWidget.setAlternatingRowColors(True)
|
||||||
self.controllerLayout.addWidget(self.previewListWidget)
|
self.controllerLayout.addWidget(self.previewListWidget)
|
||||||
# Build the full toolbar
|
# Build the full toolbar
|
||||||
self.toolbar = OpenLPToolbar(self)
|
self.toolbar = OpenLPToolbar(self)
|
||||||
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
|
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
||||||
QtGui.QSizePolicy.Fixed)
|
|
||||||
sizeToolbarPolicy.setHorizontalStretch(0)
|
sizeToolbarPolicy.setHorizontalStretch(0)
|
||||||
sizeToolbarPolicy.setVerticalStretch(0)
|
sizeToolbarPolicy.setVerticalStretch(0)
|
||||||
sizeToolbarPolicy.setHeightForWidth(
|
sizeToolbarPolicy.setHeightForWidth(self.toolbar.sizePolicy().hasHeightForWidth())
|
||||||
self.toolbar.sizePolicy().hasHeightForWidth())
|
|
||||||
self.toolbar.setSizePolicy(sizeToolbarPolicy)
|
self.toolbar.setSizePolicy(sizeToolbarPolicy)
|
||||||
self.previousItem = create_action(self,
|
self.previousItem = create_action(self, u'previousItem_' + self.typePrefix,
|
||||||
u'previousItem_' + self.typePrefix,
|
text=translate('OpenLP.SlideController', 'Previous Slide'), icon=u':/slides/slide_previous.png',
|
||||||
text=translate('OpenLP.SlideController', 'Previous Slide'),
|
|
||||||
icon=u':/slides/slide_previous.png',
|
|
||||||
tooltip=translate('OpenLP.SlideController', 'Move to previous.'),
|
tooltip=translate('OpenLP.SlideController', 'Move to previous.'),
|
||||||
shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp],
|
shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], context=QtCore.Qt.WidgetWithChildrenShortcut,
|
||||||
context=QtCore.Qt.WidgetWithChildrenShortcut,
|
|
||||||
category=self.category, triggers=self.onSlideSelectedPrevious)
|
category=self.category, triggers=self.onSlideSelectedPrevious)
|
||||||
self.toolbar.addAction(self.previousItem)
|
self.toolbar.addAction(self.previousItem)
|
||||||
self.nextItem = create_action(self, u'nextItem_' + self.typePrefix,
|
self.nextItem = create_action(self, u'nextItem_' + self.typePrefix,
|
||||||
text=translate('OpenLP.SlideController', 'Next Slide'),
|
text=translate('OpenLP.SlideController', 'Next Slide'), icon=u':/slides/slide_next.png',
|
||||||
icon=u':/slides/slide_next.png',
|
|
||||||
tooltip=translate('OpenLP.SlideController', 'Move to next.'),
|
tooltip=translate('OpenLP.SlideController', 'Move to next.'),
|
||||||
shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown],
|
shortcuts=[QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], context=QtCore.Qt.WidgetWithChildrenShortcut,
|
||||||
context=QtCore.Qt.WidgetWithChildrenShortcut,
|
|
||||||
category=self.category, triggers=self.onSlideSelectedNextAction)
|
category=self.category, triggers=self.onSlideSelectedNextAction)
|
||||||
self.toolbar.addAction(self.nextItem)
|
self.toolbar.addAction(self.nextItem)
|
||||||
self.toolbar.addSeparator()
|
self.toolbar.addSeparator()
|
||||||
|
@ -195,24 +179,19 @@ class SlideController(DisplayController):
|
||||||
self.hideMenu.setObjectName(u'hideMenu')
|
self.hideMenu.setObjectName(u'hideMenu')
|
||||||
self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide'))
|
self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide'))
|
||||||
self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
|
self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
|
||||||
self.hideMenu.setMenu(QtGui.QMenu(
|
self.hideMenu.setMenu(QtGui.QMenu(translate('OpenLP.SlideController', 'Hide'), self.toolbar))
|
||||||
translate('OpenLP.SlideController', 'Hide'), self.toolbar))
|
|
||||||
self.toolbar.addToolbarWidget(self.hideMenu)
|
self.toolbar.addToolbarWidget(self.hideMenu)
|
||||||
self.blankScreen = create_action(self, u'blankScreen',
|
self.blankScreen = create_action(self, u'blankScreen',
|
||||||
text=translate('OpenLP.SlideController', 'Blank Screen'),
|
text=translate('OpenLP.SlideController', 'Blank Screen'), icon=u':/slides/slide_blank.png',
|
||||||
icon=u':/slides/slide_blank.png', checked=False,
|
checked=False, shortcuts=[QtCore.Qt.Key_Period], category=self.category, triggers=self.onBlankDisplay)
|
||||||
shortcuts=[QtCore.Qt.Key_Period],
|
|
||||||
category=self.category, triggers=self.onBlankDisplay)
|
|
||||||
self.themeScreen = create_action(self, u'themeScreen',
|
self.themeScreen = create_action(self, u'themeScreen',
|
||||||
text=translate('OpenLP.SlideController', 'Blank to Theme'),
|
text=translate('OpenLP.SlideController', 'Blank to Theme'), icon=u':/slides/slide_theme.png',
|
||||||
icon=u':/slides/slide_theme.png', checked=False,
|
checked=False, shortcuts=[QtGui.QKeySequence(u'T')], category=self.category,
|
||||||
shortcuts=[QtGui.QKeySequence(u'T')],
|
triggers=self.onThemeDisplay)
|
||||||
category=self.category, triggers=self.onThemeDisplay)
|
|
||||||
self.desktopScreen = create_action(self, u'desktopScreen',
|
self.desktopScreen = create_action(self, u'desktopScreen',
|
||||||
text=translate('OpenLP.SlideController', 'Show Desktop'),
|
text=translate('OpenLP.SlideController', 'Show Desktop'), icon=u':/slides/slide_desktop.png',
|
||||||
icon=u':/slides/slide_desktop.png', checked=False,
|
checked=False, shortcuts=[QtGui.QKeySequence(u'D')], category=self.category,
|
||||||
shortcuts=[QtGui.QKeySequence(u'D')],
|
triggers=self.onHideDisplay)
|
||||||
category=self.category, triggers=self.onHideDisplay)
|
|
||||||
self.hideMenu.setDefaultAction(self.blankScreen)
|
self.hideMenu.setDefaultAction(self.blankScreen)
|
||||||
self.hideMenu.menu().addAction(self.blankScreen)
|
self.hideMenu.menu().addAction(self.blankScreen)
|
||||||
self.hideMenu.menu().addAction(self.themeScreen)
|
self.hideMenu.menu().addAction(self.themeScreen)
|
||||||
|
@ -221,23 +200,18 @@ class SlideController(DisplayController):
|
||||||
# Play Slides Menu
|
# Play Slides Menu
|
||||||
self.playSlidesMenu = QtGui.QToolButton(self.toolbar)
|
self.playSlidesMenu = QtGui.QToolButton(self.toolbar)
|
||||||
self.playSlidesMenu.setObjectName(u'playSlidesMenu')
|
self.playSlidesMenu.setObjectName(u'playSlidesMenu')
|
||||||
self.playSlidesMenu.setText(translate('OpenLP.SlideController',
|
self.playSlidesMenu.setText(translate('OpenLP.SlideController', 'Play Slides'))
|
||||||
'Play Slides'))
|
|
||||||
self.playSlidesMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
|
self.playSlidesMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
|
||||||
self.playSlidesMenu.setMenu(QtGui.QMenu(
|
self.playSlidesMenu.setMenu(QtGui.QMenu(translate('OpenLP.SlideController', 'Play Slides'), self.toolbar))
|
||||||
translate('OpenLP.SlideController', 'Play Slides'),
|
|
||||||
self.toolbar))
|
|
||||||
self.toolbar.addToolbarWidget(self.playSlidesMenu)
|
self.toolbar.addToolbarWidget(self.playSlidesMenu)
|
||||||
self.playSlidesLoop = create_action(self, u'playSlidesLoop',
|
self.playSlidesLoop = create_action(self, u'playSlidesLoop', text=UiStrings().PlaySlidesInLoop,
|
||||||
text=UiStrings().PlaySlidesInLoop,
|
icon=u':/media/media_time.png', checked=False, shortcuts=[], category=self.category,
|
||||||
icon=u':/media/media_time.png', checked=False, shortcuts=[],
|
triggers=self.onPlaySlidesLoop)
|
||||||
category=self.category, triggers=self.onPlaySlidesLoop)
|
self.playSlidesOnce = create_action(self, u'playSlidesOnce', text=UiStrings().PlaySlidesToEnd,
|
||||||
self.playSlidesOnce = create_action(self, u'playSlidesOnce',
|
icon=u':/media/media_time.png', checked=False, shortcuts=[], category=self.category,
|
||||||
text=UiStrings().PlaySlidesToEnd,
|
triggers=self.onPlaySlidesOnce)
|
||||||
icon=u':/media/media_time.png', checked=False, shortcuts=[],
|
if Settings().value(self.parent().generalSettingsSection + u'/enable slide loop',
|
||||||
category=self.category, triggers=self.onPlaySlidesOnce)
|
QtCore.QVariant(True)).toBool():
|
||||||
if Settings().value(self.parent().generalSettingsSection +
|
|
||||||
u'/enable slide loop', QtCore.QVariant(True)).toBool():
|
|
||||||
self.playSlidesMenu.setDefaultAction(self.playSlidesLoop)
|
self.playSlidesMenu.setDefaultAction(self.playSlidesLoop)
|
||||||
else:
|
else:
|
||||||
self.playSlidesMenu.setDefaultAction(self.playSlidesOnce)
|
self.playSlidesMenu.setDefaultAction(self.playSlidesOnce)
|
||||||
|
@ -248,23 +222,16 @@ class SlideController(DisplayController):
|
||||||
self.delaySpinBox.setObjectName(u'delaySpinBox')
|
self.delaySpinBox.setObjectName(u'delaySpinBox')
|
||||||
self.delaySpinBox.setRange(1, 180)
|
self.delaySpinBox.setRange(1, 180)
|
||||||
self.delaySpinBox.setSuffix(UiStrings().Seconds)
|
self.delaySpinBox.setSuffix(UiStrings().Seconds)
|
||||||
self.delaySpinBox.setToolTip(translate('OpenLP.SlideController',
|
self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', 'Delay between slides in seconds.'))
|
||||||
'Delay between slides in seconds.'))
|
|
||||||
self.toolbar.addToolbarWidget(self.delaySpinBox)
|
self.toolbar.addToolbarWidget(self.delaySpinBox)
|
||||||
else:
|
else:
|
||||||
self.toolbar.addToolbarAction(u'goLive',
|
self.toolbar.addToolbarAction(u'goLive', icon=u':/general/general_live.png',
|
||||||
icon=u':/general/general_live.png',
|
tooltip=translate('OpenLP.SlideController', 'Move to live.'), triggers=self.onGoLive)
|
||||||
tooltip=translate('OpenLP.SlideController', 'Move to live.'),
|
self.toolbar.addToolbarAction(u'addToService', icon=u':/general/general_add.png',
|
||||||
triggers=self.onGoLive)
|
tooltip=translate('OpenLP.SlideController', 'Add to Service.'), triggers=self.onPreviewAddToService)
|
||||||
self.toolbar.addToolbarAction(u'addToService',
|
|
||||||
icon=u':/general/general_add.png',
|
|
||||||
tooltip=translate('OpenLP.SlideController', 'Add to Service.'),
|
|
||||||
triggers=self.onPreviewAddToService)
|
|
||||||
self.toolbar.addSeparator()
|
self.toolbar.addSeparator()
|
||||||
self.toolbar.addToolbarAction(u'editSong',
|
self.toolbar.addToolbarAction(u'editSong', icon=u':/general/general_edit.png',
|
||||||
icon=u':/general/general_edit.png',
|
tooltip=translate('OpenLP.SlideController', 'Edit and reload song preview.'), triggers=self.onEditSong)
|
||||||
tooltip=translate('OpenLP.SlideController',
|
|
||||||
'Edit and reload song preview.'), triggers=self.onEditSong)
|
|
||||||
self.controllerLayout.addWidget(self.toolbar)
|
self.controllerLayout.addWidget(self.toolbar)
|
||||||
# Build the Media Toolbar
|
# Build the Media Toolbar
|
||||||
self.mediaController.register_controller(self)
|
self.mediaController.register_controller(self)
|
||||||
|
@ -274,35 +241,27 @@ class SlideController(DisplayController):
|
||||||
self.songMenu.setObjectName(u'songMenu')
|
self.songMenu.setObjectName(u'songMenu')
|
||||||
self.songMenu.setText(translate('OpenLP.SlideController', 'Go To'))
|
self.songMenu.setText(translate('OpenLP.SlideController', 'Go To'))
|
||||||
self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup)
|
self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup)
|
||||||
self.songMenu.setMenu(QtGui.QMenu(
|
self.songMenu.setMenu(QtGui.QMenu(translate('OpenLP.SlideController', 'Go To'), self.toolbar))
|
||||||
translate('OpenLP.SlideController', 'Go To'), self.toolbar))
|
|
||||||
self.toolbar.addToolbarWidget(self.songMenu)
|
self.toolbar.addToolbarWidget(self.songMenu)
|
||||||
# Stuff for items with background audio.
|
# Stuff for items with background audio.
|
||||||
self.audioPauseItem = self.toolbar.addToolbarAction(
|
self.audioPauseItem = self.toolbar.addToolbarAction(u'audioPauseItem',
|
||||||
u'audioPauseItem', icon=u':/slides/media_playback_pause.png',
|
icon=u':/slides/media_playback_pause.png', text=translate('OpenLP.SlideController', 'Pause Audio'),
|
||||||
text=translate('OpenLP.SlideController', 'Pause Audio'),
|
|
||||||
tooltip=translate('OpenLP.SlideController', 'Pause audio.'),
|
tooltip=translate('OpenLP.SlideController', 'Pause audio.'),
|
||||||
checked=False, visible=False, category=self.category,
|
checked=False, visible=False, category=self.category, context=QtCore.Qt.WindowShortcut,
|
||||||
context=QtCore.Qt.WindowShortcut,
|
|
||||||
shortcuts=[], triggers=self.onAudioPauseClicked)
|
shortcuts=[], triggers=self.onAudioPauseClicked)
|
||||||
self.audioMenu = QtGui.QMenu(
|
self.audioMenu = QtGui.QMenu(translate('OpenLP.SlideController', 'Background Audio'), self.toolbar)
|
||||||
translate('OpenLP.SlideController', 'Background Audio'), self.toolbar)
|
|
||||||
self.audioPauseItem.setMenu(self.audioMenu)
|
self.audioPauseItem.setMenu(self.audioMenu)
|
||||||
self.audioPauseItem.setParent(self.toolbar)
|
self.audioPauseItem.setParent(self.toolbar)
|
||||||
self.toolbar.widgetForAction(self.audioPauseItem).setPopupMode(
|
self.toolbar.widgetForAction(self.audioPauseItem).setPopupMode(
|
||||||
QtGui.QToolButton.MenuButtonPopup)
|
QtGui.QToolButton.MenuButtonPopup)
|
||||||
self.nextTrackItem = create_action(self, u'nextTrackItem',
|
self.nextTrackItem = create_action(self, u'nextTrackItem', text=UiStrings().NextTrack,
|
||||||
text=UiStrings().NextTrack,
|
icon=u':/slides/media_playback_next.png',
|
||||||
icon=u':/slides/media_playback_next.png', tooltip=translate(
|
tooltip=translate('OpenLP.SlideController', 'Go to next audio track.'),
|
||||||
'OpenLP.SlideController', 'Go to next audio track.'),
|
category=self.category, shortcuts=[], triggers=self.onNextTrackClicked)
|
||||||
category=self.category,
|
|
||||||
shortcuts=[], triggers=self.onNextTrackClicked)
|
|
||||||
self.audioMenu.addAction(self.nextTrackItem)
|
self.audioMenu.addAction(self.nextTrackItem)
|
||||||
self.trackMenu = self.audioMenu.addMenu(
|
self.trackMenu = self.audioMenu.addMenu(translate('OpenLP.SlideController', 'Tracks'))
|
||||||
translate('OpenLP.SlideController', 'Tracks'))
|
|
||||||
self.audioTimeLabel = QtGui.QLabel(u' 00:00 ', self.toolbar)
|
self.audioTimeLabel = QtGui.QLabel(u' 00:00 ', self.toolbar)
|
||||||
self.audioTimeLabel.setAlignment(
|
self.audioTimeLabel.setAlignment(QtCore.Qt.AlignCenter|QtCore.Qt.AlignHCenter)
|
||||||
QtCore.Qt.AlignCenter|QtCore.Qt.AlignHCenter)
|
|
||||||
self.audioTimeLabel.setStyleSheet(
|
self.audioTimeLabel.setStyleSheet(
|
||||||
u'background-color: palette(background); '
|
u'background-color: palette(background); '
|
||||||
u'border-top-color: palette(shadow); '
|
u'border-top-color: palette(shadow); '
|
||||||
|
@ -319,8 +278,7 @@ class SlideController(DisplayController):
|
||||||
self.previewFrame = QtGui.QFrame(self.splitter)
|
self.previewFrame = QtGui.QFrame(self.splitter)
|
||||||
self.previewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio))
|
self.previewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio))
|
||||||
self.previewFrame.setMinimumHeight(100)
|
self.previewFrame.setMinimumHeight(100)
|
||||||
self.previewFrame.setSizePolicy(QtGui.QSizePolicy(
|
self.previewFrame.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored,
|
||||||
QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored,
|
|
||||||
QtGui.QSizePolicy.Label))
|
QtGui.QSizePolicy.Label))
|
||||||
self.previewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
|
self.previewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
|
||||||
self.previewFrame.setFrameShadow(QtGui.QFrame.Sunken)
|
self.previewFrame.setFrameShadow(QtGui.QFrame.Sunken)
|
||||||
|
@ -340,8 +298,7 @@ class SlideController(DisplayController):
|
||||||
self.previewDisplay.hide()
|
self.previewDisplay.hide()
|
||||||
# Actual preview screen
|
# Actual preview screen
|
||||||
self.slidePreview = QtGui.QLabel(self)
|
self.slidePreview = QtGui.QLabel(self)
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
|
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
||||||
QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
sizePolicy.setVerticalStretch(0)
|
||||||
sizePolicy.setHeightForWidth(
|
sizePolicy.setHeightForWidth(
|
||||||
|
@ -385,20 +342,16 @@ class SlideController(DisplayController):
|
||||||
self.shortcutTimer, QtCore.SIGNAL(u'timeout()'),
|
self.shortcutTimer, QtCore.SIGNAL(u'timeout()'),
|
||||||
self._slideShortcutActivated)
|
self._slideShortcutActivated)
|
||||||
# Signals
|
# Signals
|
||||||
QtCore.QObject.connect(self.previewListWidget,
|
QtCore.QObject.connect(self.previewListWidget, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
|
||||||
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
|
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_live_spin_delay'),
|
QtCore.SIGNAL(u'slidecontroller_live_spin_delay'), self.receiveSpinDelay)
|
||||||
self.receiveSpinDelay)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_toggle_display'),
|
QtCore.SIGNAL(u'slidecontroller_toggle_display'), self.toggleDisplay)
|
||||||
self.toggleDisplay)
|
|
||||||
self.toolbar.setWidgetVisible(self.loopList, False)
|
self.toolbar.setWidgetVisible(self.loopList, False)
|
||||||
else:
|
else:
|
||||||
QtCore.QObject.connect(self.previewListWidget,
|
QtCore.QObject.connect(self.previewListWidget,
|
||||||
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'),
|
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onGoLiveClick)
|
||||||
self.onGoLiveClick)
|
|
||||||
self.toolbar.setWidgetVisible([u'editSong'], False)
|
self.toolbar.setWidgetVisible([u'editSong'], False)
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
self.setLiveHotkeys(self)
|
self.setLiveHotkeys(self)
|
||||||
|
@ -407,29 +360,21 @@ class SlideController(DisplayController):
|
||||||
self.previewListWidget.addActions(
|
self.previewListWidget.addActions(
|
||||||
[self.nextItem, self.previousItem])
|
[self.nextItem, self.previousItem])
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix),
|
QtCore.SIGNAL(u'slidecontroller_%s_stop_loop' % self.typePrefix), self.onStopLoop)
|
||||||
self.onStopLoop)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_%s_next' % self.typePrefix),
|
QtCore.SIGNAL(u'slidecontroller_%s_next' % self.typePrefix), self.onSlideSelectedNext)
|
||||||
self.onSlideSelectedNext)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.typePrefix),
|
QtCore.SIGNAL(u'slidecontroller_%s_previous' % self.typePrefix), self.onSlideSelectedPrevious)
|
||||||
self.onSlideSelectedPrevious)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_%s_change' % self.typePrefix),
|
QtCore.SIGNAL(u'slidecontroller_%s_change' % self.typePrefix), self.onSlideChange)
|
||||||
self.onSlideChange)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_%s_set' % self.typePrefix),
|
QtCore.SIGNAL(u'slidecontroller_%s_set' % self.typePrefix), self.onSlideSelectedIndex)
|
||||||
self.onSlideSelectedIndex)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_%s_blank' % self.typePrefix),
|
QtCore.SIGNAL(u'slidecontroller_%s_blank' % self.typePrefix), self.onSlideBlank)
|
||||||
self.onSlideBlank)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_%s_unblank' % self.typePrefix),
|
QtCore.SIGNAL(u'slidecontroller_%s_unblank' % self.typePrefix), self.onSlideUnblank)
|
||||||
self.onSlideUnblank)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'slidecontroller_update_slide_limits'),
|
QtCore.SIGNAL(u'slidecontroller_update_slide_limits'), self.updateSlideLimits)
|
||||||
self.updateSlideLimits)
|
|
||||||
|
|
||||||
def _slideShortcutActivated(self):
|
def _slideShortcutActivated(self):
|
||||||
"""
|
"""
|
||||||
|
@ -448,30 +393,22 @@ class SlideController(DisplayController):
|
||||||
except ImportError:
|
except ImportError:
|
||||||
SONGS_PLUGIN_AVAILABLE = False
|
SONGS_PLUGIN_AVAILABLE = False
|
||||||
sender_name = unicode(self.sender().objectName())
|
sender_name = unicode(self.sender().objectName())
|
||||||
verse_type = sender_name[15:] \
|
verse_type = sender_name[15:] if sender_name[:15] == u'shortcutAction_' else u''
|
||||||
if sender_name[:15] == u'shortcutAction_' else u''
|
|
||||||
if SONGS_PLUGIN_AVAILABLE:
|
if SONGS_PLUGIN_AVAILABLE:
|
||||||
if verse_type == u'V':
|
if verse_type == u'V':
|
||||||
self.current_shortcut = \
|
self.current_shortcut = VerseType.TranslatedTags[VerseType.Verse]
|
||||||
VerseType.TranslatedTags[VerseType.Verse]
|
|
||||||
elif verse_type == u'C':
|
elif verse_type == u'C':
|
||||||
self.current_shortcut = \
|
self.current_shortcut = VerseType.TranslatedTags[VerseType.Chorus]
|
||||||
VerseType.TranslatedTags[VerseType.Chorus]
|
|
||||||
elif verse_type == u'B':
|
elif verse_type == u'B':
|
||||||
self.current_shortcut = \
|
self.current_shortcut = VerseType.TranslatedTags[VerseType.Bridge]
|
||||||
VerseType.TranslatedTags[VerseType.Bridge]
|
|
||||||
elif verse_type == u'P':
|
elif verse_type == u'P':
|
||||||
self.current_shortcut = \
|
self.current_shortcut = VerseType.TranslatedTags[VerseType.PreChorus]
|
||||||
VerseType.TranslatedTags[VerseType.PreChorus]
|
|
||||||
elif verse_type == u'I':
|
elif verse_type == u'I':
|
||||||
self.current_shortcut = \
|
self.current_shortcut = VerseType.TranslatedTags[VerseType.Intro]
|
||||||
VerseType.TranslatedTags[VerseType.Intro]
|
|
||||||
elif verse_type == u'E':
|
elif verse_type == u'E':
|
||||||
self.current_shortcut = \
|
self.current_shortcut = VerseType.TranslatedTags[VerseType.Ending]
|
||||||
VerseType.TranslatedTags[VerseType.Ending]
|
|
||||||
elif verse_type == u'O':
|
elif verse_type == u'O':
|
||||||
self.current_shortcut = \
|
self.current_shortcut = VerseType.TranslatedTags[VerseType.Other]
|
||||||
VerseType.TranslatedTags[VerseType.Other]
|
|
||||||
elif verse_type.isnumeric():
|
elif verse_type.isnumeric():
|
||||||
self.current_shortcut += verse_type
|
self.current_shortcut += verse_type
|
||||||
self.current_shortcut = self.current_shortcut.upper()
|
self.current_shortcut = self.current_shortcut.upper()
|
||||||
|
@ -495,8 +432,7 @@ class SlideController(DisplayController):
|
||||||
if self.current_shortcut in keys:
|
if self.current_shortcut in keys:
|
||||||
# We had more than one match for example "V1" and "V10", but
|
# We had more than one match for example "V1" and "V10", but
|
||||||
# "V1" was the slide we wanted to go.
|
# "V1" was the slide we wanted to go.
|
||||||
self.__checkUpdateSelectedSlide(
|
self.__checkUpdateSelectedSlide(self.slideList[self.current_shortcut])
|
||||||
self.slideList[self.current_shortcut])
|
|
||||||
self.slideSelected()
|
self.slideSelected()
|
||||||
# Reset the shortcut.
|
# Reset the shortcut.
|
||||||
self.current_shortcut = u''
|
self.current_shortcut = u''
|
||||||
|
@ -504,19 +440,16 @@ class SlideController(DisplayController):
|
||||||
def setLiveHotkeys(self, parent=None):
|
def setLiveHotkeys(self, parent=None):
|
||||||
self.previousService = create_action(parent, u'previousService',
|
self.previousService = create_action(parent, u'previousService',
|
||||||
text=translate('OpenLP.SlideController', 'Previous Service'),
|
text=translate('OpenLP.SlideController', 'Previous Service'),
|
||||||
shortcuts=[QtCore.Qt.Key_Left],
|
shortcuts=[QtCore.Qt.Key_Left], context=QtCore.Qt.WidgetWithChildrenShortcut, category=self.category,
|
||||||
context=QtCore.Qt.WidgetWithChildrenShortcut,
|
triggers=self.servicePrevious)
|
||||||
category=self.category, triggers=self.servicePrevious)
|
|
||||||
self.nextService = create_action(parent, 'nextService',
|
self.nextService = create_action(parent, 'nextService',
|
||||||
text=translate('OpenLP.SlideController', 'Next Service'),
|
text=translate('OpenLP.SlideController', 'Next Service'),
|
||||||
shortcuts=[QtCore.Qt.Key_Right],
|
shortcuts=[QtCore.Qt.Key_Right], context=QtCore.Qt.WidgetWithChildrenShortcut, category=self.category,
|
||||||
context=QtCore.Qt.WidgetWithChildrenShortcut,
|
triggers=self.serviceNext)
|
||||||
category=self.category, triggers=self.serviceNext)
|
|
||||||
self.escapeItem = create_action(parent, 'escapeItem',
|
self.escapeItem = create_action(parent, 'escapeItem',
|
||||||
text=translate('OpenLP.SlideController', 'Escape Item'),
|
text=translate('OpenLP.SlideController', 'Escape Item'),
|
||||||
shortcuts=[QtCore.Qt.Key_Escape],
|
shortcuts=[QtCore.Qt.Key_Escape],context=QtCore.Qt.WidgetWithChildrenShortcut, category=self.category,
|
||||||
context=QtCore.Qt.WidgetWithChildrenShortcut,
|
triggers=self.liveEscape)
|
||||||
category=self.category, triggers=self.liveEscape)
|
|
||||||
|
|
||||||
def liveEscape(self):
|
def liveEscape(self):
|
||||||
self.display.setVisible(False)
|
self.display.setVisible(False)
|
||||||
|
@ -564,8 +497,7 @@ class SlideController(DisplayController):
|
||||||
Receiver.send_message('servicemanager_previous_item')
|
Receiver.send_message('servicemanager_previous_item')
|
||||||
elif keypressCommand == ServiceItemAction.PreviousLastSlide:
|
elif keypressCommand == ServiceItemAction.PreviousLastSlide:
|
||||||
# Go to the last slide of the previous item
|
# Go to the last slide of the previous item
|
||||||
Receiver.send_message('servicemanager_previous_item',
|
Receiver.send_message('servicemanager_previous_item', u'last slide')
|
||||||
u'last slide')
|
|
||||||
else:
|
else:
|
||||||
Receiver.send_message('servicemanager_next_item')
|
Receiver.send_message('servicemanager_next_item')
|
||||||
self.keypress_loop = False
|
self.keypress_loop = False
|
||||||
|
@ -582,20 +514,17 @@ class SlideController(DisplayController):
|
||||||
self.display.setup()
|
self.display.setup()
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
self.__addActionsToWidget(self.display)
|
self.__addActionsToWidget(self.display)
|
||||||
self.display.audioPlayer.connectSlot(
|
self.display.audioPlayer.connectSlot(QtCore.SIGNAL(u'tick(qint64)'), self.onAudioTimeRemaining)
|
||||||
QtCore.SIGNAL(u'tick(qint64)'), self.onAudioTimeRemaining)
|
|
||||||
# The SlidePreview's ratio.
|
# The SlidePreview's ratio.
|
||||||
try:
|
try:
|
||||||
self.ratio = float(self.screens.current[u'size'].width()) / \
|
self.ratio = float(self.screens.current[u'size'].width()) / float(self.screens.current[u'size'].height())
|
||||||
float(self.screens.current[u'size'].height())
|
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError:
|
||||||
self.ratio = 1
|
self.ratio = 1
|
||||||
self.mediaController.setup_display(self.display, False)
|
self.mediaController.setup_display(self.display, False)
|
||||||
self.previewSizeChanged()
|
self.previewSizeChanged()
|
||||||
self.previewDisplay.setup()
|
self.previewDisplay.setup()
|
||||||
serviceItem = ServiceItem()
|
serviceItem = ServiceItem()
|
||||||
self.previewDisplay.webView.setHtml(build_html(serviceItem,
|
self.previewDisplay.webView.setHtml(build_html(serviceItem, self.previewDisplay.screen, None, self.isLive,
|
||||||
self.previewDisplay.screen, None, self.isLive,
|
|
||||||
plugins=PluginManager.get_instance().plugins))
|
plugins=PluginManager.get_instance().plugins))
|
||||||
self.mediaController.setup_display(self.previewDisplay,True)
|
self.mediaController.setup_display(self.previewDisplay,True)
|
||||||
if self.serviceItem:
|
if self.serviceItem:
|
||||||
|
@ -613,23 +542,18 @@ class SlideController(DisplayController):
|
||||||
splitters is moved or when the screen size is changed. Note, that this
|
splitters is moved or when the screen size is changed. Note, that this
|
||||||
method is (also) called frequently from the mainwindow *paintEvent*.
|
method is (also) called frequently from the mainwindow *paintEvent*.
|
||||||
"""
|
"""
|
||||||
if self.ratio < float(self.previewFrame.width()) / float(
|
if self.ratio < float(self.previewFrame.width()) / float(self.previewFrame.height()):
|
||||||
self.previewFrame.height()):
|
|
||||||
# We have to take the height as limit.
|
# We have to take the height as limit.
|
||||||
max_height = self.previewFrame.height() - self.grid.margin() * 2
|
max_height = self.previewFrame.height() - self.grid.margin() * 2
|
||||||
self.slidePreview.setFixedSize(QtCore.QSize(
|
self.slidePreview.setFixedSize(QtCore.QSize(max_height * self.ratio, max_height))
|
||||||
max_height * self.ratio, max_height))
|
self.previewDisplay.setFixedSize(QtCore.QSize(max_height * self.ratio, max_height))
|
||||||
self.previewDisplay.setFixedSize(QtCore.QSize(
|
|
||||||
max_height * self.ratio, max_height))
|
|
||||||
self.previewDisplay.screen = {
|
self.previewDisplay.screen = {
|
||||||
u'size': self.previewDisplay.geometry()}
|
u'size': self.previewDisplay.geometry()}
|
||||||
else:
|
else:
|
||||||
# We have to take the width as limit.
|
# We have to take the width as limit.
|
||||||
max_width = self.previewFrame.width() - self.grid.margin() * 2
|
max_width = self.previewFrame.width() - self.grid.margin() * 2
|
||||||
self.slidePreview.setFixedSize(QtCore.QSize(max_width,
|
self.slidePreview.setFixedSize(QtCore.QSize(max_width, max_width / self.ratio))
|
||||||
max_width / self.ratio))
|
self.previewDisplay.setFixedSize(QtCore.QSize(max_width, max_width / self.ratio))
|
||||||
self.previewDisplay.setFixedSize(QtCore.QSize(max_width,
|
|
||||||
max_width / self.ratio))
|
|
||||||
self.previewDisplay.screen = {
|
self.previewDisplay.screen = {
|
||||||
u'size': self.previewDisplay.geometry()}
|
u'size': self.previewDisplay.geometry()}
|
||||||
# Make sure that the frames have the correct size.
|
# Make sure that the frames have the correct size.
|
||||||
|
@ -643,8 +567,7 @@ class SlideController(DisplayController):
|
||||||
# Sort out image heights.
|
# Sort out image heights.
|
||||||
width = self.parent().controlSplitter.sizes()[self.split]
|
width = self.parent().controlSplitter.sizes()[self.split]
|
||||||
for framenumber in range(len(self.serviceItem.get_frames())):
|
for framenumber in range(len(self.serviceItem.get_frames())):
|
||||||
self.previewListWidget.setRowHeight(
|
self.previewListWidget.setRowHeight(framenumber, width / self.ratio)
|
||||||
framenumber, width / self.ratio)
|
|
||||||
|
|
||||||
def onSongBarHandler(self):
|
def onSongBarHandler(self):
|
||||||
request = unicode(self.sender().text())
|
request = unicode(self.sender().text())
|
||||||
|
@ -662,8 +585,7 @@ class SlideController(DisplayController):
|
||||||
"""
|
"""
|
||||||
Updates the Slide Limits variable from the settings.
|
Updates the Slide Limits variable from the settings.
|
||||||
"""
|
"""
|
||||||
self.slide_limits = Settings().value(
|
self.slide_limits = Settings().value(self.parent().advancedSettingsSection + u'/slide limits',
|
||||||
self.parent().advancedSettingsSection + u'/slide limits',
|
|
||||||
QtCore.QVariant(SlideLimits.End)).toInt()[0]
|
QtCore.QVariant(SlideLimits.End)).toInt()[0]
|
||||||
|
|
||||||
def enableToolBar(self, item):
|
def enableToolBar(self, item):
|
||||||
|
@ -692,12 +614,10 @@ class SlideController(DisplayController):
|
||||||
self.playSlidesLoop.setChecked(False)
|
self.playSlidesLoop.setChecked(False)
|
||||||
self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png'))
|
self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png'))
|
||||||
if item.is_text():
|
if item.is_text():
|
||||||
if Settings().value(
|
if Settings().value(self.parent().songsSettingsSection + u'/display songbar',
|
||||||
self.parent().songsSettingsSection + u'/display songbar',
|
QtCore.QVariant(True)).toBool() and self.slideList:
|
||||||
QtCore.QVariant(True)).toBool() and self.slideList:
|
|
||||||
self.songMenu.show()
|
self.songMenu.show()
|
||||||
if item.is_capable(ItemCapabilities.CanLoop) and \
|
if item.is_capable(ItemCapabilities.CanLoop) and len(item.get_frames()) > 1:
|
||||||
len(item.get_frames()) > 1:
|
|
||||||
self.toolbar.setWidgetVisible(self.loopList)
|
self.toolbar.setWidgetVisible(self.loopList)
|
||||||
if item.is_media():
|
if item.is_media():
|
||||||
self.mediabar.show()
|
self.mediabar.show()
|
||||||
|
@ -785,8 +705,7 @@ class SlideController(DisplayController):
|
||||||
old_item = self.serviceItem
|
old_item = self.serviceItem
|
||||||
# take a copy not a link to the servicemanager copy.
|
# take a copy not a link to the servicemanager copy.
|
||||||
self.serviceItem = copy.copy(serviceItem)
|
self.serviceItem = copy.copy(serviceItem)
|
||||||
if old_item and self.isLive and old_item.is_capable(
|
if old_item and self.isLive and old_item.is_capable(ItemCapabilities.ProvidesOwnDisplay):
|
||||||
ItemCapabilities.ProvidesOwnDisplay):
|
|
||||||
self._resetBlank()
|
self._resetBlank()
|
||||||
Receiver.send_message(u'%s_start' % serviceItem.name.lower(),
|
Receiver.send_message(u'%s_start' % serviceItem.name.lower(),
|
||||||
[serviceItem, self.isLive, self.hideMode(), slideno])
|
[serviceItem, self.isLive, self.hideMode(), slideno])
|
||||||
|
@ -803,24 +722,16 @@ class SlideController(DisplayController):
|
||||||
# If the current item has background audio
|
# If the current item has background audio
|
||||||
if self.serviceItem.is_capable(ItemCapabilities.HasBackgroundAudio):
|
if self.serviceItem.is_capable(ItemCapabilities.HasBackgroundAudio):
|
||||||
log.debug(u'Starting to play...')
|
log.debug(u'Starting to play...')
|
||||||
self.display.audioPlayer.addToPlaylist(
|
self.display.audioPlayer.addToPlaylist(self.serviceItem.background_audio)
|
||||||
self.serviceItem.background_audio)
|
|
||||||
self.trackMenu.clear()
|
self.trackMenu.clear()
|
||||||
for counter in range(len(self.serviceItem.background_audio)):
|
for counter in range(len(self.serviceItem.background_audio)):
|
||||||
action = self.trackMenu.addAction(os.path.basename(
|
action = self.trackMenu.addAction(os.path.basename(self.serviceItem.background_audio[counter]))
|
||||||
self.serviceItem.background_audio[counter]))
|
|
||||||
action.setData(counter)
|
action.setData(counter)
|
||||||
QtCore.QObject.connect(action,
|
QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), self.onTrackTriggered)
|
||||||
QtCore.SIGNAL(u'triggered(bool)'),
|
|
||||||
self.onTrackTriggered)
|
|
||||||
self.display.audioPlayer.repeat = Settings().value(
|
self.display.audioPlayer.repeat = Settings().value(
|
||||||
self.parent().generalSettingsSection + \
|
self.parent().generalSettingsSection + u'/audio repeat list', QtCore.QVariant(False)).toBool()
|
||||||
u'/audio repeat list',
|
|
||||||
QtCore.QVariant(False)).toBool()
|
|
||||||
if Settings().value(
|
if Settings().value(
|
||||||
self.parent().generalSettingsSection + \
|
self.parent().generalSettingsSection + u'/audio start paused', QtCore.QVariant(True)).toBool():
|
||||||
u'/audio start paused',
|
|
||||||
QtCore.QVariant(True)).toBool():
|
|
||||||
self.audioPauseItem.setChecked(True)
|
self.audioPauseItem.setChecked(True)
|
||||||
self.display.audioPlayer.pause()
|
self.display.audioPlayer.pause()
|
||||||
else:
|
else:
|
||||||
|
@ -829,8 +740,7 @@ class SlideController(DisplayController):
|
||||||
row = 0
|
row = 0
|
||||||
text = []
|
text = []
|
||||||
for framenumber, frame in enumerate(self.serviceItem.get_frames()):
|
for framenumber, frame in enumerate(self.serviceItem.get_frames()):
|
||||||
self.previewListWidget.setRowCount(
|
self.previewListWidget.setRowCount(self.previewListWidget.rowCount() + 1)
|
||||||
self.previewListWidget.rowCount() + 1)
|
|
||||||
item = QtGui.QTableWidgetItem()
|
item = QtGui.QTableWidgetItem()
|
||||||
slideHeight = 0
|
slideHeight = 0
|
||||||
if self.serviceItem.is_text():
|
if self.serviceItem.is_text():
|
||||||
|
@ -853,8 +763,7 @@ class SlideController(DisplayController):
|
||||||
label = QtGui.QLabel()
|
label = QtGui.QLabel()
|
||||||
label.setMargin(4)
|
label.setMargin(4)
|
||||||
if serviceItem.is_media():
|
if serviceItem.is_media():
|
||||||
label.setAlignment(QtCore.Qt.AlignHCenter |
|
label.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
|
||||||
QtCore.Qt.AlignVCenter)
|
|
||||||
else:
|
else:
|
||||||
label.setScaledContents(True)
|
label.setScaledContents(True)
|
||||||
if self.serviceItem.is_command():
|
if self.serviceItem.is_command():
|
||||||
|
@ -862,11 +771,9 @@ class SlideController(DisplayController):
|
||||||
else:
|
else:
|
||||||
# If current slide set background to image
|
# If current slide set background to image
|
||||||
if framenumber == slideno:
|
if framenumber == slideno:
|
||||||
self.serviceItem.bg_image_bytes = \
|
self.serviceItem.bg_image_bytes = self.imageManager.getImageBytes(frame[u'path'],
|
||||||
self.imageManager.getImageBytes(frame[u'path'],
|
|
||||||
ImageSource.ImagePlugin)
|
ImageSource.ImagePlugin)
|
||||||
image = self.imageManager.getImage(frame[u'path'],
|
image = self.imageManager.getImage(frame[u'path'], ImageSource.ImagePlugin)
|
||||||
ImageSource.ImagePlugin)
|
|
||||||
label.setPixmap(QtGui.QPixmap.fromImage(image))
|
label.setPixmap(QtGui.QPixmap.fromImage(image))
|
||||||
self.previewListWidget.setCellWidget(framenumber, 0, label)
|
self.previewListWidget.setCellWidget(framenumber, 0, label)
|
||||||
slideHeight = width * (1 / self.ratio)
|
slideHeight = width * (1 / self.ratio)
|
||||||
|
@ -898,12 +805,10 @@ class SlideController(DisplayController):
|
||||||
# However opening a new item of the same type will automatically
|
# However opening a new item of the same type will automatically
|
||||||
# close the previous, so make sure we don't close the new one.
|
# close the previous, so make sure we don't close the new one.
|
||||||
if old_item.is_command() and not serviceItem.is_command():
|
if old_item.is_command() and not serviceItem.is_command():
|
||||||
Receiver.send_message(u'%s_stop' %
|
Receiver.send_message(u'%s_stop' % old_item.name.lower(), [old_item, self.isLive])
|
||||||
old_item.name.lower(), [old_item, self.isLive])
|
|
||||||
if old_item.is_media() and not serviceItem.is_media():
|
if old_item.is_media() and not serviceItem.is_media():
|
||||||
self.onMediaClose()
|
self.onMediaClose()
|
||||||
Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix,
|
Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix, [serviceItem])
|
||||||
[serviceItem])
|
|
||||||
|
|
||||||
def __updatePreviewSelection(self, slideno):
|
def __updatePreviewSelection(self, slideno):
|
||||||
"""
|
"""
|
||||||
|
@ -924,8 +829,7 @@ class SlideController(DisplayController):
|
||||||
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_slide' % self.serviceItem.name.lower(),
|
Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive, index])
|
||||||
[self.serviceItem, self.isLive, index])
|
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
else:
|
else:
|
||||||
self.__checkUpdateSelectedSlide(index)
|
self.__checkUpdateSelectedSlide(index)
|
||||||
|
@ -936,11 +840,9 @@ 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(u'mainDisplaySetBackground live = %s' % self.isLive)
|
log.debug(u'mainDisplaySetBackground live = %s' % self.isLive)
|
||||||
display_type = Settings().value(
|
display_type = Settings().value(self.parent().generalSettingsSection + u'/screen blank',
|
||||||
self.parent().generalSettingsSection + u'/screen blank',
|
|
||||||
QtCore.QVariant(u'')).toString()
|
QtCore.QVariant(u'')).toString()
|
||||||
if self.screens.which_screen(self.window()) != \
|
if self.screens.which_screen(self.window()) != self.screens.which_screen(self.display):
|
||||||
self.screens.which_screen(self.display):
|
|
||||||
# Order done to handle initial conversion
|
# Order done to handle initial conversion
|
||||||
if display_type == u'themed':
|
if display_type == u'themed':
|
||||||
self.onThemeDisplay(True)
|
self.onThemeDisplay(True)
|
||||||
|
@ -977,12 +879,9 @@ class SlideController(DisplayController):
|
||||||
self.themeScreen.setChecked(False)
|
self.themeScreen.setChecked(False)
|
||||||
self.desktopScreen.setChecked(False)
|
self.desktopScreen.setChecked(False)
|
||||||
if checked:
|
if checked:
|
||||||
Settings().setValue(
|
Settings().setValue(self.parent().generalSettingsSection + u'/screen blank', QtCore.QVariant(u'blanked'))
|
||||||
self.parent().generalSettingsSection + u'/screen blank',
|
|
||||||
QtCore.QVariant(u'blanked'))
|
|
||||||
else:
|
else:
|
||||||
Settings().remove(
|
Settings().remove(self.parent().generalSettingsSection + u'/screen blank')
|
||||||
self.parent().generalSettingsSection + u'/screen blank')
|
|
||||||
self.blankPlugin()
|
self.blankPlugin()
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
|
|
||||||
|
@ -998,12 +897,9 @@ class SlideController(DisplayController):
|
||||||
self.themeScreen.setChecked(checked)
|
self.themeScreen.setChecked(checked)
|
||||||
self.desktopScreen.setChecked(False)
|
self.desktopScreen.setChecked(False)
|
||||||
if checked:
|
if checked:
|
||||||
Settings().setValue(
|
Settings().setValue(self.parent().generalSettingsSection + u'/screen blank', QtCore.QVariant(u'themed'))
|
||||||
self.parent().generalSettingsSection + u'/screen blank',
|
|
||||||
QtCore.QVariant(u'themed'))
|
|
||||||
else:
|
else:
|
||||||
Settings().remove(
|
Settings().remove(self.parent().generalSettingsSection + u'/screen blank')
|
||||||
self.parent().generalSettingsSection + u'/screen blank')
|
|
||||||
self.blankPlugin()
|
self.blankPlugin()
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
|
|
||||||
|
@ -1019,12 +915,9 @@ class SlideController(DisplayController):
|
||||||
self.themeScreen.setChecked(False)
|
self.themeScreen.setChecked(False)
|
||||||
self.desktopScreen.setChecked(checked)
|
self.desktopScreen.setChecked(checked)
|
||||||
if checked:
|
if checked:
|
||||||
Settings().setValue(
|
Settings().setValue(self.parent().generalSettingsSection + u'/screen blank', QtCore.QVariant(u'hidden'))
|
||||||
self.parent().generalSettingsSection + u'/screen blank',
|
|
||||||
QtCore.QVariant(u'hidden'))
|
|
||||||
else:
|
else:
|
||||||
Settings().remove(
|
Settings().remove(self.parent().generalSettingsSection + u'/screen blank')
|
||||||
self.parent().generalSettingsSection + u'/screen blank')
|
|
||||||
self.hidePlugin(checked)
|
self.hidePlugin(checked)
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
|
|
||||||
|
@ -1038,14 +931,12 @@ class SlideController(DisplayController):
|
||||||
if hide_mode:
|
if hide_mode:
|
||||||
if not self.serviceItem.is_command():
|
if not self.serviceItem.is_command():
|
||||||
Receiver.send_message(u'live_display_hide', hide_mode)
|
Receiver.send_message(u'live_display_hide', hide_mode)
|
||||||
Receiver.send_message(u'%s_blank'
|
Receiver.send_message(u'%s_blank' % self.serviceItem.name.lower(),
|
||||||
% self.serviceItem.name.lower(),
|
|
||||||
[self.serviceItem, self.isLive, hide_mode])
|
[self.serviceItem, self.isLive, hide_mode])
|
||||||
else:
|
else:
|
||||||
if not self.serviceItem.is_command():
|
if not self.serviceItem.is_command():
|
||||||
Receiver.send_message(u'live_display_show')
|
Receiver.send_message(u'live_display_show')
|
||||||
Receiver.send_message(u'%s_unblank'
|
Receiver.send_message(u'%s_unblank' % self.serviceItem.name.lower(),
|
||||||
% self.serviceItem.name.lower(),
|
|
||||||
[self.serviceItem, self.isLive])
|
[self.serviceItem, self.isLive])
|
||||||
else:
|
else:
|
||||||
if hide_mode:
|
if hide_mode:
|
||||||
|
@ -1061,14 +952,12 @@ class SlideController(DisplayController):
|
||||||
if self.serviceItem is not None:
|
if self.serviceItem is not None:
|
||||||
if hide:
|
if hide:
|
||||||
Receiver.send_message(u'live_display_hide', HideMode.Screen)
|
Receiver.send_message(u'live_display_hide', HideMode.Screen)
|
||||||
Receiver.send_message(u'%s_hide'
|
Receiver.send_message(u'%s_hide' % self.serviceItem.name.lower(),
|
||||||
% self.serviceItem.name.lower(),
|
|
||||||
[self.serviceItem, self.isLive])
|
[self.serviceItem, self.isLive])
|
||||||
else:
|
else:
|
||||||
if not self.serviceItem.is_command():
|
if not self.serviceItem.is_command():
|
||||||
Receiver.send_message(u'live_display_show')
|
Receiver.send_message(u'live_display_show')
|
||||||
Receiver.send_message(u'%s_unblank'
|
Receiver.send_message(u'%s_unblank' % self.serviceItem.name.lower(),
|
||||||
% self.serviceItem.name.lower(),
|
|
||||||
[self.serviceItem, self.isLive])
|
[self.serviceItem, self.isLive])
|
||||||
else:
|
else:
|
||||||
if hide:
|
if hide:
|
||||||
|
@ -1092,8 +981,7 @@ class SlideController(DisplayController):
|
||||||
if -1 < row < self.previewListWidget.rowCount():
|
if -1 < row < self.previewListWidget.rowCount():
|
||||||
if self.serviceItem.is_command():
|
if self.serviceItem.is_command():
|
||||||
if self.isLive and not start:
|
if self.isLive and not start:
|
||||||
Receiver.send_message(
|
Receiver.send_message(u'%s_slide' % self.serviceItem.name.lower(),
|
||||||
u'%s_slide' % self.serviceItem.name.lower(),
|
|
||||||
[self.serviceItem, self.isLive, row])
|
[self.serviceItem, self.isLive, row])
|
||||||
else:
|
else:
|
||||||
to_display = self.serviceItem.get_rendered_frame(row)
|
to_display = self.serviceItem.get_rendered_frame(row)
|
||||||
|
@ -1109,8 +997,7 @@ class SlideController(DisplayController):
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
self.selectedRow = row
|
self.selectedRow = row
|
||||||
self.__checkUpdateSelectedSlide(row)
|
self.__checkUpdateSelectedSlide(row)
|
||||||
Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix,
|
Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, row)
|
||||||
row)
|
|
||||||
|
|
||||||
def onSlideChange(self, row):
|
def onSlideChange(self, row):
|
||||||
"""
|
"""
|
||||||
|
@ -1118,8 +1005,7 @@ class SlideController(DisplayController):
|
||||||
"""
|
"""
|
||||||
self.__checkUpdateSelectedSlide(row)
|
self.__checkUpdateSelectedSlide(row)
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix,
|
Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, row)
|
||||||
row)
|
|
||||||
|
|
||||||
def updatePreview(self):
|
def updatePreview(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1128,7 +1014,7 @@ class SlideController(DisplayController):
|
||||||
"""
|
"""
|
||||||
log.debug(u'updatePreview %s ' % self.screens.current[u'primary'])
|
log.debug(u'updatePreview %s ' % self.screens.current[u'primary'])
|
||||||
if not self.screens.current[u'primary'] and self.serviceItem and \
|
if not self.screens.current[u'primary'] and self.serviceItem and \
|
||||||
self.serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay):
|
self.serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay):
|
||||||
# Grab now, but try again in a couple of seconds if slide change
|
# Grab now, but try again in a couple of seconds if slide change
|
||||||
# is slow
|
# is slow
|
||||||
QtCore.QTimer.singleShot(0.5, self.grabMainDisplay)
|
QtCore.QTimer.singleShot(0.5, self.grabMainDisplay)
|
||||||
|
@ -1142,8 +1028,7 @@ class SlideController(DisplayController):
|
||||||
"""
|
"""
|
||||||
winid = QtGui.QApplication.desktop().winId()
|
winid = QtGui.QApplication.desktop().winId()
|
||||||
rect = self.screens.current[u'size']
|
rect = self.screens.current[u'size']
|
||||||
winimg = QtGui.QPixmap.grabWindow(winid, rect.x(),
|
winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), rect.y(), rect.width(), rect.height())
|
||||||
rect.y(), rect.width(), rect.height())
|
|
||||||
self.slidePreview.setPixmap(winimg)
|
self.slidePreview.setPixmap(winimg)
|
||||||
|
|
||||||
def onSlideSelectedNextAction(self, checked):
|
def onSlideSelectedNextAction(self, checked):
|
||||||
|
@ -1159,8 +1044,7 @@ class SlideController(DisplayController):
|
||||||
"""
|
"""
|
||||||
if not self.serviceItem:
|
if not self.serviceItem:
|
||||||
return
|
return
|
||||||
Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(),
|
Receiver.send_message(u'%s_next' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive])
|
||||||
[self.serviceItem, self.isLive])
|
|
||||||
if self.serviceItem.is_command() and self.isLive:
|
if self.serviceItem.is_command() and self.isLive:
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
else:
|
else:
|
||||||
|
@ -1187,8 +1071,7 @@ class SlideController(DisplayController):
|
||||||
"""
|
"""
|
||||||
if not self.serviceItem:
|
if not self.serviceItem:
|
||||||
return
|
return
|
||||||
Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(),
|
Receiver.send_message(u'%s_previous' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive])
|
||||||
[self.serviceItem, self.isLive])
|
|
||||||
if self.serviceItem.is_command() and self.isLive:
|
if self.serviceItem.is_command() and self.isLive:
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
else:
|
else:
|
||||||
|
@ -1197,8 +1080,7 @@ class SlideController(DisplayController):
|
||||||
if self.slide_limits == SlideLimits.Wrap:
|
if self.slide_limits == SlideLimits.Wrap:
|
||||||
row = self.previewListWidget.rowCount() - 1
|
row = self.previewListWidget.rowCount() - 1
|
||||||
elif self.isLive and self.slide_limits == SlideLimits.Next:
|
elif self.isLive and self.slide_limits == SlideLimits.Next:
|
||||||
self.keypress_queue.append(
|
self.keypress_queue.append(ServiceItemAction.PreviousLastSlide)
|
||||||
ServiceItemAction.PreviousLastSlide)
|
|
||||||
self._process_queue()
|
self._process_queue()
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
@ -1208,8 +1090,7 @@ class SlideController(DisplayController):
|
||||||
|
|
||||||
def __checkUpdateSelectedSlide(self, row):
|
def __checkUpdateSelectedSlide(self, row):
|
||||||
if row + 1 < self.previewListWidget.rowCount():
|
if row + 1 < self.previewListWidget.rowCount():
|
||||||
self.previewListWidget.scrollToItem(
|
self.previewListWidget.scrollToItem(self.previewListWidget.item(row + 1, 0))
|
||||||
self.previewListWidget.item(row + 1, 0))
|
|
||||||
self.previewListWidget.selectRow(row)
|
self.previewListWidget.selectRow(row)
|
||||||
|
|
||||||
def onToggleLoop(self):
|
def onToggleLoop(self):
|
||||||
|
@ -1226,8 +1107,7 @@ class SlideController(DisplayController):
|
||||||
Start the timer loop running and store the timer id
|
Start the timer loop running and store the timer id
|
||||||
"""
|
"""
|
||||||
if self.previewListWidget.rowCount() > 1:
|
if self.previewListWidget.rowCount() > 1:
|
||||||
self.timer_id = self.startTimer(
|
self.timer_id = self.startTimer(int(self.delaySpinBox.value()) * 1000)
|
||||||
int(self.delaySpinBox.value()) * 1000)
|
|
||||||
|
|
||||||
def onStopLoop(self):
|
def onStopLoop(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1302,29 +1182,24 @@ class SlideController(DisplayController):
|
||||||
From the preview display requires the service Item to be editied
|
From the preview display requires the service Item to be editied
|
||||||
"""
|
"""
|
||||||
self.songEdit = True
|
self.songEdit = True
|
||||||
Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(),
|
Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(), u'P:%s' % self.serviceItem.edit_id)
|
||||||
u'P:%s' % self.serviceItem.edit_id)
|
|
||||||
|
|
||||||
def onPreviewAddToService(self):
|
def onPreviewAddToService(self):
|
||||||
"""
|
"""
|
||||||
From the preview display request the Item to be added to service
|
From the preview display request the Item to be added to service
|
||||||
"""
|
"""
|
||||||
if self.serviceItem:
|
if self.serviceItem:
|
||||||
self.parent().serviceManagerContents.addServiceItem(
|
self.parent().serviceManagerContents.addServiceItem(self.serviceItem)
|
||||||
self.serviceItem)
|
|
||||||
|
|
||||||
def onGoLiveClick(self):
|
def onGoLiveClick(self):
|
||||||
"""
|
"""
|
||||||
triggered by clicking the Preview slide items
|
triggered by clicking the Preview slide items
|
||||||
"""
|
"""
|
||||||
if Settings().value(u'advanced/double click live',
|
if Settings().value(u'advanced/double click live', QtCore.QVariant(False)).toBool():
|
||||||
QtCore.QVariant(False)).toBool():
|
|
||||||
# Live and Preview have issues if we have video or presentations
|
# Live and Preview have issues if we have video or presentations
|
||||||
# playing in both at the same time.
|
# playing in both at the same time.
|
||||||
if self.serviceItem.is_command():
|
if self.serviceItem.is_command():
|
||||||
Receiver.send_message(u'%s_stop' %
|
Receiver.send_message(u'%s_stop' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive])
|
||||||
self.serviceItem.name.lower(),
|
|
||||||
[self.serviceItem, self.isLive])
|
|
||||||
if self.serviceItem.is_media():
|
if self.serviceItem.is_media():
|
||||||
self.onMediaClose()
|
self.onMediaClose()
|
||||||
self.onGoLive()
|
self.onGoLive()
|
||||||
|
@ -1336,11 +1211,9 @@ class SlideController(DisplayController):
|
||||||
row = self.previewListWidget.currentRow()
|
row = self.previewListWidget.currentRow()
|
||||||
if -1 < row < self.previewListWidget.rowCount():
|
if -1 < row < self.previewListWidget.rowCount():
|
||||||
if self.serviceItem.from_service:
|
if self.serviceItem.from_service:
|
||||||
Receiver.send_message('servicemanager_preview_live',
|
Receiver.send_message('servicemanager_preview_live', u'%s:%s' % (self.serviceItem._uuid, row))
|
||||||
u'%s:%s' % (self.serviceItem._uuid, row))
|
|
||||||
else:
|
else:
|
||||||
self.parent().liveController.addServiceManagerItem(
|
self.parent().liveController.addServiceManagerItem(self.serviceItem, row)
|
||||||
self.serviceItem, row)
|
|
||||||
|
|
||||||
def onMediaStart(self, item):
|
def onMediaStart(self, item):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -32,12 +32,10 @@ import os
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \
|
from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, SettingsManager, translate, \
|
||||||
SettingsManager, translate, check_item_selected, Receiver, MediaType, \
|
check_item_selected, Receiver, MediaType, ServiceItem, build_html, ServiceItemContext
|
||||||
ServiceItem, build_html, ServiceItemContext
|
|
||||||
from openlp.core.lib.settings import Settings
|
from openlp.core.lib.settings import Settings
|
||||||
from openlp.core.lib.ui import UiStrings, critical_error_message_box, \
|
from openlp.core.lib.ui import UiStrings, critical_error_message_box, create_horizontal_adjusting_combo_box
|
||||||
create_horizontal_adjusting_combo_box
|
|
||||||
from openlp.core.ui import DisplayController, Display, DisplayControllerType
|
from openlp.core.ui import DisplayController, Display, DisplayControllerType
|
||||||
from openlp.core.ui.media import get_media_players, set_media_players
|
from openlp.core.ui.media import get_media_players, set_media_players
|
||||||
from openlp.core.utils import locale_compare
|
from openlp.core.utils import locale_compare
|
||||||
|
@ -67,25 +65,17 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
self.displayController = DisplayController(parent)
|
self.displayController = DisplayController(parent)
|
||||||
self.displayController.controllerLayout = QtGui.QVBoxLayout()
|
self.displayController.controllerLayout = QtGui.QVBoxLayout()
|
||||||
self.plugin.mediaController.register_controller(self.displayController)
|
self.plugin.mediaController.register_controller(self.displayController)
|
||||||
self.plugin.mediaController.set_controls_visible(self.displayController,
|
self.plugin.mediaController.set_controls_visible(self.displayController, False)
|
||||||
False)
|
self.displayController.previewDisplay = Display(self.displayController, False, self.displayController)
|
||||||
self.displayController.previewDisplay = Display(self.displayController,
|
|
||||||
False, self.displayController)
|
|
||||||
self.displayController.previewDisplay.hide()
|
self.displayController.previewDisplay.hide()
|
||||||
self.displayController.previewDisplay.setGeometry(
|
self.displayController.previewDisplay.setGeometry(QtCore.QRect(0, 0, 300, 300))
|
||||||
QtCore.QRect(0, 0, 300, 300))
|
self.displayController.previewDisplay.screen = {u'size':self.displayController.previewDisplay.geometry()}
|
||||||
self.displayController.previewDisplay.screen = \
|
|
||||||
{u'size':self.displayController.previewDisplay.geometry()}
|
|
||||||
self.displayController.previewDisplay.setup()
|
self.displayController.previewDisplay.setup()
|
||||||
self.plugin.mediaController.setup_display(
|
self.plugin.mediaController.setup_display(self.displayController.previewDisplay, False)
|
||||||
self.displayController.previewDisplay, False)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'video_background_replaced'),
|
QtCore.SIGNAL(u'video_background_replaced'), self.videobackgroundReplaced)
|
||||||
self.videobackgroundReplaced)
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'mediaitem_media_rebuild'), self.rebuild_players)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'), self.displaySetup)
|
||||||
QtCore.SIGNAL(u'mediaitem_media_rebuild'), self.rebuild_players)
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
QtCore.SIGNAL(u'config_screen_changed'), self.displaySetup)
|
|
||||||
# Allow DnD from the desktop
|
# Allow DnD from the desktop
|
||||||
self.listView.activateDnD()
|
self.listView.activateDnD()
|
||||||
|
|
||||||
|
@ -96,8 +86,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
self.resetAction.setText(UiStrings().ResetBG)
|
self.resetAction.setText(UiStrings().ResetBG)
|
||||||
self.resetAction.setToolTip(UiStrings().ResetLiveBG)
|
self.resetAction.setToolTip(UiStrings().ResetLiveBG)
|
||||||
self.automatic = UiStrings().Automatic
|
self.automatic = UiStrings().Automatic
|
||||||
self.displayTypeLabel.setText(
|
self.displayTypeLabel.setText(translate('MediaPlugin.MediaItem', 'Use Player:'))
|
||||||
translate('MediaPlugin.MediaItem', 'Use Player:'))
|
|
||||||
self.rebuild_players()
|
self.rebuild_players()
|
||||||
|
|
||||||
def requiredIcons(self):
|
def requiredIcons(self):
|
||||||
|
@ -112,11 +101,10 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
|
|
||||||
def addEndHeaderBar(self):
|
def addEndHeaderBar(self):
|
||||||
# Replace backgrounds do not work at present so remove functionality.
|
# Replace backgrounds do not work at present so remove functionality.
|
||||||
self.replaceAction = self.toolbar.addToolbarAction(u'replaceAction',
|
self.replaceAction = self.toolbar.addToolbarAction(u'replaceAction', icon=u':/slides/slide_blank.png',
|
||||||
icon=u':/slides/slide_blank.png', triggers=self.onReplaceClick)
|
triggers=self.onReplaceClick)
|
||||||
self.resetAction = self.toolbar.addToolbarAction(u'resetAction',
|
self.resetAction = self.toolbar.addToolbarAction(u'resetAction', icon=u':/system/system_close.png',
|
||||||
icon=u':/system/system_close.png', visible=False,
|
visible=False, triggers=self.onResetClick)
|
||||||
triggers=self.onResetClick)
|
|
||||||
self.mediaWidget = QtGui.QWidget(self)
|
self.mediaWidget = QtGui.QWidget(self)
|
||||||
self.mediaWidget.setObjectName(u'mediaWidget')
|
self.mediaWidget.setObjectName(u'mediaWidget')
|
||||||
self.displayLayout = QtGui.QFormLayout(self.mediaWidget)
|
self.displayLayout = QtGui.QFormLayout(self.mediaWidget)
|
||||||
|
@ -124,15 +112,12 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
self.displayLayout.setObjectName(u'displayLayout')
|
self.displayLayout.setObjectName(u'displayLayout')
|
||||||
self.displayTypeLabel = QtGui.QLabel(self.mediaWidget)
|
self.displayTypeLabel = QtGui.QLabel(self.mediaWidget)
|
||||||
self.displayTypeLabel.setObjectName(u'displayTypeLabel')
|
self.displayTypeLabel.setObjectName(u'displayTypeLabel')
|
||||||
self.displayTypeComboBox = create_horizontal_adjusting_combo_box(
|
self.displayTypeComboBox = create_horizontal_adjusting_combo_box(self.mediaWidget, u'displayTypeComboBox')
|
||||||
self.mediaWidget, u'displayTypeComboBox')
|
|
||||||
self.displayTypeLabel.setBuddy(self.displayTypeComboBox)
|
self.displayTypeLabel.setBuddy(self.displayTypeComboBox)
|
||||||
self.displayLayout.addRow(self.displayTypeLabel,
|
self.displayLayout.addRow(self.displayTypeLabel, self.displayTypeComboBox)
|
||||||
self.displayTypeComboBox)
|
|
||||||
# Add the Media widget to the page layout
|
# Add the Media widget to the page layout
|
||||||
self.pageLayout.addWidget(self.mediaWidget)
|
self.pageLayout.addWidget(self.mediaWidget)
|
||||||
QtCore.QObject.connect(self.displayTypeComboBox,
|
QtCore.QObject.connect(self.displayTypeComboBox, QtCore.SIGNAL(u'currentIndexChanged (int)'),
|
||||||
QtCore.SIGNAL(u'currentIndexChanged (int)'),
|
|
||||||
self.overridePlayerChanged)
|
self.overridePlayerChanged)
|
||||||
|
|
||||||
def overridePlayerChanged(self, index):
|
def overridePlayerChanged(self, index):
|
||||||
|
@ -171,19 +156,16 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
service_item.shortname = service_item.title
|
service_item.shortname = service_item.title
|
||||||
(path, name) = os.path.split(filename)
|
(path, name) = os.path.split(filename)
|
||||||
service_item.add_from_command(path, name,CLAPPERBOARD)
|
service_item.add_from_command(path, name,CLAPPERBOARD)
|
||||||
if self.plugin.liveController.mediaController.video(
|
if self.plugin.liveController.mediaController.video(DisplayControllerType.Live, service_item,
|
||||||
DisplayControllerType.Live, service_item,
|
|
||||||
videoBehindText=True):
|
videoBehindText=True):
|
||||||
self.resetAction.setVisible(True)
|
self.resetAction.setVisible(True)
|
||||||
else:
|
else:
|
||||||
critical_error_message_box(UiStrings().LiveBGError,
|
critical_error_message_box(UiStrings().LiveBGError,
|
||||||
translate('MediaPlugin.MediaItem',
|
translate('MediaPlugin.MediaItem', 'There was no display item to amend.'))
|
||||||
'There was no display item to amend.'))
|
|
||||||
else:
|
else:
|
||||||
critical_error_message_box(UiStrings().LiveBGError,
|
critical_error_message_box(UiStrings().LiveBGError,
|
||||||
unicode(translate('MediaPlugin.MediaItem',
|
unicode(translate('MediaPlugin.MediaItem',
|
||||||
'There was a problem replacing your background, '
|
'There was a problem replacing your background, the media file "%s" no longer exists.')) % filename)
|
||||||
'the media file "%s" no longer exists.')) % filename)
|
|
||||||
|
|
||||||
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
||||||
remote=False, context=ServiceItemContext.Live):
|
remote=False, context=ServiceItemContext.Live):
|
||||||
|
@ -197,8 +179,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
# File is no longer present
|
# File is no longer present
|
||||||
critical_error_message_box(
|
critical_error_message_box(
|
||||||
translate('MediaPlugin.MediaItem', 'Missing Media File'),
|
translate('MediaPlugin.MediaItem', 'Missing Media File'),
|
||||||
unicode(translate('MediaPlugin.MediaItem',
|
unicode(translate('MediaPlugin.MediaItem', 'The file %s no longer exists.')) % filename)
|
||||||
'The file %s no longer exists.')) % filename)
|
|
||||||
return False
|
return False
|
||||||
service_item.title = unicode(self.displayTypeComboBox.currentText())
|
service_item.title = unicode(self.displayTypeComboBox.currentText())
|
||||||
service_item.shortname = service_item.title
|
service_item.shortname = service_item.title
|
||||||
|
@ -213,8 +194,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
service_item.add_capability(ItemCapabilities.RequiresMedia)
|
service_item.add_capability(ItemCapabilities.RequiresMedia)
|
||||||
service_item.add_capability(ItemCapabilities.HasDetailedTitleDisplay)
|
service_item.add_capability(ItemCapabilities.HasDetailedTitleDisplay)
|
||||||
if Settings().value(self.settingsSection + u'/media auto start',
|
if Settings().value(self.settingsSection + u'/media auto start',
|
||||||
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0]\
|
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0] == QtCore.Qt.Checked:
|
||||||
== QtCore.Qt.Checked:
|
|
||||||
service_item.will_auto_start = True
|
service_item.will_auto_start = True
|
||||||
# force a non-existent theme
|
# force a non-existent theme
|
||||||
service_item.theme = -1
|
service_item.theme = -1
|
||||||
|
@ -232,22 +212,19 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
the settings
|
the settings
|
||||||
"""
|
"""
|
||||||
self.populateDisplayTypes()
|
self.populateDisplayTypes()
|
||||||
self.onNewFileMasks = unicode(translate('MediaPlugin.MediaItem',
|
self.onNewFileMasks = unicode(translate('MediaPlugin.MediaItem', 'Videos (%s);;Audio (%s);;%s (*)')) % (
|
||||||
'Videos (%s);;Audio (%s);;%s (*)')) % (
|
|
||||||
u' '.join(self.plugin.mediaController.video_extensions_list),
|
u' '.join(self.plugin.mediaController.video_extensions_list),
|
||||||
u' '.join(self.plugin.mediaController.audio_extensions_list),
|
u' '.join(self.plugin.mediaController.audio_extensions_list), UiStrings().AllFiles)
|
||||||
UiStrings().AllFiles)
|
|
||||||
|
|
||||||
def displaySetup(self):
|
def displaySetup(self):
|
||||||
self.plugin.mediaController.setup_display(
|
self.plugin.mediaController.setup_display(self.displayController.previewDisplay, False)
|
||||||
self.displayController.previewDisplay, False)
|
|
||||||
|
|
||||||
def populateDisplayTypes(self):
|
def populateDisplayTypes(self):
|
||||||
"""
|
"""
|
||||||
Load the combobox with the enabled media players,
|
Load the combobox with the enabled media players,
|
||||||
allowing user to select a specific player if settings allow
|
allowing user to select a specific player if settings allow
|
||||||
"""
|
"""
|
||||||
# block signals to avoid unnecessary overridePlayerChanged Signales
|
# block signals to avoid unnecessary overridePlayerChanged Signals
|
||||||
# while combo box creation
|
# while combo box creation
|
||||||
self.displayTypeComboBox.blockSignals(True)
|
self.displayTypeComboBox.blockSignals(True)
|
||||||
self.displayTypeComboBox.clear()
|
self.displayTypeComboBox.clear()
|
||||||
|
@ -273,7 +250,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
Remove a media item from the list.
|
Remove a media item from the list.
|
||||||
"""
|
"""
|
||||||
if check_item_selected(self.listView, translate('MediaPlugin.MediaItem',
|
if check_item_selected(self.listView, translate('MediaPlugin.MediaItem',
|
||||||
'You must select a media file to delete.')):
|
'You must select a media file to delete.')):
|
||||||
row_list = [item.row() for item in self.listView.selectedIndexes()]
|
row_list = [item.row() for item in self.listView.selectedIndexes()]
|
||||||
row_list.sort(reverse=True)
|
row_list.sort(reverse=True)
|
||||||
for row in row_list:
|
for row in row_list:
|
||||||
|
@ -284,8 +261,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
def loadList(self, media):
|
def loadList(self, media):
|
||||||
# Sort the media by its filename considering language specific
|
# Sort the media by its filename considering language specific
|
||||||
# characters.
|
# characters.
|
||||||
media.sort(cmp=locale_compare,
|
media.sort(cmp=locale_compare, key=lambda filename: os.path.split(unicode(filename))[1])
|
||||||
key=lambda filename: os.path.split(unicode(filename))[1])
|
|
||||||
for track in media:
|
for track in media:
|
||||||
track_info = QtCore.QFileInfo(track)
|
track_info = QtCore.QFileInfo(track)
|
||||||
if not os.path.exists(track):
|
if not os.path.exists(track):
|
||||||
|
@ -296,8 +272,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
elif track_info.isFile():
|
elif track_info.isFile():
|
||||||
filename = os.path.split(unicode(track))[1]
|
filename = os.path.split(unicode(track))[1]
|
||||||
item_name = QtGui.QListWidgetItem(filename)
|
item_name = QtGui.QListWidgetItem(filename)
|
||||||
if u'*.%s' % (filename.split(u'.')[-1].lower()) in \
|
if u'*.%s' % (filename.split(u'.')[-1].lower()) in self.plugin.mediaController.audio_extensions_list:
|
||||||
self.plugin.mediaController.audio_extensions_list:
|
|
||||||
item_name.setIcon(AUDIO)
|
item_name.setIcon(AUDIO)
|
||||||
else:
|
else:
|
||||||
item_name.setIcon(VIDEO)
|
item_name.setIcon(VIDEO)
|
||||||
|
@ -312,8 +287,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||||
|
|
||||||
def getList(self, type=MediaType.Audio):
|
def getList(self, type=MediaType.Audio):
|
||||||
media = SettingsManager.load_list(self.settingsSection, u'media')
|
media = SettingsManager.load_list(self.settingsSection, u'media')
|
||||||
media.sort(cmp=locale_compare,
|
media.sort(cmp=locale_compare, key=lambda filename: os.path.split(unicode(filename))[1])
|
||||||
key=lambda filename: os.path.split(unicode(filename))[1])
|
|
||||||
ext = []
|
ext = []
|
||||||
if type == MediaType.Audio:
|
if type == MediaType.Audio:
|
||||||
ext = self.plugin.mediaController.audio_extensions_list
|
ext = self.plugin.mediaController.audio_extensions_list
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -69,34 +69,24 @@ class MediaTab(SettingsTab):
|
||||||
|
|
||||||
def retranslateUi(self):
|
def retranslateUi(self):
|
||||||
self.advancedGroupBox.setTitle(UiStrings().Advanced)
|
self.advancedGroupBox.setTitle(UiStrings().Advanced)
|
||||||
self.overridePlayerCheckBox.setText(
|
self.overridePlayerCheckBox.setText(translate('MediaPlugin.MediaTab', 'Allow media player to be overridden'))
|
||||||
translate('MediaPlugin.MediaTab',
|
self.autoStartCheckBox.setText(translate('MediaPlugin.MediaTab', 'Start Live items automatically'))
|
||||||
'Allow media player to be overridden'))
|
|
||||||
self.autoStartCheckBox.setText(
|
|
||||||
translate('MediaPlugin.MediaTab',
|
|
||||||
'Start Live items automatically'))
|
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
self.overridePlayerCheckBox.setChecked(Settings().value(
|
self.overridePlayerCheckBox.setChecked(Settings().value(self.settingsSection + u'/override player',
|
||||||
self.settingsSection + u'/override player',
|
|
||||||
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0])
|
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0])
|
||||||
self.autoStartCheckBox.setChecked(Settings().value(
|
self.autoStartCheckBox.setChecked(Settings().value(self.settingsSection + u'/media auto start',
|
||||||
self.settingsSection + u'/media auto start',
|
|
||||||
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0])
|
QtCore.QVariant(QtCore.Qt.Unchecked)).toInt()[0])
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
override_changed = False
|
override_changed = False
|
||||||
setting_key = self.settingsSection + u'/override player'
|
setting_key = self.settingsSection + u'/override player'
|
||||||
if Settings().value(setting_key).toInt()[0] != \
|
if Settings().value(setting_key).toInt()[0] != self.overridePlayerCheckBox.checkState():
|
||||||
self.overridePlayerCheckBox.checkState():
|
Settings().setValue(setting_key, QtCore.QVariant(self.overridePlayerCheckBox.checkState()))
|
||||||
Settings().setValue(setting_key,
|
|
||||||
QtCore.QVariant(self.overridePlayerCheckBox.checkState()))
|
|
||||||
override_changed = True
|
override_changed = True
|
||||||
setting_key = self.settingsSection + u'/media auto start'
|
setting_key = self.settingsSection + u'/media auto start'
|
||||||
if Settings().value(setting_key).toInt()[0] !=\
|
if Settings().value(setting_key).toInt()[0] != self.autoStartCheckBox.checkState():
|
||||||
self.autoStartCheckBox.checkState():
|
Settings().setValue(setting_key, QtCore.QVariant(self.autoStartCheckBox.checkState()))
|
||||||
Settings().setValue(setting_key,
|
|
||||||
QtCore.QVariant(self.autoStartCheckBox.checkState()))
|
|
||||||
if override_changed:
|
if override_changed:
|
||||||
self.parent.resetSupportedSuffixes()
|
self.parent.resetSupportedSuffixes()
|
||||||
Receiver.send_message(u'mediaitem_media_rebuild')
|
Receiver.send_message(u'mediaitem_media_rebuild')
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
@ -41,8 +41,7 @@ class MediaPlugin(Plugin):
|
||||||
log.info(u'%s MediaPlugin loaded', __name__)
|
log.info(u'%s MediaPlugin loaded', __name__)
|
||||||
|
|
||||||
def __init__(self, plugin_helpers):
|
def __init__(self, plugin_helpers):
|
||||||
Plugin.__init__(self, u'media', plugin_helpers,
|
Plugin.__init__(self, u'media', plugin_helpers, MediaMediaItem)
|
||||||
MediaMediaItem)
|
|
||||||
self.weight = -6
|
self.weight = -6
|
||||||
self.iconPath = u':/plugins/plugin_media.png'
|
self.iconPath = u':/plugins/plugin_media.png'
|
||||||
self.icon = build_icon(self.iconPath)
|
self.icon = build_icon(self.iconPath)
|
||||||
|
@ -54,8 +53,7 @@ class MediaPlugin(Plugin):
|
||||||
Create the settings Tab
|
Create the settings Tab
|
||||||
"""
|
"""
|
||||||
visible_name = self.getString(StringContent.VisibleName)
|
visible_name = self.getString(StringContent.VisibleName)
|
||||||
self.settingsTab = MediaTab(parent, self.name, visible_name[u'title'],
|
self.settingsTab = MediaTab(parent, self.name, visible_name[u'title'], self.iconPath)
|
||||||
self.iconPath)
|
|
||||||
|
|
||||||
def about(self):
|
def about(self):
|
||||||
about_text = translate('MediaPlugin', '<strong>Media Plugin</strong>'
|
about_text = translate('MediaPlugin', '<strong>Media Plugin</strong>'
|
||||||
|
@ -84,8 +82,7 @@ class MediaPlugin(Plugin):
|
||||||
u'delete': translate('MediaPlugin', 'Delete the selected media.'),
|
u'delete': translate('MediaPlugin', 'Delete the selected media.'),
|
||||||
u'preview': translate('MediaPlugin', 'Preview the selected media.'),
|
u'preview': translate('MediaPlugin', 'Preview the selected media.'),
|
||||||
u'live': translate('MediaPlugin', 'Send the selected media live.'),
|
u'live': translate('MediaPlugin', 'Send the selected media live.'),
|
||||||
u'service': translate('MediaPlugin',
|
u'service': translate('MediaPlugin', 'Add the selected media to the service.')
|
||||||
'Add the selected media to the service.')
|
|
||||||
}
|
}
|
||||||
self.setPluginUiTextStrings(tooltips)
|
self.setPluginUiTextStrings(tooltips)
|
||||||
|
|
||||||
|
@ -131,12 +128,10 @@ class MediaPlugin(Plugin):
|
||||||
log.debug(u'Converting old setting to new setting')
|
log.debug(u'Converting old setting to new setting')
|
||||||
new_players = []
|
new_players = []
|
||||||
if players:
|
if players:
|
||||||
new_players = [player for player in players \
|
new_players = [player for player in players if player != u'phonon']
|
||||||
if player != u'phonon']
|
|
||||||
new_players.insert(0, u'phonon')
|
new_players.insert(0, u'phonon')
|
||||||
self.mediaController.mediaPlayers[u'phonon'].isActive = True
|
self.mediaController.mediaPlayers[u'phonon'].isActive = True
|
||||||
settings.setValue(u'players', \
|
settings.setValue(u'players', QtCore.QVariant(u','.join(new_players)))
|
||||||
QtCore.QVariant(u','.join(new_players)))
|
|
||||||
self.settingsTab.load()
|
self.settingsTab.load()
|
||||||
settings.remove(u'use phonon')
|
settings.remove(u'use phonon')
|
||||||
settings.endGroup()
|
settings.endGroup()
|
||||||
|
|
Loading…
Reference in New Issue