just another massive set of changes

This commit is contained in:
Mattias Põldaru 2011-02-17 21:46:01 +02:00
parent d870355064
commit dff393b6a4
7 changed files with 122 additions and 161 deletions

View File

@ -603,14 +603,15 @@ class SlideController(QtGui.QWidget):
slideHeight = 0
if self.serviceItem.is_text():
if frame[u'verseTag']:
bits = frame[u'verseTag'].split(u':')
tag = u'%s\n%s' % (bits[0][0], bits[1][0:] )
tag1 = u'%s%s' % (bits[0][0], bits[1][0:] )
row = tag
# These tags are already translated.
versetag = frame[u'verseTag']
versetag = u'%s%s' % (versetag[0].upper(), versetag[1:])
twolineTag = u'%s\n%s' % (versetag[0], versetag[1:] )
row = twolineTag
if self.isLive:
if tag1 not in self.slideList:
self.slideList[tag1] = framenumber
self.songMenu.menu().addAction(tag1,
if versetag not in self.slideList:
self.slideList[versetag] = framenumber
self.songMenu.menu().addAction(versetag,
self.onSongBarHandler)
else:
row += 1

View File

@ -230,11 +230,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if self.song.verse_order:
# we translate verse order
translated = []
for verse in self.song.verse_order.split():
verseindex = VerseType.from_tag(verse[0])
versetype = VerseType.Translations[verseindex][0]
versetag = verse[1:]
translated.append(u'%s%s' % (versetype, versetag))
for versetag in self.song.verse_order.split():
verseindex = VerseType.from_tag(versetag[0])
versetype = VerseType.TranslatedTags[verseindex]
versenum = versetag[1:]
translated.append(u'%s%s' % (versetype.upper(), versenum))
self.verseOrderEdit.setText(u' '.join(translated))
else:
self.verseOrderEdit.setText(u'')
@ -263,9 +263,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
for count, verse in enumerate(verseList):
self.verseListWidget.setRowCount(
self.verseListWidget.rowCount() + 1)
# this takes care of silently migrating from old or any markup
# if we entirely trusted the database, this should
# be unnecessary in the future
# This silently migrates from localized verse type markup.
# If we trusted the database, this would be unnecessary.
vtype = verse[0][u'type']
index = None
if len(vtype) > 1:
@ -277,7 +276,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if index is None:
index = VerseType.Other
verse[0][u'type'] = VerseType.Tags[index]
variant = u'%s:%s' % (verse[0][u'type'], verse[0][u'label'])
variant = u'%s%s' % (verse[0][u'type'], verse[0][u'label'])
item = QtGui.QTableWidgetItem(verse[1])
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(variant))
self.verseListWidget.setItem(count, 0, item)
@ -318,10 +317,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
rowLabel = []
for row in range(0, self.verseListWidget.rowCount()):
item = self.verseListWidget.item(row, 0)
data = unicode(item.data(QtCore.Qt.UserRole).toString())
bit = data.split(u':')
bit[0] = VerseType.Translations[VerseType.from_tag(bit[0])][0]
rowTag = u'%s%s' % (bit[0], bit[1])
versetag = unicode(item.data(QtCore.Qt.UserRole).toString())
versetype = VerseType.TranslatedTags[
VerseType.from_tag(versetag[0])].upper()
rowTag = u'%s%s' % (versetype, versetag[1:])
rowLabel.append(rowTag)
self.verseListWidget.setVerticalHeaderLabels(rowLabel)
@ -442,10 +441,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
def onVerseAddButtonClicked(self):
self.verse_form.setVerse(u'', True)
if self.verse_form.exec_():
afterText, verse, subVerse = self.verse_form.getVerse()
data = u'%s:%s' % (verse, subVerse)
afterText, versetype, versenum = self.verse_form.getVerse()
versetag = u'%s%s' % (versetype, versenum)
item = QtGui.QTableWidgetItem(afterText)
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data))
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(versetag))
item.setText(afterText)
self.verseListWidget.setRowCount(
self.verseListWidget.rowCount() + 1)
@ -462,9 +461,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
verseId = unicode(item.data(QtCore.Qt.UserRole).toString())
self.verse_form.setVerse(tempText, True, verseId)
if self.verse_form.exec_():
afterText, verse, subVerse = self.verse_form.getVerse()
data = u'%s:%s' % (verse, subVerse)
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data))
afterText, versetype, versenum = self.verse_form.getVerse()
versetag = u'%s%s' % (versetype, versenum)
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(versetag))
item.setText(afterText)
# number of lines has change so repaint the list moving the data
if len(tempText.split(u'\n')) != len(afterText.split(u'\n')):
@ -489,8 +488,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
for row in range(0, self.verseListWidget.rowCount()):
item = self.verseListWidget.item(row, 0)
field = unicode(item.data(QtCore.Qt.UserRole).toString())
versetype, versenum = field.split(u':')
versetype = VerseType.to_translated_string(versetype)
versetypeindex = VerseType.from_tag(field[0])
versetype = VerseType.TranslatedNames[versetypeindex]
versenum = field[1:]
verse_list += u'---[%s:%s]---\n' % (versetype, versenum)
verse_list += item.text()
verse_list += u'\n'
@ -510,15 +510,25 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
# handling carefully user inputted versetags
separator = parts.find(u':')
if separator >= 0:
verse = parts[0:separator].strip()
subVerse = parts[separator+1:].strip()
versetype = parts[0:separator].strip()
versenum = parts[separator+1:].strip()
else:
verse = parts
verseIndex = VerseType.from_loose_input(verse)
verseType = VerseType.Tags[verseIndex]
if not len(subVerse):
subVerse = u'1'
variant = u'%s:%s' % (verseType, subVerse)
versetype = parts
versenum = u'1'
verseindex = \
VerseType.from_loose_input(versetype)
if verseindex is None:
verseindex = VerseType.Verse
versetype = VerseType.Tags[verseindex]
# Later we need to handle v1a as well.
#regex = re.compile(r'(\d+\w.)')
regex = re.compile(r'\D*(\d+)\D*')
match = regex.match(versenum)
if match:
versenum = match.group(1)
else:
versenum = u'1'
variant = u'%s%s' % (versetype, versenum)
else:
if parts.endswith(u'\n'):
parts = parts.rstrip(u'\n')
@ -585,7 +595,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
order.append(u'%s%s' % (versetag, versenum))
verses = []
verse_names = []
for index in range (0, self.verseListWidget.rowCount()):
for index in range(0, self.verseListWidget.rowCount()):
verse = self.verseListWidget.item(index, 0)
verse = unicode(verse.data(QtCore.Qt.UserRole).toString())
if verse not in verse_names:
@ -609,9 +619,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if verse not in order:
self.songTabWidget.setCurrentIndex(0)
self.verseOrderEdit.setFocus()
versetype, versenum = verse_names[count].split(u':')
versetype = verse_names[count][0]
versenum = verse_names[count][1:]
verseindex = VerseType.from_tag(versetype)
versetype = VerseType.Translations[verseindex][0]
versetype = VerseType.TranslatedTags[verseindex].upper()
versename = u'%s%s' % (versetype, versenum)
answer = QtGui.QMessageBox.warning(self,
translate('SongsPlugin.EditSongForm', 'Warning'),
@ -731,7 +742,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
versetag = VerseType.Tags[
VerseType.from_translated_tag(item[0])]
versenum = item[1:].lower()
order.append(u'%s%s' % (versetag, versenum))
order.append(u'%s%s' % (versetag, versenum))
self.song.verse_order = u' '.join(order)
self.song.ccli_number = unicode(self.CCLNumberEdit.text())
self.song.song_number = unicode(self.songBookNumberEdit.text())
@ -775,12 +786,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
for i in range(0, self.verseListWidget.rowCount()):
item = self.verseListWidget.item(i, 0)
verseId = unicode(item.data(QtCore.Qt.UserRole).toString())
bits = verseId.split(u':')
sxml.add_verse_to_lyrics(bits[0], bits[1], unicode(item.text()))
versetype = verseId[0]
versenum = verseId[1:]
sxml.add_verse_to_lyrics(versetype, versenum,
unicode(item.text()))
text = text + self.whitespace.sub(u' ',
unicode(self.verseListWidget.item(i, 0).text())) + u' '
if (bits[1] > u'1') and (bits[0][0] not in multiple):
multiple.append(bits[0][0])
if (versenum > u'1') and (versetype not in multiple):
multiple.append(versetype)
self.song.search_lyrics = text.lower()
self.song.lyrics = unicode(sxml.extract_xml(), u'utf-8')
for verse in multiple:

View File

@ -70,19 +70,19 @@ class Ui_EditVerseDialog(object):
translate('SongsPlugin.EditVerseForm', 'Edit Verse'))
self.verseTypeLabel.setText(
translate('SongsPlugin.EditVerseForm', '&Verse type:'))
self.verseTypeComboBox.setItemText(0,
VerseType.Translations[VerseType.Verse])
self.verseTypeComboBox.setItemText(1,
VerseType.Translations[VerseType.Chorus])
self.verseTypeComboBox.setItemText(2,
VerseType.Translations[VerseType.Bridge])
self.verseTypeComboBox.setItemText(3,
VerseType.Translations[VerseType.PreChorus])
self.verseTypeComboBox.setItemText(4,
VerseType.Translations[VerseType.Intro])
self.verseTypeComboBox.setItemText(5,
VerseType.Translations[VerseType.Ending])
self.verseTypeComboBox.setItemText(6,
VerseType.Translations[VerseType.Other])
self.verseTypeComboBox.setItemText(VerseType.Verse,
VerseType.TranslatedNames[VerseType.Verse])
self.verseTypeComboBox.setItemText(VerseType.Chorus,
VerseType.TranslatedNames[VerseType.Chorus])
self.verseTypeComboBox.setItemText(VerseType.Bridge,
VerseType.TranslatedNames[VerseType.Bridge])
self.verseTypeComboBox.setItemText(VerseType.PreChorus,
VerseType.TranslatedNames[VerseType.PreChorus])
self.verseTypeComboBox.setItemText(VerseType.Intro,
VerseType.TranslatedNames[VerseType.Intro])
self.verseTypeComboBox.setItemText(VerseType.Ending,
VerseType.TranslatedNames[VerseType.Ending])
self.verseTypeComboBox.setItemText(VerseType.Other,
VerseType.TranslatedNames[VerseType.Other])
self.insertButton.setText(
translate('SongsPlugin.EditVerseForm', '&Insert'))

View File

@ -57,22 +57,23 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
QtCore.QObject.connect(self.verseTypeComboBox,
QtCore.SIGNAL(u'currentIndexChanged(int)'),
self.onVerseTypeComboBoxChanged)
self.verse_regex = re.compile(r'---\[(.+):(.+)\]---')
self.verse_regex = re.compile(r'---\[(.+):\D*(\d+)\D*\]---')
def contextMenu(self, point):
item = self.serviceManagerList.itemAt(point)
def insertVerse(self, title, num=1):
def insertVerse(self, versetype, num=1):
if self.verseTextEdit.textCursor().columnNumber() != 0:
self.verseTextEdit.insertPlainText(u'\n')
self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % (title, num))
versetype = VerseType.TranslatedNames[VerseTag.from_tag(versetype)]
self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % \
(versetype, num))
self.verseTextEdit.setFocus()
def onInsertButtonClicked(self):
verse_type = self.verseTypeComboBox.currentIndex()
if VerseType.to_translated_string(verse_type) is not None:
self.insertVerse(VerseType.to_translated_string(verse_type),
self.verseNumberBox.value())
vtypeindex = self.verseTypeComboBox.currentIndex()
self.insertVerse(VerseType.Tags[vtypeindex],
self.verseNumberBox.value())
def onVerseTypeComboBoxChanged(self):
"""
@ -81,7 +82,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
"""
position = self.verseTextEdit.textCursor().position()
text = unicode(self.verseTextEdit.toPlainText())
verse_type = VerseType.Translations[
verse_type = VerseType.TranslatedNames[
self.verseTypeComboBox.currentIndex()]
if not text:
return
@ -98,11 +99,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
if match:
verse_type = match.group(1)
verse_number = int(match.group(2))
verse_type_index = VerseType.from_translated_string(verse_type)
if verse_type_index is None:
verse_type_index = VerseType.from_string(verse_type)
if verse_type_index is None:
verse_type_index = VerseType.from_tag(verse_type)
verse_type_index = VerseType.from_loose_input(verse_type)
if verse_type_index is not None:
self.verseNumberBox.setValue(verse_number)
@ -128,19 +125,20 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
text = text[:position + 4]
match = self.verse_regex.match(text)
if match:
verse_type = match.group(1)
verse_number = int(match.group(2))
verse_type_index = VerseType.from_loose_input(verse_type)
if verse_type_index is not None:
self.verseTypeComboBox.setCurrentIndex(verse_type_index)
self.verseNumberBox.setValue(verse_number)
versetype = match.group(1)
vtypeindex = VerseType.from_loose_input(versetype)
regex = re.compile(r'(\d+)')
versenum = int(match.group(2))
if vtypeindex is not None:
self.verseTypeComboBox.setCurrentIndex(vtypeindex)
self.verseNumberBox.setValue(versenum)
def setVerse(self, text, single=False,
tag=u'%s:1' % VerseType.tag(VerseType.Verse)):
tag=u'%s1' % VerseType.Tags[VerseType.Verse]):
self.hasSingleVerse = single
if single:
verse_type, verse_number = tag.split(u':')
verse_type_index = VerseType.from_tag(verse_type)
verse_type_index = VerseType.from_tag(tag[0])
verse_number = tag[1:]
if verse_type_index is not None:
self.verseTypeComboBox.setCurrentIndex(verse_type_index)
self.verseNumberBox.setValue(int(verse_number))
@ -148,7 +146,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
else:
if not text:
text = u'---[%s:1]---\n' % \
VerseType.to_translated_string(VerseType.Verse)
VerseType.TranslatedNames[VerseType.Verse]
self.verseTypeComboBox.setCurrentIndex(0)
self.verseNumberBox.setValue(1)
self.insertButton.setVisible(True)
@ -165,7 +163,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
text = self.verseTextEdit.toPlainText()
if not text.startsWith(u'---['):
text = u'---[%s:1]---\n%s' % \
(VerseType.to_translated_string(VerseType.Verse), text)
(VerseType.TranslatedNames[VerseType.Verse], text)
return text
def accept(self):

View File

@ -39,14 +39,7 @@ class VerseType(object):
Intro = 4
Ending = 5
Other = 6
Tags = [
u'v',
u'c',
u'b',
u'p',
u'i',
u'e',
u'o']
Names = [
u'Verse',
u'Chorus',
@ -55,7 +48,11 @@ class VerseType(object):
u'Intro',
u'Ending',
u'Other']
Translations = [
Tags = []
for name in Names:
Tags.append(name[0].lower())
TranslatedNames = [
unicode(translate('SongsPlugin.VerseType', 'Verse')),
unicode(translate('SongsPlugin.VerseType', 'Chorus')),
unicode(translate('SongsPlugin.VerseType', 'Bridge')),
@ -63,60 +60,9 @@ class VerseType(object):
unicode(translate('SongsPlugin.VerseType', 'Intro')),
unicode(translate('SongsPlugin.VerseType', 'Ending')),
unicode(translate('SongsPlugin.VerseType', 'Other'))]
@staticmethod
def tag(verse_type):
"""
Return a string for a given VerseType tag
``verse_type``
The verse type to return a string for
"""
if isinstance(verse_type, int):
try:
return VerseType.Tags[verse_type]
except:
return
elif verse_type[0].lower() in VerseType.Tags:
return verse_type[0].lower()
@staticmethod
def to_string(verse_type):
"""
Return a string for a given VerseType Name
``verse_type``
The type to return a string for
"""
if isinstance(verse_type, int):
try:
return VerseType.Names[verse_type]
except:
return
else:
verse_type = verse_type[0].lower()
for num, tag in enumerate(VerseType.Tags):
if verse_type == tag:
return VerseType.Names[num]
@staticmethod
def to_translated_string(verse_type):
"""
Return a string for a given VerseType Name
``verse_type``
The type to return a string for
"""
if isinstance(verse_type, int):
try:
return VerseType.Translations[verse_type]
except:
return
else:
verse_type = verse_type[0].lower()
for num, tag in enumerate(VerseType.Tags):
if verse_type == tag:
return VerseType.Translations[num]
TranslatedTags = []
for name in TranslatedNames:
TranslatedTags.append(name[0].lower())
@staticmethod
def from_tag(verse_type):
@ -140,9 +86,9 @@ class VerseType(object):
The string to return a VerseType for
"""
verse_type = verse_type[0].lower()
for num, string in enumerate(VerseType.Translations):
if verse_type == string[0].lower():
return num
for vtypeIndex, vtypeTag in enumerate(VerseType.TranslatedTags):
if verse_type == vtypeTag:
return vtypeIndex
@staticmethod
def from_string(verse_type):
@ -153,9 +99,9 @@ class VerseType(object):
The string to return a VerseType for
"""
verse_type = verse_type.lower()
for num, string in enumerate(VerseType.Names):
if verse_type == string.lower():
return num
for vtypeIndex, vtypeName in enumerate(VerseType.Names):
if verse_type == vtypeName.lower():
return vtypeIndex
@staticmethod
def from_translated_string(verse_type):
@ -166,7 +112,7 @@ class VerseType(object):
The string to return a VerseType for
"""
verse_type = verse_type.lower()
for num, translation in enumerate(VerseType.Translations):
for num, translation in enumerate(VerseType.TranslatedNames):
if verse_type == translation.lower():
return num

View File

@ -346,8 +346,8 @@ class SongMediaItem(MediaManagerItem):
# no verse list or only 1 space (in error)
if not song.verse_order.strip():
for verse in verseList:
# we cannot use from_loose_input() here, because database
# is supposed to contain English lowercase singlechar tags
# We cannot use from_loose_input() here, because database
# is supposed to contain English lowercase singlechar tags.
verse_type = verse[0][u'type']
verseIndex = None
if len(verse_type) > 1:
@ -359,13 +359,12 @@ class SongMediaItem(MediaManagerItem):
verseIndex = VerseType.from_tag(verse_type)
if verseIndex is None:
verseIndex = VerseType.Other
versetype = VerseType.Translations[verseIndex][0]
verseTag = u'%s:%s' % (versetype, verse[0][u'label'])
versetype = VerseType.TranslatedTags[verseIndex].upper()
verseTag = u'%s%s' % (versetype, verse[0][u'label'])
service_item.add_from_text(
verse[1][:30], unicode(verse[1]), verseTag)
else:
# Loop through the verse list and expand the song accordingly.
print song.verse_order
for order in song.verse_order.lower().split():
if len(order) == 0:
break
@ -373,9 +372,10 @@ class SongMediaItem(MediaManagerItem):
if verse[0][u'type'][0] == order[0] and \
(verse[0][u'label'] == order[1:] or not order[1:]):
verseindex = VerseType.from_tag(verse[0][u'type'])
versetype = VerseType.Translations[verseindex][0]
verseTag = u'%s:%s' % \
(versetype, verse[0][u'label'])
versetype = VerseType.TranslatedTags[verseindex]\
.upper()
verseTag = u'%s%s' % (versetype,
verse[0][u'label'])
service_item.add_from_text(
verse[1][:30], verse[1], verseTag)
else:

View File

@ -464,7 +464,10 @@ class OpenLyrics(object):
text += u'\n'
text += u'\n'.join([unicode(line) for line in lines.line])
verse_name = self._get(verse, u'name')
verse_type = unicode(VerseType.to_string(verse_name[0]))
verse_type_index = VerseType.from_tag(verse_name[0])
if verse_type_index is None:
verse_type_index = VerseType.Other
verse_type = VerseType.Names[verse_type_index]
verse_number = re.compile(u'[a-zA-Z]*').sub(u'', verse_name)
verse_part = re.compile(u'[0-9]*').sub(u'', verse_name[1:])
# OpenLyrics allows e. g. "c", but we need "c1".