openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #22664
[Merge] lp:~trb143/openlp/pep8 into lp:openlp
Tim Bentley has proposed merging lp:~trb143/openlp/pep8 into lp:openlp.
Requested reviews:
OpenLP Core (openlp-core)
For more details, see:
https://code.launchpad.net/~trb143/openlp/pep8/+merge/209332
Clean up songs forms.
Fix one presentation test and bypass 2 on linux!
--
https://code.launchpad.net/~trb143/openlp/pep8/+merge/209332
Your team OpenLP Core is requested to review the proposed merge of lp:~trb143/openlp/pep8 into lp:openlp.
=== modified file 'openlp/core/ui/servicenoteform.py'
--- openlp/core/ui/servicenoteform.py 2013-12-28 21:33:38 +0000
+++ openlp/core/ui/servicenoteform.py 2014-03-04 20:20:38 +0000
@@ -63,7 +63,7 @@
self.dialog_layout = QtGui.QVBoxLayout(self)
self.dialog_layout.setContentsMargins(8, 8, 8, 8)
self.dialog_layout.setSpacing(8)
- self.dialog_layout.setObjectName('verticalLayout')
+ self.dialog_layout.setObjectName('vertical_layout')
self.text_edit = SpellTextEdit(self, False)
self.text_edit.setObjectName('textEdit')
self.dialog_layout.addWidget(self.text_edit)
=== modified file 'openlp/core/ui/wizard.py'
--- openlp/core/ui/wizard.py 2013-12-28 21:33:38 +0000
+++ openlp/core/ui/wizard.py 2014-03-04 20:20:38 +0000
@@ -215,7 +215,7 @@
"""
if self.with_progress_page and self.page(pageId) == self.progress_page:
self.pre_wizard()
- self.performWizard()
+ self.perform_wizard()
self.post_wizard()
else:
self.custom_page_changed(pageId)
@@ -294,8 +294,8 @@
if filters:
filters += ';;'
filters += '%s (*)' % UiStrings().AllFiles
- filename = QtGui.QFileDialog.getOpenFileName(self, title,
- os.path.dirname(Settings().value(self.plugin.settings_section + '/' + setting_name)), filters)
+ filename = QtGui.QFileDialog.getOpenFileName(
+ self, title, os.path.dirname(Settings().value(self.plugin.settings_section + '/' + setting_name)), filters)
if filename:
editbox.setText(filename)
Settings().setValue(self.plugin.settings_section + '/' + setting_name, filename)
@@ -313,8 +313,9 @@
``setting_name``
The place where to save the last opened directory.
"""
- folder = QtGui.QFileDialog.getExistingDirectory(self, title,
- Settings().value(self.plugin.settings_section + '/' + setting_name), QtGui.QFileDialog.ShowDirsOnly)
+ folder = QtGui.QFileDialog.getExistingDirectory(
+ self, title, Settings().value(self.plugin.settings_section + '/' + setting_name),
+ QtGui.QFileDialog.ShowDirsOnly)
if folder:
editbox.setText(folder)
Settings().setValue(self.plugin.settings_section + '/' + setting_name, folder)
=== modified file 'openlp/plugins/bibles/forms/bibleimportform.py'
--- openlp/plugins/bibles/forms/bibleimportform.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/bibles/forms/bibleimportform.py 2014-03-04 20:20:38 +0000
@@ -524,7 +524,7 @@
self.progress_label.setText(WizardStrings.StartingImport)
self.application.process_events()
- def performWizard(self):
+ def perform_wizard(self):
"""
Perform the actual import.
"""
=== modified file 'openlp/plugins/bibles/forms/bibleupgradeform.py'
--- openlp/plugins/bibles/forms/bibleupgradeform.py 2013-12-28 21:33:38 +0000
+++ openlp/plugins/bibles/forms/bibleupgradeform.py 2014-03-04 20:20:38 +0000
@@ -107,7 +107,7 @@
"""
if self.page(pageId) == self.progress_page:
self.pre_wizard()
- self.performWizard()
+ self.perform_wizard()
self.post_wizard()
elif self.page(pageId) == self.selectPage and not self.files:
self.next()
@@ -312,7 +312,7 @@
"""
Set default values for the wizard pages.
"""
- log.debug('BibleUpgrade setDefaults')
+ log.debug('BibleUpgrade set_defaults')
settings = Settings()
settings.beginGroup(self.plugin.settings_section)
self.stop_import_flag = False
@@ -338,7 +338,7 @@
self.progress_label.setText(translate('BiblesPlugin.UpgradeWizardForm', 'Starting upgrade...'))
self.application.process_events()
- def performWizard(self):
+ def perform_wizard(self):
"""
Perform the actual upgrade.
"""
=== modified file 'openlp/plugins/presentations/presentationplugin.py'
--- openlp/plugins/presentations/presentationplugin.py 2013-12-29 19:47:54 +0000
+++ openlp/plugins/presentations/presentationplugin.py 2014-03-04 20:20:38 +0000
@@ -43,16 +43,15 @@
log = logging.getLogger(__name__)
-__default_settings__ = {
- 'presentations/override app': QtCore.Qt.Unchecked,
- 'presentations/enable_pdf_program': QtCore.Qt.Unchecked,
- 'presentations/pdf_program': '',
- 'presentations/Impress': QtCore.Qt.Checked,
- 'presentations/Powerpoint': QtCore.Qt.Checked,
- 'presentations/Powerpoint Viewer': QtCore.Qt.Checked,
- 'presentations/Pdf': QtCore.Qt.Checked,
- 'presentations/presentations files': []
-}
+__default_settings__ = {'presentations/override app': QtCore.Qt.Unchecked,
+ 'presentations/enable_pdf_program': QtCore.Qt.Unchecked,
+ 'presentations/pdf_program': '',
+ 'presentations/Impress': QtCore.Qt.Checked,
+ 'presentations/Powerpoint': QtCore.Qt.Checked,
+ 'presentations/Powerpoint Viewer': QtCore.Qt.Checked,
+ 'presentations/Pdf': QtCore.Qt.Checked,
+ 'presentations/presentations files': []
+ }
class PresentationPlugin(Plugin):
@@ -147,10 +146,10 @@
Return information about this plugin.
"""
about_text = translate('PresentationPlugin', '<strong>Presentation '
- 'Plugin</strong><br />The presentation plugin provides the '
- 'ability to show presentations using a number of different '
- 'programs. The choice of available presentation programs is '
- 'available to the user in a drop down box.')
+ 'Plugin</strong><br />The presentation plugin provides the '
+ 'ability to show presentations using a number of different '
+ 'programs. The choice of available presentation programs is '
+ 'available to the user in a drop down box.')
return about_text
def set_plugin_text_strings(self):
=== modified file 'openlp/plugins/songs/forms/authorsform.py'
--- openlp/plugins/songs/forms/authorsform.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/authorsform.py 2014-03-04 20:20:38 +0000
@@ -111,8 +111,8 @@
elif not self.display_edit.text():
if critical_error_message_box(
message=translate('SongsPlugin.AuthorsForm',
- 'You have not set a display name for the author, combine the first and last names?'),
- parent=self, question=True) == QtGui.QMessageBox.Yes:
+ 'You have not set a display name for the author, combine the first and last names?'),
+ parent=self, question=True) == QtGui.QMessageBox.Yes:
self.display_edit.setText(self.first_name_edit.text() + ' ' + self.last_name_edit.text())
return QtGui.QDialog.accept(self)
else:
=== modified file 'openlp/plugins/songs/forms/duplicatesongremovalform.py'
--- openlp/plugins/songs/forms/duplicatesongremovalform.py 2013-12-28 21:33:38 +0000
+++ openlp/plugins/songs/forms/duplicatesongremovalform.py 2014-03-04 20:20:38 +0000
@@ -47,8 +47,8 @@
class DuplicateSongRemovalForm(OpenLPWizard):
"""
- This is the Duplicate Song Removal Wizard. It provides functionality to
- search for and remove duplicate songs in the database.
+ This is the Duplicate Song Removal Wizard. It provides functionality to search for and remove duplicate songs
+ in the database.
"""
log.info('DuplicateSongRemovalForm loaded')
@@ -56,19 +56,16 @@
"""
Instantiate the wizard, and run any extra setup we need to.
- ``parent``
- The QWidget-derived parent of the wizard.
-
- ``plugin``
- The songs plugin.
+ :param plugin: The songs plugin.
"""
self.duplicate_song_list = []
self.review_current_count = 0
self.review_total_count = 0
# Used to interrupt ongoing searches when cancel is clicked.
self.break_search = False
- super(DuplicateSongRemovalForm, self).__init__(Registry().get('main_window'),
- plugin, 'duplicateSongRemovalWizard', ':/wizards/wizard_duplicateremoval.bmp', False)
+ super(DuplicateSongRemovalForm, self).__init__(
+ Registry().get('main_window'), plugin, 'duplicateSongRemovalWizard', ':/wizards/wizard_duplicateremoval.bmp'
+ , False)
self.setMinimumWidth(730)
def custom_signals(self):
@@ -127,30 +124,31 @@
"""
self.setWindowTitle(translate('Wizard', 'Wizard'))
self.title_label.setText(WizardStrings.HeaderStyle % translate('OpenLP.Ui',
- 'Welcome to the Duplicate Song Removal Wizard'))
- self.information_label.setText(translate("Wizard",
- 'This wizard will help you to remove duplicate songs from the song database. You will have a chance to '
- 'review every potential duplicate song before it is deleted. So no songs will be deleted without your '
- 'explicit approval.'))
+ 'Welcome to the Duplicate Song Removal Wizard'))
+ self.information_label.setText(
+ translate("Wizard",
+ 'This wizard will help you to remove duplicate songs from the song database. You will have a '
+ 'chance to review every potential duplicate song before it is deleted. So no songs will be '
+ 'deleted without your explicit approval.'))
self.searching_page.setTitle(translate('Wizard', 'Searching for duplicate songs.'))
self.searching_page.setSubTitle(translate('Wizard', 'Please wait while your songs database is analyzed.'))
self.update_review_counter_text()
self.review_page.setSubTitle(translate('Wizard',
- 'Here you can decide which songs to remove and which ones to keep.'))
+ 'Here you can decide which songs to remove and which ones to keep.'))
def update_review_counter_text(self):
"""
Set the wizard review page header text.
"""
- self.review_page.setTitle(translate('Wizard', 'Review duplicate songs (%s/%s)') % \
- (self.review_current_count, self.review_total_count))
+ self.review_page.setTitle(
+ translate('Wizard', 'Review duplicate songs (%s/%s)') %
+ (self.review_current_count, self.review_total_count))
def custom_page_changed(self, page_id):
"""
Called when changing the wizard page.
- ``page_id``
- ID of the page the wizard changed to.
+ :param page_id: ID of the page the wizard changed to.
"""
# Hide back button.
self.button(QtGui.QWizard.BackButton).hide()
@@ -172,11 +170,11 @@
for outer_song_counter in range(max_songs - 1):
for inner_song_counter in range(outer_song_counter + 1, max_songs):
if songs_probably_equal(songs[outer_song_counter], songs[inner_song_counter]):
- duplicate_added = self.add_duplicates_to_song_list(songs[outer_song_counter],
- songs[inner_song_counter])
+ duplicate_added = self.add_duplicates_to_song_list(
+ songs[outer_song_counter], songs[inner_song_counter])
if duplicate_added:
- self.found_duplicates_edit.appendPlainText(songs[outer_song_counter].title + " = " +
- songs[inner_song_counter].title)
+ self.found_duplicates_edit.appendPlainText(
+ songs[outer_song_counter].title + " = " + songs[inner_song_counter].title)
self.duplicate_search_progress_bar.setValue(self.duplicate_search_progress_bar.value() + 1)
# The call to process_events() will keep the GUI responsive.
self.application.process_events()
@@ -200,23 +198,20 @@
self.button(QtGui.QWizard.FinishButton).setEnabled(True)
self.button(QtGui.QWizard.NextButton).hide()
self.button(QtGui.QWizard.CancelButton).hide()
- QtGui.QMessageBox.information(self, translate('Wizard', 'Information'),
+ QtGui.QMessageBox.information(
+ self, translate('Wizard', 'Information'),
translate('Wizard', 'No duplicate songs have been found in the database.'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
def add_duplicates_to_song_list(self, search_song, duplicate_song):
"""
Inserts a song duplicate (two similar songs) to the duplicate song list.
- If one of the two songs is already part of the duplicate song list,
- don't add another duplicate group but add the other song to that group.
- Returns True if at least one of the songs was added, False if both were already
- member of a group.
-
- ``search_song``
- The song we searched the duplicate for.
-
- ``duplicate_song``
- The duplicate song.
+ If one of the two songs is already part of the duplicate song list, don't add another duplicate group but
+ add the other song to that group.
+ Returns True if at least one of the songs was added, False if both were already member of a group.
+
+ :param search_song: The song we searched the duplicate for.
+ :param duplicate_song: The duplicate song.
"""
duplicate_group_found = False
duplicate_added = False
@@ -259,8 +254,8 @@
def validateCurrentPage(self):
"""
- Controls whether we should switch to the next wizard page. This method loops
- on the review page as long as there are more song duplicates to review.
+ Controls whether we should switch to the next wizard page. This method loops on the review page as long as
+ there are more song duplicates to review.
"""
if self.currentId() == self.review_page_id:
# As long as it's not the last duplicate list entry we revisit the review page.
@@ -273,12 +268,10 @@
def remove_button_clicked(self, song_review_widget):
"""
- Removes a song from the database, removes the GUI element representing the
- song on the review page, and disable the remove button if only one duplicate
- is left.
+ Removes a song from the database, removes the GUI element representing the song on the review page, and
+ disable the remove button if only one duplicate is left.
- ``song_review_widget``
- The SongReviewWidget whose song we should delete.
+ :param song_review_widget: The SongReviewWidget whose song we should delete.
"""
# Remove song from duplicate song list.
self.duplicate_song_list[-1].remove(song_review_widget.song)
@@ -315,9 +308,8 @@
def process_current_duplicate_entry(self):
"""
- Update the review counter in the wizard header, add song widgets for
- the current duplicate group to review, if it's the last
- duplicate song group, hide the "next" button and show the "finish" button.
+ Update the review counter in the wizard header, add song widgets for the current duplicate group to review,
+ if it's the last duplicate song group, hide the "next" button and show the "finish" button.
"""
# Update the counter.
self.review_current_count = self.review_total_count - (len(self.duplicate_song_list) - 1)
=== modified file 'openlp/plugins/songs/forms/editsongdialog.py'
--- openlp/plugins/songs/forms/editsongdialog.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/editsongdialog.py 2014-03-04 20:20:38 +0000
@@ -153,8 +153,8 @@
self.topics_layout.setObjectName('topics_layout')
self.topic_add_layout = QtGui.QHBoxLayout()
self.topic_add_layout.setObjectName('topic_add_layout')
- self.topicsComboBox = create_combo_box(self.topics_group_box, 'topicsComboBox')
- self.topic_add_layout.addWidget(self.topicsComboBox)
+ self.topics_combo_box = create_combo_box(self.topics_group_box, 'topics_combo_box')
+ self.topic_add_layout.addWidget(self.topics_combo_box)
self.topic_add_button = QtGui.QPushButton(self.topics_group_box)
self.topic_add_button.setObjectName('topic_add_button')
self.topic_add_layout.addWidget(self.topic_add_button)
@@ -296,7 +296,7 @@
self.verse_edit_all_button.setText(translate('SongsPlugin.EditSongForm', 'Ed&it All'))
self.verse_delete_button.setText(UiStrings().Delete)
self.song_tab_widget.setTabText(self.song_tab_widget.indexOf(self.lyrics_tab),
- translate('SongsPlugin.EditSongForm', 'Title && Lyrics'))
+ translate('SongsPlugin.EditSongForm', 'Title && Lyrics'))
self.authors_group_box.setTitle(SongStrings.Authors)
self.author_add_button.setText(translate('SongsPlugin.EditSongForm', '&Add to Song'))
self.author_remove_button.setText(translate('SongsPlugin.EditSongForm', '&Remove'))
@@ -308,7 +308,7 @@
self.song_book_name_label.setText(translate('SongsPlugin.EditSongForm', 'Book:'))
self.song_book_number_label.setText(translate('SongsPlugin.EditSongForm', 'Number:'))
self.song_tab_widget.setTabText(self.song_tab_widget.indexOf(self.authors_tab),
- translate('SongsPlugin.EditSongForm', 'Authors, Topics && Song Book'))
+ translate('SongsPlugin.EditSongForm', 'Authors, Topics && Song Book'))
self.theme_group_box.setTitle(UiStrings().Theme)
self.theme_add_button.setText(translate('SongsPlugin.EditSongForm', 'New &Theme'))
self.rights_group_box.setTitle(translate('SongsPlugin.EditSongForm', 'Copyright Information'))
@@ -316,9 +316,9 @@
self.ccli_label.setText(UiStrings().CCLINumberLabel)
self.comments_group_box.setTitle(translate('SongsPlugin.EditSongForm', 'Comments'))
self.song_tab_widget.setTabText(self.song_tab_widget.indexOf(self.theme_tab),
- translate('SongsPlugin.EditSongForm', 'Theme, Copyright Info && Comments'))
+ translate('SongsPlugin.EditSongForm', 'Theme, Copyright Info && Comments'))
self.song_tab_widget.setTabText(self.song_tab_widget.indexOf(self.audio_tab),
- translate('SongsPlugin.EditSongForm', 'Linked Audio'))
+ translate('SongsPlugin.EditSongForm', 'Linked Audio'))
self.from_file_button.setText(translate('SongsPlugin.EditSongForm', 'Add &File(s)'))
self.from_media_button.setText(translate('SongsPlugin.EditSongForm', 'Add &Media'))
self.audio_remove_button.setText(translate('SongsPlugin.EditSongForm', '&Remove'))
=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py 2013-12-28 21:33:38 +0000
+++ openlp/plugins/songs/forms/editsongform.py 2014-03-04 20:20:38 +0000
@@ -131,6 +131,12 @@
self.authors_list_view.addItem(author_item)
def _extract_verse_order(self, verse_order):
+ """
+ Split out the verse order
+
+ :param verse_order: The starting verse order
+ :return: revised order
+ """
order = []
order_names = str(verse_order).split()
for item in order_names:
@@ -153,6 +159,13 @@
return order
def _validate_verse_list(self, verse_order, verse_count):
+ """
+ Check the verse order list has valid verses
+
+ :param verse_order: Verse order
+ :param verse_count: number of verses
+ :return: Count of invalid verses
+ """
verses = []
invalid_verses = []
verse_names = []
@@ -171,12 +184,12 @@
valid = create_separated_list(verse_names)
if len(invalid_verses) > 1:
msg = translate('SongsPlugin.EditSongForm', 'There are no verses corresponding to "%(invalid)s".'
- 'Valid entries are %(valid)s.\nPlease enter the verses seperated by spaces.') \
- % {'invalid' : ', '.join(invalid_verses), 'valid' : valid}
+ 'Valid entries are %(valid)s.\nPlease enter the verses separated by spaces.') % \
+ {'invalid': ', '.join(invalid_verses), 'valid' : valid}
else:
msg = translate('SongsPlugin.EditSongForm', 'There is no verse corresponding to "%(invalid)s".'
- 'Valid entries are %(valid)s.\nPlease enter the verses seperated by spaces.') \
- % {'invalid' : invalid_verses[0], 'valid' : valid}
+ 'Valid entries are %(valid)s.\nPlease enter the verses separated by spaces.') % \
+ {'invalid': invalid_verses[0], 'valid' : valid}
critical_error_message_box(title=translate('SongsPlugin.EditSongForm', 'Invalid Verse Order'),
message=msg)
return len(invalid_verses) == 0
@@ -213,7 +226,8 @@
return False
text = self.song_book_combo_box.currentText()
if self.song_book_combo_box.findText(text, QtCore.Qt.MatchExactly) < 0:
- if QtGui.QMessageBox.question(self, translate('SongsPlugin.EditSongForm', 'Add Book'),
+ if QtGui.QMessageBox.question(
+ self, translate('SongsPlugin.EditSongForm', 'Add Book'),
translate('SongsPlugin.EditSongForm', 'This song book does not exist, do you want to add it?'),
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
book = Book.populate(name=text, publisher='')
@@ -250,17 +264,16 @@
def keyPressEvent(self, event):
"""
- Reimplement the keyPressEvent to react on Return/Enter keys. When some combo boxes have focus we do not want
+ Re-implement the keyPressEvent to react on Return/Enter keys. When some combo boxes have focus we do not want
dialog's default action be triggered but instead our own.
- ``event``
- A QtGui.QKeyEvent event.
+ :param event: A QtGui.QKeyEvent event.
"""
if event.key() in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return):
if self.authors_combo_box.hasFocus() and self.authors_combo_box.currentText():
self.on_author_add_button_clicked()
return
- if self.topicsComboBox.hasFocus() and self.topicsComboBox.currentText():
+ if self.topics_combo_box.hasFocus() and self.topics_combo_box.currentText():
self.on_topic_add_button_clicked()
return
QtGui.QDialog.keyPressEvent(self, event)
@@ -294,7 +307,7 @@
Load the topics into the combobox.
"""
self.topics = []
- self._load_objects(Topic, self.topicsComboBox, self.topics)
+ self._load_objects(Topic, self.topics_combo_box, self.topics)
def load_books(self):
"""
@@ -321,7 +334,7 @@
for plugin in self.plugin_manager.plugins:
if plugin.name == 'media' and plugin.status == PluginStatus.Active:
self.from_media_button.setVisible(True)
- self.media_form.populateFiles(plugin.media_item.get_list(MediaType.Audio))
+ self.media_form.populate_files(plugin.media_item.get_list(MediaType.Audio))
break
def new_song(self):
@@ -358,11 +371,8 @@
"""
Loads a song.
- ``song_id``
- The song id (int).
-
- ``preview``
- Should be ``True`` if the song is also previewed (boolean).
+ :param song_id: The song id (int).
+ :param preview: Should be ``True`` if the song is also previewed (boolean).
"""
log.debug('Load Song')
self.initialise()
@@ -396,8 +406,8 @@
self.verse_list_widget.setRowCount(0)
verse_tags_translated = False
if self.song.lyrics.startswith('<?xml version='):
- songXML = SongXML()
- verse_list = songXML.get_verses(self.song.lyrics)
+ song_xml = SongXML()
+ verse_list = song_xml.get_verses(self.song.lyrics)
for count, verse in enumerate(verse_list):
self.verse_list_widget.setRowCount(self.verse_list_widget.rowCount() + 1)
# This silently migrates from localized verse type markup.
@@ -487,20 +497,21 @@
item = int(self.authors_combo_box.currentIndex())
text = self.authors_combo_box.currentText().strip(' \r\n\t')
# This if statement is for OS X, which doesn't seem to work well with
- # the QCompleter autocompletion class. See bug #812628.
+ # the QCompleter auto-completion class. See bug #812628.
if text in self.authors:
# Index 0 is a blank string, so add 1
item = self.authors.index(text) + 1
if item == 0 and text:
- if QtGui.QMessageBox.question(self,
- translate('SongsPlugin.EditSongForm', 'Add Author'),
- translate('SongsPlugin.EditSongForm', 'This author does not exist, do you want to add them?'),
- QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
+ if QtGui.QMessageBox.question(
+ self,
+ translate('SongsPlugin.EditSongForm', 'Add Author'),
+ translate('SongsPlugin.EditSongForm', 'This author does not exist, do you want to add them?'),
+ QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
if text.find(' ') == -1:
author = Author.populate(first_name='', last_name='', display_name=text)
else:
- author = Author.populate(first_name=text.rsplit(' ', 1)[0],
- last_name=text.rsplit(' ', 1)[1], display_name=text)
+ author = Author.populate(first_name=text.rsplit(' ', 1)[0], last_name=text.rsplit(' ', 1)[1],
+ display_name=text)
self.manager.save_object(author)
self._add_author_to_list(author)
self.load_authors()
@@ -510,18 +521,18 @@
elif item > 0:
item_id = (self.authors_combo_box.itemData(item))
author = self.manager.get_object(Author, item_id)
- if self.authors_list_view.findItems(str(author.display_name),
- QtCore.Qt.MatchExactly):
+ if self.authors_list_view.findItems(str(author.display_name), QtCore.Qt.MatchExactly):
critical_error_message_box(
message=translate('SongsPlugin.EditSongForm', 'This author is already in the list.'))
else:
self._add_author_to_list(author)
self.authors_combo_box.setCurrentIndex(0)
else:
- QtGui.QMessageBox.warning(self, UiStrings().NISs,
+ QtGui.QMessageBox.warning(
+ self, UiStrings().NISs,
translate('SongsPlugin.EditSongForm', 'You have not selected a valid author. Either select an author '
- 'from the list, or type in a new author and click the "Add Author to Song" button to add '
- 'the new author.'))
+ 'from the list, or type in a new author and click the "Add Author to Song" button to add '
+ 'the new author.'))
def on_authors_list_view_clicked(self):
"""
@@ -540,10 +551,11 @@
self.authors_list_view.takeItem(row)
def on_topic_add_button_clicked(self):
- item = int(self.topicsComboBox.currentIndex())
- text = self.topicsComboBox.currentText()
+ item = int(self.topics_combo_box.currentIndex())
+ text = self.topics_combo_box.currentText()
if item == 0 and text:
- if QtGui.QMessageBox.question(self, translate('SongsPlugin.EditSongForm', 'Add Topic'),
+ if QtGui.QMessageBox.question(
+ self, translate('SongsPlugin.EditSongForm', 'Add Topic'),
translate('SongsPlugin.EditSongForm', 'This topic does not exist, do you want to add it?'),
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
topic = Topic.populate(name=text)
@@ -552,25 +564,26 @@
topic_item.setData(QtCore.Qt.UserRole, topic.id)
self.topics_list_view.addItem(topic_item)
self.load_topics()
- self.topicsComboBox.setCurrentIndex(0)
+ self.topics_combo_box.setCurrentIndex(0)
else:
return
elif item > 0:
- item_id = (self.topicsComboBox.itemData(item))
+ item_id = (self.topics_combo_box.itemData(item))
topic = self.manager.get_object(Topic, item_id)
- if self.topics_list_view.findItems(str(topic.name),
- QtCore.Qt.MatchExactly):
+ if self.topics_list_view.findItems(str(topic.name), QtCore.Qt.MatchExactly):
critical_error_message_box(
message=translate('SongsPlugin.EditSongForm', 'This topic is already in the list.'))
else:
topic_item = QtGui.QListWidgetItem(str(topic.name))
topic_item.setData(QtCore.Qt.UserRole, topic.id)
self.topics_list_view.addItem(topic_item)
- self.topicsComboBox.setCurrentIndex(0)
+ self.topics_combo_box.setCurrentIndex(0)
else:
- QtGui.QMessageBox.warning(self, UiStrings().NISs,
+ QtGui.QMessageBox.warning(
+ self, UiStrings().NISs,
translate('SongsPlugin.EditSongForm', 'You have not selected a valid topic. Either select a topic '
- 'from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic.'))
+ 'from the list, or type in a new topic and click the "Add Topic to Song" button to add the '
+ 'new topic.'))
def on_topic_list_view_clicked(self):
self.topic_remove_button.setEnabled(True)
@@ -588,7 +601,7 @@
def on_verse_add_button_clicked(self):
self.verse_form.set_verse('', True)
if self.verse_form.exec_():
- after_text, verse_tag, verse_num = self.verse_form.get_verse()
+ after_text, verse_tag, verse_num = self.verse_form.get_verse
verse_def = '%s%s' % (verse_tag, verse_num)
item = QtGui.QTableWidgetItem(after_text)
item.setData(QtCore.Qt.UserRole, verse_def)
@@ -606,7 +619,7 @@
verse_id = item.data(QtCore.Qt.UserRole)
self.verse_form.set_verse(temp_text, True, verse_id)
if self.verse_form.exec_():
- after_text, verse_tag, verse_num = self.verse_form.get_verse()
+ after_text, verse_tag, verse_num = self.verse_form.get_verse
verse_def = '%s%s' % (verse_tag, verse_num)
item.setData(QtCore.Qt.UserRole, verse_def)
item.setText(after_text)
@@ -628,6 +641,11 @@
self.on_verse_order_text_changed(self.verse_order_edit.text())
def on_verse_edit_all_button_clicked(self):
+ """
+ Verse edit all button (save) pressed
+
+ :return:
+ """
verse_list = ''
if self.verse_list_widget.rowCount() > 0:
for row in range(self.verse_list_widget.rowCount()):
@@ -643,7 +661,7 @@
self.verse_form.set_verse('')
if not self.verse_form.exec_():
return
- verse_list = self.verse_form.get_all_verses()
+ verse_list = self.verse_form.get_all_verses
verse_list = str(verse_list.replace('\r\n', '\n'))
self.verse_list_widget.clear()
self.verse_list_widget.setRowCount(0)
@@ -686,6 +704,10 @@
self.on_verse_order_text_changed(self.verse_order_edit.text())
def on_verse_delete_button_clicked(self):
+ """
+ Verse Delete button pressed
+
+ """
self.verse_list_widget.removeRow(self.verse_list_widget.currentRow())
if not self.verse_list_widget.selectedItems():
self.verse_edit_button.setEnabled(False)
@@ -696,8 +718,7 @@
Checks if the verse order is complete or missing. Shows a error message according to the state of the verse
order.
- ``text``
- The text of the verse order edit (ignored).
+ :param text: The text of the verse order edit (ignored).
"""
# Extract all verses which were used in the order.
verses_in_order = self._extract_verse_order(self.verse_order_edit.text())
@@ -719,6 +740,9 @@
self.warning_label.setText(label_text)
def on_copyright_insert_button_triggered(self):
+ """
+ Copyright insert button pressed
+ """
text = self.copyright_edit.text()
pos = self.copyright_edit.cursorPosition()
sign = SongStrings.CopyrightSymbol
@@ -728,6 +752,9 @@
self.copyright_edit.setCursorPosition(pos + len(sign))
def on_maintenance_button_clicked(self):
+ """
+ Maintenance button pressed
+ """
temp_song_book = None
item = int(self.song_book_combo_box.currentIndex())
text = self.song_book_combo_box.currentText()
@@ -745,8 +772,7 @@
Save and Preview button clicked.
The Song is valid so as the plugin to add it to preview to see.
- ``button``
- A button (QPushButton).
+ :param button: A button (QPushButton).
"""
log.debug('onPreview')
if button.objectName() == 'preview_button':
@@ -758,9 +784,9 @@
Loads file(s) from the filesystem.
"""
filters = '%s (*)' % UiStrings().AllFiles
- filenames = FileDialog.getOpenFileNames(self,
- translate('SongsPlugin.EditSongForm', 'Open File(s)'), '', filters)
- for filename in filenames:
+ file_names = FileDialog.getOpenFileNames(self, translate('SongsPlugin.EditSongForm', 'Open File(s)'), '',
+ filters)
+ for filename in file_names:
item = QtGui.QListWidgetItem(os.path.split(str(filename))[1])
item.setData(QtCore.Qt.UserRole, filename)
self.audio_list_widget.addItem(item)
@@ -770,7 +796,7 @@
Loads file(s) from the media plugin.
"""
if self.media_form.exec_():
- for filename in self.media_form.getSelectedFiles():
+ for filename in self.media_form.get_selected_files():
item = QtGui.QListWidgetItem(os.path.split(str(filename))[1])
item.setData(QtCore.Qt.UserRole, filename)
self.audio_list_widget.addItem(item)
@@ -814,7 +840,7 @@
def clear_caches(self):
"""
- Free up autocompletion memory on dialog exit
+ Free up auto-completion memory on dialog exit
"""
log.debug('SongEditForm.clearCaches')
self.authors = []
@@ -826,7 +852,7 @@
"""
Exit Dialog and do not save
"""
- log.debug ('SongEditForm.reject')
+ log.debug('SongEditForm.reject')
self.clear_caches()
QtGui.QDialog.reject(self)
@@ -843,13 +869,10 @@
def save_song(self, preview=False):
"""
- Get all the data from the widgets on the form, and then save it to the
- database. The form has been validated and all reference items
- (Authors, Books and Topics) have been saved before this function is
- called.
+ Get all the data from the widgets on the form, and then save it to the database. The form has been validated
+ and all reference items (Authors, Books and Topics) have been saved before this function is called.
- ``preview``
- Should be ``True`` if the song is also previewed (boolean).
+ :param preview: Should be ``True`` if the song is also previewed (boolean).
"""
# The Song() assignment. No database calls should be made while a
# Song() is in a partially complete state.
@@ -863,9 +886,9 @@
self.song.search_lyrics = ''
self.song.verse_order = ''
self.song.comments = self.comments_edit.toPlainText()
- ordertext = self.verse_order_edit.text()
+ order_text = self.verse_order_edit.text()
order = []
- for item in ordertext.split():
+ for item in order_text.split():
verse_tag = VerseType.tags[VerseType.from_translated_tag(item[0])]
verse_num = item[1:].lower()
order.append('%s%s' % (verse_tag, verse_num))
@@ -874,8 +897,7 @@
self.song.song_number = self.song_book_number_edit.text()
book_name = self.song_book_combo_box.currentText()
if book_name:
- self.song.book = self.manager.get_object_filtered(Book,
- Book.name == book_name)
+ self.song.book = self.manager.get_object_filtered(Book, Book.name == book_name)
else:
self.song.book = None
theme_name = self.theme_combo_box.currentText()
@@ -887,15 +909,15 @@
self.song.authors = []
for row in range(self.authors_list_view.count()):
item = self.authors_list_view.item(row)
- authorId = (item.data(QtCore.Qt.UserRole))
- author = self.manager.get_object(Author, authorId)
+ author_id = (item.data(QtCore.Qt.UserRole))
+ author = self.manager.get_object(Author, author_id)
if author is not None:
self.song.authors.append(author)
self.song.topics = []
for row in range(self.topics_list_view.count()):
item = self.topics_list_view.item(row)
- topicId = (item.data(QtCore.Qt.UserRole))
- topic = self.manager.get_object(Topic, topicId)
+ topic_id = (item.data(QtCore.Qt.UserRole))
+ topic = self.manager.get_object(Topic, topic_id)
if topic is not None:
self.song.topics.append(topic)
# Save the song here because we need a valid id for the audio files.
@@ -904,7 +926,7 @@
audio_files = [a.file_name for a in self.song.media_files]
log.debug(audio_files)
save_path = os.path.join(AppLocation.get_section_data_path(self.media_item.plugin.name), 'audio',
- str(self.song.id))
+ str(self.song.id))
check_directory_exists(save_path)
self.song.media_files = []
files = []
@@ -912,8 +934,8 @@
item = self.audio_list_widget.item(row)
filename = item.data(QtCore.Qt.UserRole)
if not filename.startswith(save_path):
- oldfile, filename = filename, os.path.join(save_path, os.path.split(filename)[1])
- shutil.copyfile(oldfile, filename)
+ old_file, filename = filename, os.path.join(save_path, os.path.split(filename)[1])
+ shutil.copyfile(old_file, filename)
files.append(filename)
media_file = MediaFile()
media_file.file_name = filename
=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/editversedialog.py 2014-03-04 20:20:38 +0000
@@ -86,4 +86,4 @@
self.split_button.setToolTip(UiStrings().SplitToolTip)
self.insert_button.setText(translate('SongsPlugin.EditVerseForm', '&Insert'))
self.insert_button.setToolTip(translate('SongsPlugin.EditVerseForm',
- 'Split a slide into two by inserting a verse splitter.'))
+ 'Split a slide into two by inserting a verse splitter.'))
=== modified file 'openlp/plugins/songs/forms/editverseform.py'
--- openlp/plugins/songs/forms/editverseform.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/editverseform.py 2014-03-04 20:20:38 +0000
@@ -50,16 +50,18 @@
"""
super(EditVerseForm, self).__init__(parent)
self.setupUi(self)
- self.verse_text_edit.customContextMenuRequested.connect(self.context_menu)
self.insert_button.clicked.connect(self.on_insert_button_clicked)
self.split_button.clicked.connect(self.on_split_button_clicked)
self.verse_text_edit.cursorPositionChanged.connect(self.on_cursor_position_changed)
self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed)
- def context_menu(self, point):
- item = self.serviceManagerList.itemAt(point)
-
def insert_verse(self, verse_tag, verse_num=1):
+ """
+ Insert a verse
+
+ :param verse_tag: The verse tag
+ :param verse_num: The verse number
+ """
if self.verse_text_edit.textCursor().columnNumber() != 0:
self.verse_text_edit.insertPlainText('\n')
verse_tag = VerseType.translated_name(verse_tag)
@@ -67,24 +69,36 @@
self.verse_text_edit.setFocus()
def on_split_button_clicked(self):
+ """
+ The split button has been pressed
+ """
text = self.verse_text_edit.toPlainText()
position = self.verse_text_edit.textCursor().position()
insert_string = '[---]'
if position and text[position-1] != '\n':
insert_string = '\n' + insert_string
- if position == len(text) or text[position] != '\n':
+ if position == len(text) or text[position] != '\n':
insert_string += '\n'
self.verse_text_edit.insertPlainText(insert_string)
self.verse_text_edit.setFocus()
def on_insert_button_clicked(self):
+ """
+ The insert button has been pressed
+ """
verse_type_index = self.verse_type_combo_box.currentIndex()
self.insert_verse(VerseType.tags[verse_type_index], self.verse_number_box.value())
def on_verse_type_combo_box_changed(self):
+ """
+ The verse type combo has been changed
+ """
self.update_suggested_verse_number()
def on_cursor_position_changed(self):
+ """
+ The cursor position has been changed
+ """
self.update_suggested_verse_number()
def update_suggested_verse_number(self):
@@ -117,6 +131,13 @@
self.verse_number_box.setValue(verse_num)
def set_verse(self, text, single=False, tag='%s1' % VerseType.tags[VerseType.Verse]):
+ """
+ Save the verse
+
+ :param text: The text
+ :param single: is this a single verse
+ :param tag: The tag
+ """
self.has_single_verse = single
if single:
verse_type_index = VerseType.from_tag(tag[0], None)
@@ -136,10 +157,20 @@
self.verse_text_edit.moveCursor(QtGui.QTextCursor.End)
def get_verse(self):
+ """
+ Extract the verse text
+
+ :return: The text
+ """
return self.verse_text_edit.toPlainText(), VerseType.tags[self.verse_type_combo_box.currentIndex()], \
str(self.verse_number_box.value())
def get_all_verses(self):
+ """
+ Extract all the verses
+
+ :return: The text
+ """
text = self.verse_text_edit.toPlainText()
if not text.startswith('---['):
text = '---[%s:1]---\n%s' % (VerseType.translated_names[VerseType.Verse], text)
=== modified file 'openlp/plugins/songs/forms/mediafilesdialog.py'
--- openlp/plugins/songs/forms/mediafilesdialog.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/mediafilesdialog.py 2014-03-04 20:20:38 +0000
@@ -69,5 +69,6 @@
"""
media_files_dialog.setWindowTitle(translate('SongsPlugin.MediaFilesForm', 'Select Media File(s)'))
self.select_label.setText(translate('SongsPlugin.MediaFilesForm',
- 'Select one or more audio files from the list below, and click OK to import them into this song.'))
+ 'Select one or more audio files from the list below, and click OK to import them '
+ 'into this song.'))
=== modified file 'openlp/plugins/songs/forms/mediafilesform.py'
--- openlp/plugins/songs/forms/mediafilesform.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/mediafilesform.py 2014-03-04 20:20:38 +0000
@@ -47,13 +47,13 @@
super(MediaFilesForm, self).__init__()
self.setupUi(self)
- def populateFiles(self, files):
+ def populate_files(self, files):
self.file_list_widget.clear()
for file in files:
item = QtGui.QListWidgetItem(os.path.split(file)[1])
item.setData(QtCore.Qt.UserRole, file)
self.file_list_widget.addItem(item)
- def getSelectedFiles(self):
+ def get_selected_files(self):
return [item.data(QtCore.Qt.UserRole) for item in self.file_list_widget.selectedItems()]
=== modified file 'openlp/plugins/songs/forms/songbookform.py'
--- openlp/plugins/songs/forms/songbookform.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/songbookform.py 2014-03-04 20:20:38 +0000
@@ -52,8 +52,7 @@
"""
Execute the song book form.
- ``clear``
- Clear the fields on the form before displaying it.
+ :param clear: Clear the fields on the form before displaying it.
"""
if clear:
self.name_edit.clear()
=== modified file 'openlp/plugins/songs/forms/songexportform.py'
--- openlp/plugins/songs/forms/songexportform.py 2013-12-28 21:33:38 +0000
+++ openlp/plugins/songs/forms/songexportform.py 2014-03-04 20:20:38 +0000
@@ -55,11 +55,8 @@
"""
Instantiate the wizard, and run any extra setup we need to.
- ``parent``
- The QWidget-derived parent of the wizard.
-
- ``plugin``
- The songs plugin.
+ :param parent: The QWidget-derived parent of the wizard.
+ :param plugin: The songs plugin.
"""
super(SongExportForm, self).__init__(parent, plugin, 'song_export_wizard', ':/wizards/wizard_exportsong.bmp')
self.stop_export_flag = False
@@ -82,71 +79,71 @@
"""
Song wizard specific signals.
"""
- self.availableListWidget.itemActivated.connect(self.onItemActivated)
- self.searchLineEdit.textEdited.connect(self.onSearchLineEditChanged)
- self.uncheckButton.clicked.connect(self.onUncheckButtonClicked)
- self.checkButton.clicked.connect(self.onCheckButtonClicked)
- self.directoryButton.clicked.connect(self.onDirectoryButtonClicked)
+ self.available_list_widget.itemActivated.connect(self.on_item_activated)
+ self.search_line_edit.textEdited.connect(self.on_search_line_edit_changed)
+ self.uncheck_button.clicked.connect(self.on_uncheck_button_clicked)
+ self.check_button.clicked.connect(self.on_check_button_clicked)
+ self.directory_button.clicked.connect(self.on_directory_button_clicked)
def add_custom_pages(self):
"""
Add song wizard specific pages.
"""
# The page with all available songs.
- self.availableSongsPage = QtGui.QWizardPage()
- self.availableSongsPage.setObjectName('availableSongsPage')
- self.availableSongsLayout = QtGui.QHBoxLayout(self.availableSongsPage)
- self.availableSongsLayout.setObjectName('availableSongsLayout')
- self.verticalLayout = QtGui.QVBoxLayout()
- self.verticalLayout.setObjectName('verticalLayout')
- self.availableListWidget = QtGui.QListWidget(self.availableSongsPage)
- self.availableListWidget.setObjectName('availableListWidget')
- self.verticalLayout.addWidget(self.availableListWidget)
- self.horizontalLayout = QtGui.QHBoxLayout()
- self.horizontalLayout.setObjectName('horizontalLayout')
- self.searchLabel = QtGui.QLabel(self.availableSongsPage)
- self.searchLabel.setObjectName('searchLabel')
- self.horizontalLayout.addWidget(self.searchLabel)
- self.searchLineEdit = QtGui.QLineEdit(self.availableSongsPage)
- self.searchLineEdit.setObjectName('searchLineEdit')
- self.horizontalLayout.addWidget(self.searchLineEdit)
+ self.available_songs_page = QtGui.QWizardPage()
+ self.available_songs_page.setObjectName('available_songs_page')
+ self.available_songs_layout = QtGui.QHBoxLayout(self.available_songs_page)
+ self.available_songs_layout.setObjectName('available_songs_layout')
+ self.vertical_layout = QtGui.QVBoxLayout()
+ self.vertical_layout.setObjectName('vertical_layout')
+ self.available_list_widget = QtGui.QListWidget(self.available_songs_page)
+ self.available_list_widget.setObjectName('available_list_widget')
+ self.vertical_layout.addWidget(self.available_list_widget)
+ self.horizontal_layout = QtGui.QHBoxLayout()
+ self.horizontal_layout.setObjectName('horizontal_layout')
+ self.search_label = QtGui.QLabel(self.available_songs_page)
+ self.search_label.setObjectName('search_label')
+ self.horizontal_layout.addWidget(self.search_label)
+ self.search_line_edit = QtGui.QLineEdit(self.available_songs_page)
+ self.search_line_edit.setObjectName('search_line_edit')
+ self.horizontal_layout.addWidget(self.search_line_edit)
spacer_item = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
- self.horizontalLayout.addItem(spacer_item)
- self.uncheckButton = QtGui.QPushButton(self.availableSongsPage)
- self.uncheckButton.setObjectName('uncheckButton')
- self.horizontalLayout.addWidget(self.uncheckButton)
- self.checkButton = QtGui.QPushButton(self.availableSongsPage)
- self.checkButton.setObjectName('selectButton')
- self.horizontalLayout.addWidget(self.checkButton)
- self.verticalLayout.addLayout(self.horizontalLayout)
- self.availableSongsLayout.addLayout(self.verticalLayout)
- self.addPage(self.availableSongsPage)
+ self.horizontal_layout.addItem(spacer_item)
+ self.uncheck_button = QtGui.QPushButton(self.available_songs_page)
+ self.uncheck_button.setObjectName('uncheck_button')
+ self.horizontal_layout.addWidget(self.uncheck_button)
+ self.check_button = QtGui.QPushButton(self.available_songs_page)
+ self.check_button.setObjectName('selectButton')
+ self.horizontal_layout.addWidget(self.check_button)
+ self.vertical_layout.addLayout(self.horizontal_layout)
+ self.available_songs_layout.addLayout(self.vertical_layout)
+ self.addPage(self.available_songs_page)
# The page with the selected songs.
- self.exportSongPage = QtGui.QWizardPage()
- self.exportSongPage.setObjectName('availableSongsPage')
- self.exportSongLayout = QtGui.QHBoxLayout(self.exportSongPage)
- self.exportSongLayout.setObjectName('exportSongLayout')
- self.gridLayout = QtGui.QGridLayout()
- self.gridLayout.setObjectName('gridLayout')
- self.selectedListWidget = QtGui.QListWidget(self.exportSongPage)
- self.selectedListWidget.setObjectName('selectedListWidget')
- self.gridLayout.addWidget(self.selectedListWidget, 1, 0, 1, 1)
- # FIXME: self.horizontalLayout is already defined above?!?!?
- self.horizontalLayout = QtGui.QHBoxLayout()
- self.horizontalLayout.setObjectName('horizontalLayout')
- self.directoryLabel = QtGui.QLabel(self.exportSongPage)
- self.directoryLabel.setObjectName('directoryLabel')
- self.horizontalLayout.addWidget(self.directoryLabel)
- self.directoryLineEdit = QtGui.QLineEdit(self.exportSongPage)
- self.directoryLineEdit.setObjectName('directoryLineEdit')
- self.horizontalLayout.addWidget(self.directoryLineEdit)
- self.directoryButton = QtGui.QToolButton(self.exportSongPage)
- self.directoryButton.setIcon(build_icon(':/exports/export_load.png'))
- self.directoryButton.setObjectName('directoryButton')
- self.horizontalLayout.addWidget(self.directoryButton)
- self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
- self.exportSongLayout.addLayout(self.gridLayout)
- self.addPage(self.exportSongPage)
+ self.export_song_page = QtGui.QWizardPage()
+ self.export_song_page.setObjectName('available_songs_page')
+ self.export_song_layout = QtGui.QHBoxLayout(self.export_song_page)
+ self.export_song_layout.setObjectName('export_song_layout')
+ self.grid_layout = QtGui.QGridLayout()
+ self.grid_layout.setObjectName('grid_layout')
+ self.selected_list_widget = QtGui.QListWidget(self.export_song_page)
+ self.selected_list_widget.setObjectName('selected_list_widget')
+ self.grid_layout.addWidget(self.selected_list_widget, 1, 0, 1, 1)
+ # FIXME: self.horizontal_layout is already defined above?!?!?
+ self.horizontal_layout = QtGui.QHBoxLayout()
+ self.horizontal_layout.setObjectName('horizontal_layout')
+ self.directory_label = QtGui.QLabel(self.export_song_page)
+ self.directory_label.setObjectName('directory_label')
+ self.horizontal_layout.addWidget(self.directory_label)
+ self.directory_line_edit = QtGui.QLineEdit(self.export_song_page)
+ self.directory_line_edit.setObjectName('directory_line_edit')
+ self.horizontal_layout.addWidget(self.directory_line_edit)
+ self.directory_button = QtGui.QToolButton(self.export_song_page)
+ self.directory_button.setIcon(build_icon(':/exports/export_load.png'))
+ self.directory_button.setObjectName('directory_button')
+ self.horizontal_layout.addWidget(self.directory_button)
+ self.grid_layout.addLayout(self.horizontal_layout, 0, 0, 1, 1)
+ self.export_song_layout.addLayout(self.grid_layout)
+ self.addPage(self.export_song_page)
def retranslateUi(self):
"""
@@ -154,22 +151,23 @@
"""
self.setWindowTitle(translate('SongsPlugin.ExportWizardForm', 'Song Export Wizard'))
self.title_label.setText(WizardStrings.HeaderStyle %
- translate('OpenLP.Ui', 'Welcome to the Song Export Wizard'))
+ translate('OpenLP.Ui', 'Welcome to the Song Export Wizard'))
self.information_label.setText(translate('SongsPlugin.ExportWizardForm', 'This wizard will help to'
- ' export your songs to the open and free <strong>OpenLyrics </strong> worship song format.'))
- self.availableSongsPage.setTitle(translate('SongsPlugin.ExportWizardForm', 'Select Songs'))
- self.availableSongsPage.setSubTitle(translate('SongsPlugin.ExportWizardForm',
- 'Check the songs you want to export.'))
- self.searchLabel.setText('%s:' % UiStrings().Search)
- self.uncheckButton.setText(translate('SongsPlugin.ExportWizardForm', 'Uncheck All'))
- self.checkButton.setText(translate('SongsPlugin.ExportWizardForm', 'Check All'))
- self.exportSongPage.setTitle(translate('SongsPlugin.ExportWizardForm', 'Select Directory'))
- self.exportSongPage.setSubTitle(translate('SongsPlugin.ExportWizardForm',
- 'Select the directory where you want the songs to be saved.'))
- self.directoryLabel.setText(translate('SongsPlugin.ExportWizardForm', 'Directory:'))
+ ' export your songs to the open and free <strong>OpenLyrics </strong> worship '
+ 'song format.'))
+ self.available_songs_page.setTitle(translate('SongsPlugin.ExportWizardForm', 'Select Songs'))
+ self.available_songs_page.setSubTitle(translate('SongsPlugin.ExportWizardForm',
+ 'Check the songs you want to export.'))
+ self.search_label.setText('%s:' % UiStrings().Search)
+ self.uncheck_button.setText(translate('SongsPlugin.ExportWizardForm', 'Uncheck All'))
+ self.check_button.setText(translate('SongsPlugin.ExportWizardForm', 'Check All'))
+ self.export_song_page.setTitle(translate('SongsPlugin.ExportWizardForm', 'Select Directory'))
+ self.export_song_page.setSubTitle(translate('SongsPlugin.ExportWizardForm',
+ 'Select the directory where you want the songs to be saved.'))
+ self.directory_label.setText(translate('SongsPlugin.ExportWizardForm', 'Directory:'))
self.progress_page.setTitle(translate('SongsPlugin.ExportWizardForm', 'Exporting'))
self.progress_page.setSubTitle(translate('SongsPlugin.ExportWizardForm',
- 'Please wait while your songs are exported.'))
+ 'Please wait while your songs are exported.'))
self.progress_label.setText(WizardStrings.Ready)
self.progress_bar.setFormat(WizardStrings.PercentSymbolFormat)
@@ -179,46 +177,46 @@
"""
if self.currentPage() == self.welcome_page:
return True
- elif self.currentPage() == self.availableSongsPage:
+ elif self.currentPage() == self.available_songs_page:
items = [
- item for item in self._findListWidgetItems(
- self.availableListWidget) if item.checkState()
+ item for item in self._find_list_widget_items(self.available_list_widget) if item.checkState()
]
if not items:
- critical_error_message_box(UiStrings().NISp,
+ critical_error_message_box(
+ UiStrings().NISp,
translate('SongsPlugin.ExportWizardForm', 'You need to add at least one Song to export.'))
return False
- self.selectedListWidget.clear()
+ self.selected_list_widget.clear()
# Add the songs to the list of selected songs.
for item in items:
song = QtGui.QListWidgetItem(item.text())
song.setData(QtCore.Qt.UserRole, item.data(QtCore.Qt.UserRole))
song.setFlags(QtCore.Qt.ItemIsEnabled)
- self.selectedListWidget.addItem(song)
+ self.selected_list_widget.addItem(song)
return True
- elif self.currentPage() == self.exportSongPage:
- if not self.directoryLineEdit.text():
+ elif self.currentPage() == self.export_song_page:
+ if not self.directory_line_edit.text():
critical_error_message_box(
translate('SongsPlugin.ExportWizardForm', 'No Save Location specified'),
translate('SongsPlugin.ExportWizardForm', 'You need to specify a directory.'))
return False
return True
elif self.currentPage() == self.progress_page:
- self.availableListWidget.clear()
- self.selectedListWidget.clear()
+ self.available_list_widget.clear()
+ self.selected_list_widget.clear()
return True
- def setDefaults(self):
+ def set_defaults(self):
"""
Set default form values for the song export wizard.
"""
self.restart()
self.finish_button.setVisible(False)
self.cancel_button.setVisible(True)
- self.availableListWidget.clear()
- self.selectedListWidget.clear()
- self.directoryLineEdit.clear()
- self.searchLineEdit.clear()
+ self.available_list_widget.clear()
+ self.selected_list_widget.clear()
+ self.directory_line_edit.clear()
+ self.search_line_edit.clear()
# Load the list of songs.
self.application.set_busy_cursor()
songs = self.plugin.manager.get_all_objects(Song)
@@ -233,7 +231,7 @@
item.setData(QtCore.Qt.UserRole, song)
item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
item.setCheckState(QtCore.Qt.Unchecked)
- self.availableListWidget.addItem(item)
+ self.available_list_widget.addItem(item)
self.application.set_normal_cursor()
def pre_wizard(self):
@@ -244,86 +242,81 @@
self.progress_label.setText(translate('SongsPlugin.ExportWizardForm', 'Starting export...'))
self.application.process_events()
- def performWizard(self):
+ def perform_wizard(self):
"""
- Perform the actual export. This creates an *openlyricsexport* instance
- and calls the *do_export* method.
+ Perform the actual export. This creates an *openlyricsexport* instance and calls the *do_export* method.
"""
songs = [
song.data(QtCore.Qt.UserRole)
- for song in self._findListWidgetItems(self.selectedListWidget)
+ for song in self._find_list_widget_items(self.selected_list_widget)
]
- exporter = OpenLyricsExport(self, songs, self.directoryLineEdit.text())
+ exporter = OpenLyricsExport(self, songs, self.directory_line_edit.text())
if exporter.do_export():
- self.progress_label.setText(translate('SongsPlugin.SongExportForm',
- 'Finished export. To import these files use the <strong>OpenLyrics</strong> importer.'))
+ self.progress_label.setText(
+ translate('SongsPlugin.SongExportForm',
+ 'Finished export. To import these files use the <strong>OpenLyrics</strong> importer.'))
else:
self.progress_label.setText(translate('SongsPlugin.SongExportForm', 'Your song export failed.'))
- def _findListWidgetItems(self, listWidget, text=''):
+ def _find_list_widget_items(self, list_widget, text=''):
"""
- Returns a list of *QListWidgetItem*s of the ``listWidget``. Note, that
- hidden items are included.
-
- ``listWidget``
- The widget to get all items from. (QListWidget)
-
- ``text``
- The text to search for. (unicode string)
+ Returns a list of *QListWidgetItem*s of the ``list_widget``. Note, that hidden items are included.
+
+ :param list_widget: The widget to get all items from. (QListWidget)
+ :param text: The text to search for. (unicode string)
"""
return [
- item for item in listWidget.findItems(text, QtCore.Qt.MatchContains)
+ item for item in list_widget.findItems(text, QtCore.Qt.MatchContains)
]
- def onItemActivated(self, item):
+ def on_item_activated(self, item):
"""
- Called, when an item in the *availableListWidget* has been triggered.
+ Called, when an item in the *available_list_widget* has been triggered.
The item is check if it was not checked, whereas it is unchecked when it
was checked.
- ``item``
- The *QListWidgetItem* which was triggered.
+ :param item: The *QListWidgetItem* which was triggered.
"""
item.setCheckState(
QtCore.Qt.Unchecked if item.checkState() else QtCore.Qt.Checked)
- def onSearchLineEditChanged(self, text):
+ def on_search_line_edit_changed(self, text):
"""
- The *searchLineEdit*'s text has been changed. Update the list of
+ The *search_line_edit*'s text has been changed. Update the list of
available songs. Note that any song, which does not match the ``text``
will be hidden, but not unchecked!
- ``text``
- The text of the *searchLineEdit*.
+ :param text: The text of the *search_line_edit*.
"""
search_result = [
- song for song in self._findListWidgetItems(self.availableListWidget, text)
+ song for song in self._find_list_widget_items(self.available_list_widget, text)
]
- for item in self._findListWidgetItems(self.availableListWidget):
+ for item in self._find_list_widget_items(self.available_list_widget):
item.setHidden(item not in search_result)
- def onUncheckButtonClicked(self):
- """
- The *uncheckButton* has been clicked. Set all visible songs unchecked.
- """
- for row in range(self.availableListWidget.count()):
- item = self.availableListWidget.item(row)
+ def on_uncheck_button_clicked(self):
+ """
+ The *uncheck_button* has been clicked. Set all visible songs unchecked.
+ """
+ for row in range(self.available_list_widget.count()):
+ item = self.available_list_widget.item(row)
if not item.isHidden():
item.setCheckState(QtCore.Qt.Unchecked)
- def onCheckButtonClicked(self):
- """
- The *checkButton* has been clicked. Set all visible songs checked.
- """
- for row in range(self.availableListWidget.count()):
- item = self.availableListWidget.item(row)
+ def on_check_button_clicked(self):
+ """
+ The *check_button* has been clicked. Set all visible songs checked.
+ """
+ for row in range(self.available_list_widget.count()):
+ item = self.available_list_widget.item(row)
if not item.isHidden():
item.setCheckState(QtCore.Qt.Checked)
- def onDirectoryButtonClicked(self):
- """
- Called when the *directoryButton* was clicked. Opens a dialog and writes
- the path to *directoryLineEdit*.
- """
- self.get_folder(translate('SongsPlugin.ExportWizardForm', 'Select Destination Folder'),
- self.directoryLineEdit, 'last directory export')
+ def on_directory_button_clicked(self):
+ """
+ Called when the *directory_button* was clicked. Opens a dialog and writes
+ the path to *directory_line_edit*.
+ """
+ self.get_folder(
+ translate('SongsPlugin.ExportWizardForm', 'Select Destination Folder'),
+ self.directory_line_edit, 'last directory export')
=== modified file 'openlp/plugins/songs/forms/songimportform.py'
--- openlp/plugins/songs/forms/songimportform.py 2013-12-28 21:33:38 +0000
+++ openlp/plugins/songs/forms/songimportform.py 2014-03-04 20:20:38 +0000
@@ -55,11 +55,8 @@
"""
Instantiate the wizard, and run any extra setup we need to.
- ``parent``
- The QWidget-derived parent of the wizard.
-
- ``plugin``
- The songs plugin.
+ :param parent: The QWidget-derived parent of the wizard.
+ :param plugin: The songs plugin.
"""
super(SongImportForm, self).__init__(parent, plugin, 'songImportWizard', ':/wizards/wizard_importsong.bmp')
self.clipboard = self.main_window.clipboard
@@ -72,9 +69,9 @@
super(SongImportForm, self).setupUi(image)
self.current_format = SongFormat.OpenLyrics
self.format_stack.setCurrentIndex(self.current_format)
- self.format_combo_box.currentIndexChanged.connect(self.onCurrentIndexChanged)
+ self.format_combo_box.currentIndexChanged.connect(self.on_current_index_changed)
- def onCurrentIndexChanged(self, index):
+ def on_current_index_changed(self, index):
"""
Called when the format combo box's index changed.
"""
@@ -99,10 +96,10 @@
select_mode = SongFormat.get(song_format, 'selectMode')
if select_mode == SongFormatSelect.MultipleFiles:
self.format_widgets[song_format]['addButton'].clicked.connect(self.on_add_button_clicked)
- self.format_widgets[song_format]['removeButton'].clicked.connect(self.onRemoveButtonClicked)
+ self.format_widgets[song_format]['removeButton'].clicked.connect(self.on_remove_button_clicked)
else:
self.format_widgets[song_format]['browseButton'].clicked.connect(self.on_browse_button_clicked)
- self.format_widgets[song_format]['file_path_edit'].textChanged.connect(self.onFilepathEditTextChanged)
+ self.format_widgets[song_format]['file_path_edit'].textChanged.connect(self.on_filepath_edit_text_changed)
def add_custom_pages(self):
"""
@@ -131,7 +128,7 @@
self.format_stack.setObjectName('format_stack')
self.disablable_formats = []
for self.current_format in SongFormat.get_format_list():
- self.addFileSelectItem()
+ self.add_file_select_item()
self.source_layout.addLayout(self.format_stack)
self.addPage(self.source_page)
@@ -140,33 +137,35 @@
Song wizard localisation.
"""
self.setWindowTitle(translate('SongsPlugin.ImportWizardForm', 'Song Import Wizard'))
- self.title_label.setText(WizardStrings.HeaderStyle % translate('OpenLP.Ui', 'Welcome to the Song Import Wizard'))
- self.information_label.setText(translate('SongsPlugin.ImportWizardForm',
- 'This wizard will help you to import songs from a variety of '
- 'formats. Click the next button below to start the process by selecting a format to import from.'))
+ self.title_label.setText(WizardStrings.HeaderStyle % translate('OpenLP.Ui',
+ 'Welcome to the Song Import Wizard'))
+ self.information_label.setText(
+ translate('SongsPlugin.ImportWizardForm',
+ 'This wizard will help you to import songs from a variety of formats. Click the next button '
+ 'below to start the process by selecting a format to import from.'))
self.source_page.setTitle(WizardStrings.ImportSelect)
self.source_page.setSubTitle(WizardStrings.ImportSelectLong)
self.format_label.setText(WizardStrings.FormatLabel)
- for format in SongFormat.get_format_list():
+ for format_list in SongFormat.get_format_list():
format_name, custom_combo_text, description_text, select_mode = \
- SongFormat.get(format, 'name', 'comboBoxText', 'descriptionText', 'selectMode')
+ SongFormat.get(format_list, 'name', 'comboBoxText', 'descriptionText', 'selectMode')
combo_box_text = (custom_combo_text if custom_combo_text else format_name)
- self.format_combo_box.setItemText(format, combo_box_text)
+ self.format_combo_box.setItemText(format_list, combo_box_text)
if description_text is not None:
- self.format_widgets[format]['description_label'].setText(description_text)
+ self.format_widgets[format_list]['description_label'].setText(description_text)
if select_mode == SongFormatSelect.MultipleFiles:
- self.format_widgets[format]['addButton'].setText(
+ self.format_widgets[format_list]['addButton'].setText(
translate('SongsPlugin.ImportWizardForm', 'Add Files...'))
- self.format_widgets[format]['removeButton'].setText(
+ self.format_widgets[format_list]['removeButton'].setText(
translate('SongsPlugin.ImportWizardForm', 'Remove File(s)'))
else:
- self.format_widgets[format]['browseButton'].setText(UiStrings().Browse)
+ self.format_widgets[format_list]['browseButton'].setText(UiStrings().Browse)
f_label = 'Filename:'
if select_mode == SongFormatSelect.SingleFolder:
f_label = 'Folder:'
- self.format_widgets[format]['filepathLabel'].setText(translate('SongsPlugin.ImportWizardForm', f_label))
- for format in self.disablable_formats:
- self.format_widgets[format]['disabled_label'].setText(SongFormat.get(format, 'disabledLabelText'))
+ self.format_widgets[format_list]['filepathLabel'].setText(translate('SongsPlugin.ImportWizardForm', f_label))
+ for format_list in self.disablable_formats:
+ self.format_widgets[format_list]['disabled_label'].setText(SongFormat.get(format_list, 'disabledLabelText'))
self.progress_page.setTitle(WizardStrings.Importing)
self.progress_page.setSubTitle(
translate('SongsPlugin.ImportWizardForm', 'Please wait while your songs are imported.'))
@@ -179,7 +178,7 @@
labels = [self.format_widgets[f]['filepathLabel'] for f in formats]
# Get max width of all labels
max_label_width = max(self.format_label.minimumSizeHint().width(),
- max([label.minimumSizeHint().width() for label in labels]))
+ max([label.minimumSizeHint().width() for label in labels]))
self.format_spacer.changeSize(max_label_width, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
spacers = [self.format_widgets[f]['filepathSpacer'] for f in formats]
for index, spacer in enumerate(spacers):
@@ -187,9 +186,9 @@
max_label_width - labels[index].minimumSizeHint().width(), 0,
QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
# Align descriptionLabels with rest of layout
- for format in SongFormat.get_format_list():
- if SongFormat.get(format, 'descriptionText') is not None:
- self.format_widgets[format]['descriptionSpacer'].changeSize(
+ for format_list in SongFormat.get_format_list():
+ if SongFormat.get(format_list, 'descriptionText') is not None:
+ self.format_widgets[format_list]['descriptionSpacer'].changeSize(
max_label_width + self.format_h_spacing, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
def custom_page_changed(self, page_id):
@@ -197,11 +196,11 @@
Called when changing to a page other than the progress page.
"""
if self.page(page_id) == self.source_page:
- self.onCurrentIndexChanged(self.format_stack.currentIndex())
+ self.on_current_index_changed(self.format_stack.currentIndex())
def validateCurrentPage(self):
"""
- Re-implement te validateCurrentPage() method. Validate the current page before moving on to the next page.
+ Re-implement the validateCurrentPage() method. Validate the current page before moving on to the next page.
Provide each song format class with a chance to validate its input by overriding isValidSource().
"""
if self.currentPage() == self.welcome_page:
@@ -230,37 +229,36 @@
"""
Opens a QFileDialog and writes the filenames to the given listbox.
- ``title``
- The title of the dialog (unicode).
-
- ``listbox``
- A listbox (QListWidget).
-
- ``filters``
- The file extension filters. It should contain the file descriptions
+ :param title: The title of the dialog (unicode).
+ :param listbox: A listbox (QListWidget).
+ :param filters: The file extension filters. It should contain the file descriptions
as well as the file extensions. For example::
-
u'SongBeamer Files (*.sng)'
"""
if filters:
filters += ';;'
filters += '%s (*)' % UiStrings().AllFiles
- filenames = FileDialog.getOpenFileNames(self, title,
+ file_names = FileDialog.getOpenFileNames(
+ self, title,
Settings().value(self.plugin.settings_section + '/last directory import'), filters)
- if filenames:
- listbox.addItems(filenames)
+ if file_names:
+ listbox.addItems(file_names)
Settings().setValue(self.plugin.settings_section + '/last directory import',
- os.path.split(str(filenames[0]))[0])
-
- def get_list_of_files(self, listbox):
- """
- Return a list of file from the listbox
- """
- return [listbox.item(i).text() for i in range(listbox.count())]
+ os.path.split(str(file_names[0]))[0])
+
+ def get_list_of_files(self, list_box):
+ """
+ Return a list of file from the list_box
+
+ :param list_box: The source list box
+ """
+ return [list_box.item(i).text() for i in range(list_box.count())]
def remove_selected_items(self, list_box):
"""
Remove selected list_box items
+
+ :param list_box: the source list box
"""
for item in list_box.selectedItems():
item = list_box.takeItem(list_box.row(item))
@@ -291,14 +289,14 @@
self.get_files(title, self.format_widgets[this_format]['file_list_widget'], ext_filter)
self.source_page.emit(QtCore.SIGNAL('completeChanged()'))
- def onRemoveButtonClicked(self):
+ def on_remove_button_clicked(self):
"""
Remove a file from the list.
"""
self.remove_selected_items(self.format_widgets[self.current_format]['file_list_widget'])
self.source_page.emit(QtCore.SIGNAL('completeChanged()'))
- def onFilepathEditTextChanged(self):
+ def on_filepath_edit_text_changed(self):
"""
Called when the content of the Filename/Folder edit box changes.
"""
@@ -315,12 +313,12 @@
if last_import_type < 0 or last_import_type >= self.format_combo_box.count():
last_import_type = 0
self.format_combo_box.setCurrentIndex(last_import_type)
- for format in SongFormat.get_format_list():
- select_mode = SongFormat.get(format, 'selectMode')
+ for format_list in SongFormat.get_format_list():
+ select_mode = SongFormat.get(format_list, 'selectMode')
if select_mode == SongFormatSelect.MultipleFiles:
- self.format_widgets[format]['file_list_widget'].clear()
+ self.format_widgets[format_list]['file_list_widget'].clear()
else:
- self.format_widgets[format]['file_path_edit'].setText('')
+ self.format_widgets[format_list]['file_path_edit'].setText('')
self.error_report_text_edit.clear()
self.error_report_text_edit.setHidden(True)
self.error_copy_to_button.setHidden(True)
@@ -334,22 +332,22 @@
self.progress_label.setText(WizardStrings.StartingImport)
self.application.process_events()
- def performWizard(self):
+ def perform_wizard(self):
"""
- Perform the actual import. This method pulls in the correct importer
- class, and then runs the ``doImport`` method of the importer to do
- the actual importing.
+ Perform the actual import. This method pulls in the correct importer class, and then runs the ``doImport``
+ method of the importer to do the actual importing.
"""
source_format = self.current_format
select_mode = SongFormat.get(source_format, 'selectMode')
if select_mode == SongFormatSelect.SingleFile:
- importer = self.plugin.importSongs(source_format,
- filename=self.format_widgets[source_format]['file_path_edit'].text())
+ importer = self.plugin.import_songs(source_format,
+ filename=self.format_widgets[source_format]['file_path_edit'].text())
elif select_mode == SongFormatSelect.SingleFolder:
- importer = self.plugin.importSongs(source_format,
- folder=self.format_widgets[source_format]['file_path_edit'].text())
+ importer = self.plugin.import_songs(source_format,
+ folder=self.format_widgets[source_format]['file_path_edit'].text())
else:
- importer = self.plugin.importSongs(source_format,
+ importer = self.plugin.import_songs(
+ source_format,
filenames=self.get_list_of_files(self.format_widgets[source_format]['file_list_widget']))
importer.doImport()
self.progress_label.setText(WizardStrings.FinishedImport)
@@ -364,15 +362,15 @@
"""
Save the error report to a file.
"""
- filename = QtGui.QFileDialog.getSaveFileName(self,
- Settings().value(self.plugin.settings_section + '/last directory import'))
+ filename = QtGui.QFileDialog.getSaveFileName(
+ self, Settings().value(self.plugin.settings_section + '/last directory import'))
if not filename:
return
report_file = codecs.open(filename, 'w', 'utf-8')
report_file.write(self.error_report_text_edit.toPlainText())
report_file.close()
- def addFileSelectItem(self):
+ def add_file_select_item(self):
"""
Add a file selection page.
"""
@@ -382,75 +380,75 @@
page = QtGui.QWidget()
page.setObjectName(prefix + 'Page')
if can_disable:
- importWidget = self.disablableWidget(page, prefix)
+ import_widget = self.disablable_widget(page, prefix)
else:
- importWidget = page
- importLayout = QtGui.QVBoxLayout(importWidget)
- importLayout.setMargin(0)
- importLayout.setObjectName(prefix + 'ImportLayout')
+ import_widget = page
+ import_layout = QtGui.QVBoxLayout(import_widget)
+ import_layout.setMargin(0)
+ import_layout.setObjectName(prefix + 'ImportLayout')
if description_text is not None:
- descriptionLayout = QtGui.QHBoxLayout()
- descriptionLayout.setObjectName(prefix + 'DescriptionLayout')
- descriptionSpacer = QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- descriptionLayout.addSpacerItem(descriptionSpacer)
- description_label = QtGui.QLabel(importWidget)
+ description_layout = QtGui.QHBoxLayout()
+ description_layout.setObjectName(prefix + 'DescriptionLayout')
+ description_spacer = QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+ description_layout.addSpacerItem(description_spacer)
+ description_label = QtGui.QLabel(import_widget)
description_label.setWordWrap(True)
description_label.setOpenExternalLinks(True)
description_label.setObjectName(prefix + '_description_label')
- descriptionLayout.addWidget(description_label)
- importLayout.addLayout(descriptionLayout)
+ description_layout.addWidget(description_label)
+ import_layout.addLayout(description_layout)
self.format_widgets[this_format]['description_label'] = description_label
- self.format_widgets[this_format]['descriptionSpacer'] = descriptionSpacer
+ self.format_widgets[this_format]['descriptionSpacer'] = description_spacer
if select_mode == SongFormatSelect.SingleFile or select_mode == SongFormatSelect.SingleFolder:
file_path_layout = QtGui.QHBoxLayout()
file_path_layout.setObjectName(prefix + '_file_path_layout')
file_path_layout.setContentsMargins(0, self.format_v_spacing, 0, 0)
- filepathLabel = QtGui.QLabel(importWidget)
- filepathLabel.setObjectName(prefix + 'FilepathLabel')
- file_path_layout.addWidget(filepathLabel)
- filepathSpacer = QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
- file_path_layout.addSpacerItem(filepathSpacer)
- file_path_edit = QtGui.QLineEdit(importWidget)
+ file_path_label = QtGui.QLabel(import_widget)
+ file_path_label.setObjectName(prefix + 'FilepathLabel')
+ file_path_layout.addWidget(file_path_label)
+ file_path_spacer = QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+ file_path_layout.addSpacerItem(file_path_spacer)
+ file_path_edit = QtGui.QLineEdit(import_widget)
file_path_edit.setObjectName(prefix + '_file_path_edit')
file_path_layout.addWidget(file_path_edit)
- browseButton = QtGui.QToolButton(importWidget)
- browseButton.setIcon(self.open_icon)
- browseButton.setObjectName(prefix + 'BrowseButton')
- file_path_layout.addWidget(browseButton)
- importLayout.addLayout(file_path_layout)
- importLayout.addSpacerItem(self.stack_spacer)
- self.format_widgets[this_format]['filepathLabel'] = filepathLabel
- self.format_widgets[this_format]['filepathSpacer'] = filepathSpacer
+ browse_button = QtGui.QToolButton(import_widget)
+ browse_button.setIcon(self.open_icon)
+ browse_button.setObjectName(prefix + 'BrowseButton')
+ file_path_layout.addWidget(browse_button)
+ import_layout.addLayout(file_path_layout)
+ import_layout.addSpacerItem(self.stack_spacer)
+ self.format_widgets[this_format]['filepathLabel'] = file_path_label
+ self.format_widgets[this_format]['filepathSpacer'] = file_path_spacer
self.format_widgets[this_format]['file_path_layout'] = file_path_layout
self.format_widgets[this_format]['file_path_edit'] = file_path_edit
- self.format_widgets[this_format]['browseButton'] = browseButton
+ self.format_widgets[this_format]['browseButton'] = browse_button
elif select_mode == SongFormatSelect.MultipleFiles:
- fileListWidget = QtGui.QListWidget(importWidget)
- fileListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
- fileListWidget.setObjectName(prefix + 'FileListWidget')
- importLayout.addWidget(fileListWidget)
+ file_list_widget = QtGui.QListWidget(import_widget)
+ file_list_widget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
+ file_list_widget.setObjectName(prefix + 'FileListWidget')
+ import_layout.addWidget(file_list_widget)
button_layout = QtGui.QHBoxLayout()
button_layout.setObjectName(prefix + '_button_layout')
- addButton = QtGui.QPushButton(importWidget)
- addButton.setIcon(self.open_icon)
- addButton.setObjectName(prefix + 'AddButton')
- button_layout.addWidget(addButton)
+ add_button = QtGui.QPushButton(import_widget)
+ add_button.setIcon(self.open_icon)
+ add_button.setObjectName(prefix + 'AddButton')
+ button_layout.addWidget(add_button)
button_layout.addStretch()
- removeButton = QtGui.QPushButton(importWidget)
- removeButton.setIcon(self.delete_icon)
- removeButton.setObjectName(prefix + 'RemoveButton')
- button_layout.addWidget(removeButton)
- importLayout.addLayout(button_layout)
- self.format_widgets[this_format]['file_list_widget'] = fileListWidget
+ remove_button = QtGui.QPushButton(import_widget)
+ remove_button.setIcon(self.delete_icon)
+ remove_button.setObjectName(prefix + 'RemoveButton')
+ button_layout.addWidget(remove_button)
+ import_layout.addLayout(button_layout)
+ self.format_widgets[this_format]['file_list_widget'] = file_list_widget
self.format_widgets[this_format]['button_layout'] = button_layout
- self.format_widgets[this_format]['addButton'] = addButton
- self.format_widgets[this_format]['removeButton'] = removeButton
+ self.format_widgets[this_format]['addButton'] = add_button
+ self.format_widgets[this_format]['removeButton'] = remove_button
self.format_stack.addWidget(page)
self.format_widgets[this_format]['page'] = page
- self.format_widgets[this_format]['importLayout'] = importLayout
+ self.format_widgets[this_format]['importLayout'] = import_layout
self.format_combo_box.addItem('')
- def disablableWidget(self, page, prefix):
+ def disablable_widget(self, page, prefix):
"""
Disable a widget.
"""
@@ -526,10 +524,10 @@
if wizard.format_widgets[this_format]['file_list_widget'].count() > 0:
return True
else:
- filepath = str(wizard.format_widgets[this_format]['file_path_edit'].text())
- if filepath:
- if select_mode == SongFormatSelect.SingleFile and os.path.isfile(filepath):
+ file_path = str(wizard.format_widgets[this_format]['file_path_edit'].text())
+ if file_path:
+ if select_mode == SongFormatSelect.SingleFile and os.path.isfile(file_path):
return True
- elif select_mode == SongFormatSelect.SingleFolder and os.path.isdir(filepath):
+ elif select_mode == SongFormatSelect.SingleFolder and os.path.isdir(file_path):
return True
return False
=== modified file 'openlp/plugins/songs/forms/songmaintenancedialog.py'
--- openlp/plugins/songs/forms/songmaintenancedialog.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/songmaintenancedialog.py 2014-03-04 20:20:38 +0000
@@ -161,6 +161,7 @@
self.add_book_button.setText(UiStrings().Add)
self.edit_book_button.setText(UiStrings().Edit)
self.delete_book_button.setText(UiStrings().Delete)
- typeListWidth = max(self.fontMetrics().width(SongStrings.Authors),
- self.fontMetrics().width(SongStrings.Topics), self.fontMetrics().width(SongStrings.SongBooks))
- self.type_list_widget.setFixedWidth(typeListWidth + self.type_list_widget.iconSize().width() + 32)
+ type_list_width = max(self.fontMetrics().width(SongStrings.Authors),
+ self.fontMetrics().width(SongStrings.Topics),
+ self.fontMetrics().width(SongStrings.SongBooks))
+ self.type_list_widget.setFixedWidth(type_list_width + self.type_list_widget.iconSize().width() + 32)
=== modified file 'openlp/plugins/songs/forms/songmaintenanceform.py'
--- openlp/plugins/songs/forms/songmaintenanceform.py 2013-12-28 21:33:38 +0000
+++ openlp/plugins/songs/forms/songmaintenanceform.py 2014-03-04 20:20:38 +0000
@@ -98,8 +98,7 @@
"""
Get the ID of the currently selected item.
- ``list_widget``
- The list widget to examine.
+ :param list_widget: The list widget to examine.
"""
item = list_widget.currentItem()
if item:
@@ -163,6 +162,9 @@
def check_author_exists(self, new_author, edit=False):
"""
Returns *False* if the given Author already exists, otherwise *True*.
+
+ :param new_author: The new Author.
+ :param edit: Are we editing the song?
"""
authors = self.manager.get_all_objects(
Author,
@@ -177,6 +179,9 @@
def check_topic_exists(self, new_topic, edit=False):
"""
Returns *False* if the given Topic already exists, otherwise *True*.
+
+ :param new_topic: The new Topic.
+ :param edit: Are we editing the song?
"""
topics = self.manager.get_all_objects(Topic, Topic.name == new_topic.name)
return self.__check_object_exists(topics, new_topic, edit)
@@ -184,17 +189,21 @@
def check_song_book_exists(self, new_book, edit=False):
"""
Returns *False* if the given Topic already exists, otherwise *True*.
+
+ :param new_book: The new Book.
+ :param edit: Are we editing the song?
"""
- books = self.manager.get_all_objects(Book,
- and_(Book.name == new_book.name, Book.publisher == new_book.publisher))
+ books = self.manager.get_all_objects(
+ Book, and_(Book.name == new_book.name, Book.publisher == new_book.publisher))
return self.__check_object_exists(books, new_book, edit)
def __check_object_exists(self, existing_objects, new_object, edit):
"""
Utility method to check for an existing object.
- ``edit``
- If we edit an item, this should be *True*.
+ :param existing_objects: The objects reference
+ :param new_object: An individual object
+ :param edit: If we edit an item, this should be *True*.
"""
if existing_objects:
# If we edit an existing object, we need to make sure that we do
@@ -297,8 +306,7 @@
'author %s use the existing author %s?') %
(author.display_name, temp_display_name, author.display_name), parent=self, question=True) == \
QtGui.QMessageBox.Yes:
- self._merge_objects(author, self.merge_authors,
- self.reset_authors)
+ self._merge_objects(author, self.merge_authors, self.reset_authors)
else:
# We restore the author's old first and last name as well as
# his display name.
@@ -330,15 +338,16 @@
message=translate('SongsPlugin.SongMaintenanceForm', 'Could not save your changes.'))
elif critical_error_message_box(
message=translate('SongsPlugin.SongMaintenanceForm',
- 'The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s?') %
- (topic.name, temp_name, topic.name), parent=self, question=True) == QtGui.QMessageBox.Yes:
+ 'The topic %s already exists. Would you like to make songs with topic %s use the '
+ 'existing topic %s?') % (topic.name, temp_name, topic.name),
+ parent=self, question=True) == QtGui.QMessageBox.Yes:
self._merge_objects(topic, self.merge_topics, self.reset_topics)
else:
# We restore the topics's old name.
topic.name = temp_name
critical_error_message_box(
message=translate('SongsPlugin.SongMaintenanceForm',
- 'Could not save your modified topic, because it already exists.'))
+ 'Could not save your modified topic, because it already exists.'))
def on_edit_book_button_clicked(self):
"""
@@ -367,8 +376,9 @@
message=translate('SongsPlugin.SongMaintenanceForm', 'Could not save your changes.'))
elif critical_error_message_box(
message=translate('SongsPlugin.SongMaintenanceForm',
- 'The book %s already exists. Would you like to make songs with book %s use the existing book %s?') %
- (book.name, temp_name, book.name), parent=self, question=True) == QtGui.QMessageBox.Yes:
+ 'The book %s already exists. Would you like to make '
+ 'songs with book %s use the existing book %s?') % (book.name, temp_name, book.name),
+ parent=self, question=True) == QtGui.QMessageBox.Yes:
self._merge_objects(book, self.merge_song_books, self.reset_song_books)
else:
# We restore the book's old name and publisher.
@@ -390,8 +400,7 @@
"""
Merges two authors into one author.
- ``old_author``
- The object, which was edited, that will be deleted
+ :param old_author: The object, which was edited, that will be deleted
"""
# Find the duplicate.
existing_author = self.manager.get_object_filtered(
@@ -418,15 +427,11 @@
"""
Merges two topics into one topic.
- ``old_topic``
- The object, which was edited, that will be deleted
+ :param old_topic: The object, which was edited, that will be deleted
"""
# Find the duplicate.
existing_topic = self.manager.get_object_filtered(
- Topic,
- and_(
- Topic.name == old_topic.name, Topic.id != old_topic.id
- )
+ Topic, and_(Topic.name == old_topic.name, Topic.id != old_topic.id)
)
# Find the songs, which have the old_topic as topic.
songs = self.manager.get_all_objects(Song, Song.topics.contains(old_topic))
@@ -467,30 +472,34 @@
Delete the author if the author is not attached to any songs.
"""
self._delete_item(Author, self.authors_list_widget, self.reset_authors,
- translate('SongsPlugin.SongMaintenanceForm', 'Delete Author'),
- translate('SongsPlugin.SongMaintenanceForm', 'Are you sure you want to delete the selected author?'),
- translate('SongsPlugin.SongMaintenanceForm',
- 'This author cannot be deleted, they are currently assigned to at least one song.'))
+ translate('SongsPlugin.SongMaintenanceForm', 'Delete Author'),
+ translate('SongsPlugin.SongMaintenanceForm',
+ 'Are you sure you want to delete the selected author?'),
+ translate('SongsPlugin.SongMaintenanceForm',
+ 'This author cannot be deleted, they are currently assigned to at least one song'
+ '.'))
def on_delete_topic_button_clicked(self):
"""
Delete the Book if the Book is not attached to any songs.
"""
self._delete_item(Topic, self.topics_list_widget, self.reset_topics,
- translate('SongsPlugin.SongMaintenanceForm', 'Delete Topic'),
- translate('SongsPlugin.SongMaintenanceForm', 'Are you sure you want to delete the selected topic?'),
- translate('SongsPlugin.SongMaintenanceForm',
- 'This topic cannot be deleted, it is currently assigned to at least one song.'))
+ translate('SongsPlugin.SongMaintenanceForm', 'Delete Topic'),
+ translate('SongsPlugin.SongMaintenanceForm',
+ 'Are you sure you want to delete the selected topic?'),
+ translate('SongsPlugin.SongMaintenanceForm',
+ 'This topic cannot be deleted, it is currently assigned to at least one song.'))
def on_delete_book_button_clicked(self):
"""
Delete the Book if the Book is not attached to any songs.
"""
self._delete_item(Book, self.song_books_list_widget, self.reset_song_books,
- translate('SongsPlugin.SongMaintenanceForm', 'Delete Book'),
- translate('SongsPlugin.SongMaintenanceForm', 'Are you sure you want to delete the selected book?'),
- translate('SongsPlugin.SongMaintenanceForm',
- 'This book cannot be deleted, it is currently assigned to at least one song.'))
+ translate('SongsPlugin.SongMaintenanceForm', 'Delete Book'),
+ translate('SongsPlugin.SongMaintenanceForm',
+ 'Are you sure you want to delete the selected book?'),
+ translate('SongsPlugin.SongMaintenanceForm',
+ 'This book cannot be deleted, it is currently assigned to at least one song.'))
def on_authors_list_row_changed(self, row):
"""
=== modified file 'openlp/plugins/songs/forms/songreviewwidget.py'
--- openlp/plugins/songs/forms/songreviewwidget.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/songreviewwidget.py 2014-03-04 20:20:38 +0000
@@ -186,7 +186,7 @@
# Some pixels are missing at the bottom of the table, but all themes I tried still allowed
# to read the last verse line, so I'll just leave it at that.
self.song_info_verse_list_widget.setFixedHeight(self.song_info_verse_list_widget.verticalHeader().length() +
- self.song_info_verse_list_widget.verticalHeader().offset() + 6)
+ self.song_info_verse_list_widget.verticalHeader().offset() + 6)
self.song_group_box_layout.addWidget(self.song_info_verse_list_widget)
self.song_group_box_layout.addStretch()
self.song_vertical_layout.addWidget(self.song_group_box)
=== modified file 'openlp/plugins/songs/forms/topicsform.py'
--- openlp/plugins/songs/forms/topicsform.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/forms/topicsform.py 2014-03-04 20:20:38 +0000
@@ -62,8 +62,8 @@
Override the inherited method to check before we close.
"""
if not self.name_edit.text():
- critical_error_message_box(message=translate('SongsPlugin.TopicsForm',
- 'You need to type in a topic name.'))
+ critical_error_message_box(
+ message=translate('SongsPlugin.TopicsForm', 'You need to type in a topic name.'))
self.name_edit.setFocus()
return False
else:
=== modified file 'openlp/plugins/songs/lib/importer.py'
--- openlp/plugins/songs/lib/importer.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/lib/importer.py 2014-03-04 20:20:38 +0000
@@ -107,7 +107,7 @@
``u'prefix'``
Prefix for Qt objects. Use mixedCase, e.g. ``u'openLyrics'``
- See ``SongImportForm.addFileSelectItem()``
+ See ``SongImportForm.add_file_select_item()``
Optional attributes for each song format:
=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py 2013-12-24 08:56:50 +0000
+++ openlp/plugins/songs/songsplugin.py 2014-03-04 20:20:38 +0000
@@ -54,26 +54,23 @@
log = logging.getLogger(__name__)
-__default_settings__ = {
- 'songs/db type': 'sqlite',
- 'songs/last search type': SongSearch.Entire,
- 'songs/last import type': SongFormat.OpenLyrics,
- 'songs/update service on edit': False,
- 'songs/search as type': False,
- 'songs/add song from service': True,
- 'songs/display songbar': True,
- 'songs/last directory import': '',
- 'songs/last directory export': ''
- }
+__default_settings__ = {'songs/db type': 'sqlite',
+ 'songs/last search type': SongSearch.Entire,
+ 'songs/last import type': SongFormat.OpenLyrics,
+ 'songs/update service on edit': False,
+ 'songs/search as type': False,
+ 'songs/add song from service': True,
+ 'songs/display songbar': True,
+ 'songs/last directory import': '',
+ 'songs/last directory export': ''
+ }
class SongsPlugin(Plugin):
"""
- This is the number 1 plugin, if importance were placed on any
- plugins. This plugin enables the user to create, edit and display
- songs. Songs are divided into verses, and the verse order can be
- specified. Authors, topics and song books can be assigned to songs
- as well.
+ This is the number 1 plugin, if importance were placed on any plugins. This plugin enables the user to create,
+ edit and display songs. Songs are divided into verses, and the verse order can be specified. Authors, topics and
+ song books can be assigned to songs as well.
"""
log.info('Song Plugin loaded')
@@ -94,6 +91,9 @@
return self.manager.session is not None
def initialise(self):
+ """
+ Lets Initialise the plugin
+ """
log.info('Songs Initialising')
super(SongsPlugin, self).initialise()
self.song_import_item.setVisible(True)
@@ -108,15 +108,13 @@
def add_import_menu_item(self, import_menu):
"""
- Give the Songs plugin the opportunity to add items to the
- **Import** menu.
+ Give the Songs plugin the opportunity to add items to the **Import** menu.
- ``import_menu``
- The actual **Import** menu item, so that your actions can
- use it as their parent.
+ :param import_menu: The actual **Import** menu item, so that your actions can use it as their parent.
"""
# Main song import menu item - will eventually be the only one
- self.song_import_item = create_action(import_menu, 'songImportItem',
+ self.song_import_item = create_action(
+ import_menu, 'songImportItem',
text=translate('SongsPlugin', '&Song'),
tooltip=translate('SongsPlugin', 'Import songs using the import wizard.'),
triggers=self.on_song_import_item_clicked)
@@ -124,15 +122,13 @@
def add_export_menu_Item(self, export_menu):
"""
- Give the Songs plugin the opportunity to add items to the
- **Export** menu.
+ Give the Songs plugin the opportunity to add items to the **Export** menu.
- ``export_menu``
- The actual **Export** menu item, so that your actions can
- use it as their parent.
+ :param export_menu: The actual **Export** menu item, so that your actions can use it as their parent.
"""
# Main song import menu item - will eventually be the only one
- self.song_export_item = create_action(export_menu, 'songExportItem',
+ self.song_export_item = create_action(
+ export_menu, 'songExportItem',
text=translate('SongsPlugin', '&Song'),
tooltip=translate('SongsPlugin', 'Exports songs using the export wizard.'),
triggers=self.on_song_export_item_clicked)
@@ -140,24 +136,22 @@
def add_tools_menu_item(self, tools_menu):
"""
- Give the Songs plugin the opportunity to add items to the
- **Tools** menu.
+ Give the Songs plugin the opportunity to add items to the **Tools** menu.
- ``tools_menu``
- The actual **Tools** menu item, so that your actions can
- use it as their parent.
+ :param tools_menu: The actual **Tools** menu item, so that your actions can use it as their parent.
"""
log.info('add tools menu')
- self.tools_reindex_item = create_action(tools_menu, 'toolsReindexItem',
+ self.tools_reindex_item = create_action(
+ tools_menu, 'toolsReindexItem',
text=translate('SongsPlugin', '&Re-index Songs'),
icon=':/plugins/plugin_songs.png',
statustip=translate('SongsPlugin', 'Re-index the songs database to improve searching and ordering.'),
visible=False, triggers=self.on_tools_reindex_item_triggered)
tools_menu.addAction(self.tools_reindex_item)
- self.tools_find_duplicates = create_action(tools_menu, 'toolsFindDuplicates',
+ self.tools_find_duplicates = create_action(
+ tools_menu, 'toolsFindDuplicates',
text=translate('SongsPlugin', 'Find &Duplicate Songs'),
- statustip=translate('SongsPlugin',
- 'Find and remove duplicate songs in the song database.'),
+ statustip=translate('SongsPlugin', 'Find and remove duplicate songs in the song database.'),
visible=False, triggers=self.on_tools_find_duplicates_triggered, can_shortcuts=True)
tools_menu.addAction(self.tools_find_duplicates)
@@ -165,11 +159,11 @@
"""
Rebuild each song.
"""
- maxSongs = self.manager.get_object_count(Song)
- if maxSongs == 0:
+ max_songs = self.manager.get_object_count(Song)
+ if max_songs == 0:
return
- progress_dialog = QtGui.QProgressDialog(translate('SongsPlugin', 'Reindexing songs...'), UiStrings().Cancel,
- 0, maxSongs, self.main_window)
+ progress_dialog = QtGui.QProgressDialog(
+ translate('SongsPlugin', 'Reindexing songs...'), UiStrings().Cancel, 0, max_songs, self.main_window)
progress_dialog.setWindowTitle(translate('SongsPlugin', 'Reindexing songs'))
progress_dialog.setWindowModality(QtCore.Qt.WindowModal)
songs = self.manager.get_all_objects(Song)
@@ -186,16 +180,22 @@
DuplicateSongRemovalForm(self).exec_()
def on_song_import_item_clicked(self):
+ """
+ The song import option has been selected
+ """
if self.media_item:
self.media_item.on_import_click()
def on_song_export_item_clicked(self):
+ """
+ The song export option has been selected
+ """
if self.media_item:
self.media_item.on_export_click()
def about(self):
return translate('SongsPlugin', '<strong>Songs Plugin</strong>'
- '<br />The songs plugin provides the ability to display and manage songs.')
+ '<br />The songs plugin provides the ability to display and manage songs.')
def uses_theme(self, theme):
"""
@@ -207,24 +207,27 @@
return True
return False
- def rename_theme(self, oldTheme, newTheme):
- """
- Renames a theme the song plugin is using making the plugin use the new
- name.
-
- ``oldTheme``
- The name of the theme the plugin should stop using.
-
- ``newTheme``
- The new name the plugin should now use.
- """
- songsUsingTheme = self.manager.get_all_objects(Song, Song.theme_name == oldTheme)
- for song in songsUsingTheme:
- song.theme_name = newTheme
+ def rename_theme(self, old_theme, new_theme):
+ """
+ Renames a theme the song plugin is using making the plugin use the new name.
+
+ :param old_theme: The name of the theme the plugin should stop using.
+ :param new_theme: The new name the plugin should now use.
+ """
+ songs_using_theme = self.manager.get_all_objects(Song, Song.theme_name == old_theme)
+ for song in songs_using_theme:
+ song.theme_name = new_theme
self.manager.save_object(song)
- def importSongs(self, format, **kwargs):
- class_ = SongFormat.get(format, 'class')
+ def import_songs(self, import_format, **kwargs):
+ """
+ Add the correct importer class
+
+ :param import_format: The import_format to be used
+ :param kwargs: The arguments
+ :return: the correct importer
+ """
+ class_ = SongFormat.get(import_format, 'class')
importer = class_(self.manager, **kwargs)
importer.register(self.media_item.import_wizard)
return importer
@@ -257,8 +260,7 @@
def first_time(self):
"""
- If the first time wizard has run, this function is run to import all the
- new songs into the database.
+ If the first time wizard has run, this function is run to import all the new songs into the database.
"""
self.application.process_events()
self.on_tools_reindex_item_triggered()
@@ -272,7 +274,7 @@
if sfile.startswith('songs_') and sfile.endswith('.sqlite'):
self.application.process_events()
song_dbs.append(os.path.join(db_dir, sfile))
- song_count += self._countSongs(os.path.join(db_dir, sfile))
+ song_count += self._count_songs(os.path.join(db_dir, sfile))
if not song_dbs:
return
self.application.process_events()
@@ -319,9 +321,11 @@
for song in songs:
self.manager.delete_object(Song, song.id)
- def _countSongs(self, db_file):
+ def _count_songs(self, db_file):
"""
Provide a count of the songs in the database
+
+ :param db_file: the database name to count
"""
connection = sqlite3.connect(db_file)
cursor = connection.cursor()
=== modified file 'tests/functional/openlp_plugins/presentations/test_mediaitem.py'
--- tests/functional/openlp_plugins/presentations/test_mediaitem.py 2013-12-31 12:20:11 +0000
+++ tests/functional/openlp_plugins/presentations/test_mediaitem.py 2014-03-04 20:20:38 +0000
@@ -93,11 +93,7 @@
self.media_item.build_file_mask_string()
# THEN: The file mask should be generated correctly
- self.assertIn('*.odp', self.media_item.on_new_file_masks,
- 'The file mask should contain the odp extension')
- self.assertIn('*.ppt', self.media_item.on_new_file_masks,
- 'The file mask should contain the ppt extension')
- self.assertIn('*.pdf', self.media_item.on_new_file_masks,
- 'The file mask should contain the pdf extension')
- self.assertIn('*.xps', self.media_item.on_new_file_masks,
- 'The file mask should contain the xps extension')
+ self.assertIn('*.odp', self.media_item.on_new_file_masks, 'The file mask should contain the odp extension')
+ self.assertIn('*.ppt', self.media_item.on_new_file_masks, 'The file mask should contain the ppt extension')
+ self.assertIn('*.pdf', self.media_item.on_new_file_masks, 'The file mask should contain the pdf extension')
+ self.assertIn('*.xps', self.media_item.on_new_file_masks, 'The file mask should contain the xps extension')
=== modified file 'tests/functional/openlp_plugins/presentations/test_pdfcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_pdfcontroller.py 2013-12-31 12:15:18 +0000
+++ tests/functional/openlp_plugins/presentations/test_pdfcontroller.py 2014-03-04 20:20:38 +0000
@@ -77,7 +77,7 @@
def constructor_test(self):
"""
- Test the Constructor
+ Test the Constructor from the PdfController
"""
# GIVEN: No presentation controller
controller = None
@@ -90,7 +90,7 @@
def load_pdf_test(self):
"""
- Test loading of a Pdf
+ Test loading of a Pdf using the PdfController
"""
# GIVEN: A Pdf-file
test_file = os.path.join(TEST_RESOURCES_PATH, 'presentations', 'pdf_test1.pdf')
=== modified file 'tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py 2013-11-16 10:16:06 +0000
+++ tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py 2014-03-04 20:20:38 +0000
@@ -29,7 +29,7 @@
"""
This module contains tests for the pptviewcontroller module of the Presentations plugin.
"""
-
+import os
from unittest import TestCase
from tests.functional import MagicMock, patch
@@ -43,6 +43,7 @@
# start_process(self)
# kill
+
class TestPptviewDocument(TestCase):
"""
Test the PptviewDocument Class
@@ -78,8 +79,8 @@
'openlp.plugins.presentations.lib.pptviewcontroller.PresentationDocument.get_temp_folder')
self.presentation_document_setup_patcher = patch(
'openlp.plugins.presentations.lib.pptviewcontroller.PresentationDocument._setup')
- self.rect_patcher = patch('openlp.plugins.presentations.lib.pptviewcontroller.RECT')
self.screen_list_patcher = patch('openlp.plugins.presentations.lib.pptviewcontroller.ScreenList')
+ self.rect_patcher = MagicMock()
self.mock_os = self.os_patcher.start()
self.mock_pptview_document_create_thumbnails = self.pptview_document_create_thumbnails_patcher.start()
@@ -118,12 +119,14 @@
self.mock_controller.process.OpenPPT.return_value = 0
instance = PptviewDocument(self.mock_controller, self.mock_presentation)
instance.filepath = 'test\path.ppt'
- result = instance.load_presentation()
-
- # THEN: PptviewDocument.load_presentation should return True
- self.assertTrue(result)
-
- def load_presentation_unsuccesfull_test(self):
+
+ if os.name == 'nt':
+ result = instance.load_presentation()
+
+ # THEN: PptviewDocument.load_presentation should return True
+ self.assertTrue(result)
+
+ def load_presentation_un_succesfull_test(self):
"""
Test the PptviewDocument.load_presentation() method when the temporary directory does not exist and the PPT is
not successfully opened
@@ -136,8 +139,9 @@
self.mock_controller.process.OpenPPT.return_value = -1
instance = PptviewDocument(self.mock_controller, self.mock_presentation)
instance.filepath = 'test\path.ppt'
- result = instance.load_presentation()
+ if os.name == 'nt':
+ result = instance.load_presentation()
- # THEN: The temporary directory should be created and PptviewDocument.load_presentation should return False
- self.mock_os.makedirs.assert_called_once_with('temp folder')
- self.assertFalse(result)
+ # THEN: The temporary directory should be created and PptviewDocument.load_presentation should return False
+ self.mock_os.makedirs.assert_called_once_with('temp folder')
+ self.assertFalse(result)
=== modified file 'tests/functional/openlp_plugins/presentations/test_presentationcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_presentationcontroller.py 2014-02-11 21:07:06 +0000
+++ tests/functional/openlp_plugins/presentations/test_presentationcontroller.py 2014-03-04 20:20:38 +0000
@@ -34,6 +34,7 @@
from openlp.plugins.presentations.lib.presentationcontroller import PresentationController, PresentationDocument
from tests.functional import MagicMock, patch
+
class TestPresentationController(TestCase):
"""
Test the PresentationController.
@@ -65,6 +66,7 @@
self.assertEqual('PresentationController', controller.name,
'The name of the presentation controller should be correct')
+
class TestPresentationDocument(TestCase):
"""
Test the PresentationDocument Class
@@ -101,12 +103,12 @@
"""
Set up the patches and mocks need for all tests.
"""
- self.check_directory_exists_patcher = patch(
- 'openlp.plugins.presentations.lib.presentationcontroller.check_directory_exists')
- self.get_thumbnail_folder_patcher = patch(
- 'openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument.get_thumbnail_folder')
- self._setup_patcher = patch(
- 'openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument._setup')
+ self.check_directory_exists_patcher = \
+ patch('openlp.plugins.presentations.lib.presentationcontroller.check_directory_exists')
+ self.get_thumbnail_folder_patcher = \
+ patch('openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument.get_thumbnail_folder')
+ self._setup_patcher = \
+ patch('openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument._setup')
self.mock_check_directory_exists = self.check_directory_exists_patcher.start()
self.mock_get_thumbnail_folder = self.get_thumbnail_folder_patcher.start()
@@ -124,29 +126,29 @@
self.get_thumbnail_folder_patcher.stop()
self._setup_patcher.stop()
- def initalise_presentation_document_test(self):
+ def initialise_presentation_document_test(self):
"""
- Test the PresentationDocument __init__ method when initalising the PresentationDocument Class
+ Test the PresentationDocument __init__ method when initialising the PresentationDocument Class
"""
# GIVEN: A reset mock_setup and mocked controller
self.mock_setup.reset()
# WHEN: Creating an instance of PresentationDocument
- instance = PresentationDocument(self.mock_controller, 'Name')
+ PresentationDocument(self.mock_controller, 'Name')
# THEN: PresentationDocument.__init__ should have been called with the correct arguments
self.mock_setup.assert_called_once_with('Name')
def presentation_document_setup_test(self):
"""
- Test the PresentationDocument _setup method when initalising the PresentationDocument Class
+ Test the PresentationDocument _setup method when initialising the PresentationDocument Class
"""
self._setup_patcher.stop()
# GIVEN: A mocked controller, patched check_directory_exists_patcher and patched get_thumbnail_folder method
# WHEN: Creating an instance of PresentationDocument
- instance = PresentationDocument(self.mock_controller, 'Name')
+ PresentationDocument(self.mock_controller, 'Name')
# THEN: check_directory_exists should have been called with the correct arguments
self.mock_check_directory_exists.assert_called_once_with('returned/path/')
Follow ups