- fixed regression in FTW

- fixed bug #1152509 (Current active plugin is not saved)
- removed dead code
- added shortcut (CTRL+F) which jumps to the search field of the current plugin. If the media doc is hidden, it is made visible.

bzr-revno: 2267
Fixes: https://launchpad.net/bugs/1152509
This commit is contained in:
Andreas Preikschat 2013-07-04 08:22:41 +02:00
commit 390725668d
8 changed files with 434 additions and 382 deletions

View File

@ -244,6 +244,7 @@ class Settings(QtCore.QSettings):
u'shortcuts/printServiceItem': [QtGui.QKeySequence(u'Ctrl+P')], u'shortcuts/printServiceItem': [QtGui.QKeySequence(u'Ctrl+P')],
u'shortcuts/songExportItem': [], u'shortcuts/songExportItem': [],
u'shortcuts/songUsageStatus': [QtGui.QKeySequence(QtCore.Qt.Key_F4)], u'shortcuts/songUsageStatus': [QtGui.QKeySequence(QtCore.Qt.Key_F4)],
u'shortcuts/searchShortcut': [QtGui.QKeySequence(u'Ctrl+F')],
u'shortcuts/settingsShortcutsItem': [], u'shortcuts/settingsShortcutsItem': [],
u'shortcuts/settingsImportItem': [], u'shortcuts/settingsImportItem': [],
u'shortcuts/settingsPluginListItem': [QtGui.QKeySequence(u'Alt+F7')], u'shortcuts/settingsPluginListItem': [QtGui.QKeySequence(u'Alt+F7')],

View File

@ -291,7 +291,7 @@ class Ui_AboutDialog(object):
'but WITHOUT ANY WARRANTY; without even the implied warranty of ' 'but WITHOUT ANY WARRANTY; without even the implied warranty of '
'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below ' 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below '
'for more details.') 'for more details.')
gpltext = ('GNU GENERAL PUBLIC LICENSE\n' gpl_text = ('GNU GENERAL PUBLIC LICENSE\n'
'Version 2, June 1991\n' 'Version 2, June 1991\n'
'\n' '\n'
'Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 ' 'Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 '
@ -662,7 +662,7 @@ class Ui_AboutDialog(object):
'linking proprietary applications with the library. If this is ' 'linking proprietary applications with the library. If this is '
'what you want to do, use the GNU Lesser General Public License ' 'what you want to do, use the GNU Lesser General Public License '
'instead of this License.') 'instead of this License.')
self.license_text_edit.setPlainText(u'%s\n\n%s\n\n%s\n\n\n%s' % (copyright_note, licence, disclaimer, gpltext)) self.license_text_edit.setPlainText(u'%s\n\n%s\n\n%s\n\n\n%s' % (copyright_note, licence, disclaimer, gpl_text))
self.about_notebook.setTabText(self.about_notebook.indexOf(self.license_tab), self.about_notebook.setTabText(self.about_notebook.indexOf(self.license_tab),
translate('OpenLP.AboutForm', 'License')) translate('OpenLP.AboutForm', 'License'))
self.volunteer_button.setText(translate('OpenLP.AboutForm', 'Volunteer')) self.volunteer_button.setText(translate('OpenLP.AboutForm', 'Volunteer'))

View File

@ -68,7 +68,7 @@ class ThemeScreenshotThread(QtCore.QThread):
screenshot = config.get(u'theme_%s' % theme, u'screenshot') screenshot = config.get(u'theme_%s' % theme, u'screenshot')
urllib.urlretrieve(u'%s%s' % (self.parent().web, screenshot), urllib.urlretrieve(u'%s%s' % (self.parent().web, screenshot),
os.path.join(unicode(gettempdir(), get_filesystem_encoding()), u'openlp', screenshot)) os.path.join(unicode(gettempdir(), get_filesystem_encoding()), u'openlp', screenshot))
item = QtGui.QListWidgetItem(title, self.parent().themesListWidget) item = QtGui.QListWidgetItem(title, self.parent().themes_list_widget)
item.setData(QtCore.Qt.UserRole, filename) item.setData(QtCore.Qt.UserRole, filename)
item.setCheckState(QtCore.Qt.Unchecked) item.setCheckState(QtCore.Qt.Unchecked)
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
@ -76,8 +76,7 @@ class ThemeScreenshotThread(QtCore.QThread):
class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
""" """
This is the Theme Import Wizard, which allows easy creation and editing of This is the Theme Import Wizard, which allows easy creation and editing of OpenLP themes.
OpenLP themes.
""" """
log.info(u'ThemeWizardForm loaded') log.info(u'ThemeWizardForm loaded')
@ -97,10 +96,11 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
self.config.readfp(io.BytesIO(files)) self.config.readfp(io.BytesIO(files))
self.update_screen_list_combo() self.update_screen_list_combo()
self.was_download_cancelled = False self.was_download_cancelled = False
self.theme_screenshot_thread = None
self.downloading = translate('OpenLP.FirstTimeWizard', 'Downloading %s...') self.downloading = translate('OpenLP.FirstTimeWizard', 'Downloading %s...')
self.cancelButton.clicked.connect(self.onCancelButtonClicked) self.cancel_button.clicked.connect(self.on_cancel_button_clicked)
self.noInternetFinishButton.clicked.connect(self.onNoInternetFinishButtonClicked) self.no_internet_finish_button.clicked.connect(self.on_no_internet_finish_button_clicked)
self.currentIdChanged.connect(self.onCurrentIdChanged) self.currentIdChanged.connect(self.on_current_id_changed)
Registry().register_function(u'config_screen_changed', self.update_screen_list_combo) Registry().register_function(u'config_screen_changed', self.update_screen_list_combo)
def exec_(self): def exec_(self):
@ -116,9 +116,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
""" """
self.restart() self.restart()
check_directory_exists(os.path.join(unicode(gettempdir(), get_filesystem_encoding()), u'openlp')) check_directory_exists(os.path.join(unicode(gettempdir(), get_filesystem_encoding()), u'openlp'))
self.noInternetFinishButton.setVisible(False) self.no_internet_finish_button.setVisible(False)
# Check if this is a re-run of the wizard. # Check if this is a re-run of the wizard.
self.hasRunWizard = Settings().value(u'core/has run wizard') self.has_run_wizard = Settings().value(u'core/has run wizard')
# Sort out internet access for downloads # Sort out internet access for downloads
if self.web_access: if self.web_access:
songs = self.config.get(u'songs', u'languages') songs = self.config.get(u'songs', u'languages')
@ -126,7 +126,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
for song in songs: for song in songs:
title = unicode(self.config.get(u'songs_%s' % song, u'title'), u'utf8') title = unicode(self.config.get(u'songs_%s' % song, u'title'), u'utf8')
filename = unicode(self.config.get(u'songs_%s' % song, u'filename'), u'utf8') filename = unicode(self.config.get(u'songs_%s' % song, u'filename'), u'utf8')
item = QtGui.QListWidgetItem(title, self.songsListWidget) item = QtGui.QListWidgetItem(title, self.songs_list_widget)
item.setData(QtCore.Qt.UserRole, filename) item.setData(QtCore.Qt.UserRole, filename)
item.setCheckState(QtCore.Qt.Unchecked) item.setCheckState(QtCore.Qt.Unchecked)
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
@ -134,7 +134,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
bible_languages = bible_languages.split(u',') bible_languages = bible_languages.split(u',')
for lang in bible_languages: for lang in bible_languages:
language = unicode(self.config.get(u'bibles_%s' % lang, u'title'), u'utf8') language = unicode(self.config.get(u'bibles_%s' % lang, u'title'), u'utf8')
langItem = QtGui.QTreeWidgetItem(self.biblesTreeWidget, [language]) langItem = QtGui.QTreeWidgetItem(self.bibles_tree_widget, [language])
bibles = self.config.get(u'bibles_%s' % lang, u'translations') bibles = self.config.get(u'bibles_%s' % lang, u'translations')
bibles = bibles.split(u',') bibles = bibles.split(u',')
for bible in bibles: for bible in bibles:
@ -144,10 +144,10 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
item.setData(0, QtCore.Qt.UserRole, filename) item.setData(0, QtCore.Qt.UserRole, filename)
item.setCheckState(0, QtCore.Qt.Unchecked) item.setCheckState(0, QtCore.Qt.Unchecked)
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
self.biblesTreeWidget.expandAll() self.bibles_tree_widget.expandAll()
# Download the theme screenshots. # Download the theme screenshots.
self.themeScreenshotThread = ThemeScreenshotThread(self) self.theme_screenshot_thread = ThemeScreenshotThread(self)
self.themeScreenshotThread.start() self.theme_screenshot_thread.start()
self.application.set_normal_cursor() self.application.set_normal_cursor()
def nextId(self): def nextId(self):
@ -166,61 +166,60 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
return FirstTimePage.Progress return FirstTimePage.Progress
elif self.currentId() == FirstTimePage.Themes: elif self.currentId() == FirstTimePage.Themes:
self.application.set_busy_cursor() self.application.set_busy_cursor()
while not self.themeScreenshotThread.isFinished(): while not self.theme_screenshot_thread.isFinished():
time.sleep(0.1) time.sleep(0.1)
self.application.process_events() self.application.process_events()
# Build the screenshot icons, as this can not be done in the thread. # Build the screenshot icons, as this can not be done in the thread.
self._buildThemeScreenshots() self._build_theme_screenshots()
self.application.set_normal_cursor() self.application.set_normal_cursor()
return FirstTimePage.Defaults return FirstTimePage.Defaults
else: else:
return self.currentId() + 1 return self.currentId() + 1
def onCurrentIdChanged(self, pageId): def on_current_id_changed(self, page_id):
""" """
Detects Page changes and updates as appropriate. Detects Page changes and updates as appropriate.
""" """
# Keep track of the page we are at. Triggering "Cancel" causes pageId # Keep track of the page we are at. Triggering "Cancel" causes page_id to be a -1.
# to be a -1.
self.application.process_events() self.application.process_events()
if pageId != -1: if page_id != -1:
self.lastId = pageId self.last_id = page_id
if pageId == FirstTimePage.Plugins: if page_id == FirstTimePage.Plugins:
# Set the no internet page text. # Set the no internet page text.
if self.hasRunWizard: if self.has_run_wizard:
self.noInternetLabel.setText(self.noInternetText) self.no_internet_label.setText(self.no_internet_text)
else: else:
self.noInternetLabel.setText(self.noInternetText + self.cancelWizardText) self.no_internet_label.setText(self.no_internet_text + self.cancelWizardText)
elif pageId == FirstTimePage.Defaults: elif page_id == FirstTimePage.Defaults:
self.themeComboBox.clear() self.theme_combo_box.clear()
for iter in xrange(self.themesListWidget.count()): for iter in xrange(self.themes_list_widget.count()):
item = self.themesListWidget.item(iter) item = self.themes_list_widget.item(iter)
if item.checkState() == QtCore.Qt.Checked: if item.checkState() == QtCore.Qt.Checked:
self.themeComboBox.addItem(item.text()) self.theme_combo_box.addItem(item.text())
if self.hasRunWizard: if self.has_run_wizard:
# Add any existing themes to list. # Add any existing themes to list.
for theme in self.theme_manager.get_themes(): for theme in self.theme_manager.get_themes():
index = self.themeComboBox.findText(theme) index = self.theme_combo_box.findText(theme)
if index == -1: if index == -1:
self.themeComboBox.addItem(theme) self.theme_combo_box.addItem(theme)
default_theme = Settings().value(u'themes/global theme') default_theme = Settings().value(u'themes/global theme')
# Pre-select the current default theme. # Pre-select the current default theme.
index = self.themeComboBox.findText(default_theme) index = self.theme_combo_box.findText(default_theme)
self.themeComboBox.setCurrentIndex(index) self.theme_combo_box.setCurrentIndex(index)
elif pageId == FirstTimePage.NoInternet: elif page_id == FirstTimePage.NoInternet:
self.backButton.setVisible(False) self.back_button.setVisible(False)
self.nextButton.setVisible(False) self.next_button.setVisible(False)
self.noInternetFinishButton.setVisible(True) self.no_internet_finish_button.setVisible(True)
if self.hasRunWizard: if self.has_run_wizard:
self.cancelButton.setVisible(False) self.cancel_button.setVisible(False)
elif pageId == FirstTimePage.Progress: elif page_id == FirstTimePage.Progress:
self.application.set_busy_cursor() self.application.set_busy_cursor()
self.repaint() self.repaint()
self.application.process_events() self.application.process_events()
# Try to give the wizard a chance to redraw itself # Try to give the wizard a chance to redraw itself
time.sleep(0.2) time.sleep(0.2)
self._preWizard() self._pre_wizard()
self._performWizard() self._perform_wizard()
self._post_wizard() self._post_wizard()
self.application.set_normal_cursor() self.application.set_normal_cursor()
@ -229,70 +228,72 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
The user changed screen resolution or enabled/disabled more screens, so The user changed screen resolution or enabled/disabled more screens, so
we need to update the combo box. we need to update the combo box.
""" """
self.displayComboBox.clear() self.display_combo_box.clear()
self.displayComboBox.addItems(self.screens.get_screen_list()) self.display_combo_box.addItems(self.screens.get_screen_list())
self.displayComboBox.setCurrentIndex(self.displayComboBox.count() - 1) self.display_combo_box.setCurrentIndex(self.display_combo_box.count() - 1)
def onCancelButtonClicked(self): def on_cancel_button_clicked(self):
""" """
Process the triggering of the cancel button. Process the triggering of the cancel button.
""" """
if self.lastId == FirstTimePage.NoInternet or (self.lastId <= FirstTimePage.Plugins and not self.hasRunWizard): if self.last_id == FirstTimePage.NoInternet or (self.last_id <= FirstTimePage.Plugins and not self.has_run_wizard):
QtCore.QCoreApplication.exit() QtCore.QCoreApplication.exit()
sys.exit() sys.exit()
self.was_download_cancelled = True self.was_download_cancelled = True
while self.themeScreenshotThread.isRunning(): # Was the thread created.
time.sleep(0.1) if self.theme_screenshot_thread:
while self.theme_screenshot_thread.isRunning():
time.sleep(0.1)
self.application.set_normal_cursor() self.application.set_normal_cursor()
def onNoInternetFinishButtonClicked(self): def on_no_internet_finish_button_clicked(self):
""" """
Process the triggering of the "Finish" button on the No Internet page. Process the triggering of the "Finish" button on the No Internet page.
""" """
self.application.set_busy_cursor() self.application.set_busy_cursor()
self._performWizard() self._perform_wizard()
self.application.set_normal_cursor() self.application.set_normal_cursor()
Settings().setValue(u'core/has run wizard', True) Settings().setValue(u'core/has run wizard', True)
self.close() self.close()
def urlGetFile(self, url, fpath): def url_get_file(self, url, f_path):
"""" """"
Download a file given a URL. The file is retrieved in chunks, giving Download a file given a URL. The file is retrieved in chunks, giving the ability to cancel the download at any
the ability to cancel the download at any point. point.
""" """
block_count = 0 block_count = 0
block_size = 4096 block_size = 4096
urlfile = urllib2.urlopen(url) url_file = urllib2.urlopen(url)
filename = open(fpath, "wb") filename = open(f_path, "wb")
# Download until finished or canceled. # Download until finished or canceled.
while not self.was_download_cancelled: while not self.was_download_cancelled:
data = urlfile.read(block_size) data = url_file.read(block_size)
if not data: if not data:
break break
filename.write(data) filename.write(data)
block_count += 1 block_count += 1
self._downloadProgress(block_count, block_size) self._download_progress(block_count, block_size)
filename.close() filename.close()
# Delete file if cancelled, it may be a partial file. # Delete file if cancelled, it may be a partial file.
if self.was_download_cancelled: if self.was_download_cancelled:
os.remove(fpath) os.remove(f_path)
def _buildThemeScreenshots(self): def _build_theme_screenshots(self):
""" """
This method builds the theme screenshots' icons for all items in the This method builds the theme screenshots' icons for all items in the
``self.themesListWidget``. ``self.themes_list_widget``.
""" """
themes = self.config.get(u'themes', u'files') themes = self.config.get(u'themes', u'files')
themes = themes.split(u',') themes = themes.split(u',')
for theme in themes: for theme in themes:
filename = self.config.get(u'theme_%s' % theme, u'filename') filename = self.config.get(u'theme_%s' % theme, u'filename')
screenshot = self.config.get(u'theme_%s' % theme, u'screenshot') screenshot = self.config.get(u'theme_%s' % theme, u'screenshot')
for index in xrange(self.themesListWidget.count()): for index in xrange(self.themes_list_widget.count()):
item = self.themesListWidget.item(index) item = self.themes_list_widget.item(index)
if item.data(QtCore.Qt.UserRole) == filename: if item.data(QtCore.Qt.UserRole) == filename:
break break
item.setIcon(build_icon(os.path.join(unicode(gettempdir(), item.setIcon(build_icon(os.path.join(unicode(gettempdir(),
get_filesystem_encoding()), u'openlp', screenshot))) get_filesystem_encoding()), u'openlp', screenshot)))
def _getFileSize(self, url): def _getFileSize(self, url):
""" """
@ -305,15 +306,15 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
meta = site.info() meta = site.info()
return int(meta.getheaders("Content-Length")[0]) return int(meta.getheaders("Content-Length")[0])
def _downloadProgress(self, count, block_size): def _download_progress(self, count, block_size):
""" """
Calculate and display the download progress. Calculate and display the download progress.
""" """
increment = (count * block_size) - self.previous_size increment = (count * block_size) - self.previous_size
self._incrementProgressBar(None, increment) self._increment_progress_bar(None, increment)
self.previous_size = count * block_size self.previous_size = count * block_size
def _incrementProgressBar(self, status_text, increment=1): def _increment_progress_bar(self, status_text, increment=1):
""" """
Update the wizard progress page. Update the wizard progress page.
@ -324,28 +325,28 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
The value to increment the progress bar by. The value to increment the progress bar by.
""" """
if status_text: if status_text:
self.progressLabel.setText(status_text) self.progress_label.setText(status_text)
if increment > 0: if increment > 0:
self.progressBar.setValue(self.progressBar.value() + increment) self.progress_bar.setValue(self.progress_bar.value() + increment)
self.application.process_events() self.application.process_events()
def _preWizard(self): def _pre_wizard(self):
""" """
Prepare the UI for the process. Prepare the UI for the process.
""" """
self.max_progress = 0 self.max_progress = 0
self.finishButton.setVisible(False) self.finish_button.setVisible(False)
self.application.process_events() self.application.process_events()
# Loop through the songs list and increase for each selected item # Loop through the songs list and increase for each selected item
for i in xrange(self.songsListWidget.count()): for i in xrange(self.songs_list_widget.count()):
self.application.process_events() self.application.process_events()
item = self.songsListWidget.item(i) item = self.songs_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked: if item.checkState() == QtCore.Qt.Checked:
filename = item.data(QtCore.Qt.UserRole) filename = item.data(QtCore.Qt.UserRole)
size = self._getFileSize(u'%s%s' % (self.web, filename)) size = self._getFileSize(u'%s%s' % (self.web, 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 = QtGui.QTreeWidgetItemIterator(self.biblesTreeWidget) iterator = QtGui.QTreeWidgetItemIterator(self.bibles_tree_widget)
while iterator.value(): while iterator.value():
self.application.process_events() self.application.process_events()
item = iterator.value() item = iterator.value()
@ -355,9 +356,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
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
for i in xrange(self.themesListWidget.count()): for i in xrange(self.themes_list_widget.count()):
self.application.process_events() self.application.process_events()
item = self.themesListWidget.item(i) item = self.themes_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked: if item.checkState() == QtCore.Qt.Checked:
filename = item.data(QtCore.Qt.UserRole) filename = item.data(QtCore.Qt.UserRole)
size = self._getFileSize(u'%s%s' % (self.web, filename)) size = self._getFileSize(u'%s%s' % (self.web, filename))
@ -365,16 +366,16 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
if self.max_progress: if self.max_progress:
# Add on 2 for plugins status setting plus a "finished" point. # Add on 2 for plugins status setting plus a "finished" point.
self.max_progress += 2 self.max_progress += 2
self.progressBar.setValue(0) self.progress_bar.setValue(0)
self.progressBar.setMinimum(0) self.progress_bar.setMinimum(0)
self.progressBar.setMaximum(self.max_progress) self.progress_bar.setMaximum(self.max_progress)
self.progressPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Setting Up And Downloading')) self.progress_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Setting Up And Downloading'))
self.progressPage.setSubTitle( self.progress_page.setSubTitle(
translate('OpenLP.FirstTimeWizard', 'Please wait while OpenLP is set up and your data is downloaded.')) translate('OpenLP.FirstTimeWizard', 'Please wait while OpenLP is set up and your data is downloaded.'))
else: else:
self.progressBar.setVisible(False) self.progress_bar.setVisible(False)
self.progressPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Setting Up')) self.progress_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Setting Up'))
self.progressPage.setSubTitle(u'Setup complete.') self.progress_page.setSubTitle(u'Setup complete.')
self.repaint() self.repaint()
self.application.process_events() self.application.process_events()
# Try to give the wizard a chance to repaint itself # Try to give the wizard a chance to repaint itself
@ -385,44 +386,44 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
Clean up the UI after the process has finished. Clean up the UI after the process has finished.
""" """
if self.max_progress: if self.max_progress:
self.progressBar.setValue(self.progressBar.maximum()) self.progress_bar.setValue(self.progress_bar.maximum())
if self.hasRunWizard: if self.has_run_wizard:
self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', self.progress_label.setText(translate('OpenLP.FirstTimeWizard',
'Download complete. Click the finish button to return to OpenLP.')) 'Download complete. Click the finish button to return to OpenLP.'))
else: else:
self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', self.progress_label.setText(translate('OpenLP.FirstTimeWizard',
'Download complete. Click the finish button to start OpenLP.')) 'Download complete. Click the finish button to start OpenLP.'))
else: else:
if self.hasRunWizard: if self.has_run_wizard:
self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', self.progress_label.setText(translate('OpenLP.FirstTimeWizard',
'Click the finish button to return to OpenLP.')) 'Click the finish button to return to OpenLP.'))
else: else:
self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', self.progress_label.setText(translate('OpenLP.FirstTimeWizard',
'Click the finish button to start OpenLP.')) 'Click the finish button to start OpenLP.'))
self.finishButton.setVisible(True) self.finish_button.setVisible(True)
self.finishButton.setEnabled(True) self.finish_button.setEnabled(True)
self.cancelButton.setVisible(False) self.cancel_button.setVisible(False)
self.nextButton.setVisible(False) self.next_button.setVisible(False)
self.application.process_events() self.application.process_events()
def _performWizard(self): def _perform_wizard(self):
""" """
Run the tasks in the wizard. Run the tasks in the wizard.
""" """
# Set plugin states # Set plugin states
self._incrementProgressBar(translate('OpenLP.FirstTimeWizard', 'Enabling selected plugins...')) self._increment_progress_bar(translate('OpenLP.FirstTimeWizard', 'Enabling selected plugins...'))
self._setPluginStatus(self.songsCheckBox, u'songs/status') self._set_plugin_status(self.songs_check_box, u'songs/status')
self._setPluginStatus(self.bibleCheckBox, u'bibles/status') self._set_plugin_status(self.bible_check_box, u'bibles/status')
# TODO Presentation plugin is not yet working on Mac OS X. # TODO Presentation plugin is not yet working on Mac OS X.
# For now just ignore it. # For now just ignore it.
if sys.platform != 'darwin': if sys.platform != 'darwin':
self._setPluginStatus(self.presentationCheckBox, u'presentations/status') self._set_plugin_status(self.presentation_check_box, u'presentations/status')
self._setPluginStatus(self.imageCheckBox, u'images/status') self._set_plugin_status(self.image_check_box, u'images/status')
self._setPluginStatus(self.mediaCheckBox, u'media/status') self._set_plugin_status(self.media_check_box, u'media/status')
self._setPluginStatus(self.remoteCheckBox, u'remotes/status') self._set_plugin_status(self.remote_check_box, u'remotes/status')
self._setPluginStatus(self.customCheckBox, u'custom/status') self._set_plugin_status(self.custom_check_box, u'custom/status')
self._setPluginStatus(self.songUsageCheckBox, u'songusage/status') self._set_plugin_status(self.song_usage_check_box, u'songusage/status')
self._setPluginStatus(self.alertCheckBox, u'alerts/status') self._set_plugin_status(self.alert_check_box, u'alerts/status')
if self.web_access: if self.web_access:
# Build directories for downloads # Build directories for downloads
songs_destination = os.path.join( songs_destination = os.path.join(
@ -430,42 +431,42 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
bibles_destination = AppLocation.get_section_data_path(u'bibles') bibles_destination = AppLocation.get_section_data_path(u'bibles')
themes_destination = AppLocation.get_section_data_path(u'themes') themes_destination = AppLocation.get_section_data_path(u'themes')
# Download songs # Download songs
for i in xrange(self.songsListWidget.count()): for i in xrange(self.songs_list_widget.count()):
item = self.songsListWidget.item(i) item = self.songs_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked: if item.checkState() == QtCore.Qt.Checked:
filename = item.data(QtCore.Qt.UserRole) filename = item.data(QtCore.Qt.UserRole)
self._incrementProgressBar(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, unicode(filename)) destination = os.path.join(songs_destination, unicode(filename))
self.urlGetFile(u'%s%s' % (self.web, filename), destination) self.url_get_file(u'%s%s' % (self.web, filename), destination)
# Download Bibles # Download Bibles
bibles_iterator = QtGui.QTreeWidgetItemIterator( bibles_iterator = QtGui.QTreeWidgetItemIterator(
self.biblesTreeWidget) self.bibles_tree_widget)
while bibles_iterator.value(): while bibles_iterator.value():
item = bibles_iterator.value() item = bibles_iterator.value()
if item.parent() and item.checkState(0) == QtCore.Qt.Checked: if item.parent() and item.checkState(0) == QtCore.Qt.Checked:
bible = item.data(0, QtCore.Qt.UserRole) bible = item.data(0, QtCore.Qt.UserRole)
self._incrementProgressBar(self.downloading % bible, 0) self._increment_progress_bar(self.downloading % bible, 0)
self.previous_size = 0 self.previous_size = 0
self.urlGetFile(u'%s%s' % (self.web, bible), os.path.join(bibles_destination, bible)) self.url_get_file(u'%s%s' % (self.web, bible), os.path.join(bibles_destination, bible))
bibles_iterator += 1 bibles_iterator += 1
# Download themes # Download themes
for i in xrange(self.themesListWidget.count()): for i in xrange(self.themes_list_widget.count()):
item = self.themesListWidget.item(i) item = self.themes_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked: if item.checkState() == QtCore.Qt.Checked:
theme = item.data(QtCore.Qt.UserRole) theme = item.data(QtCore.Qt.UserRole)
self._incrementProgressBar(self.downloading % theme, 0) self._increment_progress_bar(self.downloading % theme, 0)
self.previous_size = 0 self.previous_size = 0
self.urlGetFile(u'%s%s' % (self.web, theme), os.path.join(themes_destination, theme)) self.url_get_file(u'%s%s' % (self.web, theme), os.path.join(themes_destination, theme))
# Set Default Display # Set Default Display
if self.displayComboBox.currentIndex() != -1: if self.display_combo_box.currentIndex() != -1:
Settings().setValue(u'core/monitor', self.displayComboBox.currentIndex()) Settings().setValue(u'core/monitor', self.display_combo_box.currentIndex())
self.screens.set_current_display(self.displayComboBox.currentIndex()) self.screens.set_current_display(self.display_combo_box.currentIndex())
# Set Global Theme # Set Global Theme
if self.themeComboBox.currentIndex() != -1: if self.theme_combo_box.currentIndex() != -1:
Settings().setValue(u'themes/global theme', self.themeComboBox.currentText()) Settings().setValue(u'themes/global theme', self.theme_combo_box.currentText())
def _setPluginStatus(self, field, tag): def _set_plugin_status(self, field, tag):
""" """
Set the status of a plugin. Set the status of a plugin.
""" """

View File

@ -55,200 +55,199 @@ class Ui_FirstTimeWizard(object):
""" """
The UI widgets for the first time wizard. The UI widgets for the first time wizard.
""" """
def setupUi(self, FirstTimeWizard): def setupUi(self, first_time_wizard):
""" """
Set up the UI. Set up the UI.
""" """
FirstTimeWizard.setObjectName(u'FirstTimeWizard') first_time_wizard.setObjectName(u'first_time_wizard')
FirstTimeWizard.resize(550, 386) first_time_wizard.resize(550, 386)
FirstTimeWizard.setModal(True) first_time_wizard.setModal(True)
FirstTimeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) first_time_wizard.setWizardStyle(QtGui.QWizard.ModernStyle)
FirstTimeWizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | first_time_wizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage |
QtGui.QWizard.NoBackButtonOnLastPage | QtGui.QWizard.HaveCustomButton1) QtGui.QWizard.NoBackButtonOnLastPage | QtGui.QWizard.HaveCustomButton1)
self.finishButton = self.button(QtGui.QWizard.FinishButton) self.finish_button = self.button(QtGui.QWizard.FinishButton)
self.noInternetFinishButton = self.button(QtGui.QWizard.CustomButton1) self.no_internet_finish_button = self.button(QtGui.QWizard.CustomButton1)
self.cancelButton = self.button(QtGui.QWizard.CancelButton) self.cancel_button = self.button(QtGui.QWizard.CancelButton)
self.nextButton = self.button(QtGui.QWizard.NextButton) self.next_button = self.button(QtGui.QWizard.NextButton)
self.backButton = self.button(QtGui.QWizard.BackButton) self.back_button = self.button(QtGui.QWizard.BackButton)
add_welcome_page(FirstTimeWizard, u':/wizards/wizard_firsttime.bmp') add_welcome_page(first_time_wizard, u':/wizards/wizard_firsttime.bmp')
# The plugins page # The plugins page
self.pluginPage = QtGui.QWizardPage() self.plugin_page = QtGui.QWizardPage()
self.pluginPage.setObjectName(u'pluginPage') self.plugin_page.setObjectName(u'plugin_page')
self.pluginLayout = QtGui.QVBoxLayout(self.pluginPage) self.plugin_layout = QtGui.QVBoxLayout(self.plugin_page)
self.pluginLayout.setContentsMargins(40, 15, 40, 0) self.plugin_layout.setContentsMargins(40, 15, 40, 0)
self.pluginLayout.setObjectName(u'pluginLayout') self.plugin_layout.setObjectName(u'plugin_layout')
self.songsCheckBox = QtGui.QCheckBox(self.pluginPage) self.songs_check_box = QtGui.QCheckBox(self.plugin_page)
self.songsCheckBox.setChecked(True) self.songs_check_box.setChecked(True)
self.songsCheckBox.setObjectName(u'songsCheckBox') self.songs_check_box.setObjectName(u'songs_check_box')
self.pluginLayout.addWidget(self.songsCheckBox) self.plugin_layout.addWidget(self.songs_check_box)
self.customCheckBox = QtGui.QCheckBox(self.pluginPage) self.custom_check_box = QtGui.QCheckBox(self.plugin_page)
self.customCheckBox.setChecked(True) self.custom_check_box.setChecked(True)
self.customCheckBox.setObjectName(u'customCheckBox') self.custom_check_box.setObjectName(u'custom_check_box')
self.pluginLayout.addWidget(self.customCheckBox) self.plugin_layout.addWidget(self.custom_check_box)
self.bibleCheckBox = QtGui.QCheckBox(self.pluginPage) self.bible_check_box = QtGui.QCheckBox(self.plugin_page)
self.bibleCheckBox.setChecked(True) self.bible_check_box.setChecked(True)
self.bibleCheckBox.setObjectName(u'bibleCheckBox') self.bible_check_box.setObjectName(u'bible_check_box')
self.pluginLayout.addWidget(self.bibleCheckBox) self.plugin_layout.addWidget(self.bible_check_box)
self.imageCheckBox = QtGui.QCheckBox(self.pluginPage) self.image_check_box = QtGui.QCheckBox(self.plugin_page)
self.imageCheckBox.setChecked(True) self.image_check_box.setChecked(True)
self.imageCheckBox.setObjectName(u'imageCheckBox') self.image_check_box.setObjectName(u'image_check_box')
self.pluginLayout.addWidget(self.imageCheckBox) self.plugin_layout.addWidget(self.image_check_box)
# TODO Presentation plugin is not yet working on Mac OS X. # TODO Presentation plugin is not yet working on Mac OS X.
# For now just ignore it. # For now just ignore it.
if sys.platform != 'darwin': if sys.platform != 'darwin':
self.presentationCheckBox = QtGui.QCheckBox(self.pluginPage) self.presentation_check_box = QtGui.QCheckBox(self.plugin_page)
self.presentationCheckBox.setChecked(True) self.presentation_check_box.setChecked(True)
self.presentationCheckBox.setObjectName(u'presentationCheckBox') self.presentation_check_box.setObjectName(u'presentation_check_box')
self.pluginLayout.addWidget(self.presentationCheckBox) self.plugin_layout.addWidget(self.presentation_check_box)
self.mediaCheckBox = QtGui.QCheckBox(self.pluginPage) self.media_check_box = QtGui.QCheckBox(self.plugin_page)
self.mediaCheckBox.setChecked(True) self.media_check_box.setChecked(True)
self.mediaCheckBox.setObjectName(u'mediaCheckBox') self.media_check_box.setObjectName(u'media_check_box')
self.pluginLayout.addWidget(self.mediaCheckBox) self.plugin_layout.addWidget(self.media_check_box)
self.remoteCheckBox = QtGui.QCheckBox(self.pluginPage) self.remote_check_box = QtGui.QCheckBox(self.plugin_page)
self.remoteCheckBox.setObjectName(u'remoteCheckBox') self.remote_check_box.setObjectName(u'remote_check_box')
self.pluginLayout.addWidget(self.remoteCheckBox) self.plugin_layout.addWidget(self.remote_check_box)
self.songUsageCheckBox = QtGui.QCheckBox(self.pluginPage) self.song_usage_check_box = QtGui.QCheckBox(self.plugin_page)
self.songUsageCheckBox.setChecked(True) self.song_usage_check_box.setChecked(True)
self.songUsageCheckBox.setObjectName(u'songUsageCheckBox') self.song_usage_check_box.setObjectName(u'song_usage_check_box')
self.pluginLayout.addWidget(self.songUsageCheckBox) self.plugin_layout.addWidget(self.song_usage_check_box)
self.alertCheckBox = QtGui.QCheckBox(self.pluginPage) self.alert_check_box = QtGui.QCheckBox(self.plugin_page)
self.alertCheckBox.setChecked(True) self.alert_check_box.setChecked(True)
self.alertCheckBox.setObjectName(u'alertCheckBox') self.alert_check_box.setObjectName(u'alert_check_box')
self.pluginLayout.addWidget(self.alertCheckBox) self.plugin_layout.addWidget(self.alert_check_box)
FirstTimeWizard.setPage(FirstTimePage.Plugins, self.pluginPage) first_time_wizard.setPage(FirstTimePage.Plugins, self.plugin_page)
# The "you don't have an internet connection" page. # The "you don't have an internet connection" page.
self.noInternetPage = QtGui.QWizardPage() self.no_internet_page = QtGui.QWizardPage()
self.noInternetPage.setObjectName(u'noInternetPage') self.no_internet_page.setObjectName(u'no_internet_page')
self.noInternetLayout = QtGui.QVBoxLayout(self.noInternetPage) self.no_internet_layout = QtGui.QVBoxLayout(self.no_internet_page)
self.noInternetLayout.setContentsMargins(50, 30, 50, 40) self.no_internet_layout.setContentsMargins(50, 30, 50, 40)
self.noInternetLayout.setObjectName(u'noInternetLayout') self.no_internet_layout.setObjectName(u'no_internet_layout')
self.noInternetLabel = QtGui.QLabel(self.noInternetPage) self.no_internet_label = QtGui.QLabel(self.no_internet_page)
self.noInternetLabel.setWordWrap(True) self.no_internet_label.setWordWrap(True)
self.noInternetLabel.setObjectName(u'noInternetLabel') self.no_internet_label.setObjectName(u'no_internet_label')
self.noInternetLayout.addWidget(self.noInternetLabel) self.no_internet_layout.addWidget(self.no_internet_label)
FirstTimeWizard.setPage(FirstTimePage.NoInternet, self.noInternetPage) first_time_wizard.setPage(FirstTimePage.NoInternet, self.no_internet_page)
# The song samples page # The song samples page
self.songsPage = QtGui.QWizardPage() self.songs_page = QtGui.QWizardPage()
self.songsPage.setObjectName(u'songsPage') self.songs_page.setObjectName(u'songs_page')
self.songsLayout = QtGui.QVBoxLayout(self.songsPage) self.songs_layout = QtGui.QVBoxLayout(self.songs_page)
self.songsLayout.setContentsMargins(50, 20, 50, 20) self.songs_layout.setContentsMargins(50, 20, 50, 20)
self.songsLayout.setObjectName(u'songsLayout') self.songs_layout.setObjectName(u'songs_layout')
self.songsListWidget = QtGui.QListWidget(self.songsPage) self.songs_list_widget = QtGui.QListWidget(self.songs_page)
self.songsListWidget.setAlternatingRowColors(True) self.songs_list_widget.setAlternatingRowColors(True)
self.songsListWidget.setObjectName(u'songsListWidget') self.songs_list_widget.setObjectName(u'songs_list_widget')
self.songsLayout.addWidget(self.songsListWidget) self.songs_layout.addWidget(self.songs_list_widget)
FirstTimeWizard.setPage(FirstTimePage.Songs, self.songsPage) first_time_wizard.setPage(FirstTimePage.Songs, self.songs_page)
# The Bible samples page # The Bible samples page
self.biblesPage = QtGui.QWizardPage() self.bibles_page = QtGui.QWizardPage()
self.biblesPage.setObjectName(u'biblesPage') self.bibles_page.setObjectName(u'bibles_page')
self.biblesLayout = QtGui.QVBoxLayout(self.biblesPage) self.bibles_layout = QtGui.QVBoxLayout(self.bibles_page)
self.biblesLayout.setContentsMargins(50, 20, 50, 20) self.bibles_layout.setContentsMargins(50, 20, 50, 20)
self.biblesLayout.setObjectName(u'biblesLayout') self.bibles_layout.setObjectName(u'bibles_layout')
self.biblesTreeWidget = QtGui.QTreeWidget(self.biblesPage) self.bibles_tree_widget = QtGui.QTreeWidget(self.bibles_page)
self.biblesTreeWidget.setAlternatingRowColors(True) self.bibles_tree_widget.setAlternatingRowColors(True)
self.biblesTreeWidget.header().setVisible(False) self.bibles_tree_widget.header().setVisible(False)
self.biblesTreeWidget.setObjectName(u'biblesTreeWidget') self.bibles_tree_widget.setObjectName(u'bibles_tree_widget')
self.biblesLayout.addWidget(self.biblesTreeWidget) self.bibles_layout.addWidget(self.bibles_tree_widget)
FirstTimeWizard.setPage(FirstTimePage.Bibles, self.biblesPage) first_time_wizard.setPage(FirstTimePage.Bibles, self.bibles_page)
# The theme samples page # The theme samples page
self.themesPage = QtGui.QWizardPage() self.themes_page = QtGui.QWizardPage()
self.themesPage.setObjectName(u'themesPage') self.themes_page.setObjectName(u'themes_page')
self.themesLayout = QtGui.QVBoxLayout(self.themesPage) self.themes_layout = QtGui.QVBoxLayout(self.themes_page)
self.themesLayout.setContentsMargins(20, 50, 20, 60) self.themes_layout.setContentsMargins(20, 50, 20, 60)
self.themesLayout.setObjectName(u'themesLayout') self.themes_layout.setObjectName(u'themes_layout')
self.themesListWidget = QtGui.QListWidget(self.themesPage) self.themes_list_widget = QtGui.QListWidget(self.themes_page)
self.themesListWidget.setViewMode(QtGui.QListView.IconMode) self.themes_list_widget.setViewMode(QtGui.QListView.IconMode)
self.themesListWidget.setMovement(QtGui.QListView.Static) self.themes_list_widget.setMovement(QtGui.QListView.Static)
self.themesListWidget.setFlow(QtGui.QListView.LeftToRight) self.themes_list_widget.setFlow(QtGui.QListView.LeftToRight)
self.themesListWidget.setSpacing(4) self.themes_list_widget.setSpacing(4)
self.themesListWidget.setUniformItemSizes(True) self.themes_list_widget.setUniformItemSizes(True)
self.themesListWidget.setIconSize(QtCore.QSize(133, 100)) self.themes_list_widget.setIconSize(QtCore.QSize(133, 100))
self.themesListWidget.setWrapping(False) self.themes_list_widget.setWrapping(False)
self.themesListWidget.setObjectName(u'themesListWidget') self.themes_list_widget.setObjectName(u'themes_list_widget')
self.themesLayout.addWidget(self.themesListWidget) self.themes_layout.addWidget(self.themes_list_widget)
FirstTimeWizard.setPage(FirstTimePage.Themes, self.themesPage) first_time_wizard.setPage(FirstTimePage.Themes, self.themes_page)
# the default settings page # the default settings page
self.defaultsPage = QtGui.QWizardPage() self.defaults_page = QtGui.QWizardPage()
self.defaultsPage.setObjectName(u'defaultsPage') self.defaults_page.setObjectName(u'defaults_page')
self.defaultsLayout = QtGui.QFormLayout(self.defaultsPage) self.defaults_layout = QtGui.QFormLayout(self.defaults_page)
self.defaultsLayout.setContentsMargins(50, 20, 50, 20) self.defaults_layout.setContentsMargins(50, 20, 50, 20)
self.defaultsLayout.setObjectName(u'defaultsLayout') self.defaults_layout.setObjectName(u'defaults_layout')
self.displayLabel = QtGui.QLabel(self.defaultsPage) self.display_label = QtGui.QLabel(self.defaults_page)
self.displayLabel.setObjectName(u'displayLabel') self.display_label.setObjectName(u'display_label')
self.displayComboBox = QtGui.QComboBox(self.defaultsPage) self.display_combo_box = QtGui.QComboBox(self.defaults_page)
self.displayComboBox.setEditable(False) self.display_combo_box.setEditable(False)
self.displayComboBox.setInsertPolicy(QtGui.QComboBox.NoInsert) self.display_combo_box.setInsertPolicy(QtGui.QComboBox.NoInsert)
self.displayComboBox.setObjectName(u'displayComboBox') self.display_combo_box.setObjectName(u'display_combo_box')
self.defaultsLayout.addRow(self.displayLabel, self.displayComboBox) self.defaults_layout.addRow(self.display_label, self.display_combo_box)
self.themeLabel = QtGui.QLabel(self.defaultsPage) self.theme_label = QtGui.QLabel(self.defaults_page)
self.themeLabel.setObjectName(u'themeLabel') self.theme_label.setObjectName(u'theme_label')
self.themeComboBox = QtGui.QComboBox(self.defaultsPage) self.theme_combo_box = QtGui.QComboBox(self.defaults_page)
self.themeComboBox.setEditable(False) self.theme_combo_box.setEditable(False)
self.themeComboBox.setInsertPolicy(QtGui.QComboBox.NoInsert) self.theme_combo_box.setInsertPolicy(QtGui.QComboBox.NoInsert)
self.themeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) self.theme_combo_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
self.themeComboBox.setObjectName(u'themeComboBox') self.theme_combo_box.setObjectName(u'theme_combo_box')
self.defaultsLayout.addRow(self.themeLabel, self.themeComboBox) self.defaults_layout.addRow(self.theme_label, self.theme_combo_box)
FirstTimeWizard.setPage(FirstTimePage.Defaults, self.defaultsPage) first_time_wizard.setPage(FirstTimePage.Defaults, self.defaults_page)
# Progress page # Progress page
self.progressPage = QtGui.QWizardPage() self.progress_page = QtGui.QWizardPage()
self.progressPage.setObjectName(u'progressPage') self.progress_page.setObjectName(u'progress_page')
self.progressLayout = QtGui.QVBoxLayout(self.progressPage) self.progress_layout = QtGui.QVBoxLayout(self.progress_page)
self.progressLayout.setMargin(48) self.progress_layout.setMargin(48)
self.progressLayout.setObjectName(u'progressLayout') self.progress_layout.setObjectName(u'progress_layout')
self.progressLabel = QtGui.QLabel(self.progressPage) self.progress_label = QtGui.QLabel(self.progress_page)
self.progressLabel.setObjectName(u'progressLabel') self.progress_label.setObjectName(u'progress_label')
self.progressLayout.addWidget(self.progressLabel) self.progress_layout.addWidget(self.progress_label)
self.progressBar = QtGui.QProgressBar(self.progressPage) self.progress_bar = QtGui.QProgressBar(self.progress_page)
self.progressBar.setObjectName(u'progressBar') self.progress_bar.setObjectName(u'progress_bar')
self.progressLayout.addWidget(self.progressBar) self.progress_layout.addWidget(self.progress_bar)
FirstTimeWizard.setPage(FirstTimePage.Progress, self.progressPage) first_time_wizard.setPage(FirstTimePage.Progress, self.progress_page)
self.retranslateUi(FirstTimeWizard) self.retranslateUi(first_time_wizard)
def retranslateUi(self, FirstTimeWizard): def retranslateUi(self, first_time_wizard):
""" """
Translate the UI on the fly Translate the UI on the fly
""" """
FirstTimeWizard.setWindowTitle(translate('OpenLP.FirstTimeWizard', 'First Time Wizard')) first_time_wizard.setWindowTitle(translate('OpenLP.FirstTimeWizard', 'First Time Wizard'))
self.title_label.setText(u'<span style="font-size:14pt; font-weight:600;">%s</span>' % self.title_label.setText(u'<span style="font-size:14pt; font-weight:600;">%s</span>' %
translate('OpenLP.FirstTimeWizard', 'Welcome to the First Time Wizard')) translate('OpenLP.FirstTimeWizard', 'Welcome to the First Time Wizard'))
self.information_label.setText(translate('OpenLP.FirstTimeWizard', self.information_label.setText(translate('OpenLP.FirstTimeWizard',
'This wizard will help you to configure OpenLP for initial use. Click the next button below to start.')) 'This wizard will help you to configure OpenLP for initial use. Click the next button below to start.'))
self.pluginPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins')) self.plugin_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins'))
self.pluginPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. ')) self.plugin_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. '))
self.songsCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Songs')) self.songs_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Songs'))
self.customCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Custom Slides')) self.custom_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Custom Slides'))
self.bibleCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Bible')) self.bible_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Bible'))
self.imageCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Images')) self.image_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Images'))
# TODO Presentation plugin is not yet working on Mac OS X. # TODO Presentation plugin is not yet working on Mac OS X.
# For now just ignore it. # For now just ignore it.
if sys.platform != 'darwin': if sys.platform != 'darwin':
self.presentationCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Presentations')) self.presentation_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Presentations'))
self.mediaCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Media (Audio and Video)')) self.media_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Media (Audio and Video)'))
self.remoteCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Allow remote access')) self.remote_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Allow remote access'))
self.songUsageCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Monitor Song Usage')) self.song_usage_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Monitor Song Usage'))
self.alertCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Allow Alerts')) self.alert_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Allow Alerts'))
self.noInternetPage.setTitle(translate('OpenLP.FirstTimeWizard', 'No Internet Connection')) self.no_internet_page.setTitle(translate('OpenLP.FirstTimeWizard', 'No Internet Connection'))
self.noInternetPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Unable to detect an Internet connection.')) self.no_internet_page.setSubTitle(
self.noInternetText = translate('OpenLP.FirstTimeWizard', translate('OpenLP.FirstTimeWizard', 'Unable to detect an Internet connection.'))
'No Internet connection was found. The First Time Wizard needs an ' self.no_internet_text = translate('OpenLP.FirstTimeWizard',
'Internet connection in order to be able to download sample ' 'No Internet connection was found. The First Time Wizard needs an Internet connection in order to be able '
'songs, Bibles and themes. Click the Finish button now to start ' 'to download sample songs, Bibles and themes. Click the Finish button now to start OpenLP with initial '
'OpenLP with initial settings and no sample data.\n\nTo re-run the ' 'settings and no sample data.\n\nTo re-run the First Time Wizard and import this sample data at a later '
'First Time Wizard and import this sample data at a later time, ' 'time, check your Internet connection and re-run this wizard by selecting "Tools/Re-run First Time Wizard" '
'check your Internet connection and re-run this wizard by ' 'from OpenLP.')
'selecting "Tools/Re-run First Time Wizard" from OpenLP.')
self.cancelWizardText = translate('OpenLP.FirstTimeWizard', self.cancelWizardText = translate('OpenLP.FirstTimeWizard',
'\n\nTo cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now.') '\n\nTo cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now.')
self.songsPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs')) self.songs_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs'))
self.songsPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download public domain songs.')) self.songs_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download public domain songs.'))
self.biblesPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Bibles')) self.bibles_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Bibles'))
self.biblesPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download free Bibles.')) self.bibles_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download free Bibles.'))
self.themesPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Themes')) self.themes_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Themes'))
self.themesPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download sample themes.')) self.themes_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download sample themes.'))
self.defaultsPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Default Settings')) self.defaults_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Default Settings'))
self.defaultsPage.setSubTitle(translate('OpenLP.FirstTimeWizard', self.defaults_page.setSubTitle(translate('OpenLP.FirstTimeWizard',
'Set up default settings to be used by OpenLP.')) 'Set up default settings to be used by OpenLP.'))
self.displayLabel.setText(translate('OpenLP.FirstTimeWizard', 'Default output display:')) self.display_label.setText(translate('OpenLP.FirstTimeWizard', 'Default output display:'))
self.themeLabel.setText(translate('OpenLP.FirstTimeWizard', 'Select default theme:')) self.theme_label.setText(translate('OpenLP.FirstTimeWizard', 'Select default theme:'))
self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', 'Starting configuration process...')) self.progress_label.setText(translate('OpenLP.FirstTimeWizard', 'Starting configuration process...'))
FirstTimeWizard.setButtonText(QtGui.QWizard.CustomButton1, translate('OpenLP.FirstTimeWizard', 'Finish')) first_time_wizard.setButtonText(QtGui.QWizard.CustomButton1, translate('OpenLP.FirstTimeWizard', 'Finish'))

View File

@ -100,10 +100,10 @@ class Ui_MainWindow(object):
self.main_contentLayout.setMargin(0) self.main_contentLayout.setMargin(0)
self.main_contentLayout.setObjectName(u'main_contentLayout') self.main_contentLayout.setObjectName(u'main_contentLayout')
main_window.setCentralWidget(self.main_content) main_window.setCentralWidget(self.main_content)
self.controlSplitter = QtGui.QSplitter(self.main_content) self.control_splitter = QtGui.QSplitter(self.main_content)
self.controlSplitter.setOrientation(QtCore.Qt.Horizontal) self.control_splitter.setOrientation(QtCore.Qt.Horizontal)
self.controlSplitter.setObjectName(u'controlSplitter') self.control_splitter.setObjectName(u'control_splitter')
self.main_contentLayout.addWidget(self.controlSplitter) self.main_contentLayout.addWidget(self.control_splitter)
# Create slide controllers # Create slide controllers
self.preview_controller = SlideController(self) self.preview_controller = SlideController(self)
self.live_controller = SlideController(self, True) self.live_controller = SlideController(self, True)
@ -113,9 +113,9 @@ class Ui_MainWindow(object):
panel_locked = Settings().value(u'user interface/lock panel') panel_locked = Settings().value(u'user interface/lock panel')
self.live_controller.panel.setVisible(live_visible) self.live_controller.panel.setVisible(live_visible)
# Create menu # Create menu
self.menuBar = QtGui.QMenuBar(main_window) self.menu_bar = QtGui.QMenuBar(main_window)
self.menuBar.setObjectName(u'menuBar') self.menu_bar.setObjectName(u'menu_bar')
self.file_menu = QtGui.QMenu(self.menuBar) self.file_menu = QtGui.QMenu(self.menu_bar)
self.file_menu.setObjectName(u'fileMenu') self.file_menu.setObjectName(u'fileMenu')
self.recent_files_menu = QtGui.QMenu(self.file_menu) self.recent_files_menu = QtGui.QMenu(self.file_menu)
self.recent_files_menu.setObjectName(u'recentFilesMenu') self.recent_files_menu.setObjectName(u'recentFilesMenu')
@ -124,22 +124,22 @@ class Ui_MainWindow(object):
self.file_export_menu = QtGui.QMenu(self.file_menu) self.file_export_menu = QtGui.QMenu(self.file_menu)
self.file_export_menu.setObjectName(u'file_export_menu') self.file_export_menu.setObjectName(u'file_export_menu')
# View Menu # View Menu
self.view_menu = QtGui.QMenu(self.menuBar) self.view_menu = QtGui.QMenu(self.menu_bar)
self.view_menu.setObjectName(u'viewMenu') self.view_menu.setObjectName(u'viewMenu')
self.view_modeMenu = QtGui.QMenu(self.view_menu) self.view_modeMenu = QtGui.QMenu(self.view_menu)
self.view_modeMenu.setObjectName(u'viewModeMenu') self.view_modeMenu.setObjectName(u'viewModeMenu')
# Tools Menu # Tools Menu
self.tools_menu = QtGui.QMenu(self.menuBar) self.tools_menu = QtGui.QMenu(self.menu_bar)
self.tools_menu.setObjectName(u'tools_menu') self.tools_menu.setObjectName(u'tools_menu')
# Settings Menu # Settings Menu
self.settings_menu = QtGui.QMenu(self.menuBar) self.settings_menu = QtGui.QMenu(self.menu_bar)
self.settings_menu.setObjectName(u'settingsMenu') self.settings_menu.setObjectName(u'settingsMenu')
self.settings_language_menu = QtGui.QMenu(self.settings_menu) self.settings_language_menu = QtGui.QMenu(self.settings_menu)
self.settings_language_menu.setObjectName(u'settingsLanguageMenu') self.settings_language_menu.setObjectName(u'settingsLanguageMenu')
# Help Menu # Help Menu
self.help_menu = QtGui.QMenu(self.menuBar) self.help_menu = QtGui.QMenu(self.menu_bar)
self.help_menu.setObjectName(u'helpMenu') self.help_menu.setObjectName(u'helpMenu')
main_window.setMenuBar(self.menuBar) main_window.setMenuBar(self.menu_bar)
self.status_bar = QtGui.QStatusBar(main_window) self.status_bar = QtGui.QStatusBar(main_window)
self.status_bar.setObjectName(u'status_bar') self.status_bar.setObjectName(u'status_bar')
main_window.setStatusBar(self.status_bar) main_window.setStatusBar(self.status_bar)
@ -237,7 +237,7 @@ class Ui_MainWindow(object):
self.view_live_panel = create_action(main_window, u'viewLivePanel', self.view_live_panel = create_action(main_window, u'viewLivePanel',
can_shortcuts=True, checked=live_visible, can_shortcuts=True, checked=live_visible,
category=UiStrings().View, triggers=self.set_live_panel_visibility) category=UiStrings().View, triggers=self.set_live_panel_visibility)
self.lockPanel = create_action(main_window, u'lockPanel', self.lock_panel = create_action(main_window, u'lockPanel',
can_shortcuts=True, checked=panel_locked, can_shortcuts=True, checked=panel_locked,
category=UiStrings().View, category=UiStrings().View,
triggers=self.set_lock_panel) triggers=self.set_lock_panel)
@ -310,6 +310,10 @@ class Ui_MainWindow(object):
can_shortcuts=True, can_shortcuts=True,
category=UiStrings().Help, triggers=self.on_online_help_clicked) category=UiStrings().Help, triggers=self.on_online_help_clicked)
self.web_site_item = create_action(main_window, u'webSiteItem', can_shortcuts=True, category=UiStrings().Help) self.web_site_item = create_action(main_window, u'webSiteItem', can_shortcuts=True, category=UiStrings().Help)
# Shortcuts not connected to buttons or menu entires.
self.search_shortcut_action = create_action(main_window,
u'searchShortcut', can_shortcuts=True, category=translate('OpenLP.MainWindow', 'General'),
triggers=self.on_search_shortcut_triggered)
add_actions(self.file_import_menu, (self.settings_import_item, None, self.import_theme_item, add_actions(self.file_import_menu, (self.settings_import_item, None, self.import_theme_item,
self.import_language_item)) self.import_language_item))
add_actions(self.file_export_menu, (self.settings_export_item, None, self.export_theme_item, add_actions(self.file_export_menu, (self.settings_export_item, None, self.export_theme_item,
@ -321,7 +325,7 @@ class Ui_MainWindow(object):
add_actions(self.view_modeMenu, (self.mode_default_Item, self.mode_setup_item, self.mode_live_item)) add_actions(self.view_modeMenu, (self.mode_default_Item, self.mode_setup_item, self.mode_live_item))
add_actions(self.view_menu, (self.view_modeMenu.menuAction(), None, self.view_media_manager_item, add_actions(self.view_menu, (self.view_modeMenu.menuAction(), None, self.view_media_manager_item,
self.view_service_manager_item, self.view_theme_manager_item, None, self.view_preview_panel, self.view_service_manager_item, self.view_theme_manager_item, None, self.view_preview_panel,
self.view_live_panel, None, self.lockPanel)) self.view_live_panel, None, self.lock_panel))
# i18n add Language Actions # i18n add Language Actions
add_actions(self.settings_language_menu, (self.auto_language_item, None)) add_actions(self.settings_language_menu, (self.auto_language_item, None))
add_actions(self.settings_language_menu, self.language_group.actions()) add_actions(self.settings_language_menu, self.language_group.actions())
@ -342,8 +346,9 @@ class Ui_MainWindow(object):
self.about_item)) self.about_item))
else: else:
add_actions(self.help_menu, (self.on_line_help_item, None, self.web_site_item, self.about_item)) add_actions(self.help_menu, (self.on_line_help_item, None, self.web_site_item, self.about_item))
add_actions(self.menuBar, (self.file_menu.menuAction(), self.view_menu.menuAction(), add_actions(self.menu_bar, (self.file_menu.menuAction(), self.view_menu.menuAction(),
self.tools_menu.menuAction(), self.settings_menu.menuAction(), self.help_menu.menuAction())) self.tools_menu.menuAction(), self.settings_menu.menuAction(), self.help_menu.menuAction()))
add_actions(self, [self.search_shortcut_action])
# Initialise the translation # Initialise the translation
self.retranslateUi(main_window) self.retranslateUi(main_window)
self.media_tool_box.setCurrentIndex(0) self.media_tool_box.setCurrentIndex(0)
@ -356,12 +361,11 @@ class Ui_MainWindow(object):
self.set_lock_panel(panel_locked) self.set_lock_panel(panel_locked)
self.settingsImported = False self.settingsImported = False
def retranslateUi(self, mainWindow): def retranslateUi(self, main_window):
""" """
Set up the translation system Set up the translation system
""" """
mainWindow.mainTitle = UiStrings().OLPV2x main_window.setWindowTitle(UiStrings().OLPV2x)
mainWindow.setWindowTitle(mainWindow.mainTitle)
self.file_menu.setTitle(translate('OpenLP.MainWindow', '&File')) self.file_menu.setTitle(translate('OpenLP.MainWindow', '&File'))
self.file_import_menu.setTitle(translate('OpenLP.MainWindow', '&Import')) self.file_import_menu.setTitle(translate('OpenLP.MainWindow', '&Import'))
self.file_export_menu.setTitle(translate('OpenLP.MainWindow', '&Export')) self.file_export_menu.setTitle(translate('OpenLP.MainWindow', '&Export'))
@ -423,8 +427,8 @@ class Ui_MainWindow(object):
translate('OpenLP.MainWindow', 'Toggle the visibility of the preview panel.')) translate('OpenLP.MainWindow', 'Toggle the visibility of the preview panel.'))
self.view_live_panel.setText(translate('OpenLP.MainWindow', '&Live Panel')) self.view_live_panel.setText(translate('OpenLP.MainWindow', '&Live Panel'))
self.view_live_panel.setToolTip(translate('OpenLP.MainWindow', 'Toggle Live Panel')) self.view_live_panel.setToolTip(translate('OpenLP.MainWindow', 'Toggle Live Panel'))
self.lockPanel.setText(translate('OpenLP.MainWindow', 'L&ock Panels')) self.lock_panel.setText(translate('OpenLP.MainWindow', 'L&ock Panels'))
self.lockPanel.setStatusTip(translate('OpenLP.MainWindow', 'Prevent the panels being moved.')) self.lock_panel.setStatusTip(translate('OpenLP.MainWindow', 'Prevent the panels being moved.'))
self.view_live_panel.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the live panel.')) self.view_live_panel.setStatusTip(translate('OpenLP.MainWindow', 'Toggle the visibility of the live panel.'))
self.settingsPluginListItem.setText(translate('OpenLP.MainWindow', '&Plugin List')) self.settingsPluginListItem.setText(translate('OpenLP.MainWindow', '&Plugin List'))
self.settingsPluginListItem.setStatusTip(translate('OpenLP.MainWindow', 'List the Plugins')) self.settingsPluginListItem.setStatusTip(translate('OpenLP.MainWindow', 'List the Plugins'))
@ -433,6 +437,9 @@ class Ui_MainWindow(object):
if os.name == u'nt': if os.name == u'nt':
self.offlineHelpItem.setText(translate('OpenLP.MainWindow', '&User Guide')) self.offlineHelpItem.setText(translate('OpenLP.MainWindow', '&User Guide'))
self.on_line_help_item.setText(translate('OpenLP.MainWindow', '&Online Help')) self.on_line_help_item.setText(translate('OpenLP.MainWindow', '&Online Help'))
self.search_shortcut_action.setText(UiStrings().Search)
self.search_shortcut_action.setToolTip(
translate('OpenLP.MainWindow', 'Jump to the search box of the current active plugin.'))
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())
@ -467,8 +474,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self): def __init__(self):
""" """
This constructor sets up the interface, the various managers, and the This constructor sets up the interface, the various managers, and the plugins.
plugins.
""" """
QtGui.QMainWindow.__init__(self) QtGui.QMainWindow.__init__(self)
Registry().register(u'main_window', self) Registry().register(u'main_window', self)
@ -491,7 +497,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
self.new_data_path = None self.new_data_path = None
self.copy_data = False self.copy_data = False
Settings().set_up_default_values() Settings().set_up_default_values()
self.service_not_saved = False
self.about_form = AboutForm(self) self.about_form = AboutForm(self)
self.media_controller = MediaController() self.media_controller = MediaController()
self.settings_form = SettingsForm(self) self.settings_form = SettingsForm(self)
@ -536,22 +541,31 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
Registry().register_function(u'theme_update_global', self.default_theme_changed) Registry().register_function(u'theme_update_global', self.default_theme_changed)
Registry().register_function(u'openlp_version_check', self.version_notice) Registry().register_function(u'openlp_version_check', self.version_notice)
Registry().register_function(u'config_screen_changed', self.screen_changed) Registry().register_function(u'config_screen_changed', self.screen_changed)
Registry().register_function(u'bootstrap_post_set_up', self.restore_current_media_manager_item)
self.renderer = Renderer() self.renderer = Renderer()
log.info(u'Load data from Settings')
if Settings().value(u'advanced/save current plugin'):
savedPlugin = Settings().value(u'advanced/current media plugin')
if savedPlugin != -1:
self.media_tool_box.setCurrentIndex(savedPlugin)
# Reset the cursor # Reset the cursor
self.application.set_normal_cursor() self.application.set_normal_cursor()
def setAutoLanguage(self, value): def restore_current_media_manager_item(self):
""" """
Set the language to automatic. Called on start up to restore the last active media plugin.
""" """
self.language_group.setDisabled(value) log.info(u'Load data from Settings')
LanguageManager.auto_language = value if Settings().value(u'advanced/save current plugin'):
LanguageManager.set_language(self.language_group.checkedAction()) saved_plugin_id = Settings().value(u'advanced/current media plugin')
if saved_plugin_id != -1:
self.media_tool_box.setCurrentIndex(saved_plugin_id)
def on_search_shortcut_triggered(self):
"""
Called when the search shotcut has been pressed.
"""
# Make sure the media_dock is visible.
if not self.media_manager_dock.isVisible():
self.media_manager_dock.setVisible(True)
widget = self.media_tool_box.currentWidget()
if widget:
widget.on_focus()
def on_media_tool_box_changed(self, index): def on_media_tool_box_changed(self, index):
""" """
@ -966,8 +980,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
""" """
self.setViewMode(False, True, False, False, True, u'live') self.setViewMode(False, True, False, False, True, u'live')
def setViewMode(self, media=True, service=True, theme=True, preview=True, def setViewMode(self, media=True, service=True, theme=True, preview=True, live=True, mode=u''):
live=True, mode=u''):
""" """
Set OpenLP to a different view mode. Set OpenLP to a different view mode.
""" """
@ -982,8 +995,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def screen_changed(self): def screen_changed(self):
""" """
The screen has changed so we have to update components such as the The screen has changed so we have to update components such as the renderer.
renderer.
""" """
log.debug(u'screen_changed') log.debug(u'screen_changed')
self.application.set_busy_cursor() self.application.set_busy_cursor()
@ -1068,43 +1080,20 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
# Needed for Windows to stop crashes on exit # Needed for Windows to stop crashes on exit
Registry().remove(u'application') Registry().remove(u'application')
def service_changed(self, reset=False, serviceName=None): def set_service_modified(self, modified, file_name):
""" """
Hook to change the main window title when the service changes This method is called from the ServiceManager to set the title of the main window.
``reset``
Shows if the service has been cleared or saved
``serviceName``
The name of the service (if it has one)
"""
if not serviceName:
service_name = u'(unsaved service)'
else:
service_name = serviceName
if reset:
self.service_not_saved = False
title = u'%s - %s' % (self.mainTitle, service_name)
else:
self.service_not_saved = True
title = u'%s - %s*' % (self.mainTitle, service_name)
self.setWindowTitle(title)
def set_service_modified(self, modified, fileName):
"""
This method is called from the ServiceManager to set the title of the
main window.
``modified`` ``modified``
Whether or not this service has been modified. Whether or not this service has been modified.
``fileName`` ``file_name``
The file name of the service file. The file name of the service file.
""" """
if modified: if modified:
title = u'%s - %s*' % (self.mainTitle, fileName) title = u'%s - %s*' % (UiStrings().OLPV2x, file_name)
else: else:
title = u'%s - %s' % (self.mainTitle, fileName) title = u'%s - %s' % (UiStrings().OLPV2x, file_name)
self.setWindowTitle(title) self.setWindowTitle(title)
def show_status_message(self, message): def show_status_message(self, message):
@ -1140,8 +1129,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def set_preview_panel_visibility(self, visible): def set_preview_panel_visibility(self, visible):
""" """
Sets the visibility of the preview panel including saving the setting Sets the visibility of the preview panel including saving the setting and updating the menu.
and updating the menu.
``visible`` ``visible``
A bool giving the state to set the panel to A bool giving the state to set the panel to
@ -1178,8 +1166,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def set_live_panel_visibility(self, visible): def set_live_panel_visibility(self, visible):
""" """
Sets the visibility of the live panel including saving the setting and Sets the visibility of the live panel including saving the setting and updating the menu.
updating the menu.
``visible`` ``visible``
A bool giving the state to set the panel to A bool giving the state to set the panel to
@ -1208,7 +1195,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
self.restoreState(settings.value(u'main window state')) self.restoreState(settings.value(u'main window state'))
self.live_controller.splitter.restoreState(settings.value(u'live splitter geometry')) self.live_controller.splitter.restoreState(settings.value(u'live splitter geometry'))
self.preview_controller.splitter.restoreState(settings.value(u'preview splitter geometry')) self.preview_controller.splitter.restoreState(settings.value(u'preview splitter geometry'))
self.controlSplitter.restoreState(settings.value(u'main window splitter geometry')) self.control_splitter.restoreState(settings.value(u'main window splitter geometry'))
settings.endGroup() settings.endGroup()
def save_settings(self): def save_settings(self):
@ -1229,13 +1216,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
settings.setValue(u'main window geometry', self.saveGeometry()) settings.setValue(u'main window geometry', self.saveGeometry())
settings.setValue(u'live splitter geometry', self.live_controller.splitter.saveState()) settings.setValue(u'live splitter geometry', self.live_controller.splitter.saveState())
settings.setValue(u'preview splitter geometry', self.preview_controller.splitter.saveState()) settings.setValue(u'preview splitter geometry', self.preview_controller.splitter.saveState())
settings.setValue(u'main window splitter geometry', self.controlSplitter.saveState()) settings.setValue(u'main window splitter geometry', self.control_splitter.saveState())
settings.endGroup() settings.endGroup()
def update_recent_files_menu(self): def update_recent_files_menu(self):
""" """
Updates the recent file menu with the latest list of service files Updates the recent file menu with the latest list of service files accessed.
accessed.
""" """
recent_file_count = Settings().value(u'advanced/recent file count') recent_file_count = Settings().value(u'advanced/recent file count')
existing_recent_files = [recentFile for recentFile in self.recent_files existing_recent_files = [recentFile for recentFile in self.recent_files

View File

@ -129,11 +129,18 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog):
continue continue
item = QtGui.QTreeWidgetItem([category.name]) item = QtGui.QTreeWidgetItem([category.name])
for action in category.actions: for action in category.actions:
actionText = REMOVE_AMPERSAND.sub('', action.text()) action_text = REMOVE_AMPERSAND.sub('', action.text())
actionItem = QtGui.QTreeWidgetItem([actionText]) action_item = QtGui.QTreeWidgetItem([action_text])
actionItem.setIcon(0, action.icon()) action_item.setIcon(0, action.icon())
actionItem.setData(0, QtCore.Qt.UserRole, action) action_item.setData(0, QtCore.Qt.UserRole, action)
item.addChild(actionItem) tool_tip_text = action.toolTip()
# Only display tool tips if they are helpful.
if tool_tip_text != action_text:
# Display the tool tip in all three colums.
action_item.setToolTip(0, tool_tip_text)
action_item.setToolTip(1, tool_tip_text)
action_item.setToolTip(2, tool_tip_text)
item.addChild(action_item)
self.treeWidget.addTopLevelItem(item) self.treeWidget.addTopLevelItem(item)
item.setExpanded(True) item.setExpanded(True)
self.refreshShortcutList() self.refreshShortcutList()

View File

@ -121,7 +121,7 @@ class SlideController(DisplayController):
self.service_item = None self.service_item = None
self.slide_limits = None self.slide_limits = None
self.update_slide_limits() self.update_slide_limits()
self.panel = QtGui.QWidget(parent.controlSplitter) self.panel = QtGui.QWidget(parent.control_splitter)
self.slideList = {} self.slideList = {}
self.slide_count = 0 self.slide_count = 0
self.slide_image = None self.slide_image = None
@ -566,8 +566,7 @@ class SlideController(DisplayController):
max_width = self.preview_frame.width() - self.grid.margin() * 2 max_width = self.preview_frame.width() - self.grid.margin() * 2
self.slide_preview.setFixedSize(QtCore.QSize(max_width, max_width / self.ratio)) self.slide_preview.setFixedSize(QtCore.QSize(max_width, max_width / self.ratio))
self.preview_display.setFixedSize(QtCore.QSize(max_width, max_width / self.ratio)) self.preview_display.setFixedSize(QtCore.QSize(max_width, max_width / self.ratio))
self.preview_display.screen = { self.preview_display.screen = {u'size': self.preview_display.geometry()}
u'size': self.preview_display.geometry()}
self.on_controller_size_changed(self.controller.width()) self.on_controller_size_changed(self.controller.width())
def on_controller_size_changed(self, width): def on_controller_size_changed(self, width):
@ -697,9 +696,8 @@ class SlideController(DisplayController):
def add_service_manager_item(self, item, slide_no): def add_service_manager_item(self, item, slide_no):
""" """
Method to install the service item into the controller and Method to install the service item into the controller and request the correct toolbar for the plugin. Called by
request the correct toolbar for the plugin. :class:`~openlp.core.ui.ServiceManager`
Called by ServiceManager
""" """
log.debug(u'add_service_manager_item live = %s' % self.is_live) log.debug(u'add_service_manager_item live = %s' % self.is_live)
# If no valid slide number is specified we take the first one, but we remember the initial value to see if we # If no valid slide number is specified we take the first one, but we remember the initial value to see if we
@ -724,8 +722,7 @@ class SlideController(DisplayController):
def _process_item(self, service_item, slideno): def _process_item(self, service_item, slideno):
""" """
Loads a ServiceItem into the system from ServiceManager Loads a ServiceItem into the system from ServiceManager. Display the slide number passed.
Display the slide number passed
""" """
log.debug(u'processManagerItem live = %s' % self.is_live) log.debug(u'processManagerItem live = %s' % self.is_live)
self.on_stop_loop() self.on_stop_loop()
@ -734,7 +731,8 @@ class SlideController(DisplayController):
self.service_item = copy.copy(service_item) self.service_item = copy.copy(service_item)
if old_item and self.is_live and old_item.is_capable(ItemCapabilities.ProvidesOwnDisplay): if old_item and self.is_live and old_item.is_capable(ItemCapabilities.ProvidesOwnDisplay):
self._reset_blank() self._reset_blank()
Registry().execute(u'%s_start' % service_item.name.lower(), [service_item, self.is_live, self.hide_mode(), slideno]) Registry().execute(
u'%s_start' % service_item.name.lower(), [service_item, self.is_live, self.hide_mode(), slideno])
self.slideList = {} self.slideList = {}
if self.is_live: if self.is_live:
self.song_menu.menu().clear() self.song_menu.menu().clear()

View File

@ -0,0 +1,60 @@
"""
Package to test the openlp.core.ui.mainwindow package.
"""
from unittest import TestCase
from mock import MagicMock, patch
from PyQt4 import QtGui
from openlp.core.lib import Registry
from openlp.core.ui.mainwindow import MainWindow
class TestMainWindow(TestCase):
def setUp(self):
"""
Create the UI
"""
Registry.create()
self.registry = Registry()
self.app = QtGui.QApplication([])
# Mock cursor busy/normal methods.
self.app.set_busy_cursor = MagicMock()
self.app.set_normal_cursor = MagicMock()
self.app.args =[]
Registry().register(u'application', self.app)
# Mock classes and methods used by mainwindow.
with patch(u'openlp.core.ui.mainwindow.SettingsForm') as mocked_settings_form, \
patch(u'openlp.core.ui.mainwindow.ImageManager') as mocked_image_manager, \
patch(u'openlp.core.ui.mainwindow.SlideController') as mocked_slide_controller, \
patch(u'openlp.core.ui.mainwindow.OpenLPDockWidget') as mocked_dock_widget, \
patch(u'openlp.core.ui.mainwindow.QtGui.QToolBox') as mocked_q_tool_box_class, \
patch(u'openlp.core.ui.mainwindow.QtGui.QMainWindow.addDockWidget') as mocked_add_dock_method, \
patch(u'openlp.core.ui.mainwindow.ServiceManager') as mocked_service_manager, \
patch(u'openlp.core.ui.mainwindow.ThemeManager') as mocked_theme_manager, \
patch(u'openlp.core.ui.mainwindow.Renderer') as mocked_renderer:
self.main_window = MainWindow()
def tearDown(self):
"""
Delete all the C++ objects at the end so that we don't have a segfault
"""
del self.main_window
del self.app
def restore_current_media_manager_item_test(self):
"""
Regression test for bug #1152509.
"""
# GIVEN: Mocked Settings().value method.
with patch(u'openlp.core.ui.mainwindow.Settings.value') as mocked_value:
# save current plugin: True; current media plugin: 2
mocked_value.side_effect = [True, 2]
# WHEN: Call the restore method.
Registry().execute(u'bootstrap_post_set_up')
# THEN: The current widget should have been set.
self.main_window.media_tool_box.setCurrentIndex.assert_called_with(2)