Merged with trunk.

This commit is contained in:
Tomas Groth 2013-12-29 19:47:54 +00:00
commit 84334a039e
282 changed files with 2310 additions and 2256 deletions

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -5,8 +5,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Edwin Lunando, Joshua Miller, Stevan Pettit, #
# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -172,46 +172,46 @@ class Settings(QtCore.QSettings):
'shortcuts/importBibleItem': [],
'shortcuts/listViewBiblesDeleteItem': [QtGui.QKeySequence(QtCore.Qt.Key_Delete)],
'shortcuts/listViewBiblesPreviewItem': [QtGui.QKeySequence(QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
'shortcuts/listViewBiblesLiveItem': [QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
'shortcuts/listViewBiblesServiceItem': [QtGui.QKeySequence(QtCore.Qt.Key_Plus),
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
'shortcuts/listViewCustomDeleteItem': [QtGui.QKeySequence(QtCore.Qt.Key_Delete)],
'shortcuts/listViewCustomPreviewItem': [QtGui.QKeySequence(QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
'shortcuts/listViewCustomLiveItem': [QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
'shortcuts/listViewCustomServiceItem': [QtGui.QKeySequence(QtCore.Qt.Key_Plus),
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
'shortcuts/listViewImagesDeleteItem': [QtGui.QKeySequence(QtCore.Qt.Key_Delete)],
'shortcuts/listViewImagesPreviewItem': [QtGui.QKeySequence(QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
'shortcuts/listViewImagesLiveItem': [QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
'shortcuts/listViewImagesServiceItem': [QtGui.QKeySequence(QtCore.Qt.Key_Plus),
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
'shortcuts/listViewMediaDeleteItem': [QtGui.QKeySequence(QtCore.Qt.Key_Delete)],
'shortcuts/listViewMediaPreviewItem': [QtGui.QKeySequence(QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
'shortcuts/listViewMediaLiveItem': [QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
'shortcuts/listViewMediaServiceItem': [QtGui.QKeySequence(QtCore.Qt.Key_Plus),
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
'shortcuts/listViewPresentationsDeleteItem': [QtGui.QKeySequence(QtCore.Qt.Key_Delete)],
'shortcuts/listViewPresentationsPreviewItem': [QtGui.QKeySequence(QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
'shortcuts/listViewPresentationsLiveItem': [QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
'shortcuts/listViewPresentationsServiceItem': [QtGui.QKeySequence(QtCore.Qt.Key_Plus),
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
'shortcuts/listViewSongsDeleteItem': [QtGui.QKeySequence(QtCore.Qt.Key_Delete)],
'shortcuts/listViewSongsPreviewItem': [QtGui.QKeySequence(QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.Key_Return)],
'shortcuts/listViewSongsLiveItem': [QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Enter),
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
QtGui.QKeySequence(QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return)],
'shortcuts/listViewSongsServiceItem': [QtGui.QKeySequence(QtCore.Qt.Key_Plus),
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
QtGui.QKeySequence(QtCore.Qt.Key_Equal)],
'shortcuts/lockPanel': [],
'shortcuts/modeDefaultItem': [],
'shortcuts/modeLiveItem': [],
@ -222,8 +222,7 @@ class Settings(QtCore.QSettings):
'shortcuts/moveBottom': [QtGui.QKeySequence(QtCore.Qt.Key_End)],
'shortcuts/moveDown': [QtGui.QKeySequence(QtCore.Qt.Key_PageDown)],
'shortcuts/nextTrackItem': [],
'shortcuts/nextItem_live': [QtGui.QKeySequence(QtCore.Qt.Key_Down),
QtGui.QKeySequence(QtCore.Qt.Key_PageDown)],
'shortcuts/nextItem_live': [QtGui.QKeySequence(QtCore.Qt.Key_Down), QtGui.QKeySequence(QtCore.Qt.Key_PageDown)],
'shortcuts/nextItem_preview': [],
'shortcuts/nextService': [QtGui.QKeySequence(QtCore.Qt.Key_Right)],
'shortcuts/newService': [],
@ -231,8 +230,7 @@ class Settings(QtCore.QSettings):
'shortcuts/onlineHelpItem': [QtGui.QKeySequence('Alt+F1')],
'shortcuts/openService': [],
'shortcuts/saveService': [],
'shortcuts/previousItem_live': [QtGui.QKeySequence(QtCore.Qt.Key_Up),
QtGui.QKeySequence(QtCore.Qt.Key_PageUp)],
'shortcuts/previousItem_live': [QtGui.QKeySequence(QtCore.Qt.Key_Up), QtGui.QKeySequence(QtCore.Qt.Key_PageUp)],
'shortcuts/playbackPause': [],
'shortcuts/playbackPlay': [],
'shortcuts/playbackStop': [],

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -273,7 +273,7 @@ def check_item_selected(list_widget, message):
"""
if not list_widget.selectedIndexes():
QtGui.QMessageBox.information(list_widget.parent(),
translate('OpenLP.MediaManagerItem', 'No Items Selected'), message)
translate('OpenLP.MediaManagerItem', 'No Items Selected'), message)
return False
return True
@ -319,13 +319,13 @@ def create_separated_list(string_list):
return string_list[0]
elif len(string_list) == 2:
return translate('OpenLP.core.lib', '%s and %s',
'Locale list separator: 2 items') % (string_list[0], string_list[1])
'Locale list separator: 2 items') % (string_list[0], string_list[1])
else:
merged = translate('OpenLP.core.lib', '%s, and %s',
'Locale list separator: end') % (string_list[-2], string_list[-1])
'Locale list separator: end') % (string_list[-2], string_list[-1])
for index in reversed(list(range(1, len(string_list) - 2))):
merged = translate('OpenLP.core.lib', '%s, %s',
'Locale list separator: middle') % (string_list[index], merged)
'Locale list separator: middle') % (string_list[index], merged)
return translate('OpenLP.core.lib', '%s, %s', 'Locale list separator: start') % (string_list[0], merged)

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -97,8 +97,8 @@ def upgrade_db(url, upgrade):
pass
metadata_table = Table('metadata', metadata,
Column('key', types.Unicode(64), primary_key=True),
Column('value', types.UnicodeText(), default=None)
Column('key', types.Unicode(64), primary_key=True),
Column('value', types.UnicodeText(), default=None)
)
metadata_table.create(checkfirst=True)
mapper(Metadata, metadata_table)
@ -199,11 +199,10 @@ class Manager(object):
else:
self.db_url = 'sqlite:///%s/%s.sqlite' % (AppLocation.get_section_data_path(plugin_name), plugin_name)
else:
self.db_url = '%s://%s:%s@%s/%s' % (db_type,
urlquote(settings.value('db username')),
urlquote(settings.value('db password')),
urlquote(settings.value('db hostname')),
urlquote(settings.value('db database')))
self.db_url = '%s://%s:%s@%s/%s' % (db_type, urlquote(settings.value('db username')),
urlquote(settings.value('db password')),
urlquote(settings.value('db hostname')),
urlquote(settings.value('db database')))
if db_type == 'mysql':
db_encoding = settings.value('db encoding')
self.db_url += '?charset=%s' % urlquote(db_encoding)
@ -214,18 +213,17 @@ class Manager(object):
critical_error_message_box(
translate('OpenLP.Manager', 'Database Error'),
translate('OpenLP.Manager', 'The database being loaded was created in a more recent version of '
'OpenLP. The database is version %d, while OpenLP expects version %d. The database will not '
'be loaded.\n\nDatabase: %s') % (db_ver, up_ver, self.db_url)
'OpenLP. The database is version %d, while OpenLP expects version %d. The database will '
'not be loaded.\n\nDatabase: %s') % (db_ver, up_ver, self.db_url)
)
return
try:
self.session = init_schema(self.db_url)
except (SQLAlchemyError, DBAPIError):
log.exception('Error loading database: %s', self.db_url)
critical_error_message_box(
translate('OpenLP.Manager', 'Database Error'),
translate('OpenLP.Manager', 'OpenLP cannot load your database.\n\nDatabase: %s') % self.db_url
)
critical_error_message_box(translate('OpenLP.Manager', 'Database Error'),
translate('OpenLP.Manager', 'OpenLP cannot load your database.\n\nDatabase: %s')
% self.db_url)
def save_object(self, object_instance, commit=True):
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -40,6 +40,7 @@ from openlp.core.common import UiStrings
log = logging.getLogger(__name__)
class FileDialog(QtGui.QFileDialog):
"""
Subclass QFileDialog to work round a bug
@ -54,13 +55,12 @@ class FileDialog(QtGui.QFileDialog):
file_list = []
for file in files:
if not os.path.exists(file):
log.info('File %s not found. Attempting to unquote.')
log.info('File not found. Attempting to unquote.')
file = parse.unquote(file)
if not os.path.exists(file):
log.error('File %s not found.' % file)
QtGui.QMessageBox.information(parent, UiStrings().FileNotFound,
UiStrings().FileNotFoundMessage % file)
UiStrings().FileNotFoundMessage % file)
continue
log.info('File %s found.')
file_list.append(file)
return file_list

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -68,47 +68,56 @@ class FormattingTags(object):
FormattingTags.html_expands = []
base_tags = []
# Append the base tags.
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Red'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Red'),
'start tag': '{r}',
'start html': '<span style="-webkit-text-fill-color:red">',
'end tag': '{/r}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Black'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Black'),
'start tag': '{b}',
'start html': '<span style="-webkit-text-fill-color:black">',
'end tag': '{/b}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Blue'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Blue'),
'start tag': '{bl}',
'start html': '<span style="-webkit-text-fill-color:blue">',
'end tag': '{/bl}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Yellow'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Yellow'),
'start tag': '{y}',
'start html': '<span style="-webkit-text-fill-color:yellow">',
'end tag': '{/y}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Green'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Green'),
'start tag': '{g}',
'start html': '<span style="-webkit-text-fill-color:green">',
'end tag': '{/g}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Pink'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Pink'),
'start tag': '{pk}',
'start html': '<span style="-webkit-text-fill-color:#FFC0CB">',
'end tag': '{/pk}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Orange'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Orange'),
'start tag': '{o}',
'start html': '<span style="-webkit-text-fill-color:#FFA500">',
'end tag': '{/o}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Purple'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Purple'),
'start tag': '{pp}',
'start html': '<span style="-webkit-text-fill-color:#800080">',
'end tag': '{/pp}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'White'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'White'),
'start tag': '{w}',
'start html': '<span style="-webkit-text-fill-color:white">',
'end tag': '{/w}', 'end html': '</span>', 'protected': True,
@ -128,7 +137,8 @@ class FormattingTags(object):
'start tag': '{p}', 'start html': '<p>', 'end tag': '{/p}',
'end html': '</p>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Bold'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Bold'),
'start tag': '{st}', 'start html': '<strong>',
'end tag': '{/st}', 'end html': '</strong>',
'protected': True, 'temporary': False})
@ -142,9 +152,11 @@ class FormattingTags(object):
'start html': '<span style="text-decoration: underline;">',
'end tag': '{/u}', 'end html': '</span>', 'protected': True,
'temporary': False})
base_tags.append({'desc': translate('OpenLP.FormattingTags', 'Break'),
base_tags.append({
'desc': translate('OpenLP.FormattingTags', 'Break'),
'start tag': '{br}', 'start html': '<br>', 'end tag': '',
'end html': '', 'protected': True, 'temporary': False})
'end html': '', 'protected': True,
'temporary': False})
FormattingTags.add_html_tags(base_tags)
FormattingTags.add_html_tags(temporary_tags)
user_expands_string = str(Settings().value('formattingTags/html_tags'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -576,7 +576,7 @@ def build_html(item, screen, is_live, background, image=None, plugins=None):
"""
width = screen['size'].width()
height = screen['size'].height()
theme_data = item.themedata
theme_data = item.theme_data
# Image generated and poked in
if background:
bgimage_src = 'src="data:image/png;base64,%s"' % background
@ -630,7 +630,7 @@ def build_background_css(item, width):
Service Item containing theme and location information
"""
width = int(width) // 2
theme = item.themedata
theme = item.theme_data
background = 'background-color: black'
if theme:
if theme.background_type == BackgroundType.to_string(BackgroundType.Transparent):
@ -681,7 +681,7 @@ def build_lyrics_css(item):
%s
}
"""
theme_data = item.themedata
theme_data = item.theme_data
lyricstable = ''
lyrics = ''
lyricsmain = ''
@ -769,10 +769,10 @@ def build_footer_css(item, height):
text-align: left;
white-space: nowrap;
"""
theme = item.themedata
theme = item.theme_data
if not theme or not item.footer:
return ''
bottom = height - int(item.footer.y()) - int(item.footer.height())
lyrics_html = style % (item.footer.x(), bottom, item.footer.width(),
theme.font_footer_name, theme.font_footer_size, theme.font_footer_color)
theme.font_footer_name, theme.font_footer_size, theme.font_footer_color)
return lyrics_html

View File

@ -5,8 +5,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -45,8 +45,7 @@ class ListWidgetWithDnD(QtGui.QListWidget):
Initialise the list widget
"""
super(ListWidgetWithDnD, self).__init__(parent)
self.mimeDataText = name
assert(self.mimeDataText)
self.mime_data_text = name
def activateDnD(self):
"""
@ -54,7 +53,7 @@ class ListWidgetWithDnD(QtGui.QListWidget):
"""
self.setAcceptDrops(True)
self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
Registry().register_function(('%s_dnd' % self.mimeDataText), self.parent().load_file)
Registry().register_function(('%s_dnd' % self.mime_data_text), self.parent().load_file)
def mouseMoveEvent(self, event):
"""
@ -68,9 +67,9 @@ class ListWidgetWithDnD(QtGui.QListWidget):
event.ignore()
return
drag = QtGui.QDrag(self)
mimeData = QtCore.QMimeData()
drag.setMimeData(mimeData)
mimeData.setText(self.mimeDataText)
mime_data = QtCore.QMimeData()
drag.setMimeData(mime_data)
mime_data.setText(self.mime_data_text)
drag.start(QtCore.Qt.CopyAction)
def dragEnterEvent(self, event):
@ -104,13 +103,13 @@ class ListWidgetWithDnD(QtGui.QListWidget):
event.accept()
files = []
for url in event.mimeData().urls():
localFile = url.toLocalFile()
if os.path.isfile(localFile):
files.append(localFile)
elif os.path.isdir(localFile):
listing = os.listdir(localFile)
local_file = url.toLocalFile()
if os.path.isfile(local_file):
files.append(local_file)
elif os.path.isdir(local_file):
listing = os.listdir(local_file)
for file in listing:
files.append(os.path.join(localFile, file))
Registry().execute('%s_dnd' % self.mimeDataText, files)
files.append(os.path.join(local_file, file))
Registry().execute('%s_dnd' % self.mime_data_text, files)
else:
event.ignore()

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -171,7 +171,7 @@ class MediaManagerItem(QtGui.QWidget):
## Import Button ##
if self.has_import_icon:
toolbar_actions.append(['Import', StringContent.Import,
':/general/general_import.png', self.on_import_click])
':/general/general_import.png', self.on_import_click])
## Load Button ##
if self.has_file_icon:
toolbar_actions.append(['Load', StringContent.Load, ':/general/general_open.png', self.on_file_click])
@ -184,10 +184,10 @@ class MediaManagerItem(QtGui.QWidget):
## Delete Button ##
if self.has_delete_icon:
toolbar_actions.append(['Delete', StringContent.Delete,
':/general/general_delete.png', self.on_delete_click])
':/general/general_delete.png', self.on_delete_click])
## Preview ##
toolbar_actions.append(['Preview', StringContent.Preview,
':/general/general_preview.png', self.on_preview_click])
':/general/general_preview.png', self.on_preview_click])
## Live Button ##
toolbar_actions.append(['Live', StringContent.Live, ':/general/general_live.png', self.on_live_click])
## Add to service Button ##
@ -196,9 +196,9 @@ class MediaManagerItem(QtGui.QWidget):
if action[0] == StringContent.Preview:
self.toolbar.addSeparator()
self.toolbar.add_toolbar_action('%s%sAction' % (self.plugin.name, action[0]),
text=self.plugin.get_string(action[1])['title'], icon=action[2],
tooltip=self.plugin.get_string(action[1])['tooltip'],
triggers=action[3])
text=self.plugin.get_string(action[1])['title'], icon=action[2],
tooltip=self.plugin.get_string(action[1])['tooltip'],
triggers=action[3])
def add_list_view_to_toolbar(self):
"""
@ -216,41 +216,41 @@ class MediaManagerItem(QtGui.QWidget):
self.list_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
if self.has_edit_icon:
create_widget_action(self.list_view,
text=self.plugin.get_string(StringContent.Edit)['title'],
icon=':/general/general_edit.png',
triggers=self.on_edit_click)
text=self.plugin.get_string(StringContent.Edit)['title'],
icon=':/general/general_edit.png',
triggers=self.on_edit_click)
create_widget_action(self.list_view, separator=True)
if self.has_delete_icon:
create_widget_action(self.list_view,
'listView%s%sItem' % (self.plugin.name.title(), StringContent.Delete.title()),
text=self.plugin.get_string(StringContent.Delete)['title'],
icon=':/general/general_delete.png',
can_shortcuts=True, triggers=self.on_delete_click)
'listView%s%sItem' % (self.plugin.name.title(), StringContent.Delete.title()),
text=self.plugin.get_string(StringContent.Delete)['title'],
icon=':/general/general_delete.png',
can_shortcuts=True, triggers=self.on_delete_click)
create_widget_action(self.list_view, separator=True)
create_widget_action(self.list_view,
'listView%s%sItem' % (self.plugin.name.title(), StringContent.Preview.title()),
text=self.plugin.get_string(StringContent.Preview)['title'],
icon=':/general/general_preview.png',
can_shortcuts=True,
triggers=self.on_preview_click)
'listView%s%sItem' % (self.plugin.name.title(), StringContent.Preview.title()),
text=self.plugin.get_string(StringContent.Preview)['title'],
icon=':/general/general_preview.png',
can_shortcuts=True,
triggers=self.on_preview_click)
create_widget_action(self.list_view,
'listView%s%sItem' % (self.plugin.name.title(), StringContent.Live.title()),
text=self.plugin.get_string(StringContent.Live)['title'],
icon=':/general/general_live.png',
can_shortcuts=True,
triggers=self.on_live_click)
'listView%s%sItem' % (self.plugin.name.title(), StringContent.Live.title()),
text=self.plugin.get_string(StringContent.Live)['title'],
icon=':/general/general_live.png',
can_shortcuts=True,
triggers=self.on_live_click)
create_widget_action(self.list_view,
'listView%s%sItem' % (self.plugin.name.title(), StringContent.Service.title()),
can_shortcuts=True,
text=self.plugin.get_string(StringContent.Service)['title'],
icon=':/general/general_add.png',
triggers=self.on_add_click)
'listView%s%sItem' % (self.plugin.name.title(), StringContent.Service.title()),
can_shortcuts=True,
text=self.plugin.get_string(StringContent.Service)['title'],
icon=':/general/general_add.png',
triggers=self.on_add_click)
if self.add_to_service_item:
create_widget_action(self.list_view, separator=True)
create_widget_action(self.list_view,
text=translate('OpenLP.MediaManagerItem', '&Add to selected Service Item'),
icon=':/general/general_add.png',
triggers=self.on_add_edit_click)
text=translate('OpenLP.MediaManagerItem', '&Add to selected Service Item'),
icon=':/general/general_add.png',
triggers=self.on_add_edit_click)
self.add_custom_context_actions()
# Create the context menu and add all actions from the list_view.
self.menu = QtGui.QMenu()
@ -291,21 +291,21 @@ class MediaManagerItem(QtGui.QWidget):
def add_custom_context_actions(self):
"""
Implement this method in your descendent media manager item to
add any context menu items. This method is called automatically.
Implement this method in your descendant media manager item to add any context menu items.
This method is called automatically.
"""
pass
def initialise(self):
"""
Implement this method in your descendent media manager item to
do any UI or other initialisation. This method is called automatically.
Implement this method in your descendant media manager item to do any UI or other initialisation.
This method is called automatically.
"""
pass
def add_start_header_bar(self):
"""
Slot at start of toolbar for plugin to addwidgets
Slot at start of toolbar for plugin to add widgets
"""
pass
@ -320,8 +320,9 @@ class MediaManagerItem(QtGui.QWidget):
Add a file to the list widget to make it available for showing
"""
files = FileDialog.getOpenFileNames(self, self.on_new_prompt,
Settings().value(self.settings_section + '/last directory'), self.on_new_file_masks)
log.info('New files(s) %s', files)
Settings().value(self.settings_section + '/last directory'),
self.on_new_file_masks)
log.info('New files(s) %s' % files)
if files:
self.application.set_busy_cursor()
self.validate_and_load(files)
@ -341,7 +342,8 @@ class MediaManagerItem(QtGui.QWidget):
if file_type.lower() not in self.on_new_file_masks:
if not error_shown:
critical_error_message_box(translate('OpenLP.MediaManagerItem', 'Invalid File Type'),
translate('OpenLP.MediaManagerItem', 'Invalid File %s.\nSuffix not supported') % file_name)
translate('OpenLP.MediaManagerItem',
'Invalid File %s.\nSuffix not supported') % file_name)
error_shown = True
else:
new_files.append(file_name)
@ -391,7 +393,8 @@ class MediaManagerItem(QtGui.QWidget):
Settings().setValue('%s/%s files' % (self.settings_section, self.settings_section), self.get_file_list())
if duplicates_found:
critical_error_message_box(UiStrings().Duplicate,
translate('OpenLP.MediaManagerItem', 'Duplicate files were found on import and were ignored.'))
translate('OpenLP.MediaManagerItem',
'Duplicate files were found on import and were ignored.'))
def context_menu(self, point):
"""
@ -411,12 +414,12 @@ class MediaManagerItem(QtGui.QWidget):
"""
file_list = []
for index in range(self.list_view.count()):
bitem = self.list_view.item(index)
filename = bitem.data(QtCore.Qt.UserRole)
list_item = self.list_view.item(index)
filename = list_item.data(QtCore.Qt.UserRole)
file_list.append(filename)
return file_list
def load_list(self, list, target_group):
def load_list(self, load_list, target_group):
"""
Load a list. Needs to be implemented by the plugin.
"""
@ -448,7 +451,7 @@ class MediaManagerItem(QtGui.QWidget):
pass
def generate_slide_data(self, service_item, item=None, xml_version=False, remote=False,
context=ServiceItemContext.Live):
context=ServiceItemContext.Live):
"""
Generate the slide data. Needs to be implemented by the plugin.
"""
@ -477,9 +480,10 @@ class MediaManagerItem(QtGui.QWidget):
"""
if not self.list_view.selectedIndexes() and not self.remote_triggered:
QtGui.QMessageBox.information(self, UiStrings().NISp,
translate('OpenLP.MediaManagerItem', 'You must select one or more items to preview.'))
translate('OpenLP.MediaManagerItem',
'You must select one or more items to preview.'))
else:
log.debug('%s Preview requested', self.plugin.name)
log.debug('%s Preview requested' % self.plugin.name)
service_item = self.build_service_item()
if service_item:
service_item.from_plugin = True
@ -493,7 +497,8 @@ class MediaManagerItem(QtGui.QWidget):
"""
if not self.list_view.selectedIndexes():
QtGui.QMessageBox.information(self, UiStrings().NISp,
translate('OpenLP.MediaManagerItem', 'You must select one or more items to send live.'))
translate('OpenLP.MediaManagerItem',
'You must select one or more items to send live.'))
else:
self.go_live()
@ -536,7 +541,8 @@ class MediaManagerItem(QtGui.QWidget):
"""
if not self.list_view.selectedIndexes():
QtGui.QMessageBox.information(self, UiStrings().NISp,
translate('OpenLP.MediaManagerItem', 'You must select one or more items to add.'))
translate('OpenLP.MediaManagerItem',
'You must select one or more items to add.'))
else:
# Is it possible to process multiple list items to generate
# multiple service items?
@ -572,20 +578,22 @@ class MediaManagerItem(QtGui.QWidget):
"""
if not self.list_view.selectedIndexes() and not self.remote_triggered:
QtGui.QMessageBox.information(self, UiStrings().NISp,
translate('OpenLP.MediaManagerItem', 'You must select one or more items.'))
translate('OpenLP.MediaManagerItem', 'You must select one or more items.'))
else:
log.debug('%s Add requested', self.plugin.name)
service_item = self.service_manager.get_service_item()
if not service_item:
QtGui.QMessageBox.information(self, UiStrings().NISs,
translate('OpenLP.MediaManagerItem', 'You must select an existing service item to add to.'))
translate('OpenLP.MediaManagerItem',
'You must select an existing service item to add to.'))
elif self.plugin.name == service_item.name:
self.generate_slide_data(service_item)
self.service_manager.add_service_item(service_item, replace=True)
else:
# Turn off the remote edit update message indicator
QtGui.QMessageBox.information(self, translate('OpenLP.MediaManagerItem', 'Invalid Service Item'),
translate('OpenLP.MediaManagerItem', 'You must select a %s service item.') % self.title)
translate('OpenLP.MediaManagerItem',
'You must select a %s service item.') % self.title)
def build_service_item(self, item=None, xml_version=False, remote=False, context=ServiceItemContext.Live):
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -227,29 +227,29 @@ class Plugin(QtCore.QObject):
"""
pass
def add_import_menu_item(self, importMenu):
def add_import_menu_item(self, import_menu):
"""
Create a menu item and add it to the "Import" menu.
``importMenu``
``import_menu``
The Import menu.
"""
pass
def add_export_menu_Item(self, exportMenu):
def add_export_menu_Item(self, export_menu):
"""
Create a menu item and add it to the "Export" menu.
``exportMenu``
``export_menu``
The Export menu
"""
pass
def add_tools_menu_item(self, toolsMenu):
def add_tools_menu_item(self, tools_menu):
"""
Create a menu item and add it to the "Tools" menu.
``toolsMenu``
``tools_menu``
The Tools menu
"""
pass
@ -261,7 +261,8 @@ class Plugin(QtCore.QObject):
"""
if self.settings_tab_class:
self.settings_tab = self.settings_tab_class(parent, self.name,
self.get_string(StringContent.VisibleName)['title'], self.icon_path)
self.get_string(StringContent.VisibleName)['title'],
self.icon_path)
def add_to_menu(self, menubar):
"""
@ -324,14 +325,14 @@ class Plugin(QtCore.QObject):
"""
return False
def rename_theme(self, oldTheme, newTheme):
def rename_theme(self, old_theme, new_theme):
"""
Renames a theme a plugin is using making the plugin use the new name.
``oldTheme``
``old_theme``
The name of the theme the plugin should stop using.
``newTheme``
``new_theme``
The new name the plugin should now use.
"""
pass
@ -365,9 +366,8 @@ class Plugin(QtCore.QObject):
def __set_name_text_string(self, name, title, tooltip):
"""
Utility method for creating a plugin's text_strings. This method makes
use of the singular name of the plugin object so must only be called
after this has been set.
Utility method for creating a plugin's text_strings. This method makes use of the singular name of the
plugin object so must only be called after this has been set.
"""
self.text_strings[name] = {'title': title, 'tooltip': tooltip}

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -229,7 +229,7 @@ class Renderer(object):
self.image_manager.add_image(
theme_data.background_filename, ImageSource.Theme, QtGui.QColor(theme_data.background_border_color))
theme_data, main, footer = self.pre_render(theme_data)
service_item.themedata = theme_data
service_item.theme_data = theme_data
service_item.main = main
service_item.footer = footer
service_item.render(True)
@ -298,7 +298,7 @@ class Renderer(object):
if len(slides) > 1 and text:
# Add all slides apart from the last one the list.
pages.extend(slides[:-1])
if text_contains_split:
if text_contains_split:
text = slides[-1] + '\n[---]\n' + text
else:
text = slides[-1] + '\n' + text
@ -344,7 +344,7 @@ class Renderer(object):
return QtCore.QRect(10, 0, self.width - 20, self.footer_start)
else:
return QtCore.QRect(theme_data.font_main_x, theme_data.font_main_y,
theme_data.font_main_width - 1, theme_data.font_main_height - 1)
theme_data.font_main_width - 1, theme_data.font_main_height - 1)
def get_footer_rectangle(self, theme_data):
"""
@ -357,7 +357,8 @@ class Renderer(object):
return QtCore.QRect(10, self.footer_start, self.width - 20, self.height - self.footer_start)
else:
return QtCore.QRect(theme_data.font_footer_x,
theme_data.font_footer_y, theme_data.font_footer_width - 1, theme_data.font_footer_height - 1)
theme_data.font_footer_y, theme_data.font_footer_width - 1,
theme_data.font_footer_height - 1)
def _set_text_rectangle(self, theme_data, rect_main, rect_footer):
"""
@ -400,8 +401,8 @@ class Renderer(object):
</script><style>*{margin: 0; padding: 0; border: 0;}
#main {position: absolute; top: 0px; %s %s}</style></head><body>
<div id="main"></div></body></html>""" % \
(build_lyrics_format_css(theme_data, self.page_width,
self.page_height), build_lyrics_outline_css(theme_data))
(build_lyrics_format_css(theme_data, self.page_width, self.page_height),
build_lyrics_outline_css(theme_data))
self.web.setHtml(html)
self.empty_height = self.web_frame.contentsSize().height()

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -90,17 +90,17 @@ class ScreenList(object):
log.info('screen_resolution_changed %d' % number)
for screen in self.screen_list:
if number == screen['number']:
newScreen = {
new_screen = {
'number': number,
'size': self.desktop.screenGeometry(number),
'primary': self.desktop.primaryScreen() == number
}
self.remove_screen(number)
self.add_screen(newScreen)
self.add_screen(new_screen)
# The screen's default size is used, that is why we have to
# update the override screen.
if screen == self.override:
self.override = copy.deepcopy(newScreen)
self.override = copy.deepcopy(new_screen)
self.set_override_display()
Registry().execute('config_screen_changed')
break
@ -160,7 +160,7 @@ class ScreenList(object):
u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768)
}
"""
log.info('Screen %d found with resolution %s', screen['number'], screen['size'])
log.info('Screen %d found with resolution %s' % (screen['number'], screen['size']))
if screen['primary']:
self.current = screen
self.override = copy.deepcopy(self.current)
@ -200,7 +200,7 @@ class ScreenList(object):
``number``
The screen number (int).
"""
log.debug('set_current_display %s', number)
log.debug('set_current_display %s' % number)
if number + 1 > self.display_count:
self.current = self.screen_list[0]
else:

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -73,7 +73,7 @@ class SearchEdit(QtGui.QLineEdit):
self.setStyleSheet(stylesheet)
msz = self.minimumSizeHint()
self.setMinimumSize(max(msz.width(), self.clear_button.width() + (frame_width * 2) + 2),
max(msz.height(), self.clear_button.height() + (frame_width * 2) + 2))
max(msz.height(), self.clear_button.height() + (frame_width * 2) + 2))
def resizeEvent(self, event):
"""
@ -85,7 +85,7 @@ class SearchEdit(QtGui.QLineEdit):
size = self.clear_button.size()
frame_width = self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
self.clear_button.move(self.rect().right() - frame_width - size.width(),
(self.rect().bottom() + 1 - size.height()) // 2)
(self.rect().bottom() + 1 - size.height()) // 2)
if hasattr(self, 'menu_button'):
size = self.menu_button.size()
self.menu_button.move(self.rect().left() + frame_width + 2, (self.rect().bottom() + 1 - size.height()) // 2)

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -161,7 +161,7 @@ class ServiceItem(object):
self.capabilities = []
self.is_valid = True
self.icon = None
self.themedata = None
self.theme_data = None
self.main = None
self.footer = None
self.bg_image_bytes = None
@ -238,7 +238,7 @@ class ServiceItem(object):
self.bg_image_bytes = None
if not provides_own_theme_data:
self.renderer.set_item_theme(self.theme)
self.themedata, self.main, self.footer = self.renderer.pre_render()
self.theme_data, self.main, self.footer = self.renderer.pre_render()
if self.service_item_type == ServiceItemType.Text:
log.debug('Formatting slides: %s' % self.title)
# Save rendered pages to this dict. In the case that a slide is used

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -125,7 +125,7 @@ class SettingsTab(QtGui.QWidget):
"""
self.load()
def post_set_up(self, postUpdate=False):
def post_set_up(self, post_update=False):
"""
Changes which need to be made after setup of application

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -79,7 +79,7 @@ class SpellTextEdit(QtGui.QPlainTextEdit):
if event.button() == QtCore.Qt.RightButton:
# Rewrite the mouse event to a left button event so the cursor is moved to the location of the pointer.
event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress,
event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
QtGui.QPlainTextEdit.mousePressEvent(self, event)
def contextMenuEvent(self, event):
@ -133,7 +133,7 @@ class SpellTextEdit(QtGui.QPlainTextEdit):
"""
self.dictionary = enchant.Dict(action.text())
self.highlighter.spelling_dictionary = self.dictionary
self.highlighter.highlightBlock(self.toPlainText())
self.highlighter.highlight_block(self.toPlainText())
self.highlighter.rehighlight()
def correct_word(self, word):
@ -180,7 +180,7 @@ class Highlighter(QtGui.QSyntaxHighlighter):
super(Highlighter, self).__init__(*args)
self.spelling_dictionary = None
def highlightBlock(self, text):
def highlight_block(self, text):
"""
Highlight misspelt words in a block of text.
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -150,7 +150,7 @@ class VerticalType(object):
BOOLEAN_LIST = ['bold', 'italics', 'override', 'outline', 'shadow', 'slide_transition']
INTEGER_LIST = ['size', 'line_adjustment', 'x', 'height', 'y', 'width', 'shadow_size', 'outline_size',
'horizontal_align', 'vertical_align', 'wrap_style']
'horizontal_align', 'vertical_align', 'wrap_style']
class ThemeXML(object):
@ -260,7 +260,7 @@ class ThemeXML(object):
# Create direction element
self.child_element(background, 'direction', str(direction))
def add_background_image(self, filename, borderColor):
def add_background_image(self, filename, border_color):
"""
Add a image background.
@ -273,11 +273,11 @@ class ThemeXML(object):
# Create Filename element
self.child_element(background, 'filename', filename)
# Create endColor element
self.child_element(background, 'borderColor', str(borderColor))
self.child_element(background, 'borderColor', str(border_color))
def add_font(self, name, color, size, override, fonttype='main', bold='False', italics='False',
line_adjustment=0, xpos=0, ypos=0, width=0, height=0, outline='False', outline_color='#ffffff',
outline_pixel=2, shadow='False', shadow_color='#ffffff', shadow_pixel=5):
line_adjustment=0, xpos=0, ypos=0, width=0, height=0, outline='False', outline_color='#ffffff',
outline_pixel=2, shadow='False', shadow_color='#ffffff', shadow_pixel=5):
"""
Add a Font.

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -72,7 +72,7 @@ class OpenLPToolbar(QtGui.QToolBar):
def set_widget_visible(self, widgets, visible=True):
"""
Set the visibitity for a widget or a list of widgets.
Set the visibility for a widget or a list of widgets.
``widget``
A list of string with widget object names.

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -45,13 +45,12 @@ class TreeWidgetWithDnD(QtGui.QTreeWidget):
Initialise the tree widget
"""
super(TreeWidgetWithDnD, self).__init__(parent)
self.mimeDataText = name
self.mime_data_text = name
self.allow_internal_dnd = False
self.header().close()
self.default_indentation = self.indentation()
self.setIndentation(0)
self.setAnimated(True)
assert(self.mimeDataText)
def activateDnD(self):
"""
@ -59,8 +58,8 @@ class TreeWidgetWithDnD(QtGui.QTreeWidget):
"""
self.setAcceptDrops(True)
self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
Registry().register_function(('%s_dnd' % self.mimeDataText), self.parent().load_file)
Registry().register_function(('%s_dnd_internal' % self.mimeDataText), self.parent().dnd_move_internal)
Registry().register_function(('%s_dnd' % self.mime_data_text), self.parent().load_file)
Registry().register_function(('%s_dnd_internal' % self.mime_data_text), self.parent().dnd_move_internal)
def mouseMoveEvent(self, event):
"""
@ -77,9 +76,9 @@ class TreeWidgetWithDnD(QtGui.QTreeWidget):
event.ignore()
return
drag = QtGui.QDrag(self)
mimeData = QtCore.QMimeData()
drag.setMimeData(mimeData)
mimeData.setText(self.mimeDataText)
mime_data = QtCore.QMimeData()
drag.setMimeData(mime_data)
mime_data.setText(self.mime_data_text)
drag.start(QtCore.Qt.CopyAction)
def dragEnterEvent(self, event):
@ -132,11 +131,11 @@ class TreeWidgetWithDnD(QtGui.QTreeWidget):
listing = os.listdir(local_file)
for file_name in listing:
files.append(os.path.join(local_file, file_name))
Registry().execute('%s_dnd' % self.mimeDataText, {'files': files, 'target': self.itemAt(event.pos())})
Registry().execute('%s_dnd' % self.mime_Data_Text, {'files': files, 'target': self.itemAt(event.pos())})
elif self.allow_internal_dnd:
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
Registry().execute('%s_dnd_internal' % self.mimeDataText, self.itemAt(event.pos()))
Registry().execute('%s_dnd_internal' % self.mime_data_text, self.itemAt(event.pos()))
else:
event.ignore()

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -131,7 +131,8 @@ def critical_error_message_box(title=None, message=None, parent=None, question=F
"""
if question:
return QtGui.QMessageBox.critical(parent, UiStrings().Error, message,
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No))
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No))
return Registry().get('main_window').error_message(title if title else UiStrings().Error, message)
@ -293,9 +294,8 @@ def create_action(parent, name, **kwargs):
if kwargs.get('triggers'):
action.triggered.connect(kwargs.pop('triggers'))
for key in list(kwargs.keys()):
if key not in ['text', 'icon', 'tooltip', 'statustip', 'checked', 'can_shortcuts',
'category', 'triggers']:
log.warn('Parameter %s was not consumed in create_action().', key)
if key not in ['text', 'icon', 'tooltip', 'statustip', 'checked', 'can_shortcuts', 'category', 'triggers']:
log.warn('Parameter %s was not consumed in create_action().' % key)
return action

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -272,8 +272,8 @@ class Ui_AboutDialog(object):
self.about_notebook.setTabText(self.about_notebook.indexOf(self.credits_tab),
translate('OpenLP.AboutForm', 'Credits'))
copyright_note = translate('OpenLP.AboutForm',
'Copyright \xa9 2004-2013 %s\n'
'Portions copyright \xa9 2004-2013 %s') % ('Raoul Snyman',
'Copyright \xa9 2004-2014 %s\n'
'Portions copyright \xa9 2004-2014 %s') % ('Raoul Snyman',
'Tim Bentley, Gerald Britton, Jonathan Corwin, Samuel Findlay, '
'Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, '
'Armin K\xf6hler, Erik Lundin, Edwin Lunando, Joshua Miller, '

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -268,15 +268,15 @@ class AdvancedTab(SettingsTab):
self.data_directory_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Data Location'))
self.recent_label.setText(translate('OpenLP.AdvancedTab', 'Number of recent files to display:'))
self.media_plugin_check_box.setText(translate('OpenLP.AdvancedTab',
'Remember active media manager tab on startup'))
'Remember active media manager tab on startup'))
self.double_click_live_check_box.setText(translate('OpenLP.AdvancedTab',
'Double-click to send items straight to live'))
'Double-click to send items straight to live'))
self.single_click_preview_check_box.setText(translate('OpenLP.AdvancedTab',
'Preview items when clicked in Media Manager'))
'Preview items when clicked in Media Manager'))
self.expand_service_item_check_box.setText(translate('OpenLP.AdvancedTab',
'Expand new service items on creation'))
'Expand new service items on creation'))
self.enable_auto_close_check_box.setText(translate('OpenLP.AdvancedTab',
'Enable application exit confirmation'))
'Enable application exit confirmation'))
self.service_name_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Default Service Name'))
self.service_name_check_box.setText(translate('OpenLP.AdvancedTab', 'Enable default service name'))
self.service_name_time_label.setText(translate('OpenLP.AdvancedTab', 'Date and Time:'))
@ -293,7 +293,7 @@ class AdvancedTab(SettingsTab):
self.service_name_edit.setToolTip(translate('OpenLP.AdvancedTab', 'Consult the OpenLP manual for usage.'))
self.service_name_revert_button.setToolTip(
translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".') %
UiStrings().DefaultServiceName)
UiStrings().DefaultServiceName)
self.service_name_example_label.setText(translate('OpenLP.AdvancedTab', 'Example:'))
self.hide_mouse_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor'))
self.hide_mouse_check_box.setText(translate('OpenLP.AdvancedTab', 'Hide mouse cursor when over display window'))
@ -306,7 +306,7 @@ class AdvancedTab(SettingsTab):
self.data_directory_current_label.setText(translate('OpenLP.AdvancedTab', 'Current path:'))
self.data_directory_new_label.setText(translate('OpenLP.AdvancedTab', 'Custom path:'))
self.data_directory_browse_button.setToolTip(translate('OpenLP.AdvancedTab',
'Browse for new data file location.'))
'Browse for new data file location.'))
self.data_directory_default_button.setToolTip(
translate('OpenLP.AdvancedTab', 'Set the data location to the default.'))
self.data_directory_cancel_button.setText(translate('OpenLP.AdvancedTab', 'Cancel'))
@ -317,7 +317,7 @@ class AdvancedTab(SettingsTab):
'OpenLP.AdvancedTab', 'Copy the OpenLP data files to the new location.'))
self.new_data_directory_has_files_label.setText(
translate('OpenLP.AdvancedTab', '<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.display_workaround_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Display Workarounds'))
self.x11_bypass_check_box.setText(translate('OpenLP.AdvancedTab','Bypass X11 Window Manager'))
self.alternate_rows_check_box.setText(translate('OpenLP.AdvancedTab', 'Use alternating row colours in lists'))
@ -347,7 +347,7 @@ class AdvancedTab(SettingsTab):
self.hide_mouse_check_box.setChecked(settings.value('hide mouse'))
self.service_name_day.setCurrentIndex(settings.value('default service day'))
self.service_name_time.setTime(QtCore.QTime(settings.value('default service hour'),
settings.value('default service minute')))
settings.value('default service minute')))
self.should_update_service_name_example = True
self.service_name_edit.setText(settings.value('default service name'))
default_service_enabled = settings.value('default service enabled')
@ -375,15 +375,14 @@ class AdvancedTab(SettingsTab):
self.current_data_path = AppLocation.get_data_path()
if not os.path.exists(self.current_data_path):
log.error('Data path not found %s' % self.current_data_path)
answer = QtGui.QMessageBox.critical(self,
translate('OpenLP.AdvancedTab', 'Data Directory Error'),
answer = QtGui.QMessageBox.critical(self, translate('OpenLP.AdvancedTab', 'Data Directory Error'),
translate('OpenLP.AdvancedTab', 'OpenLP data directory was not found\n\n%s\n\n'
'This data directory was previously changed from the OpenLP '
'default location. If the new location was on removable '
'media, that media needs to be made available.\n\n'
'Click "No" to stop loading OpenLP. allowing you to fix the the problem.\n\n'
'Click "Yes" to reset the data directory to the default '
'location.').replace('%s', self.current_data_path),
'This data directory was previously changed from the OpenLP '
'default location. If the new location was on removable '
'media, that media needs to be made available.\n\n'
'Click "No" to stop loading OpenLP. allowing you to fix the the problem.\n\n'
'Click "Yes" to reset the data directory to the default '
'location.').replace('%s', self.current_data_path),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
QtGui.QMessageBox.No)
if answer == QtGui.QMessageBox.No:
@ -513,7 +512,7 @@ class AdvancedTab(SettingsTab):
"""
file_filters = '%s;;%s (*.*) (*)' % (get_images_filter(), UiStrings().AllFiles)
filename = QtGui.QFileDialog.getOpenFileName(self, translate('OpenLP.AdvancedTab', 'Open File'), '',
file_filters)
file_filters)
if filename:
self.default_file_edit.setText(filename)
self.default_file_edit.setFocus()
@ -524,9 +523,9 @@ class AdvancedTab(SettingsTab):
"""
old_root_path = str(self.data_directory_label.text())
# Get the new directory location.
new_data_path = QtGui.QFileDialog.getExistingDirectory(
self, translate('OpenLP.AdvancedTab', 'Select Data Directory Location'), old_root_path,
options=QtGui.QFileDialog.ShowDirsOnly)
new_data_path = QtGui.QFileDialog.getExistingDirectory(self, translate('OpenLP.AdvancedTab',
'Select Data Directory Location'),
old_root_path, options=QtGui.QFileDialog.ShowDirsOnly)
# Set the new data path.
if new_data_path:
new_data_path = os.path.normpath(new_data_path)
@ -536,12 +535,13 @@ class AdvancedTab(SettingsTab):
else:
return
# Make sure they want to change the data.
answer = QtGui.QMessageBox.question(self,
translate('OpenLP.AdvancedTab', 'Confirm Data Directory Change'),
translate('OpenLP.AdvancedTab', 'Are you sure you want to change the location of the OpenLP '
'data directory to:\n\n%s\n\n '
'The data directory will be changed when OpenLP is closed.').replace('%s', new_data_path),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No)
answer = QtGui.QMessageBox.question(self, translate('OpenLP.AdvancedTab', 'Confirm Data Directory Change'),
translate('OpenLP.AdvancedTab', 'Are you sure you want to change the '
'location of the OpenLP data directory to:\n\n%s\n\nThe data directory '
'will be changed when OpenLP is closed.').replace('%s', new_data_path),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No),
QtGui.QMessageBox.No)
if answer != QtGui.QMessageBox.Yes:
return
# Check if data already exists here.
@ -559,11 +559,13 @@ class AdvancedTab(SettingsTab):
if self.current_data_path.lower() != new_data_path.lower():
# Make sure they want to change the data location back to the
# default.
answer = QtGui.QMessageBox.question(self,
translate('OpenLP.AdvancedTab', 'Reset Data Directory'),
translate('OpenLP.AdvancedTab', 'Are you sure you want to change the location of the OpenLP '
'data directory to the default location?\n\nThis location will be used after OpenLP is closed.'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No)
answer = QtGui.QMessageBox.question(self, translate('OpenLP.AdvancedTab', 'Reset Data Directory'),
translate('OpenLP.AdvancedTab', 'Are you sure you want to change the '
'location of the OpenLP data directory to the default location?\n\nThis'
' location will be used after OpenLP is closed.'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No),
QtGui.QMessageBox.No)
if answer != QtGui.QMessageBox.Yes:
return
self.check_data_overwrite(new_data_path)
@ -596,11 +598,15 @@ class AdvancedTab(SettingsTab):
self.data_exists = True
# Check is they want to replace existing data.
answer = QtGui.QMessageBox.warning(self,
translate('OpenLP.AdvancedTab', 'Overwrite Existing Data'),
translate('OpenLP.AdvancedTab', 'WARNING: \n\nThe location you have selected \n\n%s\n\n'
'appears to contain OpenLP data files. Do you wish to replace these files with the current data files?'
).replace('%s', os.path.abspath(data_path,)),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No)
translate('OpenLP.AdvancedTab', 'Overwrite Existing Data'),
translate('OpenLP.AdvancedTab',
'WARNING: \n\nThe location you have selected \n\n%s\n\n'
'appears to contain OpenLP data files. Do you wish to '
'replace these files with the current data files?').replace
('%s', os.path.abspath(data_path,)),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No),
QtGui.QMessageBox.No)
if answer == QtGui.QMessageBox.Yes:
self.data_directory_copy_check_box.setChecked(True)
self.new_data_directory_has_files_label.show()
@ -638,9 +644,9 @@ class AdvancedTab(SettingsTab):
``checked``
The state of the check box (boolean).
"""
QtGui.QMessageBox.information(self,
translate('OpenLP.AdvancedTab', 'Restart Required'),
translate('OpenLP.AdvancedTab', 'This change will only take effect once OpenLP has been restarted.'))
QtGui.QMessageBox.information(self, translate('OpenLP.AdvancedTab', 'Restart Required'),
translate('OpenLP.AdvancedTab', 'This change will only take effect once OpenLP '
'has been restarted.'))
def on_end_slide_button_clicked(self):
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -75,13 +75,17 @@ class Ui_ExceptionDialog(object):
self.exception_text_edit.setObjectName('exception_text_edit')
self.exception_layout.addWidget(self.exception_text_edit)
self.send_report_button = create_button(exception_dialog, 'send_report_button',
icon=':/general/general_email.png', click=self.on_send_report_button_clicked)
icon=':/general/general_email.png',
click=self.on_send_report_button_clicked)
self.save_report_button = create_button(exception_dialog, 'save_report_button',
icon=':/general/general_save.png', click=self.on_save_report_button_clicked)
icon=':/general/general_save.png',
click=self.on_save_report_button_clicked)
self.attach_tile_button = create_button(exception_dialog, 'attach_tile_button',
icon=':/general/general_open.png', click=self.on_attach_file_button_clicked)
icon=':/general/general_open.png',
click=self.on_attach_file_button_clicked)
self.button_box = create_button_box(exception_dialog, 'button_box',
['close'], [self.send_report_button, self.save_report_button, self.attach_tile_button])
['close'], [self.send_report_button,
self.save_report_button, self.attach_tile_button])
self.exception_layout.addWidget(self.button_box)
self.retranslateUi(exception_dialog)
@ -93,14 +97,14 @@ class Ui_ExceptionDialog(object):
"""
exception_dialog.setWindowTitle(translate('OpenLP.ExceptionDialog', 'Error Occurred'))
self.description_explanation.setText(translate('OpenLP.ExceptionDialog',
'Please enter a description of what you were doing to cause this '
'error \n(Minimum 20 characters)'))
'Please enter a description of what you were doing to cause this error '
'\n(Minimum 20 characters)'))
self.message_label.setText(translate('OpenLP.ExceptionDialog', 'Oops! '
'OpenLP hit a problem, and couldn\'t recover. The text in the box '
'below contains information that might be helpful to the OpenLP '
'developers, so please e-mail it to bugs@openlp.org, along with a '
'detailed description of what you were doing when the problem '
'occurred.'))
'OpenLP hit a problem, and couldn\'t recover. The text in the box '
'below contains information that might be helpful to the OpenLP '
'developers, so please e-mail it to bugs@openlp.org, along with a '
'detailed description of what you were doing when the problem '
'occurred.'))
self.send_report_button.setText(translate('OpenLP.ExceptionDialog', 'Send E-Mail'))
self.save_report_button.setText(translate('OpenLP.ExceptionDialog', 'Save to File'))
self.attach_tile_button.setText(translate('OpenLP.ExceptionDialog', 'Attach File'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -144,19 +144,19 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog):
system += 'Desktop: GNOME\n'
elif os.environ.get('DESKTOP_SESSION') == 'xfce':
system += 'Desktop: Xfce\n'
return (openlp_version, description, traceback, system, libraries)
return openlp_version, description, traceback, system, libraries
def on_save_report_button_clicked(self):
"""
Saving exception log and system information to a file.
"""
report_text = translate('OpenLP.ExceptionForm',
'**OpenLP Bug Report**\n'
'Version: %s\n\n'
'--- Details of the Exception. ---\n\n%s\n\n '
'--- Exception Traceback ---\n%s\n'
'--- System information ---\n%s\n'
'--- Library Versions ---\n%s\n')
'**OpenLP Bug Report**\n'
'Version: %s\n\n'
'--- Details of the Exception. ---\n\n%s\n\n '
'--- Exception Traceback ---\n%s\n'
'--- System information ---\n%s\n'
'--- Library Versions ---\n%s\n')
filename = QtGui.QFileDialog.getSaveFileName(self,
translate('OpenLP.ExceptionForm', 'Save Crash Report'),
Settings().value(self.settings_section + '/last directory'),
@ -202,12 +202,12 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog):
if ':' in line:
exception = line.split('\n')[-1].split(':')[0]
subject = 'Bug report: %s in %s' % (exception, source)
mailto_url = QtCore.QUrl('mailto:bugs@openlp.org')
mailto_url.addQueryItem('subject', subject)
mailto_url.addQueryItem('body', body % content)
mail_to_url = QtCore.QUrl('mailto:bugs@openlp.org')
mail_to_url.addQueryItem('subject', subject)
mail_to_url.addQueryItem('body', body % content)
if self.file_attachment:
mailto_url.addQueryItem('attach', self.file_attachment)
QtGui.QDesktopServices.openUrl(mailto_url)
mail_to_url.addQueryItem('attach', self.file_attachment)
QtGui.QDesktopServices.openUrl(mail_to_url)
def on_description_updated(self):
"""
@ -226,9 +226,9 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog):
"""
Attache files to the bug report e-mail.
"""
files = QtGui.QFileDialog.getOpenFileName(
self, translate('ImagePlugin.ExceptionDialog', 'Select Attachment'),
Settings().value(self.settings_section + '/last directory'), '%s (*.*) (*)' % UiStrings().AllFiles)
files = QtGui.QFileDialog.getOpenFileName(self, translate('ImagePlugin.ExceptionDialog', 'Select Attachment'),
Settings().value(self.settings_section + '/last directory'),
'%s (*.*) (*)' % UiStrings().AllFiles)
log.info('New files(s) %s', str(files))
if files:
self.file_attachment = str(files)

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -137,13 +137,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
bible_languages = bible_languages.split(',')
for lang in bible_languages:
language = self.config.get('bibles_%s' % lang, 'title')
langItem = QtGui.QTreeWidgetItem(self.bibles_tree_widget, [language])
lang_item = QtGui.QTreeWidgetItem(self.bibles_tree_widget, [language])
bibles = self.config.get('bibles_%s' % lang, 'translations')
bibles = bibles.split(',')
for bible in bibles:
title = self.config.get('bible_%s' % bible, 'title')
filename = self.config.get('bible_%s' % bible, 'filename')
item = QtGui.QTreeWidgetItem(langItem, [title])
item = QtGui.QTreeWidgetItem(lang_item, [title])
item.setData(0, QtCore.Qt.UserRole, filename)
item.setCheckState(0, QtCore.Qt.Unchecked)
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
@ -239,7 +239,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
"""
Process the triggering of the cancel button.
"""
if self.last_id == FirstTimePage.NoInternet or (self.last_id <= FirstTimePage.Plugins and not self.has_run_wizard):
if self.last_id == FirstTimePage.NoInternet or \
(self.last_id <= FirstTimePage.Plugins and not self.has_run_wizard):
QtCore.QCoreApplication.exit()
sys.exit()
self.was_download_cancelled = True
@ -391,17 +392,17 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
self.progress_bar.setValue(self.progress_bar.maximum())
if self.has_run_wizard:
self.progress_label.setText(translate('OpenLP.FirstTimeWizard',
'Download complete. Click the finish button to return to OpenLP.'))
'Download complete. Click the finish button to return to OpenLP.'))
else:
self.progress_label.setText(translate('OpenLP.FirstTimeWizard',
'Download complete. Click the finish button to start OpenLP.'))
'Download complete. Click the finish button to start OpenLP.'))
else:
if self.has_run_wizard:
self.progress_label.setText(translate('OpenLP.FirstTimeWizard',
'Click the finish button to return to OpenLP.'))
'Click the finish button to return to OpenLP.'))
else:
self.progress_label.setText(translate('OpenLP.FirstTimeWizard',
'Click the finish button to start OpenLP.'))
'Click the finish button to start OpenLP.'))
self.finish_button.setVisible(True)
self.finish_button.setEnabled(True)
self.cancel_button.setVisible(False)

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -46,9 +46,9 @@ class FirstTimeLanguageForm(QtGui.QDialog, Ui_FirstTimeLanguageDialog):
"""
super(FirstTimeLanguageForm, self).__init__(parent)
self.setupUi(self)
self.qmList = LanguageManager.get_qm_list()
self.qm_list = LanguageManager.get_qm_list()
self.language_combo_box.addItem('Autodetect')
self.language_combo_box.addItems(sorted(self.qmList.keys()))
self.language_combo_box.addItems(sorted(self.qm_list.keys()))
def exec_(self):
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -64,7 +64,7 @@ class Ui_FirstTimeWizard(object):
first_time_wizard.setModal(True)
first_time_wizard.setWizardStyle(QtGui.QWizard.ModernStyle)
first_time_wizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage |
QtGui.QWizard.NoBackButtonOnLastPage | QtGui.QWizard.HaveCustomButton1)
QtGui.QWizard.NoBackButtonOnLastPage | QtGui.QWizard.HaveCustomButton1)
self.finish_button = self.button(QtGui.QWizard.FinishButton)
self.no_internet_finish_button = self.button(QtGui.QWizard.CustomButton1)
self.cancel_button = self.button(QtGui.QWizard.CancelButton)
@ -210,9 +210,10 @@ class Ui_FirstTimeWizard(object):
"""
first_time_wizard.setWindowTitle(translate('OpenLP.FirstTimeWizard', 'First Time Wizard'))
self.title_label.setText('<span style="font-size:14pt; font-weight:600;">%s</span>' %
translate('OpenLP.FirstTimeWizard', 'Welcome to the First Time Wizard'))
translate('OpenLP.FirstTimeWizard', 'Welcome to the First Time Wizard'))
self.information_label.setText(translate('OpenLP.FirstTimeWizard',
'This wizard will help you to configure OpenLP for initial use. Click the next button below to start.'))
'This wizard will help you to configure OpenLP for initial use. '
'Click the next button below to start.'))
self.plugin_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins'))
self.plugin_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. '))
self.songs_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Songs'))
@ -231,13 +232,15 @@ class Ui_FirstTimeWizard(object):
self.no_internet_page.setSubTitle(
translate('OpenLP.FirstTimeWizard', 'Unable to detect an Internet connection.'))
self.no_internet_text = translate('OpenLP.FirstTimeWizard',
'No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able '
'to download sample songs, Bibles and themes. Click the Finish button now to start OpenLP with initial '
'settings and no sample data.\n\nTo re-run the First Time Wizard and import this sample data at a later '
'time, check your Internet connection and re-run this wizard by selecting "Tools/Re-run First Time Wizard" '
'from OpenLP.')
'No Internet connection was found. The First Time Wizard needs an Internet '
'connection in order to be able to download sample songs, Bibles and themes.'
' Click the Finish button now to start OpenLP with initial settings and '
'no sample data.\n\nTo re-run the First Time Wizard and import this sample '
'data at a later time, check your Internet connection and re-run this '
'wizard by selecting "Tools/Re-run First Time Wizard" from OpenLP.')
self.cancelWizardText = translate('OpenLP.FirstTimeWizard',
'\n\nTo cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now.')
'\n\nTo cancel the First Time Wizard completely (and not start OpenLP), '
'click the Cancel button now.')
self.songs_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs'))
self.songs_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download public domain songs.'))
self.bibles_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Bibles'))
@ -246,7 +249,7 @@ class Ui_FirstTimeWizard(object):
self.themes_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download sample themes.'))
self.defaults_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Default Settings'))
self.defaults_page.setSubTitle(translate('OpenLP.FirstTimeWizard',
'Set up default settings to be used by OpenLP.'))
'Set up default settings to be used by OpenLP.'))
self.display_label.setText(translate('OpenLP.FirstTimeWizard', 'Default output display:'))
self.theme_label.setText(translate('OpenLP.FirstTimeWizard', 'Select default theme:'))
self.progress_label.setText(translate('OpenLP.FirstTimeWizard', 'Starting configuration process...'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -45,11 +45,12 @@ class FormattingTagController(object):
"""
Initiator
"""
self.html_tag_regex = re.compile(r'<(?:(?P<close>/(?=[^\s/>]+>))?'
r'(?P<tag>[^\s/!\?>]+)(?:\s+[^\s=]+="[^"]*")*\s*(?P<empty>/)?'
r'|(?P<cdata>!\[CDATA\[(?:(?!\]\]>).)*\]\])'
r'|(?P<procinst>\?(?:(?!\?>).)*\?)'
r'|(?P<comment>!--(?:(?!-->).)*--))>', re.UNICODE)
self.html_tag_regex = re.compile(
r'<(?:(?P<close>/(?=[^\s/>]+>))?'
r'(?P<tag>[^\s/!\?>]+)(?:\s+[^\s=]+="[^"]*")*\s*(?P<empty>/)?'
r'|(?P<cdata>!\[CDATA\[(?:(?!\]\]>).)*\]\])'
r'|(?P<procinst>\?(?:(?!\?>).)*\?)'
r'|(?P<comment>!--(?:(?!-->).)*--))>', re.UNICODE)
self.html_regex = re.compile(r'^(?:[^<>]*%s)*[^<>]*$' % self.html_tag_regex.pattern)
def pre_save(self):
@ -76,12 +77,12 @@ class FormattingTagController(object):
The end html tag.
"""
for linenumber, html1 in enumerate(self.protected_tags):
for line_number, html1 in enumerate(self.protected_tags):
if self._strip(html1['start tag']) == tag:
return translate('OpenLP.FormattingTagForm', 'Tag %s already defined.') % tag
if self._strip(html1['desc']) == desc:
return translate('OpenLP.FormattingTagForm', 'Description %s already defined.') % tag
for linenumber, html1 in enumerate(self.custom_tags):
for line_number, html1 in enumerate(self.custom_tags):
if self._strip(html1['start tag']) == tag:
return translate('OpenLP.FormattingTagForm', 'Tag %s already defined.') % tag
if self._strip(html1['desc']) == desc:
@ -172,5 +173,5 @@ class FormattingTagController(object):
return None, end
if end and end != end_html:
return translate('OpenLP.FormattingTagForm',
'End tag %s does not match end tag for start tag %s' % (end, start_html)), None
'End tag %s does not match end tag for start tag %s' % (end, start_html)), None
return None, None

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -93,10 +93,11 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog, FormattingTagCont
new_row = self.tag_table_widget.rowCount()
self.tag_table_widget.insertRow(new_row)
self.tag_table_widget.setItem(new_row, 0,
QtGui.QTableWidgetItem(translate('OpenLP.FormattingTagForm', 'New Tag%s') % str(new_row)))
QtGui.QTableWidgetItem(translate('OpenLP.FormattingTagForm', 'New Tag%s')
% str(new_row)))
self.tag_table_widget.setItem(new_row, 1, QtGui.QTableWidgetItem('n%s' % str(new_row)))
self.tag_table_widget.setItem(new_row, 2,
QtGui.QTableWidgetItem(translate('OpenLP.FormattingTagForm', '<HTML here>')))
QtGui.QTableWidgetItem(translate('OpenLP.FormattingTagForm', '<HTML here>')))
self.tag_table_widget.setItem(new_row, 3, QtGui.QTableWidgetItem(''))
self.tag_table_widget.resizeRowsToContents()
self.tag_table_widget.scrollToBottom()
@ -119,11 +120,12 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog, FormattingTagCont
self.services.pre_save()
while count < self.tag_table_widget.rowCount():
error = self.services.validate_for_save(self.tag_table_widget.item(count, 0).text(),
self.tag_table_widget.item(count, 1).text(), self.tag_table_widget.item(count, 2).text(),
self.tag_table_widget.item(count, 3).text())
self.tag_table_widget.item(count, 1).text(),
self.tag_table_widget.item(count, 2).text(),
self.tag_table_widget.item(count, 3).text())
if error:
QtGui.QMessageBox.warning(self,
translate('OpenLP.FormattingTagForm', 'Validation Error'), error, QtGui.QMessageBox.Ok)
QtGui.QMessageBox.warning(self, translate('OpenLP.FormattingTagForm', 'Validation Error'), error,
QtGui.QMessageBox.Ok)
self.tag_table_widget.selectRow(count)
return
count += 1
@ -141,7 +143,7 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog, FormattingTagCont
self.tag_table_widget.setRowCount(0)
self.new_button.setEnabled(True)
self.delete_button.setEnabled(False)
for linenumber, html in enumerate(FormattingTags.get_html_tags()):
for line_number, html in enumerate(FormattingTags.get_html_tags()):
if html['protected']:
line = self.tag_table_widget_read.rowCount()
self.tag_table_widget_read.setRowCount(line + 1)
@ -198,8 +200,8 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog, FormattingTagCont
if tag:
self.tag_table_widget.setItem(pre_row, 3, QtGui.QTableWidgetItem(tag))
if errors:
QtGui.QMessageBox.warning(self,
translate('OpenLP.FormattingTagForm', 'Validation Error'), errors, QtGui.QMessageBox.Ok)
QtGui.QMessageBox.warning(self, translate('OpenLP.FormattingTagForm', 'Validation Error'), errors,
QtGui.QMessageBox.Ok)
#self.tag_table_widget.selectRow(pre_row - 1)
self.tag_table_widget.resizeRowsToContents()

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -221,7 +221,7 @@ class GeneralTab(SettingsTab):
self.check_for_updates_check_box.setText(translate('OpenLP.GeneralTab', 'Check for updates to OpenLP'))
self.settings_group_box.setTitle(translate('OpenLP.GeneralTab', 'Application Settings'))
self.save_check_service_check_box.setText(translate('OpenLP.GeneralTab',
'Prompt to save before starting a new service'))
'Prompt to save before starting a new service'))
self.auto_unblank_check_box.setText(translate('OpenLP.GeneralTab', 'Unblank display when adding new live item'))
self.auto_preview_check_box.setText(translate('OpenLP.GeneralTab', 'Automatically preview next item in service'))
self.timeout_label.setText(translate('OpenLP.GeneralTab', 'Timed slide interval:'))
@ -248,8 +248,8 @@ class GeneralTab(SettingsTab):
settings.beginGroup(self.settings_section)
self.monitor_combo_box.clear()
self.monitor_combo_box.addItems(self.screens.get_screen_list())
monitorNumber = settings.value('monitor')
self.monitor_combo_box.setCurrentIndex(monitorNumber)
monitor_number = settings.value('monitor')
self.monitor_combo_box.setCurrentIndex(monitor_number)
self.number_edit.setText(settings.value('ccli number'))
self.username_edit.setText(settings.value('songselect username'))
self.password_edit.setText(settings.value('songselect password'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -75,9 +75,9 @@ class ListPreviewWidget(QtGui.QTableWidget):
self.resizeRowsToContents()
else:
# Sort out image heights.
for framenumber in range(len(self.service_item.get_frames())):
for frame_number in range(len(self.service_item.get_frames())):
height = self.viewport().width() // self.screen_ratio
self.setRowHeight(framenumber, height)
self.setRowHeight(frame_number, height)
def screen_size_changed(self, screen_ratio):
"""
@ -87,7 +87,7 @@ class ListPreviewWidget(QtGui.QTableWidget):
self.screen_ratio = screen_ratio
self.__recalculate_layout()
def replace_service_item(self, service_item, width, slideNumber):
def replace_service_item(self, service_item, width, slide_number):
"""
Replaces the current preview items with the ones in service_item.
Displays the given slide.
@ -98,7 +98,7 @@ class ListPreviewWidget(QtGui.QTableWidget):
self.setColumnWidth(0, width)
row = 0
text = []
for framenumber, frame in enumerate(self.service_item.get_frames()):
for frame_number, frame in enumerate(self.service_item.get_frames()):
self.setRowCount(self.slide_count() + 1)
item = QtGui.QTableWidgetItem()
slide_height = 0
@ -124,19 +124,19 @@ class ListPreviewWidget(QtGui.QTableWidget):
else:
image = self.image_manager.get_image(frame['path'], ImageSource.ImagePlugin)
label.setPixmap(QtGui.QPixmap.fromImage(image))
self.setCellWidget(framenumber, 0, label)
self.setCellWidget(frame_number, 0, label)
slide_height = width // self.screen_ratio
row += 1
text.append(str(row))
self.setItem(framenumber, 0, item)
self.setItem(frame_number, 0, item)
if slide_height:
self.setRowHeight(framenumber, slide_height)
self.setRowHeight(frame_number, slide_height)
self.setVerticalHeaderLabels(text)
if self.service_item.is_text():
self.resizeRowsToContents()
self.setColumnWidth(0, self.viewport().width())
self.setFocus()
self.change_slide(slideNumber)
self.change_slide(slide_number)
def change_slide(self, slide):
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -215,7 +215,7 @@ class MainDisplay(Display):
service_item = ServiceItem()
service_item.bg_image_bytes = image_to_byte(self.initial_fame)
self.web_view.setHtml(build_html(service_item, self.screen, self.is_live, None,
plugins=self.plugin_manager.plugins))
plugins=self.plugin_manager.plugins))
self.__hideMouse()
log.debug('Finished MainDisplay setup')
@ -283,7 +283,7 @@ class MainDisplay(Display):
if not hasattr(self, 'service_item'):
return False
self.override['image'] = path
self.override['theme'] = self.service_item.themedata.background_filename
self.override['theme'] = self.service_item.theme_data.background_filename
self.image(path)
# Update the preview frame.
if self.is_live:
@ -343,7 +343,7 @@ class MainDisplay(Display):
if self.is_live and hasattr(self, 'service_item'):
# Wait for the fade to finish before geting the preview.
# Important otherwise preview will have incorrect text if at all!
if self.service_item.themedata and self.service_item.themedata.display_slide_transition:
if self.service_item.theme_data and self.service_item.theme_data.display_slide_transition:
while not self.frame.evaluateJavaScript('show_text_completed()'):
self.application.process_events()
# Wait for the webview to update before getting the preview.
@ -383,24 +383,24 @@ class MainDisplay(Display):
Registry().execute('video_background_replaced')
self.override = {}
# We have a different theme.
elif self.override['theme'] != service_item.themedata.background_filename:
elif self.override['theme'] != service_item.theme_data.background_filename:
Registry().execute('live_theme_changed')
self.override = {}
else:
# replace the background
background = self.image_manager.get_image_bytes(self.override['image'], ImageSource.ImagePlugin)
self.set_transparency(self.service_item.themedata.background_type ==
BackgroundType.to_string(BackgroundType.Transparent))
if self.service_item.themedata.background_filename:
self.set_transparency(self.service_item.theme_data.background_type ==
BackgroundType.to_string(BackgroundType.Transparent))
if self.service_item.theme_data.background_filename:
self.service_item.bg_image_bytes = self.image_manager.get_image_bytes(
self.service_item.themedata.background_filename, ImageSource.Theme
self.service_item.theme_data.background_filename, ImageSource.Theme
)
if image_path:
image_bytes = self.image_manager.get_image_bytes(image_path, ImageSource.ImagePlugin)
else:
image_bytes = None
html = build_html(self.service_item, self.screen, self.is_live, background, image_bytes,
plugins=self.plugin_manager.plugins)
plugins=self.plugin_manager.plugins)
log.debug('buildHtml - pre setHtml')
self.web_view.setHtml(html)
log.debug('buildHtml - post setHtml')
@ -535,7 +535,7 @@ class AudioPlayer(QtCore.QObject):
"""
log.debug('AudioPlayer Initialisation started')
super(AudioPlayer, self).__init__(parent)
self.currentIndex = -1
self.current_index = -1
self.playlist = []
self.repeat = False
self.media_object = Phonon.MediaObject()
@ -558,9 +558,9 @@ class AudioPlayer(QtCore.QObject):
Just before the audio player finishes the current track, queue the next
item in the playlist, if there is one.
"""
self.currentIndex += 1
if len(self.playlist) > self.currentIndex:
self.media_object.enqueue(self.playlist[self.currentIndex])
self.current_index += 1
if len(self.playlist) > self.current_index:
self.media_object.enqueue(self.playlist[self.current_index])
def on_finished(self):
"""
@ -570,7 +570,7 @@ class AudioPlayer(QtCore.QObject):
log.debug('Repeat is enabled... here we go again!')
self.media_object.clearQueue()
self.media_object.clear()
self.currentIndex = -1
self.current_index = -1
self.play()
def connectVolumeSlider(self, slider):
@ -583,7 +583,7 @@ class AudioPlayer(QtCore.QObject):
"""
Reset the audio player, clearing the playlist and the queue.
"""
self.currentIndex = -1
self.current_index = -1
self.playlist = []
self.stop()
self.media_object.clear()
@ -593,7 +593,7 @@ class AudioPlayer(QtCore.QObject):
We want to play the file so start it
"""
log.debug('AudioPlayer.play() called')
if self.currentIndex == -1:
if self.current_index == -1:
self.on_about_to_finish()
self.media_object.play()
@ -611,43 +611,43 @@ class AudioPlayer(QtCore.QObject):
log.debug('AudioPlayer.stop() called')
self.media_object.stop()
def add_to_playlist(self, filenames):
def add_to_playlist(self, file_names):
"""
Add another file to the playlist.
``filenames``
``file_names``
A list with files to be added to the playlist.
"""
if not isinstance(filenames, list):
filenames = [filenames]
self.playlist.extend(list(map(Phonon.MediaSource, filenames)))
if not isinstance(file_names, list):
file_names = [file_names]
self.playlist.extend(list(map(Phonon.MediaSource, file_names)))
def next(self):
"""
Skip forward to the next track in the list
"""
if not self.repeat and self.currentIndex + 1 >= len(self.playlist):
if not self.repeat and self.current_index + 1 >= len(self.playlist):
return
isPlaying = self.media_object.state() == Phonon.PlayingState
self.currentIndex += 1
if self.repeat and self.currentIndex == len(self.playlist):
self.currentIndex = 0
is_playing = self.media_object.state() == Phonon.PlayingState
self.current_index += 1
if self.repeat and self.current_index == len(self.playlist):
self.current_index = 0
self.media_object.clearQueue()
self.media_object.clear()
self.media_object.enqueue(self.playlist[self.currentIndex])
if isPlaying:
self.media_object.enqueue(self.playlist[self.current_index])
if is_playing:
self.media_object.play()
def go_to(self, index):
"""
Go to a particular track in the list
"""
isPlaying = self.media_object.state() == Phonon.PlayingState
is_playing = self.media_object.state() == Phonon.PlayingState
self.media_object.clearQueue()
self.media_object.clear()
self.currentIndex = index
self.media_object.enqueue(self.playlist[self.currentIndex])
if isPlaying:
self.current_index = index
self.media_object.enqueue(self.playlist[self.current_index])
if is_playing:
self.media_object.play()
def connectSlot(self, signal, slot):

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Eric Ludin, Edwin Lunando, Brian T. Meyer, #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Eric Ludin, Edwin Lunando, Brian T. Meyer, #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -45,38 +45,38 @@ class Ui_PluginViewDialog(object):
"""
pluginViewDialog.setObjectName('pluginViewDialog')
pluginViewDialog.setWindowModality(QtCore.Qt.ApplicationModal)
self.pluginLayout = QtGui.QVBoxLayout(pluginViewDialog)
self.pluginLayout.setObjectName('pluginLayout')
self.listLayout = QtGui.QHBoxLayout()
self.listLayout.setObjectName('listLayout')
self.pluginListWidget = QtGui.QListWidget(pluginViewDialog)
self.pluginListWidget.setObjectName('pluginListWidget')
self.listLayout.addWidget(self.pluginListWidget)
self.pluginInfoGroupBox = QtGui.QGroupBox(pluginViewDialog)
self.pluginInfoGroupBox.setObjectName('pluginInfoGroupBox')
self.pluginInfoLayout = QtGui.QFormLayout(self.pluginInfoGroupBox)
self.pluginInfoLayout.setObjectName('pluginInfoLayout')
self.statusLabel = QtGui.QLabel(self.pluginInfoGroupBox)
self.statusLabel.setObjectName('statusLabel')
self.statusComboBox = QtGui.QComboBox(self.pluginInfoGroupBox)
self.statusComboBox.addItems(('', ''))
self.statusComboBox.setObjectName('statusComboBox')
self.pluginInfoLayout.addRow(self.statusLabel, self.statusComboBox)
self.versionLabel = QtGui.QLabel(self.pluginInfoGroupBox)
self.versionLabel.setObjectName('versionLabel')
self.versionNumberLabel = QtGui.QLabel(self.pluginInfoGroupBox)
self.versionNumberLabel.setObjectName('versionNumberLabel')
self.pluginInfoLayout.addRow(self.versionLabel, self.versionNumberLabel)
self.aboutLabel = QtGui.QLabel(self.pluginInfoGroupBox)
self.aboutLabel.setObjectName('aboutLabel')
self.aboutTextBrowser = QtGui.QTextBrowser(self.pluginInfoGroupBox)
self.aboutTextBrowser.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse)
self.aboutTextBrowser.setObjectName('aboutTextBrowser')
self.pluginInfoLayout.addRow(self.aboutLabel, self.aboutTextBrowser)
self.listLayout.addWidget(self.pluginInfoGroupBox)
self.pluginLayout.addLayout(self.listLayout)
self.plugin_layout = QtGui.QVBoxLayout(pluginViewDialog)
self.plugin_layout.setObjectName('plugin_layout')
self.list_layout = QtGui.QHBoxLayout()
self.list_layout.setObjectName('list_layout')
self.plugin_list_widget = QtGui.QListWidget(pluginViewDialog)
self.plugin_list_widget.setObjectName('plugin_list_widget')
self.list_layout.addWidget(self.plugin_list_widget)
self.plugin_info_group_box = QtGui.QGroupBox(pluginViewDialog)
self.plugin_info_group_box.setObjectName('plugin_info_group_box')
self.plugin_info_layout = QtGui.QFormLayout(self.plugin_info_group_box)
self.plugin_info_layout.setObjectName('plugin_info_layout')
self.status_label = QtGui.QLabel(self.plugin_info_group_box)
self.status_label.setObjectName('status_label')
self.status_combo_box = QtGui.QComboBox(self.plugin_info_group_box)
self.status_combo_box.addItems(('', ''))
self.status_combo_box.setObjectName('status_combo_box')
self.plugin_info_layout.addRow(self.status_label, self.status_combo_box)
self.version_label = QtGui.QLabel(self.plugin_info_group_box)
self.version_label.setObjectName('version_label')
self.version_number_label = QtGui.QLabel(self.plugin_info_group_box)
self.version_number_label.setObjectName('version_number_label')
self.plugin_info_layout.addRow(self.version_label, self.version_number_label)
self.about_label = QtGui.QLabel(self.plugin_info_group_box)
self.about_label.setObjectName('about_label')
self.about_text_browser = QtGui.QTextBrowser(self.plugin_info_group_box)
self.about_text_browser.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse)
self.about_text_browser.setObjectName('aboutTextBrowser')
self.plugin_info_layout.addRow(self.about_label, self.about_text_browser)
self.list_layout.addWidget(self.plugin_info_group_box)
self.plugin_layout.addLayout(self.list_layout)
self.button_box = create_button_box(pluginViewDialog, 'button_box', ['ok'])
self.pluginLayout.addWidget(self.button_box)
self.plugin_layout.addWidget(self.button_box)
self.retranslateUi(pluginViewDialog)
def retranslateUi(self, pluginViewDialog):
@ -84,9 +84,9 @@ class Ui_PluginViewDialog(object):
Translate the UI on the fly
"""
pluginViewDialog.setWindowTitle(translate('OpenLP.PluginForm', 'Plugin List'))
self.pluginInfoGroupBox.setTitle(translate('OpenLP.PluginForm', 'Plugin Details'))
self.versionLabel.setText('%s:' % UiStrings().Version)
self.aboutLabel.setText('%s:' % UiStrings().About)
self.statusLabel.setText(translate('OpenLP.PluginForm', 'Status:'))
self.statusComboBox.setItemText(0, translate('OpenLP.PluginForm', 'Active'))
self.statusComboBox.setItemText(1, translate('OpenLP.PluginForm', 'Inactive'))
self.plugin_info_group_box.setTitle(translate('OpenLP.PluginForm', 'Plugin Details'))
self.version_label.setText('%s:' % UiStrings().Version)
self.about_label.setText('%s:' % UiStrings().About)
self.status_label.setText(translate('OpenLP.PluginForm', 'Status:'))
self.status_combo_box.setItemText(0, translate('OpenLP.PluginForm', 'Active'))
self.status_combo_box.setItemText(1, translate('OpenLP.PluginForm', 'Inactive'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -50,26 +50,26 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog):
Constructor
"""
super(PluginForm, self).__init__(parent)
self.activePlugin = None
self.programaticChange = False
self.active_plugin = None
self.programatic_change = False
self.setupUi(self)
self.load()
self._clearDetails()
self._clear_details()
# Right, now let's put some signals and slots together!
self.pluginListWidget.itemSelectionChanged.connect(self.onPluginListWidgetSelectionChanged)
self.statusComboBox.currentIndexChanged.connect(self.onStatusComboBoxChanged)
self.plugin_list_widget.itemSelectionChanged.connect(self.on_plugin_list_widget_selection_changed)
self.status_combo_box.currentIndexChanged.connect(self.on_status_combo_box_changed)
def load(self):
"""
Load the plugin details into the screen
"""
self.pluginListWidget.clear()
self.programaticChange = True
self._clearDetails()
self.programaticChange = True
pluginListWidth = 0
self.plugin_list_widget.clear()
self.programatic_change = True
self._clear_details()
self.programatic_change = True
plugin_list_width = 0
for plugin in self.plugin_manager.plugins:
item = QtGui.QListWidgetItem(self.pluginListWidget)
item = QtGui.QListWidgetItem(self.plugin_list_widget)
# We do this just to make 100% sure the status is an integer as
# sometimes when it's loaded from the config, it isn't cast to int.
plugin.status = int(plugin.status)
@ -85,76 +85,76 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog):
# If the plugin has an icon, set it!
if plugin.icon:
item.setIcon(plugin.icon)
self.pluginListWidget.addItem(item)
pluginListWidth = max(pluginListWidth, self.fontMetrics().width(
self.plugin_list_widget.addItem(item)
plugin_list_width = max(plugin_list_width, self.fontMetrics().width(
translate('OpenLP.PluginForm', '%s (Inactive)') % plugin.name_strings['singular']))
self.pluginListWidget.setFixedWidth(pluginListWidth + self.pluginListWidget.iconSize().width() + 48)
self.plugin_list_widget.setFixedWidth(plugin_list_width + self.plugin_list_widget.iconSize().width() + 48)
def _clearDetails(self):
def _clear_details(self):
"""
Clear the plugin details widgets
"""
self.statusComboBox.setCurrentIndex(-1)
self.versionNumberLabel.setText('')
self.aboutTextBrowser.setHtml('')
self.statusComboBox.setEnabled(False)
self.status_combo_box.setCurrentIndex(-1)
self.version_number_label.setText('')
self.about_text_browser.setHtml('')
self.status_combo_box.setEnabled(False)
def _setDetails(self):
def _set_details(self):
"""
Set the details of the currently selected plugin
"""
log.debug('PluginStatus: %s', str(self.activePlugin.status))
self.versionNumberLabel.setText(self.activePlugin.version)
self.aboutTextBrowser.setHtml(self.activePlugin.about())
self.programaticChange = True
log.debug('PluginStatus: %s', str(self.active_plugin.status))
self.version_number_label.setText(self.active_plugin.version)
self.about_text_browser.setHtml(self.active_plugin.about())
self.programatic_change = True
status = PluginStatus.Active
if self.activePlugin.status == PluginStatus.Active:
if self.active_plugin.status == PluginStatus.Active:
status = PluginStatus.Inactive
self.statusComboBox.setCurrentIndex(status)
self.statusComboBox.setEnabled(True)
self.programaticChange = False
self.status_combo_box.setCurrentIndex(status)
self.status_combo_box.setEnabled(True)
self.programatic_change = False
def onPluginListWidgetSelectionChanged(self):
def on_plugin_list_widget_selection_changed(self):
"""
If the selected plugin changes, update the form
"""
if self.pluginListWidget.currentItem() is None:
self._clearDetails()
if self.plugin_list_widget.currentItem() is None:
self._clear_details()
return
plugin_name_singular = self.pluginListWidget.currentItem().text().split('(')[0][:-1]
self.activePlugin = None
plugin_name_singular = self.plugin_list_widget.currentItem().text().split('(')[0][:-1]
self.active_plugin = None
for plugin in self.plugin_manager.plugins:
if plugin.status != PluginStatus.Disabled:
if plugin.name_strings['singular'] == plugin_name_singular:
self.activePlugin = plugin
self.active_plugin = plugin
break
if self.activePlugin:
self._setDetails()
if self.active_plugin:
self._set_details()
else:
self._clearDetails()
self._clear_details()
def onStatusComboBoxChanged(self, status):
def on_status_combo_box_changed(self, status):
"""
If the status of a plugin is altered, apply the change
"""
if self.programaticChange or status == PluginStatus.Disabled:
if self.programatic_change or status == PluginStatus.Disabled:
return
if status == PluginStatus.Inactive:
self.application.set_busy_cursor()
self.activePlugin.toggle_status(PluginStatus.Active)
self.active_plugin.toggle_status(PluginStatus.Active)
self.application.set_normal_cursor()
self.activePlugin.app_startup()
self.active_plugin.app_startup()
else:
self.activePlugin.toggle_status(PluginStatus.Inactive)
self.active_plugin.toggle_status(PluginStatus.Inactive)
status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
if self.activePlugin.status == PluginStatus.Active:
if self.active_plugin.status == PluginStatus.Active:
status_text = translate('OpenLP.PluginForm', '%s (Active)')
elif self.activePlugin.status == PluginStatus.Inactive:
elif self.active_plugin.status == PluginStatus.Inactive:
status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
elif self.activePlugin.status == PluginStatus.Disabled:
elif self.active_plugin.status == PluginStatus.Disabled:
status_text = translate('OpenLP.PluginForm', '%s (Disabled)')
self.pluginListWidget.currentItem().setText(
status_text % self.activePlugin.name_strings['singular'])
self.plugin_list_widget.currentItem().setText(
status_text % self.active_plugin.name_strings['singular'])
def _get_plugin_manager(self):
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -65,7 +65,7 @@ class Ui_PrintServiceDialog(object):
self.toolbar.setIconSize(QtCore.QSize(22, 22))
self.toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.print_button = self.toolbar.addAction(build_icon(':/general/general_print.png'),
translate('OpenLP.PrintServiceForm', 'Print'))
translate('OpenLP.PrintServiceForm', 'Print'))
self.options_button = QtGui.QToolButton(self.toolbar)
self.options_button.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.options_button.setIcon(build_icon(':/system/system_configure.png'))
@ -73,9 +73,9 @@ class Ui_PrintServiceDialog(object):
self.toolbar.addWidget(self.options_button)
self.toolbar.addSeparator()
self.plain_copy = self.toolbar.addAction(build_icon(':/system/system_edit_copy.png'),
translate('OpenLP.PrintServiceForm', 'Copy'))
translate('OpenLP.PrintServiceForm', 'Copy'))
self.html_copy = self.toolbar.addAction(build_icon(':/system/system_edit_copy.png'),
translate('OpenLP.PrintServiceForm', 'Copy as HTML'))
translate('OpenLP.PrintServiceForm', 'Copy as HTML'))
self.toolbar.addSeparator()
self.zoom_in_button = QtGui.QToolButton(self.toolbar)
self.zoom_in_button.setIcon(build_icon(':/general/general_zoom_in.png'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -29,7 +29,6 @@
"""
The actual print service dialog
"""
import cgi
import datetime
import os
@ -175,7 +174,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog):
custom_css = DEFAULT_CSS
self._add_element('style', custom_css, html_data.head, attribute=('type', 'text/css'))
self._add_element('body', parent=html_data)
self._add_element('h1', cgi.escape(self.title_line_edit.text()), html_data.body, classId='serviceTitle')
self._add_element('h1', html.escape(self.title_line_edit.text()), html_data.body, classId='serviceTitle')
for index, item in enumerate(self.service_manager.service_items):
self._add_preview_item(html_data.body, item['service_item'], index)
# Add the custom service notes:
@ -183,7 +182,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog):
div = self._add_element('div', parent=html_data.body, classId='customNotes')
self._add_element(
'span', translate('OpenLP.ServiceManager', 'Custom Service Notes: '), div, classId='customNotesTitle')
self._add_element('span', cgi.escape(self.footer_text_edit.toPlainText()), div, classId='customNotesText')
self._add_element('span', html.escape(self.footer_text_edit.toPlainText()), div, classId='customNotesText')
self.document.setHtml(html.tostring(html_data).decode())
self.preview_widget.updatePreview()
@ -195,7 +194,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog):
# Add the title of the service item.
item_title = self._add_element('h2', parent=div, classId='itemTitle')
self._add_element('img', parent=item_title, attribute=('src', item.icon))
self._add_element('span', '&nbsp;' + cgi.escape(item.get_display_title()), item_title)
self._add_element('span', '&nbsp;' + html.escape(item.get_display_title()), item_title)
if self.slide_text_check_box.isChecked():
# Add the text of the service item.
if item.is_text():
@ -219,14 +218,14 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog):
foot_text = item.foot_text
foot_text = foot_text.partition('<br>')[2]
if foot_text:
foot_text = cgi.escape(foot_text.replace('<br>', '\n'))
foot_text = html.escape(foot_text.replace('<br>', '\n'))
self._add_element('div', foot_text.replace('\n', '<br>'), parent=div, classId='itemFooter')
# Add service items' notes.
if self.notes_check_box.isChecked():
if item.notes:
p = self._add_element('div', classId='itemNotes', parent=div)
self._add_element('span', translate('OpenLP.ServiceManager', 'Notes: '), p, classId='itemNotesTitle')
self._add_element('span', cgi.escape(item.notes).replace('\n', '<br>'), p, classId='itemNotesText')
self._add_element('span', html.escape(item.notes).replace('\n', '<br>'), p, classId='itemNotesText')
# Add play length of media files.
if item.is_media() and self.meta_data_check_box.isChecked():
tme = item.media_length

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -55,13 +55,13 @@ class Ui_ServiceItemEditDialog(object):
self.button_layout = QtGui.QVBoxLayout()
self.button_layout.setObjectName('button_layout')
self.delete_button = create_button(serviceItemEditDialog, 'deleteButton', role='delete',
click=serviceItemEditDialog.on_delete_button_clicked)
click=serviceItemEditDialog.on_delete_button_clicked)
self.button_layout.addWidget(self.delete_button)
self.button_layout.addStretch()
self.up_button = create_button(serviceItemEditDialog, 'up_button', role='up',
click=serviceItemEditDialog.on_up_button_clicked)
click=serviceItemEditDialog.on_up_button_clicked)
self.down_button = create_button(serviceItemEditDialog, 'down_button', role='down',
click=serviceItemEditDialog.on_down_button_clicked)
click=serviceItemEditDialog.on_down_button_clicked)
self.button_layout.addWidget(self.up_button)
self.button_layout.addWidget(self.down_button)
self.dialog_layout.addLayout(self.button_layout, 0, 1)

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -29,7 +29,7 @@
"""
The service manager sets up, loads, saves and manages services.
"""
import cgi
import html
import logging
import os
import shutil
@ -55,12 +55,12 @@ class ServiceManagerList(QtGui.QTreeWidget):
"""
Set up key bindings and mouse behaviour for the service list
"""
def __init__(self, serviceManager, parent=None):
def __init__(self, service_manager, parent=None):
"""
Constructor
"""
super(ServiceManagerList, self).__init__(parent)
self.serviceManager = serviceManager
self.service_manager = service_manager
def keyPressEvent(self, event):
"""
@ -69,13 +69,13 @@ class ServiceManagerList(QtGui.QTreeWidget):
if isinstance(event, QtGui.QKeyEvent):
# here accept the event and do something
if event.key() == QtCore.Qt.Key_Up:
self.serviceManager.on_move_selection_up()
self.service_manager.on_move_selection_up()
event.accept()
elif event.key() == QtCore.Qt.Key_Down:
self.serviceManager.on_move_selection_down()
self.service_manager.on_move_selection_down()
event.accept()
elif event.key() == QtCore.Qt.Key_Delete:
self.serviceManager.onDeleteFromService()
self.service_manager.onDeleteFromService()
event.accept()
event.ignore()
else:
@ -110,14 +110,15 @@ class ServiceManagerDialog(object):
# Create the top toolbar
self.toolbar = OpenLPToolbar(self)
self.toolbar.add_toolbar_action('newService', text=UiStrings().NewService, icon=':/general/general_new.png',
tooltip=UiStrings().CreateService, triggers=self.on_new_service_clicked)
tooltip=UiStrings().CreateService, triggers=self.on_new_service_clicked)
self.toolbar.add_toolbar_action('openService', text=UiStrings().OpenService,
icon=':/general/general_open.png',
tooltip=translate('OpenLP.ServiceManager', 'Load an existing service.'),
triggers=self.on_load_service_clicked)
icon=':/general/general_open.png',
tooltip=translate('OpenLP.ServiceManager', 'Load an existing service.'),
triggers=self.on_load_service_clicked)
self.toolbar.add_toolbar_action('saveService', text=UiStrings().SaveService,
icon=':/general/general_save.png',
tooltip=translate('OpenLP.ServiceManager', 'Save this service.'), triggers=self.decide_save_method)
icon=':/general/general_save.png',
tooltip=translate('OpenLP.ServiceManager', 'Save this service.'),
triggers=self.decide_save_method)
self.toolbar.addSeparator()
self.theme_label = QtGui.QLabel('%s:' % UiStrings().Theme, self)
self.theme_label.setMargin(3)
@ -153,19 +154,19 @@ class ServiceManagerDialog(object):
self.order_toolbar = OpenLPToolbar(self)
action_list = ActionList.get_instance()
action_list.add_category(UiStrings().Service, CategoryOrder.standard_toolbar)
self.service_manager_list.moveTop = self.order_toolbar.add_toolbar_action('moveTop',
self.service_manager_list.move_top = self.order_toolbar.add_toolbar_action('moveTop',
text=translate('OpenLP.ServiceManager', 'Move to &top'), icon=':/services/service_top.png',
tooltip=translate('OpenLP.ServiceManager', 'Move item to the top of the service.'),
can_shortcuts=True, category=UiStrings().Service, triggers=self.onServiceTop)
self.service_manager_list.moveUp = self.order_toolbar.add_toolbar_action('moveUp',
self.service_manager_list.move_up = self.order_toolbar.add_toolbar_action('moveUp',
text=translate('OpenLP.ServiceManager', 'Move &up'), icon=':/services/service_up.png',
tooltip=translate('OpenLP.ServiceManager', 'Move item up one position in the service.'),
can_shortcuts=True, category=UiStrings().Service, triggers=self.onServiceUp)
self.service_manager_list.moveDown = self.order_toolbar.add_toolbar_action('moveDown',
self.service_manager_list.move_down = self.order_toolbar.add_toolbar_action('moveDown',
text=translate('OpenLP.ServiceManager', 'Move &down'), icon=':/services/service_down.png',
tooltip=translate('OpenLP.ServiceManager', 'Move item down one position in the service.'),
can_shortcuts=True, category=UiStrings().Service, triggers=self.onServiceDown)
self.service_manager_list.moveBottom = self.order_toolbar.add_toolbar_action('moveBottom',
self.service_manager_list.move_bottom = self.order_toolbar.add_toolbar_action('moveBottom',
text=translate('OpenLP.ServiceManager', 'Move to &bottom'), icon=':/services/service_bottom.png',
tooltip=translate('OpenLP.ServiceManager', 'Move item to the end of the service.'),
can_shortcuts=True, category=UiStrings().Service, triggers=self.onServiceEnd)
@ -188,11 +189,11 @@ class ServiceManagerDialog(object):
self.service_manager_list.expand = self.order_toolbar.add_toolbar_action('expand', can_shortcuts=True,
text=translate('OpenLP.ServiceManager', '&Expand all'), icon=':/services/service_expand_all.png',
tooltip=translate('OpenLP.ServiceManager', 'Expand all the service items.'),
category=UiStrings().Service, triggers=self.onExpandAll)
category=UiStrings().Service, triggers=self.on_expand_all)
self.service_manager_list.collapse = self.order_toolbar.add_toolbar_action('collapse', can_shortcuts=True,
text=translate('OpenLP.ServiceManager', '&Collapse all'), icon=':/services/service_collapse_all.png',
tooltip=translate('OpenLP.ServiceManager', 'Collapse all the service items.'),
category=UiStrings().Service, triggers=self.onCollapseAll)
category=UiStrings().Service, triggers=self.on_collapse_all)
self.order_toolbar.addSeparator()
self.service_manager_list.make_live = self.order_toolbar.add_toolbar_action('make_live', can_shortcuts=True,
text=translate('OpenLP.ServiceManager', 'Go Live'), icon=':/general/general_live.png',
@ -207,30 +208,35 @@ class ServiceManagerDialog(object):
self.service_manager_list.itemExpanded.connect(self.expanded)
# Last little bits of setting up
self.service_theme = Settings().value(self.main_window.service_manager_settings_section + '/service theme')
self.servicePath = AppLocation.get_section_data_path('servicemanager')
self.service_path = AppLocation.get_section_data_path('servicemanager')
# build the drag and drop context menu
self.dndMenu = QtGui.QMenu()
self.newAction = self.dndMenu.addAction(translate('OpenLP.ServiceManager', '&Add New Item'))
self.newAction.setIcon(build_icon(':/general/general_edit.png'))
self.addToAction = self.dndMenu.addAction(translate('OpenLP.ServiceManager', '&Add to Selected Item'))
self.addToAction.setIcon(build_icon(':/general/general_edit.png'))
self.dnd_menu = QtGui.QMenu()
self.new_action = self.dnd_menu.addAction(translate('OpenLP.ServiceManager', '&Add New Item'))
self.new_action.setIcon(build_icon(':/general/general_edit.png'))
self.add_to_action = self.dnd_menu.addAction(translate('OpenLP.ServiceManager', '&Add to Selected Item'))
self.add_to_action.setIcon(build_icon(':/general/general_edit.png'))
# build the context menu
self.menu = QtGui.QMenu()
self.edit_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Edit Item'),
icon=':/general/general_edit.png', triggers=self.remote_edit)
icon=':/general/general_edit.png', triggers=self.remote_edit)
self.maintain_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Reorder Item'),
icon=':/general/general_edit.png', triggers=self.on_service_item_edit_form)
icon=':/general/general_edit.png',
triggers=self.on_service_item_edit_form)
self.notes_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Notes'),
icon=':/services/service_notes.png', triggers=self.on_service_item_note_form)
icon=':/services/service_notes.png',
triggers=self.on_service_item_note_form)
self.time_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Start Time'),
icon=':/media/media_time.png', triggers=self.on_start_time_form)
icon=':/media/media_time.png', triggers=self.on_start_time_form)
self.auto_start_action = create_widget_action(self.menu, text='',
icon=':/media/auto-start_active.png', triggers=self.on_auto_start)
icon=':/media/auto-start_active.png',
triggers=self.on_auto_start)
# Add already existing delete action to the menu.
self.menu.addAction(self.service_manager_list.delete)
self.create_custom_action = create_widget_action(self.menu,
text=translate('OpenLP.ServiceManager', 'Create New &Custom Slide'),
icon=':/general/general_edit.png', triggers=self.create_custom)
text=translate('OpenLP.ServiceManager', 'Create New &Custom '
'Slide'),
icon=':/general/general_edit.png',
triggers=self.create_custom)
self.menu.addSeparator()
# Add AutoPlay menu actions
self.auto_play_slides_menu = QtGui.QMenu(translate('OpenLP.ServiceManager', '&Auto play slides'))
@ -238,38 +244,41 @@ class ServiceManagerDialog(object):
auto_play_slides_group = QtGui.QActionGroup(self.auto_play_slides_menu)
auto_play_slides_group.setExclusive(True)
self.auto_play_slides_loop = create_widget_action(self.auto_play_slides_menu,
text=translate('OpenLP.ServiceManager', 'Auto play slides &Loop'),
checked=False, triggers=self.toggle_auto_play_slides_loop)
text=translate('OpenLP.ServiceManager', 'Auto play slides '
'&Loop'),
checked=False, triggers=self.toggle_auto_play_slides_loop)
auto_play_slides_group.addAction(self.auto_play_slides_loop)
self.auto_play_slides_once = create_widget_action(self.auto_play_slides_menu,
text=translate('OpenLP.ServiceManager', 'Auto play slides &Once'),
checked=False, triggers=self.toggle_auto_play_slides_once)
text=translate('OpenLP.ServiceManager', 'Auto play slides '
'&Once'),
checked=False, triggers=self.toggle_auto_play_slides_once)
auto_play_slides_group.addAction(self.auto_play_slides_once)
self.auto_play_slides_menu.addSeparator()
self.timed_slide_interval = create_widget_action(self.auto_play_slides_menu,
text=translate('OpenLP.ServiceManager', '&Delay between slides'),
triggers=self.on_timed_slide_interval)
text=translate('OpenLP.ServiceManager', '&Delay between '
'slides'),
triggers=self.on_timed_slide_interval)
self.menu.addSeparator()
self.preview_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', 'Show &Preview'),
icon=':/general/general_preview.png', triggers=self.make_preview)
icon=':/general/general_preview.png', triggers=self.make_preview)
# Add already existing make live action to the menu.
self.menu.addAction(self.service_manager_list.make_live)
self.menu.addSeparator()
self.theme_menu = QtGui.QMenu(translate('OpenLP.ServiceManager', '&Change Item Theme'))
self.menu.addMenu(self.theme_menu)
self.service_manager_list.addActions(
[self.service_manager_list.moveDown,
self.service_manager_list.moveUp,
[self.service_manager_list.move_down,
self.service_manager_list.move_up,
self.service_manager_list.make_live,
self.service_manager_list.moveTop,
self.service_manager_list.moveBottom,
self.service_manager_list.move_top,
self.service_manager_list.move_bottom,
self.service_manager_list.up,
self.service_manager_list.down,
self.service_manager_list.expand,
self.service_manager_list.collapse
])
Registry().register_function('theme_update_list', self.update_theme_list)
Registry().register_function('config_screen_changed', self.regenerate_service_Items)
Registry().register_function('config_screen_changed', self.regenerate_service_items)
Registry().register_function('theme_update_global', self.theme_change)
Registry().register_function('mediaitem_suffix_reset', self.reset_supported_suffixes)
@ -408,7 +417,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
else:
file_name = load_file
Settings().setValue(self.main_window.service_manager_settings_section + '/last directory',
split_filename(file_name)[0])
split_filename(file_name)[0])
self.load_file(file_name)
def save_modified_service(self):
@ -416,10 +425,12 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
Check to see if a service needs to be saved.
"""
return QtGui.QMessageBox.question(self.main_window,
translate('OpenLP.ServiceManager', 'Modified Service'),
translate('OpenLP.ServiceManager',
'The current service has been modified. Would you like to save this service?'),
QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save)
translate('OpenLP.ServiceManager', 'Modified Service'),
translate('OpenLP.ServiceManager',
'The current service has been modified. Would you like to save '
'this service?'),
QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard |
QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save)
def on_recent_service_clicked(self):
"""
@ -484,10 +495,11 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.application.set_normal_cursor()
title = translate('OpenLP.ServiceManager', 'Service File(s) Missing')
message = translate('OpenLP.ServiceManager',
'The following file(s) in the service are missing:\n\t%s\n\n'
'These files will be removed if you continue to save.') % "\n\t".join(missing_list)
'The following file(s) in the service are missing:\n\t%s\n\n'
'These files will be removed if you continue to save.') % "\n\t".join(missing_list)
answer = QtGui.QMessageBox.critical(self, title, message,
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel))
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok |
QtGui.QMessageBox.Cancel))
if answer == QtGui.QMessageBox.Cancel:
self.main_window.finished_progress_bar()
return False
@ -529,8 +541,8 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
if audio_from.startswith('audio'):
# When items are saved, they get new unique_identifier. Let's copy the file to the new location.
# Unused files can be ignored, OpenLP automatically cleans up the service manager dir on exit.
audio_from = os.path.join(self.servicePath, audio_from)
save_file = os.path.join(self.servicePath, audio_to)
audio_from = os.path.join(self.service_path, audio_from)
save_file = os.path.join(self.service_path, audio_to)
save_path = os.path.split(save_file)[0]
check_directory_exists(save_path)
if not os.path.exists(save_file):
@ -539,8 +551,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
except IOError:
log.exception('Failed to save service to disk: %s', temp_file_name)
self.main_window.error_message(translate('OpenLP.ServiceManager', 'Error Saving File'),
translate('OpenLP.ServiceManager', 'There was an error saving your file.')
)
translate('OpenLP.ServiceManager', 'There was an error saving your file.'))
success = False
finally:
if zip_file:
@ -589,15 +600,13 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
success = True
self.main_window.increment_progress_bar()
try:
zip_file = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED,
True)
zip_file = zipfile.ZipFile(temp_file_name, 'w', zipfile.ZIP_STORED, True)
# First we add service contents.
zip_file.writestr(service_file_name, service_content)
except IOError:
log.exception('Failed to save service to disk: %s', temp_file_name)
self.main_window.error_message(translate('OpenLP.ServiceManager', 'Error Saving File'),
translate('OpenLP.ServiceManager', 'There was an error saving your file.')
)
translate('OpenLP.ServiceManager', 'There was an error saving your file.'))
success = False
finally:
if zip_file:
@ -642,11 +651,13 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
# the long term.
if self._file_name.endswith('oszl') or self.service_has_all_original_files:
file_name = QtGui.QFileDialog.getSaveFileName(self.main_window, UiStrings().SaveService, path,
translate('OpenLP.ServiceManager',
'OpenLP Service Files (*.osz);; OpenLP Service Files - lite (*.oszl)'))
translate('OpenLP.ServiceManager',
'OpenLP Service Files (*.osz);; OpenLP Service Files - lite '
'(*.oszl)'))
else:
file_name = QtGui.QFileDialog.getSaveFileName(self.main_window, UiStrings().SaveService, path,
translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz);;'))
translate('OpenLP.ServiceManager', 'OpenLP Service Files (*'
'.osz);;'))
if not file_name:
return False
if os.path.splitext(file_name)[1] == '':
@ -688,24 +699,24 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
except UnicodeDecodeError:
log.exception('file_name "%s" is not valid UTF-8' % zip_info.file_name)
critical_error_message_box(message=translate('OpenLP.ServiceManager',
'File is not a valid service.\n The content encoding is not UTF-8.'))
'File is not a valid service.\n The content encoding is not UTF-8.'))
continue
osfile = ucs_file.replace('/', os.path.sep)
if not osfile.startswith('audio'):
osfile = os.path.split(osfile)[1]
log.debug('Extract file: %s', osfile)
zip_info.filename = osfile
zip_file.extract(zip_info, self.servicePath)
if osfile.endswith('osj') or osfile.endswith('osd'):
p_file = os.path.join(self.servicePath, osfile)
os_file = ucs_file.replace('/', os.path.sep)
if not os_file.startswith('audio'):
os_file = os.path.split(os_file)[1]
log.debug('Extract file: %s', os_file)
zip_info.filename = os_file
zip_file.extract(zip_info, self.service_path)
if os_file.endswith('osj') or os_file.endswith('osd'):
p_file = os.path.join(self.service_path, os_file)
if 'p_file' in locals():
file_to = open(p_file, 'r')
if p_file.endswith('osj'):
items = json.load(file_to)
else:
critical_error_message_box(message=translate('OpenLP.ServiceManager',
'The service file you are trying to open is in an old format.\n '
'Please save it using OpenLP 2.0.2 or greater.'))
'The service file you are trying to open is in an old format.\n '
'Please save it using OpenLP 2.0.2 or greater.'))
return
file_to.close()
self.new_file()
@ -717,7 +728,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
if self._save_lite:
service_item.set_from_service(item)
else:
service_item.set_from_service(item, self.servicePath)
service_item.set_from_service(item, self.service_path)
service_item.validate_item(self.suffixes)
if service_item.is_capable(ItemCapabilities.OnLoadUpdate):
new_item = Registry().get(service_item.name).service_load(service_item)
@ -734,18 +745,18 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
except (IOError, NameError, zipfile.BadZipfile):
log.exception('Problem loading service file %s' % file_name)
critical_error_message_box(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:
if os.path.getsize(file_name) == 0:
log.exception('Service file is zero sized: %s' % file_name)
QtGui.QMessageBox.information(self, 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:
log.exception('Service file is cannot be extracted as zip: '
'%s' % file_name)
log.exception('Service file is cannot be extracted as zip: %s' % file_name)
QtGui.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Corrupt File'),
translate('OpenLP.ServiceManager',
'This file is either corrupt or it is not an OpenLP 2 service file.'))
translate('OpenLP.ServiceManager',
'This file is either corrupt or it is not an OpenLP 2 service file.'))
self.application.set_normal_cursor()
return
finally:
@ -757,7 +768,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.application.set_normal_cursor()
self.repaint_service_list(-1, -1)
def load_Last_file(self):
def load_last_file(self):
"""
Load the last service item from the service manager when the service was last closed. Can be blank if there was
no service present.
@ -893,8 +904,10 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
else:
timed_slide_interval = service_item.timed_slide_interval
timed_slide_interval, ok = QtGui.QInputDialog.getInteger(self, translate('OpenLP.ServiceManager',
'Input delay'), translate('OpenLP.ServiceManager', 'Delay between slides in seconds.'),
timed_slide_interval, 0, 180, 1)
'Input delay'),
translate('OpenLP.ServiceManager',
'Delay between slides in seconds.'),
timed_slide_interval, 0, 180, 1)
if ok:
service_item.timed_slide_interval = timed_slide_interval
if service_item.timed_slide_interval != 0 and not service_item.auto_play_slides_loop \
@ -921,7 +934,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.service_item_edit_form.set_service_item(self.service_items[item]['service_item'])
if self.service_item_edit_form.exec_():
self.add_service_item(self.service_item_edit_form.get_service_item(),
replace=True, expand=self.service_items[item]['expanded'])
replace=True, expand=self.service_items[item]['expanded'])
def preview_live(self, unique_identifier, row):
"""
@ -945,19 +958,19 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
"""
Called by the SlideController to select the next service item.
"""
if not self.service_manager_list.selectedItems():
if not self.service_manager_list.selected_items():
return
selected = self.service_manager_list.selectedItems()[0]
lookFor = 0
serviceIterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list)
while serviceIterator.value():
if lookFor == 1 and serviceIterator.value().parent() is None:
self.service_manager_list.setCurrentItem(serviceIterator.value())
selected = self.service_manager_list.selected_items()[0]
look_for = 0
service_iterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list)
while service_iterator.value():
if look_for == 1 and service_iterator.value().parent() is None:
self.service_manager_list.setCurrentItem(service_iterator.value())
self.make_live()
return
if serviceIterator.value() == selected:
lookFor = 1
serviceIterator += 1
if service_iterator.value() == selected:
look_for = 1
service_iterator += 1
def previous_item(self, last_slide=False):
"""
@ -967,31 +980,31 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
Is this the last slide in the service_item
"""
if not self.service_manager_list.selectedItems():
if not self.service_manager_list.selected_items():
return
selected = self.service_manager_list.selectedItems()[0]
prevItem = None
prevItemLastSlide = None
serviceIterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list)
while serviceIterator.value():
if serviceIterator.value() == selected:
if last_slide and prevItemLastSlide:
pos = prevItem.data(0, QtCore.Qt.UserRole)
selected = self.service_manager_list.selected_items()[0]
prev_item = None
prev_item_last_slide = None
service_iterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list)
while service_iterator.value():
if service_iterator.value() == selected:
if last_slide and prev_item_last_slide:
pos = prev_item.data(0, QtCore.Qt.UserRole)
check_expanded = self.service_items[pos - 1]['expanded']
self.service_manager_list.setCurrentItem(prevItemLastSlide)
self.service_manager_list.setCurrentItem(prev_item_last_slide)
if not check_expanded:
self.service_manager_list.collapseItem(prevItem)
self.service_manager_list.collapseItem(prev_item)
self.make_live()
self.service_manager_list.setCurrentItem(prevItem)
elif prevItem:
self.service_manager_list.setCurrentItem(prevItem)
self.service_manager_list.setCurrentItem(prev_item)
elif prev_item:
self.service_manager_list.setCurrentItem(prev_item)
self.make_live()
return
if serviceIterator.value().parent() is None:
prevItem = serviceIterator.value()
if serviceIterator.value().parent() is prevItem:
prevItemLastSlide = serviceIterator.value()
serviceIterator += 1
if service_iterator.value().parent() is None:
prev_item = service_iterator.value()
if service_iterator.value().parent() is prev_item:
prev_item_last_slide = service_iterator.value()
service_iterator += 1
def on_set_item(self, message):
"""
@ -1013,22 +1026,22 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
Moves the cursor selection up the window. Called by the up arrow.
"""
item = self.service_manager_list.currentItem()
itemBefore = self.service_manager_list.itemAbove(item)
if itemBefore is None:
item_before = self.service_manager_list.item_above(item)
if item_before is None:
return
self.service_manager_list.setCurrentItem(itemBefore)
self.service_manager_list.setCurrentItem(item_before)
def on_move_selection_down(self):
"""
Moves the cursor selection down the window. Called by the down arrow.
"""
item = self.service_manager_list.currentItem()
itemAfter = self.service_manager_list.itemBelow(item)
if itemAfter is None:
item_after = self.service_manager_list.itemBelow(item)
if item_after is None:
return
self.service_manager_list.setCurrentItem(itemAfter)
self.service_manager_list.setCurrentItem(item_after)
def onCollapseAll(self):
def on_collapse_all(self):
"""
Collapse all the service items.
"""
@ -1043,7 +1056,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
pos = item.data(0, QtCore.Qt.UserRole)
self.service_items[pos - 1]['expanded'] = False
def onExpandAll(self):
def on_expand_all(self):
"""
Collapse all the service items.
"""
@ -1139,51 +1152,51 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.service_manager_list.clear()
self.service_manager_list.clearSelection()
for item_count, item in enumerate(self.service_items):
serviceitem = item['service_item']
treewidgetitem = QtGui.QTreeWidgetItem(self.service_manager_list)
if serviceitem.is_valid:
if serviceitem.notes:
icon = QtGui.QImage(serviceitem.icon)
service_item_from_item = item['service_item']
tree_widget_item = QtGui.QTreeWidgetItem(self.service_manager_list)
if service_item_from_item.is_valid:
if service_item_from_item.notes:
icon = QtGui.QImage(service_item_from_item.icon)
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
overlay = QtGui.QImage(':/services/service_item_notes.png')
overlay = overlay.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
painter = QtGui.QPainter(icon)
painter.drawImage(0, 0, overlay)
painter.end()
treewidgetitem.setIcon(0, build_icon(icon))
elif serviceitem.temporary_edit:
icon = QtGui.QImage(serviceitem.icon)
tree_widget_item.setIcon(0, build_icon(icon))
elif service_item_from_item.temporary_edit:
icon = QtGui.QImage(service_item_from_item.icon)
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
overlay = QtGui.QImage(':/general/general_export.png')
overlay = overlay.scaled(40, 40, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
painter = QtGui.QPainter(icon)
painter.drawImage(40, 0, overlay)
painter.end()
treewidgetitem.setIcon(0, build_icon(icon))
tree_widget_item.setIcon(0, build_icon(icon))
else:
treewidgetitem.setIcon(0, serviceitem.iconic_representation)
tree_widget_item.setIcon(0, service_item_from_item.iconic_representation)
else:
treewidgetitem.setIcon(0, build_icon(':/general/general_delete.png'))
treewidgetitem.setText(0, serviceitem.get_display_title())
tree_widget_item.setIcon(0, build_icon(':/general/general_delete.png'))
tree_widget_item.setText(0, service_item_from_item.get_display_title())
tips = []
if serviceitem.temporary_edit:
if service_item_from_item.temporary_edit:
tips.append('<strong>%s:</strong> <em>%s</em>' %
(translate('OpenLP.ServiceManager', 'Edit'),
(translate('OpenLP.ServiceManager', 'Service copy only'))))
if serviceitem.theme and serviceitem.theme != -1:
(translate('OpenLP.ServiceManager', 'Edit'),
(translate('OpenLP.ServiceManager', 'Service copy only'))))
if service_item_from_item.theme and service_item_from_item.theme != -1:
tips.append('<strong>%s:</strong> <em>%s</em>' %
(translate('OpenLP.ServiceManager', 'Slide theme'), serviceitem.theme))
if serviceitem.notes:
(translate('OpenLP.ServiceManager', 'Slide theme'), service_item_from_item.theme))
if service_item_from_item.notes:
tips.append('<strong>%s: </strong> %s' %
(translate('OpenLP.ServiceManager', 'Notes'), cgi.escape(serviceitem.notes)))
(translate('OpenLP.ServiceManager', 'Notes'), html.escape(service_item_from_item.notes)))
if item['service_item'].is_capable(ItemCapabilities.HasVariableStartTime):
tips.append(item['service_item'].get_media_time())
treewidgetitem.setToolTip(0, '<br>'.join(tips))
treewidgetitem.setData(0, QtCore.Qt.UserRole, item['order'])
treewidgetitem.setSelected(item['selected'])
# Add the children to their parent treewidgetitem.
for count, frame in enumerate(serviceitem.get_frames()):
child = QtGui.QTreeWidgetItem(treewidgetitem)
tree_widget_item.setToolTip(0, '<br>'.join(tips))
tree_widget_item.setData(0, QtCore.Qt.UserRole, item['order'])
tree_widget_item.setSelected(item['selected'])
# Add the children to their parent tree_widget_item.
for count, frame in enumerate(service_item_from_item.get_frames()):
child = QtGui.QTreeWidgetItem(tree_widget_item)
text = frame['title'].replace('\n', ' ')
child.setText(0, text[:40])
child.setData(0, QtCore.Qt.UserRole, count)
@ -1191,19 +1204,19 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
if item['expanded'] and service_item_child == count:
self.service_manager_list.setCurrentItem(child)
elif service_item_child == -1:
self.service_manager_list.setCurrentItem(treewidgetitem)
treewidgetitem.setExpanded(item['expanded'])
self.service_manager_list.setCurrentItem(tree_widget_item)
tree_widget_item.setExpanded(item['expanded'])
def clean_up(self):
"""
Empties the servicePath of temporary files on system exit.
Empties the service_path of temporary files on system exit.
"""
log.debug('Cleaning up servicePath')
for file_name in os.listdir(self.servicePath):
file_path = os.path.join(self.servicePath, file_name)
log.debug('Cleaning up service_path')
for file_name in os.listdir(self.service_path):
file_path = os.path.join(self.service_path, file_name)
delete_file(file_path)
if os.path.exists(os.path.join(self.servicePath, 'audio')):
shutil.rmtree(os.path.join(self.servicePath, 'audio'), True)
if os.path.exists(os.path.join(self.service_path, 'audio')):
shutil.rmtree(os.path.join(self.service_path, 'audio'), True)
def on_theme_combo_box_selected(self, currentIndex):
"""
@ -1213,7 +1226,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.service_theme = self.theme_combo_box.currentText()
self.renderer.set_service_theme(self.service_theme)
Settings().setValue(self.main_window.service_manager_settings_section + '/service theme', self.service_theme)
self.regenerate_service_Items(True)
self.regenerate_service_items(True)
def theme_change(self):
"""
@ -1224,36 +1237,36 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.theme_label.setVisible(visible)
self.theme_combo_box.setVisible(visible)
def regenerate_service_Items(self, changed=False):
def regenerate_service_items(self, changed=False):
"""
Rebuild the service list as things have changed and a repaint is the easiest way to do this.
"""
self.application.set_busy_cursor()
log.debug('regenerate_service_Items')
log.debug('regenerate_service_items')
# force reset of renderer as theme data has changed
self.service_has_all_original_files = True
if self.service_items:
for item in self.service_items:
item['selected'] = False
serviceIterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list)
selectedItem = None
while serviceIterator.value():
if serviceIterator.value().isSelected():
selectedItem = serviceIterator.value()
serviceIterator += 1
if selectedItem is not None:
if selectedItem.parent() is None:
pos = selectedItem.data(0, QtCore.Qt.UserRole)
service_iterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list)
selected_item = None
while service_iterator.value():
if service_iterator.value().isSelected():
selected_item = service_iterator.value()
service_iterator += 1
if selected_item is not None:
if selected_item.parent() is None:
pos = selected_item.data(0, QtCore.Qt.UserRole)
else:
pos = selectedItem.parent().data(0, QtCore.Qt.UserRole)
pos = selected_item.parent().data(0, QtCore.Qt.UserRole)
self.service_items[pos - 1]['selected'] = True
tempServiceItems = self.service_items
temp_service_items = self.service_items
self.service_manager_list.clear()
self.service_items = []
self.isNew = True
for item in tempServiceItems:
self.is_new = True
for item in temp_service_items:
self.add_service_item(item['service_item'], False, expand=item['expanded'], repaint=False,
selected=item['selected'])
selected=item['selected'])
# Set to False as items may have changed rendering does not impact the saved song so True may also be valid
if changed:
self.set_modified()
@ -1301,18 +1314,18 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
if isinstance(item, list):
for inditem in item:
self.service_items.append({'service_item': inditem,
'order': len(self.service_items) + 1,
'expanded': expand, 'selected': selected})
'order': len(self.service_items) + 1,
'expanded': expand, 'selected': selected})
else:
self.service_items.append({'service_item': item,
'order': len(self.service_items) + 1,
'expanded': expand, 'selected': selected})
'order': len(self.service_items) + 1,
'expanded': expand, 'selected': selected})
if repaint:
self.repaint_service_list(len(self.service_items) - 1, -1)
else:
self.service_items.insert(self.drop_position,
{'service_item': item, 'order': self.drop_position,
'expanded': expand, 'selected': selected})
'expanded': expand, 'selected': selected})
self.repaint_service_list(self.drop_position, -1)
# if rebuilding list make sure live is fixed.
if rebuild:
@ -1330,8 +1343,8 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.preview_controller.add_service_manager_item(self.service_items[item]['service_item'], child)
else:
critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'),
translate('OpenLP.ServiceManager',
'Your item cannot be displayed as there is no handler to display it'))
translate('OpenLP.ServiceManager',
'Your item cannot be displayed as there is no handler to display it'))
self.application.set_normal_cursor()
def get_service_item(self):
@ -1376,8 +1389,9 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.live_controller.preview_widget.setFocus()
else:
critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'),
translate('OpenLP.ServiceManager',
'Your item cannot be displayed as the plugin required to display it is missing or inactive'))
translate('OpenLP.ServiceManager',
'Your item cannot be displayed as the plugin required to display it '
'is missing or inactive'))
self.application.set_normal_cursor()
def remote_edit(self):
@ -1400,7 +1414,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
def find_service_item(self):
"""
Finds the first selected ServiceItem in the list and returns the position of the serviceitem and its selected
Finds the first selected ServiceItem in the list and returns the position of the service_item_from_item and its selected
child item. For example, if the third child item (in the Slidecontroller known as slide) in the second service
item is selected this will return::
@ -1446,18 +1460,18 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
item = self.service_manager_list.itemAt(event.pos())
# ServiceManager started the drag and drop
if plugin == 'ServiceManager':
startpos, child = self.find_service_item()
start_pos, child = self.find_service_item()
# If no items selected
if startpos == -1:
if start_pos == -1:
return
if item is None:
endpos = len(self.service_items)
end_pos = len(self.service_items)
else:
endpos = self._get_parent_item_data(item) - 1
serviceItem = self.service_items[startpos]
self.service_items.remove(serviceItem)
self.service_items.insert(endpos, serviceItem)
self.repaint_service_list(endpos, child)
end_pos = self._get_parent_item_data(item) - 1
service_item = self.service_items[start_pos]
self.service_items.remove(service_item)
self.service_items.insert(end_pos, service_item)
self.repaint_service_list(end_pos, child)
self.set_modified()
else:
# we are not over anything so drop
@ -1467,15 +1481,15 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
else:
# we are over something so lets investigate
pos = self._get_parent_item_data(item) - 1
serviceItem = self.service_items[pos]
if (plugin == serviceItem['service_item'].name and
serviceItem['service_item'].is_capable(ItemCapabilities.CanAppend)):
action = self.dndMenu.exec_(QtGui.QCursor.pos())
service_item = self.service_items[pos]
if (plugin == service_item['service_item'].name and
service_item['service_item'].is_capable(ItemCapabilities.CanAppend)):
action = self.dnd_menu.exec_(QtGui.QCursor.pos())
# New action required
if action == self.newAction:
if action == self.new_action:
self.drop_position = self._get_parent_item_data(item)
# Append to existing action
if action == self.addToAction:
if action == self.add_to_action:
self.drop_position = self._get_parent_item_data(item)
item.setSelected(True)
replace = True
@ -1498,18 +1512,18 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
theme_group.setObjectName('theme_group')
# Create a "Default" theme, which allows the user to reset the item's theme to the service theme or global
# theme.
defaultTheme = create_widget_action(self.theme_menu, text=UiStrings().Default, checked=False,
triggers=self.on_theme_change_action)
self.theme_menu.setDefaultAction(defaultTheme)
theme_group.addAction(defaultTheme)
default_theme = create_widget_action(self.theme_menu, text=UiStrings().Default, checked=False,
triggers=self.on_theme_change_action)
self.theme_menu.setDefaultAction(default_theme)
theme_group.addAction(default_theme)
self.theme_menu.addSeparator()
for theme in theme_list:
self.theme_combo_box.addItem(theme)
theme_group.addAction(create_widget_action(self.theme_menu, theme, text=theme, checked=False,
triggers=self.on_theme_change_action))
triggers=self.on_theme_change_action))
find_and_set_in_combo_box(self.theme_combo_box, self.service_theme)
self.renderer.set_service_theme(self.service_theme)
self.regenerate_service_Items()
self.regenerate_service_items()
def on_theme_change_action(self):
"""
@ -1521,7 +1535,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
theme = None
item = self.find_service_item()[0]
self.service_items[item]['service_item'].update_theme(theme)
self.regenerate_service_Items(True)
self.regenerate_service_items(True)
def _get_parent_item_data(self, item):
"""
@ -1537,8 +1551,8 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
"""
Print a Service Order Sheet.
"""
settingDialog = PrintServiceForm()
settingDialog.exec_()
setting_dialog = PrintServiceForm()
setting_dialog.exec_()
def _get_renderer(self):
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -136,11 +136,11 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog):
if plugin.settings_tab:
plugin.settings_tab.post_set_up()
def tab_changed(self, tabIndex):
def tab_changed(self, tab_index):
"""
A different settings tab is selected
"""
self.stacked_layout.setCurrentIndex(tabIndex)
self.stacked_layout.setCurrentIndex(tab_index)
self.stacked_layout.currentWidget().tab_visible()
def register_post_process(self, function):

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -67,62 +67,62 @@ class Ui_ShortcutListDialog(object):
"""
shortcutListDialog.setObjectName('shortcutListDialog')
shortcutListDialog.resize(500, 438)
self.shortcutListLayout = QtGui.QVBoxLayout(shortcutListDialog)
self.shortcutListLayout.setObjectName('shortcutListLayout')
self.shortcut_list_layout = QtGui.QVBoxLayout(shortcutListDialog)
self.shortcut_list_layout.setObjectName('shortcut_list_layout')
self.description_label = QtGui.QLabel(shortcutListDialog)
self.description_label.setObjectName('description_label')
self.description_label.setWordWrap(True)
self.shortcutListLayout.addWidget(self.description_label)
self.treeWidget = QtGui.QTreeWidget(shortcutListDialog)
self.treeWidget.setObjectName('treeWidget')
self.treeWidget.setAlternatingRowColors(True)
self.treeWidget.setColumnCount(3)
self.treeWidget.setColumnWidth(0, 250)
self.shortcutListLayout.addWidget(self.treeWidget)
self.detailsLayout = QtGui.QGridLayout()
self.detailsLayout.setObjectName('detailsLayout')
self.detailsLayout.setContentsMargins(-1, 0, -1, -1)
self.defaultRadioButton = QtGui.QRadioButton(shortcutListDialog)
self.defaultRadioButton.setObjectName('defaultRadioButton')
self.defaultRadioButton.setChecked(True)
self.detailsLayout.addWidget(self.defaultRadioButton, 0, 0, 1, 1)
self.customRadioButton = QtGui.QRadioButton(shortcutListDialog)
self.customRadioButton.setObjectName('customRadioButton')
self.detailsLayout.addWidget(self.customRadioButton, 1, 0, 1, 1)
self.primaryLayout = QtGui.QHBoxLayout()
self.primaryLayout.setObjectName('primaryLayout')
self.primaryPushButton = CaptureShortcutButton(shortcutListDialog)
self.primaryPushButton.setObjectName('primaryPushButton')
self.primaryPushButton.setMinimumSize(QtCore.QSize(84, 0))
self.primaryPushButton.setIcon(build_icon(':/system/system_configure_shortcuts.png'))
self.primaryLayout.addWidget(self.primaryPushButton)
self.clearPrimaryButton = QtGui.QToolButton(shortcutListDialog)
self.clearPrimaryButton.setObjectName('clearPrimaryButton')
self.clearPrimaryButton.setMinimumSize(QtCore.QSize(0, 16))
self.clearPrimaryButton.setIcon(build_icon(':/system/clear_shortcut.png'))
self.primaryLayout.addWidget(self.clearPrimaryButton)
self.detailsLayout.addLayout(self.primaryLayout, 1, 1, 1, 1)
self.alternateLayout = QtGui.QHBoxLayout()
self.alternateLayout.setObjectName('alternateLayout')
self.alternatePushButton = CaptureShortcutButton(shortcutListDialog)
self.alternatePushButton.setObjectName('alternatePushButton')
self.alternatePushButton.setIcon(build_icon(':/system/system_configure_shortcuts.png'))
self.alternateLayout.addWidget(self.alternatePushButton)
self.clearAlternateButton = QtGui.QToolButton(shortcutListDialog)
self.clearAlternateButton.setObjectName('clearAlternateButton')
self.clearAlternateButton.setIcon(build_icon(':/system/clear_shortcut.png'))
self.alternateLayout.addWidget(self.clearAlternateButton)
self.detailsLayout.addLayout(self.alternateLayout, 1, 2, 1, 1)
self.primaryLabel = QtGui.QLabel(shortcutListDialog)
self.primaryLabel.setObjectName('primaryLabel')
self.detailsLayout.addWidget(self.primaryLabel, 0, 1, 1, 1)
self.alternateLabel = QtGui.QLabel(shortcutListDialog)
self.alternateLabel.setObjectName('alternateLabel')
self.detailsLayout.addWidget(self.alternateLabel, 0, 2, 1, 1)
self.shortcutListLayout.addLayout(self.detailsLayout)
self.shortcut_list_layout.addWidget(self.description_label)
self.tree_widget = QtGui.QTreeWidget(shortcutListDialog)
self.tree_widget.setObjectName('tree_widget')
self.tree_widget.setAlternatingRowColors(True)
self.tree_widget.setColumnCount(3)
self.tree_widget.setColumnWidth(0, 250)
self.shortcut_list_layout.addWidget(self.tree_widget)
self.details_layout = QtGui.QGridLayout()
self.details_layout.setObjectName('details_layout')
self.details_layout.setContentsMargins(-1, 0, -1, -1)
self.default_radio_button = QtGui.QRadioButton(shortcutListDialog)
self.default_radio_button.setObjectName('default_radio_button')
self.default_radio_button.setChecked(True)
self.details_layout.addWidget(self.default_radio_button, 0, 0, 1, 1)
self.custom_radio_button = QtGui.QRadioButton(shortcutListDialog)
self.custom_radio_button.setObjectName('custom_radio_button')
self.details_layout.addWidget(self.custom_radio_button, 1, 0, 1, 1)
self.primary_layout = QtGui.QHBoxLayout()
self.primary_layout.setObjectName('primary_layout')
self.primary_push_button = CaptureShortcutButton(shortcutListDialog)
self.primary_push_button.setObjectName('primary_push_button')
self.primary_push_button.setMinimumSize(QtCore.QSize(84, 0))
self.primary_push_button.setIcon(build_icon(':/system/system_configure_shortcuts.png'))
self.primary_layout.addWidget(self.primary_push_button)
self.clear_primary_button = QtGui.QToolButton(shortcutListDialog)
self.clear_primary_button.setObjectName('clear_primary_button')
self.clear_primary_button.setMinimumSize(QtCore.QSize(0, 16))
self.clear_primary_button.setIcon(build_icon(':/system/clear_shortcut.png'))
self.primary_layout.addWidget(self.clear_primary_button)
self.details_layout.addLayout(self.primary_layout, 1, 1, 1, 1)
self.alternate_layout = QtGui.QHBoxLayout()
self.alternate_layout.setObjectName('alternate_layout')
self.alternate_push_button = CaptureShortcutButton(shortcutListDialog)
self.alternate_push_button.setObjectName('alternate_push_button')
self.alternate_push_button.setIcon(build_icon(':/system/system_configure_shortcuts.png'))
self.alternate_layout.addWidget(self.alternate_push_button)
self.clear_alternate_button = QtGui.QToolButton(shortcutListDialog)
self.clear_alternate_button.setObjectName('clear_alternate_button')
self.clear_alternate_button.setIcon(build_icon(':/system/clear_shortcut.png'))
self.alternate_layout.addWidget(self.clear_alternate_button)
self.details_layout.addLayout(self.alternate_layout, 1, 2, 1, 1)
self.primary_label = QtGui.QLabel(shortcutListDialog)
self.primary_label.setObjectName('primary_label')
self.details_layout.addWidget(self.primary_label, 0, 1, 1, 1)
self.alternate_label = QtGui.QLabel(shortcutListDialog)
self.alternate_label.setObjectName('alternate_label')
self.details_layout.addWidget(self.alternate_label, 0, 2, 1, 1)
self.shortcut_list_layout.addLayout(self.details_layout)
self.button_box = create_button_box(shortcutListDialog, 'button_box', ['cancel', 'ok', 'defaults'])
self.button_box.setOrientation(QtCore.Qt.Horizontal)
self.shortcutListLayout.addWidget(self.button_box)
self.shortcut_list_layout.addWidget(self.button_box)
self.retranslateUi(shortcutListDialog)
def retranslateUi(self, shortcutListDialog):
@ -132,15 +132,15 @@ class Ui_ShortcutListDialog(object):
shortcutListDialog.setWindowTitle(translate('OpenLP.ShortcutListDialog', 'Configure Shortcuts'))
self.description_label.setText(
translate('OpenLP.ShortcutListDialog', 'Select an action and click one of the buttons below to start '
'capturing a new primary or alternate shortcut, respectively.'))
self.treeWidget.setHeaderLabels([translate('OpenLP.ShortcutListDialog', 'Action'),
translate('OpenLP.ShortcutListDialog', 'Shortcut'),
translate('OpenLP.ShortcutListDialog', 'Alternate')])
self.defaultRadioButton.setText(translate('OpenLP.ShortcutListDialog', 'Default'))
self.customRadioButton.setText(translate('OpenLP.ShortcutListDialog', 'Custom'))
self.primaryPushButton.setToolTip(translate('OpenLP.ShortcutListDialog', 'Capture shortcut.'))
self.alternatePushButton.setToolTip(translate('OpenLP.ShortcutListDialog', 'Capture shortcut.'))
self.clearPrimaryButton.setToolTip(translate('OpenLP.ShortcutListDialog',
'Restore the default shortcut of this action.'))
self.clearAlternateButton.setToolTip(translate('OpenLP.ShortcutListDialog',
'Restore the default shortcut of this action.'))
'capturing a new primary or alternate shortcut, respectively.'))
self.tree_widget.setHeaderLabels([translate('OpenLP.ShortcutListDialog', 'Action'),
translate('OpenLP.ShortcutListDialog', 'Shortcut'),
translate('OpenLP.ShortcutListDialog', 'Alternate')])
self.default_radio_button.setText(translate('OpenLP.ShortcutListDialog', 'Default'))
self.custom_radio_button.setText(translate('OpenLP.ShortcutListDialog', 'Custom'))
self.primary_push_button.setToolTip(translate('OpenLP.ShortcutListDialog', 'Capture shortcut.'))
self.alternate_push_button.setToolTip(translate('OpenLP.ShortcutListDialog', 'Capture shortcut.'))
self.clear_primary_button.setToolTip(translate('OpenLP.ShortcutListDialog',
'Restore the default shortcut of this action.'))
self.clear_alternate_button.setToolTip(translate('OpenLP.ShortcutListDialog',
'Restore the default shortcut of this action.'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -54,18 +54,18 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
"""
super(ShortcutListForm, self).__init__(parent)
self.setupUi(self)
self.changedActions = {}
self.changed_actions = {}
self.action_list = ActionList.get_instance()
self.dialog_was_shown = False
self.primaryPushButton.toggled.connect(self.onPrimaryPushButtonClicked)
self.alternatePushButton.toggled.connect(self.onAlternatePushButtonClicked)
self.treeWidget.currentItemChanged.connect(self.onCurrentItemChanged)
self.treeWidget.itemDoubleClicked.connect(self.onItemDoubleClicked)
self.clearPrimaryButton.clicked.connect(self.onClearPrimaryButtonClicked)
self.clearAlternateButton.clicked.connect(self.onClearAlternateButtonClicked)
self.button_box.clicked.connect(self.onRestoreDefaultsClicked)
self.defaultRadioButton.clicked.connect(self.onDefaultRadioButtonClicked)
self.customRadioButton.clicked.connect(self.onCustomRadioButtonClicked)
self.primary_push_button.toggled.connect(self.on_primary_push_button_clicked)
self.alternate_push_button.toggled.connect(self.on_alternate_push_button_clicked)
self.tree_widget.currentItemChanged.connect(self.on_current_item_changed)
self.tree_widget.itemDoubleClicked.connect(self.on_item_double_clicked)
self.clear_primary_button.clicked.connect(self.on_clear_primary_button_clicked)
self.clear_alternate_button.clicked.connect(self.on_clear_alternate_button_clicked)
self.button_box.clicked.connect(self.on_restore_defaults_clicked)
self.default_radio_button.clicked.connect(self.on_default_radio_button_clicked)
self.custom_radio_button.clicked.connect(self.on_custom_radio_button_clicked)
def keyPressEvent(self, event):
"""
@ -73,7 +73,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
"""
if event.key() == QtCore.Qt.Key_Space:
self.keyReleaseEvent(event)
elif self.primaryPushButton.isChecked() or self.alternatePushButton.isChecked():
elif self.primary_push_button.isChecked() or self.alternate_push_button.isChecked():
self.keyReleaseEvent(event)
elif event.key() == QtCore.Qt.Key_Escape:
event.accept()
@ -83,7 +83,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
"""
Respond to certain key presses
"""
if not self.primaryPushButton.isChecked() and not self.alternatePushButton.isChecked():
if not self.primary_push_button.isChecked() and not self.alternate_push_button.isChecked():
return
# Do not continue, as the event is for the dialog (close it).
if self.dialog_was_shown and event.key() in (QtCore.Qt.Key_Escape, QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return):
@ -102,27 +102,27 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
if event.modifiers() & QtCore.Qt.MetaModifier == QtCore.Qt.MetaModifier:
key_string = 'Meta+' + key_string
key_sequence = QtGui.QKeySequence(key_string)
if self._validiate_shortcut(self._currentItemAction(), key_sequence):
if self.primaryPushButton.isChecked():
self._adjustButton(self.primaryPushButton, False, text=key_sequence.toString())
elif self.alternatePushButton.isChecked():
self._adjustButton(self.alternatePushButton, False, text=key_sequence.toString())
if self._validiate_shortcut(self._current_item_action(), key_sequence):
if self.primary_push_button.isChecked():
self._adjust_button(self.primary_push_button, False, text=key_sequence.toString())
elif self.alternate_push_button.isChecked():
self._adjust_button(self.alternate_push_button, False, text=key_sequence.toString())
def exec_(self):
"""
Execute the dialog
"""
self.changedActions = {}
self.reloadShortcutList()
self._adjustButton(self.primaryPushButton, False, False, '')
self._adjustButton(self.alternatePushButton, False, False, '')
self.changed_actions = {}
self.reload_shortcut_list()
self._adjust_button(self.primary_push_button, False, False, '')
self._adjust_button(self.alternate_push_button, False, False, '')
return QtGui.QDialog.exec_(self)
def reloadShortcutList(self):
def reload_shortcut_list(self):
"""
Reload the ``treeWidget`` list to add new and remove old actions.
Reload the ``tree_widget`` list to add new and remove old actions.
"""
self.treeWidget.clear()
self.tree_widget.clear()
for category in self.action_list.categories:
# Check if the category is for internal use only.
if category.name is None:
@ -141,23 +141,23 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
action_item.setToolTip(1, tool_tip_text)
action_item.setToolTip(2, tool_tip_text)
item.addChild(action_item)
self.treeWidget.addTopLevelItem(item)
self.tree_widget.addTopLevelItem(item)
item.setExpanded(True)
self.refreshShortcutList()
self.refresh_shortcut_list()
def refreshShortcutList(self):
def refresh_shortcut_list(self):
"""
This refreshes the item's shortcuts shown in the list. Note, this neither adds new actions nor removes old
actions.
"""
iterator = QtGui.QTreeWidgetItemIterator(self.treeWidget)
iterator = QtGui.QTreeWidgetItemIterator(self.tree_widget)
while iterator.value():
item = iterator.value()
iterator += 1
action = self._currentItemAction(item)
action = self._current_item_action(item)
if action is None:
continue
shortcuts = self._actionShortcuts(action)
shortcuts = self._action_shortcuts(action)
if not shortcuts:
item.setText(1, '')
item.setText(2, '')
@ -167,166 +167,167 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
else:
item.setText(1, shortcuts[0].toString())
item.setText(2, shortcuts[1].toString())
self.onCurrentItemChanged()
self.on_current_item_changed()
def onPrimaryPushButtonClicked(self, toggled):
def on_primary_push_button_clicked(self, toggled):
"""
Save the new primary shortcut.
"""
self.customRadioButton.setChecked(True)
self.custom_radio_button.setChecked(True)
if toggled:
self.alternatePushButton.setChecked(False)
self.primaryPushButton.setText('')
self.alternate_push_button.setChecked(False)
self.primary_push_button.setText('')
return
action = self._currentItemAction()
action = self._current_item_action()
if action is None:
return
shortcuts = self._actionShortcuts(action)
new_shortcuts = [QtGui.QKeySequence(self.primaryPushButton.text())]
shortcuts = self._action_shortcuts(action)
new_shortcuts = [QtGui.QKeySequence(self.primary_push_button.text())]
if len(shortcuts) == 2:
new_shortcuts.append(shortcuts[1])
self.changedActions[action] = new_shortcuts
self.refreshShortcutList()
self.changed_actions[action] = new_shortcuts
self.refresh_shortcut_list()
def onAlternatePushButtonClicked(self, toggled):
def on_alternate_push_button_clicked(self, toggled):
"""
Save the new alternate shortcut.
"""
self.customRadioButton.setChecked(True)
self.custom_radio_button.setChecked(True)
if toggled:
self.primaryPushButton.setChecked(False)
self.alternatePushButton.setText('')
self.primary_push_button.setChecked(False)
self.alternate_push_button.setText('')
return
action = self._currentItemAction()
action = self._current_item_action()
if action is None:
return
shortcuts = self._actionShortcuts(action)
shortcuts = self._action_shortcuts(action)
new_shortcuts = []
if shortcuts:
new_shortcuts.append(shortcuts[0])
new_shortcuts.append(QtGui.QKeySequence(self.alternatePushButton.text()))
self.changedActions[action] = new_shortcuts
if not self.primaryPushButton.text():
new_shortcuts.append(QtGui.QKeySequence(self.alternate_push_button.text()))
self.changed_actions[action] = new_shortcuts
if not self.primary_push_button.text():
# When we do not have a primary shortcut, the just entered alternate shortcut will automatically become the
# primary shortcut. That is why we have to adjust the primary button's text.
self.primaryPushButton.setText(self.alternatePushButton.text())
self.alternatePushButton.setText('')
self.refreshShortcutList()
self.primary_push_button.setText(self.alternate_push_button.text())
self.alternate_push_button.setText('')
self.refresh_shortcut_list()
def onItemDoubleClicked(self, item, column):
def on_item_double_clicked(self, item, column):
"""
A item has been double clicked. The ``primaryPushButton`` will be checked and the item's shortcut will be
displayed.
"""
action = self._currentItemAction(item)
action = self._current_item_action(item)
if action is None:
return
self.primaryPushButton.setChecked(column in [0, 1])
self.alternatePushButton.setChecked(column not in [0, 1])
self.primary_push_button.setChecked(column in [0, 1])
self.alternate_push_button.setChecked(column not in [0, 1])
if column in [0, 1]:
self.primaryPushButton.setText('')
self.primaryPushButton.setFocus()
self.primary_push_button.setText('')
self.primary_push_button.setFocus()
else:
self.alternatePushButton.setText('')
self.alternatePushButton.setFocus()
self.alternate_push_button.setText('')
self.alternate_push_button.setFocus()
def onCurrentItemChanged(self, item=None, previousItem=None):
def on_current_item_changed(self, item=None, previousItem=None):
"""
A item has been pressed. We adjust the button's text to the action's shortcut which is encapsulate in the item.
"""
action = self._currentItemAction(item)
self.primaryPushButton.setEnabled(action is not None)
self.alternatePushButton.setEnabled(action is not None)
action = self._current_item_action(item)
self.primary_push_button.setEnabled(action is not None)
self.alternate_push_button.setEnabled(action is not None)
primary_text = ''
alternate_text = ''
primary_label_text = ''
alternate_label_text = ''
if action is None:
self.primaryPushButton.setChecked(False)
self.alternatePushButton.setChecked(False)
self.primary_push_button.setChecked(False)
self.alternate_push_button.setChecked(False)
else:
if action.defaultShortcuts:
primary_label_text = action.defaultShortcuts[0].toString()
if len(action.defaultShortcuts) == 2:
alternate_label_text = action.defaultShortcuts[1].toString()
shortcuts = self._actionShortcuts(action)
shortcuts = self._action_shortcuts(action)
# We do not want to loose pending changes, that is why we have to keep the text when, this function has not
# been triggered by a signal.
if item is None:
primary_text = self.primaryPushButton.text()
alternate_text = self.alternatePushButton.text()
primary_text = self.primary_push_button.text()
alternate_text = self.alternate_push_button.text()
elif len(shortcuts) == 1:
primary_text = shortcuts[0].toString()
elif len(shortcuts) == 2:
primary_text = shortcuts[0].toString()
alternate_text = shortcuts[1].toString()
# When we are capturing a new shortcut, we do not want, the buttons to display the current shortcut.
if self.primaryPushButton.isChecked():
if self.primary_push_button.isChecked():
primary_text = ''
if self.alternatePushButton.isChecked():
if self.alternate_push_button.isChecked():
alternate_text = ''
self.primaryPushButton.setText(primary_text)
self.alternatePushButton.setText(alternate_text)
self.primaryLabel.setText(primary_label_text)
self.alternateLabel.setText(alternate_label_text)
self.primary_push_button.setText(primary_text)
self.alternate_push_button.setText(alternate_text)
self.primary_label.setText(primary_label_text)
self.alternate_label.setText(alternate_label_text)
# We do not want to toggle and radio button, as the function has not been triggered by a signal.
if item is None:
return
if primary_label_text == primary_text and alternate_label_text == alternate_text:
self.defaultRadioButton.toggle()
self.default_radio_button.toggle()
else:
self.customRadioButton.toggle()
self.custom_radio_button.toggle()
def onRestoreDefaultsClicked(self, button):
def on_restore_defaults_clicked(self, button):
"""
Restores all default shortcuts.
"""
if self.button_box.buttonRole(button) != QtGui.QDialogButtonBox.ResetRole:
return
if QtGui.QMessageBox.question(self, translate('OpenLP.ShortcutListDialog', 'Restore Default Shortcuts'),
translate('OpenLP.ShortcutListDialog', 'Do you want to restore all '
'shortcuts to their defaults?'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) == QtGui.QMessageBox.No:
translate('OpenLP.ShortcutListDialog', 'Do you want to restore all '
'shortcuts to their defaults?'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No)) == QtGui.QMessageBox.No:
return
self._adjustButton(self.primaryPushButton, False, text='')
self._adjustButton(self.alternatePushButton, False, text='')
self._adjust_button(self.primary_push_button, False, text='')
self._adjust_button(self.alternate_push_button, False, text='')
for category in self.action_list.categories:
for action in category.actions:
self.changedActions[action] = action.defaultShortcuts
self.refreshShortcutList()
self.changed_actions[action] = action.defaultShortcuts
self.refresh_shortcut_list()
def onDefaultRadioButtonClicked(self, toggled):
def on_default_radio_button_clicked(self, toggled):
"""
The default radio button has been clicked, which means we have to make sure, that we use the default shortcuts
for the action.
"""
if not toggled:
return
action = self._currentItemAction()
action = self._current_item_action()
if action is None:
return
temp_shortcuts = self._actionShortcuts(action)
self.changedActions[action] = action.defaultShortcuts
self.refreshShortcutList()
temp_shortcuts = self._action_shortcuts(action)
self.changed_actions[action] = action.defaultShortcuts
self.refresh_shortcut_list()
primary_button_text = ''
alternate_button_text = ''
if temp_shortcuts:
primary_button_text = temp_shortcuts[0].toString()
if len(temp_shortcuts) == 2:
alternate_button_text = temp_shortcuts[1].toString()
self.primaryPushButton.setText(primary_button_text)
self.alternatePushButton.setText(alternate_button_text)
self.primary_push_button.setText(primary_button_text)
self.alternate_push_button.setText(alternate_button_text)
def onCustomRadioButtonClicked(self, toggled):
def on_custom_radio_button_clicked(self, toggled):
"""
The custom shortcut radio button was clicked, thus we have to restore the custom shortcuts by calling those
functions triggered by button clicks.
"""
if not toggled:
return
self.onPrimaryPushButtonClicked(False)
self.onAlternatePushButtonClicked(False)
self.refreshShortcutList()
self.on_primary_push_button_clicked(False)
self.on_alternate_push_button_clicked(False)
self.refresh_shortcut_list()
def save(self):
"""
@ -340,22 +341,22 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
if category.name is None:
continue
for action in category.actions:
if action in self.changedActions:
if action in self.changed_actions:
old_shortcuts = list(map(QtGui.QKeySequence.toString, action.shortcuts()))
action.setShortcuts(self.changedActions[action])
action.setShortcuts(self.changed_actions[action])
self.action_list.update_shortcut_map(action, old_shortcuts)
settings.setValue(action.objectName(), action.shortcuts())
settings.endGroup()
def onClearPrimaryButtonClicked(self, toggled):
def on_clear_primary_button_clicked(self, toggled):
"""
Restore the defaults of this action.
"""
self.primaryPushButton.setChecked(False)
action = self._currentItemAction()
self.primary_push_button.setChecked(False)
action = self._current_item_action()
if action is None:
return
shortcuts = self._actionShortcuts(action)
shortcuts = self._action_shortcuts(action)
new_shortcuts = []
if action.defaultShortcuts:
new_shortcuts.append(action.defaultShortcuts[0])
@ -367,19 +368,19 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
return
if len(shortcuts) == 2:
new_shortcuts.append(shortcuts[1])
self.changedActions[action] = new_shortcuts
self.refreshShortcutList()
self.onCurrentItemChanged(self.treeWidget.currentItem())
self.changed_actions[action] = new_shortcuts
self.refresh_shortcut_list()
self.on_current_item_changed(self.tree_widget.currentItem())
def onClearAlternateButtonClicked(self, toggled):
def on_clear_alternate_button_clicked(self, toggled):
"""
Restore the defaults of this action.
"""
self.alternatePushButton.setChecked(False)
action = self._currentItemAction()
self.alternate_push_button.setChecked(False)
action = self._current_item_action()
if action is None:
return
shortcuts = self._actionShortcuts(action)
shortcuts = self._action_shortcuts(action)
new_shortcuts = []
if shortcuts:
new_shortcuts.append(shortcuts[0])
@ -388,9 +389,9 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
if len(new_shortcuts) == 2:
if not self._validiate_shortcut(action, new_shortcuts[1]):
return
self.changedActions[action] = new_shortcuts
self.refreshShortcutList()
self.onCurrentItemChanged(self.treeWidget.currentItem())
self.changed_actions[action] = new_shortcuts
self.refresh_shortcut_list()
self.on_current_item_changed(self.tree_widget.currentItem())
def _validiate_shortcut(self, changing_action, key_sequence):
"""
@ -406,53 +407,52 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
is_valid = True
for category in self.action_list.categories:
for action in category.actions:
shortcuts = self._actionShortcuts(action)
shortcuts = self._action_shortcuts(action)
if key_sequence not in shortcuts:
continue
if action is changing_action:
if self.primaryPushButton.isChecked() and shortcuts.index(key_sequence) == 0:
if self.primary_push_button.isChecked() and shortcuts.index(key_sequence) == 0:
continue
if self.alternatePushButton.isChecked() and shortcuts.index(key_sequence) == 1:
if self.alternate_push_button.isChecked() and shortcuts.index(key_sequence) == 1:
continue
# Have the same parent, thus they cannot have the same shortcut.
if action.parent() is changing_action.parent():
is_valid = False
# The new shortcut is already assigned, but if both shortcuts are only valid in a different widget the
# new shortcut is vaild, because they will not interfere.
# new shortcut is valid, because they will not interfere.
if action.shortcutContext() in [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]:
is_valid = False
if changing_action.shortcutContext() in [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]:
is_valid = False
if not is_valid:
self.main_window.warning_message(translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'),
translate('OpenLP.ShortcutListDialog',
'The shortcut "%s" is already assigned to another action, please use a different shortcut.') %
key_sequence.toString()
)
translate('OpenLP.ShortcutListDialog',
'The shortcut "%s" is already assigned to another action, please'
' use a different shortcut.') % key_sequence.toString())
self.dialog_was_shown = True
return is_valid
def _actionShortcuts(self, action):
def _action_shortcuts(self, action):
"""
This returns the shortcuts for the given ``action``, which also includes those shortcuts which are not saved
yet but already assigned (as changes yre applied when closing the dialog).
"""
if action in self.changedActions:
return self.changedActions[action]
if action in self.changed_actions:
return self.changed_actions[action]
return action.shortcuts()
def _currentItemAction(self, item=None):
def _current_item_action(self, item=None):
"""
Returns the action of the given ``item``. If no item is given, we return the action of the current item of
the ``treeWidget``.
the ``tree_widget``.
"""
if item is None:
item = self.treeWidget.currentItem()
item = self.tree_widget.currentItem()
if item is None:
return
return item.data(0, QtCore.Qt.UserRole)
def _adjustButton(self, button, checked=None, enabled=None, text=None):
def _adjust_button(self, button, checked=None, enabled=None, text=None):
"""
Can be called to adjust more properties of the given ``button`` at once.
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -45,73 +45,73 @@ class Ui_StartTimeDialog(object):
"""
StartTimeDialog.setObjectName('StartTimeDialog')
StartTimeDialog.resize(350, 10)
self.dialogLayout = QtGui.QGridLayout(StartTimeDialog)
self.dialogLayout.setObjectName('dialog_layout')
self.startLabel = QtGui.QLabel(StartTimeDialog)
self.startLabel.setObjectName('startLabel')
self.startLabel.setAlignment(QtCore.Qt.AlignHCenter)
self.dialogLayout.addWidget(self.startLabel, 0, 1, 1, 1)
self.finishLabel = QtGui.QLabel(StartTimeDialog)
self.finishLabel.setObjectName('finishLabel')
self.finishLabel.setAlignment(QtCore.Qt.AlignHCenter)
self.dialogLayout.addWidget(self.finishLabel, 0, 2, 1, 1)
self.lengthLabel = QtGui.QLabel(StartTimeDialog)
self.lengthLabel.setObjectName('startLabel')
self.lengthLabel.setAlignment(QtCore.Qt.AlignHCenter)
self.dialogLayout.addWidget(self.lengthLabel, 0, 3, 1, 1)
self.hourLabel = QtGui.QLabel(StartTimeDialog)
self.hourLabel.setObjectName('hourLabel')
self.dialogLayout.addWidget(self.hourLabel, 1, 0, 1, 1)
self.hourSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.hourSpinBox.setObjectName('hourSpinBox')
self.hourSpinBox.setMinimum(0)
self.hourSpinBox.setMaximum(4)
self.dialogLayout.addWidget(self.hourSpinBox, 1, 1, 1, 1)
self.hourFinishSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.hourFinishSpinBox.setObjectName('hourFinishSpinBox')
self.hourFinishSpinBox.setMinimum(0)
self.hourFinishSpinBox.setMaximum(4)
self.dialogLayout.addWidget(self.hourFinishSpinBox, 1, 2, 1, 1)
self.hourFinishLabel = QtGui.QLabel(StartTimeDialog)
self.hourFinishLabel.setObjectName('hourLabel')
self.hourFinishLabel.setAlignment(QtCore.Qt.AlignRight)
self.dialogLayout.addWidget(self.hourFinishLabel, 1, 3, 1, 1)
self.minuteLabel = QtGui.QLabel(StartTimeDialog)
self.minuteLabel.setObjectName('minuteLabel')
self.dialogLayout.addWidget(self.minuteLabel, 2, 0, 1, 1)
self.minuteSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.minuteSpinBox.setObjectName('minuteSpinBox')
self.minuteSpinBox.setMinimum(0)
self.minuteSpinBox.setMaximum(59)
self.dialogLayout.addWidget(self.minuteSpinBox, 2, 1, 1, 1)
self.minuteFinishSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.minuteFinishSpinBox.setObjectName('minuteFinishSpinBox')
self.minuteFinishSpinBox.setMinimum(0)
self.minuteFinishSpinBox.setMaximum(59)
self.dialogLayout.addWidget(self.minuteFinishSpinBox, 2, 2, 1, 1)
self.minuteFinishLabel = QtGui.QLabel(StartTimeDialog)
self.minuteFinishLabel.setObjectName('minuteLabel')
self.minuteFinishLabel.setAlignment(QtCore.Qt.AlignRight)
self.dialogLayout.addWidget(self.minuteFinishLabel, 2, 3, 1, 1)
self.secondLabel = QtGui.QLabel(StartTimeDialog)
self.secondLabel.setObjectName('secondLabel')
self.dialogLayout.addWidget(self.secondLabel, 3, 0, 1, 1)
self.secondSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.secondSpinBox.setObjectName('secondSpinBox')
self.secondSpinBox.setMinimum(0)
self.secondSpinBox.setMaximum(59)
self.secondFinishSpinBox = QtGui.QSpinBox(StartTimeDialog)
self.secondFinishSpinBox.setObjectName('secondFinishSpinBox')
self.secondFinishSpinBox.setMinimum(0)
self.secondFinishSpinBox.setMaximum(59)
self.dialogLayout.addWidget(self.secondFinishSpinBox, 3, 2, 1, 1)
self.secondFinishLabel = QtGui.QLabel(StartTimeDialog)
self.secondFinishLabel.setObjectName('secondLabel')
self.secondFinishLabel.setAlignment(QtCore.Qt.AlignRight)
self.dialogLayout.addWidget(self.secondFinishLabel, 3, 3, 1, 1)
self.dialogLayout.addWidget(self.secondSpinBox, 3, 1, 1, 1)
self.dialog_layout = QtGui.QGridLayout(StartTimeDialog)
self.dialog_layout.setObjectName('dialog_layout')
self.start_label = QtGui.QLabel(StartTimeDialog)
self.start_label.setObjectName('start_label')
self.start_label.setAlignment(QtCore.Qt.AlignHCenter)
self.dialog_layout.addWidget(self.start_label, 0, 1, 1, 1)
self.finish_label = QtGui.QLabel(StartTimeDialog)
self.finish_label.setObjectName('finish_label')
self.finish_label.setAlignment(QtCore.Qt.AlignHCenter)
self.dialog_layout.addWidget(self.finish_label, 0, 2, 1, 1)
self.length_label = QtGui.QLabel(StartTimeDialog)
self.length_label.setObjectName('start_label')
self.length_label.setAlignment(QtCore.Qt.AlignHCenter)
self.dialog_layout.addWidget(self.length_label, 0, 3, 1, 1)
self.hour_label = QtGui.QLabel(StartTimeDialog)
self.hour_label.setObjectName('hour_label')
self.dialog_layout.addWidget(self.hour_label, 1, 0, 1, 1)
self.hour_spin_box = QtGui.QSpinBox(StartTimeDialog)
self.hour_spin_box.setObjectName('hour_spin_box')
self.hour_spin_box.setMinimum(0)
self.hour_spin_box.setMaximum(4)
self.dialog_layout.addWidget(self.hour_spin_box, 1, 1, 1, 1)
self.hour_finish_spin_box = QtGui.QSpinBox(StartTimeDialog)
self.hour_finish_spin_box.setObjectName('hour_finish_spin_box')
self.hour_finish_spin_box.setMinimum(0)
self.hour_finish_spin_box.setMaximum(4)
self.dialog_layout.addWidget(self.hour_finish_spin_box, 1, 2, 1, 1)
self.hour_finish_label = QtGui.QLabel(StartTimeDialog)
self.hour_finish_label.setObjectName('hour_label')
self.hour_finish_label.setAlignment(QtCore.Qt.AlignRight)
self.dialog_layout.addWidget(self.hour_finish_label, 1, 3, 1, 1)
self.minute_label = QtGui.QLabel(StartTimeDialog)
self.minute_label.setObjectName('minute_label')
self.dialog_layout.addWidget(self.minute_label, 2, 0, 1, 1)
self.minute_spin_box = QtGui.QSpinBox(StartTimeDialog)
self.minute_spin_box.setObjectName('minute_spin_box')
self.minute_spin_box.setMinimum(0)
self.minute_spin_box.setMaximum(59)
self.dialog_layout.addWidget(self.minute_spin_box, 2, 1, 1, 1)
self.minute_finish_spin_box = QtGui.QSpinBox(StartTimeDialog)
self.minute_finish_spin_box.setObjectName('minute_finish_spin_box')
self.minute_finish_spin_box.setMinimum(0)
self.minute_finish_spin_box.setMaximum(59)
self.dialog_layout.addWidget(self.minute_finish_spin_box, 2, 2, 1, 1)
self.minute_finish_label = QtGui.QLabel(StartTimeDialog)
self.minute_finish_label.setObjectName('minute_label')
self.minute_finish_label.setAlignment(QtCore.Qt.AlignRight)
self.dialog_layout.addWidget(self.minute_finish_label, 2, 3, 1, 1)
self.second_label = QtGui.QLabel(StartTimeDialog)
self.second_label.setObjectName('second_label')
self.dialog_layout.addWidget(self.second_label, 3, 0, 1, 1)
self.second_spin_box = QtGui.QSpinBox(StartTimeDialog)
self.second_spin_box.setObjectName('second_spin_box')
self.second_spin_box.setMinimum(0)
self.second_spin_box.setMaximum(59)
self.second_finish_spin_box = QtGui.QSpinBox(StartTimeDialog)
self.second_finish_spin_box.setObjectName('second_finish_spin_box')
self.second_finish_spin_box.setMinimum(0)
self.second_finish_spin_box.setMaximum(59)
self.dialog_layout.addWidget(self.second_finish_spin_box, 3, 2, 1, 1)
self.second_finish_label = QtGui.QLabel(StartTimeDialog)
self.second_finish_label.setObjectName('second_label')
self.second_finish_label.setAlignment(QtCore.Qt.AlignRight)
self.dialog_layout.addWidget(self.second_finish_label, 3, 3, 1, 1)
self.dialog_layout.addWidget(self.second_spin_box, 3, 1, 1, 1)
self.button_box = create_button_box(StartTimeDialog, 'button_box', ['cancel', 'ok'])
self.dialogLayout.addWidget(self.button_box, 5, 2, 1, 2)
self.dialog_layout.addWidget(self.button_box, 5, 2, 1, 2)
self.retranslateUi(StartTimeDialog)
self.setMaximumHeight(self.sizeHint().height())
@ -119,16 +119,16 @@ class Ui_StartTimeDialog(object):
"""
Update the translations on the fly
"""
self.setWindowTitle(translate('OpenLP.StartTimeForm', 'Item Start and Finish Time'))
self.hourSpinBox.setSuffix(UiStrings().Hours)
self.minuteSpinBox.setSuffix(UiStrings().Minutes)
self.secondSpinBox.setSuffix(UiStrings().Seconds)
self.hourFinishSpinBox.setSuffix(UiStrings().Hours)
self.minuteFinishSpinBox.setSuffix(UiStrings().Minutes)
self.secondFinishSpinBox.setSuffix(UiStrings().Seconds)
self.hourLabel.setText(translate('OpenLP.StartTimeForm', 'Hours:'))
self.minuteLabel.setText(translate('OpenLP.StartTimeForm', 'Minutes:'))
self.secondLabel.setText(translate('OpenLP.StartTimeForm', 'Seconds:'))
self.startLabel.setText(translate('OpenLP.StartTimeForm', 'Start'))
self.finishLabel.setText(translate('OpenLP.StartTimeForm', 'Finish'))
self.lengthLabel.setText(translate('OpenLP.StartTimeForm', 'Length'))
self.setWindowTitle(translate('OpenLP.StartTime_form', 'Item Start and Finish Time'))
self.hour_spin_box.setSuffix(UiStrings().Hours)
self.minute_spin_box.setSuffix(UiStrings().Minutes)
self.second_spin_box.setSuffix(UiStrings().Seconds)
self.hour_finish_spin_box.setSuffix(UiStrings().Hours)
self.minute_finish_spin_box.setSuffix(UiStrings().Minutes)
self.second_finish_spin_box.setSuffix(UiStrings().Seconds)
self.hour_label.setText(translate('OpenLP.StartTime_form', 'Hours:'))
self.minute_label.setText(translate('OpenLP.StartTime_form', 'Minutes:'))
self.second_label.setText(translate('OpenLP.StartTime_form', 'Seconds:'))
self.start_label.setText(translate('OpenLP.StartTime_form', 'Start'))
self.finish_label.setText(translate('OpenLP.StartTime_form', 'Finish'))
self.length_label.setText(translate('OpenLP.StartTime_form', 'Length'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -54,32 +54,34 @@ class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog):
Run the Dialog with correct heading.
"""
hour, minutes, seconds = self._time_split(self.item['service_item'].start_time)
self.hourSpinBox.setValue(hour)
self.minuteSpinBox.setValue(minutes)
self.secondSpinBox.setValue(seconds)
self.hour_spin_box.setValue(hour)
self.minute_spin_box.setValue(minutes)
self.second_spin_box.setValue(seconds)
hours, minutes, seconds = self._time_split(self.item['service_item'].media_length)
self.hourFinishSpinBox.setValue(hours)
self.minuteFinishSpinBox.setValue(minutes)
self.secondFinishSpinBox.setValue(seconds)
self.hourFinishLabel.setText('%s%s' % (str(hour), UiStrings().Hours))
self.minuteFinishLabel.setText('%s%s' % (str(minutes), UiStrings().Minutes))
self.secondFinishLabel.setText('%s%s' % (str(seconds), UiStrings().Seconds))
self.hour_finish_spin_box.setValue(hours)
self.minute_finish_spin_box.setValue(minutes)
self.second_finish_spin_box.setValue(seconds)
self.hour_finish_label.setText('%s%s' % (str(hour), UiStrings().Hours))
self.minute_finish_label.setText('%s%s' % (str(minutes), UiStrings().Minutes))
self.second_finish_label.setText('%s%s' % (str(seconds), UiStrings().Seconds))
return QtGui.QDialog.exec_(self)
def accept(self):
"""
When the dialog succeeds, this is run
"""
start = self.hourSpinBox.value() * 3600 + self.minuteSpinBox.value() * 60 + self.secondSpinBox.value()
end = self.hourFinishSpinBox.value() * 3600 + \
self.minuteFinishSpinBox.value() * 60 + self.secondFinishSpinBox.value()
start = self.hour_spin_box.value() * 3600 + self.minute_spin_box.value() * 60 + self.second_spin_box.value()
end = self.hour_finish_spin_box.value() * 3600 + \
self.minute_finish_spin_box.value() * 60 + self.second_finish_spin_box.value()
if end > self.item['service_item'].media_length:
critical_error_message_box(title=translate('OpenLP.StartTimeForm', 'Time Validation Error'),
message=translate('OpenLP.StartTimeForm', 'Finish time is set after the end of the media item'))
critical_error_message_box(title=translate('OpenLP.StartTime_form', 'Time Validation Error'),
message=translate('OpenLP.StartTime_form',
'Finish time is set after the end of the media item'))
return
elif start > end:
critical_error_message_box(title=translate('OpenLP.StartTimeForm', 'Time Validation Error'),
message=translate('OpenLP.StartTimeForm', 'Start time is after the finish time of the media item'))
critical_error_message_box(title=translate('OpenLP.StartTime_form', 'Time Validation Error'),
message=translate('OpenLP.StartTime_form',
'Start time is after the finish time of the media item'))
return
self.item['service_item'].start_time = start
self.item['service_item'].end_time = end

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -18,11 +18,11 @@
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# AN_y WARRANT_y; without even the implied warranty of MERCHANTABILIT_y or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# _you should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
@ -62,97 +62,97 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
super(ThemeForm, self).__init__(parent)
self.setupUi(self)
self.registerFields()
self.updateThemeAllowed = True
self.update_theme_allowed = True
self.temp_background_filename = ''
self.themeLayoutForm = ThemeLayoutForm(self)
self.backgroundComboBox.currentIndexChanged.connect(self.onBackgroundComboBoxCurrentIndexChanged)
self.gradientComboBox.currentIndexChanged.connect(self.onGradientComboBoxCurrentIndexChanged)
self.colorButton.clicked.connect(self.onColorButtonClicked)
self.imageColorButton.clicked.connect(self.onImageColorButtonClicked)
self.gradientStartButton.clicked.connect(self.onGradientStartButtonClicked)
self.gradientEndButton.clicked.connect(self.onGradientEndButtonClicked)
self.imageBrowseButton.clicked.connect(self.onImageBrowseButtonClicked)
self.imageFileEdit.editingFinished.connect(self.onImageFileEditEditingFinished)
self.mainColorButton.clicked.connect(self.onMainColorButtonClicked)
self.outlineColorButton.clicked.connect(self.onOutlineColorButtonClicked)
self.shadowColorButton.clicked.connect(self.onShadowColorButtonClicked)
self.outlineCheckBox.stateChanged.connect(self.onOutlineCheckCheckBoxStateChanged)
self.shadowCheckBox.stateChanged.connect(self.onShadowCheckCheckBoxStateChanged)
self.footerColorButton.clicked.connect(self.onFooterColorButtonClicked)
self.customButtonClicked.connect(self.onCustom1ButtonClicked)
self.mainPositionCheckBox.stateChanged.connect(self.onMainPositionCheckBoxStateChanged)
self.footerPositionCheckBox.stateChanged.connect(self.onFooterPositionCheckBoxStateChanged)
self.currentIdChanged.connect(self.onCurrentIdChanged)
Registry().register_function('theme_line_count', self.updateLinesText)
self.mainSizeSpinBox.valueChanged.connect(self.calculateLines)
self.lineSpacingSpinBox.valueChanged.connect(self.calculateLines)
self.outlineSizeSpinBox.valueChanged.connect(self.calculateLines)
self.shadowSizeSpinBox.valueChanged.connect(self.calculateLines)
self.mainFontComboBox.activated.connect(self.calculateLines)
self.footerFontComboBox.activated.connect(self.updateTheme)
self.footerSizeSpinBox.valueChanged.connect(self.updateTheme)
self.theme_layout_form = ThemeLayoutForm(self)
self.background_combo_box.currentIndexChanged.connect(self.on_background_combo_box_current_index_changed)
self.gradient_combo_box.currentIndexChanged.connect(self.on_gradient_combo_box_current_index_changed)
self.color_button.clicked.connect(self.on_color_button_clicked)
self.image_color_button.clicked.connect(self.on_image_color_button_clicked)
self.gradient_start_button.clicked.connect(self.on_gradient_start_button_clicked)
self.gradient_end_button.clicked.connect(self.on_gradient_end_button_clicked)
self.image_browse_button.clicked.connect(self.on_image_browse_button_clicked)
self.image_file_edit.editingFinished.connect(self.on_image_file_edit_editing_finished)
self.main_color_button.clicked.connect(self.on_main_color_button_clicked)
self.outline_color_button.clicked.connect(self.on_outline_color_button_clicked)
self.shadow_color_button.clicked.connect(self.on_shadow_color_button_clicked)
self.outline_check_box.stateChanged.connect(self.on_outline_check_check_box_state_changed)
self.shadow_check_box.stateChanged.connect(self.on_shadow_check_check_box_state_changed)
self.footer_color_button.clicked.connect(self.on_footer_color_button_clicked)
self.customButtonClicked.connect(self.on_custom_1_button_clicked)
self.main_position_check_box.stateChanged.connect(self.on_main_position_check_box_state_changed)
self.footer_position_check_box.stateChanged.connect(self.on_footer_position_check_box_state_changed)
self.currentIdChanged.connect(self.on_current_id_changed)
Registry().register_function('theme_line_count', self.update_lines_text)
self.main_size_spin_box.valueChanged.connect(self.calculate_lines)
self.line_spacing_spin_box.valueChanged.connect(self.calculate_lines)
self.outline_size_spin_box.valueChanged.connect(self.calculate_lines)
self.shadow_size_spin_box.valueChanged.connect(self.calculate_lines)
self.main_font_combo_box.activated.connect(self.calculate_lines)
self.footer_font_combo_box.activated.connect(self.update_theme)
self.footer_size_spin_box.valueChanged.connect(self.update_theme)
def setDefaults(self):
"""
Set up display at start of theme edit.
"""
self.restart()
self.setBackgroundPageValues()
self.setMainAreaPageValues()
self.setFooterAreaPageValues()
self.setAlignmentPageValues()
self.setPositionPageValues()
self.setPreviewPageValues()
self.set_background_page_values()
self.set_main_area_page_values()
self.set_footer_area_page_values()
self.set_alignment_page_values()
self.set_position_page_values()
self.set_preview_page_values()
def registerFields(self):
"""
Map field names to screen names,
"""
self.backgroundPage.registerField('background_type', self.backgroundComboBox)
self.backgroundPage.registerField('color', self.colorButton)
self.backgroundPage.registerField('grandient_start', self.gradientStartButton)
self.backgroundPage.registerField('grandient_end', self.gradientEndButton)
self.backgroundPage.registerField('background_image', self.imageFileEdit)
self.backgroundPage.registerField('gradient', self.gradientComboBox)
self.mainAreaPage.registerField('mainColorButton', self.mainColorButton)
self.mainAreaPage.registerField('mainSizeSpinBox', self.mainSizeSpinBox)
self.mainAreaPage.registerField('lineSpacingSpinBox', self.lineSpacingSpinBox)
self.mainAreaPage.registerField('outlineCheckBox', self.outlineCheckBox)
self.mainAreaPage.registerField('outlineColorButton', self.outlineColorButton)
self.mainAreaPage.registerField('outlineSizeSpinBox', self.outlineSizeSpinBox)
self.mainAreaPage.registerField('shadowCheckBox', self.shadowCheckBox)
self.mainAreaPage.registerField('mainBoldCheckBox', self.mainBoldCheckBox)
self.mainAreaPage.registerField('mainItalicsCheckBox', self.mainItalicsCheckBox)
self.mainAreaPage.registerField('shadowColorButton', self.shadowColorButton)
self.mainAreaPage.registerField('shadowSizeSpinBox', self.shadowSizeSpinBox)
self.mainAreaPage.registerField('footerSizeSpinBox', self.footerSizeSpinBox)
self.areaPositionPage.registerField('mainPositionX', self.mainXSpinBox)
self.areaPositionPage.registerField('mainPositionY', self.mainYSpinBox)
self.areaPositionPage.registerField('mainPositionWidth', self.mainWidthSpinBox)
self.areaPositionPage.registerField('mainPositionHeight', self.mainHeightSpinBox)
self.areaPositionPage.registerField('footerPositionX', self.footerXSpinBox)
self.areaPositionPage.registerField('footerPositionY', self.footerYSpinBox)
self.areaPositionPage.registerField('footerPositionWidth', self.footerWidthSpinBox)
self.areaPositionPage.registerField('footerPositionHeight', self.footerHeightSpinBox)
self.backgroundPage.registerField('horizontal', self.horizontalComboBox)
self.backgroundPage.registerField('vertical', self.verticalComboBox)
self.backgroundPage.registerField('slideTransition', self.transitionsCheckBox)
self.backgroundPage.registerField('name', self.themeNameEdit)
self.background_page.registerField('background_type', self.background_combo_box)
self.background_page.registerField('color', self.color_button)
self.background_page.registerField('gradient_start', self.gradient_start_button)
self.background_page.registerField('gradient_end', self.gradient_end_button)
self.background_page.registerField('background_image', self.image_file_edit)
self.background_page.registerField('gradient', self.gradient_combo_box)
self.main_area_page.registerField('main_color_button', self.main_color_button)
self.main_area_page.registerField('main_size_spin_box', self.main_size_spin_box)
self.main_area_page.registerField('line_spacing_spin_box', self.line_spacing_spin_box)
self.main_area_page.registerField('outline_check_box', self.outline_check_box)
self.main_area_page.registerField('outline_color_button', self.outline_color_button)
self.main_area_page.registerField('outline_size_spin_box', self.outline_size_spin_box)
self.main_area_page.registerField('shadow_check_box', self.shadow_check_box)
self.main_area_page.registerField('main_bold_check_box', self.main_bold_check_box)
self.main_area_page.registerField('main_italics_check_box', self.main_italics_check_box)
self.main_area_page.registerField('shadow_color_button', self.shadow_color_button)
self.main_area_page.registerField('shadow_size_spin_box', self.shadow_size_spin_box)
self.main_area_page.registerField('footer_size_spin_box', self.footer_size_spin_box)
self.area_position_page.registerField('main_position_x', self.main_x_spin_box)
self.area_position_page.registerField('main_position_y', self.main_y_spin_box)
self.area_position_page.registerField('main_position_width', self.main_width_spin_box)
self.area_position_page.registerField('main_position_height', self.main_height_spin_box)
self.area_position_page.registerField('footer_position_x', self.footer_x_spin_box)
self.area_position_page.registerField('footer_position_y', self.footer_y_spin_box)
self.area_position_page.registerField('footer_position_width', self.footer_width_spin_box)
self.area_position_page.registerField('footer_position_height', self.footer_height_spin_box)
self.background_page.registerField('horizontal', self.horizontal_combo_box)
self.background_page.registerField('vertical', self.vertical_combo_box)
self.background_page.registerField('slide_transition', self.transitions_check_box)
self.background_page.registerField('name', self.theme_name_edit)
def calculateLines(self):
def calculate_lines(self):
"""
Calculate the number of lines on a page by rendering text
"""
# Do not trigger on start up
if self.currentPage != self.welcome_page:
self.updateTheme()
self.update_theme()
self.theme_manager.generate_image(self.theme, True)
def updateLinesText(self, lines):
def update_lines_text(self, lines):
"""
Updates the lines on a page on the wizard
"""
self.mainLineCountLabel.setText(
self.main_line_count_label.setText(
translate('OpenLP.ThemeForm', '(approximately %d lines per slide)') % int(lines))
def resizeEvent(self, event=None):
@ -162,50 +162,49 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
if not event:
event = QtGui.QResizeEvent(self.size(), self.size())
QtGui.QWizard.resizeEvent(self, event)
if self.currentPage() == self.previewPage:
frameWidth = self.previewBoxLabel.lineWidth()
pixmapWidth = self.previewArea.width() - 2 * frameWidth
pixmapHeight = self.previewArea.height() - 2 * frameWidth
aspectRatio = float(pixmapWidth) / pixmapHeight
if aspectRatio < self.displayAspectRatio:
pixmapHeight = int(pixmapWidth / self.displayAspectRatio + 0.5)
if self.currentPage() == self.preview_page:
frame_width = self.preview_box_label.lineWidth()
pixmap_width = self.preview_area.width() - 2 * frame_width
pixmap_height = self.preview_area.height() - 2 * frame_width
aspect_ratio = float(pixmap_width) / pixmap_height
if aspect_ratio < self.display_aspect_ratio:
pixmap_height = int(pixmap_width / self.display_aspect_ratio + 0.5)
else:
pixmapWidth = int(pixmapHeight * self.displayAspectRatio + 0.5)
self.previewBoxLabel.setFixedSize(pixmapWidth + 2 * frameWidth,
pixmapHeight + 2 * frameWidth)
pixmap_width = int(pixmap_height * self.display_aspect_ratio + 0.5)
self.preview_box_label.setFixedSize(pixmap_width + 2 * frame_width, pixmap_height + 2 * frame_width)
def validateCurrentPage(self):
"""
Validate the current page
"""
background_image = BackgroundType.to_string(BackgroundType.Image)
if self.page(self.currentId()) == self.backgroundPage and \
if self.page(self.currentId()) == self.background_page and \
self.theme.background_type == background_image and is_not_image_file(self.theme.background_filename):
QtGui.QMessageBox.critical(self, translate('OpenLP.ThemeWizard', 'Background Image Empty'),
translate('OpenLP.ThemeWizard', 'You have not selected a '
'background image. Please select one before continuing.'))
translate('OpenLP.ThemeWizard', '_you have not selected a '
'background image. Please select one before continuing.'))
return False
else:
return True
def onCurrentIdChanged(self, pageId):
def on_current_id_changed(self, page_id):
"""
Detects Page changes and updates as appropriate.
"""
enabled = self.page(pageId) == self.areaPositionPage
enabled = self.page(page_id) == self.area_position_page
self.setOption(QtGui.QWizard.HaveCustomButton1, enabled)
if self.page(pageId) == self.previewPage:
self.updateTheme()
if self.page(page_id) == self.preview_page:
self.update_theme()
frame = self.theme_manager.generate_image(self.theme)
self.previewBoxLabel.setPixmap(frame)
self.displayAspectRatio = float(frame.width()) / frame.height()
self.preview_box_label.setPixmap(frame)
self.display_aspect_ratio = float(frame.width()) / frame.height()
self.resizeEvent()
def onCustom1ButtonClicked(self, number):
def on_custom_1_button_clicked(self, number):
"""
Generate layout preview and display the form.
"""
self.updateTheme()
self.update_theme()
width = self.renderer.width
height = self.renderer.height
pixmap = QtGui.QPixmap(width, height)
@ -216,45 +215,45 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
paint.setPen(QtGui.QPen(QtCore.Qt.red, 2))
paint.drawRect(self.renderer.get_footer_rectangle(self.theme))
paint.end()
self.themeLayoutForm.exec_(pixmap)
self.theme_layout_form.exec_(pixmap)
def onOutlineCheckCheckBoxStateChanged(self, state):
def on_outline_check_check_box_state_changed(self, state):
"""
Change state as Outline check box changed
"""
if self.updateThemeAllowed:
if self.update_theme_allowed:
self.theme.font_main_outline = state == QtCore.Qt.Checked
self.outlineColorButton.setEnabled(self.theme.font_main_outline)
self.outlineSizeSpinBox.setEnabled(self.theme.font_main_outline)
self.calculateLines()
self.outline_color_button.setEnabled(self.theme.font_main_outline)
self.outline_size_spin_box.setEnabled(self.theme.font_main_outline)
self.calculate_lines()
def onShadowCheckCheckBoxStateChanged(self, state):
def on_shadow_check_check_box_state_changed(self, state):
"""
Change state as Shadow check box changed
"""
if self.updateThemeAllowed:
if self.update_theme_allowed:
if state == QtCore.Qt.Checked:
self.theme.font_main_shadow = True
else:
self.theme.font_main_shadow = False
self.shadowColorButton.setEnabled(self.theme.font_main_shadow)
self.shadowSizeSpinBox.setEnabled(self.theme.font_main_shadow)
self.calculateLines()
self.shadow_color_button.setEnabled(self.theme.font_main_shadow)
self.shadow_size_spin_box.setEnabled(self.theme.font_main_shadow)
self.calculate_lines()
def onMainPositionCheckBoxStateChanged(self, value):
def on_main_position_check_box_state_changed(self, value):
"""
Change state as Main Area Position check box changed
Change state as Main Area _position check box changed
NOTE the font_main_override is the inverse of the check box value
"""
if self.updateThemeAllowed:
if self.update_theme_allowed:
self.theme.font_main_override = not (value == QtCore.Qt.Checked)
def onFooterPositionCheckBoxStateChanged(self, value):
def on_footer_position_check_box_state_changed(self, value):
"""
Change state as Footer Area Position check box changed
Change state as Footer Area _position check box changed
NOTE the font_footer_override is the inverse of the check box value
"""
if self.updateThemeAllowed:
if self.update_theme_allowed:
self.theme.font_footer_override = not (value == QtCore.Qt.Checked)
def exec_(self, edit=False):
@ -263,11 +262,11 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
"""
log.debug('Editing theme %s' % self.theme.theme_name)
self.temp_background_filename = ''
self.updateThemeAllowed = False
self.update_theme_allowed = False
self.setDefaults()
self.updateThemeAllowed = True
self.themeNameLabel.setVisible(not edit)
self.themeNameEdit.setVisible(not edit)
self.update_theme_allowed = True
self.theme_name_label.setVisible(not edit)
self.theme_name_edit.setVisible(not edit)
self.edit_mode = edit
if edit:
self.setWindowTitle(translate('OpenLP.ThemeWizard', 'Edit Theme - %s') % self.theme.theme_name)
@ -281,33 +280,32 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
Set up the pages for Initial run through dialog
"""
log.debug('initializePage %s' % page_id)
wizardPage = self.page(page_id)
if wizardPage == self.backgroundPage:
self.setBackgroundPageValues()
elif wizardPage == self.mainAreaPage:
self.setMainAreaPageValues()
elif wizardPage == self.footerAreaPage:
self.setFooterAreaPageValues()
elif wizardPage == self.alignmentPage:
self.setAlignmentPageValues()
elif wizardPage == self.areaPositionPage:
self.setPositionPageValues()
wizard_page = self.page(page_id)
if wizard_page == self.background_page:
self.set_background_page_values()
elif wizard_page == self.main_area_page:
self.set_main_area_page_values()
elif wizard_page == self.footer_area_page:
self.set_footer_area_page_values()
elif wizard_page == self.alignment_page:
self.set_alignment_page_values()
elif wizard_page == self.area_position_page:
self.set_position_page_values()
def setBackgroundPageValues(self):
def set_background_page_values(self):
"""
Handle the display and state of the Background page.
"""
if self.theme.background_type == \
BackgroundType.to_string(BackgroundType.Solid):
self.colorButton.setStyleSheet('background-color: %s' % self.theme.background_color)
if self.theme.background_type == BackgroundType.to_string(BackgroundType.Solid):
self.color_button.setStyleSheet('background-color: %s' % self.theme.background_color)
self.setField('background_type', 0)
elif self.theme.background_type == BackgroundType.to_string(BackgroundType.Gradient):
self.gradientStartButton.setStyleSheet('background-color: %s' % self.theme.background_start_color)
self.gradientEndButton.setStyleSheet('background-color: %s' % self.theme.background_end_color)
self.gradient_start_button.setStyleSheet('background-color: %s' % self.theme.background_start_color)
self.gradient_end_button.setStyleSheet('background-color: %s' % self.theme.background_end_color)
self.setField('background_type', 1)
elif self.theme.background_type == BackgroundType.to_string(BackgroundType.Image):
self.imageColorButton.setStyleSheet('background-color: %s' % self.theme.background_border_color)
self.imageFileEdit.setText(self.theme.background_filename)
self.image_color_button.setStyleSheet('background-color: %s' % self.theme.background_border_color)
self.image_file_edit.setText(self.theme.background_filename)
self.setField('background_type', 2)
elif self.theme.background_type == BackgroundType.to_string(BackgroundType.Transparent):
self.setField('background_type', 3)
@ -322,68 +320,68 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
else:
self.setField('gradient', 4)
def setMainAreaPageValues(self):
def set_main_area_page_values(self):
"""
Handle the display and state of the Main Area page.
"""
self.mainFontComboBox.setCurrentFont(QtGui.QFont(self.theme.font_main_name))
self.mainColorButton.setStyleSheet('background-color: %s' % self.theme.font_main_color)
self.setField('mainSizeSpinBox', self.theme.font_main_size)
self.setField('lineSpacingSpinBox', self.theme.font_main_line_adjustment)
self.setField('outlineCheckBox', self.theme.font_main_outline)
self.outlineColorButton.setStyleSheet('background-color: %s' % self.theme.font_main_outline_color)
self.setField('outlineSizeSpinBox', self.theme.font_main_outline_size)
self.setField('shadowCheckBox', self.theme.font_main_shadow)
self.shadowColorButton.setStyleSheet('background-color: %s' % self.theme.font_main_shadow_color)
self.setField('shadowSizeSpinBox', self.theme.font_main_shadow_size)
self.setField('mainBoldCheckBox', self.theme.font_main_bold)
self.setField('mainItalicsCheckBox', self.theme.font_main_italics)
self.main_font_combo_box.setCurrentFont(QtGui.QFont(self.theme.font_main_name))
self.main_color_button.setStyleSheet('background-color: %s' % self.theme.font_main_color)
self.setField('main_size_spin_box', self.theme.font_main_size)
self.setField('line_spacing_spin_box', self.theme.font_main_line_adjustment)
self.setField('outline_check_box', self.theme.font_main_outline)
self.outline_color_button.setStyleSheet('background-color: %s' % self.theme.font_main_outline_color)
self.setField('outline_size_spin_box', self.theme.font_main_outline_size)
self.setField('shadow_check_box', self.theme.font_main_shadow)
self.shadow_color_button.setStyleSheet('background-color: %s' % self.theme.font_main_shadow_color)
self.setField('shadow_size_spin_box', self.theme.font_main_shadow_size)
self.setField('main_bold_check_box', self.theme.font_main_bold)
self.setField('main_italics_check_box', self.theme.font_main_italics)
def setFooterAreaPageValues(self):
def set_footer_area_page_values(self):
"""
Handle the display and state of the Footer Area page.
"""
self.footerFontComboBox.setCurrentFont(QtGui.QFont(self.theme.font_footer_name))
self.footerColorButton.setStyleSheet('background-color: %s' % self.theme.font_footer_color)
self.setField('footerSizeSpinBox', self.theme.font_footer_size)
self.footer_font_combo_box.setCurrentFont(QtGui.QFont(self.theme.font_footer_name))
self.footer_color_button.setStyleSheet('background-color: %s' % self.theme.font_footer_color)
self.setField('footer_size_spin_box', self.theme.font_footer_size)
def setPositionPageValues(self):
def set_position_page_values(self):
"""
Handle the display and state of the Position page.
Handle the display and state of the _position page.
"""
# Main Area
self.mainPositionCheckBox.setChecked(not self.theme.font_main_override)
self.setField('mainPositionX', self.theme.font_main_x)
self.setField('mainPositionY', self.theme.font_main_y)
self.setField('mainPositionHeight', self.theme.font_main_height)
self.setField('mainPositionWidth', self.theme.font_main_width)
self.main_position_check_box.setChecked(not self.theme.font_main_override)
self.setField('main_position_x', self.theme.font_main_x)
self.setField('main_position_y', self.theme.font_main_y)
self.setField('main_position_height', self.theme.font_main_height)
self.setField('main_position_width', self.theme.font_main_width)
# Footer
self.footerPositionCheckBox.setChecked(not self.theme.font_footer_override)
self.setField('footerPositionX', self.theme.font_footer_x)
self.setField('footerPositionY', self.theme.font_footer_y)
self.setField('footerPositionHeight', self.theme.font_footer_height)
self.setField('footerPositionWidth', self.theme.font_footer_width)
self.footer_position_check_box.setChecked(not self.theme.font_footer_override)
self.setField('footer_position_x', self.theme.font_footer_x)
self.setField('footer_position_y', self.theme.font_footer_y)
self.setField('footer_position_height', self.theme.font_footer_height)
self.setField('footer_position_width', self.theme.font_footer_width)
def setAlignmentPageValues(self):
def set_alignment_page_values(self):
"""
Handle the display and state of the Alignments page.
"""
self.setField('horizontal', self.theme.display_horizontal_align)
self.setField('vertical', self.theme.display_vertical_align)
self.setField('slideTransition', self.theme.display_slide_transition)
self.setField('slide_transition', self.theme.display_slide_transition)
def setPreviewPageValues(self):
def set_preview_page_values(self):
"""
Handle the display and state of the Preview page.
"""
self.setField('name', self.theme.theme_name)
def onBackgroundComboBoxCurrentIndexChanged(self, index):
def on_background_combo_box_current_index_changed(self, index):
"""
Background style Combo box has changed.
"""
# do not allow updates when screen is building for the first time.
if self.updateThemeAllowed:
if self.update_theme_allowed:
self.theme.background_type = BackgroundType.to_string(index)
if self.theme.background_type != BackgroundType.to_string(BackgroundType.Image) and \
self.temp_background_filename == '':
@ -393,122 +391,122 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
self.temp_background_filename != '':
self.theme.background_filename = self.temp_background_filename
self.temp_background_filename = ''
self.setBackgroundPageValues()
self.set_background_page_values()
def onGradientComboBoxCurrentIndexChanged(self, index):
def on_gradient_combo_box_current_index_changed(self, index):
"""
Background gradient Combo box has changed.
"""
if self.updateThemeAllowed:
if self.update_theme_allowed:
self.theme.background_direction = BackgroundGradientType.to_string(index)
self.setBackgroundPageValues()
self.set_background_page_values()
def onColorButtonClicked(self):
def on_color_button_clicked(self):
"""
Background / Gradient 1 Color button pushed.
Background / Gradient 1 _color button pushed.
"""
self.theme.background_color = self._colorButton(self.theme.background_color)
self.setBackgroundPageValues()
self.theme.background_color = self._color_button(self.theme.background_color)
self.set_background_page_values()
def onImageColorButtonClicked(self):
def on_image_color_button_clicked(self):
"""
Background / Gradient 1 Color button pushed.
Background / Gradient 1 _color button pushed.
"""
self.theme.background_border_color = self._colorButton(self.theme.background_border_color)
self.setBackgroundPageValues()
self.theme.background_border_color = self._color_button(self.theme.background_border_color)
self.set_background_page_values()
def onGradientStartButtonClicked(self):
def on_gradient_start_button_clicked(self):
"""
Gradient 2 Color button pushed.
Gradient 2 _color button pushed.
"""
self.theme.background_start_color = self._colorButton(self.theme.background_start_color)
self.setBackgroundPageValues()
self.theme.background_start_color = self._color_button(self.theme.background_start_color)
self.set_background_page_values()
def onGradientEndButtonClicked(self):
def on_gradient_end_button_clicked(self):
"""
Gradient 2 Color button pushed.
Gradient 2 _color button pushed.
"""
self.theme.background_end_color = self._colorButton(self.theme.background_end_color)
self.setBackgroundPageValues()
self.theme.background_end_color = self._color_button(self.theme.background_end_color)
self.set_background_page_values()
def onImageBrowseButtonClicked(self):
def on_image_browse_button_clicked(self):
"""
Background Image button pushed.
"""
images_filter = get_images_filter()
images_filter = '%s;;%s (*.*) (*)' % (images_filter, UiStrings().AllFiles)
filename = QtGui.QFileDialog.getOpenFileName(self,
translate('OpenLP.ThemeWizard', 'Select Image'), '', images_filter)
filename = QtGui.QFileDialog.getOpenFileName(self, translate('OpenLP.ThemeWizard', 'Select Image'), '',
images_filter)
if filename:
self.theme.background_filename = str(filename)
self.setBackgroundPageValues()
self.set_background_page_values()
def onImageFileEditEditingFinished(self):
def on_image_file_edit_editing_finished(self):
"""
Background image path edited
"""
self.theme.background_filename = str(self.imageFileEdit.text())
self.theme.background_filename = str(self.image_file_edit.text())
def onMainColorButtonClicked(self):
def on_main_color_button_clicked(self):
"""
Set the main colour value
"""
self.theme.font_main_color = self._colorButton(self.theme.font_main_color)
self.setMainAreaPageValues()
self.theme.font_main_color = self._color_button(self.theme.font_main_color)
self.set_main_area_page_values()
def onOutlineColorButtonClicked(self):
def on_outline_color_button_clicked(self):
"""
Set the outline colour value
"""
self.theme.font_main_outline_color = self._colorButton(self.theme.font_main_outline_color)
self.setMainAreaPageValues()
self.theme.font_main_outline_color = self._color_button(self.theme.font_main_outline_color)
self.set_main_area_page_values()
def onShadowColorButtonClicked(self):
def on_shadow_color_button_clicked(self):
"""
Set the shadow colour value
"""
self.theme.font_main_shadow_color = self._colorButton(self.theme.font_main_shadow_color)
self.setMainAreaPageValues()
self.theme.font_main_shadow_color = self._color_button(self.theme.font_main_shadow_color)
self.set_main_area_page_values()
def onFooterColorButtonClicked(self):
def on_footer_color_button_clicked(self):
"""
Set the footer colour value
"""
self.theme.font_footer_color = self._colorButton(self.theme.font_footer_color)
self.setFooterAreaPageValues()
self.theme.font_footer_color = self._color_button(self.theme.font_footer_color)
self.set_footer_area_page_values()
def updateTheme(self):
def update_theme(self):
"""
Update the theme object from the UI for fields not already updated
when the are changed.
"""
if not self.updateThemeAllowed:
if not self.update_theme_allowed:
return
log.debug('updateTheme')
log.debug('update_theme')
# main page
self.theme.font_main_name = self.mainFontComboBox.currentFont().family()
self.theme.font_main_size = self.field('mainSizeSpinBox')
self.theme.font_main_line_adjustment = self.field('lineSpacingSpinBox')
self.theme.font_main_outline_size = self.field('outlineSizeSpinBox')
self.theme.font_main_shadow_size = self.field('shadowSizeSpinBox')
self.theme.font_main_bold = self.field('mainBoldCheckBox')
self.theme.font_main_italics = self.field('mainItalicsCheckBox')
self.theme.font_main_name = self.main_font_combo_box.currentFont().family()
self.theme.font_main_size = self.field('main_size_spin_box')
self.theme.font_main_line_adjustment = self.field('line_spacing_spin_box')
self.theme.font_main_outline_size = self.field('outline_size_spin_box')
self.theme.font_main_shadow_size = self.field('shadow_size_spin_box')
self.theme.font_main_bold = self.field('main_bold_check_box')
self.theme.font_main_italics = self.field('main_italics_check_box')
# footer page
self.theme.font_footer_name = self.footerFontComboBox.currentFont().family()
self.theme.font_footer_size = self.field('footerSizeSpinBox')
self.theme.font_footer_name = self.footer_font_combo_box.currentFont().family()
self.theme.font_footer_size = self.field('footer_size_spin_box')
# position page
self.theme.font_main_x = self.field('mainPositionX')
self.theme.font_main_y = self.field('mainPositionY')
self.theme.font_main_height = self.field('mainPositionHeight')
self.theme.font_main_width = self.field('mainPositionWidth')
self.theme.font_footer_x = self.field('footerPositionX')
self.theme.font_footer_y = self.field('footerPositionY')
self.theme.font_footer_height = self.field('footerPositionHeight')
self.theme.font_footer_width = self.field('footerPositionWidth')
self.theme.font_main_x = self.field('main_position_x')
self.theme.font_main_y = self.field('main_position_y')
self.theme.font_main_height = self.field('main_position_height')
self.theme.font_main_width = self.field('main_position_width')
self.theme.font_footer_x = self.field('footer_position_x')
self.theme.font_footer_y = self.field('footer_position_y')
self.theme.font_footer_height = self.field('footer_position_height')
self.theme.font_footer_width = self.field('footer_position_width')
# position page
self.theme.display_horizontal_align = self.horizontalComboBox.currentIndex()
self.theme.display_vertical_align = self.verticalComboBox.currentIndex()
self.theme.display_slide_transition = self.field('slideTransition')
self.theme.display_horizontal_align = self.horizontal_combo_box.currentIndex()
self.theme.display_vertical_align = self.vertical_combo_box.currentIndex()
self.theme.display_slide_transition = self.field('slide_transition')
def accept(self):
"""
@ -526,20 +524,20 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
translate('OpenLP.ThemeWizard', 'Theme Name Invalid'),
translate('OpenLP.ThemeWizard', 'Invalid theme name. Please enter one.'))
return
saveFrom = None
saveTo = None
save_from = None
save_to = None
if self.theme.background_type == BackgroundType.to_string(BackgroundType.Image):
filename = os.path.split(str(self.theme.background_filename))[1]
saveTo = os.path.join(self.path, self.theme.theme_name, filename)
saveFrom = self.theme.background_filename
save_to = os.path.join(self.path, self.theme.theme_name, filename)
save_from = self.theme.background_filename
if not self.edit_mode and not self.theme_manager.check_if_theme_exists(self.theme.theme_name):
return
self.theme_manager.save_theme(self.theme, saveFrom, saveTo)
self.theme_manager.save_theme(self.theme, save_from, save_to)
return QtGui.QDialog.accept(self)
def _colorButton(self, field):
def _color_button(self, field):
"""
Handle Color buttons
Handle _color buttons
"""
new_color = QtGui.QColorDialog.getColor(QtGui.QColor(field), self)
if new_color.isValid():

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -45,29 +45,29 @@ class Ui_ThemeLayoutDialog(object):
"""
themeLayoutDialog.setObjectName('themeLayoutDialogDialog')
#themeLayoutDialog.resize(300, 200)
self.previewLayout = QtGui.QVBoxLayout(themeLayoutDialog)
self.previewLayout.setObjectName('previewLayout')
self.previewArea = QtGui.QWidget(themeLayoutDialog)
self.previewArea.setObjectName('previewArea')
self.previewAreaLayout = QtGui.QGridLayout(self.previewArea)
self.previewAreaLayout.setMargin(0)
self.previewAreaLayout.setColumnStretch(0, 1)
self.previewAreaLayout.setRowStretch(0, 1)
self.previewAreaLayout.setObjectName('previewAreaLayout')
self.themeDisplayLabel = QtGui.QLabel(self.previewArea)
self.themeDisplayLabel.setFrameShape(QtGui.QFrame.Box)
self.themeDisplayLabel.setScaledContents(True)
self.themeDisplayLabel.setObjectName('themeDisplayLabel')
self.previewAreaLayout.addWidget(self.themeDisplayLabel)
self.previewLayout.addWidget(self.previewArea)
self.mainColourLabel = QtGui.QLabel(self.previewArea)
self.mainColourLabel.setObjectName('mainColourLabel')
self.previewLayout.addWidget(self.mainColourLabel)
self.footerColourLabel = QtGui.QLabel(self.previewArea)
self.footerColourLabel.setObjectName('footerColourLabel')
self.previewLayout.addWidget(self.footerColourLabel)
self.preview_layout = QtGui.QVBoxLayout(themeLayoutDialog)
self.preview_layout.setObjectName('preview_layout')
self.preview_area = QtGui.QWidget(themeLayoutDialog)
self.preview_area.setObjectName('preview_area')
self.preview_area_layout = QtGui.QGridLayout(self.preview_area)
self.preview_area_layout.setMargin(0)
self.preview_area_layout.setColumnStretch(0, 1)
self.preview_area_layout.setRowStretch(0, 1)
self.preview_area_layout.setObjectName('preview_area_layout')
self.theme_display_label = QtGui.QLabel(self.preview_area)
self.theme_display_label.setFrameShape(QtGui.QFrame.Box)
self.theme_display_label.setScaledContents(True)
self.theme_display_label.setObjectName('theme_display_label')
self.preview_area_layout.addWidget(self.theme_display_label)
self.preview_layout.addWidget(self.preview_area)
self.main_colour_label = QtGui.QLabel(self.preview_area)
self.main_colour_label.setObjectName('main_colour_label')
self.preview_layout.addWidget(self.main_colour_label)
self.footer_colour_label = QtGui.QLabel(self.preview_area)
self.footer_colour_label.setObjectName('footer_colour_label')
self.preview_layout.addWidget(self.footer_colour_label)
self.button_box = create_button_box(themeLayoutDialog, 'button_box', ['ok'])
self.previewLayout.addWidget(self.button_box)
self.preview_layout.addWidget(self.button_box)
self.retranslateUi(themeLayoutDialog)
def retranslateUi(self, themeLayoutDialog):
@ -75,5 +75,5 @@ class Ui_ThemeLayoutDialog(object):
Translate the UI on the fly
"""
themeLayoutDialog.setWindowTitle(translate('OpenLP.StartTimeForm', 'Theme Layout'))
self.mainColourLabel.setText(translate('OpenLP.StartTimeForm', 'The blue box shows the main area.'))
self.footerColourLabel.setText(translate('OpenLP.StartTimeForm', 'The red box shows the footer.'))
self.main_colour_label.setText(translate('OpenLP.StartTimeForm', 'The blue box shows the main area.'))
self.footer_colour_label.setText(translate('OpenLP.StartTimeForm', 'The red box shows the footer.'))

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -50,7 +50,7 @@ class ThemeLayoutForm(QtGui.QDialog, Ui_ThemeLayoutDialog):
Run the Dialog with correct heading.
"""
pixmap = image.scaledToHeight(400, QtCore.Qt.SmoothTransformation)
self.themeDisplayLabel.setPixmap(pixmap)
displayAspectRatio = float(image.width()) / image.height()
self.themeDisplayLabel.setFixedSize(400, 400 / displayAspectRatio)
self.theme_display_label.setPixmap(pixmap)
display_aspect_ratio = float(image.width()) / image.height()
self.theme_display_label.setFixedSize(400, 400 / display_aspect_ratio)
return QtGui.QDialog.exec_(self)

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -92,7 +92,7 @@ class ThemesTab(SettingsTab):
self.global_level_label.setObjectName('global_level_label')
self.level_layout.addRow(self.global_level_radio_button, self.global_level_label)
label_top_margin = (self.song_level_radio_button.sizeHint().height() -
self.song_level_label.sizeHint().height()) // 2
self.song_level_label.sizeHint().height()) // 2
for label in [self.song_level_label, self.service_level_label, self.global_level_label]:
rect = label.rect()
rect.setTop(rect.top() + label_top_margin)
@ -115,16 +115,16 @@ class ThemesTab(SettingsTab):
self.level_group_box.setTitle(translate('OpenLP.ThemesTab', 'Theme Level'))
self.song_level_radio_button.setText(translate('OpenLP.ThemesTab', 'S&ong Level'))
self.song_level_label.setText(translate('OpenLP.ThemesTab', 'Use the theme from each song '
'in the database. If a song doesn\'t have a theme associated with '
'it, then use the service\'s theme. If the service doesn\'t have '
'a theme, then use the global theme.'))
'in the database. If a song doesn\'t have a theme associated with '
'it, then use the service\'s theme. If the service doesn\'t have '
'a theme, then use the global theme.'))
self.service_level_radio_button.setText(translate('OpenLP.ThemesTab', '&Service Level'))
self.service_level_label.setText(translate('OpenLP.ThemesTab', 'Use the theme from the service, '
'overriding any of the individual songs\' themes. If the '
'service doesn\'t have a theme, then use the global theme.'))
'overriding any of the individual songs\' themes. If the '
'service doesn\'t have a theme, then use the global theme.'))
self.global_level_radio_button.setText(translate('OpenLP.ThemesTab', '&Global Level'))
self.global_level_label.setText(translate('OpenLP.ThemesTab', 'Use the global theme, overriding '
'any themes associated with either the service or the songs.'))
'any themes associated with either the service or the songs.'))
def load(self):
"""

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
@ -49,346 +49,346 @@ class Ui_ThemeWizard(object):
themeWizard.setModal(True)
themeWizard.setWizardStyle(QtGui.QWizard.ModernStyle)
themeWizard.setOptions(QtGui.QWizard.IndependentPages |
QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.HaveCustomButton1)
QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.HaveCustomButton1)
self.spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum)
# Welcome Page
add_welcome_page(themeWizard, ':/wizards/wizard_createtheme.bmp')
# Background Page
self.backgroundPage = QtGui.QWizardPage()
self.backgroundPage.setObjectName('BackgroundPage')
self.backgroundLayout = QtGui.QVBoxLayout(self.backgroundPage)
self.backgroundLayout.setObjectName('BackgroundLayout')
self.backgroundTypeLayout = QtGui.QFormLayout()
self.backgroundTypeLayout.setObjectName('BackgroundTypeLayout')
self.backgroundLabel = QtGui.QLabel(self.backgroundPage)
self.backgroundLabel.setObjectName('BackgroundLabel')
self.backgroundComboBox = QtGui.QComboBox(self.backgroundPage)
self.backgroundComboBox.addItems(['', '', '', ''])
self.backgroundComboBox.setObjectName('BackgroundComboBox')
self.backgroundTypeLayout.addRow(self.backgroundLabel, self.backgroundComboBox)
self.backgroundTypeLayout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer)
self.backgroundLayout.addLayout(self.backgroundTypeLayout)
self.backgroundStack = QtGui.QStackedLayout()
self.backgroundStack.setObjectName('BackgroundStack')
self.colorWidget = QtGui.QWidget(self.backgroundPage)
self.colorWidget.setObjectName('ColorWidget')
self.colorLayout = QtGui.QFormLayout(self.colorWidget)
self.colorLayout.setMargin(0)
self.colorLayout.setObjectName('ColorLayout')
self.colorLabel = QtGui.QLabel(self.colorWidget)
self.colorLabel.setObjectName('ColorLabel')
self.colorButton = QtGui.QPushButton(self.colorWidget)
self.colorButton.setObjectName('ColorButton')
self.colorLayout.addRow(self.colorLabel, self.colorButton)
self.colorLayout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer)
self.backgroundStack.addWidget(self.colorWidget)
self.gradientWidget = QtGui.QWidget(self.backgroundPage)
self.gradientWidget.setObjectName('GradientWidget')
self.gradientLayout = QtGui.QFormLayout(self.gradientWidget)
self.gradientLayout.setMargin(0)
self.gradientLayout.setObjectName('GradientLayout')
self.gradientStartLabel = QtGui.QLabel(self.gradientWidget)
self.gradientStartLabel.setObjectName('GradientStartLabel')
self.gradientStartButton = QtGui.QPushButton(self.gradientWidget)
self.gradientStartButton.setObjectName('GradientStartButton')
self.gradientLayout.addRow(self.gradientStartLabel, self.gradientStartButton)
self.gradientEndLabel = QtGui.QLabel(self.gradientWidget)
self.gradientEndLabel.setObjectName('GradientEndLabel')
self.gradientEndButton = QtGui.QPushButton(self.gradientWidget)
self.gradientEndButton.setObjectName('GradientEndButton')
self.gradientLayout.addRow(self.gradientEndLabel, self.gradientEndButton)
self.gradientTypeLabel = QtGui.QLabel(self.gradientWidget)
self.gradientTypeLabel.setObjectName('GradientTypeLabel')
self.gradientComboBox = QtGui.QComboBox(self.gradientWidget)
self.gradientComboBox.setObjectName('GradientComboBox')
self.gradientComboBox.addItems(['', '', '', '', ''])
self.gradientLayout.addRow(self.gradientTypeLabel, self.gradientComboBox)
self.gradientLayout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer)
self.backgroundStack.addWidget(self.gradientWidget)
self.imageWidget = QtGui.QWidget(self.backgroundPage)
self.imageWidget.setObjectName('ImageWidget')
self.imageLayout = QtGui.QFormLayout(self.imageWidget)
self.imageLayout.setMargin(0)
self.imageLayout.setObjectName('ImageLayout')
self.imageColorLabel = QtGui.QLabel(self.colorWidget)
self.imageColorLabel.setObjectName('ImageColorLabel')
self.imageColorButton = QtGui.QPushButton(self.colorWidget)
self.imageColorButton.setObjectName('ImageColorButton')
self.imageLayout.addRow(self.imageColorLabel, self.imageColorButton)
self.imageLabel = QtGui.QLabel(self.imageWidget)
self.imageLabel.setObjectName('ImageLabel')
self.imageFileLayout = QtGui.QHBoxLayout()
self.imageFileLayout.setObjectName('ImageFileLayout')
self.imageFileEdit = QtGui.QLineEdit(self.imageWidget)
self.imageFileEdit.setObjectName('ImageFileEdit')
self.imageFileLayout.addWidget(self.imageFileEdit)
self.imageBrowseButton = QtGui.QToolButton(self.imageWidget)
self.imageBrowseButton.setObjectName('ImageBrowseButton')
self.imageBrowseButton.setIcon(build_icon(':/general/general_open.png'))
self.imageFileLayout.addWidget(self.imageBrowseButton)
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('TransparentWidget')
self.transparentLayout = QtGui.QFormLayout(self.transparentWidget)
self.transparentLayout.setMargin(0)
self.transparentLayout.setObjectName('TransparentLayout')
self.backgroundStack.addWidget(self.transparentWidget)
self.backgroundLayout.addLayout(self.backgroundStack)
themeWizard.addPage(self.backgroundPage)
self.background_page = QtGui.QWizardPage()
self.background_page.setObjectName('background_page')
self.background_layout = QtGui.QVBoxLayout(self.background_page)
self.background_layout.setObjectName('background_layout')
self.background_type_layout = QtGui.QFormLayout()
self.background_type_layout.setObjectName('background_type_layout')
self.background_label = QtGui.QLabel(self.background_page)
self.background_label.setObjectName('background_label')
self.background_combo_box = QtGui.QComboBox(self.background_page)
self.background_combo_box.addItems(['', '', '', ''])
self.background_combo_box.setObjectName('background_combo_box')
self.background_type_layout.addRow(self.background_label, self.background_combo_box)
self.background_type_layout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer)
self.background_layout.addLayout(self.background_type_layout)
self.background_stack = QtGui.QStackedLayout()
self.background_stack.setObjectName('background_stack')
self.color_widget = QtGui.QWidget(self.background_page)
self.color_widget.setObjectName('color_widget')
self.color_layout = QtGui.QFormLayout(self.color_widget)
self.color_layout.setMargin(0)
self.color_layout.setObjectName('color_layout')
self.color_label = QtGui.QLabel(self.color_widget)
self.color_label.setObjectName('color_label')
self.color_button = QtGui.QPushButton(self.color_widget)
self.color_button.setObjectName('color_button')
self.color_layout.addRow(self.color_label, self.color_button)
self.color_layout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer)
self.background_stack.addWidget(self.color_widget)
self.gradient_widget = QtGui.QWidget(self.background_page)
self.gradient_widget.setObjectName('Gradient_widget')
self.gradient_layout = QtGui.QFormLayout(self.gradient_widget)
self.gradient_layout.setMargin(0)
self.gradient_layout.setObjectName('gradient_layout')
self.gradient_start_label = QtGui.QLabel(self.gradient_widget)
self.gradient_start_label.setObjectName('gradient_start_label')
self.gradient_start_button = QtGui.QPushButton(self.gradient_widget)
self.gradient_start_button.setObjectName('gradient_start_button')
self.gradient_layout.addRow(self.gradient_start_label, self.gradient_start_button)
self.gradient_end_label = QtGui.QLabel(self.gradient_widget)
self.gradient_end_label.setObjectName('gradient_end_label')
self.gradient_end_button = QtGui.QPushButton(self.gradient_widget)
self.gradient_end_button.setObjectName('gradient_end_button')
self.gradient_layout.addRow(self.gradient_end_label, self.gradient_end_button)
self.gradient_type_label = QtGui.QLabel(self.gradient_widget)
self.gradient_type_label.setObjectName('Gradient_type_label')
self.gradient_combo_box = QtGui.QComboBox(self.gradient_widget)
self.gradient_combo_box.setObjectName('gradient_combo_box')
self.gradient_combo_box.addItems(['', '', '', '', ''])
self.gradient_layout.addRow(self.gradient_type_label, self.gradient_combo_box)
self.gradient_layout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer)
self.background_stack.addWidget(self.gradient_widget)
self.image_widget = QtGui.QWidget(self.background_page)
self.image_widget.setObjectName('image_widget')
self.image_layout = QtGui.QFormLayout(self.image_widget)
self.image_layout.setMargin(0)
self.image_layout.setObjectName('image_layout')
self.image_color_label = QtGui.QLabel(self.color_widget)
self.image_color_label.setObjectName('image_color_label')
self.image_color_button = QtGui.QPushButton(self.color_widget)
self.image_color_button.setObjectName('image_color_button')
self.image_layout.addRow(self.image_color_label, self.image_color_button)
self.image_label = QtGui.QLabel(self.image_widget)
self.image_label.setObjectName('image_label')
self.image_file_layout = QtGui.QHBoxLayout()
self.image_file_layout.setObjectName('image_file_layout')
self.image_file_edit = QtGui.QLineEdit(self.image_widget)
self.image_file_edit.setObjectName('image_file_edit')
self.image_file_layout.addWidget(self.image_file_edit)
self.image_browse_button = QtGui.QToolButton(self.image_widget)
self.image_browse_button.setObjectName('image_browse_button')
self.image_browse_button.setIcon(build_icon(':/general/general_open.png'))
self.image_file_layout.addWidget(self.image_browse_button)
self.image_layout.addRow(self.image_label, self.image_file_layout)
self.image_layout.setItem(2, QtGui.QFormLayout.LabelRole, self.spacer)
self.background_stack.addWidget(self.image_widget)
self.transparent_widget = QtGui.QWidget(self.background_page)
self.transparent_widget.setObjectName('TransparentWidget')
self.transparent_layout = QtGui.QFormLayout(self.transparent_widget)
self.transparent_layout.setMargin(0)
self.transparent_layout.setObjectName('Transparent_layout')
self.background_stack.addWidget(self.transparent_widget)
self.background_layout.addLayout(self.background_stack)
themeWizard.addPage(self.background_page)
# Main Area Page
self.mainAreaPage = QtGui.QWizardPage()
self.mainAreaPage.setObjectName('MainAreaPage')
self.mainAreaLayout = QtGui.QFormLayout(self.mainAreaPage)
self.mainAreaLayout.setObjectName('MainAreaLayout')
self.mainFontLabel = QtGui.QLabel(self.mainAreaPage)
self.mainFontLabel.setObjectName('MainFontLabel')
self.mainFontComboBox = QtGui.QFontComboBox(self.mainAreaPage)
self.mainFontComboBox.setObjectName('MainFontComboBox')
self.mainAreaLayout.addRow(self.mainFontLabel, self.mainFontComboBox)
self.mainColorLabel = QtGui.QLabel(self.mainAreaPage)
self.mainColorLabel.setObjectName('MainColorLabel')
self.mainPropertiesLayout = QtGui.QHBoxLayout()
self.mainPropertiesLayout.setObjectName('MainPropertiesLayout')
self.mainColorButton = QtGui.QPushButton(self.mainAreaPage)
self.mainColorButton.setObjectName('MainColorButton')
self.mainPropertiesLayout.addWidget(self.mainColorButton)
self.mainPropertiesLayout.addSpacing(20)
self.mainBoldCheckBox = QtGui.QCheckBox(self.mainAreaPage)
self.mainBoldCheckBox.setObjectName('MainBoldCheckBox')
self.mainPropertiesLayout.addWidget(self.mainBoldCheckBox)
self.mainPropertiesLayout.addSpacing(20)
self.mainItalicsCheckBox = QtGui.QCheckBox(self.mainAreaPage)
self.mainItalicsCheckBox.setObjectName('MainItalicsCheckBox')
self.mainPropertiesLayout.addWidget(self.mainItalicsCheckBox)
self.mainAreaLayout.addRow(self.mainColorLabel, self.mainPropertiesLayout)
self.mainSizeLabel = QtGui.QLabel(self.mainAreaPage)
self.mainSizeLabel.setObjectName('MainSizeLabel')
self.mainSizeLayout = QtGui.QHBoxLayout()
self.mainSizeLayout.setObjectName('MainSizeLayout')
self.mainSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage)
self.mainSizeSpinBox.setMaximum(999)
self.mainSizeSpinBox.setValue(16)
self.mainSizeSpinBox.setObjectName('MainSizeSpinBox')
self.mainSizeLayout.addWidget(self.mainSizeSpinBox)
self.mainLineCountLabel = QtGui.QLabel(self.mainAreaPage)
self.mainLineCountLabel.setObjectName('MainLineCountLabel')
self.mainSizeLayout.addWidget(self.mainLineCountLabel)
self.mainAreaLayout.addRow(self.mainSizeLabel, self.mainSizeLayout)
self.lineSpacingLabel = QtGui.QLabel(self.mainAreaPage)
self.lineSpacingLabel.setObjectName('LineSpacingLabel')
self.lineSpacingSpinBox = QtGui.QSpinBox(self.mainAreaPage)
self.lineSpacingSpinBox.setMinimum(-250)
self.lineSpacingSpinBox.setMaximum(250)
self.lineSpacingSpinBox.setObjectName('LineSpacingSpinBox')
self.mainAreaLayout.addRow(self.lineSpacingLabel, self.lineSpacingSpinBox)
self.outlineCheckBox = QtGui.QCheckBox(self.mainAreaPage)
self.outlineCheckBox.setObjectName('OutlineCheckBox')
self.outlineLayout = QtGui.QHBoxLayout()
self.outlineLayout.setObjectName('OutlineLayout')
self.outlineColorButton = QtGui.QPushButton(self.mainAreaPage)
self.outlineColorButton.setEnabled(False)
self.outlineColorButton.setObjectName('OutlineColorButton')
self.outlineLayout.addWidget(self.outlineColorButton)
self.outlineLayout.addSpacing(20)
self.outlineSizeLabel = QtGui.QLabel(self.mainAreaPage)
self.outlineSizeLabel.setObjectName('OutlineSizeLabel')
self.outlineLayout.addWidget(self.outlineSizeLabel)
self.outlineSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage)
self.outlineSizeSpinBox.setEnabled(False)
self.outlineSizeSpinBox.setObjectName('OutlineSizeSpinBox')
self.outlineLayout.addWidget(self.outlineSizeSpinBox)
self.mainAreaLayout.addRow(self.outlineCheckBox, self.outlineLayout)
self.shadowCheckBox = QtGui.QCheckBox(self.mainAreaPage)
self.shadowCheckBox.setObjectName('ShadowCheckBox')
self.shadowLayout = QtGui.QHBoxLayout()
self.shadowLayout.setObjectName('ShadowLayout')
self.shadowColorButton = QtGui.QPushButton(self.mainAreaPage)
self.shadowColorButton.setEnabled(False)
self.shadowColorButton.setObjectName('shadowColorButton')
self.shadowLayout.addWidget(self.shadowColorButton)
self.shadowLayout.addSpacing(20)
self.shadowSizeLabel = QtGui.QLabel(self.mainAreaPage)
self.shadowSizeLabel.setObjectName('ShadowSizeLabel')
self.shadowLayout.addWidget(self.shadowSizeLabel)
self.shadowSizeSpinBox = QtGui.QSpinBox(self.mainAreaPage)
self.shadowSizeSpinBox.setEnabled(False)
self.shadowSizeSpinBox.setObjectName('ShadowSizeSpinBox')
self.shadowLayout.addWidget(self.shadowSizeSpinBox)
self.mainAreaLayout.addRow(self.shadowCheckBox, self.shadowLayout)
themeWizard.addPage(self.mainAreaPage)
self.main_area_page = QtGui.QWizardPage()
self.main_area_page.setObjectName('main_area_page')
self.main_area_layout = QtGui.QFormLayout(self.main_area_page)
self.main_area_layout.setObjectName('main_area_layout')
self.main_font_label = QtGui.QLabel(self.main_area_page)
self.main_font_label.setObjectName('main_font_label')
self.main_font_combo_box = QtGui.QFontComboBox(self.main_area_page)
self.main_font_combo_box.setObjectName('main_font_combo_box')
self.main_area_layout.addRow(self.main_font_label, self.main_font_combo_box)
self.main_color_label = QtGui.QLabel(self.main_area_page)
self.main_color_label.setObjectName('main_color_label')
self.main_properties_layout = QtGui.QHBoxLayout()
self.main_properties_layout.setObjectName('main_properties_layout')
self.main_color_button = QtGui.QPushButton(self.main_area_page)
self.main_color_button.setObjectName('main_color_button')
self.main_properties_layout.addWidget(self.main_color_button)
self.main_properties_layout.addSpacing(20)
self.main_bold_check_box = QtGui.QCheckBox(self.main_area_page)
self.main_bold_check_box.setObjectName('main_bold_check_box')
self.main_properties_layout.addWidget(self.main_bold_check_box)
self.main_properties_layout.addSpacing(20)
self.main_italics_check_box = QtGui.QCheckBox(self.main_area_page)
self.main_italics_check_box.setObjectName('MainItalicsCheckBox')
self.main_properties_layout.addWidget(self.main_italics_check_box)
self.main_area_layout.addRow(self.main_color_label, self.main_properties_layout)
self.main_size_label = QtGui.QLabel(self.main_area_page)
self.main_size_label.setObjectName('main_size_label')
self.main_size_layout = QtGui.QHBoxLayout()
self.main_size_layout.setObjectName('main_size_layout')
self.main_size_spin_box = QtGui.QSpinBox(self.main_area_page)
self.main_size_spin_box.setMaximum(999)
self.main_size_spin_box.setValue(16)
self.main_size_spin_box.setObjectName('main_size_spin_box')
self.main_size_layout.addWidget(self.main_size_spin_box)
self.main_line_count_label = QtGui.QLabel(self.main_area_page)
self.main_line_count_label.setObjectName('main_line_count_label')
self.main_size_layout.addWidget(self.main_line_count_label)
self.main_area_layout.addRow(self.main_size_label, self.main_size_layout)
self.line_spacing_label = QtGui.QLabel(self.main_area_page)
self.line_spacing_label.setObjectName('line_spacing_label')
self.line_spacing_spin_box = QtGui.QSpinBox(self.main_area_page)
self.line_spacing_spin_box.setMinimum(-250)
self.line_spacing_spin_box.setMaximum(250)
self.line_spacing_spin_box.setObjectName('line_spacing_spin_box')
self.main_area_layout.addRow(self.line_spacing_label, self.line_spacing_spin_box)
self.outline_check_box = QtGui.QCheckBox(self.main_area_page)
self.outline_check_box.setObjectName('outline_check_box')
self.outline_layout = QtGui.QHBoxLayout()
self.outline_layout.setObjectName('outline_layout')
self.outline_color_button = QtGui.QPushButton(self.main_area_page)
self.outline_color_button.setEnabled(False)
self.outline_color_button.setObjectName('Outline_color_button')
self.outline_layout.addWidget(self.outline_color_button)
self.outline_layout.addSpacing(20)
self.outline_size_label = QtGui.QLabel(self.main_area_page)
self.outline_size_label.setObjectName('outline_size_label')
self.outline_layout.addWidget(self.outline_size_label)
self.outline_size_spin_box = QtGui.QSpinBox(self.main_area_page)
self.outline_size_spin_box.setEnabled(False)
self.outline_size_spin_box.setObjectName('outline_size_spin_box')
self.outline_layout.addWidget(self.outline_size_spin_box)
self.main_area_layout.addRow(self.outline_check_box, self.outline_layout)
self.shadow_check_box = QtGui.QCheckBox(self.main_area_page)
self.shadow_check_box.setObjectName('shadow_check_box')
self.shadow_layout = QtGui.QHBoxLayout()
self.shadow_layout.setObjectName('shadow_layout')
self.shadow_color_button = QtGui.QPushButton(self.main_area_page)
self.shadow_color_button.setEnabled(False)
self.shadow_color_button.setObjectName('shadow_color_button')
self.shadow_layout.addWidget(self.shadow_color_button)
self.shadow_layout.addSpacing(20)
self.shadow_size_label = QtGui.QLabel(self.main_area_page)
self.shadow_size_label.setObjectName('shadow_size_label')
self.shadow_layout.addWidget(self.shadow_size_label)
self.shadow_size_spin_box = QtGui.QSpinBox(self.main_area_page)
self.shadow_size_spin_box.setEnabled(False)
self.shadow_size_spin_box.setObjectName('shadow_size_spin_box')
self.shadow_layout.addWidget(self.shadow_size_spin_box)
self.main_area_layout.addRow(self.shadow_check_box, self.shadow_layout)
themeWizard.addPage(self.main_area_page)
# Footer Area Page
self.footerAreaPage = QtGui.QWizardPage()
self.footerAreaPage.setObjectName('FooterAreaPage')
self.footerAreaLayout = QtGui.QFormLayout(self.footerAreaPage)
self.footerAreaLayout.setObjectName('FooterAreaLayout')
self.footerFontLabel = QtGui.QLabel(self.footerAreaPage)
self.footerFontLabel.setObjectName('FooterFontLabel')
self.footerFontComboBox = QtGui.QFontComboBox(self.footerAreaPage)
self.footerFontComboBox.setObjectName('footerFontComboBox')
self.footerAreaLayout.addRow(self.footerFontLabel, self.footerFontComboBox)
self.footerColorLabel = QtGui.QLabel(self.footerAreaPage)
self.footerColorLabel.setObjectName('FooterColorLabel')
self.footerColorButton = QtGui.QPushButton(self.footerAreaPage)
self.footerColorButton.setObjectName('footerColorButton')
self.footerAreaLayout.addRow(self.footerColorLabel, self.footerColorButton)
self.footerSizeLabel = QtGui.QLabel(self.footerAreaPage)
self.footerSizeLabel.setObjectName('FooterSizeLabel')
self.footerSizeSpinBox = QtGui.QSpinBox(self.footerAreaPage)
self.footerSizeSpinBox.setMaximum(999)
self.footerSizeSpinBox.setValue(10)
self.footerSizeSpinBox.setObjectName('FooterSizeSpinBox')
self.footerAreaLayout.addRow(self.footerSizeLabel, self.footerSizeSpinBox)
self.footerAreaLayout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer)
themeWizard.addPage(self.footerAreaPage)
self.footer_area_page = QtGui.QWizardPage()
self.footer_area_page.setObjectName('footer_area_page')
self.footer_area_layout = QtGui.QFormLayout(self.footer_area_page)
self.footer_area_layout.setObjectName('footer_area_layout')
self.footer_font_label = QtGui.QLabel(self.footer_area_page)
self.footer_font_label.setObjectName('FooterFontLabel')
self.footer_font_combo_box = QtGui.QFontComboBox(self.footer_area_page)
self.footer_font_combo_box.setObjectName('footer_font_combo_box')
self.footer_area_layout.addRow(self.footer_font_label, self.footer_font_combo_box)
self.footer_color_label = QtGui.QLabel(self.footer_area_page)
self.footer_color_label.setObjectName('footer_color_label')
self.footer_color_button = QtGui.QPushButton(self.footer_area_page)
self.footer_color_button.setObjectName('footer_color_button')
self.footer_area_layout.addRow(self.footer_color_label, self.footer_color_button)
self.footer_size_label = QtGui.QLabel(self.footer_area_page)
self.footer_size_label.setObjectName('footer_size_label')
self.footer_size_spin_box = QtGui.QSpinBox(self.footer_area_page)
self.footer_size_spin_box.setMaximum(999)
self.footer_size_spin_box.setValue(10)
self.footer_size_spin_box.setObjectName('FooterSizeSpinBox')
self.footer_area_layout.addRow(self.footer_size_label, self.footer_size_spin_box)
self.footer_area_layout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer)
themeWizard.addPage(self.footer_area_page)
# Alignment Page
self.alignmentPage = QtGui.QWizardPage()
self.alignmentPage.setObjectName('AlignmentPage')
self.alignmentLayout = QtGui.QFormLayout(self.alignmentPage)
self.alignmentLayout.setObjectName('AlignmentLayout')
self.horizontalLabel = QtGui.QLabel(self.alignmentPage)
self.horizontalLabel.setObjectName('HorizontalLabel')
self.horizontalComboBox = QtGui.QComboBox(self.alignmentPage)
self.horizontalComboBox.addItems(['', '', '', ''])
self.horizontalComboBox.setObjectName('HorizontalComboBox')
self.alignmentLayout.addRow(self.horizontalLabel, self.horizontalComboBox)
self.verticalLabel, self.verticalComboBox = create_valign_selection_widgets(self.alignmentPage)
self.verticalLabel.setObjectName('verticalLabel')
self.verticalComboBox.setObjectName('verticalComboBox')
self.alignmentLayout.addRow(self.verticalLabel, self.verticalComboBox)
self.transitionsLabel = QtGui.QLabel(self.alignmentPage)
self.transitionsLabel.setObjectName('TransitionsLabel')
self.transitionsCheckBox = QtGui.QCheckBox(self.alignmentPage)
self.transitionsCheckBox.setObjectName('TransitionsCheckBox')
self.alignmentLayout.addRow(self.transitionsLabel, self.transitionsCheckBox)
self.alignmentLayout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer)
themeWizard.addPage(self.alignmentPage)
self.alignment_page = QtGui.QWizardPage()
self.alignment_page.setObjectName('alignment_page')
self.alignment_layout = QtGui.QFormLayout(self.alignment_page)
self.alignment_layout.setObjectName('alignment_layout')
self.horizontal_label = QtGui.QLabel(self.alignment_page)
self.horizontal_label.setObjectName('horizontal_label')
self.horizontal_combo_box = QtGui.QComboBox(self.alignment_page)
self.horizontal_combo_box.addItems(['', '', '', ''])
self.horizontal_combo_box.setObjectName('horizontal_combo_box')
self.alignment_layout.addRow(self.horizontal_label, self.horizontal_combo_box)
self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.alignment_page)
self.vertical_label.setObjectName('vertical_label')
self.vertical_combo_box.setObjectName('vertical_combo_box')
self.alignment_layout.addRow(self.vertical_label, self.vertical_combo_box)
self.transitions_label = QtGui.QLabel(self.alignment_page)
self.transitions_label.setObjectName('transitions_label')
self.transitions_check_box = QtGui.QCheckBox(self.alignment_page)
self.transitions_check_box.setObjectName('transitions_check_box')
self.alignment_layout.addRow(self.transitions_label, self.transitions_check_box)
self.alignment_layout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer)
themeWizard.addPage(self.alignment_page)
# Area Position Page
self.areaPositionPage = QtGui.QWizardPage()
self.areaPositionPage.setObjectName('AreaPositionPage')
self.areaPositionLayout = QtGui.QHBoxLayout(self.areaPositionPage)
self.areaPositionLayout.setObjectName('AreaPositionLayout')
self.mainPositionGroupBox = QtGui.QGroupBox(self.areaPositionPage)
self.mainPositionGroupBox.setObjectName('MainPositionGroupBox')
self.mainPositionLayout = QtGui.QFormLayout(self.mainPositionGroupBox)
self.mainPositionLayout.setObjectName('MainPositionLayout')
self.mainPositionCheckBox = QtGui.QCheckBox(self.mainPositionGroupBox)
self.mainPositionCheckBox.setObjectName('MainPositionCheckBox')
self.mainPositionLayout.addRow(self.mainPositionCheckBox)
self.mainXLabel = QtGui.QLabel(self.mainPositionGroupBox)
self.mainXLabel.setObjectName('MainXLabel')
self.mainXSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox)
self.mainXSpinBox.setMaximum(9999)
self.mainXSpinBox.setObjectName('MainXSpinBox')
self.mainPositionLayout.addRow(self.mainXLabel, self.mainXSpinBox)
self.mainYLabel = QtGui.QLabel(self.mainPositionGroupBox)
self.mainYLabel.setObjectName('MainYLabel')
self.mainYSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox)
self.mainYSpinBox.setMaximum(9999)
self.mainYSpinBox.setObjectName('MainYSpinBox')
self.mainPositionLayout.addRow(self.mainYLabel, self.mainYSpinBox)
self.mainWidthLabel = QtGui.QLabel(self.mainPositionGroupBox)
self.mainWidthLabel.setObjectName('MainWidthLabel')
self.mainWidthSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox)
self.mainWidthSpinBox.setMaximum(9999)
self.mainWidthSpinBox.setObjectName('MainWidthSpinBox')
self.mainPositionLayout.addRow(self.mainWidthLabel, self.mainWidthSpinBox)
self.mainHeightLabel = QtGui.QLabel(self.mainPositionGroupBox)
self.mainHeightLabel.setObjectName('MainHeightLabel')
self.mainHeightSpinBox = QtGui.QSpinBox(self.mainPositionGroupBox)
self.mainHeightSpinBox.setMaximum(9999)
self.mainHeightSpinBox.setObjectName('MainHeightSpinBox')
self.mainPositionLayout.addRow(self.mainHeightLabel, self.mainHeightSpinBox)
self.areaPositionLayout.addWidget(self.mainPositionGroupBox)
self.footerPositionGroupBox = QtGui.QGroupBox(self.areaPositionPage)
self.footerPositionGroupBox.setObjectName('FooterPositionGroupBox')
self.footerPositionLayout = QtGui.QFormLayout(self.footerPositionGroupBox)
self.footerPositionLayout.setObjectName('FooterPositionLayout')
self.footerPositionCheckBox = QtGui.QCheckBox(self.footerPositionGroupBox)
self.footerPositionCheckBox.setObjectName('FooterPositionCheckBox')
self.footerPositionLayout.addRow(self.footerPositionCheckBox)
self.footerXLabel = QtGui.QLabel(self.footerPositionGroupBox)
self.footerXLabel.setObjectName('FooterXLabel')
self.footerXSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox)
self.footerXSpinBox.setMaximum(9999)
self.footerXSpinBox.setObjectName('FooterXSpinBox')
self.footerPositionLayout.addRow(self.footerXLabel, self.footerXSpinBox)
self.footerYLabel = QtGui.QLabel(self.footerPositionGroupBox)
self.footerYLabel.setObjectName('FooterYLabel')
self.footerYSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox)
self.footerYSpinBox.setMaximum(9999)
self.footerYSpinBox.setObjectName('FooterYSpinBox')
self.footerPositionLayout.addRow(self.footerYLabel, self.footerYSpinBox)
self.footerWidthLabel = QtGui.QLabel(self.footerPositionGroupBox)
self.footerWidthLabel.setObjectName('FooterWidthLabel')
self.footerWidthSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox)
self.footerWidthSpinBox.setMaximum(9999)
self.footerWidthSpinBox.setObjectName('FooterWidthSpinBox')
self.footerPositionLayout.addRow(self.footerWidthLabel, self.footerWidthSpinBox)
self.footerHeightLabel = QtGui.QLabel(self.footerPositionGroupBox)
self.footerHeightLabel.setObjectName('FooterHeightLabel')
self.footerHeightSpinBox = QtGui.QSpinBox(self.footerPositionGroupBox)
self.footerHeightSpinBox.setMaximum(9999)
self.footerHeightSpinBox.setObjectName('FooterHeightSpinBox')
self.footerPositionLayout.addRow(self.footerHeightLabel, self.footerHeightSpinBox)
self.areaPositionLayout.addWidget(self.footerPositionGroupBox)
themeWizard.addPage(self.areaPositionPage)
self.area_position_page = QtGui.QWizardPage()
self.area_position_page.setObjectName('area_position_page')
self.area_position_layout = QtGui.QHBoxLayout(self.area_position_page)
self.area_position_layout.setObjectName('area_position_layout')
self.main_position_group_box = QtGui.QGroupBox(self.area_position_page)
self.main_position_group_box.setObjectName('main_position_group_box')
self.main_position_layout = QtGui.QFormLayout(self.main_position_group_box)
self.main_position_layout.setObjectName('main_position_layout')
self.main_position_check_box = QtGui.QCheckBox(self.main_position_group_box)
self.main_position_check_box.setObjectName('main_position_check_box')
self.main_position_layout.addRow(self.main_position_check_box)
self.main_x_label = QtGui.QLabel(self.main_position_group_box)
self.main_x_label.setObjectName('main_x_label')
self.main_x_spin_box = QtGui.QSpinBox(self.main_position_group_box)
self.main_x_spin_box.setMaximum(9999)
self.main_x_spin_box.setObjectName('main_x_spin_box')
self.main_position_layout.addRow(self.main_x_label, self.main_x_spin_box)
self.main_y_label = QtGui.QLabel(self.main_position_group_box)
self.main_y_label.setObjectName('main_y_label')
self.main_y_spin_box = QtGui.QSpinBox(self.main_position_group_box)
self.main_y_spin_box.setMaximum(9999)
self.main_y_spin_box.setObjectName('main_y_spin_box')
self.main_position_layout.addRow(self.main_y_label, self.main_y_spin_box)
self.main_width_label = QtGui.QLabel(self.main_position_group_box)
self.main_width_label.setObjectName('main_width_label')
self.main_width_spin_box = QtGui.QSpinBox(self.main_position_group_box)
self.main_width_spin_box.setMaximum(9999)
self.main_width_spin_box.setObjectName('main_width_spin_box')
self.main_position_layout.addRow(self.main_width_label, self.main_width_spin_box)
self.main_height_label = QtGui.QLabel(self.main_position_group_box)
self.main_height_label.setObjectName('main_height_label')
self.main_height_spin_box = QtGui.QSpinBox(self.main_position_group_box)
self.main_height_spin_box.setMaximum(9999)
self.main_height_spin_box.setObjectName('main_height_spin_box')
self.main_position_layout.addRow(self.main_height_label, self.main_height_spin_box)
self.area_position_layout.addWidget(self.main_position_group_box)
self.footer_position_group_box = QtGui.QGroupBox(self.area_position_page)
self.footer_position_group_box.setObjectName('footer_position_group_box')
self.footer_position_layout = QtGui.QFormLayout(self.footer_position_group_box)
self.footer_position_layout.setObjectName('footer_position_layout')
self.footer_position_check_box = QtGui.QCheckBox(self.footer_position_group_box)
self.footer_position_check_box.setObjectName('footer_position_check_box')
self.footer_position_layout.addRow(self.footer_position_check_box)
self.footer_x_label = QtGui.QLabel(self.footer_position_group_box)
self.footer_x_label.setObjectName('footer_x_label')
self.footer_x_spin_box = QtGui.QSpinBox(self.footer_position_group_box)
self.footer_x_spin_box.setMaximum(9999)
self.footer_x_spin_box.setObjectName('footer_x_spin_box')
self.footer_position_layout.addRow(self.footer_x_label, self.footer_x_spin_box)
self.footer_y_label = QtGui.QLabel(self.footer_position_group_box)
self.footer_y_label.setObjectName('footer_y_label')
self.footer_y_spin_box = QtGui.QSpinBox(self.footer_position_group_box)
self.footer_y_spin_box.setMaximum(9999)
self.footer_y_spin_box.setObjectName('footer_y_spin_box')
self.footer_position_layout.addRow(self.footer_y_label, self.footer_y_spin_box)
self.footer_width_label = QtGui.QLabel(self.footer_position_group_box)
self.footer_width_label.setObjectName('footer_width_label')
self.footer_width_spin_box = QtGui.QSpinBox(self.footer_position_group_box)
self.footer_width_spin_box.setMaximum(9999)
self.footer_width_spin_box.setObjectName('footer_width_spin_box')
self.footer_position_layout.addRow(self.footer_width_label, self.footer_width_spin_box)
self.footer_height_label = QtGui.QLabel(self.footer_position_group_box)
self.footer_height_label.setObjectName('footer_height_label')
self.footer_height_spin_box = QtGui.QSpinBox(self.footer_position_group_box)
self.footer_height_spin_box.setMaximum(9999)
self.footer_height_spin_box.setObjectName('footer_height_spin_box')
self.footer_position_layout.addRow(self.footer_height_label, self.footer_height_spin_box)
self.area_position_layout.addWidget(self.footer_position_group_box)
themeWizard.addPage(self.area_position_page)
# Preview Page
self.previewPage = QtGui.QWizardPage()
self.previewPage.setObjectName('PreviewPage')
self.previewLayout = QtGui.QVBoxLayout(self.previewPage)
self.previewLayout.setObjectName('PreviewLayout')
self.themeNameLayout = QtGui.QFormLayout()
self.themeNameLayout.setObjectName('ThemeNameLayout')
self.themeNameLabel = QtGui.QLabel(self.previewPage)
self.themeNameLabel.setObjectName('ThemeNameLabel')
self.themeNameEdit = QtGui.QLineEdit(self.previewPage)
self.themeNameEdit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":<>+%]+'), self))
self.themeNameEdit.setObjectName('ThemeNameEdit')
self.themeNameLayout.addRow(self.themeNameLabel, self.themeNameEdit)
self.previewLayout.addLayout(self.themeNameLayout)
self.previewArea = QtGui.QWidget(self.previewPage)
self.previewArea.setObjectName('PreviewArea')
self.previewAreaLayout = QtGui.QGridLayout(self.previewArea)
self.previewAreaLayout.setMargin(0)
self.previewAreaLayout.setColumnStretch(0, 1)
self.previewAreaLayout.setRowStretch(0, 1)
self.previewAreaLayout.setObjectName('PreviewAreaLayout')
self.previewBoxLabel = QtGui.QLabel(self.previewArea)
self.previewBoxLabel.setFrameShape(QtGui.QFrame.Box)
self.previewBoxLabel.setScaledContents(True)
self.previewBoxLabel.setObjectName('PreviewBoxLabel')
self.previewAreaLayout.addWidget(self.previewBoxLabel)
self.previewLayout.addWidget(self.previewArea)
themeWizard.addPage(self.previewPage)
self.preview_page = QtGui.QWizardPage()
self.preview_page.setObjectName('preview_page')
self.preview_layout = QtGui.QVBoxLayout(self.preview_page)
self.preview_layout.setObjectName('preview_layout')
self.theme_name_layout = QtGui.QFormLayout()
self.theme_name_layout.setObjectName('theme_name_layout')
self.theme_name_label = QtGui.QLabel(self.preview_page)
self.theme_name_label.setObjectName('theme_name_label')
self.theme_name_edit = QtGui.QLineEdit(self.preview_page)
self.theme_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":<>+%]+'), self))
self.theme_name_edit.setObjectName('ThemeNameEdit')
self.theme_name_layout.addRow(self.theme_name_label, self.theme_name_edit)
self.preview_layout.addLayout(self.theme_name_layout)
self.preview_area = QtGui.QWidget(self.preview_page)
self.preview_area.setObjectName('PreviewArea')
self.preview_area_layout = QtGui.QGridLayout(self.preview_area)
self.preview_area_layout.setMargin(0)
self.preview_area_layout.setColumnStretch(0, 1)
self.preview_area_layout.setRowStretch(0, 1)
self.preview_area_layout.setObjectName('preview_area_layout')
self.preview_box_label = QtGui.QLabel(self.preview_area)
self.preview_box_label.setFrameShape(QtGui.QFrame.Box)
self.preview_box_label.setScaledContents(True)
self.preview_box_label.setObjectName('preview_box_label')
self.preview_area_layout.addWidget(self.preview_box_label)
self.preview_layout.addWidget(self.preview_area)
themeWizard.addPage(self.preview_page)
self.retranslateUi(themeWizard)
QtCore.QObject.connect(self.backgroundComboBox, QtCore.SIGNAL('currentIndexChanged(int)'),
self.backgroundStack, QtCore.SLOT('setCurrentIndex(int)'))
QtCore.QObject.connect(self.outlineCheckBox, QtCore.SIGNAL('toggled(bool)'), self.outlineColorButton,
QtCore.SLOT('setEnabled(bool)'))
QtCore.QObject.connect(self.outlineCheckBox, QtCore.SIGNAL('toggled(bool)'), self.outlineSizeSpinBox,
QtCore.SLOT('setEnabled(bool)'))
QtCore.QObject.connect(self.shadowCheckBox, QtCore.SIGNAL('toggled(bool)'), self.shadowColorButton,
QtCore.SLOT('setEnabled(bool)'))
QtCore.QObject.connect(self.shadowCheckBox, QtCore.SIGNAL('toggled(bool)'), self.shadowSizeSpinBox,
QtCore.SLOT('setEnabled(bool)'))
QtCore.QObject.connect(self.mainPositionCheckBox, QtCore.SIGNAL('toggled(bool)'), self.mainXSpinBox,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.mainPositionCheckBox, QtCore.SIGNAL('toggled(bool)'), self.mainYSpinBox,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.mainPositionCheckBox, QtCore.SIGNAL('toggled(bool)'), self.mainWidthSpinBox,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.mainPositionCheckBox, QtCore.SIGNAL('toggled(bool)'), self.mainHeightSpinBox,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.footerPositionCheckBox, QtCore.SIGNAL('toggled(bool)'), self.footerXSpinBox,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.footerPositionCheckBox, QtCore.SIGNAL('toggled(bool)'), self.footerYSpinBox,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.footerPositionCheckBox, QtCore.SIGNAL('toggled(bool)'), self.footerWidthSpinBox,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.footerPositionCheckBox, QtCore.SIGNAL('toggled(bool)'), self.footerHeightSpinBox,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.background_combo_box, QtCore.SIGNAL('currentIndexChanged(int)'),
self.background_stack, QtCore.SLOT('setCurrentIndex(int)'))
QtCore.QObject.connect(self.outline_check_box, QtCore.SIGNAL('toggled(bool)'), self.outline_color_button,
QtCore.SLOT('setEnabled(bool)'))
QtCore.QObject.connect(self.outline_check_box, QtCore.SIGNAL('toggled(bool)'), self.outline_size_spin_box,
QtCore.SLOT('setEnabled(bool)'))
QtCore.QObject.connect(self.shadow_check_box, QtCore.SIGNAL('toggled(bool)'), self.shadow_color_button,
QtCore.SLOT('setEnabled(bool)'))
QtCore.QObject.connect(self.shadow_check_box, QtCore.SIGNAL('toggled(bool)'), self.shadow_size_spin_box,
QtCore.SLOT('setEnabled(bool)'))
QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_x_spin_box,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_y_spin_box,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_width_spin_box,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_height_spin_box,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_x_spin_box,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_y_spin_box,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_width_spin_box,
QtCore.SLOT('setDisabled(bool)'))
QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_height_spin_box,
QtCore.SLOT('setDisabled(bool)'))
def retranslateUi(self, themeWizard):
"""
@ -396,95 +396,96 @@ class Ui_ThemeWizard(object):
"""
themeWizard.setWindowTitle(translate('OpenLP.ThemeWizard', 'Theme Wizard'))
self.title_label.setText('<span style="font-size:14pt; font-weight:600;">%s</span>' %
translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard'))
translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard'))
self.information_label.setText(
translate('OpenLP.ThemeWizard', 'This wizard will help you to create and edit your themes. Click the next '
'button below to start the process by setting up your background.'))
self.backgroundPage.setTitle(translate('OpenLP.ThemeWizard', 'Set Up Background'))
self.backgroundPage.setSubTitle(translate('OpenLP.ThemeWizard', 'Set up your theme\'s background '
'according to the parameters below.'))
self.backgroundLabel.setText(translate('OpenLP.ThemeWizard', 'Background type:'))
self.backgroundComboBox.setItemText(BackgroundType.Solid,
translate('OpenLP.ThemeWizard', 'Solid Color'))
self.backgroundComboBox.setItemText(BackgroundType.Gradient,
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('OpenLP.ThemeWizard', 'Starting color:'))
self.gradientEndLabel.setText(translate('OpenLP.ThemeWizard', 'Ending color:'))
self.gradientTypeLabel.setText(translate('OpenLP.ThemeWizard', 'Gradient:'))
self.gradientComboBox.setItemText(BackgroundGradientType.Horizontal,
translate('OpenLP.ThemeWizard', 'Horizontal'))
self.gradientComboBox.setItemText(BackgroundGradientType.Vertical, translate('OpenLP.ThemeWizard', 'Vertical'))
self.gradientComboBox.setItemText(BackgroundGradientType.Circular, translate('OpenLP.ThemeWizard', 'Circular'))
self.gradientComboBox.setItemText(BackgroundGradientType.LeftTop,
translate('OpenLP.ThemeWizard', 'Top Left - Bottom Right'))
self.gradientComboBox.setItemText(BackgroundGradientType.LeftBottom,
translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right'))
self.imageColorLabel.setText(translate('OpenLP.ThemeWizard', 'Background color:'))
self.imageLabel.setText('%s:' % UiStrings().Image)
self.mainAreaPage.setTitle(translate('OpenLP.ThemeWizard', 'Main Area Font Details'))
self.mainAreaPage.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display '
'characteristics for the Display text'))
self.mainFontLabel.setText(translate('OpenLP.ThemeWizard', 'Font:'))
self.mainColorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:'))
self.mainSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:'))
self.mainSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit)
self.lineSpacingLabel.setText(translate('OpenLP.ThemeWizard', 'Line Spacing:'))
self.lineSpacingSpinBox.setSuffix(UiStrings().FontSizePtUnit)
self.outlineCheckBox.setText(translate('OpenLP.ThemeWizard', '&Outline:'))
self.outlineSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:'))
self.outlineSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit)
self.shadowCheckBox.setText(translate('OpenLP.ThemeWizard', '&Shadow:'))
self.shadowSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:'))
self.shadowSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit)
self.mainBoldCheckBox.setText(translate('OpenLP.ThemeWizard', 'Bold'))
self.mainItalicsCheckBox.setText(translate('OpenLP.ThemeWizard', 'Italic'))
self.footerAreaPage.setTitle(translate('OpenLP.ThemeWizard', 'Footer Area Font Details'))
self.footerAreaPage.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display '
'characteristics for the Footer text'))
self.footerFontLabel.setText(translate('OpenLP.ThemeWizard', 'Font:'))
self.footerColorLabel.setText(translate('OpenLP.ThemeWizard', 'Color:'))
self.footerSizeLabel.setText(translate('OpenLP.ThemeWizard', 'Size:'))
self.footerSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit)
self.alignmentPage.setTitle(translate('OpenLP.ThemeWizard', 'Text Formatting Details'))
self.alignmentPage.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows additional display '
'formatting information to be defined'))
self.horizontalLabel.setText(translate('OpenLP.ThemeWizard', 'Horizontal Align:'))
self.horizontalComboBox.setItemText(HorizontalType.Left, translate('OpenLP.ThemeWizard', 'Left'))
self.horizontalComboBox.setItemText(HorizontalType.Right, translate('OpenLP.ThemeWizard', 'Right'))
self.horizontalComboBox.setItemText(HorizontalType.Center, translate('OpenLP.ThemeWizard', 'Center'))
self.horizontalComboBox.setItemText(HorizontalType.Justify, translate('OpenLP.ThemeWizard', 'Justify'))
self.transitionsLabel.setText(translate('OpenLP.ThemeWizard', 'Transitions:'))
self.areaPositionPage.setTitle(translate('OpenLP.ThemeWizard', 'Output Area Locations'))
self.areaPositionPage.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows you to change and move the'
' main and footer areas.'))
self.mainPositionGroupBox.setTitle(translate('OpenLP.ThemeWizard', '&Main Area'))
self.mainPositionCheckBox.setText(translate('OpenLP.ThemeWizard', '&Use default location'))
self.mainXLabel.setText(translate('OpenLP.ThemeWizard', 'X position:'))
self.mainXSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.mainYSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.mainYLabel.setText(translate('OpenLP.ThemeWizard', 'Y position:'))
self.mainWidthSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.mainWidthLabel.setText(translate('OpenLP.ThemeWizard', 'Width:'))
self.mainHeightSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.mainHeightLabel.setText(translate('OpenLP.ThemeWizard', 'Height:'))
self.footerPositionGroupBox.setTitle(translate('OpenLP.ThemeWizard', '&Footer Area'))
self.footerXLabel.setText(translate('OpenLP.ThemeWizard', 'X position:'))
self.footerXSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.footerYLabel.setText(translate('OpenLP.ThemeWizard', 'Y position:'))
self.footerYSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.footerWidthLabel.setText(translate('OpenLP.ThemeWizard', 'Width:'))
self.footerWidthSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.footerHeightLabel.setText(translate('OpenLP.ThemeWizard', 'Height:'))
self.footerHeightSpinBox.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.footerPositionCheckBox.setText(translate('OpenLP.ThemeWizard', 'Use default location'))
'button below to start the process by setting up your background.'))
self.background_page.setTitle(translate('OpenLP.ThemeWizard', 'Set Up Background'))
self.background_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Set up your theme\'s background '
'according to the parameters below.'))
self.background_label.setText(translate('OpenLP.ThemeWizard', 'Background type:'))
self.background_combo_box.setItemText(BackgroundType.Solid,
translate('OpenLP.ThemeWizard', 'Solid color'))
self.background_combo_box.setItemText(BackgroundType.Gradient,
translate('OpenLP.ThemeWizard', 'Gradient'))
self.background_combo_box.setItemText(BackgroundType.Image, UiStrings().Image)
self.background_combo_box.setItemText(BackgroundType.Transparent, translate('OpenLP.ThemeWizard', 'Transparent'))
self.color_label.setText(translate('OpenLP.ThemeWizard', 'color:'))
self.gradient_start_label.setText(translate('OpenLP.ThemeWizard', 'Starting color:'))
self.gradient_end_label.setText(translate('OpenLP.ThemeWizard', 'Ending color:'))
self.gradient_type_label.setText(translate('OpenLP.ThemeWizard', 'Gradient:'))
self.gradient_combo_box.setItemText(BackgroundGradientType.Horizontal,
translate('OpenLP.ThemeWizard', 'Horizontal'))
self.gradient_combo_box.setItemText(BackgroundGradientType.Vertical, translate('OpenLP.ThemeWizard', 'Vertical'))
self.gradient_combo_box.setItemText(BackgroundGradientType.Circular, translate('OpenLP.ThemeWizard', 'Circular'))
self.gradient_combo_box.setItemText(BackgroundGradientType.LeftTop,
translate('OpenLP.ThemeWizard', 'Top Left - Bottom Right'))
self.gradient_combo_box.setItemText(BackgroundGradientType.LeftBottom,
translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right'))
self.image_color_label.setText(translate('OpenLP.ThemeWizard', 'Background color:'))
self.image_label.setText('%s:' % UiStrings().Image)
self.main_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Main Area Font Details'))
self.main_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display '
'characteristics for the Display text'))
self.main_font_label.setText(translate('OpenLP.ThemeWizard', 'Font:'))
self.main_color_label.setText(translate('OpenLP.ThemeWizard', 'color:'))
self.main_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:'))
self.main_size_spin_box.setSuffix(UiStrings().FontSizePtUnit)
self.line_spacing_label.setText(translate('OpenLP.ThemeWizard', 'Line Spacing:'))
self.line_spacing_spin_box.setSuffix(UiStrings().FontSizePtUnit)
self.outline_check_box.setText(translate('OpenLP.ThemeWizard', '&Outline:'))
self.outline_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:'))
self.outline_size_spin_box.setSuffix(UiStrings().FontSizePtUnit)
self.shadow_check_box.setText(translate('OpenLP.ThemeWizard', '&Shadow:'))
self.shadow_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:'))
self.shadow_size_spin_box.setSuffix(UiStrings().FontSizePtUnit)
self.main_bold_check_box.setText(translate('OpenLP.ThemeWizard', 'Bold'))
self.main_italics_check_box.setText(translate('OpenLP.ThemeWizard', 'Italic'))
self.footer_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Footer Area Font Details'))
self.footer_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display '
'characteristics for the Footer text'))
self.footer_font_label.setText(translate('OpenLP.ThemeWizard', 'Font:'))
self.footer_color_label.setText(translate('OpenLP.ThemeWizard', 'color:'))
self.footer_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:'))
self.footer_size_spin_box.setSuffix(UiStrings().FontSizePtUnit)
self.alignment_page.setTitle(translate('OpenLP.ThemeWizard', 'Text Formatting Details'))
self.alignment_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows additional display '
'formatting information to be defined'))
self.horizontal_label.setText(translate('OpenLP.ThemeWizard', 'Horizontal Align:'))
self.horizontal_combo_box.setItemText(HorizontalType.Left, translate('OpenLP.ThemeWizard', 'Left'))
self.horizontal_combo_box.setItemText(HorizontalType.Right, translate('OpenLP.ThemeWizard', 'Right'))
self.horizontal_combo_box.setItemText(HorizontalType.Center, translate('OpenLP.ThemeWizard', 'Center'))
self.horizontal_combo_box.setItemText(HorizontalType.Justify, translate('OpenLP.ThemeWizard', 'Justify'))
self.transitions_label.setText(translate('OpenLP.ThemeWizard', 'Transitions:'))
self.area_position_page.setTitle(translate('OpenLP.ThemeWizard', 'Output Area Locations'))
self.area_position_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows you to change and move the'
' Main and Footer areas.'))
self.main_position_group_box.setTitle(translate('OpenLP.ThemeWizard', '&Main Area'))
self.main_position_check_box.setText(translate('OpenLP.ThemeWizard', '&Use default location'))
self.main_x_label.setText(translate('OpenLP.ThemeWizard', 'X position:'))
self.main_x_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.main_y_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.main_y_label.setText(translate('OpenLP.ThemeWizard', 'Y position:'))
self.main_width_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.main_width_label.setText(translate('OpenLP.ThemeWizard', 'Width:'))
self.main_height_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.main_height_label.setText(translate('OpenLP.ThemeWizard', 'Height:'))
self.footer_position_group_box.setTitle(translate('OpenLP.ThemeWizard', '&Footer Area'))
self.footer_x_label.setText(translate('OpenLP.ThemeWizard', 'X position:'))
self.footer_x_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.footer_y_label.setText(translate('OpenLP.ThemeWizard', 'Y position:'))
self.footer_y_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.footer_width_label.setText(translate('OpenLP.ThemeWizard', 'Width:'))
self.footer_width_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.footer_height_label.setText(translate('OpenLP.ThemeWizard', 'Height:'))
self.footer_height_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px'))
self.footer_position_check_box.setText(translate('OpenLP.ThemeWizard', 'Use default location'))
themeWizard.setOption(QtGui.QWizard.HaveCustomButton1, False)
themeWizard.setButtonText(QtGui.QWizard.CustomButton1, translate('OpenLP.ThemeWizard', 'Layout Preview'))
self.previewPage.setTitle(translate('OpenLP.ThemeWizard', 'Preview and Save'))
self.previewPage.setSubTitle(translate('OpenLP.ThemeWizard', 'Preview the theme and save it.'))
self.themeNameLabel.setText(translate('OpenLP.ThemeWizard', 'Theme name:'))
self.preview_page.setTitle(translate('OpenLP.ThemeWizard', 'Preview and Save'))
self.preview_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Preview the theme and save it.'))
self.theme_name_label.setText(translate('OpenLP.ThemeWizard', 'Theme name:'))
# Align all QFormLayouts towards each other.
labelWidth = max(self.backgroundLabel.minimumSizeHint().width(), self.horizontalLabel.minimumSizeHint().width())
self.spacer.changeSize(labelWidth, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
label_width = max(self.background_label.minimumSizeHint().width(),
self.horizontal_label.minimumSizeHint().width())
self.spacer.changeSize(label_width, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

View File

@ -4,8 +4,8 @@
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2013 Raoul Snyman #
# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #

Some files were not shown because too many files have changed in this diff Show More