mirror of https://gitlab.com/openlp/openlp.git
Basic Service Item Slide Advance Settings working
This commit is contained in:
commit
360b744e7c
|
@ -45,6 +45,7 @@ HTMLSRC = u"""
|
|||
padding: 0;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
body {
|
||||
%s;
|
||||
|
@ -129,10 +130,10 @@ sup {
|
|||
var match = /-webkit-text-fill-color:[^;\"]+/gi;
|
||||
if(timer != null)
|
||||
clearTimeout(timer);
|
||||
/*
|
||||
QtWebkit bug with outlines and justify causing outline alignment
|
||||
problems. (Bug 859950) Surround each word with a <span> to workaround,
|
||||
but only in this scenario.
|
||||
/*
|
||||
QtWebkit bug with outlines and justify causing outline alignment
|
||||
problems. (Bug 859950) Surround each word with a <span> to workaround,
|
||||
but only in this scenario.
|
||||
*/
|
||||
var txt = document.getElementById('lyricsmain');
|
||||
if(window.getComputedStyle(txt).textAlign == 'justify'){
|
||||
|
@ -141,7 +142,7 @@ sup {
|
|||
txt = outline;
|
||||
if(window.getComputedStyle(txt).webkitTextStrokeWidth != '0px'){
|
||||
newtext = newtext.replace(/(\s| )+(?![^<]*>)/g,
|
||||
function(match) {
|
||||
function(match) {
|
||||
return '</span>' + match + '<span>';
|
||||
});
|
||||
newtext = '<span>' + newtext + '</span>';
|
||||
|
@ -288,6 +289,9 @@ def build_background_css(item, width, height):
|
|||
background = u'background-color: black'
|
||||
if theme:
|
||||
if theme.background_type == \
|
||||
BackgroundType.to_string(BackgroundType.Transparent):
|
||||
background = u''
|
||||
elif theme.background_type == \
|
||||
BackgroundType.to_string(BackgroundType.Solid):
|
||||
background = u'background-color: %s' % theme.background_color
|
||||
else:
|
||||
|
|
|
@ -47,6 +47,14 @@ class ServiceItemType(object):
|
|||
Image = 2
|
||||
Command = 3
|
||||
|
||||
class SlideAdvance(object):
|
||||
"""
|
||||
Provides an enumeration for the service item slide advance by up/down
|
||||
arrow keys
|
||||
"""
|
||||
End = 1
|
||||
Wrap = 2
|
||||
Next = 3
|
||||
|
||||
class ItemCapabilities(object):
|
||||
"""
|
||||
|
|
|
@ -100,6 +100,7 @@ class BackgroundType(object):
|
|||
Solid = 0
|
||||
Gradient = 1
|
||||
Image = 2
|
||||
Transparent = 3
|
||||
|
||||
@staticmethod
|
||||
def to_string(background_type):
|
||||
|
@ -112,6 +113,8 @@ class BackgroundType(object):
|
|||
return u'gradient'
|
||||
elif background_type == BackgroundType.Image:
|
||||
return u'image'
|
||||
elif background_type == BackgroundType.Transparent:
|
||||
return u'transparent'
|
||||
|
||||
@staticmethod
|
||||
def from_string(type_string):
|
||||
|
@ -124,6 +127,8 @@ class BackgroundType(object):
|
|||
return BackgroundType.Gradient
|
||||
elif type_string == u'image':
|
||||
return BackgroundType.Image
|
||||
elif type_string == u'transparent':
|
||||
return BackgroundType.Transparent
|
||||
|
||||
|
||||
class BackgroundGradientType(object):
|
||||
|
@ -246,7 +251,7 @@ class ThemeXML(object):
|
|||
Add a transparent background.
|
||||
"""
|
||||
background = self.theme_xml.createElement(u'background')
|
||||
background.setAttribute(u'mode', u'transparent')
|
||||
background.setAttribute(u'type', u'transparent')
|
||||
self.theme.appendChild(background)
|
||||
|
||||
def add_background_solid(self, bkcolor):
|
||||
|
@ -487,25 +492,25 @@ class ThemeXML(object):
|
|||
return
|
||||
xml_iter = theme_xml.getiterator()
|
||||
for element in xml_iter:
|
||||
parent = element.getparent()
|
||||
master = u''
|
||||
if element.tag == u'background':
|
||||
if element.attrib:
|
||||
for attr in element.attrib:
|
||||
self._create_attr(element.tag, attr, \
|
||||
element.attrib[attr])
|
||||
parent = element.getparent()
|
||||
if parent is not None:
|
||||
if element.getparent().tag == u'font':
|
||||
master = element.getparent().tag + u'_' + \
|
||||
element.getparent().attrib[u'type']
|
||||
if parent.tag == u'font':
|
||||
master = parent.tag + u'_' + parent.attrib[u'type']
|
||||
# set up Outline and Shadow Tags and move to font_main
|
||||
if element.getparent().tag == u'display':
|
||||
if parent.tag == u'display':
|
||||
if element.tag.startswith(u'shadow') or \
|
||||
element.tag.startswith(u'outline'):
|
||||
self._create_attr(u'font_main', element.tag,
|
||||
element.text)
|
||||
master = element.getparent().tag
|
||||
if element.getparent().tag == u'background':
|
||||
master = element.getparent().tag
|
||||
if element.getparent().attrib:
|
||||
for attr in element.getparent().attrib:
|
||||
self._create_attr(master, attr, \
|
||||
element.getparent().attrib[attr])
|
||||
master = parent.tag
|
||||
if parent.tag == u'background':
|
||||
master = parent.tag
|
||||
if master:
|
||||
self._create_attr(master, element.tag, element.text)
|
||||
if element.attrib:
|
||||
|
@ -599,9 +604,13 @@ class ThemeXML(object):
|
|||
self.background_start_color,
|
||||
self.background_end_color,
|
||||
self.background_direction)
|
||||
else:
|
||||
elif self.background_type == \
|
||||
BackgroundType.to_string(BackgroundType.Image):
|
||||
filename = os.path.split(self.background_filename)[1]
|
||||
self.add_background_image(filename, self.background_border_color)
|
||||
elif self.background_type == \
|
||||
BackgroundType.to_string(BackgroundType.Transparent):
|
||||
self.add_background_transparent()
|
||||
self.add_font(self.font_main_name,
|
||||
self.font_main_color,
|
||||
self.font_main_size,
|
||||
|
|
|
@ -29,7 +29,7 @@ The :mod:`advancedtab` provides an advanced settings facility.
|
|||
"""
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
from openlp.core.lib import SettingsTab, translate, build_icon
|
||||
from openlp.core.lib import SettingsTab, translate, build_icon, Receiver
|
||||
from openlp.core.lib.ui import UiStrings
|
||||
from openlp.core.utils import get_images_filter
|
||||
|
||||
|
@ -42,6 +42,7 @@ class AdvancedTab(SettingsTab):
|
|||
"""
|
||||
Initialise the settings tab
|
||||
"""
|
||||
self.display_changed = False
|
||||
advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced')
|
||||
self.default_image = u':/graphics/openlp-splash-screen.png'
|
||||
self.default_color = u'#ffffff'
|
||||
|
@ -122,6 +123,14 @@ class AdvancedTab(SettingsTab):
|
|||
self.hideMouseCheckBox.setObjectName(u'hideMouseCheckBox')
|
||||
self.hideMouseLayout.addWidget(self.hideMouseCheckBox)
|
||||
self.rightLayout.addWidget(self.hideMouseGroupBox)
|
||||
self.x11GroupBox = QtGui.QGroupBox(self.leftColumn)
|
||||
self.x11GroupBox.setObjectName(u'x11GroupBox')
|
||||
self.x11Layout = QtGui.QVBoxLayout(self.x11GroupBox)
|
||||
self.x11Layout.setObjectName(u'x11Layout')
|
||||
self.x11BypassCheckBox = QtGui.QCheckBox(self.x11GroupBox)
|
||||
self.x11BypassCheckBox.setObjectName(u'x11BypassCheckBox')
|
||||
self.x11Layout.addWidget(self.x11BypassCheckBox)
|
||||
self.rightLayout.addWidget(self.x11GroupBox)
|
||||
self.rightLayout.addStretch()
|
||||
|
||||
QtCore.QObject.connect(self.defaultColorButton,
|
||||
|
@ -130,6 +139,8 @@ class AdvancedTab(SettingsTab):
|
|||
QtCore.SIGNAL(u'pressed()'), self.onDefaultBrowseButtonPressed)
|
||||
QtCore.QObject.connect(self.defaultRevertButton,
|
||||
QtCore.SIGNAL(u'pressed()'), self.onDefaultRevertButtonPressed)
|
||||
QtCore.QObject.connect(self.x11BypassCheckBox,
|
||||
QtCore.SIGNAL(u'toggled(bool)'), self.onX11BypassCheckBoxToggled)
|
||||
|
||||
def retranslateUi(self):
|
||||
"""
|
||||
|
@ -167,6 +178,10 @@ class AdvancedTab(SettingsTab):
|
|||
'Browse for an image file to display.'))
|
||||
self.defaultRevertButton.setToolTip(translate('OpenLP.AdvancedTab',
|
||||
'Revert to the default OpenLP logo.'))
|
||||
self.x11GroupBox.setTitle(translate('OpenLP.AdvancedTab',
|
||||
'X11'))
|
||||
self.x11BypassCheckBox.setText(translate('OpenLP.AdvancedTab',
|
||||
'Bypass X11 Window Manager'))
|
||||
|
||||
def load(self):
|
||||
"""
|
||||
|
@ -198,6 +213,8 @@ class AdvancedTab(SettingsTab):
|
|||
QtCore.QVariant(True)).toBool())
|
||||
self.hideMouseCheckBox.setChecked(
|
||||
settings.value(u'hide mouse', QtCore.QVariant(False)).toBool())
|
||||
self.x11BypassCheckBox.setChecked(
|
||||
settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool())
|
||||
self.default_color = settings.value(u'default color',
|
||||
QtCore.QVariant(u'#ffffff')).toString()
|
||||
self.defaultFileEdit.setText(settings.value(u'default image',
|
||||
|
@ -227,9 +244,14 @@ class AdvancedTab(SettingsTab):
|
|||
QtCore.QVariant(self.enableAutoCloseCheckBox.isChecked()))
|
||||
settings.setValue(u'hide mouse',
|
||||
QtCore.QVariant(self.hideMouseCheckBox.isChecked()))
|
||||
settings.setValue(u'x11 bypass wm',
|
||||
QtCore.QVariant(self.x11BypassCheckBox.isChecked()))
|
||||
settings.setValue(u'default color', self.default_color)
|
||||
settings.setValue(u'default image', self.defaultFileEdit.text())
|
||||
settings.endGroup()
|
||||
if self.display_changed:
|
||||
Receiver.send_message(u'config_screen_changed')
|
||||
self.display_changed = False
|
||||
|
||||
def onDefaultColorButtonPressed(self):
|
||||
new_color = QtGui.QColorDialog.getColor(
|
||||
|
@ -252,3 +274,12 @@ class AdvancedTab(SettingsTab):
|
|||
def onDefaultRevertButtonPressed(self):
|
||||
self.defaultFileEdit.setText(u':/graphics/openlp-splash-screen.png')
|
||||
self.defaultFileEdit.setFocus()
|
||||
|
||||
def onX11BypassCheckBoxToggled(self, checked):
|
||||
"""
|
||||
Toggle X11 bypass flag on maindisplay depending on check box state.
|
||||
|
||||
``checked``
|
||||
The state of the check box (boolean).
|
||||
"""
|
||||
self.display_changed = True
|
||||
|
|
|
@ -30,6 +30,7 @@ from PyQt4 import QtCore, QtGui
|
|||
|
||||
from openlp.core.lib import SettingsTab, Receiver, translate
|
||||
from openlp.core.lib.ui import UiStrings
|
||||
from openlp.core.lib.serviceitem import SlideAdvance
|
||||
from openlp.core.ui import ScreenList
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
@ -97,9 +98,6 @@ class GeneralTab(SettingsTab):
|
|||
self.autoPreviewCheckBox = QtGui.QCheckBox(self.settingsGroupBox)
|
||||
self.autoPreviewCheckBox.setObjectName(u'autoPreviewCheckBox')
|
||||
self.settingsLayout.addRow(self.autoPreviewCheckBox)
|
||||
self.enableLoopCheckBox = QtGui.QCheckBox(self.settingsGroupBox)
|
||||
self.enableLoopCheckBox.setObjectName(u'enableLoopCheckBox')
|
||||
self.settingsLayout.addRow(self.enableLoopCheckBox)
|
||||
# Moved here from image tab
|
||||
self.timeoutLabel = QtGui.QLabel(self.settingsGroupBox)
|
||||
self.timeoutLabel.setObjectName(u'timeoutLabel')
|
||||
|
@ -180,6 +178,38 @@ class GeneralTab(SettingsTab):
|
|||
self.audioLayout.addWidget(self.startPausedCheckBox)
|
||||
self.rightLayout.addWidget(self.audioGroupBox)
|
||||
self.rightLayout.addStretch()
|
||||
# Service Item Slide Advance
|
||||
self.SlideGroupBox = QtGui.QGroupBox(self.rightColumn)
|
||||
self.SlideGroupBox.setObjectName(u'SlideGroupBox')
|
||||
self.SlideLayout = QtGui.QFormLayout(self.SlideGroupBox)
|
||||
self.SlideLayout.setLabelAlignment(
|
||||
QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
|
||||
self.SlideLayout.setFormAlignment(
|
||||
QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
|
||||
self.SlideLayout.setObjectName(u'SlideLayout')
|
||||
self.EndSlideRadioButton = QtGui.QRadioButton(self.SlideGroupBox)
|
||||
self.EndSlideRadioButton.setObjectName(u'EndSlideRadioButton')
|
||||
self.EndSlideLabel = QtGui.QLabel(self.SlideGroupBox)
|
||||
self.EndSlideLabel.setWordWrap(True)
|
||||
self.EndSlideLabel.setObjectName(u'EndSlideLabel')
|
||||
self.SlideLayout.addRow(self.EndSlideRadioButton, self.EndSlideLabel)
|
||||
self.WrapSlideRadioButton = QtGui.QRadioButton(self.SlideGroupBox)
|
||||
self.WrapSlideRadioButton.setObjectName(u'WrapSlideRadioButton')
|
||||
self.WrapSlideLabel = QtGui.QLabel(self.SlideGroupBox)
|
||||
self.WrapSlideLabel.setWordWrap(True)
|
||||
self.WrapSlideLabel.setObjectName(u'WrapSlideLabel')
|
||||
self.SlideLayout.addRow(self.WrapSlideRadioButton,
|
||||
self.WrapSlideLabel)
|
||||
self.NextSlideRadioButton = QtGui.QRadioButton(self.SlideGroupBox)
|
||||
self.NextSlideRadioButton.setChecked(True)
|
||||
self.NextSlideRadioButton.setObjectName(u'NextSlideRadioButton')
|
||||
self.NextSlideLabel = QtGui.QLabel(self.SlideGroupBox)
|
||||
self.NextSlideLabel.setWordWrap(True)
|
||||
self.NextSlideLabel.setObjectName(u'NextSlideLabel')
|
||||
self.SlideLayout.addRow(self.NextSlideRadioButton,
|
||||
self.NextSlideLabel)
|
||||
self.rightLayout.addWidget(self.SlideGroupBox)
|
||||
self.rightLayout.addStretch()
|
||||
# Signals and slots
|
||||
QtCore.QObject.connect(self.overrideCheckBox,
|
||||
QtCore.SIGNAL(u'toggled(bool)'), self.onOverrideCheckBoxToggled)
|
||||
|
@ -196,6 +226,12 @@ class GeneralTab(SettingsTab):
|
|||
# Reload the tab, as the screen resolution/count may have changed.
|
||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||
QtCore.SIGNAL(u'config_screen_changed'), self.load)
|
||||
QtCore.QObject.connect(self.EndSlideRadioButton,
|
||||
QtCore.SIGNAL(u'pressed()'), self.onEndSlideButtonPressed)
|
||||
QtCore.QObject.connect(self.WrapSlideRadioButton,
|
||||
QtCore.SIGNAL(u'pressed()'), self.onWrapSlideButtonPressed)
|
||||
QtCore.QObject.connect(self.NextSlideRadioButton,
|
||||
QtCore.SIGNAL(u'pressed()'), self.onNextSlideButtonPressed)
|
||||
# Remove for now
|
||||
self.usernameLabel.setVisible(False)
|
||||
self.usernameEdit.setVisible(False)
|
||||
|
@ -231,8 +267,6 @@ class GeneralTab(SettingsTab):
|
|||
'Unblank display when adding new live item'))
|
||||
self.autoPreviewCheckBox.setText(translate('OpenLP.GeneralTab',
|
||||
'Automatically preview next item in service'))
|
||||
self.enableLoopCheckBox.setText(translate('OpenLP.GeneralTab',
|
||||
'Enable slide wrap-around'))
|
||||
self.timeoutLabel.setText(translate('OpenLP.GeneralTab',
|
||||
'Timed slide interval:'))
|
||||
self.timeoutSpinBox.setSuffix(translate('OpenLP.GeneralTab', ' sec'))
|
||||
|
@ -256,6 +290,25 @@ class GeneralTab(SettingsTab):
|
|||
translate('OpenLP.GeneralTab', 'Background Audio'))
|
||||
self.startPausedCheckBox.setText(
|
||||
translate('OpenLP.GeneralTab', 'Start background audio paused'))
|
||||
# Slide Advance
|
||||
self.SlideGroupBox.setTitle(
|
||||
translate('OpenLP.GeneralTab', 'Service Item Slide Advance'))
|
||||
self.EndSlideRadioButton.setText(
|
||||
translate('OpenLP.GeneralTab', '&End Slide'))
|
||||
self.EndSlideLabel.setText(
|
||||
translate('OpenLP.GeneralTab', 'Up and down arrow keys '
|
||||
'stop at the top and bottom slides of each Service Item. '))
|
||||
self.WrapSlideRadioButton.setText(
|
||||
translate('OpenLP.GeneralTab', '&Wrap Slide'))
|
||||
self.WrapSlideLabel.setText(
|
||||
translate('OpenLP.GeneralTab', 'Up and down arrow keys '
|
||||
'wrap around at the top and bottom slides of each Service Item. '))
|
||||
self.NextSlideRadioButton.setText(
|
||||
translate('OpenLP.GeneralTab', '&Next Slide'))
|
||||
self.NextSlideLabel.setText(
|
||||
translate('OpenLP.GeneralTab', 'Up and down arrow keys '
|
||||
'advance to the the next or previous Service Item from the '
|
||||
'top and bottom slides of each Service Item. '))
|
||||
|
||||
def load(self):
|
||||
"""
|
||||
|
@ -289,8 +342,6 @@ class GeneralTab(SettingsTab):
|
|||
QtCore.QVariant(True)).toBool())
|
||||
self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview',
|
||||
QtCore.QVariant(False)).toBool())
|
||||
self.enableLoopCheckBox.setChecked(settings.value(u'enable slide loop',
|
||||
QtCore.QVariant(True)).toBool())
|
||||
self.timeoutSpinBox.setValue(settings.value(u'loop delay',
|
||||
QtCore.QVariant(5)).toInt()[0])
|
||||
self.overrideCheckBox.setChecked(settings.value(u'override position',
|
||||
|
@ -311,6 +362,16 @@ class GeneralTab(SettingsTab):
|
|||
self.customHeightValueEdit.setEnabled(self.overrideCheckBox.isChecked())
|
||||
self.customWidthValueEdit.setEnabled(self.overrideCheckBox.isChecked())
|
||||
self.display_changed = False
|
||||
settings.beginGroup(self.settingsSection)
|
||||
self.slide_advance = settings.value(
|
||||
u'slide advance', QtCore.QVariant(SlideAdvance.End)).toInt()[0]
|
||||
settings.endGroup()
|
||||
if self.slide_advance == SlideAdvance.End:
|
||||
self.EndSlideRadioButton.setChecked(True)
|
||||
elif self.slide_advance == SlideAdvance.Wrap:
|
||||
self.WrapSlideRadioButton.setChecked(True)
|
||||
else:
|
||||
self.NextSlideRadioButton.setChecked(True)
|
||||
|
||||
def save(self):
|
||||
"""
|
||||
|
@ -336,8 +397,6 @@ class GeneralTab(SettingsTab):
|
|||
QtCore.QVariant(self.autoUnblankCheckBox.isChecked()))
|
||||
settings.setValue(u'auto preview',
|
||||
QtCore.QVariant(self.autoPreviewCheckBox.isChecked()))
|
||||
settings.setValue(u'enable slide loop',
|
||||
QtCore.QVariant(self.enableLoopCheckBox.isChecked()))
|
||||
settings.setValue(u'loop delay',
|
||||
QtCore.QVariant(self.timeoutSpinBox.value()))
|
||||
settings.setValue(u'ccli number',
|
||||
|
@ -358,7 +417,8 @@ class GeneralTab(SettingsTab):
|
|||
QtCore.QVariant(self.overrideCheckBox.isChecked()))
|
||||
settings.setValue(u'audio start paused',
|
||||
QtCore.QVariant(self.startPausedCheckBox.isChecked()))
|
||||
settings.endGroup()
|
||||
settings.setValue(u'slide advance', QtCore.QVariant(self.slide_advance))
|
||||
settings.endGroup()
|
||||
# On save update the screens as well
|
||||
self.postSetUp(True)
|
||||
|
||||
|
@ -405,3 +465,12 @@ class GeneralTab(SettingsTab):
|
|||
Called when the width, height, x position or y position has changed.
|
||||
"""
|
||||
self.display_changed = True
|
||||
|
||||
def onEndSlideButtonPressed(self):
|
||||
self.slide_advance = SlideAdvance.End
|
||||
|
||||
def onWrapSlideButtonPressed(self):
|
||||
self.slide_advance = SlideAdvance.Wrap
|
||||
|
||||
def onNextSlideButtonPressed(self):
|
||||
self.slide_advance = SlideAdvance.Next
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
The :mod:`maindisplay` module provides the functionality to display screens
|
||||
and play multimedia within OpenLP.
|
||||
"""
|
||||
import cgi
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
@ -36,7 +37,7 @@ from PyQt4 import QtCore, QtGui, QtWebKit, QtOpenGL
|
|||
from PyQt4.phonon import Phonon
|
||||
|
||||
from openlp.core.lib import Receiver, build_html, ServiceItem, image_to_byte, \
|
||||
translate, PluginManager
|
||||
translate, PluginManager, expand_tags
|
||||
|
||||
from openlp.core.ui import HideMode, ScreenList, AlertLocation
|
||||
|
||||
|
@ -81,6 +82,10 @@ class Display(QtGui.QGraphicsView):
|
|||
self.screen[u'size'].width(), self.screen[u'size'].height())
|
||||
self.webView.settings().setAttribute(
|
||||
QtWebKit.QWebSettings.PluginsEnabled, True)
|
||||
palette = self.webView.palette()
|
||||
palette.setBrush(QtGui.QPalette.Base, QtCore.Qt.transparent)
|
||||
self.webView.page().setPalette(palette)
|
||||
self.webView.setAttribute(QtCore.Qt.WA_OpaquePaintEvent, False)
|
||||
self.page = self.webView.page()
|
||||
self.frame = self.page.mainFrame()
|
||||
if self.isLive and log.getEffectiveLevel() == logging.DEBUG:
|
||||
|
@ -129,7 +134,8 @@ class MainDisplay(Display):
|
|||
self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;')
|
||||
windowFlags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | \
|
||||
QtCore.Qt.WindowStaysOnTopHint
|
||||
if os.environ.get(u'XDG_CURRENT_DESKTOP') == u'Unity':
|
||||
if QtCore.QSettings().value(u'advanced/x11 bypass wm',
|
||||
QtCore.QVariant(True)).toBool():
|
||||
windowFlags = windowFlags | QtCore.Qt.X11BypassWindowManagerHint
|
||||
# FIXME: QtCore.Qt.SplashScreen is workaround to make display screen
|
||||
# stay always on top on Mac OS X. For details see bug 906926.
|
||||
|
@ -138,6 +144,7 @@ class MainDisplay(Display):
|
|||
windowFlags = windowFlags | QtCore.Qt.SplashScreen
|
||||
self.setWindowFlags(windowFlags)
|
||||
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
|
||||
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
|
||||
if self.isLive:
|
||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||
QtCore.SIGNAL(u'live_display_hide'), self.hideDisplay)
|
||||
|
@ -236,16 +243,17 @@ class MainDisplay(Display):
|
|||
The text to be displayed.
|
||||
"""
|
||||
log.debug(u'alert to display')
|
||||
# First we convert <>& marks to html variants, then apply
|
||||
# formattingtags, finally we double all backslashes for JavaScript.
|
||||
text_prepared = expand_tags(cgi.escape(text)) \
|
||||
.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')
|
||||
if self.height() != self.screen[u'size'].height() or \
|
||||
not self.isVisible():
|
||||
shrink = True
|
||||
js = u'show_alert("%s", "%s")' % (
|
||||
text.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"'),
|
||||
u'top')
|
||||
js = u'show_alert("%s", "%s")' % (text_prepared, u'top')
|
||||
else:
|
||||
shrink = False
|
||||
js = u'show_alert("%s", "")' % (
|
||||
text.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"'))
|
||||
js = u'show_alert("%s", "")' % text_prepared
|
||||
height = self.frame.evaluateJavaScript(js)
|
||||
if shrink:
|
||||
if text:
|
||||
|
@ -346,13 +354,7 @@ class MainDisplay(Display):
|
|||
self.setVisible(True)
|
||||
else:
|
||||
self.setVisible(True)
|
||||
preview = QtGui.QPixmap(self.screen[u'size'].width(),
|
||||
self.screen[u'size'].height())
|
||||
painter = QtGui.QPainter(preview)
|
||||
painter.setRenderHint(QtGui.QPainter.Antialiasing)
|
||||
self.frame.render(painter)
|
||||
painter.end()
|
||||
return preview
|
||||
return QtGui.QPixmap.grabWidget(self)
|
||||
|
||||
def buildHtml(self, serviceItem, image=None):
|
||||
"""
|
||||
|
|
|
@ -595,7 +595,10 @@ class ServiceManager(QtGui.QWidget):
|
|||
self.mainwindow.finishedProgressBar()
|
||||
Receiver.send_message(u'cursor_normal')
|
||||
if success:
|
||||
shutil.copy(temp_file_name, path_file_name)
|
||||
try:
|
||||
shutil.copy(temp_file_name, path_file_name)
|
||||
except:
|
||||
return self.saveFileAs()
|
||||
self.mainwindow.addRecentFile(path_file_name)
|
||||
self.setModified(False)
|
||||
try:
|
||||
|
|
|
@ -35,6 +35,7 @@ from PyQt4 import QtCore, QtGui
|
|||
from openlp.core.lib import OpenLPToolbar, Receiver, ItemCapabilities, \
|
||||
translate, build_icon, ServiceItem, build_html, PluginManager, ServiceItem
|
||||
from openlp.core.lib.ui import UiStrings, shortcut_action
|
||||
from openlp.core.lib.serviceitem import SlideAdvance
|
||||
from openlp.core.ui import HideMode, MainDisplay, Display, ScreenList
|
||||
from openlp.core.utils.actions import ActionList, CategoryOrder
|
||||
|
||||
|
@ -1163,7 +1164,7 @@ class SlideController(Controller):
|
|||
rect.y(), rect.width(), rect.height())
|
||||
self.slidePreview.setPixmap(winimg)
|
||||
|
||||
def onSlideSelectedNext(self, wrap=None):
|
||||
def onSlideSelectedNext(self, slide_advance=None):
|
||||
"""
|
||||
Go to the next slide.
|
||||
"""
|
||||
|
@ -1176,18 +1177,21 @@ class SlideController(Controller):
|
|||
else:
|
||||
row = self.previewListWidget.currentRow() + 1
|
||||
if row == self.previewListWidget.rowCount():
|
||||
if wrap is None:
|
||||
wrap = QtCore.QSettings().value(
|
||||
self.parent().generalSettingsSection +
|
||||
u'/enable slide loop', QtCore.QVariant(True)).toBool()
|
||||
if wrap:
|
||||
row = 0
|
||||
if slide_advance is None:
|
||||
slide_advance = QtCore.QSettings().value(
|
||||
self.parent().generalSettingsSection + u'/slide advance',
|
||||
QtCore.QVariant(SlideAdvance.End)).toInt()[0]
|
||||
if slide_advance == SlideAdvance.Wrap:
|
||||
row = 0
|
||||
elif slide_advance == SlideAdvance.Next:
|
||||
self.serviceNext()
|
||||
return
|
||||
else:
|
||||
row = self.previewListWidget.rowCount() - 1
|
||||
self.__checkUpdateSelectedSlide(row)
|
||||
self.slideSelected()
|
||||
|
||||
def onSlideSelectedPrevious(self):
|
||||
def onSlideSelectedPrevious(self, slide_advance=None):
|
||||
"""
|
||||
Go to the previous slide.
|
||||
"""
|
||||
|
@ -1200,9 +1204,15 @@ class SlideController(Controller):
|
|||
else:
|
||||
row = self.previewListWidget.currentRow() - 1
|
||||
if row == -1:
|
||||
if QtCore.QSettings().value(self.parent().generalSettingsSection
|
||||
+ u'/enable slide loop', QtCore.QVariant(True)).toBool():
|
||||
row = self.previewListWidget.rowCount() - 1
|
||||
if slide_advance is None:
|
||||
slide_advance = QtCore.QSettings().value(
|
||||
self.parent().generalSettingsSection + u'/slide advance',
|
||||
QtCore.QVariant(SlideAdvance.End)).toInt()[0]
|
||||
if slide_advance == SlideAdvance.Wrap:
|
||||
row = self.previewListWidget.rowCount() - 1
|
||||
elif slide_advance == SlideAdvance.Next:
|
||||
self.servicePrevious()
|
||||
return
|
||||
else:
|
||||
row = 0
|
||||
self.__checkUpdateSelectedSlide(row)
|
||||
|
|
|
@ -359,11 +359,15 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
|
|||
self.gradientEndButton.setStyleSheet(u'background-color: %s' %
|
||||
self.theme.background_end_color)
|
||||
self.setField(u'background_type', QtCore.QVariant(1))
|
||||
else:
|
||||
elif self.theme.background_type == \
|
||||
BackgroundType.to_string(BackgroundType.Image):
|
||||
self.imageColorButton.setStyleSheet(u'background-color: %s' %
|
||||
self.theme.background_border_color)
|
||||
self.imageFileEdit.setText(self.theme.background_filename)
|
||||
self.setField(u'background_type', QtCore.QVariant(2))
|
||||
elif self.theme.background_type == \
|
||||
BackgroundType.to_string(BackgroundType.Transparent):
|
||||
self.setField(u'background_type', QtCore.QVariant(3))
|
||||
if self.theme.background_direction == \
|
||||
BackgroundGradientType.to_string(BackgroundGradientType.Horizontal):
|
||||
self.setField(u'gradient', QtCore.QVariant(0))
|
||||
|
|
|
@ -813,10 +813,13 @@ class ThemeManager(QtGui.QWidget):
|
|||
unicode(theme.BackgroundParameter1.name())
|
||||
newtheme.background_end_color = \
|
||||
unicode(theme.BackgroundParameter2.name())
|
||||
else:
|
||||
elif theme.BackgroundType == 2:
|
||||
newtheme.background_type = \
|
||||
BackgroundType.to_string(BackgroundType.Image)
|
||||
newtheme.background_filename = unicode(theme.BackgroundParameter1)
|
||||
elif theme.BackgroundType == 3:
|
||||
newtheme.background_type = \
|
||||
BackgroundType.to_string(BackgroundType.Transparent)
|
||||
newtheme.font_main_name = theme.FontName
|
||||
newtheme.font_main_color = unicode(theme.FontColor.name())
|
||||
newtheme.font_main_size = theme.FontProportion * 3
|
||||
|
|
|
@ -54,7 +54,7 @@ class Ui_ThemeWizard(object):
|
|||
self.backgroundLabel = QtGui.QLabel(self.backgroundPage)
|
||||
self.backgroundLabel.setObjectName(u'BackgroundLabel')
|
||||
self.backgroundComboBox = QtGui.QComboBox(self.backgroundPage)
|
||||
self.backgroundComboBox.addItems([u'', u'', u''])
|
||||
self.backgroundComboBox.addItems([u'', u'', u'', u''])
|
||||
self.backgroundComboBox.setObjectName(u'BackgroundComboBox')
|
||||
self.backgroundTypeLayout.addRow(self.backgroundLabel,
|
||||
self.backgroundComboBox)
|
||||
|
@ -126,6 +126,12 @@ class Ui_ThemeWizard(object):
|
|||
self.imageLayout.addRow(self.imageLabel, self.imageFileLayout)
|
||||
self.imageLayout.setItem(2, QtGui.QFormLayout.LabelRole, self.spacer)
|
||||
self.backgroundStack.addWidget(self.imageWidget)
|
||||
self.transparentWidget = QtGui.QWidget(self.backgroundPage)
|
||||
self.transparentWidget.setObjectName(u'TransparentWidget')
|
||||
self.transparentLayout = QtGui.QFormLayout(self.transparentWidget)
|
||||
self.transparentLayout.setMargin(0)
|
||||
self.transparentLayout.setObjectName(u'TransparentLayout')
|
||||
self.backgroundStack.addWidget(self.transparentWidget)
|
||||
self.backgroundLayout.addLayout(self.backgroundStack)
|
||||
themeWizard.addPage(self.backgroundPage)
|
||||
# Main Area Page
|
||||
|
@ -432,6 +438,8 @@ class Ui_ThemeWizard(object):
|
|||
translate('OpenLP.ThemeWizard', 'Gradient'))
|
||||
self.backgroundComboBox.setItemText(
|
||||
BackgroundType.Image, UiStrings().Image)
|
||||
self.backgroundComboBox.setItemText(BackgroundType.Transparent,
|
||||
translate('OpenLP.ThemeWizard', 'Transparent'))
|
||||
self.colorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:'))
|
||||
self.gradientStartLabel.setText(
|
||||
translate(u'OpenLP.ThemeWizard', 'Starting color:'))
|
||||
|
|
|
@ -40,6 +40,7 @@ class PresentationTab(SettingsTab):
|
|||
"""
|
||||
self.controllers = controllers
|
||||
SettingsTab.__init__(self, parent, title, visible_title, icon_path)
|
||||
self.activated = False
|
||||
|
||||
def setupUi(self):
|
||||
"""
|
||||
|
@ -110,8 +111,12 @@ class PresentationTab(SettingsTab):
|
|||
|
||||
def save(self):
|
||||
"""
|
||||
Save the settings.
|
||||
Save the settings. If the tab hasn't been made visible to the user
|
||||
then there is nothing to do, so exit. This removes the need to
|
||||
start presentation applications unnecessarily.
|
||||
"""
|
||||
if not self.activated:
|
||||
return
|
||||
changed = False
|
||||
for key in self.controllers:
|
||||
controller = self.controllers[key]
|
||||
|
@ -140,6 +145,7 @@ class PresentationTab(SettingsTab):
|
|||
"""
|
||||
Tab has just been made visible to the user
|
||||
"""
|
||||
self.activated = True
|
||||
for key in self.controllers:
|
||||
controller = self.controllers[key]
|
||||
checkbox = self.PresenterCheckboxes[controller.name]
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue