forked from openlp/openlp
r2082 + conflicts + fix
This commit is contained in:
commit
cff3f252fd
@ -135,6 +135,9 @@ class Settings(QtCore.QSettings):
|
|||||||
return []
|
return []
|
||||||
# Convert the setting to the correct type.
|
# Convert the setting to the correct type.
|
||||||
if isinstance(defaultValue, bool):
|
if isinstance(defaultValue, bool):
|
||||||
|
if isinstance(setting, bool):
|
||||||
|
return setting
|
||||||
|
# Sometimes setting is string instead of a boolean.
|
||||||
return setting == u'true'
|
return setting == u'true'
|
||||||
if isinstance(defaultValue, int):
|
if isinstance(defaultValue, int):
|
||||||
return int(setting)
|
return int(setting)
|
||||||
|
@ -29,14 +29,15 @@
|
|||||||
The :mod:`advancedtab` provides an advanced settings facility.
|
The :mod:`advancedtab` provides an advanced settings facility.
|
||||||
"""
|
"""
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from openlp.core.lib import SettingsTab, translate, build_icon, Receiver, \
|
from openlp.core.lib import SettingsTab, translate, build_icon, Receiver, \
|
||||||
Settings
|
Settings
|
||||||
|
|
||||||
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.lib.ui import UiStrings
|
from openlp.core.lib.ui import UiStrings
|
||||||
from openlp.core.utils import get_images_filter, AppLocation, format_time
|
from openlp.core.utils import get_images_filter, AppLocation, format_time
|
||||||
from openlp.core.lib import SlideLimits
|
from openlp.core.lib import SlideLimits
|
||||||
@ -432,8 +433,7 @@ class AdvancedTab(SettingsTab):
|
|||||||
translate('OpenLP.AdvancedTab',
|
translate('OpenLP.AdvancedTab',
|
||||||
'<strong>WARNING:</strong> New data directory location contains '
|
'<strong>WARNING:</strong> New data directory location contains '
|
||||||
'OpenLP data files. These files WILL be replaced during a copy.'))
|
'OpenLP data files. These files WILL be replaced during a copy.'))
|
||||||
self.x11GroupBox.setTitle(translate('OpenLP.AdvancedTab',
|
self.x11GroupBox.setTitle(translate('OpenLP.AdvancedTab', 'X11'))
|
||||||
'X11'))
|
|
||||||
self.x11BypassCheckBox.setText(translate('OpenLP.AdvancedTab',
|
self.x11BypassCheckBox.setText(translate('OpenLP.AdvancedTab',
|
||||||
'Bypass X11 Window Manager'))
|
'Bypass X11 Window Manager'))
|
||||||
# Slide Limits
|
# Slide Limits
|
||||||
@ -483,8 +483,14 @@ class AdvancedTab(SettingsTab):
|
|||||||
u'default service enabled', True)
|
u'default service enabled', True)
|
||||||
self.serviceNameCheckBox.setChecked(default_service_enabled)
|
self.serviceNameCheckBox.setChecked(default_service_enabled)
|
||||||
self.serviceNameCheckBoxToggled(default_service_enabled)
|
self.serviceNameCheckBoxToggled(default_service_enabled)
|
||||||
|
# Fix for bug #1014422.
|
||||||
|
x11_bypass_default = True
|
||||||
|
if sys.platform.startswith(u'linux'):
|
||||||
|
# Default to False on Gnome.
|
||||||
|
x11_bypass_default = bool(not
|
||||||
|
os.environ.get(u'GNOME_DESKTOP_SESSION_ID'))
|
||||||
self.x11BypassCheckBox.setChecked(
|
self.x11BypassCheckBox.setChecked(
|
||||||
settings.value(u'x11 bypass wm', True))
|
settings.value(u'x11 bypass wm', x11_bypass_default))
|
||||||
self.defaultColor = settings.value(u'default color', u'#ffffff')
|
self.defaultColor = settings.value(u'default color', u'#ffffff')
|
||||||
self.defaultFileEdit.setText(settings.value(u'default image',
|
self.defaultFileEdit.setText(settings.value(u'default image',
|
||||||
u':/graphics/openlp-splash-screen.png'))
|
u':/graphics/openlp-splash-screen.png'))
|
||||||
|
@ -31,6 +31,7 @@ and play multimedia within OpenLP.
|
|||||||
"""
|
"""
|
||||||
import cgi
|
import cgi
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui, QtWebKit, QtOpenGL
|
from PyQt4 import QtCore, QtGui, QtWebKit, QtOpenGL
|
||||||
@ -134,7 +135,13 @@ class MainDisplay(Display):
|
|||||||
self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;')
|
self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;')
|
||||||
windowFlags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | \
|
windowFlags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | \
|
||||||
QtCore.Qt.WindowStaysOnTopHint
|
QtCore.Qt.WindowStaysOnTopHint
|
||||||
if Settings().value(u'advanced/x11 bypass wm', True):
|
# Fix for bug #1014422.
|
||||||
|
x11_bypass_default = True
|
||||||
|
if sys.platform.startswith(u'linux'):
|
||||||
|
# Default to False on Gnome.
|
||||||
|
x11_bypass_default = bool(not
|
||||||
|
os.environ.get(u'GNOME_DESKTOP_SESSION_ID'))
|
||||||
|
if Settings().value(u'advanced/x11 bypass wm', x11_bypass_default):
|
||||||
windowFlags |= QtCore.Qt.X11BypassWindowManagerHint
|
windowFlags |= QtCore.Qt.X11BypassWindowManagerHint
|
||||||
# TODO: The following combination of windowFlags works correctly
|
# TODO: The following combination of windowFlags works correctly
|
||||||
# on Mac OS X. For next OpenLP version we should test it on other
|
# on Mac OS X. For next OpenLP version we should test it on other
|
||||||
|
@ -48,7 +48,7 @@ import sys
|
|||||||
from inspect import getargspec
|
from inspect import getargspec
|
||||||
|
|
||||||
__version__ = "N/A"
|
__version__ = "N/A"
|
||||||
build_date = "Fri Sep 28 22:48:50 2012"
|
build_date = "Fri Oct 5 21:35:59 2012"
|
||||||
|
|
||||||
if sys.version_info[0] > 2:
|
if sys.version_info[0] > 2:
|
||||||
str = str
|
str = str
|
||||||
@ -680,6 +680,19 @@ class LogCb(ctypes.c_void_p):
|
|||||||
\note Log message handlers <b>must</b> be thread-safe.
|
\note Log message handlers <b>must</b> be thread-safe.
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
class VideoLockCb(ctypes.c_void_p):
|
||||||
|
"""Callback prototype to allocate and lock a picture buffer.
|
||||||
|
Whenever a new video frame needs to be decoded, the lock callback is
|
||||||
|
invoked. Depending on the video chroma, one or three pixel planes of
|
||||||
|
adequate dimensions must be returned via the second parameter. Those
|
||||||
|
planes must be aligned on 32-bytes boundaries.
|
||||||
|
\param opaque private pointer as passed to L{libvlc_video_set_callbacks}() [IN]
|
||||||
|
\param planes start address of the pixel planes (LibVLC allocates the array
|
||||||
|
of void pointers, this callback must initialize the array) [OUT]
|
||||||
|
\return a private pointer for the display and unlock callbacks to identify
|
||||||
|
the picture buffers
|
||||||
|
"""
|
||||||
|
pass
|
||||||
class VideoUnlockCb(ctypes.c_void_p):
|
class VideoUnlockCb(ctypes.c_void_p):
|
||||||
"""Callback prototype to unlock a picture buffer.
|
"""Callback prototype to unlock a picture buffer.
|
||||||
When the video frame decoding is complete, the unlock callback is invoked.
|
When the video frame decoding is complete, the unlock callback is invoked.
|
||||||
@ -687,7 +700,7 @@ This callback might not be needed at all. It is only an indication that the
|
|||||||
application can now read the pixel values if it needs to.
|
application can now read the pixel values if it needs to.
|
||||||
\warning A picture buffer is unlocked after the picture is decoded,
|
\warning A picture buffer is unlocked after the picture is decoded,
|
||||||
but before the picture is displayed.
|
but before the picture is displayed.
|
||||||
\param opaque private pointer as passed to libvlc_video_set_callbacks() [IN]
|
\param opaque private pointer as passed to L{libvlc_video_set_callbacks}() [IN]
|
||||||
\param picture private pointer returned from the @ref libvlc_video_lock_cb
|
\param picture private pointer returned from the @ref libvlc_video_lock_cb
|
||||||
callback [IN]
|
callback [IN]
|
||||||
\param planes pixel planes as defined by the @ref libvlc_video_lock_cb
|
\param planes pixel planes as defined by the @ref libvlc_video_lock_cb
|
||||||
@ -698,7 +711,7 @@ class VideoDisplayCb(ctypes.c_void_p):
|
|||||||
"""Callback prototype to display a picture.
|
"""Callback prototype to display a picture.
|
||||||
When the video frame needs to be shown, as determined by the media playback
|
When the video frame needs to be shown, as determined by the media playback
|
||||||
clock, the display callback is invoked.
|
clock, the display callback is invoked.
|
||||||
\param opaque private pointer as passed to libvlc_video_set_callbacks() [IN]
|
\param opaque private pointer as passed to L{libvlc_video_set_callbacks}() [IN]
|
||||||
\param picture private pointer returned from the @ref libvlc_video_lock_cb
|
\param picture private pointer returned from the @ref libvlc_video_lock_cb
|
||||||
callback [IN]
|
callback [IN]
|
||||||
"""
|
"""
|
||||||
@ -710,7 +723,7 @@ and the chain of video filters (if any). It can opt to change any parameter
|
|||||||
as it needs. In that case, LibVLC will attempt to convert the video format
|
as it needs. In that case, LibVLC will attempt to convert the video format
|
||||||
(rescaling and chroma conversion) but these operations can be CPU intensive.
|
(rescaling and chroma conversion) but these operations can be CPU intensive.
|
||||||
\param opaque pointer to the private pointer passed to
|
\param opaque pointer to the private pointer passed to
|
||||||
libvlc_video_set_callbacks() [IN/OUT]
|
L{libvlc_video_set_callbacks}() [IN/OUT]
|
||||||
\param chroma pointer to the 4 bytes video format identifier [IN/OUT]
|
\param chroma pointer to the 4 bytes video format identifier [IN/OUT]
|
||||||
\param width pointer to the pixel width [IN/OUT]
|
\param width pointer to the pixel width [IN/OUT]
|
||||||
\param height pointer to the pixel height [IN/OUT]
|
\param height pointer to the pixel height [IN/OUT]
|
||||||
@ -730,7 +743,7 @@ in the video decoders, video filters and/or video converters.
|
|||||||
pass
|
pass
|
||||||
class VideoCleanupCb(ctypes.c_void_p):
|
class VideoCleanupCb(ctypes.c_void_p):
|
||||||
"""Callback prototype to configure picture buffers format.
|
"""Callback prototype to configure picture buffers format.
|
||||||
\param opaque private pointer as passed to libvlc_video_set_callbacks()
|
\param opaque private pointer as passed to L{libvlc_video_set_callbacks}()
|
||||||
(and possibly modified by @ref libvlc_video_format_cb) [IN]
|
(and possibly modified by @ref libvlc_video_format_cb) [IN]
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
@ -806,6 +819,18 @@ class CallbackDecorators(object):
|
|||||||
\param args variable argument list for the format
|
\param args variable argument list for the format
|
||||||
\note Log message handlers <b>must</b> be thread-safe.
|
\note Log message handlers <b>must</b> be thread-safe.
|
||||||
'''
|
'''
|
||||||
|
VideoLockCb = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p, ListPOINTER(ctypes.c_void_p))
|
||||||
|
VideoLockCb.__doc__ = '''Callback prototype to allocate and lock a picture buffer.
|
||||||
|
Whenever a new video frame needs to be decoded, the lock callback is
|
||||||
|
invoked. Depending on the video chroma, one or three pixel planes of
|
||||||
|
adequate dimensions must be returned via the second parameter. Those
|
||||||
|
planes must be aligned on 32-bytes boundaries.
|
||||||
|
\param opaque private pointer as passed to L{libvlc_video_set_callbacks}() [IN]
|
||||||
|
\param planes start address of the pixel planes (LibVLC allocates the array
|
||||||
|
of void pointers, this callback must initialize the array) [OUT]
|
||||||
|
\return a private pointer for the display and unlock callbacks to identify
|
||||||
|
the picture buffers
|
||||||
|
'''
|
||||||
VideoUnlockCb = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ListPOINTER(ctypes.c_void_p))
|
VideoUnlockCb = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ListPOINTER(ctypes.c_void_p))
|
||||||
VideoUnlockCb.__doc__ = '''Callback prototype to unlock a picture buffer.
|
VideoUnlockCb.__doc__ = '''Callback prototype to unlock a picture buffer.
|
||||||
When the video frame decoding is complete, the unlock callback is invoked.
|
When the video frame decoding is complete, the unlock callback is invoked.
|
||||||
@ -813,7 +838,7 @@ This callback might not be needed at all. It is only an indication that the
|
|||||||
application can now read the pixel values if it needs to.
|
application can now read the pixel values if it needs to.
|
||||||
\warning A picture buffer is unlocked after the picture is decoded,
|
\warning A picture buffer is unlocked after the picture is decoded,
|
||||||
but before the picture is displayed.
|
but before the picture is displayed.
|
||||||
\param opaque private pointer as passed to libvlc_video_set_callbacks() [IN]
|
\param opaque private pointer as passed to L{libvlc_video_set_callbacks}() [IN]
|
||||||
\param picture private pointer returned from the @ref libvlc_video_lock_cb
|
\param picture private pointer returned from the @ref libvlc_video_lock_cb
|
||||||
callback [IN]
|
callback [IN]
|
||||||
\param planes pixel planes as defined by the @ref libvlc_video_lock_cb
|
\param planes pixel planes as defined by the @ref libvlc_video_lock_cb
|
||||||
@ -823,7 +848,7 @@ but before the picture is displayed.
|
|||||||
VideoDisplayCb.__doc__ = '''Callback prototype to display a picture.
|
VideoDisplayCb.__doc__ = '''Callback prototype to display a picture.
|
||||||
When the video frame needs to be shown, as determined by the media playback
|
When the video frame needs to be shown, as determined by the media playback
|
||||||
clock, the display callback is invoked.
|
clock, the display callback is invoked.
|
||||||
\param opaque private pointer as passed to libvlc_video_set_callbacks() [IN]
|
\param opaque private pointer as passed to L{libvlc_video_set_callbacks}() [IN]
|
||||||
\param picture private pointer returned from the @ref libvlc_video_lock_cb
|
\param picture private pointer returned from the @ref libvlc_video_lock_cb
|
||||||
callback [IN]
|
callback [IN]
|
||||||
'''
|
'''
|
||||||
@ -834,7 +859,7 @@ and the chain of video filters (if any). It can opt to change any parameter
|
|||||||
as it needs. In that case, LibVLC will attempt to convert the video format
|
as it needs. In that case, LibVLC will attempt to convert the video format
|
||||||
(rescaling and chroma conversion) but these operations can be CPU intensive.
|
(rescaling and chroma conversion) but these operations can be CPU intensive.
|
||||||
\param opaque pointer to the private pointer passed to
|
\param opaque pointer to the private pointer passed to
|
||||||
libvlc_video_set_callbacks() [IN/OUT]
|
L{libvlc_video_set_callbacks}() [IN/OUT]
|
||||||
\param chroma pointer to the 4 bytes video format identifier [IN/OUT]
|
\param chroma pointer to the 4 bytes video format identifier [IN/OUT]
|
||||||
\param width pointer to the pixel width [IN/OUT]
|
\param width pointer to the pixel width [IN/OUT]
|
||||||
\param height pointer to the pixel height [IN/OUT]
|
\param height pointer to the pixel height [IN/OUT]
|
||||||
@ -853,7 +878,7 @@ in the video decoders, video filters and/or video converters.
|
|||||||
'''
|
'''
|
||||||
VideoCleanupCb = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p)
|
VideoCleanupCb = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p)
|
||||||
VideoCleanupCb.__doc__ = '''Callback prototype to configure picture buffers format.
|
VideoCleanupCb.__doc__ = '''Callback prototype to configure picture buffers format.
|
||||||
\param opaque private pointer as passed to libvlc_video_set_callbacks()
|
\param opaque private pointer as passed to L{libvlc_video_set_callbacks}()
|
||||||
(and possibly modified by @ref libvlc_video_format_cb) [IN]
|
(and possibly modified by @ref libvlc_video_format_cb) [IN]
|
||||||
'''
|
'''
|
||||||
AudioPlayCb = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint, ctypes.c_int64)
|
AudioPlayCb = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint, ctypes.c_int64)
|
||||||
@ -2483,9 +2508,22 @@ class MediaPlayer(_Ctype):
|
|||||||
'''
|
'''
|
||||||
return libvlc_media_player_stop(self)
|
return libvlc_media_player_stop(self)
|
||||||
|
|
||||||
|
def video_set_callbacks(self, lock, unlock, display, opaque):
|
||||||
|
'''Set callbacks and private data to render decoded video to a custom area
|
||||||
|
in memory.
|
||||||
|
Use L{video_set_format}() or L{video_set_format_callbacks}()
|
||||||
|
to configure the decoded format.
|
||||||
|
@param lock: callback to lock video memory (must not be NULL).
|
||||||
|
@param unlock: callback to unlock video memory (or NULL if not needed).
|
||||||
|
@param display: callback to display video (or NULL if not needed).
|
||||||
|
@param opaque: private pointer for the three callbacks (as first parameter).
|
||||||
|
@version: LibVLC 1.1.1 or later.
|
||||||
|
'''
|
||||||
|
return libvlc_video_set_callbacks(self, lock, unlock, display, opaque)
|
||||||
|
|
||||||
def video_set_format(self, chroma, width, height, pitch):
|
def video_set_format(self, chroma, width, height, pitch):
|
||||||
'''Set decoded video chroma and dimensions.
|
'''Set decoded video chroma and dimensions.
|
||||||
This only works in combination with libvlc_video_set_callbacks(),
|
This only works in combination with L{video_set_callbacks}(),
|
||||||
and is mutually exclusive with L{video_set_format_callbacks}().
|
and is mutually exclusive with L{video_set_format_callbacks}().
|
||||||
@param chroma: a four-characters string identifying the chroma (e.g. "RV32" or "YUYV").
|
@param chroma: a four-characters string identifying the chroma (e.g. "RV32" or "YUYV").
|
||||||
@param width: pixel width.
|
@param width: pixel width.
|
||||||
@ -2498,7 +2536,7 @@ class MediaPlayer(_Ctype):
|
|||||||
|
|
||||||
def video_set_format_callbacks(self, setup, cleanup):
|
def video_set_format_callbacks(self, setup, cleanup):
|
||||||
'''Set decoded video chroma and dimensions. This only works in combination with
|
'''Set decoded video chroma and dimensions. This only works in combination with
|
||||||
libvlc_video_set_callbacks().
|
L{video_set_callbacks}().
|
||||||
@param setup: callback to select the video format (cannot be NULL).
|
@param setup: callback to select the video format (cannot be NULL).
|
||||||
@param cleanup: callback to release any allocated resources (or NULL).
|
@param cleanup: callback to release any allocated resources (or NULL).
|
||||||
@version: LibVLC 2.0.0 or later.
|
@version: LibVLC 2.0.0 or later.
|
||||||
@ -4382,9 +4420,26 @@ def libvlc_media_player_stop(p_mi):
|
|||||||
None, MediaPlayer)
|
None, MediaPlayer)
|
||||||
return f(p_mi)
|
return f(p_mi)
|
||||||
|
|
||||||
|
def libvlc_video_set_callbacks(mp, lock, unlock, display, opaque):
|
||||||
|
'''Set callbacks and private data to render decoded video to a custom area
|
||||||
|
in memory.
|
||||||
|
Use L{libvlc_video_set_format}() or L{libvlc_video_set_format_callbacks}()
|
||||||
|
to configure the decoded format.
|
||||||
|
@param mp: the media player.
|
||||||
|
@param lock: callback to lock video memory (must not be NULL).
|
||||||
|
@param unlock: callback to unlock video memory (or NULL if not needed).
|
||||||
|
@param display: callback to display video (or NULL if not needed).
|
||||||
|
@param opaque: private pointer for the three callbacks (as first parameter).
|
||||||
|
@version: LibVLC 1.1.1 or later.
|
||||||
|
'''
|
||||||
|
f = _Cfunctions.get('libvlc_video_set_callbacks', None) or \
|
||||||
|
_Cfunction('libvlc_video_set_callbacks', ((1,), (1,), (1,), (1,), (1,),), None,
|
||||||
|
None, MediaPlayer, VideoLockCb, VideoUnlockCb, VideoDisplayCb, ctypes.c_void_p)
|
||||||
|
return f(mp, lock, unlock, display, opaque)
|
||||||
|
|
||||||
def libvlc_video_set_format(mp, chroma, width, height, pitch):
|
def libvlc_video_set_format(mp, chroma, width, height, pitch):
|
||||||
'''Set decoded video chroma and dimensions.
|
'''Set decoded video chroma and dimensions.
|
||||||
This only works in combination with libvlc_video_set_callbacks(),
|
This only works in combination with L{libvlc_video_set_callbacks}(),
|
||||||
and is mutually exclusive with L{libvlc_video_set_format_callbacks}().
|
and is mutually exclusive with L{libvlc_video_set_format_callbacks}().
|
||||||
@param mp: the media player.
|
@param mp: the media player.
|
||||||
@param chroma: a four-characters string identifying the chroma (e.g. "RV32" or "YUYV").
|
@param chroma: a four-characters string identifying the chroma (e.g. "RV32" or "YUYV").
|
||||||
@ -4401,7 +4456,7 @@ def libvlc_video_set_format(mp, chroma, width, height, pitch):
|
|||||||
|
|
||||||
def libvlc_video_set_format_callbacks(mp, setup, cleanup):
|
def libvlc_video_set_format_callbacks(mp, setup, cleanup):
|
||||||
'''Set decoded video chroma and dimensions. This only works in combination with
|
'''Set decoded video chroma and dimensions. This only works in combination with
|
||||||
libvlc_video_set_callbacks().
|
L{libvlc_video_set_callbacks}().
|
||||||
@param mp: the media player.
|
@param mp: the media player.
|
||||||
@param setup: callback to select the video format (cannot be NULL).
|
@param setup: callback to select the video format (cannot be NULL).
|
||||||
@param cleanup: callback to release any allocated resources (or NULL).
|
@param cleanup: callback to release any allocated resources (or NULL).
|
||||||
@ -5878,10 +5933,9 @@ def libvlc_vlm_get_event_manager(p_instance):
|
|||||||
return f(p_instance)
|
return f(p_instance)
|
||||||
|
|
||||||
|
|
||||||
# 3 function(s) blacklisted:
|
# 2 function(s) blacklisted:
|
||||||
# libvlc_printerr
|
# libvlc_printerr
|
||||||
# libvlc_set_exit_handler
|
# libvlc_set_exit_handler
|
||||||
# libvlc_video_set_callbacks
|
|
||||||
|
|
||||||
# 17 function(s) not wrapped as methods:
|
# 17 function(s) not wrapped as methods:
|
||||||
# libvlc_audio_output_list_release
|
# libvlc_audio_output_list_release
|
||||||
|
@ -853,7 +853,11 @@ class SlideController(Controller):
|
|||||||
else:
|
else:
|
||||||
label = QtGui.QLabel()
|
label = QtGui.QLabel()
|
||||||
label.setMargin(4)
|
label.setMargin(4)
|
||||||
label.setScaledContents(True)
|
if serviceItem.is_media():
|
||||||
|
label.setAlignment(QtCore.Qt.AlignHCenter |
|
||||||
|
QtCore.Qt.AlignVCenter)
|
||||||
|
else:
|
||||||
|
label.setScaledContents(True)
|
||||||
if self.serviceItem.is_command():
|
if self.serviceItem.is_command():
|
||||||
label.setPixmap(QtGui.QPixmap(frame[u'image']))
|
label.setPixmap(QtGui.QPixmap(frame[u'image']))
|
||||||
else:
|
else:
|
||||||
|
@ -35,7 +35,7 @@ class Ui_AlertDialog(object):
|
|||||||
def setupUi(self, alertDialog):
|
def setupUi(self, alertDialog):
|
||||||
alertDialog.setObjectName(u'alertDialog')
|
alertDialog.setObjectName(u'alertDialog')
|
||||||
alertDialog.resize(400, 300)
|
alertDialog.resize(400, 300)
|
||||||
alertDialog.setWindowIcon(build_icon(u':/icon/openlp.org-icon-32.bmp'))
|
alertDialog.setWindowIcon(build_icon(u':/icon/openlp-logo-16x16.png'))
|
||||||
self.alertDialogLayout = QtGui.QGridLayout(alertDialog)
|
self.alertDialogLayout = QtGui.QGridLayout(alertDialog)
|
||||||
self.alertDialogLayout.setObjectName(u'alertDialogLayout')
|
self.alertDialogLayout.setObjectName(u'alertDialogLayout')
|
||||||
self.alertTextLayout = QtGui.QFormLayout()
|
self.alertTextLayout = QtGui.QFormLayout()
|
||||||
|
@ -36,7 +36,7 @@ class Ui_CustomEditDialog(object):
|
|||||||
customEditDialog.setObjectName(u'customEditDialog')
|
customEditDialog.setObjectName(u'customEditDialog')
|
||||||
customEditDialog.resize(450, 350)
|
customEditDialog.resize(450, 350)
|
||||||
customEditDialog.setWindowIcon(
|
customEditDialog.setWindowIcon(
|
||||||
build_icon(u':/icon/openlp.org-icon-32.bmp'))
|
build_icon(u':/icon/openlp-logo-16x16.png'))
|
||||||
self.dialogLayout = QtGui.QVBoxLayout(customEditDialog)
|
self.dialogLayout = QtGui.QVBoxLayout(customEditDialog)
|
||||||
self.dialogLayout.setObjectName(u'dialogLayout')
|
self.dialogLayout.setObjectName(u'dialogLayout')
|
||||||
self.titleLayout = QtGui.QHBoxLayout()
|
self.titleLayout = QtGui.QHBoxLayout()
|
||||||
|
@ -42,8 +42,9 @@ from openlp.core.ui.media import get_media_players, set_media_players
|
|||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
CLAPPERBOARD = QtGui.QImage(u':/media/media_video.png')
|
CLAPPERBOARD = u':/media/slidecontroller_multimedia.png'
|
||||||
#TODO: Add an appropriate Icon for DVDs, CDs, ...
|
VIDEO = QtGui.QImage(u':/media/media_video.png')
|
||||||
|
AUDIO = QtGui.QImage(u':/media/media_audio.png')
|
||||||
DVD_ICON = QtGui.QImage(u':/media/media_video.png')
|
DVD_ICON = QtGui.QImage(u':/media/media_video.png')
|
||||||
|
|
||||||
class MediaMediaItem(MediaManagerItem):
|
class MediaMediaItem(MediaManagerItem):
|
||||||
@ -217,7 +218,7 @@ class MediaMediaItem(MediaManagerItem):
|
|||||||
service_item.add_capability(ItemCapabilities.RequiresMedia)
|
service_item.add_capability(ItemCapabilities.RequiresMedia)
|
||||||
# force a non-existent theme
|
# force a non-existent theme
|
||||||
service_item.theme = -1
|
service_item.theme = -1
|
||||||
frame = u':/media/image_clapperboard.png'
|
frame = CLAPPERBOARD
|
||||||
(path, name) = os.path.split(filename)
|
(path, name) = os.path.split(filename)
|
||||||
service_item.add_from_command(path, name, frame)
|
service_item.add_from_command(path, name, frame)
|
||||||
return True
|
return True
|
||||||
@ -289,10 +290,10 @@ class MediaMediaItem(MediaManagerItem):
|
|||||||
key=lambda filename: os.path.split(unicode(filename))[1].lower())
|
key=lambda filename: os.path.split(unicode(filename))[1].lower())
|
||||||
for track in media:
|
for track in media:
|
||||||
track_info = QtCore.QFileInfo(track)
|
track_info = QtCore.QFileInfo(track)
|
||||||
if not track_info.isFile():
|
if 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)
|
||||||
item_name.setIcon(build_icon(CLAPPERBOARD))
|
item_name.setIcon(build_icon(VIDEO))
|
||||||
item_name.setData(QtCore.Qt.UserRole, track)
|
item_name.setData(QtCore.Qt.UserRole, track)
|
||||||
else:
|
else:
|
||||||
filename = os.path.split(unicode(track))[1]
|
filename = os.path.split(unicode(track))[1]
|
||||||
|
@ -55,7 +55,9 @@ window.OpenLP = {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
loadService: function (event) {
|
loadService: function (event) {
|
||||||
event.preventDefault();
|
if (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
$.getJSON(
|
$.getJSON(
|
||||||
"/api/service/list",
|
"/api/service/list",
|
||||||
function (data, status) {
|
function (data, status) {
|
||||||
@ -150,6 +152,10 @@ window.OpenLP = {
|
|||||||
OpenLP.currentSlide = data.results.slide;
|
OpenLP.currentSlide = data.results.slide;
|
||||||
OpenLP.currentItem = data.results.item;
|
OpenLP.currentItem = data.results.item;
|
||||||
if ($("#service-manager").is(":visible")) {
|
if ($("#service-manager").is(":visible")) {
|
||||||
|
if (OpenLP.currentService != data.results.service) {
|
||||||
|
OpenLP.currentService = data.results.service;
|
||||||
|
OpenLP.loadService();
|
||||||
|
}
|
||||||
$("#service-manager div[data-role=content] ul[data-role=listview] li").attr("data-theme", "c").removeClass("ui-btn-up-e").addClass("ui-btn-up-c");
|
$("#service-manager div[data-role=content] ul[data-role=listview] li").attr("data-theme", "c").removeClass("ui-btn-up-e").addClass("ui-btn-up-c");
|
||||||
$("#service-manager div[data-role=content] ul[data-role=listview] li a").each(function () {
|
$("#service-manager div[data-role=content] ul[data-role=listview] li a").each(function () {
|
||||||
var item = $(this);
|
var item = $(this);
|
||||||
@ -307,7 +313,7 @@ window.OpenLP = {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
escapeString: function (string) {
|
escapeString: function (string) {
|
||||||
return string.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")
|
return string.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,8 +139,10 @@ window.OpenLP = {
|
|||||||
"/api/poll",
|
"/api/poll",
|
||||||
function (data, status) {
|
function (data, status) {
|
||||||
OpenLP.updateClock(data);
|
OpenLP.updateClock(data);
|
||||||
if (OpenLP.currentItem != data.results.item) {
|
if (OpenLP.currentItem != data.results.item ||
|
||||||
|
OpenLP.currentService != data.results.service) {
|
||||||
OpenLP.currentItem = data.results.item;
|
OpenLP.currentItem = data.results.item;
|
||||||
|
OpenLP.currentService = data.results.service;
|
||||||
OpenLP.loadSlides();
|
OpenLP.loadSlides();
|
||||||
}
|
}
|
||||||
else if (OpenLP.currentSlide != data.results.slide) {
|
else if (OpenLP.currentSlide != data.results.slide) {
|
||||||
|
@ -154,18 +154,20 @@ class SundayPlusImport(SongImport):
|
|||||||
# If any line inside any verse contains CCLI or
|
# If any line inside any verse contains CCLI or
|
||||||
# only Public Domain, we treat this as special data:
|
# only Public Domain, we treat this as special data:
|
||||||
# we remove that line and add data to specific field.
|
# we remove that line and add data to specific field.
|
||||||
|
processed_lines = []
|
||||||
for i in xrange(len(lines)):
|
for i in xrange(len(lines)):
|
||||||
lines[i] = lines[i].strip()
|
line = lines[i].strip()
|
||||||
line = lines[i]
|
if line[:3].lower() == u'ccl':
|
||||||
if line[:4].lower() == u'ccli':
|
|
||||||
m = re.search(r'[0-9]+', line)
|
m = re.search(r'[0-9]+', line)
|
||||||
if m:
|
if m:
|
||||||
self.ccliNumber = int(m.group(0))
|
self.ccliNumber = int(m.group(0))
|
||||||
lines.pop(i)
|
continue
|
||||||
elif line.lower() == u'public domain':
|
elif line.lower() == u'public domain':
|
||||||
self.copyright = u'Public Domain'
|
self.copyright = u'Public Domain'
|
||||||
lines.pop(i)
|
continue
|
||||||
self.addVerse('\n'.join(lines).strip(), verse_type)
|
processed_lines.append(line)
|
||||||
|
self.addVerse('\n'.join(processed_lines).strip(),
|
||||||
|
verse_type)
|
||||||
if end == -1:
|
if end == -1:
|
||||||
break
|
break
|
||||||
i = end + 1
|
i = end + 1
|
||||||
|
@ -260,7 +260,7 @@ class OpenLyrics(object):
|
|||||||
IMPLEMENTED_VERSION = u'0.8'
|
IMPLEMENTED_VERSION = u'0.8'
|
||||||
START_TAGS_REGEX = re.compile(r'\{(\w+)\}')
|
START_TAGS_REGEX = re.compile(r'\{(\w+)\}')
|
||||||
END_TAGS_REGEX = re.compile(r'\{\/(\w+)\}')
|
END_TAGS_REGEX = re.compile(r'\{\/(\w+)\}')
|
||||||
VERSE_NUMBER_REGEX = re.compile(u'[a-zA-Z]*')
|
VERSE_TAG_SPLITTER = re.compile(u'([a-zA-Z]+)([0-9]*)([a-zA-Z]?)')
|
||||||
|
|
||||||
def __init__(self, manager):
|
def __init__(self, manager):
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
@ -325,10 +325,22 @@ class OpenLyrics(object):
|
|||||||
# Process the song's lyrics.
|
# Process the song's lyrics.
|
||||||
lyrics = etree.SubElement(song_xml, u'lyrics')
|
lyrics = etree.SubElement(song_xml, u'lyrics')
|
||||||
verse_list = sxml.get_verses(song.lyrics)
|
verse_list = sxml.get_verses(song.lyrics)
|
||||||
|
# Add a suffix letter to each verse
|
||||||
|
verse_tags = []
|
||||||
for verse in verse_list:
|
for verse in verse_list:
|
||||||
verse_tag = verse[0][u'type'][0].lower()
|
verse_tag = verse[0][u'type'][0].lower()
|
||||||
verse_number = verse[0][u'label']
|
verse_number = verse[0][u'label']
|
||||||
verse_def = verse_tag + verse_number
|
verse_def = verse_tag + verse_number
|
||||||
|
verse_tags.append(verse_def)
|
||||||
|
# Create the letter from the number of duplicates
|
||||||
|
verse[0][u'suffix'] = chr(96 + verse_tags.count(verse_def))
|
||||||
|
# If the verse tag is a duplicate use the suffix letter
|
||||||
|
for verse in verse_list:
|
||||||
|
verse_tag = verse[0][u'type'][0].lower()
|
||||||
|
verse_number = verse[0][u'label']
|
||||||
|
verse_def = verse_tag + verse_number
|
||||||
|
if verse_tags.count(verse_def) > 1:
|
||||||
|
verse_def += verse[0][u'suffix']
|
||||||
verse_element = \
|
verse_element = \
|
||||||
self._add_text_to_element(u'verse', lyrics, None, verse_def)
|
self._add_text_to_element(u'verse', lyrics, None, verse_def)
|
||||||
if u'lang' in verse[0]:
|
if u'lang' in verse[0]:
|
||||||
@ -742,11 +754,10 @@ class OpenLyrics(object):
|
|||||||
if lines.get(u'break') is not None:
|
if lines.get(u'break') is not None:
|
||||||
text += u'\n[---]'
|
text += u'\n[---]'
|
||||||
verse_def = verse.get(u'name', u' ').lower()
|
verse_def = verse.get(u'name', u' ').lower()
|
||||||
if verse_def[0] in VerseType.Tags:
|
verse_tag, verse_number, verse_part = \
|
||||||
verse_tag = verse_def[0]
|
OpenLyrics.VERSE_TAG_SPLITTER.search(verse_def).groups()
|
||||||
else:
|
if verse_tag not in VerseType.Tags:
|
||||||
verse_tag = VerseType.Tags[VerseType.Other]
|
verse_tag = VerseType.Tags[VerseType.Other]
|
||||||
verse_number = OpenLyrics.VERSE_NUMBER_REGEX.sub(u'', verse_def)
|
|
||||||
# OpenLyrics allows e. g. "c", but we need "c1". However, this does
|
# OpenLyrics allows e. g. "c", but we need "c1". However, this does
|
||||||
# not correct the verse order.
|
# not correct the verse order.
|
||||||
if not verse_number:
|
if not verse_number:
|
||||||
@ -757,13 +768,13 @@ class OpenLyrics(object):
|
|||||||
if song_xml.get(u'modifiedIn') in (u'1.9.6', u'OpenLP 1.9.6') and \
|
if song_xml.get(u'modifiedIn') in (u'1.9.6', u'OpenLP 1.9.6') and \
|
||||||
song_xml.get(u'version') == u'0.7' and \
|
song_xml.get(u'version') == u'0.7' and \
|
||||||
(verse_tag, verse_number, lang) in verses:
|
(verse_tag, verse_number, lang) in verses:
|
||||||
verses[(verse_tag, verse_number, lang)] += u'\n[---]\n' + text
|
verses[(verse_tag, verse_number, lang, None)] += u'\n[---]\n' + text
|
||||||
# Merge v1a, v1b, .... to v1.
|
# Merge v1a, v1b, .... to v1.
|
||||||
elif (verse_tag, verse_number, lang) in verses:
|
elif (verse_tag, verse_number, lang, verse_part) in verses:
|
||||||
verses[(verse_tag, verse_number, lang)] += u'\n' + text
|
verses[(verse_tag, verse_number, lang)] += u'\n' + text
|
||||||
else:
|
else:
|
||||||
verses[(verse_tag, verse_number, lang)] = text
|
verses[(verse_tag, verse_number, lang, verse_part)] = text
|
||||||
verse_def_list.append((verse_tag, verse_number, lang))
|
verse_def_list.append((verse_tag, verse_number, lang, verse_part))
|
||||||
# We have to use a list to keep the order, as dicts are not sorted.
|
# We have to use a list to keep the order, as dicts are not sorted.
|
||||||
for verse in verse_def_list:
|
for verse in verse_def_list:
|
||||||
sxml.add_verse_to_lyrics(
|
sxml.add_verse_to_lyrics(
|
||||||
|
BIN
resources/images/media_audio.png
Normal file
BIN
resources/images/media_audio.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
BIN
resources/images/media_video.png
Normal file
BIN
resources/images/media_video.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
@ -130,7 +130,9 @@
|
|||||||
<qresource prefix="media">
|
<qresource prefix="media">
|
||||||
<file>media_time.png</file>
|
<file>media_time.png</file>
|
||||||
<file>media_stop.png</file>
|
<file>media_stop.png</file>
|
||||||
<file>image_clapperboard.png</file>
|
<file>media_audio.png</file>
|
||||||
|
<file>media_video.png</file>
|
||||||
|
<file>slidecontroller_multimedia.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="messagebox">
|
<qresource prefix="messagebox">
|
||||||
<file>messagebox_critical.png</file>
|
<file>messagebox_critical.png</file>
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
BIN
resources/images/slidecontroller_multimedia.png
Normal file
BIN
resources/images/slidecontroller_multimedia.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Loading…
Reference in New Issue
Block a user