This commit is contained in:
Raoul Snyman 2010-07-21 19:04:32 +02:00
commit dfbc0ffb35
8 changed files with 75 additions and 64 deletions

View File

@ -287,16 +287,16 @@ class GeneralTab(SettingsTab):
Translate the general settings tab to the currently selected language Translate the general settings tab to the currently selected language
""" """
self.MonitorGroupBox.setTitle(translate('OpenLP.GeneralTab', 'Monitors')) self.MonitorGroupBox.setTitle(translate('OpenLP.GeneralTab', 'Monitors'))
self.MonitorLabel.setText( self.MonitorLabel.setText(translate('OpenLP.GeneralTab',
translate('OpenLP.GeneralTab', 'Select monitor for output display:')) 'Select monitor for output display:'))
self.DisplayOnMonitorCheck.setText( self.DisplayOnMonitorCheck.setText(
translate('OpenLP.GeneralTab', 'Display if a single screen')) translate('OpenLP.GeneralTab', 'Display if a single screen'))
self.StartupGroupBox.setTitle( self.StartupGroupBox.setTitle(
translate('OpenLP.GeneralTab', 'Application Startup')) translate('OpenLP.GeneralTab', 'Application Startup'))
self.WarningCheckBox.setText( self.WarningCheckBox.setText(
translate('OpenLP.GeneralTab', 'Show blank screen warning')) translate('OpenLP.GeneralTab', 'Show blank screen warning'))
self.AutoOpenCheckBox.setText( self.AutoOpenCheckBox.setText(translate('OpenLP.GeneralTab',
translate('OpenLP.GeneralTab', 'Automatically open the last service')) 'Automatically open the last service'))
self.ShowSplashCheckBox.setText( self.ShowSplashCheckBox.setText(
translate('OpenLP.GeneralTab', 'Show the splash screen')) translate('OpenLP.GeneralTab', 'Show the splash screen'))
self.SettingsGroupBox.setTitle( self.SettingsGroupBox.setTitle(
@ -379,10 +379,12 @@ class GeneralTab(SettingsTab):
QtCore.QVariant(self.screens.current[u'size'].x())).toString()) QtCore.QVariant(self.screens.current[u'size'].x())).toString())
self.customYValueEdit.setText(settings.value(u'y position', self.customYValueEdit.setText(settings.value(u'y position',
QtCore.QVariant(self.screens.current[u'size'].y())).toString()) QtCore.QVariant(self.screens.current[u'size'].y())).toString())
self.customHeightValueEdit.setText(settings.value(u'height', self.customHeightValueEdit.setText(
QtCore.QVariant(self.screens.current[u'size'].height())).toString()) settings.value(u'height', QtCore.QVariant(
self.customWidthValueEdit.setText(settings.value(u'width', self.screens.current[u'size'].height())).toString())
QtCore.QVariant(self.screens.current[u'size'].width())).toString()) self.customWidthValueEdit.setText(
settings.value(u'width', QtCore.QVariant(
self.screens.current[u'size'].width())).toString())
else: else:
self.customXValueEdit.setText( self.customXValueEdit.setText(
unicode(self.screens.current[u'size'].x())) unicode(self.screens.current[u'size'].x()))

View File

@ -108,8 +108,8 @@ class ServiceManager(QtGui.QWidget):
self.droppos = 0 self.droppos = 0
#is a new service and has not been saved #is a new service and has not been saved
self.isNew = True self.isNew = True
self.serviceNoteForm = ServiceNoteForm() self.serviceNoteForm = ServiceNoteForm(self.parent)
self.serviceItemEditForm = ServiceItemEditForm() self.serviceItemEditForm = ServiceItemEditForm(self.parent)
#start with the layout #start with the layout
self.Layout = QtGui.QVBoxLayout(self) self.Layout = QtGui.QVBoxLayout(self)
self.Layout.setSpacing(0) self.Layout.setSpacing(0)

View File

@ -253,15 +253,14 @@ class ThemeManager(QtGui.QWidget):
The theme to delete. The theme to delete.
""" """
self.themelist.remove(theme) self.themelist.remove(theme)
th = theme + u'.png' thumb = theme + u'.png'
try: try:
os.remove(os.path.join(self.path, th)) os.remove(os.path.join(self.path, thumb))
os.remove(os.path.join(self.thumbPath, th)) os.remove(os.path.join(self.thumbPath, thumb))
encoding = get_filesystem_encoding() encoding = get_filesystem_encoding()
shutil.rmtree(os.path.join(self.path, theme).encode(encoding)) shutil.rmtree(os.path.join(self.path, theme).encode(encoding))
except OSError: except OSError:
#if not present do not worry log.exception(u'Error deleting theme %s', theme)
pass
# As we do not reload the themes push out the change # As we do not reload the themes push out the change
# Reaload the list as the internal lists and events need # Reaload the list as the internal lists and events need
# to be triggered # to be triggered
@ -605,19 +604,21 @@ class ThemeManager(QtGui.QWidget):
if newThemeIndex != -1: if newThemeIndex != -1:
self.serviceComboBox.setCurrentIndex(newThemeIndex) self.serviceComboBox.setCurrentIndex(newThemeIndex)
if self.editingDefault: if self.editingDefault:
newThemeItem = self.ThemeListWidget.findItems(name, if self.saveThemeName != name:
QtCore.Qt.MatchExactly)[0] newThemeItem = self.ThemeListWidget.findItems(name,
newThemeIndex = self.ThemeListWidget.indexFromItem( QtCore.Qt.MatchExactly)[0]
newThemeItem).row() newThemeIndex = self.ThemeListWidget.indexFromItem(
self.global_theme = unicode( newThemeItem).row()
self.ThemeListWidget.item(newThemeIndex).text()) self.global_theme = unicode(
newName = unicode(translate('ThemeManager', '%s (default)')) % \ self.ThemeListWidget.item(newThemeIndex).text())
self.global_theme newName = unicode(translate('ThemeManager',
self.ThemeListWidget.item(newThemeIndex).setText(newName) '%s (default)')) % self.global_theme
QtCore.QSettings().setValue( self.ThemeListWidget.item(newThemeIndex).setText(newName)
self.settingsSection + u'/global theme', QtCore.QSettings().setValue(
QtCore.QVariant(self.global_theme)) self.settingsSection + u'/global theme',
Receiver.send_message(u'theme_update_global', self.global_theme) QtCore.QVariant(self.global_theme))
Receiver.send_message(u'theme_update_global',
self.global_theme)
self.editingDefault = False self.editingDefault = False
self.pushThemes() self.pushThemes()
else: else:

View File

@ -441,7 +441,8 @@ class Ui_EditSongDialog(object):
translate('SongsPlugin.EditSongForm', 'Song Book')) translate('SongsPlugin.EditSongForm', 'Song Book'))
self.SongTabWidget.setTabText( self.SongTabWidget.setTabText(
self.SongTabWidget.indexOf(self.AuthorsTab), self.SongTabWidget.indexOf(self.AuthorsTab),
translate('SongsPlugin.EditSongForm', 'Authors, Topics && Song Book')) translate('SongsPlugin.EditSongForm',
'Authors, Topics && Song Book'))
self.ThemeGroupBox.setTitle( self.ThemeGroupBox.setTitle(
translate('SongsPlugin.EditSongForm', 'Theme')) translate('SongsPlugin.EditSongForm', 'Theme'))
self.ThemeAddButton.setText( self.ThemeAddButton.setText(

View File

@ -48,7 +48,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
""" """
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.parent = parent self.parent = parent
#can this be automated? # can this be automated?
self.width = 400 self.width = 400
self.setupUi(self) self.setupUi(self)
# Connecting signals and slots # Connecting signals and slots
@ -171,7 +171,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.loadAuthors() self.loadAuthors()
self.loadTopics() self.loadTopics()
self.loadBooks() self.loadBooks()
#it's a new song to preview is not possible # it's a new song to preview is not possible
self.previewButton.setVisible(False) self.previewButton.setVisible(False)
def loadSong(self, id, preview): def loadSong(self, id, preview):
@ -221,7 +221,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.CCLNumberEdit.setText(self.song.ccli_number) self.CCLNumberEdit.setText(self.song.ccli_number)
else: else:
self.CCLNumberEdit.setText(u'') self.CCLNumberEdit.setText(u'')
#lazy xml migration for now # lazy xml migration for now
self.VerseListWidget.clear() self.VerseListWidget.clear()
self.VerseListWidget.setRowCount(0) self.VerseListWidget.setRowCount(0)
self.VerseListWidget.setColumnWidth(0, self.width) self.VerseListWidget.setColumnWidth(0, self.width)
@ -263,7 +263,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id)) topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id))
self.TopicsListView.addItem(topic_name) self.TopicsListView.addItem(topic_name)
self.TitleEditItem.setFocus(QtCore.Qt.OtherFocusReason) self.TitleEditItem.setFocus(QtCore.Qt.OtherFocusReason)
#if not preview hide the preview button # if not preview hide the preview button
self.previewButton.setVisible(False) self.previewButton.setVisible(False)
if preview: if preview:
self.previewButton.setVisible(True) self.previewButton.setVisible(True)
@ -288,11 +288,15 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if QtGui.QMessageBox.question(self, if QtGui.QMessageBox.question(self,
translate('SongsPlugin.EditSongForm', 'Add Author'), translate('SongsPlugin.EditSongForm', 'Add Author'),
translate('SongsPlugin.EditSongForm', 'This author does not ' translate('SongsPlugin.EditSongForm', 'This author does not '
'exist, do you want to add them?'), 'exist, do you want to add them?'),
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes: QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
author = Author.populate(first_name=text.rsplit(u' ', 1)[0], if text.find(u' ') == -1:
last_name=text.rsplit(u' ', 1)[1], display_name=text) author = Author.populate(first_name=u'', last_name=u'',
display_name=text)
else:
author = Author.populate(first_name=text.rsplit(u' ', 1)[0],
last_name=text.rsplit(u' ', 1)[1], display_name=text)
self.songmanager.save_object(author, False) self.songmanager.save_object(author, False)
self.song.authors.append(author) self.song.authors.append(author)
author_item = QtGui.QListWidgetItem( author_item = QtGui.QListWidgetItem(
@ -324,9 +328,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
QtGui.QMessageBox.warning(self, QtGui.QMessageBox.warning(self,
translate('SongsPlugin.EditSongForm', 'No Author Selected'), translate('SongsPlugin.EditSongForm', 'No Author Selected'),
translate('SongsPlugin.EditSongForm', 'You have not selected ' translate('SongsPlugin.EditSongForm', 'You have not selected '
'a valid author. Either select an author from the list, ' 'a valid author. Either select an author from the list, '
'or type in a new author and click the "Add Author to ' 'or type in a new author and click the "Add Author to '
'Song" button to add the new author.'), 'Song" button to add the new author.'),
QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)
def onAuthorsListViewPressed(self): def onAuthorsListViewPressed(self):
@ -349,7 +353,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if QtGui.QMessageBox.question(self, if QtGui.QMessageBox.question(self,
translate('SongsPlugin.EditSongForm', 'Add Topic'), translate('SongsPlugin.EditSongForm', 'Add Topic'),
translate('SongsPlugin.EditSongForm', 'This topic does not ' translate('SongsPlugin.EditSongForm', 'This topic does not '
'exist, do you want to add it?'), 'exist, do you want to add it?'),
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes: QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
topic = Topic.populate(name=text) topic = Topic.populate(name=text)
@ -382,9 +386,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
QtGui.QMessageBox.warning(self, QtGui.QMessageBox.warning(self,
translate('SongsPlugin.EditSongForm', 'No Topic Selected'), translate('SongsPlugin.EditSongForm', 'No Topic Selected'),
translate('SongsPlugin.EditSongForm', 'You have not selected ' translate('SongsPlugin.EditSongForm', 'You have not selected '
'a valid topic. Either select a topic from the list, or ' 'a valid topic. Either select a topic from the list, or '
'type in a new topic and click the "Add Topic to Song" ' 'type in a new topic and click the "Add Topic to Song" '
'button to add the new topic.'), 'button to add the new topic.'),
QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)
def onTopicListViewPressed(self): def onTopicListViewPressed(self):
@ -408,7 +412,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def onThemeComboChanged(self, item): def onThemeComboChanged(self, item):
if item == 0: if item == 0:
#None means no Theme # None means no Theme
self.song.theme_name = None self.song.theme_name = None
else: else:
them_name = unicode(self.ThemeSelectionComboItem.itemText(item)) them_name = unicode(self.ThemeSelectionComboItem.itemText(item))
@ -445,7 +449,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
data = u'%s:%s' % (verse, subVerse) data = u'%s:%s' % (verse, subVerse)
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data)) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data))
item.setText(afterText) item.setText(afterText)
#number of lines has change so repaint the list moving the data # number of lines has change so repaint the list moving the data
if len(tempText.split(u'\n')) != len(afterText.split(u'\n')): if len(tempText.split(u'\n')) != len(afterText.split(u'\n')):
tempList = {} tempList = {}
tempId = {} tempId = {}
@ -484,7 +488,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
for count, parts in enumerate(match.split(u']---\n')): for count, parts in enumerate(match.split(u']---\n')):
if len(parts) > 1: if len(parts) > 1:
if count == 0: if count == 0:
#make sure the tag is correctly cased # make sure the tag is correctly cased
variant = u'%s%s' % \ variant = u'%s%s' % \
(parts[0:1].upper(), parts[1:].lower()) (parts[0:1].upper(), parts[1:].lower())
else: else:
@ -521,7 +525,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
QtGui.QMessageBox.critical(self, QtGui.QMessageBox.critical(self,
translate('SongsPlugin.EditSongForm', 'Error'), translate('SongsPlugin.EditSongForm', 'Error'),
translate('SongsPlugin.EditSongForm', translate('SongsPlugin.EditSongForm',
'You need to type in a song title.')) 'You need to type in a song title.'))
return False return False
if self.VerseListWidget.rowCount() == 0: if self.VerseListWidget.rowCount() == 0:
self.SongTabWidget.setCurrentIndex(0) self.SongTabWidget.setCurrentIndex(0)
@ -529,7 +533,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
QtGui.QMessageBox.critical(self, QtGui.QMessageBox.critical(self,
translate('SongsPlugin.EditSongForm', 'Error'), translate('SongsPlugin.EditSongForm', 'Error'),
translate('SongsPlugin.EditSongForm', translate('SongsPlugin.EditSongForm',
'You need to type in at least one verse.')) 'You need to type in at least one verse.'))
return False return False
if self.AuthorsListView.count() == 0: if self.AuthorsListView.count() == 0:
self.SongTabWidget.setCurrentIndex(1) self.SongTabWidget.setCurrentIndex(1)
@ -537,8 +541,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
answer = QtGui.QMessageBox.warning(self, answer = QtGui.QMessageBox.warning(self,
translate('SongsPlugin.EditSongForm', 'Warning'), translate('SongsPlugin.EditSongForm', 'Warning'),
translate('SongsPlugin.EditSongForm', translate('SongsPlugin.EditSongForm',
'You have not added any authors for this song. Do you ' 'You have not added any authors for this song. Do you '
'want to add an author now?'), 'want to add an author now?'),
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if answer == QtGui.QMessageBox.Yes: if answer == QtGui.QMessageBox.Yes:
return False return False
@ -569,9 +573,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
QtGui.QMessageBox.critical(self, QtGui.QMessageBox.critical(self,
translate('SongsPlugin.EditSongForm', 'Error'), translate('SongsPlugin.EditSongForm', 'Error'),
unicode(translate('SongsPlugin.EditSongForm', unicode(translate('SongsPlugin.EditSongForm',
'The verse order is invalid. There is no verse ' 'The verse order is invalid. There is no verse '
'corresponding to %s. Valid entries are %s.')) % \ 'corresponding to %s. Valid entries are %s.')) % \
(order_names[count], valid)) (order_names[count], valid))
return False return False
for count, verse in enumerate(verses): for count, verse in enumerate(verses):
if verse not in order: if verse not in order:
@ -580,10 +584,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
answer = QtGui.QMessageBox.warning(self, answer = QtGui.QMessageBox.warning(self,
translate('SongsPlugin.EditSongForm', 'Warning'), translate('SongsPlugin.EditSongForm', 'Warning'),
unicode(translate('SongsPlugin.EditSongForm', unicode(translate('SongsPlugin.EditSongForm',
'You have not used %s anywhere in the verse ' 'You have not used %s anywhere in the verse '
'order. Are you sure you want to save the song ' 'order. Are you sure you want to save the song '
'like this?')) % \ 'like this?')) % verse_names[count].replace(u':', u' '),
verse_names[count].replace(u':', u' '),
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if answer == QtGui.QMessageBox.No: if answer == QtGui.QMessageBox.No:
return False return False
@ -624,10 +627,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if QtGui.QMessageBox.question(self, if QtGui.QMessageBox.question(self,
translate('SongsPlugin.EditSongForm', 'Add Book'), translate('SongsPlugin.EditSongForm', 'Add Book'),
translate('SongsPlugin.EditSongForm', 'This song book does ' translate('SongsPlugin.EditSongForm', 'This song book does '
'not exist, do you want to add it?'), 'not exist, do you want to add it?'),
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes: QtGui.QMessageBox.Yes) == QtGui.QMessageBox.Yes:
book = Book.populate(name=text) book = Book.populate(name=text, publisher=u'')
self.songmanager.save_object(book) self.songmanager.save_object(book)
self.song.book = book self.song.book = book
self.loadBooks() self.loadBooks()

View File

@ -350,6 +350,8 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
book_id = self._getCurrentItemId(self.BooksListWidget) book_id = self._getCurrentItemId(self.BooksListWidget)
if book_id != -1: if book_id != -1:
book = self.songmanager.get_object(Book, book_id) book = self.songmanager.get_object(Book, book_id)
if book.publisher is None:
book.publisher = u''
self.bookform.NameEdit.setText(book.name) self.bookform.NameEdit.setText(book.name)
self.bookform.PublisherEdit.setText(book.publisher) self.bookform.PublisherEdit.setText(book.publisher)
# Save the book's name and publisher for the case that they have to # Save the book's name and publisher for the case that they have to

View File

@ -169,7 +169,7 @@ class OpenLPSongImport(object):
else: else:
new_song.authors.append(Author.populate( new_song.authors.append(Author.populate(
display_name=u'Author Unknown')) display_name=u'Author Unknown'))
if song.song_book_id != 0: if song.book:
existing_song_book = self.master_manager.get_object_filtered( existing_song_book = self.master_manager.get_object_filtered(
Book, Book.name == song.book.name) Book, Book.name == song.book.name)
if existing_song_book: if existing_song_book:

View File

@ -195,11 +195,12 @@ class OpenSongImport(object):
versetype is not None: versetype is not None:
words = thisline words = thisline
if versenum is not None: if versenum is not None:
versetag = u'%s%s'%(versetype,versenum) versetag = u'%s%s' % (versetype, versenum)
if not verses.has_key(versetype): if not verses.has_key(versetype):
verses[versetype] = {} verses[versetype] = {}
if not verses[versetype].has_key(versenum): if not verses[versetype].has_key(versenum):
verses[versetype][versenum] = [] # storage for lines in this verse # storage for lines in this verse
verses[versetype][versenum] = []
if not verses_seen.has_key(versetag): if not verses_seen.has_key(versetag):
verses_seen[versetag] = 1 verses_seen[versetag] = 1
our_verse_order.append(versetag) our_verse_order.append(versetag)
@ -216,10 +217,11 @@ class OpenSongImport(object):
versenums = verses[versetype].keys() versenums = verses[versetype].keys()
versenums.sort() versenums.sort()
for num in versenums: for num in versenums:
versetag = u'%s%s' %(versetype,num) versetag = u'%s%s' % (versetype, num)
lines = u'\n'.join(verses[versetype][num]) lines = u'\n'.join(verses[versetype][num])
self.song_import.verses.append([versetag, lines]) self.song_import.verses.append([versetag, lines])
versetags[versetag] = 1 # keep track of what we have for error checking later # Keep track of what we have for error checking later
versetags[versetag] = 1
# now figure out the presentation order # now figure out the presentation order
if u'presentation' in fields and root.presentation != u'': if u'presentation' in fields and root.presentation != u'':
order = unicode(root.presentation) order = unicode(root.presentation)