core_lib files string conversions

This commit is contained in:
Ken Roberts 2016-05-20 09:22:06 -07:00
parent 656af1e90e
commit 7f5096d0f9
21 changed files with 263 additions and 199 deletions

View File

@ -131,7 +131,7 @@ class Source(CommonBase, Base):
""" """
Return basic representation of Source table entry. Return basic representation of Source table entry.
""" """
return '<Source(pjlink_name="{name}", pjlink_code="{code}", text="{Text}")>'.format(name=self.pjlink_name, return '<Source(pjlink_name="{name}", pjlink_code="{code}", text="{text}")>'.format(name=self.pjlink_name,
code=self.pjlink_code, code=self.pjlink_code,
text=self.text) text=self.text)
model_id = Column(Integer, ForeignKey('model.id')) model_id = Column(Integer, ForeignKey('model.id'))

View File

@ -52,7 +52,7 @@ class AboutForm(QtWidgets.QDialog, UiAboutDialog):
about_text = self.about_text_edit.toPlainText() about_text = self.about_text_edit.toPlainText()
about_text = about_text.replace('<version>', application_version['version']) about_text = about_text.replace('<version>', application_version['version'])
if application_version['build']: if application_version['build']:
build_text = translate('OpenLP.AboutForm', ' build %s') % application_version['build'] build_text = translate('OpenLP.AboutForm', ' build {version}').format(version=application_version['build'])
else: else:
build_text = '' build_text = ''
about_text = about_text.replace('<revision>', build_text) about_text = about_text.replace('<revision>', build_text)

View File

@ -308,8 +308,8 @@ class AdvancedTab(SettingsTab):
self.service_name_label.setText(translate('OpenLP.AdvancedTab', 'Name:')) self.service_name_label.setText(translate('OpenLP.AdvancedTab', 'Name:'))
self.service_name_edit.setToolTip(translate('OpenLP.AdvancedTab', 'Consult the OpenLP manual for usage.')) self.service_name_edit.setToolTip(translate('OpenLP.AdvancedTab', 'Consult the OpenLP manual for usage.'))
self.service_name_revert_button.setToolTip( self.service_name_revert_button.setToolTip(
translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".') % translate('OpenLP.AdvancedTab',
UiStrings().DefaultServiceName) 'Revert to the default service name "{name}".').format(name=UiStrings().DefaultServiceName))
self.service_name_example_label.setText(translate('OpenLP.AdvancedTab', 'Example:')) self.service_name_example_label.setText(translate('OpenLP.AdvancedTab', 'Example:'))
self.hide_mouse_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) 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')) self.hide_mouse_check_box.setText(translate('OpenLP.AdvancedTab', 'Hide mouse cursor when over display window'))
@ -391,16 +391,16 @@ class AdvancedTab(SettingsTab):
# Since data location can be changed, make sure the path is present. # Since data location can be changed, make sure the path is present.
self.current_data_path = AppLocation.get_data_path() self.current_data_path = AppLocation.get_data_path()
if not os.path.exists(self.current_data_path): if not os.path.exists(self.current_data_path):
log.error('Data path not found %s' % self.current_data_path) log.error('Data path not found {path}'.format(path=self.current_data_path))
answer = QtWidgets.QMessageBox.critical( answer = QtWidgets.QMessageBox.critical(
self, translate('OpenLP.AdvancedTab', 'Data Directory Error'), self, translate('OpenLP.AdvancedTab', 'Data Directory Error'),
translate('OpenLP.AdvancedTab', 'OpenLP data directory was not found\n\n%s\n\n' translate('OpenLP.AdvancedTab', 'OpenLP data directory was not found\n\n{path}\n\n'
'This data directory was previously changed from the OpenLP ' 'This data directory was previously changed from the OpenLP '
'default location. If the new location was on removable ' 'default location. If the new location was on removable '
'media, that media needs to be made available.\n\n' '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 "No" to stop loading OpenLP. allowing you to fix the the problem.\n\n'
'Click "Yes" to reset the data directory to the default ' 'Click "Yes" to reset the data directory to the default '
'location.').replace('%s', self.current_data_path), 'location.').format(path=self.current_data_path),
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No),
QtWidgets.QMessageBox.No) QtWidgets.QMessageBox.No)
if answer == QtWidgets.QMessageBox.No: if answer == QtWidgets.QMessageBox.No:
@ -410,7 +410,7 @@ class AdvancedTab(SettingsTab):
# Set data location to default. # Set data location to default.
settings.remove('advanced/data path') settings.remove('advanced/data path')
self.current_data_path = AppLocation.get_data_path() self.current_data_path = AppLocation.get_data_path()
log.warning('User requested data path set to default %s' % self.current_data_path) log.warning('User requested data path set to default {path}'.format(path=self.current_data_path))
self.data_directory_label.setText(os.path.abspath(self.current_data_path)) self.data_directory_label.setText(os.path.abspath(self.current_data_path))
# Don't allow data directory move if running portable. # Don't allow data directory move if running portable.
if settings.value('advanced/is portable'): if settings.value('advanced/is portable'):
@ -542,9 +542,9 @@ class AdvancedTab(SettingsTab):
# Make sure they want to change the data. # Make sure they want to change the data.
answer = QtWidgets.QMessageBox.question(self, translate('OpenLP.AdvancedTab', 'Confirm Data Directory Change'), answer = QtWidgets.QMessageBox.question(self, translate('OpenLP.AdvancedTab', 'Confirm Data Directory Change'),
translate('OpenLP.AdvancedTab', 'Are you sure you want to change the ' translate('OpenLP.AdvancedTab', 'Are you sure you want to change the '
'location of the OpenLP data directory to:\n\n%s\n\nThe data ' 'location of the OpenLP data directory to:\n\n{path}'
'directory will be changed when OpenLP is closed.'). '\n\nThe data directory will be changed when OpenLP is '
replace('%s', new_data_path), 'closed.').format(path=new_data_path),
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes |
QtWidgets.QMessageBox.No), QtWidgets.QMessageBox.No),
QtWidgets.QMessageBox.No) QtWidgets.QMessageBox.No)
@ -608,10 +608,10 @@ class AdvancedTab(SettingsTab):
answer = QtWidgets.QMessageBox.warning(self, answer = QtWidgets.QMessageBox.warning(self,
translate('OpenLP.AdvancedTab', 'Overwrite Existing Data'), translate('OpenLP.AdvancedTab', 'Overwrite Existing Data'),
translate('OpenLP.AdvancedTab', translate('OpenLP.AdvancedTab',
'WARNING: \n\nThe location you have selected \n\n%s\n\n' 'WARNING: \n\nThe location you have selected \n\n{path}'
'appears to contain OpenLP data files. Do you wish to ' '\n\nappears to contain OpenLP data files. Do you wish to '
'replace these files with the current data files?'). 'replace these files with the current data '
replace('%s', os.path.abspath(data_path,)), 'files?').format(path=os.path.abspath(data_path,)),
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes |
QtWidgets.QMessageBox.No), QtWidgets.QMessageBox.No),
QtWidgets.QMessageBox.No) QtWidgets.QMessageBox.No)

View File

@ -91,6 +91,7 @@ class ExceptionForm(QtWidgets.QDialog, Ui_ExceptionDialog, RegistryProperties):
super(ExceptionForm, self).__init__(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint) super(ExceptionForm, self).__init__(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
self.setupUi(self) self.setupUi(self)
self.settings_section = 'crashreport' self.settings_section = 'crashreport'
# TODO: Need to see how to format strings when string with tags is actually a variable
self.report_text = '**OpenLP Bug Report**\n' \ self.report_text = '**OpenLP Bug Report**\n' \
'Version: %s\n\n' \ 'Version: %s\n\n' \
'--- Details of the Exception. ---\n\n%s\n\n ' \ '--- Details of the Exception. ---\n\n%s\n\n ' \
@ -114,21 +115,17 @@ class ExceptionForm(QtWidgets.QDialog, Ui_ExceptionDialog, RegistryProperties):
openlp_version = get_application_version() openlp_version = get_application_version()
description = self.description_text_edit.toPlainText() description = self.description_text_edit.toPlainText()
traceback = self.exception_text_edit.toPlainText() traceback = self.exception_text_edit.toPlainText()
system = translate('OpenLP.ExceptionForm', 'Platform: %s\n') % platform.platform() system = translate('OpenLP.ExceptionForm', 'Platform: {platform}\n').format(platform=platform.platform())
libraries = 'Python: %s\n' % platform.python_version() + \ libraries = ('Python: {python}\nQt5: {qt5}\nPyQt5: {pyqt5}\nQtWebkit: {qtwebkit}\nSQLAlchemy: {sqalchemy}\n'
'Qt5: %s\n' % Qt.qVersion() + \ 'SQLAlchemy Migrate: {migrate}\nBeautifulSoup: {soup}\nlxml: {etree}\nChardet: {chardet}\n'
'PyQt5: %s\n' % Qt.PYQT_VERSION_STR + \ 'PyEnchant: {enchant}\nMako: {mako}\npyICU: {icu}\npyUNO bridge: {uno}\n'
'QtWebkit: %s\n' % WEBKIT_VERSION + \ 'VLC: {vlc}\n').format(python=platform.python_version(), qt5=Qt.qVersion(),
'SQLAlchemy: %s\n' % sqlalchemy.__version__ + \ pyqt5=Qt.PYQT_VERSION_STR, qtwebkit=WEBKIT_VERSION,
'SQLAlchemy Migrate: %s\n' % MIGRATE_VERSION + \ sqalchemy=sqlalchemy.__version__, migrate=MIGRATE_VERSION,
'BeautifulSoup: %s\n' % bs4.__version__ + \ soup=bs4.__version__, etree=etree.__version__, chardet=CHARDET_VERSION,
'lxml: %s\n' % etree.__version__ + \ enchant=ENCHANT_VERSION, mako=MAKO_VERSION, icu=ICU_VERSION,
'Chardet: %s\n' % CHARDET_VERSION + \ uno=self._pyuno_import(), vlc=VLC_VERSION)
'PyEnchant: %s\n' % ENCHANT_VERSION + \
'Mako: %s\n' % MAKO_VERSION + \
'pyICU: %s\n' % ICU_VERSION + \
'pyUNO bridge: %s\n' % self._pyuno_import() + \
'VLC: %s\n' % VLC_VERSION
if is_linux(): if is_linux():
if os.environ.get('KDE_FULL_SESSION') == 'true': if os.environ.get('KDE_FULL_SESSION') == 'true':
system += 'Desktop: KDE SC\n' system += 'Desktop: KDE SC\n'
@ -178,9 +175,10 @@ class ExceptionForm(QtWidgets.QDialog, Ui_ExceptionDialog, RegistryProperties):
source = re.sub(r'.*[/\\]openlp[/\\](.*)".*', r'\1', line) source = re.sub(r'.*[/\\]openlp[/\\](.*)".*', r'\1', line)
if ':' in line: if ':' in line:
exception = line.split('\n')[-1].split(':')[0] exception = line.split('\n')[-1].split(':')[0]
subject = 'Bug report: %s in %s' % (exception, source) subject = 'Bug report: {error} in {source}'.format(error=exception, source=source)
mail_urlquery = QtCore.QUrlQuery() mail_urlquery = QtCore.QUrlQuery()
mail_urlquery.addQueryItem('subject', subject) mail_urlquery.addQueryItem('subject', subject)
# TODO: Find out how to format() text that is in a variable
mail_urlquery.addQueryItem('body', self.report_text % content) mail_urlquery.addQueryItem('body', self.report_text % content)
if self.file_attachment: if self.file_attachment:
mail_urlquery.addQueryItem('attach', self.file_attachment) mail_urlquery.addQueryItem('attach', self.file_attachment)
@ -199,7 +197,7 @@ class ExceptionForm(QtWidgets.QDialog, Ui_ExceptionDialog, RegistryProperties):
else: else:
self.__button_state(False) self.__button_state(False)
self.description_word_count.setText( self.description_word_count.setText(
translate('OpenLP.ExceptionDialog', 'Description characters to enter : %s') % count) translate('OpenLP.ExceptionDialog', 'Description characters to enter : {count}').format(count=count))
def on_attach_file_button_clicked(self): def on_attach_file_button_clicked(self):
""" """
@ -210,7 +208,7 @@ class ExceptionForm(QtWidgets.QDialog, Ui_ExceptionDialog, RegistryProperties):
'Select Attachment'), 'Select Attachment'),
Settings().value(self.settings_section + Settings().value(self.settings_section +
'/last directory'), '/last directory'),
'%s (*)' % UiStrings().AllFiles) '{text} (*)'.format(text=UiStrings().AllFiles))
log.info('New files(s) %s', str(files)) log.info('New files(s) %s', str(files))
if files: if files:
self.file_attachment = str(files) self.file_attachment = str(files)

View File

@ -72,7 +72,7 @@ class ThemeScreenshotWorker(QtCore.QObject):
if self.was_download_cancelled: if self.was_download_cancelled:
return return
try: try:
urllib.request.urlretrieve('%s%s' % (self.themes_url, self.screenshot), urllib.request.urlretrieve('{host}{name}'.format(host=self.themes_url, name=self.screenshot),
os.path.join(gettempdir(), 'openlp', self.screenshot)) os.path.join(gettempdir(), 'openlp', self.screenshot))
# Signal that the screenshot has been downloaded # Signal that the screenshot has been downloaded
self.screenshot_downloaded.emit(self.title, self.filename, self.sha256) self.screenshot_downloaded.emit(self.title, self.filename, self.sha256)
@ -180,11 +180,13 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
user_agent = 'OpenLP/' + Registry().get('application').applicationVersion() user_agent = 'OpenLP/' + Registry().get('application').applicationVersion()
self.application.process_events() self.application.process_events()
try: try:
web_config = get_web_page('%s%s' % (self.web, 'download.cfg'), header=('User-Agent', user_agent)) web_config = get_web_page('{host}{name}'.format(host=self.web, name='download.cfg'),
header=('User-Agent', user_agent))
except (urllib.error.URLError, ConnectionError) as err: except (urllib.error.URLError, ConnectionError) as err:
msg = QtWidgets.QMessageBox() msg = QtWidgets.QMessageBox()
title = translate('OpenLP.FirstTimeWizard', 'Network Error') title = translate('OpenLP.FirstTimeWizard', 'Network Error')
msg.setText('{} {}'.format(title, err.code if hasattr(err, 'code') else '')) msg.setText('{title} {error}'.format(title=title,
error=err.code if hasattr(err, 'code') else ''))
msg.setInformativeText(translate('OpenLP.FirstTimeWizard', msg.setInformativeText(translate('OpenLP.FirstTimeWizard',
'There was a network error attempting to ' 'There was a network error attempting to '
'connect to retrieve initial configuration information')) 'connect to retrieve initial configuration information'))
@ -205,6 +207,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
trace_error_handler(log) trace_error_handler(log)
self.update_screen_list_combo() self.update_screen_list_combo()
self.application.process_events() self.application.process_events()
# TODO: Figure out how to use a variable with format()
self.downloading = translate('OpenLP.FirstTimeWizard', 'Downloading %s...') self.downloading = translate('OpenLP.FirstTimeWizard', 'Downloading %s...')
if self.has_run_wizard: if self.has_run_wizard:
self.songs_check_box.setChecked(self.plugin_manager.get_plugin_by_name('songs').is_active()) self.songs_check_box.setChecked(self.plugin_manager.get_plugin_by_name('songs').is_active())
@ -223,9 +226,9 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
songs = songs.split(',') songs = songs.split(',')
for song in songs: for song in songs:
self.application.process_events() self.application.process_events()
title = self.config.get('songs_%s' % song, 'title') title = self.config.get('songs_{song}'.format(song=song), 'title')
filename = self.config.get('songs_%s' % song, 'filename') filename = self.config.get('songs_{song}'.format(song=song), 'filename')
sha256 = self.config.get('songs_%s' % song, 'sha256', fallback='') sha256 = self.config.get('songs_{song}'.format(song=song), 'sha256', fallback='')
item = QtWidgets.QListWidgetItem(title, self.songs_list_widget) item = QtWidgets.QListWidgetItem(title, self.songs_list_widget)
item.setData(QtCore.Qt.UserRole, (filename, sha256)) item.setData(QtCore.Qt.UserRole, (filename, sha256))
item.setCheckState(QtCore.Qt.Unchecked) item.setCheckState(QtCore.Qt.Unchecked)
@ -234,15 +237,15 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
bible_languages = bible_languages.split(',') bible_languages = bible_languages.split(',')
for lang in bible_languages: for lang in bible_languages:
self.application.process_events() self.application.process_events()
language = self.config.get('bibles_%s' % lang, 'title') language = self.config.get('bibles_{lang}'.format(lang=lang), 'title')
lang_item = QtWidgets.QTreeWidgetItem(self.bibles_tree_widget, [language]) lang_item = QtWidgets.QTreeWidgetItem(self.bibles_tree_widget, [language])
bibles = self.config.get('bibles_%s' % lang, 'translations') bibles = self.config.get('bibles_{lang}'.format(lang=lang), 'translations')
bibles = bibles.split(',') bibles = bibles.split(',')
for bible in bibles: for bible in bibles:
self.application.process_events() self.application.process_events()
title = self.config.get('bible_%s' % bible, 'title') title = self.config.get('bible_{bible}'.format(bible=bible), 'title')
filename = self.config.get('bible_%s' % bible, 'filename') filename = self.config.get('bible_{bible}'.format(bible=bible), 'filename')
sha256 = self.config.get('bible_%s' % bible, 'sha256', fallback='') sha256 = self.config.get('bible_{bible}'.format(bible=bible), 'sha256', fallback='')
item = QtWidgets.QTreeWidgetItem(lang_item, [title]) item = QtWidgets.QTreeWidgetItem(lang_item, [title])
item.setData(0, QtCore.Qt.UserRole, (filename, sha256)) item.setData(0, QtCore.Qt.UserRole, (filename, sha256))
item.setCheckState(0, QtCore.Qt.Unchecked) item.setCheckState(0, QtCore.Qt.Unchecked)
@ -252,10 +255,10 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
# Download the theme screenshots # Download the theme screenshots
themes = self.config.get('themes', 'files').split(',') themes = self.config.get('themes', 'files').split(',')
for theme in themes: for theme in themes:
title = self.config.get('theme_%s' % theme, 'title') title = self.config.get('theme_{theme}'.format(theme=theme), 'title')
filename = self.config.get('theme_%s' % theme, 'filename') filename = self.config.get('theme_{theme}'.format(theme=theme), 'filename')
sha256 = self.config.get('theme_%s' % theme, 'sha256', fallback='') sha256 = self.config.get('theme_{theme}'.format(theme=theme), 'sha256', fallback='')
screenshot = self.config.get('theme_%s' % theme, 'screenshot') screenshot = self.config.get('theme_{theme}'.format(theme=theme), 'screenshot')
worker = ThemeScreenshotWorker(self.themes_url, title, filename, sha256, screenshot) worker = ThemeScreenshotWorker(self.themes_url, title, filename, sha256, screenshot)
self.theme_screenshot_workers.append(worker) self.theme_screenshot_workers.append(worker)
worker.screenshot_downloaded.connect(self.on_screenshot_downloaded) worker.screenshot_downloaded.connect(self.on_screenshot_downloaded)
@ -421,7 +424,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
self._download_progress(block_count, block_size) self._download_progress(block_count, block_size)
filename.close() filename.close()
if sha256 and hasher.hexdigest() != sha256: if sha256 and hasher.hexdigest() != sha256:
log.error('sha256 sums did not match for file: {}'.format(f_path)) log.error('sha256 sums did not match for file: {file}'.format(file=f_path))
os.remove(f_path) os.remove(f_path)
return False return False
except (urllib.error.URLError, socket.timeout) as err: except (urllib.error.URLError, socket.timeout) as err:
@ -447,7 +450,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
themes = self.config.get('themes', 'files') themes = self.config.get('themes', 'files')
themes = themes.split(',') themes = themes.split(',')
for index, theme in enumerate(themes): for index, theme in enumerate(themes):
screenshot = self.config.get('theme_%s' % theme, 'screenshot') screenshot = self.config.get('theme_{theme}'.format(theme=theme), 'screenshot')
item = self.themes_list_widget.item(index) item = self.themes_list_widget.item(index)
if item: if item:
item.setIcon(build_icon(os.path.join(gettempdir(), 'openlp', screenshot))) item.setIcon(build_icon(os.path.join(gettempdir(), 'openlp', screenshot)))
@ -507,7 +510,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
item = self.songs_list_widget.item(i) item = self.songs_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked: if item.checkState() == QtCore.Qt.Checked:
filename, sha256 = item.data(QtCore.Qt.UserRole) filename, sha256 = item.data(QtCore.Qt.UserRole)
size = self._get_file_size('%s%s' % (self.songs_url, filename)) size = self._get_file_size('{path}{name}'.format(path=self.songs_url, name=filename))
self.max_progress += size self.max_progress += size
# Loop through the Bibles list and increase for each selected item # Loop through the Bibles list and increase for each selected item
iterator = QtWidgets.QTreeWidgetItemIterator(self.bibles_tree_widget) iterator = QtWidgets.QTreeWidgetItemIterator(self.bibles_tree_widget)
@ -516,7 +519,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
item = iterator.value() item = iterator.value()
if item.parent() and item.checkState(0) == QtCore.Qt.Checked: if item.parent() and item.checkState(0) == QtCore.Qt.Checked:
filename, sha256 = item.data(0, QtCore.Qt.UserRole) filename, sha256 = item.data(0, QtCore.Qt.UserRole)
size = self._get_file_size('%s%s' % (self.bibles_url, filename)) size = self._get_file_size('{path}{name}'.format(path=self.bibles_url, name=filename))
self.max_progress += size self.max_progress += size
iterator += 1 iterator += 1
# Loop through the themes list and increase for each selected item # Loop through the themes list and increase for each selected item
@ -525,7 +528,7 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
item = self.themes_list_widget.item(i) item = self.themes_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked: if item.checkState() == QtCore.Qt.Checked:
filename, sha256 = item.data(QtCore.Qt.UserRole) filename, sha256 = item.data(QtCore.Qt.UserRole)
size = self._get_file_size('%s%s' % (self.themes_url, filename)) size = self._get_file_size('{path}{name}'.format(path=self.themes_url, name=filename))
self.max_progress += size self.max_progress += size
except urllib.error.URLError: except urllib.error.URLError:
trace_error_handler(log) trace_error_handler(log)
@ -560,22 +563,26 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
if self.max_progress: if self.max_progress:
self.progress_bar.setValue(self.progress_bar.maximum()) self.progress_bar.setValue(self.progress_bar.maximum())
if self.has_run_wizard: if self.has_run_wizard:
self.progress_label.setText(translate('OpenLP.FirstTimeWizard', text = translate('OpenLP.FirstTimeWizard',
'Download complete. Click the %s button to return to OpenLP.') % 'Download complete. Click the {button} button to return to OpenLP.'
clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton))) ).format(text=clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton)))
self.progress_label.setText(text)
else: else:
self.progress_label.setText(translate('OpenLP.FirstTimeWizard', text = translate('OpenLP.FirstTimeWizard',
'Download complete. Click the %s button to start OpenLP.') % 'Download complete. Click the {button} button to start OpenLP.'
clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton))) ).format(button=clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton)))
self.progress_label.setText()
else: else:
if self.has_run_wizard: if self.has_run_wizard:
self.progress_label.setText(translate('OpenLP.FirstTimeWizard', text = translate('OpenLP.FirstTimeWizard',
'Click the %s button to return to OpenLP.') % 'Click the {button} button to return to OpenLP.'
clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton))) ).format(button=clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton)))
self.progress_label.setText(text)
else: else:
self.progress_label.setText(translate('OpenLP.FirstTimeWizard', text = translate('OpenLP.FirstTimeWizard',
'Click the %s button to start OpenLP.') % 'Click the {button} button to start OpenLP.'
clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton))) ).format(button=clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton)))
self.progress_label.setText()
self.finish_button.setVisible(True) self.finish_button.setVisible(True)
self.finish_button.setEnabled(True) self.finish_button.setEnabled(True)
self.cancel_button.setVisible(False) self.cancel_button.setVisible(False)
@ -628,8 +635,9 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
self._increment_progress_bar(self.downloading % filename, 0) self._increment_progress_bar(self.downloading % filename, 0)
self.previous_size = 0 self.previous_size = 0
destination = os.path.join(songs_destination, str(filename)) destination = os.path.join(songs_destination, str(filename))
if not self.url_get_file('%s%s' % (self.songs_url, filename), destination, sha256): if not self.url_get_file('{path}{name}'.format(path=self.songs_url, name=filename),
missed_files.append('Song: {}'.format(filename)) destination, sha256):
missed_files.append('Song: {name}'.format(name=filename))
# Download Bibles # Download Bibles
bibles_iterator = QtWidgets.QTreeWidgetItemIterator(self.bibles_tree_widget) bibles_iterator = QtWidgets.QTreeWidgetItemIterator(self.bibles_tree_widget)
while bibles_iterator.value(): while bibles_iterator.value():
@ -638,31 +646,34 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties):
bible, sha256 = item.data(0, QtCore.Qt.UserRole) bible, sha256 = item.data(0, QtCore.Qt.UserRole)
self._increment_progress_bar(self.downloading % bible, 0) self._increment_progress_bar(self.downloading % bible, 0)
self.previous_size = 0 self.previous_size = 0
if not self.url_get_file('%s%s' % (self.bibles_url, bible), os.path.join(bibles_destination, bible), if not self.url_get_file('{path}{name}'.format(path=self.bibles_url, name=bible),
os.path.join(bibles_destination, bible),
sha256): sha256):
missed_files.append('Bible: {}'.format(bible)) missed_files.append('Bible: {name}'.format(name=bible))
bibles_iterator += 1 bibles_iterator += 1
# Download themes # Download themes
for i in range(self.themes_list_widget.count()): for i in range(self.themes_list_widget.count()):
item = self.themes_list_widget.item(i) item = self.themes_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked: if item.checkState() == QtCore.Qt.Checked:
theme, sha256 = item.data(QtCore.Qt.UserRole) theme, sha256 = item.data(QtCore.Qt.UserRole)
# TODO: Verify how to use format() with strings in a variable
self._increment_progress_bar(self.downloading % theme, 0) self._increment_progress_bar(self.downloading % theme, 0)
self.previous_size = 0 self.previous_size = 0
if not self.url_get_file('%s%s' % (self.themes_url, theme), os.path.join(themes_destination, theme), if not self.url_get_file('{path}{name}'.format(path=self.themes_url, name=theme),
os.path.join(themes_destination, theme),
sha256): sha256):
missed_files.append('Theme: {}'.format(theme)) missed_files.append('Theme: {name}'.format(name=theme))
if missed_files: if missed_files:
file_list = '' file_list = ''
for entry in missed_files: for entry in missed_files:
file_list += '{}<br \>'.format(entry) file_list += '{text}<br \>'.format(text=entry)
msg = QtWidgets.QMessageBox() msg = QtWidgets.QMessageBox()
msg.setIcon(QtWidgets.QMessageBox.Warning) msg.setIcon(QtWidgets.QMessageBox.Warning)
msg.setWindowTitle(translate('OpenLP.FirstTimeWizard', 'Network Error')) msg.setWindowTitle(translate('OpenLP.FirstTimeWizard', 'Network Error'))
msg.setText(translate('OpenLP.FirstTimeWizard', 'Unable to download some files')) msg.setText(translate('OpenLP.FirstTimeWizard', 'Unable to download some files'))
msg.setInformativeText(translate('OpenLP.FirstTimeWizard', msg.setInformativeText(translate('OpenLP.FirstTimeWizard',
'The following files were not able to be ' 'The following files were not able to be '
'downloaded:<br \>{}'.format(file_list))) 'downloaded:<br \>{text}'.format(text=file_list)))
msg.setStandardButtons(msg.Ok) msg.setStandardButtons(msg.Ok)
ans = msg.exec() ans = msg.exec()
return True return True

View File

@ -228,12 +228,13 @@ class UiFirstTimeWizard(object):
:param first_time_wizard: The wizard form :param first_time_wizard: The wizard form
""" """
first_time_wizard.setWindowTitle(translate('OpenLP.FirstTimeWizard', 'First Time Wizard')) first_time_wizard.setWindowTitle(translate('OpenLP.FirstTimeWizard', 'First Time Wizard'))
first_time_wizard.title_label.setText('<span style="font-size:14pt; font-weight:600;">%s</span>' % text = translate('OpenLP.FirstTimeWizard', 'Welcome to the First Time Wizard')
translate('OpenLP.FirstTimeWizard', 'Welcome to the First Time Wizard')) first_time_wizard.title_label.setText('<span style="font-size:14pt; font-weight:600;">{text}'
'</span>'.format(text=text))
button = clean_button_text(first_time_wizard.buttonText(QtWidgets.QWizard.NextButton))
first_time_wizard.information_label.setText( first_time_wizard.information_label.setText(
translate('OpenLP.FirstTimeWizard', 'This wizard will help you to configure OpenLP for initial use. ' translate('OpenLP.FirstTimeWizard', 'This wizard will help you to configure OpenLP for initial use. '
'Click the %s button below to start.') % 'Click the {button} button below to start.').format(button=button))
clean_button_text(first_time_wizard.buttonText(QtWidgets.QWizard.NextButton)))
self.download_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Downloading Resource Index')) self.download_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Downloading Resource Index'))
self.download_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Please wait while the resource index is ' self.download_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Please wait while the resource index is '
'downloaded.')) 'downloaded.'))
@ -264,18 +265,19 @@ class UiFirstTimeWizard(object):
self.no_internet_page.setTitle(translate('OpenLP.FirstTimeWizard', 'No Internet Connection')) self.no_internet_page.setTitle(translate('OpenLP.FirstTimeWizard', 'No Internet Connection'))
self.no_internet_page.setSubTitle( self.no_internet_page.setSubTitle(
translate('OpenLP.FirstTimeWizard', 'Unable to detect an Internet connection.')) translate('OpenLP.FirstTimeWizard', 'Unable to detect an Internet connection.'))
button = clean_button_text(first_time_wizard.buttonText(QtWidgets.QWizard.FinishButton))
self.no_internet_text = translate('OpenLP.FirstTimeWizard', self.no_internet_text = translate('OpenLP.FirstTimeWizard',
'No Internet connection was found. The First Time Wizard needs an Internet ' '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.' 'connection in order to be able to download sample songs, Bibles and themes.'
' Click the %s button now to start OpenLP with initial settings and ' ' Click the {button} button now to start OpenLP with initial settings and '
'no sample data.\n\nTo re-run the First Time Wizard and import this sample ' '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 ' 'data at a later time, check your Internet connection and re-run this '
'wizard by selecting "Tools/Re-run First Time Wizard" from OpenLP.') % \ 'wizard by selecting "Tools/Re-run First Time Wizard" from OpenLP.'
clean_button_text(first_time_wizard.buttonText(QtWidgets.QWizard.FinishButton)) ).format(button=button)
button = clean_button_text(first_time_wizard.buttonText(QtWidgets.QWizard.CancelButton))
self.cancel_wizard_text = translate('OpenLP.FirstTimeWizard', self.cancel_wizard_text = translate('OpenLP.FirstTimeWizard',
'\n\nTo cancel the First Time Wizard completely (and not start OpenLP), ' '\n\nTo cancel the First Time Wizard completely (and not start OpenLP), '
'click the %s button now.') % \ 'click the {button} button now.').format(button=button)
clean_button_text(first_time_wizard.buttonText(QtWidgets.QWizard.CancelButton))
self.songs_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs')) self.songs_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs'))
self.songs_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download public domain songs.')) self.songs_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download public domain songs.'))
self.bibles_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Bibles')) self.bibles_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Bibles'))

View File

@ -72,19 +72,19 @@ class FormattingTagController(object):
""" """
for line_number, html1 in enumerate(self.protected_tags): for line_number, html1 in enumerate(self.protected_tags):
if self._strip(html1['start tag']) == tag: if self._strip(html1['start tag']) == tag:
return translate('OpenLP.FormattingTagForm', 'Tag %s already defined.') % tag return translate('OpenLP.FormattingTagForm', 'Tag {tag} already defined.').format(tag=tag)
if self._strip(html1['desc']) == desc: if self._strip(html1['desc']) == desc:
return translate('OpenLP.FormattingTagForm', 'Description %s already defined.') % tag return translate('OpenLP.FormattingTagForm', 'Description {tag} already defined.').format(tag=tag)
for line_number, html1 in enumerate(self.custom_tags): for line_number, html1 in enumerate(self.custom_tags):
if self._strip(html1['start tag']) == tag: if self._strip(html1['start tag']) == tag:
return translate('OpenLP.FormattingTagForm', 'Tag %s already defined.') % tag return translate('OpenLP.FormattingTagForm', 'Tag {tag} already defined.').format(tag=tag)
if self._strip(html1['desc']) == desc: if self._strip(html1['desc']) == desc:
return translate('OpenLP.FormattingTagForm', 'Description %s already defined.') % tag return translate('OpenLP.FormattingTagForm', 'Description {tag} already defined.').format(tag=tag)
tag = { tag = {
'desc': desc, 'desc': desc,
'start tag': '{%s}' % tag, 'start tag': '{{{tag}}}'.format(tag=tag),
'start html': start_html, 'start html': start_html,
'end tag': '{/%s}' % tag, 'end tag': '{/{tag}}}'.format(tag=tag),
'end html': end_html, 'end html': end_html,
'protected': False, 'protected': False,
'temporary': False 'temporary': False
@ -130,6 +130,7 @@ class FormattingTagController(object):
elif not match.group('empty'): elif not match.group('empty'):
end_tags.append(tag) end_tags.append(tag)
match = self.html_tag_regex.search(start_html, match.end()) match = self.html_tag_regex.search(start_html, match.end())
# TODO: Verify format() works with lambda
return ''.join(map(lambda tag: '</%s>' % tag, reversed(end_tags))) return ''.join(map(lambda tag: '</%s>' % tag, reversed(end_tags)))
def start_tag_changed(self, start_html, end_html): def start_tag_changed(self, start_html, end_html):
@ -146,7 +147,8 @@ class FormattingTagController(object):
end = self.start_html_to_end_html(start_html) end = self.start_html_to_end_html(start_html)
if not end_html: if not end_html:
if not end: if not end:
return translate('OpenLP.FormattingTagForm', 'Start tag %s is not valid HTML') % start_html, None return translate('OpenLP.FormattingTagForm',
'Start tag {tag} is not valid HTML').format(tag=start_html), None
return None, end return None, end
return None, None return None, None
@ -165,7 +167,8 @@ class FormattingTagController(object):
if not end_html: if not end_html:
return None, end return None, end
if end and end != end_html: if end and end != end_html:
return translate('OpenLP.FormattingTagForm', return (translate('OpenLP.FormattingTagForm',
'End tag %(end)s does not match end tag for start tag %(start)s') % \ 'End tag {end} does not match end tag for start tag {start}').format(end=end,
{'end': end, 'start': start_html}, None start=start_html),
None)
return None, None return None, None

View File

@ -90,9 +90,10 @@ class FormattingTagForm(QtWidgets.QDialog, Ui_FormattingTagDialog, FormattingTag
""" """
new_row = self.tag_table_widget.rowCount() new_row = self.tag_table_widget.rowCount()
self.tag_table_widget.insertRow(new_row) self.tag_table_widget.insertRow(new_row)
self.tag_table_widget.setItem(new_row, 0, QtWidgets.QTableWidgetItem(translate('OpenLP.FormattingTagForm', self.tag_table_widget.setItem(new_row, 0,
'New Tag %d' % new_row))) QtWidgets.QTableWidgetItem(translate('OpenLP.FormattingTagForm',
self.tag_table_widget.setItem(new_row, 1, QtWidgets.QTableWidgetItem('n%d' % new_row)) 'New Tag {row:d}').format(row=new_row)))
self.tag_table_widget.setItem(new_row, 1, QtWidgets.QTableWidgetItem('n{row:d}'.format(row=new_row)))
self.tag_table_widget.setItem(new_row, 2, self.tag_table_widget.setItem(new_row, 2,
QtWidgets.QTableWidgetItem(translate('OpenLP.FormattingTagForm', '<HTML here>'))) QtWidgets.QTableWidgetItem(translate('OpenLP.FormattingTagForm', '<HTML here>')))
self.tag_table_widget.setItem(new_row, 3, QtWidgets.QTableWidgetItem('')) self.tag_table_widget.setItem(new_row, 3, QtWidgets.QTableWidgetItem(''))

View File

@ -400,7 +400,7 @@ class GeneralTab(SettingsTab):
""" """
Select the logo file Select the logo file
""" """
file_filters = '%s;;%s (*.*)' % (get_images_filter(), UiStrings().AllFiles) file_filters = '{text};;{names} (*.*)'.format(text=get_images_filter(), names=UiStrings().AllFiles)
filename, filter_used = QtWidgets.QFileDialog.getOpenFileName(self, filename, filter_used = QtWidgets.QFileDialog.getOpenFileName(self,
translate('OpenLP.AdvancedTab', 'Open File'), '', translate('OpenLP.AdvancedTab', 'Open File'), '',
file_filters) file_filters)

View File

@ -471,7 +471,8 @@ class Ui_MainWindow(object):
self.web_site_item.setText(translate('OpenLP.MainWindow', '&Web Site')) self.web_site_item.setText(translate('OpenLP.MainWindow', '&Web Site'))
for item in self.language_group.actions(): for item in self.language_group.actions():
item.setText(item.objectName()) item.setText(item.objectName())
item.setStatusTip(translate('OpenLP.MainWindow', 'Set the interface language to %s') % item.objectName()) item.setStatusTip(translate('OpenLP.MainWindow',
'Set the interface language to {name}').format(name=item.objectName()))
self.auto_language_item.setText(translate('OpenLP.MainWindow', '&Autodetect')) self.auto_language_item.setText(translate('OpenLP.MainWindow', '&Autodetect'))
self.auto_language_item.setStatusTip(translate('OpenLP.MainWindow', 'Use the system language, if available.')) self.auto_language_item.setStatusTip(translate('OpenLP.MainWindow', 'Use the system language, if available.'))
self.tools_add_tool_item.setText(translate('OpenLP.MainWindow', 'Add &Tool...')) self.tools_add_tool_item.setText(translate('OpenLP.MainWindow', 'Add &Tool...'))
@ -1334,8 +1335,10 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties):
for file_id, filename in enumerate(recent_files_to_display): for file_id, filename in enumerate(recent_files_to_display):
log.debug('Recent file name: {name}'.format(name=filename)) log.debug('Recent file name: {name}'.format(name=filename))
# TODO: Verify ''.format() before committing # TODO: Verify ''.format() before committing
action = create_action(self, '', text='&%d %s' % (file_id + 1, action = create_action(self, '',
os.path.splitext(os.path.basename(str(filename)))[0]), data=filename, text='&{n} {name}'.format(n=file_id + 1,
name=os.path.splitext(os.path.basename(str(filename)))[0]),
data=filename,
triggers=self.service_manager_contents.on_recent_service_clicked) triggers=self.service_manager_contents.on_recent_service_clicked)
self.recent_files_menu.addAction(action) self.recent_files_menu.addAction(action)
clear_recent_files_action = create_action(self, '', clear_recent_files_action = create_action(self, '',

View File

@ -74,6 +74,6 @@ class Ui_PluginViewDialog(object):
""" """
plugin_view_dialog.setWindowTitle(translate('OpenLP.PluginForm', 'Manage Plugins')) plugin_view_dialog.setWindowTitle(translate('OpenLP.PluginForm', 'Manage Plugins'))
self.plugin_info_group_box.setTitle(translate('OpenLP.PluginForm', 'Plugin Details')) self.plugin_info_group_box.setTitle(translate('OpenLP.PluginForm', 'Plugin Details'))
self.about_label.setText('%s:' % UiStrings().About) self.about_label.setText('{about}:'.format(about=UiStrings().About))
self.status_label.setText(translate('OpenLP.PluginForm', 'Status:')) self.status_label.setText(translate('OpenLP.PluginForm', 'Status:'))
self.status_checkbox.setText(translate('OpenLP.PluginForm', 'Active')) self.status_checkbox.setText(translate('OpenLP.PluginForm', 'Active'))

View File

@ -60,6 +60,7 @@ class PluginForm(QtWidgets.QDialog, Ui_PluginViewDialog, RegistryProperties):
self._clear_details() self._clear_details()
self.programatic_change = True self.programatic_change = True
plugin_list_width = 0 plugin_list_width = 0
# TODO: See how to use format() with variables
for plugin in self.plugin_manager.plugins: for plugin in self.plugin_manager.plugins:
item = QtWidgets.QListWidgetItem(self.plugin_list_widget) item = QtWidgets.QListWidgetItem(self.plugin_list_widget)
# We do this just to make 100% sure the status is an integer as # We do this just to make 100% sure the status is an integer as
@ -94,7 +95,7 @@ class PluginForm(QtWidgets.QDialog, Ui_PluginViewDialog, RegistryProperties):
""" """
Set the details of the currently selected plugin Set the details of the currently selected plugin
""" """
log.debug('PluginStatus: %s', str(self.active_plugin.status)) log.debug('PluginStatus: {status}'.format(status=str(self.active_plugin.status)))
self.about_text_browser.setHtml(self.active_plugin.about()) self.about_text_browser.setHtml(self.active_plugin.about())
self.programatic_change = True self.programatic_change = True
if self.active_plugin.status != PluginStatus.Disabled: if self.active_plugin.status != PluginStatus.Disabled:
@ -136,6 +137,7 @@ class PluginForm(QtWidgets.QDialog, Ui_PluginViewDialog, RegistryProperties):
self.active_plugin.app_startup() self.active_plugin.app_startup()
else: else:
self.active_plugin.toggle_status(PluginStatus.Inactive) self.active_plugin.toggle_status(PluginStatus.Inactive)
# TODO: Verify using format() with a variable
status_text = translate('OpenLP.PluginForm', '%s (Inactive)') status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
if self.active_plugin.status == PluginStatus.Active: if self.active_plugin.status == PluginStatus.Active:
status_text = translate('OpenLP.PluginForm', '%s (Active)') status_text = translate('OpenLP.PluginForm', '%s (Active)')

View File

@ -118,7 +118,7 @@ class Ui_ServiceManager(object):
tooltip=translate('OpenLP.ServiceManager', 'Save this service.'), tooltip=translate('OpenLP.ServiceManager', 'Save this service.'),
triggers=self.decide_save_method) triggers=self.decide_save_method)
self.toolbar.addSeparator() self.toolbar.addSeparator()
self.theme_label = QtWidgets.QLabel('%s:' % UiStrings().Theme, widget) self.theme_label = QtWidgets.QLabel('{theme}:'.format(theme=UiStrings().Theme), widget)
self.theme_label.setContentsMargins(3, 3, 3, 3) self.theme_label.setContentsMargins(3, 3, 3, 3)
self.theme_label.setObjectName('theme_label') self.theme_label.setObjectName('theme_label')
self.toolbar.add_toolbar_widget(self.theme_label) self.toolbar.add_toolbar_widget(self.theme_label)
@ -503,8 +503,8 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
path_file_name = str(self.file_name()) path_file_name = str(self.file_name())
path, file_name = os.path.split(path_file_name) path, file_name = os.path.split(path_file_name)
base_name = os.path.splitext(file_name)[0] base_name = os.path.splitext(file_name)[0]
service_file_name = '%s.osj' % base_name service_file_name = '{name}.osj'.format(name=base_name)
self.log_debug('ServiceManager.save_file - %s' % path_file_name) self.log_debug('ServiceManager.save_file - {name}'.format(name=path_file_name))
Settings().setValue(self.main_window.service_manager_settings_section + '/last directory', path) Settings().setValue(self.main_window.service_manager_settings_section + '/last directory', path)
service = self.create_basic_service() service = self.create_basic_service()
write_list = [] write_list = []
@ -530,8 +530,9 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
self.application.set_normal_cursor() self.application.set_normal_cursor()
title = translate('OpenLP.ServiceManager', 'Service File(s) Missing') title = translate('OpenLP.ServiceManager', 'Service File(s) Missing')
message = translate('OpenLP.ServiceManager', message = translate('OpenLP.ServiceManager',
'The following file(s) in the service are missing: %s\n\n' 'The following file(s) in the service are missing: {name}\n\n'
'These files will be removed if you continue to save.') % "\n\t".join(missing_list) 'These files will be removed if you continue to save.'
).format(name="\n\t".join(missing_list))
answer = QtWidgets.QMessageBox.critical(self, title, message, answer = QtWidgets.QMessageBox.critical(self, title, message,
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Ok |
QtWidgets.QMessageBox.Cancel)) QtWidgets.QMessageBox.Cancel))
@ -561,7 +562,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
service_content = json.dumps(service) service_content = json.dumps(service)
# Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be extracted using unzip in UNIX. # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be extracted using unzip in UNIX.
allow_zip_64 = (total_size > 2147483648 + len(service_content)) allow_zip_64 = (total_size > 2147483648 + len(service_content))
self.log_debug('ServiceManager.save_file - allowZip64 is %s' % allow_zip_64) self.log_debug('ServiceManager.save_file - allowZip64 is {text}'.format(text=allow_zip_64))
zip_file = None zip_file = None
success = True success = True
self.main_window.increment_progress_bar() self.main_window.increment_progress_bar()
@ -584,7 +585,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
shutil.copy(audio_from, save_file) shutil.copy(audio_from, save_file)
zip_file.write(audio_from, audio_to) zip_file.write(audio_from, audio_to)
except IOError: except IOError:
self.log_exception('Failed to save service to disk: %s' % temp_file_name) self.log_exception('Failed to save service to disk: {name}'.format(name=temp_file_name))
self.main_window.error_message(translate('OpenLP.ServiceManager', 'Error Saving File'), 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 success = False
@ -601,7 +602,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
except OSError as ose: except OSError as ose:
QtWidgets.QMessageBox.critical(self, translate('OpenLP.ServiceManager', 'Error Saving File'), QtWidgets.QMessageBox.critical(self, translate('OpenLP.ServiceManager', 'Error Saving File'),
translate('OpenLP.ServiceManager', 'An error occurred while writing the ' translate('OpenLP.ServiceManager', 'An error occurred while writing the '
'service file: %s') % ose.strerror, 'service file: {error}').format(error=ose.strerror),
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Ok)) QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Ok))
success = False success = False
self.main_window.add_recent_file(path_file_name) self.main_window.add_recent_file(path_file_name)
@ -623,8 +624,8 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
path_file_name = str(self.file_name()) path_file_name = str(self.file_name())
path, file_name = os.path.split(path_file_name) path, file_name = os.path.split(path_file_name)
base_name = os.path.splitext(file_name)[0] base_name = os.path.splitext(file_name)[0]
service_file_name = '%s.osj' % base_name service_file_name = '{name}.osj'.format(name=base_name)
self.log_debug('ServiceManager.save_file - %s' % path_file_name) self.log_debug('ServiceManager.save_file - {name}'.format(name=path_file_name))
Settings().setValue(self.main_window.service_manager_settings_section + '/last directory', path) Settings().setValue(self.main_window.service_manager_settings_section + '/last directory', path)
service = self.create_basic_service() service = self.create_basic_service()
self.application.set_busy_cursor() self.application.set_busy_cursor()
@ -645,7 +646,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
# First we add service contents. # First we add service contents.
zip_file.writestr(service_file_name, service_content) zip_file.writestr(service_file_name, service_content)
except IOError: except IOError:
self.log_exception('Failed to save service to disk: %s', temp_file_name) self.log_exception('Failed to save service to disk: {name}'.format(name=temp_file_name))
self.main_window.error_message(translate('OpenLP.ServiceManager', 'Error Saving File'), 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 success = False
@ -740,13 +741,13 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
try: try:
ucs_file = zip_info.filename ucs_file = zip_info.filename
except UnicodeDecodeError: except UnicodeDecodeError:
self.log_exception('file_name "%s" is not valid UTF-8' % zip_info.file_name) self.log_exception('file_name "{name}" is not valid UTF-8'.format(name=zip_info.file_name))
critical_error_message_box(message=translate('OpenLP.ServiceManager', 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 continue
os_file = ucs_file.replace('/', os.path.sep) os_file = ucs_file.replace('/', os.path.sep)
os_file = os.path.basename(os_file) os_file = os.path.basename(os_file)
self.log_debug('Extract file: %s' % os_file) self.log_debug('Extract file: {name}'.format(name=os_file))
zip_info.filename = os_file zip_info.filename = os_file
zip_file.extract(zip_info, self.service_path) zip_file.extract(zip_info, self.service_path)
if os_file.endswith('osj') or os_file.endswith('osd'): if os_file.endswith('osj') or os_file.endswith('osd'):
@ -774,18 +775,18 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
critical_error_message_box(message=translate('OpenLP.ServiceManager', 'File is not a valid service.')) critical_error_message_box(message=translate('OpenLP.ServiceManager', 'File is not a valid service.'))
self.log_error('File contains no service data') self.log_error('File contains no service data')
except (IOError, NameError, zipfile.BadZipfile): except (IOError, NameError, zipfile.BadZipfile):
self.log_exception('Problem loading service file %s' % file_name) self.log_exception('Problem loading service file {name}'.format(name=file_name))
critical_error_message_box(message=translate('OpenLP.ServiceManager', 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: except zipfile.BadZipfile:
if os.path.getsize(file_name) == 0: if os.path.getsize(file_name) == 0:
self.log_exception('Service file is zero sized: %s' % file_name) self.log_exception('Service file is zero sized: {name}'.format(name=file_name))
QtWidgets.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Empty File'), QtWidgets.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Empty File'),
translate('OpenLP.ServiceManager', translate('OpenLP.ServiceManager',
'This service file does not contain ' 'This service file does not contain '
'any data.')) 'any data.'))
else: else:
self.log_exception('Service file is cannot be extracted as zip: %s' % file_name) self.log_exception('Service file is cannot be extracted as zip: {name}'.format(name=file_name))
QtWidgets.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Corrupt File'), QtWidgets.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Corrupt File'),
translate('OpenLP.ServiceManager', translate('OpenLP.ServiceManager',
'This file is either corrupt or it is not an OpenLP 2 ' 'This file is either corrupt or it is not an OpenLP 2 '
@ -874,7 +875,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
self.auto_play_slides_loop.setChecked(service_item['service_item'].auto_play_slides_loop) self.auto_play_slides_loop.setChecked(service_item['service_item'].auto_play_slides_loop)
self.timed_slide_interval.setChecked(service_item['service_item'].timed_slide_interval > 0) self.timed_slide_interval.setChecked(service_item['service_item'].timed_slide_interval > 0)
if service_item['service_item'].timed_slide_interval > 0: if service_item['service_item'].timed_slide_interval > 0:
delay_suffix = ' %s s' % str(service_item['service_item'].timed_slide_interval) delay_suffix = ' {text} s'.format(text=str(service_item['service_item'].timed_slide_interval))
else: else:
delay_suffix = ' ...' delay_suffix = ' ...'
self.timed_slide_interval.setText( self.timed_slide_interval.setText(
@ -1268,14 +1269,17 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
tree_widget_item.setText(0, service_item_from_item.get_display_title()) tree_widget_item.setText(0, service_item_from_item.get_display_title())
tips = [] tips = []
if service_item_from_item.temporary_edit: if service_item_from_item.temporary_edit:
tips.append('<strong>%s:</strong> <em>%s</em>' % (translate('OpenLP.ServiceManager', 'Edit'), text1 = translate('OpenLP.ServiceManager', 'Edit')
(translate('OpenLP.ServiceManager', 'Service copy only')))) text2 = translate('OpenLP.ServiceManager', 'Service copy only')
tips.append('<strong>{text1}:</strong> <em>{text2}</em>'.format(text1=text1, text2=text2))
if service_item_from_item.theme and service_item_from_item.theme != -1: if service_item_from_item.theme and service_item_from_item.theme != -1:
tips.append('<strong>%s:</strong> <em>%s</em>' % text = translate('OpenLP.ServiceManager', 'Slide theme')
(translate('OpenLP.ServiceManager', 'Slide theme'), service_item_from_item.theme)) tips.append('<strong>{text1}:</strong> <em>{text2}</em>'.format(text1=text,
text2=service_item_from_item.theme))
if service_item_from_item.notes: if service_item_from_item.notes:
tips.append('<strong>%s: </strong> %s' % text1 = translate('OpenLP.ServiceManager', 'Notes')
(translate('OpenLP.ServiceManager', 'Notes'), html.escape(service_item_from_item.notes))) text2 = html.escape(service_item_from_item.notes)
tips.append('<strong>{text1}: </strong> {text2}'.format(text1=text1, text2=text2))
if item['service_item'].is_capable(ItemCapabilities.HasVariableStartTime): if item['service_item'].is_capable(ItemCapabilities.HasVariableStartTime):
tips.append(item['service_item'].get_media_time()) tips.append(item['service_item'].get_media_time())
tree_widget_item.setToolTip(0, '<br>'.join(tips)) tree_widget_item.setToolTip(0, '<br>'.join(tips))
@ -1637,7 +1641,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ServiceMa
replace = True replace = True
else: else:
self.drop_position = get_parent_item_data(item) - 1 self.drop_position = get_parent_item_data(item) - 1
Registry().execute('%s_add_service_item' % plugin, replace) Registry().execute('{plugin}_add_service_item'.format(plugin=plugin), replace)
def update_theme_list(self, theme_list): def update_theme_list(self, theme_list):
""" """

View File

@ -85,7 +85,7 @@ class SettingsForm(QtWidgets.QDialog, Ui_SettingsDialog, RegistryProperties):
:param tab_widget: The widget to add :param tab_widget: The widget to add
:param is_visible: If this tab should be visible :param is_visible: If this tab should be visible
""" """
log.debug('Inserting %s tab' % tab_widget.tab_title) log.debug('Inserting {text} tab'.format(text=tab_widget.tab_title))
# add the tab to get it to display in the correct part of the screen # add the tab to get it to display in the correct part of the screen
self.stacked_layout.addWidget(tab_widget) self.stacked_layout.addWidget(tab_widget)
if is_visible: if is_visible:

View File

@ -425,11 +425,12 @@ class ShortcutListForm(QtWidgets.QDialog, Ui_ShortcutListDialog, RegistryPropert
if changing_action.shortcutContext() in [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]: if changing_action.shortcutContext() in [QtCore.Qt.WindowShortcut, QtCore.Qt.ApplicationShortcut]:
is_valid = False is_valid = False
if not is_valid: if not is_valid:
text = translate('OpenLP.ShortcutListDialog',
'The shortcut "{key}" is already assigned to another action, please'
' use a different shortcut.'
).format(key=self.get_shortcut_string(key_sequence))
self.main_window.warning_message(translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'), self.main_window.warning_message(translate('OpenLP.ShortcutListDialog', 'Duplicate Shortcut'),
translate('OpenLP.ShortcutListDialog', text, for_display=True)
'The shortcut "%s" is already assigned to another action, please'
' use a different shortcut.') %
self.get_shortcut_string(key_sequence, for_display=True))
self.dialog_was_shown = True self.dialog_was_shown = True
return is_valid return is_valid

View File

@ -98,7 +98,7 @@ class DisplayController(QtWidgets.QWidget):
""" """
sender = self.sender().objectName() if self.sender().objectName() else self.sender().text() sender = self.sender().objectName() if self.sender().objectName() else self.sender().text()
controller = self controller = self
Registry().execute('%s' % sender, [controller, args]) Registry().execute('{text}'.format(text=sender), [controller, args])
class InfoLabel(QtWidgets.QLabel): class InfoLabel(QtWidgets.QLabel):
@ -395,7 +395,7 @@ class SlideController(DisplayController, RegistryProperties):
{'key': 'O', 'configurable': True, 'text': translate('OpenLP.SlideController', 'Go to "Other"')} {'key': 'O', 'configurable': True, 'text': translate('OpenLP.SlideController', 'Go to "Other"')}
] ]
shortcuts.extend([{'key': str(number)} for number in range(10)]) shortcuts.extend([{'key': str(number)} for number in range(10)])
self.controller.addActions([create_action(self, 'shortcutAction_%s' % s['key'], self.controller.addActions([create_action(self, 'shortcutAction_{key}'.format(key=s['key']),
text=s.get('text'), text=s.get('text'),
can_shortcuts=True, can_shortcuts=True,
context=QtCore.Qt.WidgetWithChildrenShortcut, context=QtCore.Qt.WidgetWithChildrenShortcut,
@ -417,14 +417,20 @@ class SlideController(DisplayController, RegistryProperties):
self.preview_widget.doubleClicked.connect(self.on_preview_double_click) self.preview_widget.doubleClicked.connect(self.on_preview_double_click)
self.toolbar.set_widget_visible(['editSong'], False) self.toolbar.set_widget_visible(['editSong'], False)
self.controller.addActions([self.next_item, self.previous_item]) self.controller.addActions([self.next_item, self.previous_item])
Registry().register_function('slidecontroller_%s_stop_loop' % self.type_prefix, self.on_stop_loop) Registry().register_function('slidecontroller_{text}_stop_loop'.format(text=self.type_prefix),
Registry().register_function('slidecontroller_%s_change' % self.type_prefix, self.on_slide_change) self.on_stop_loop)
Registry().register_function('slidecontroller_%s_blank' % self.type_prefix, self.on_slide_blank) Registry().register_function('slidecontroller_{text}_change'.format(text=self.type_prefix),
Registry().register_function('slidecontroller_%s_unblank' % self.type_prefix, self.on_slide_unblank) self.on_slide_change)
Registry().register_function('slidecontroller_{text}_blank'.format(text=self.type_prefix),
self.on_slide_blank)
Registry().register_function('slidecontroller_{text}_unblank'.format(text=self.type_prefix),
self.on_slide_unblank)
Registry().register_function('slidecontroller_update_slide_limits', self.update_slide_limits) Registry().register_function('slidecontroller_update_slide_limits', self.update_slide_limits)
getattr(self, 'slidecontroller_%s_set' % self.type_prefix).connect(self.on_slide_selected_index) getattr(self, 'slidecontroller_{text}_set'.format(text=self.type_prefix)).connect(self.on_slide_selected_index)
getattr(self, 'slidecontroller_%s_next' % self.type_prefix).connect(self.on_slide_selected_next) getattr(self, 'slidecontroller_{text}_next'.format(text=self.type_prefix)).connect(self.on_slide_selected_next)
getattr(self, 'slidecontroller_%s_previous' % self.type_prefix).connect(self.on_slide_selected_previous) # NOTE: {t} used to keep line length < maxline
getattr(self,
'slidecontroller_{t}_previous'.format(t=self.type_prefix)).connect(self.on_slide_selected_previous)
def _slide_shortcut_activated(self): def _slide_shortcut_activated(self):
""" """
@ -841,7 +847,8 @@ class SlideController(DisplayController, RegistryProperties):
self.service_item = copy.copy(service_item) self.service_item = copy.copy(service_item)
if self.service_item.is_command(): if self.service_item.is_command():
Registry().execute( Registry().execute(
'%s_start' % service_item.name.lower(), [self.service_item, self.is_live, self.hide_mode(), slide_no]) '{text}_start'.format(text=service_item.name.lower()),
[self.service_item, self.is_live, self.hide_mode(), slide_no])
# Reset blanking if needed # Reset blanking if needed
if old_item and self.is_live and (old_item.is_capable(ItemCapabilities.ProvidesOwnDisplay) or if old_item and self.is_live and (old_item.is_capable(ItemCapabilities.ProvidesOwnDisplay) or
self.service_item.is_capable(ItemCapabilities.ProvidesOwnDisplay)): self.service_item.is_capable(ItemCapabilities.ProvidesOwnDisplay)):
@ -879,8 +886,8 @@ class SlideController(DisplayController, RegistryProperties):
if frame['verseTag']: if frame['verseTag']:
# These tags are already translated. # These tags are already translated.
verse_def = frame['verseTag'] verse_def = frame['verseTag']
verse_def = '%s%s' % (verse_def[0], verse_def[1:]) verse_def = '{def1}{def2}'.format(def1=verse_def[0], def2=verse_def[1:])
two_line_def = '%s\n%s' % (verse_def[0], verse_def[1:]) two_line_def = '{def1}\n{def2}'.format(def1=verse_def[0], def2=verse_def[1:])
row = two_line_def row = two_line_def
if verse_def not in self.slide_list: if verse_def not in self.slide_list:
self.slide_list[verse_def] = frame_number self.slide_list[verse_def] = frame_number
@ -915,10 +922,10 @@ class SlideController(DisplayController, RegistryProperties):
# close the previous, so make sure we don't close the new one. # close the previous, so make sure we don't close the new one.
if old_item.is_command() and not self.service_item.is_command() or \ if old_item.is_command() and not self.service_item.is_command() or \
old_item.is_command() and not old_item.is_media() and self.service_item.is_media(): old_item.is_command() and not old_item.is_media() and self.service_item.is_media():
Registry().execute('%s_stop' % old_item.name.lower(), [old_item, self.is_live]) Registry().execute('{name}_stop'.format(name=old_item.name.lower()), [old_item, self.is_live])
if old_item.is_media() and not self.service_item.is_media(): if old_item.is_media() and not self.service_item.is_media():
self.on_media_close() self.on_media_close()
Registry().execute('slidecontroller_%s_started' % self.type_prefix, [self.service_item]) Registry().execute('slidecontroller_{item}_started'.format(item=self.type_prefix), [self.service_item])
def on_slide_selected_index(self, message): def on_slide_selected_index(self, message):
""" """
@ -930,7 +937,8 @@ class SlideController(DisplayController, RegistryProperties):
if not self.service_item: if not self.service_item:
return return
if self.service_item.is_command(): if self.service_item.is_command():
Registry().execute('%s_slide' % self.service_item.name.lower(), [self.service_item, self.is_live, index]) Registry().execute('{name}_slide'.format(name=self.service_item.name.lower()),
[self.service_item, self.is_live, index])
self.update_preview() self.update_preview()
self.selected_row = index self.selected_row = index
else: else:
@ -975,7 +983,7 @@ class SlideController(DisplayController, RegistryProperties):
""" """
if checked is None: if checked is None:
checked = self.blank_screen.isChecked() checked = self.blank_screen.isChecked()
self.log_debug('on_blank_display %s' % checked) self.log_debug('on_blank_display {text}'.format(text=checked))
self.hide_menu.setDefaultAction(self.blank_screen) self.hide_menu.setDefaultAction(self.blank_screen)
self.blank_screen.setChecked(checked) self.blank_screen.setChecked(checked)
self.theme_screen.setChecked(False) self.theme_screen.setChecked(False)
@ -996,7 +1004,7 @@ class SlideController(DisplayController, RegistryProperties):
""" """
if checked is None: if checked is None:
checked = self.theme_screen.isChecked() checked = self.theme_screen.isChecked()
self.log_debug('on_theme_display %s' % checked) self.log_debug('on_theme_display {text}'.format(text=checked))
self.hide_menu.setDefaultAction(self.theme_screen) self.hide_menu.setDefaultAction(self.theme_screen)
self.blank_screen.setChecked(False) self.blank_screen.setChecked(False)
self.theme_screen.setChecked(checked) self.theme_screen.setChecked(checked)
@ -1017,7 +1025,7 @@ class SlideController(DisplayController, RegistryProperties):
""" """
if checked is None: if checked is None:
checked = self.desktop_screen.isChecked() checked = self.desktop_screen.isChecked()
self.log_debug('on_hide_display %s' % checked) self.log_debug('on_hide_display {text}'.format(text=checked))
self.hide_menu.setDefaultAction(self.desktop_screen) self.hide_menu.setDefaultAction(self.desktop_screen)
self.blank_screen.setChecked(False) self.blank_screen.setChecked(False)
self.theme_screen.setChecked(False) self.theme_screen.setChecked(False)
@ -1035,17 +1043,18 @@ class SlideController(DisplayController, RegistryProperties):
Blank/Hide the display screen within a plugin if required. Blank/Hide the display screen within a plugin if required.
""" """
hide_mode = self.hide_mode() hide_mode = self.hide_mode()
self.log_debug('blank_plugin %s ' % hide_mode) self.log_debug('blank_plugin {text}'.format(text=hide_mode))
if self.service_item is not None: if self.service_item is not None:
if hide_mode: if hide_mode:
if not self.service_item.is_command(): if not self.service_item.is_command():
Registry().execute('live_display_hide', hide_mode) Registry().execute('live_display_hide', hide_mode)
Registry().execute('%s_blank' % Registry().execute('{text}_blank'.format(text=self.service_item.name.lower()),
self.service_item.name.lower(), [self.service_item, self.is_live, hide_mode]) [self.service_item, self.is_live, hide_mode])
else: else:
if not self.service_item.is_command(): if not self.service_item.is_command():
Registry().execute('live_display_show') Registry().execute('live_display_show')
Registry().execute('%s_unblank' % self.service_item.name.lower(), [self.service_item, self.is_live]) Registry().execute('{text}_unblank'.format(text=self.service_item.name.lower()),
[self.service_item, self.is_live])
else: else:
if hide_mode: if hide_mode:
Registry().execute('live_display_hide', hide_mode) Registry().execute('live_display_hide', hide_mode)
@ -1056,15 +1065,17 @@ class SlideController(DisplayController, RegistryProperties):
""" """
Tell the plugin to hide the display screen. Tell the plugin to hide the display screen.
""" """
self.log_debug('hide_plugin %s ' % hide) self.log_debug('hide_plugin {text}'.format(text=hide))
if self.service_item is not None: if self.service_item is not None:
if hide: if hide:
Registry().execute('live_display_hide', HideMode.Screen) Registry().execute('live_display_hide', HideMode.Screen)
Registry().execute('%s_hide' % self.service_item.name.lower(), [self.service_item, self.is_live]) Registry().execute('{text}_hide'.format(text=self.service_item.name.lower()),
[self.service_item, self.is_live])
else: else:
if not self.service_item.is_command(): if not self.service_item.is_command():
Registry().execute('live_display_show') Registry().execute('live_display_show')
Registry().execute('%s_unblank' % self.service_item.name.lower(), [self.service_item, self.is_live]) Registry().execute('{text}_unblank'.format(text=self.service_item.name.lower()),
[self.service_item, self.is_live])
else: else:
if hide: if hide:
Registry().execute('live_display_hide', HideMode.Screen) Registry().execute('live_display_hide', HideMode.Screen)
@ -1099,8 +1110,8 @@ class SlideController(DisplayController, RegistryProperties):
if -1 < row < self.preview_widget.slide_count(): if -1 < row < self.preview_widget.slide_count():
if self.service_item.is_command(): if self.service_item.is_command():
if self.is_live and not start: if self.is_live and not start:
Registry().execute('%s_slide' % Registry().execute('{text}_slide'.format(text=self.service_item.name.lower()),
self.service_item.name.lower(), [self.service_item, self.is_live, row]) [self.service_item, self.is_live, row])
else: else:
to_display = self.service_item.get_rendered_frame(row) to_display = self.service_item.get_rendered_frame(row)
if self.service_item.is_text(): if self.service_item.is_text():
@ -1133,7 +1144,7 @@ class SlideController(DisplayController, RegistryProperties):
""" """
This updates the preview frame, for example after changing a slide or using *Blank to Theme*. This updates the preview frame, for example after changing a slide or using *Blank to Theme*.
""" """
self.log_debug('update_preview %s ' % self.screens.current['primary']) self.log_debug('update_preview {text} '.format(text=self.screens.current['primary']))
if self.service_item and self.service_item.is_capable(ItemCapabilities.ProvidesOwnDisplay): if self.service_item and self.service_item.is_capable(ItemCapabilities.ProvidesOwnDisplay):
if self.is_live: if self.is_live:
# If live, grab screen-cap of main display now # If live, grab screen-cap of main display now
@ -1185,7 +1196,8 @@ class SlideController(DisplayController, RegistryProperties):
if not self.service_item: if not self.service_item:
return return
if self.service_item.is_command(): if self.service_item.is_command():
Registry().execute('%s_next' % self.service_item.name.lower(), [self.service_item, self.is_live]) Registry().execute('{text}_next'.format(text=self.service_item.name.lower()),
[self.service_item, self.is_live])
if self.is_live: if self.is_live:
self.update_preview() self.update_preview()
else: else:
@ -1213,7 +1225,8 @@ class SlideController(DisplayController, RegistryProperties):
if not self.service_item: if not self.service_item:
return return
if self.service_item.is_command(): if self.service_item.is_command():
Registry().execute('%s_previous' % self.service_item.name.lower(), [self.service_item, self.is_live]) Registry().execute('{text}_previous'.format(text=self.service_item.name.lower()),
[self.service_item, self.is_live])
if self.is_live: if self.is_live:
self.update_preview() self.update_preview()
else: else:
@ -1265,7 +1278,7 @@ class SlideController(DisplayController, RegistryProperties):
checked = self.play_slides_loop.isChecked() checked = self.play_slides_loop.isChecked()
else: else:
self.play_slides_loop.setChecked(checked) self.play_slides_loop.setChecked(checked)
self.log_debug('on_play_slides_loop %s' % checked) self.log_debug('on_play_slides_loop {text}'.format(text=checked))
if checked: if checked:
self.play_slides_loop.setIcon(build_icon(':/media/media_stop.png')) self.play_slides_loop.setIcon(build_icon(':/media/media_stop.png'))
self.play_slides_loop.setText(UiStrings().StopPlaySlidesInLoop) self.play_slides_loop.setText(UiStrings().StopPlaySlidesInLoop)
@ -1288,7 +1301,7 @@ class SlideController(DisplayController, RegistryProperties):
checked = self.play_slides_once.isChecked() checked = self.play_slides_once.isChecked()
else: else:
self.play_slides_once.setChecked(checked) self.play_slides_once.setChecked(checked)
self.log_debug('on_play_slides_once %s' % checked) self.log_debug('on_play_slides_once {text}'.format(text=checked))
if checked: if checked:
self.play_slides_once.setIcon(build_icon(':/media/media_stop.png')) self.play_slides_once.setIcon(build_icon(':/media/media_stop.png'))
self.play_slides_once.setText(UiStrings().StopPlaySlidesToEnd) self.play_slides_once.setText(UiStrings().StopPlaySlidesToEnd)
@ -1354,7 +1367,8 @@ class SlideController(DisplayController, RegistryProperties):
# Live and Preview have issues if we have video or presentations # Live and Preview have issues if we have video or presentations
# playing in both at the same time. # playing in both at the same time.
if self.service_item.is_command(): if self.service_item.is_command():
Registry().execute('%s_stop' % self.service_item.name.lower(), [self.service_item, self.is_live]) Registry().execute('{text}_stop'.format(text=self.service_item.name.lower()),
[self.service_item, self.is_live])
if self.service_item.is_media(): if self.service_item.is_media():
self.on_media_close() self.on_media_close()
self.on_go_live() self.on_go_live()

View File

@ -56,9 +56,9 @@ class StartTimeForm(QtWidgets.QDialog, Ui_StartTimeDialog, RegistryProperties):
self.hour_finish_spin_box.setValue(hours) self.hour_finish_spin_box.setValue(hours)
self.minute_finish_spin_box.setValue(minutes) self.minute_finish_spin_box.setValue(minutes)
self.second_finish_spin_box.setValue(seconds) self.second_finish_spin_box.setValue(seconds)
self.hour_finish_label.setText('%s%s' % (str(hour), UiStrings().Hours)) self.hour_finish_label.setText('{val:d}{text}'.format(val=hour, text=UiStrings().Hours))
self.minute_finish_label.setText('%s%s' % (str(minutes), UiStrings().Minutes)) self.minute_finish_label.setText('{val:d}{text}'.format(val=minutes, text=UiStrings().Minutes))
self.second_finish_label.setText('%s%s' % (str(seconds), UiStrings().Seconds)) self.second_finish_label.setText('{val:d}{text}'.format(val=seconds, text=UiStrings().Seconds))
return QtWidgets.QDialog.exec(self) return QtWidgets.QDialog.exec(self)
def accept(self): def accept(self):

View File

@ -263,7 +263,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
""" """
Run the wizard. Run the wizard.
""" """
log.debug('Editing theme %s' % self.theme.theme_name) log.debug('Editing theme {name}'.format(name=self.theme.theme_name))
self.temp_background_filename = '' self.temp_background_filename = ''
self.update_theme_allowed = False self.update_theme_allowed = False
self.set_defaults() self.set_defaults()
@ -272,7 +272,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
self.theme_name_edit.setVisible(not edit) self.theme_name_edit.setVisible(not edit)
self.edit_mode = edit self.edit_mode = edit
if edit: if edit:
self.setWindowTitle(translate('OpenLP.ThemeWizard', 'Edit Theme - %s') % self.theme.theme_name) self.setWindowTitle(translate('OpenLP.ThemeWizard', 'Edit Theme - {name}'
).format(name=self.theme.theme_name))
self.next() self.next()
else: else:
self.setWindowTitle(UiStrings().NewTheme) self.setWindowTitle(UiStrings().NewTheme)
@ -282,7 +283,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
""" """
Set up the pages for Initial run through dialog Set up the pages for Initial run through dialog
""" """
log.debug('initializePage %s' % page_id) log.debug('initializePage {page}'.format(page=page_id))
wizard_page = self.page(page_id) wizard_page = self.page(page_id)
if wizard_page == self.background_page: if wizard_page == self.background_page:
self.set_background_page_values() self.set_background_page_values()
@ -445,7 +446,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
Background Image button pushed. Background Image button pushed.
""" """
images_filter = get_images_filter() images_filter = get_images_filter()
images_filter = '%s;;%s (*.*)' % (images_filter, UiStrings().AllFiles) images_filter = '{name};;{text} (*.*)'.format(name=images_filter, text=UiStrings().AllFiles)
filename, filter_used = QtWidgets.QFileDialog.getOpenFileName( filename, filter_used = QtWidgets.QFileDialog.getOpenFileName(
self, translate('OpenLP.ThemeWizard', 'Select Image'), self, translate('OpenLP.ThemeWizard', 'Select Image'),
self.image_file_edit.text(), images_filter) self.image_file_edit.text(), images_filter)
@ -463,6 +464,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
""" """
Background video button pushed. Background video button pushed.
""" """
# TODO: Check this before converting
visible_formats = '(%s)' % '; '.join(VIDEO_EXT) visible_formats = '(%s)' % '; '.join(VIDEO_EXT)
actual_formats = '(%s)' % ' '.join(VIDEO_EXT) actual_formats = '(%s)' % ' '.join(VIDEO_EXT)
video_filter = '{trans} {visible} {actual}'.format(trans=translate('OpenLP', 'Video Files'), video_filter = '{trans} {visible} {actual}'.format(trans=translate('OpenLP', 'Video Files'),

View File

@ -203,7 +203,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
Change the global theme when it is changed through the Themes settings tab Change the global theme when it is changed through the Themes settings tab
""" """
self.global_theme = Settings().value(self.settings_section + '/global theme') self.global_theme = Settings().value(self.settings_section + '/global theme')
self.log_debug('change_global_from_tab %s' % self.global_theme) self.log_debug('change_global_from_tab {text}'.format(text=self.global_theme))
for count in range(0, self.theme_list_widget.count()): for count in range(0, self.theme_list_widget.count()):
# reset the old name # reset the old name
item = self.theme_list_widget.item(count) item = self.theme_list_widget.item(count)
@ -213,7 +213,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
self.theme_list_widget.item(count).setText(new_name) self.theme_list_widget.item(count).setText(new_name)
# Set the new name # Set the new name
if self.global_theme == new_name: if self.global_theme == new_name:
name = translate('OpenLP.ThemeManager', '%s (default)') % new_name name = translate('OpenLP.ThemeManager', '{text} (default)').format(text=new_name)
self.theme_list_widget.item(count).setText(name) self.theme_list_widget.item(count).setText(name)
self.delete_toolbar_action.setVisible(item not in self.theme_list_widget.selectedItems()) self.delete_toolbar_action.setVisible(item not in self.theme_list_widget.selectedItems())
@ -233,7 +233,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
# Set the new name # Set the new name
if count == selected_row: if count == selected_row:
self.global_theme = self.theme_list_widget.item(count).text() self.global_theme = self.theme_list_widget.item(count).text()
name = translate('OpenLP.ThemeManager', '%s (default)') % self.global_theme name = translate('OpenLP.ThemeManager', '{text} (default)').format(text=self.global_theme)
self.theme_list_widget.item(count).setText(name) self.theme_list_widget.item(count).setText(name)
Settings().setValue(self.settings_section + '/global theme', self.global_theme) Settings().setValue(self.settings_section + '/global theme', self.global_theme)
Registry().execute('theme_update_global') Registry().execute('theme_update_global')
@ -256,6 +256,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
Renames an existing theme to a new name Renames an existing theme to a new name
:param field: :param field:
""" """
# TODO: Check for delayed format() conversions
if self._validate_theme_action(translate('OpenLP.ThemeManager', 'You must select a theme to rename.'), if self._validate_theme_action(translate('OpenLP.ThemeManager', 'You must select a theme to rename.'),
translate('OpenLP.ThemeManager', 'Rename Confirmation'), translate('OpenLP.ThemeManager', 'Rename Confirmation'),
translate('OpenLP.ThemeManager', 'Rename %s theme?'), False, False): translate('OpenLP.ThemeManager', 'Rename %s theme?'), False, False):
@ -284,7 +285,8 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
item = self.theme_list_widget.currentItem() item = self.theme_list_widget.currentItem()
old_theme_name = item.data(QtCore.Qt.UserRole) old_theme_name = item.data(QtCore.Qt.UserRole)
self.file_rename_form.file_name_edit.setText(translate('OpenLP.ThemeManager', self.file_rename_form.file_name_edit.setText(translate('OpenLP.ThemeManager',
'Copy of %s', 'Copy of <theme name>') % old_theme_name) 'Copy of {name}',
'Copy of <theme name>').format(name=old_theme_name))
if self.file_rename_form.exec(True): if self.file_rename_form.exec(True):
new_theme_name = self.file_rename_form.file_name_edit.text() new_theme_name = self.file_rename_form.file_name_edit.text()
if self.check_if_theme_exists(new_theme_name): if self.check_if_theme_exists(new_theme_name):
@ -331,6 +333,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
Delete a theme triggered by the UI. Delete a theme triggered by the UI.
:param field: :param field:
""" """
# TODO: Verify delayed format() conversions
if self._validate_theme_action(translate('OpenLP.ThemeManager', 'You must select a theme to delete.'), if self._validate_theme_action(translate('OpenLP.ThemeManager', 'You must select a theme to delete.'),
translate('OpenLP.ThemeManager', 'Delete Confirmation'), translate('OpenLP.ThemeManager', 'Delete Confirmation'),
translate('OpenLP.ThemeManager', 'Delete %s theme?')): translate('OpenLP.ThemeManager', 'Delete %s theme?')):
@ -351,7 +354,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
:param theme: The theme to delete. :param theme: The theme to delete.
""" """
self.theme_list.remove(theme) self.theme_list.remove(theme)
thumb = '%s.png' % theme thumb = '{name}.png'.format(name=theme)
delete_file(os.path.join(self.path, thumb)) delete_file(os.path.join(self.path, thumb))
delete_file(os.path.join(self.thumb_path, thumb)) delete_file(os.path.join(self.thumb_path, thumb))
try: try:
@ -363,7 +366,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
shutil.rmtree(os.path.join(self.path, theme).encode(encoding)) shutil.rmtree(os.path.join(self.path, theme).encode(encoding))
except OSError as os_error: except OSError as os_error:
shutil.Error = os_error shutil.Error = os_error
self.log_exception('Error deleting theme %s' % theme) self.log_exception('Error deleting theme {name}'.format(name=theme))
def on_export_theme(self, field=None): def on_export_theme(self, field=None):
""" """
@ -376,7 +379,8 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
return return
theme = item.data(QtCore.Qt.UserRole) theme = item.data(QtCore.Qt.UserRole)
path = QtWidgets.QFileDialog.getExistingDirectory(self, path = QtWidgets.QFileDialog.getExistingDirectory(self,
translate('OpenLP.ThemeManager', 'Save Theme - (%s)') % theme, translate('OpenLP.ThemeManager',
'Save Theme - ({name})').format(name=theme),
Settings().value(self.settings_section + Settings().value(self.settings_section +
'/last directory export')) '/last directory export'))
self.application.set_busy_cursor() self.application.set_busy_cursor()
@ -409,7 +413,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
self.log_exception('Export Theme Failed') self.log_exception('Export Theme Failed')
critical_error_message_box(translate('OpenLP.ThemeManager', 'Theme Export Failed'), critical_error_message_box(translate('OpenLP.ThemeManager', 'Theme Export Failed'),
translate('OpenLP.ThemeManager', 'The theme export failed because this error ' translate('OpenLP.ThemeManager', 'The theme export failed because this error '
'occurred: %s') % ose.strerror) 'occurred: {err}').format(err=ose.strerror))
if theme_zip: if theme_zip:
theme_zip.close() theme_zip.close()
shutil.rmtree(theme_path, True) shutil.rmtree(theme_path, True)
@ -425,7 +429,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
translate('OpenLP.ThemeManager', 'Select Theme Import File'), translate('OpenLP.ThemeManager', 'Select Theme Import File'),
Settings().value(self.settings_section + '/last directory import'), Settings().value(self.settings_section + '/last directory import'),
translate('OpenLP.ThemeManager', 'OpenLP Themes (*.otz)')) translate('OpenLP.ThemeManager', 'OpenLP Themes (*.otz)'))
self.log_info('New Themes %s' % str(files)) self.log_info('New Themes {name}'.format(name=str(files)))
if not files: if not files:
return return
self.application.set_busy_cursor() self.application.set_busy_cursor()
@ -472,10 +476,10 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
if os.path.exists(theme): if os.path.exists(theme):
text_name = os.path.splitext(name)[0] text_name = os.path.splitext(name)[0]
if text_name == self.global_theme: if text_name == self.global_theme:
name = translate('OpenLP.ThemeManager', '%s (default)') % text_name name = translate('OpenLP.ThemeManager', '{name} (default)').format(name=text_name)
else: else:
name = text_name name = text_name
thumb = os.path.join(self.thumb_path, '%s.png' % text_name) thumb = os.path.join(self.thumb_path, '{name}.png'.format(name=text_name))
item_name = QtWidgets.QListWidgetItem(name) item_name = QtWidgets.QListWidgetItem(name)
if validate_thumb(theme, thumb): if validate_thumb(theme, thumb):
icon = build_icon(thumb) icon = build_icon(thumb)
@ -506,7 +510,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
:param theme_name: Name of the theme to load from file :param theme_name: Name of the theme to load from file
:return: The theme object. :return: The theme object.
""" """
self.log_debug('get theme data for theme %s' % theme_name) self.log_debug('get theme data for theme {name}'.format(name=theme_name))
xml_file = os.path.join(self.path, str(theme_name), str(theme_name) + '.xml') xml_file = os.path.join(self.path, str(theme_name), str(theme_name) + '.xml')
xml = get_text_file_string(xml_file) xml = get_text_file_string(xml_file)
if not xml: if not xml:
@ -524,8 +528,8 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
""" """
ret = QtWidgets.QMessageBox.question(self, translate('OpenLP.ThemeManager', 'Theme Already Exists'), ret = QtWidgets.QMessageBox.question(self, translate('OpenLP.ThemeManager', 'Theme Already Exists'),
translate('OpenLP.ThemeManager', translate('OpenLP.ThemeManager',
'Theme %s already exists. Do you want to replace it?') 'Theme {name} already exists. '
.replace('%s', theme_name), 'Do you want to replace it?').format(name=theme_name),
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes |
QtWidgets.QMessageBox.No), QtWidgets.QMessageBox.No),
QtWidgets.QMessageBox.No) QtWidgets.QMessageBox.No)
@ -538,7 +542,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
:param file_name: :param file_name:
:param directory: :param directory:
""" """
self.log_debug('Unzipping theme %s' % file_name) self.log_debug('Unzipping theme {name}'.format(name=file_name))
theme_zip = None theme_zip = None
out_file = None out_file = None
file_xml = None file_xml = None
@ -547,7 +551,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
theme_zip = zipfile.ZipFile(file_name) theme_zip = zipfile.ZipFile(file_name)
xml_file = [name for name in theme_zip.namelist() if os.path.splitext(name)[1].lower() == '.xml'] xml_file = [name for name in theme_zip.namelist() if os.path.splitext(name)[1].lower() == '.xml']
if len(xml_file) != 1: if len(xml_file) != 1:
self.log_error('Theme contains "%s" XML files' % len(xml_file)) self.log_error('Theme contains "{val:d}" XML files'.format(val=len(xml_file)))
raise ValidationError raise ValidationError
xml_tree = ElementTree(element=XML(theme_zip.read(xml_file[0]))).getroot() xml_tree = ElementTree(element=XML(theme_zip.read(xml_file[0]))).getroot()
theme_version = xml_tree.get('version', default=None) theme_version = xml_tree.get('version', default=None)
@ -579,7 +583,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
out_file.write(theme_zip.read(name)) out_file.write(theme_zip.read(name))
out_file.close() out_file.close()
except (IOError, zipfile.BadZipfile): except (IOError, zipfile.BadZipfile):
self.log_exception('Importing theme from zip failed %s' % file_name) self.log_exception('Importing theme from zip failed {name|'.format(name=file_name))
raise ValidationError raise ValidationError
except ValidationError: except ValidationError:
critical_error_message_box(translate('OpenLP.ThemeManager', 'Validation Error'), critical_error_message_box(translate('OpenLP.ThemeManager', 'Validation Error'),
@ -601,7 +605,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
critical_error_message_box( critical_error_message_box(
translate('OpenLP.ThemeManager', 'Validation Error'), translate('OpenLP.ThemeManager', 'Validation Error'),
translate('OpenLP.ThemeManager', 'File is not a valid theme.')) translate('OpenLP.ThemeManager', 'File is not a valid theme.'))
self.log_error('Theme file does not contain XML data %s' % file_name) self.log_error('Theme file does not contain XML data {name}'.format(name=file_name))
def check_if_theme_exists(self, theme_name): def check_if_theme_exists(self, theme_name):
""" """
@ -682,7 +686,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
if os.path.exists(sample_path_name): if os.path.exists(sample_path_name):
os.unlink(sample_path_name) os.unlink(sample_path_name)
frame.save(sample_path_name, 'png') frame.save(sample_path_name, 'png')
thumb = os.path.join(self.thumb_path, '%s.png' % name) thumb = os.path.join(self.thumb_path, '{name}.png'.format(name=name))
create_thumb(sample_path_name, thumb, False) create_thumb(sample_path_name, thumb, False)
def update_preview_images(self): def update_preview_images(self):
@ -760,14 +764,17 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage
for plugin in self.plugin_manager.plugins: for plugin in self.plugin_manager.plugins:
used_count = plugin.uses_theme(theme) used_count = plugin.uses_theme(theme)
if used_count: if used_count:
plugin_usage = "%s%s" % (plugin_usage, (translate('OpenLP.ThemeManager', plugin_usage = "{plug}{text}".format(plug=plugin_usage,
'%(count)s time(s) by %(plugin)s') % text=(translate('OpenLP.ThemeManager',
{'count': used_count, 'plugin': plugin.name})) '{count} time(s) by {plugin}'
).format(name=used_count,
plugin=plugin.name)))
plugin_usage = "%s\n" % plugin_usage plugin_usage = "%s\n" % plugin_usage
if plugin_usage: if plugin_usage:
critical_error_message_box(translate('OpenLP.ThemeManager', 'Unable to delete theme'), critical_error_message_box(translate('OpenLP.ThemeManager', 'Unable to delete theme'),
translate('OpenLP.ThemeManager', 'Theme is currently used \n\n%s') % translate('OpenLP.ThemeManager',
plugin_usage) 'Theme is currently used \n\n{text}'
).format(text=plugin_usage))
return False return False
return True return True

View File

@ -405,8 +405,8 @@ class Ui_ThemeWizard(object):
Translate the UI on the fly Translate the UI on the fly
""" """
theme_wizard.setWindowTitle(translate('OpenLP.ThemeWizard', 'Theme Wizard')) theme_wizard.setWindowTitle(translate('OpenLP.ThemeWizard', 'Theme Wizard'))
self.title_label.setText('<span style="font-size:14pt; font-weight:600;">%s</span>' % text = translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard')
translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard')) self.title_label.setText('<span style="font-size:14pt; font-weight:600;">{text}</span>'.format(text=text))
self.information_label.setText( self.information_label.setText(
translate('OpenLP.ThemeWizard', 'This wizard will help you to create and edit your themes. Click the next ' 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.')) 'button below to start the process by setting up your background.'))
@ -435,9 +435,9 @@ class Ui_ThemeWizard(object):
self.gradient_combo_box.setItemText(BackgroundGradientType.LeftBottom, self.gradient_combo_box.setItemText(BackgroundGradientType.LeftBottom,
translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right')) translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right'))
self.image_color_label.setText(translate('OpenLP.ThemeWizard', 'Background color:')) self.image_color_label.setText(translate('OpenLP.ThemeWizard', 'Background color:'))
self.image_label.setText('%s:' % UiStrings().Image) self.image_label.setText('{text}:'.format(text=UiStrings().Image))
self.video_color_label.setText(translate('OpenLP.ThemeWizard', 'Background color:')) self.video_color_label.setText(translate('OpenLP.ThemeWizard', 'Background color:'))
self.video_label.setText('%s:' % UiStrings().Video) self.video_label.setText('{text}:'.format(text=UiStrings().Video))
self.main_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Main Area Font Details')) 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 ' self.main_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display '
'characteristics for the Display text')) 'characteristics for the Display text'))

View File

@ -28,7 +28,7 @@ PREREQUISITE: add_record() and get_all() functions validated.
import os import os
from unittest import TestCase from unittest import TestCase
from openlp.core.lib.projector.db import Manufacturer, Model, Projector, ProjectorDB, ProjectorSource from openlp.core.lib.projector.db import Manufacturer, Model, Projector, ProjectorDB, ProjectorSource, Source
from tests.functional import MagicMock, patch from tests.functional import MagicMock, patch
from tests.resources.projector.data import TEST_DB, TEST1_DATA, TEST2_DATA, TEST3_DATA from tests.resources.projector.data import TEST_DB, TEST1_DATA, TEST2_DATA, TEST3_DATA
@ -220,3 +220,19 @@ class TestProjectorDB(TestCase):
# THEN: __repr__ should return a proper string # THEN: __repr__ should return a proper string
self.assertEqual(str(model), '<Model(name='"OpenLP Test"')>', self.assertEqual(str(model), '<Model(name='"OpenLP Test"')>',
'Model.__repr__() should have returned a proper representation string') 'Model.__repr__() should have returned a proper representation string')
def source_repr_test(self):
"""
Test source.__repr__ text
"""
# GIVEN: Test object
source = Source()
# WHEN: Source() information is set
source.pjlink_name = 'Test object'
source.pjlink_code = '11'
source.text = 'Input text'
# THEN: __repr__ should return a proper string
self.assertEqual(str(source), '<Source(pjlink_name="Test object", pjlink_code="11", text="Input text")>',
'Source.__repr__() should have returned a proper representation string')