147
147
for author in authors:
148
148
row = self.authorsComboBox.count()
149
149
self.authorsComboBox.addItem(author.display_name)
150
self.authorsComboBox.setItemData(
151
row, QtCore.QVariant(author.id))
150
self.authorsComboBox.setItemData(row, author.id)
152
151
self.authors.append(author.display_name)
153
152
set_case_insensitive_completer(self.authors, self.authorsComboBox)
168
167
row = combo.count()
169
168
combo.addItem(object.name)
170
169
cache.append(object.name)
171
combo.setItemData(row, QtCore.QVariant(object.id))
170
combo.setItemData(row, object.id)
172
171
set_case_insensitive_completer(cache, combo)
174
173
def loadThemes(self, theme_list):
278
277
verse[0][u'label'] = u'1'
279
278
verse_def = u'%s%s' % (verse[0][u'type'], verse[0][u'label'])
280
279
item = QtGui.QTableWidgetItem(verse[1])
281
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))
280
item.setData(QtCore.Qt.UserRole, verse_def)
282
281
self.verseListWidget.setItem(count, 0, item)
284
283
verses = self.song.lyrics.split(u'\n\n')
288
287
item = QtGui.QTableWidgetItem(verse)
289
288
verse_def = u'%s%s' % \
290
289
(VerseType.Tags[VerseType.Verse], unicode(count + 1))
291
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))
290
item.setData(QtCore.Qt.UserRole, verse_def)
292
291
self.verseListWidget.setItem(count, 0, item)
293
292
if self.song.verse_order:
294
293
# we translate verse order
310
309
self.authorsListView.clear()
311
310
for author in self.song.authors:
312
311
author_name = QtGui.QListWidgetItem(unicode(author.display_name))
313
author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
312
author_name.setData(QtCore.Qt.UserRole, author.id)
314
313
self.authorsListView.addItem(author_name)
315
314
# clear the results
316
315
self.topicsListView.clear()
317
316
for topic in self.song.topics:
318
317
topic_name = QtGui.QListWidgetItem(unicode(topic.name))
319
topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id))
318
topic_name.setData(QtCore.Qt.UserRole, topic.id)
320
319
self.topicsListView.addItem(topic_name)
321
320
self.audioListWidget.clear()
322
321
for media in self.song.media_files:
323
322
media_file = QtGui.QListWidgetItem(
324
323
os.path.split(media.file_name)[1])
325
media_file.setData(QtCore.Qt.UserRole,
326
QtCore.QVariant(media.file_name))
324
media_file.setData(QtCore.Qt.UserRole, media.file_name)
327
325
self.audioListWidget.addItem(media_file)
328
326
self.titleEdit.setFocus()
329
327
# Hide or show the preview button.
337
335
for row in range(self.verseListWidget.rowCount()):
338
336
item = self.verseListWidget.item(row, 0)
339
verse_def = unicode(item.data(QtCore.Qt.UserRole).toString())
337
verse_def = item.data(QtCore.Qt.UserRole)
340
338
verse_tag = VerseType.translated_tag(verse_def[0])
341
339
row_def = u'%s%s' % (verse_tag, verse_def[1:])
342
340
row_label.append(row_def)
347
345
def onAuthorAddButtonClicked(self):
348
346
item = int(self.authorsComboBox.currentIndex())
349
text = unicode(self.authorsComboBox.currentText()).strip(u' \r\n\t')
347
text = self.authorsComboBox.currentText().strip(u' \r\n\t')
350
348
# This if statement is for OS X, which doesn't seem to work well with
351
349
# the QCompleter autocompletion class. See bug #812628.
352
350
if text in self.authors:
375
item_id = (self.authorsComboBox.itemData(item)).toInt()[0]
373
item_id = (self.authorsComboBox.itemData(item))
376
374
author = self.manager.get_object(Author, item_id)
377
375
if self.authorsListView.findItems(unicode(author.display_name),
378
376
QtCore.Qt.MatchExactly):
394
392
Add an author to the author list.
396
394
author_item = QtGui.QListWidgetItem(unicode(author.display_name))
397
author_item.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
395
author_item.setData(QtCore.Qt.UserRole, author.id)
398
396
self.authorsListView.addItem(author_item)
400
398
def onAuthorsListViewClicked(self):
410
408
def onTopicAddButtonClicked(self):
411
409
item = int(self.topicsComboBox.currentIndex())
412
text = unicode(self.topicsComboBox.currentText())
410
text = self.topicsComboBox.currentText()
413
411
if item == 0 and text:
414
412
if QtGui.QMessageBox.question(self,
415
413
translate('SongsPlugin.EditSongForm', 'Add Topic'),
420
418
topic = Topic.populate(name=text)
421
419
self.manager.save_object(topic)
422
420
topic_item = QtGui.QListWidgetItem(unicode(topic.name))
423
topic_item.setData(QtCore.Qt.UserRole,
424
QtCore.QVariant(topic.id))
421
topic_item.setData(QtCore.Qt.UserRole, topic.id)
425
422
self.topicsListView.addItem(topic_item)
426
423
self.loadTopics()
427
424
self.topicsComboBox.setCurrentIndex(0)
431
item_id = (self.topicsComboBox.itemData(item)).toInt()[0]
428
item_id = (self.topicsComboBox.itemData(item))
432
429
topic = self.manager.get_object(Topic, item_id)
433
430
if self.topicsListView.findItems(unicode(topic.name),
434
431
QtCore.Qt.MatchExactly):
437
434
'This topic is already in the list.'))
439
436
topic_item = QtGui.QListWidgetItem(unicode(topic.name))
440
topic_item.setData(QtCore.Qt.UserRole,
441
QtCore.QVariant(topic.id))
437
topic_item.setData(QtCore.Qt.UserRole, topic.id)
442
438
self.topicsListView.addItem(topic_item)
443
439
self.topicsComboBox.setCurrentIndex(0)
467
463
after_text, verse_tag, verse_num = self.verseForm.getVerse()
468
464
verse_def = u'%s%s' % (verse_tag, verse_num)
469
465
item = QtGui.QTableWidgetItem(after_text)
470
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))
466
item.setData(QtCore.Qt.UserRole, verse_def)
471
467
item.setText(after_text)
472
468
self.verseListWidget.setRowCount(
473
469
self.verseListWidget.rowCount() + 1)
481
477
item = self.verseListWidget.currentItem()
483
479
temp_text = item.text()
484
verse_id = unicode(item.data(QtCore.Qt.UserRole).toString())
480
verse_id = item.data(QtCore.Qt.UserRole)
485
481
self.verseForm.setVerse(temp_text, True, verse_id)
486
482
if self.verseForm.exec_():
487
483
after_text, verse_tag, verse_num = self.verseForm.getVerse()
488
484
verse_def = u'%s%s' % (verse_tag, verse_num)
489
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def))
485
item.setData(QtCore.Qt.UserRole, verse_def)
490
486
item.setText(after_text)
491
487
# number of lines has changed, repaint the list moving the data
492
488
if len(temp_text.split(u'\n')) != len(after_text.split(u'\n')):
510
506
if self.verseListWidget.rowCount() > 0:
511
507
for row in range(self.verseListWidget.rowCount()):
512
508
item = self.verseListWidget.item(row, 0)
513
field = unicode(item.data(QtCore.Qt.UserRole).toString())
509
field = item.data(QtCore.Qt.UserRole)
514
510
verse_tag = VerseType.translated_name(field[0])
515
511
verse_num = field[1:]
516
512
verse_list += u'---[%s:%s]---\n' % (verse_tag, verse_num)
554
550
if parts.endswith(u'\n'):
555
551
parts = parts.rstrip(u'\n')
556
552
item = QtGui.QTableWidgetItem(parts)
557
item.setData(QtCore.Qt.UserRole,
558
QtCore.QVariant(verse_def))
553
item.setData(QtCore.Qt.UserRole, verse_def)
559
554
self.verseListWidget.setRowCount(
560
555
self.verseListWidget.rowCount() + 1)
561
556
self.verseListWidget.setItem(
578
573
order = self.__extractVerseOrder(text)
579
574
for index in range(self.verseListWidget.rowCount()):
580
575
verse = self.verseListWidget.item(index, 0)
581
verse = unicode(verse.data(QtCore.Qt.UserRole).toString())
576
verse = verse.data(QtCore.Qt.UserRole)
582
577
if verse not in verse_names:
583
578
verses.append(verse)
584
579
verse_names.append(u'%s%s' % (
619
614
order = self.__extractVerseOrder(verse_order)
620
615
for index in range(verse_count):
621
616
verse = self.verseListWidget.item(index, 0)
622
verse = unicode(verse.data(QtCore.Qt.UserRole).toString())
617
verse = verse.data(QtCore.Qt.UserRole)
623
618
if verse not in verse_names:
624
619
verses.append(verse)
625
620
verse_names.append(u'%s%s' % (
630
625
if invalid_verses:
631
626
valid = create_separated_list(verse_names)
632
627
if len(invalid_verses) > 1:
633
critical_error_message_box(message=unicode(translate(
628
critical_error_message_box(message=translate(
634
629
'SongsPlugin.EditSongForm', 'The verse order is invalid. '
635
630
'There are no verses corresponding to %s. Valid entries '
636
'are %s.')) % (u', '.join(invalid_verses), valid))
631
'are %s.') % (u', '.join(invalid_verses), valid))
638
critical_error_message_box(message=unicode(translate(
633
critical_error_message_box(message=translate(
639
634
'SongsPlugin.EditSongForm', 'The verse order is invalid. '
640
635
'There is no verse corresponding to %s. Valid entries '
641
'are %s.')) % (invalid_verses[0], valid))
636
'are %s.') % (invalid_verses[0], valid))
642
637
return len(invalid_verses) == 0
644
639
def __validateSong(self):
675
670
self.verseListWidget.rowCount())
678
text = unicode(self.songBookComboBox.currentText())
673
text = self.songBookComboBox.currentText()
679
674
if self.songBookComboBox.findText(text, QtCore.Qt.MatchExactly) < 0:
680
675
if QtGui.QMessageBox.question(self,
681
676
translate('SongsPlugin.EditSongForm', 'Add Book'),
701
696
def onMaintenanceButtonClicked(self):
702
697
temp_song_book = None
703
698
item = int(self.songBookComboBox.currentIndex())
704
text = unicode(self.songBookComboBox.currentText())
699
text = self.songBookComboBox.currentText()
705
700
if item == 0 and text:
706
701
temp_song_book = text
707
702
self.mediaitem.songMaintenanceForm.exec_(True)
731
726
filters = u'%s (*)' % UiStrings().AllFiles
732
727
filenames = QtGui.QFileDialog.getOpenFileNames(self,
733
translate('SongsPlugin.EditSongForm', 'Open File(s)'),
734
QtCore.QString(), filters)
728
translate('SongsPlugin.EditSongForm', 'Open File(s)'), u'', filters)
735
729
for filename in filenames:
736
730
item = QtGui.QListWidgetItem(os.path.split(unicode(filename))[1])
737
731
item.setData(QtCore.Qt.UserRole, filename)
829
823
# Song() is in a partially complete state.
830
824
if not self.song:
831
825
self.song = Song()
832
self.song.title = unicode(self.titleEdit.text())
833
self.song.alternate_title = unicode(self.alternativeEdit.text())
834
self.song.copyright = unicode(self.copyrightEdit.text())
826
self.song.title = self.titleEdit.text()
827
self.song.alternate_title = self.alternativeEdit.text()
828
self.song.copyright = self.copyrightEdit.text()
835
829
# Values will be set when cleaning the song.
836
830
self.song.search_title = u''
837
831
self.song.search_lyrics = u''
838
832
self.song.verse_order = u''
839
self.song.comments = unicode(self.commentsEdit.toPlainText())
840
ordertext = unicode(self.verseOrderEdit.text())
833
self.song.comments = self.commentsEdit.toPlainText()
834
ordertext = self.verseOrderEdit.text()
842
836
for item in ordertext.split():
843
837
verse_tag = VerseType.Tags[VerseType.from_translated_tag(item[0])]
844
838
verse_num = item[1:].lower()
845
839
order.append(u'%s%s' % (verse_tag, verse_num))
846
840
self.song.verse_order = u' '.join(order)
847
self.song.ccli_number = unicode(self.CCLNumberEdit.text())
848
self.song.song_number = unicode(self.songBookNumberEdit.text())
849
book_name = unicode(self.songBookComboBox.currentText())
841
self.song.ccli_number = self.CCLNumberEdit.text()
842
self.song.song_number = self.songBookNumberEdit.text()
843
book_name = self.songBookComboBox.currentText()
851
845
self.song.book = self.manager.get_object_filtered(Book,
852
846
Book.name == book_name)
854
848
self.song.book = None
855
theme_name = unicode(self.themeComboBox.currentText())
849
theme_name = self.themeComboBox.currentText()
857
851
self.song.theme_name = theme_name
861
855
self.song.authors = []
862
856
for row in xrange(self.authorsListView.count()):
863
857
item = self.authorsListView.item(row)
864
authorId = (item.data(QtCore.Qt.UserRole)).toInt()[0]
858
authorId = (item.data(QtCore.Qt.UserRole))
865
859
author = self.manager.get_object(Author, authorId)
866
860
if author is not None:
867
861
self.song.authors.append(author)
868
862
self.song.topics = []
869
863
for row in xrange(self.topicsListView.count()):
870
864
item = self.topicsListView.item(row)
871
topicId = (item.data(QtCore.Qt.UserRole)).toInt()[0]
865
topicId = (item.data(QtCore.Qt.UserRole))
872
866
topic = self.manager.get_object(Topic, topicId)
873
867
if topic is not None:
874
868
self.song.topics.append(topic)
886
880
for row in xrange(self.audioListWidget.count()):
887
881
item = self.audioListWidget.item(row)
888
filename = unicode(item.data(QtCore.Qt.UserRole).toString())
882
filename = item.data(QtCore.Qt.UserRole)
889
883
if not filename.startswith(save_path):
890
884
oldfile, filename = filename, os.path.join(save_path,
891
885
os.path.split(filename)[1])
923
917
for i in range(self.verseListWidget.rowCount()):
924
918
item = self.verseListWidget.item(i, 0)
925
verse_id = unicode(item.data(QtCore.Qt.UserRole).toString())
919
verse_id = item.data(QtCore.Qt.UserRole)
926
920
verse_tag = verse_id[0]
927
921
verse_num = verse_id[1:]
928
sxml.add_verse_to_lyrics(verse_tag, verse_num,
929
unicode(item.text()))
922
sxml.add_verse_to_lyrics(verse_tag, verse_num, item.text())
930
923
if verse_num > u'1' and verse_tag not in multiple:
931
924
multiple.append(verse_tag)
932
925
self.song.lyrics = unicode(sxml.extract_xml(), u'utf-8')