Verse Tagging

bzr-revno: 684
This commit is contained in:
Tim Bentley 2009-12-06 18:46:02 +00:00
commit fa24b21922
31 changed files with 370 additions and 338 deletions

View File

@ -97,17 +97,34 @@ def build_icon(icon):
``:/resource/file.png``, or a file location like ``/path/to/file.png``.
"""
ButtonIcon = None
if type(icon) is QtGui.QIcon:
if isinstance(icon, QtGui.QIcon):
ButtonIcon = icon
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
elif isinstance(icon, basestring):
ButtonIcon = QtGui.QIcon()
if icon.startswith(u':/'):
ButtonIcon.addPixmap(
QtGui.QPixmap(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off)
else:
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
elif type(icon) is QtGui.QImage:
if len(icon) > 2:
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
else:
#lets build a Icon from text
pmap = QtGui.QPixmap(u':/pages/slide.png')
painter = QtGui.QPainter(pmap)
painter.setPen(QtGui.QColor(QtGui.QColor.black))
font = QtGui.QFont()
font.setFamily(u'Arial')
font.setBold(True)
font.setPointSize(12)
painter.setFont(font)
metrics = QtGui.QFontMetrics(font)
painter.drawText(5, 3 + metrics.ascent(), icon)
painter.end()
ButtonIcon.addPixmap(
pmap, QtGui.QIcon.Normal, QtGui.QIcon.Off)
elif isinstance(icon, QtGui.QImage):
ButtonIcon = QtGui.QIcon()
ButtonIcon.addPixmap(
QtGui.QPixmap.fromImage(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off)

View File

@ -213,26 +213,26 @@ class MediaManagerItem(QtGui.QWidget):
self.addToolbarButton(
u'Load %s' % self.PluginNameShort,
u'%s %s' % (self.trUtf8('Load a new'), self.PluginNameVisible),
u':%s_load.png' % self.IconPath, self.onFileClick)
u':/%s_load.png' % self.IconPath, self.onFileClick)
## New Button ##
if self.hasNewIcon:
self.addToolbarButton(
u'New %s' % self.PluginNameShort,
u'%s %s' % (self.trUtf8('Add a new'), self.PluginNameVisible),
u':%s_new.png' % self.IconPath, self.onNewClick)
u':/%s_new.png' % self.IconPath, self.onNewClick)
## Edit Button ##
if self.hasEditIcon:
self.addToolbarButton(
u'Edit %s' % self.PluginNameShort,
u'%s %s' % (self.trUtf8('Edit the selected'),
self.PluginNameVisible),
u':%s_edit.png' % self.IconPath, self.onEditClick)
u':/%s_edit.png' % self.IconPath, self.onEditClick)
## Delete Button ##
if self.hasDeleteIcon:
self.addToolbarButton(
u'Delete %s' % self.PluginNameShort,
self.trUtf8('Delete the selected item'),
u':%s_delete.png' % self.IconPath, self.onDeleteClick)
u':/%s_delete.png' % self.IconPath, self.onDeleteClick)
## Separator Line ##
self.addToolbarSeparator()
## Preview ##
@ -269,7 +269,7 @@ class MediaManagerItem(QtGui.QWidget):
if self.hasEditIcon:
self.ListView.addAction(
contextMenuAction(
self.ListView, u':%s_new.png' % self.IconPath,
self.ListView, u':/%s_new.png' % self.IconPath,
u'%s %s' % (self.trUtf8('&Edit'), self.PluginNameVisible),
self.onEditClick))
self.ListView.addAction(contextMenuSeparator(self.ListView))
@ -356,33 +356,36 @@ class MediaManagerItem(QtGui.QWidget):
QtGui.QMessageBox.information(self,
self.trUtf8('No items selected...'),
self.trUtf8('You must select one or more items'))
log.debug(self.PluginNameShort + u' Preview Requested')
service_item = self.buildServiceItem()
if service_item:
service_item.fromPlugin = True
self.parent.preview_controller.addServiceItem(service_item)
else:
log.debug(self.PluginNameShort + u' Preview Requested')
service_item = self.buildServiceItem()
if service_item:
service_item.fromPlugin = True
self.parent.preview_controller.addServiceItem(service_item)
def onLiveClick(self):
if not self.ListView.selectedIndexes():
QtGui.QMessageBox.information(self,
self.trUtf8('No items selected...'),
self.trUtf8('You must select one or more items'))
log.debug(self.PluginNameShort + u' Live Requested')
service_item = self.buildServiceItem()
if service_item:
service_item.fromPlugin = True
self.parent.live_controller.addServiceItem(service_item)
else:
log.debug(self.PluginNameShort + u' Live Requested')
service_item = self.buildServiceItem()
if service_item:
service_item.fromPlugin = True
self.parent.live_controller.addServiceItem(service_item)
def onAddClick(self):
if not self.ListView.selectedIndexes() and not self.remoteTriggered:
QtGui.QMessageBox.information(self,
self.trUtf8('No items selected...'),
self.trUtf8('You must select one or more items'))
log.debug(self.PluginNameShort + u' Add Requested')
service_item = self.buildServiceItem()
if service_item:
service_item.fromPlugin = False
self.parent.service_manager.addServiceItem(service_item)
else:
log.debug(self.PluginNameShort + u' Add Requested')
service_item = self.buildServiceItem()
if service_item:
service_item.fromPlugin = False
self.parent.service_manager.addServiceItem(service_item)
def buildServiceItem(self):
"""

View File

@ -206,7 +206,7 @@ class RenderManager(object):
footer.append(u'Public Domain')
footer.append(u'CCLI 123456')
formatted = self.renderer.format_slide(verse, False)
return self.renderer.generate_frame_from_lines(formatted[0], footer)
return self.renderer.generate_frame_from_lines(formatted[0], footer)[u'main']
def format_slide(self, words):
"""

View File

@ -293,7 +293,7 @@ class ServiceItem(object):
if self.service_item_type == ServiceItemType.Text:
return self.render_individual(row)
else:
return self._raw_frames[row][u'image']
return {u'main':self._raw_frames[row][u'image'], u'trans':None}
def get_frame_title(self, row=0):
"""

View File

@ -68,21 +68,30 @@ class OpenLPToolbar(QtGui.QToolBar):
``objectname``
The name of the object, as used in `<button>.setObjectName()`.
"""
ButtonIcon = build_icon(icon)
ToolbarButton = None
if icon:
ButtonIcon = build_icon(icon)
else:
ButtonIcon = None
if ButtonIcon:
if slot and not checkable:
ToolbarButton = self.addAction(ButtonIcon, title, slot)
else:
ToolbarButton = self.addAction(ButtonIcon, title)
if tooltip:
ToolbarButton.setToolTip(tooltip)
if checkable:
ToolbarButton.setCheckable(True)
QtCore.QObject.connect(ToolbarButton,
QtCore.SIGNAL(u'toggled(bool)'), slot)
self.icons[title] = ButtonIcon
self.actions[title] = ToolbarButton
return ToolbarButton
else:
ToolbarButton = QtGui.QAction(title, ToolbarButton)
self.addAction(ToolbarButton)
QtCore.QObject.connect(ToolbarButton,
QtCore.SIGNAL(u'triggered()'), slot)
if tooltip:
ToolbarButton.setToolTip(tooltip)
if checkable:
ToolbarButton.setCheckable(True)
QtCore.QObject.connect(ToolbarButton,
QtCore.SIGNAL(u'toggled(bool)'), slot)
self.actions[title] = ToolbarButton
return ToolbarButton
def addToolbarSeparator(self, handle):
"""
@ -106,7 +115,8 @@ class OpenLPToolbar(QtGui.QToolBar):
``title``
The title of the icon to search for.
"""
if self.icons.has_key(title):
title = QtCore.QString(title)
if self.icons[title]:
return self.icons[title]
else:
self.log.error(u'getIconFromTitle - no icon for %s' % title)

View File

@ -199,10 +199,12 @@ class MainDisplay(DisplayWidget):
elif not self.displayBlank:
if transition:
if self.hasTransition:
self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame[u'trans']))
self.repaint()
self.display.setPixmap(QtGui.QPixmap.fromImage(frame[u'trans']))
self.repaint()
if self.frame[u'trans'] is not None:
self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame[u'trans']))
self.repaint()
if frame[u'trans'] is not None:
self.display.setPixmap(QtGui.QPixmap.fromImage(frame[u'trans']))
self.repaint()
self.hasTransition = True
self.display.setPixmap(QtGui.QPixmap.fromImage(frame[u'main']))
self.repaint()

View File

@ -173,7 +173,7 @@ class SlideController(QtGui.QWidget):
self.trUtf8('Move to live'), self.onGoLive)
self.Toolbar.addToolbarSeparator(u'Close Separator')
self.Toolbar.addToolbarButton(
u'Edit Song', u':songs/song_edit.png',
u'Edit Song', u':/songs/song_edit.png',
self.trUtf8('Edit and re-preview Song'), self.onEditSong)
if isLive:
self.Toolbar.addToolbarSeparator(u'Loop Separator')
@ -208,22 +208,12 @@ class SlideController(QtGui.QWidget):
self.ControllerLayout.addWidget(self.Mediabar)
# Build the Song Toolbar
if isLive:
self.Songbar = OpenLPToolbar(self)
self.Songbar.addToolbarButton(
u'Bridge', u':/pages/page_bridge.png',
self.trUtf8('Bridge'),
self.onSongBarHandler)
self.Songbar.addToolbarButton(
u'Chorus', u':/pages/page_chorus.png',
self.trUtf8('Chorus'),
self.onSongBarHandler)
for verse in range(1, 12):
self.Songbar.addToolbarButton(
unicode(verse), u':/pages/page_%s.png' % verse,
unicode(self.trUtf8('Verse %s'))%verse,
self.onSongBarHandler)
self.ControllerLayout.addWidget(self.Songbar)
self.Songbar.setVisible(False)
self.SongMenu = QtGui.QToolButton(self.Toolbar)
self.SongMenu.setText(self.trUtf8('Go to Verse'))
self.SongMenu.setPopupMode(QtGui.QToolButton.InstantPopup)
self.Toolbar.addToolbarWidget(u'Song Menu', self.SongMenu)
self.SongMenu.setMenu(QtGui.QMenu(self.trUtf8('Go to Verse'), self.Toolbar))
self.Toolbar.makeWidgetsInvisible([u'Song Menu'])
# Screen preview area
self.PreviewFrame = QtGui.QFrame(self.Splitter)
self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225))
@ -270,8 +260,6 @@ class SlideController(QtGui.QWidget):
QtCore.QObject.connect(self.PreviewListWidget,
QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
if isLive:
#QtCore.QObject.connect(self.blackPushButton,
# QtCore.SIGNAL(u'clicked(bool)'), self.onBlankScreen)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'update_spin_delay'), self.receiveSpinDelay)
Receiver.send_message(u'request_spin_delay')
@ -312,19 +300,14 @@ class SlideController(QtGui.QWidget):
pass
def onSongBarHandler(self):
request = self.sender().text()
if request == u'Bridge':
pass
elif request == u'Chorus':
pass
request = unicode(self.sender().text())
#Remember list is 1 out!
slideno = self.slideList[request]
if slideno > self.PreviewListWidget.rowCount():
self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())
else:
#Remember list is 1 out!
slideno = int(request) - 1
if slideno > self.PreviewListWidget.rowCount():
self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())
else:
self.PreviewListWidget.selectRow(slideno)
self.onSlideSelected()
self.PreviewListWidget.selectRow(slideno)
self.onSlideSelected()
def receiveSpinDelay(self, value):
self.DelaySpinBox.setValue(int(value))
@ -344,26 +327,14 @@ class SlideController(QtGui.QWidget):
Allows the live toolbar to be customised
"""
self.Toolbar.setVisible(True)
self.Songbar.setVisible(False)
self.Mediabar.setVisible(False)
self.Toolbar.makeWidgetsInvisible([u'Song Menu'])
self.Toolbar.makeWidgetsInvisible(self.image_list)
if item.is_text():
self.Toolbar.makeWidgetsInvisible(self.image_list)
if item.is_song() and \
str_to_bool(self.songsconfig.get_config(u'show songbar', True)):
for action in self.Songbar.actions:
self.Songbar.actions[action].setVisible(False)
if item.verse_order:
verses = item.verse_order.split(u' ')
# for verse in verses:
# if not verse or int(verse) > 12:
# break
# try:
# self.Songbar.actions[verse].setVisible(True)
# except:
# #More than 20 verses hard luck
# pass
self.Songbar.setVisible(True)
self.Toolbar.makeWidgetsVisible([u'Song Menu'])
elif item.is_image():
#Not sensible to allow loops with 1 frame
if len(item.get_frames()) > 1:
@ -444,6 +415,8 @@ class SlideController(QtGui.QWidget):
self.PreviewListWidget.clear()
self.PreviewListWidget.setRowCount(0)
self.PreviewListWidget.setColumnWidth(0, width)
if self.isLive:
self.SongMenu.menu().clear()
for framenumber, frame in enumerate(self.serviceItem.get_frames()):
self.PreviewListWidget.setRowCount(
self.PreviewListWidget.rowCount() + 1)
@ -451,7 +424,20 @@ class SlideController(QtGui.QWidget):
slide_height = 0
#It is a based Text Render
if self.serviceItem.is_text():
self.slideList[frame[u'verseTag']] = framenumber
if self.isLive and frame[u'verseTag'] is not None:
#only load the slot once
bits = frame[u'verseTag'].split(u':')
tag = None
if bits[0] == self.trUtf8('Verse'):
tag = u'%s%s' % (bits[0][0], bits[1][0] )
else:
tag = bits[0]
try:
test = self.slideList[tag]
except:
self.slideList[tag] = framenumber
self.SongMenu.menu().addAction(self.trUtf8(u'%s'%tag),
self.onSongBarHandler)
item.setText(frame[u'text'])
else:
label = QtGui.QLabel()
@ -524,7 +510,10 @@ class SlideController(QtGui.QWidget):
else:
before = time.time()
frame = self.serviceItem.get_rendered_frame(row)
self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[u'main']))
if isinstance(frame, QtGui.QImage):
self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
else:
self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[u'main']))
log.log(15, u'Slide Rendering took %4s' % (time.time() - before))
if self.isLive:
self.parent.mainDisplay.frameView(frame, True)

View File

@ -23,7 +23,6 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
from mediatab import MediaTab
from mediaitem import MediaMediaItem
__all__ = ['MediaTab', 'MediaMediaItem']
__all__ = ['MediaMediaItem']

View File

@ -1,51 +0,0 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2009 Raoul Snyman #
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
from PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsTab, str_to_bool
class MediaTab(SettingsTab):
"""
mediaTab is the media settings tab in the settings dialog.
"""
def __init__(self, title, section=None):
SettingsTab.__init__(self, title, section)
def setupUi(self):
self.setObjectName(u'MediaTab')
self.tabTitleVisible = self.trUtf8('Media')
#self.MediaLayout = QtGui.QFormLayout(self)
#self.MediaLayout.setObjectName(u'MediaLayout')
def retranslateUi(self):
pass
def load(self):
pass
def save(self):
pass

View File

@ -26,7 +26,7 @@
import logging
from openlp.core.lib import Plugin, build_icon
from openlp.plugins.media.lib import MediaTab, MediaMediaItem
from openlp.plugins.media.lib import MediaMediaItem
class MediaPlugin(Plugin):
global log
@ -40,9 +40,6 @@ class MediaPlugin(Plugin):
# passed with drag and drop messages
self.dnd_id = u'Media'
def get_settings_tab(self):
return MediaTab(self.name)
def initialise(self):
log.info(u'Plugin Initialising')
Plugin.initialise(self)

View File

@ -315,7 +315,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
self.VerseDeleteButton.setEnabled(True)
def onVerseAddButtonClicked(self):
self.verse_form.setVerse(u'')
self.verse_form.setVerse(u'', self.VerseListWidget.count() + 1, True)
self.verse_form.exec_()
afterText, verse, subVerse = self.verse_form.getVerse()
data = u'%s:%s' %(verse, subVerse)
@ -329,7 +329,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if item:
tempText = item.text()
verseId = unicode((item.data(QtCore.Qt.UserRole)).toString())
self.verse_form.setVerse(tempText, True, verseId)
self.verse_form.setVerse(tempText, \
self.VerseListWidget.count(), True, verseId)
self.verse_form.exec_()
afterText, verse, subVerse = self.verse_form.getVerse()
data = u'%s:%s' %(verse, subVerse)
@ -368,7 +369,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
for count, parts in enumerate(match.split(u']---\n')):
if len(parts) > 1:
if count == 0:
variant = parts
#make sure the tag is correctly cased
variant = u'%s%s' % \
(parts[0:1].upper(), parts[1:].lower())
else:
if parts.endswith(u'\n'):
parts = parts.rstrip(u'\n')
@ -400,14 +403,25 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if self.AuthorsListView.count() == 0:
self.SongTabWidget.setCurrentIndex(2)
self.AuthorsListView.setFocus()
for verse in unicode(self.VerseOrderEdit.text()):
if verse.isdigit() or u' BC'.find(verse) > -1:
pass
#split the verse list by space and mark lower case for testing
for verse in unicode(self.VerseOrderEdit.text()).lower().split(u' '):
if len(verse) == 2:
if verse[0:1] == u'v' and verse[1:].isdigit():
pass
else:
self.SongTabWidget.setCurrentIndex(0)
self.VerseOrderEdit.setFocus()
return False, \
self.trUtf8('Invalid verse entry - vX')
else:
self.SongTabWidget.setCurrentIndex(0)
self.VerseOrderEdit.setFocus()
return False, \
self.trUtf8('Invalid verse entry - values must be Numeric, B or C')
if u' bcitped'.find(verse) > -1:
pass
else:
self.SongTabWidget.setCurrentIndex(0)
self.VerseOrderEdit.setFocus()
return False, \
self.trUtf8(\
'Invalid verse entry - values must be Numeric, I,B,C,T,P,E,O')
return True, u''
def onTitleEditItemLostFocus(self):

View File

@ -1,88 +1,91 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2009 Raoul Snyman #
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
# Form implementation generated from reading ui file 'editversedialog.ui'
#
# Created: Wed Dec 2 08:14:47 2009
# by: PyQt4 UI code generator 4.6.2
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_EditVerseDialog(object):
def setupUi(self, EditVerseDialog):
EditVerseDialog.setObjectName("EditVerseDialog")
EditVerseDialog.resize(492, 494)
EditVerseDialog.resize(500, 521)
EditVerseDialog.setModal(True)
self.widget = QtGui.QWidget(EditVerseDialog)
self.widget.setGeometry(QtCore.QRect(9, 12, 471, 471))
self.widget.setObjectName("widget")
self.verticalLayout = QtGui.QVBoxLayout(self.widget)
self.verticalLayout.setObjectName("verticalLayout")
self.layoutWidget = QtGui.QWidget(EditVerseDialog)
self.layoutWidget.setGeometry(QtCore.QRect(11, 1, 471, 491))
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout_3 = QtGui.QVBoxLayout(self.layoutWidget)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.VerseListComboBox = QtGui.QComboBox(self.widget)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.VerseTypeLabel = QtGui.QLabel(self.layoutWidget)
self.VerseTypeLabel.setTextFormat(QtCore.Qt.PlainText)
self.VerseTypeLabel.setAlignment(QtCore.Qt.AlignCenter)
self.VerseTypeLabel.setObjectName("VerseTypeLabel")
self.verticalLayout.addWidget(self.VerseTypeLabel)
self.VerseListComboBox = QtGui.QComboBox(self.layoutWidget)
self.VerseListComboBox.setObjectName("VerseListComboBox")
self.VerseListComboBox.addItem("")
self.VerseListComboBox.setItemText(0, "")
self.VerseListComboBox.addItem("")
self.VerseListComboBox.addItem("")
self.VerseListComboBox.addItem("")
self.horizontalLayout.addWidget(self.VerseListComboBox)
self.SubVerseListComboBox = QtGui.QComboBox(self.widget)
self.VerseListComboBox.addItem("")
self.VerseListComboBox.addItem("")
self.VerseListComboBox.addItem("")
self.verticalLayout.addWidget(self.VerseListComboBox)
self.horizontalLayout.addLayout(self.verticalLayout)
self.verticalLayout_2 = QtGui.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.VerseNumberLabel = QtGui.QLabel(self.layoutWidget)
self.VerseNumberLabel.setAlignment(QtCore.Qt.AlignCenter)
self.VerseNumberLabel.setObjectName("VerseNumberLabel")
self.verticalLayout_2.addWidget(self.VerseNumberLabel)
self.SubVerseListComboBox = QtGui.QComboBox(self.layoutWidget)
self.SubVerseListComboBox.setObjectName("SubVerseListComboBox")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.setItemText(0, "")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.SubVerseListComboBox.addItem("")
self.horizontalLayout.addWidget(self.SubVerseListComboBox)
self.verticalLayout.addLayout(self.horizontalLayout)
self.VerseTextEdit = QtGui.QTextEdit(self.widget)
self.verticalLayout_2.addWidget(self.SubVerseListComboBox)
self.horizontalLayout.addLayout(self.verticalLayout_2)
self.verticalLayout_3.addLayout(self.horizontalLayout)
self.VerseTextEdit = QtGui.QTextEdit(self.layoutWidget)
self.VerseTextEdit.setAcceptRichText(False)
self.VerseTextEdit.setObjectName("VerseTextEdit")
self.verticalLayout.addWidget(self.VerseTextEdit)
self.verticalLayout_3.addWidget(self.VerseTextEdit)
self.horizontalLayout_2 = QtGui.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.addVerse = QtGui.QPushButton(self.widget)
self.addVerse.setObjectName("addVerse")
self.horizontalLayout_2.addWidget(self.addVerse)
self.addChorus = QtGui.QPushButton(self.widget)
self.addChorus.setObjectName("addChorus")
self.horizontalLayout_2.addWidget(self.addChorus)
self.addBridge = QtGui.QPushButton(self.widget)
self.addBridge = QtGui.QPushButton(self.layoutWidget)
self.addBridge.setObjectName("addBridge")
self.horizontalLayout_2.addWidget(self.addBridge)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.ButtonBox = QtGui.QDialogButtonBox(self.widget)
self.addVerse = QtGui.QPushButton(self.layoutWidget)
self.addVerse.setObjectName("addVerse")
self.horizontalLayout_2.addWidget(self.addVerse)
self.addChorus = QtGui.QPushButton(self.layoutWidget)
self.addChorus.setObjectName("addChorus")
self.horizontalLayout_2.addWidget(self.addChorus)
self.verticalLayout_3.addLayout(self.horizontalLayout_2)
self.horizontalLayout_3 = QtGui.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.addPreChorus = QtGui.QPushButton(self.layoutWidget)
self.addPreChorus.setObjectName("addPreChorus")
self.horizontalLayout_3.addWidget(self.addPreChorus)
self.addIntro = QtGui.QPushButton(self.layoutWidget)
self.addIntro.setObjectName("addIntro")
self.horizontalLayout_3.addWidget(self.addIntro)
self.addOther = QtGui.QPushButton(self.layoutWidget)
self.addOther.setObjectName("addOther")
self.horizontalLayout_3.addWidget(self.addOther)
self.addEnding = QtGui.QPushButton(self.layoutWidget)
self.addEnding.setObjectName("addEnding")
self.horizontalLayout_3.addWidget(self.addEnding)
self.verticalLayout_3.addLayout(self.horizontalLayout_3)
self.ButtonBox = QtGui.QDialogButtonBox(self.layoutWidget)
self.ButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save)
self.ButtonBox.setObjectName("ButtonBox")
self.verticalLayout.addWidget(self.ButtonBox)
self.verticalLayout_3.addWidget(self.ButtonBox)
self.retranslateUi(EditVerseDialog)
QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("accepted()"), EditVerseDialog.accept)
@ -91,20 +94,20 @@ class Ui_EditVerseDialog(object):
def retranslateUi(self, EditVerseDialog):
EditVerseDialog.setWindowTitle(QtGui.QApplication.translate("EditVerseDialog", "Edit Verse", None, QtGui.QApplication.UnicodeUTF8))
self.VerseTypeLabel.setText(QtGui.QApplication.translate("EditVerseDialog", "Verse Type", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(0, QtGui.QApplication.translate("EditVerseDialog", "Intro", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(1, QtGui.QApplication.translate("EditVerseDialog", "Verse", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(2, QtGui.QApplication.translate("EditVerseDialog", "Chorus", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(3, QtGui.QApplication.translate("EditVerseDialog", "Bridge", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(1, QtGui.QApplication.translate("EditVerseDialog", "1", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(2, QtGui.QApplication.translate("EditVerseDialog", "1a", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(3, QtGui.QApplication.translate("EditVerseDialog", "1b", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(4, QtGui.QApplication.translate("EditVerseDialog", "2", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(5, QtGui.QApplication.translate("EditVerseDialog", "2a", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(6, QtGui.QApplication.translate("EditVerseDialog", "2b", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(7, QtGui.QApplication.translate("EditVerseDialog", "3", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(8, QtGui.QApplication.translate("EditVerseDialog", "4", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(9, QtGui.QApplication.translate("EditVerseDialog", "5", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(10, QtGui.QApplication.translate("EditVerseDialog", "6", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(11, QtGui.QApplication.translate("EditVerseDialog", "7", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(2, QtGui.QApplication.translate("EditVerseDialog", "Pre-Chorus", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(3, QtGui.QApplication.translate("EditVerseDialog", "Chorus", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(4, QtGui.QApplication.translate("EditVerseDialog", "Bridge", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(5, QtGui.QApplication.translate("EditVerseDialog", "Ending", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(6, QtGui.QApplication.translate("EditVerseDialog", "Other", None, QtGui.QApplication.UnicodeUTF8))
self.VerseNumberLabel.setText(QtGui.QApplication.translate("EditVerseDialog", "Number", None, QtGui.QApplication.UnicodeUTF8))
self.addBridge.setText(QtGui.QApplication.translate("EditVerseDialog", "Bridge", None, QtGui.QApplication.UnicodeUTF8))
self.addVerse.setText(QtGui.QApplication.translate("EditVerseDialog", "Verse", None, QtGui.QApplication.UnicodeUTF8))
self.addChorus.setText(QtGui.QApplication.translate("EditVerseDialog", "Chorus", None, QtGui.QApplication.UnicodeUTF8))
self.addBridge.setText(QtGui.QApplication.translate("EditVerseDialog", "Bridge", None, QtGui.QApplication.UnicodeUTF8))
self.addPreChorus.setText(QtGui.QApplication.translate("EditVerseDialog", "Pre-Chorus", None, QtGui.QApplication.UnicodeUTF8))
self.addIntro.setText(QtGui.QApplication.translate("EditVerseDialog", "Intro", None, QtGui.QApplication.UnicodeUTF8))
self.addOther.setText(QtGui.QApplication.translate("EditVerseDialog", "Other", None, QtGui.QApplication.UnicodeUTF8))
self.addEnding.setText(QtGui.QApplication.translate("EditVerseDialog", "Ending", None, QtGui.QApplication.UnicodeUTF8))

View File

@ -42,17 +42,39 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
QtCore.SIGNAL(u'clicked()'), self.onAddChorus)
QtCore.QObject.connect(self.addBridge,
QtCore.SIGNAL(u'clicked()'), self.onAddBridge)
QtCore.QObject.connect(self.addIntro,
QtCore.SIGNAL(u'clicked()'), self.onAddIntro)
QtCore.QObject.connect(self.addOther,
QtCore.SIGNAL(u'clicked()'), self.onAddOther)
QtCore.QObject.connect(self.addPreChorus,
QtCore.SIGNAL(u'clicked()'), self.onAddPreChorus)
QtCore.QObject.connect(self.addEnding,
QtCore.SIGNAL(u'clicked()'), self.onAddEnding)
QtCore.QObject.connect(self.VerseListComboBox,
QtCore.SIGNAL(u'activated(int)'), self.onVerseComboChanged)
def onAddIntro(self):
self.VerseTextEdit.insertPlainText(u'---[Intro:1]---')
def onAddEnding(self):
self.VerseTextEdit.insertPlainText(u'---[Ending:1]---')
def onAddOther(self):
self.VerseTextEdit.insertPlainText(u'---[Other:1]---')
def onAddPreChorus(self):
self.VerseTextEdit.insertPlainText(u'---[PreChorus:1]---')
def onAddBridge(self):
self.VerseTextEdit.insertPlainText(u'---[Bridge:1]---\n')
self.VerseTextEdit.insertPlainText(u'---[Bridge:1]---')
def onAddChorus(self):
self.VerseTextEdit.insertPlainText(u'---[Chorus:1]---\n')
self.VerseTextEdit.insertPlainText(u'---[Chorus:1]---')
def onAddVerse(self):
self.VerseTextEdit.insertPlainText(u'---[Verse:1]---\n')
self.VerseTextEdit.insertPlainText(u'---[Verse:1]---')
def setVerse(self, text, single=False, tag=0):
def setVerse(self, text, verseCount=0, single=False, tag=u'Verse:1'):
posVerse = 0
posSub = 0
if single:
@ -65,19 +87,31 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
posSub = 0
self.VerseListComboBox.setEnabled(True)
self.SubVerseListComboBox.setEnabled(True)
self.SubVerseListComboBox.clear()
for i in range(1, verseCount + 1):
self.SubVerseListComboBox.addItem(u'%s'% i)
self.addBridge.setEnabled(False)
self.addChorus.setEnabled(False)
self.addVerse.setEnabled(False)
self.addIntro.setEnabled(False)
self.addPreChorus.setEnabled(False)
self.addOther.setEnabled(False)
self.addEnding.setEnabled(False)
else:
self.VerseListComboBox.setEnabled(False)
self.SubVerseListComboBox.setEnabled(False)
self.addBridge.setEnabled(True)
self.addChorus.setEnabled(True)
self.addVerse.setEnabled(True)
self.addIntro.setEnabled(True)
self.addPreChorus.setEnabled(True)
self.addOther.setEnabled(True)
self.addEnding.setEnabled(True)
self.VerseListComboBox.setCurrentIndex(posVerse)
self.SubVerseListComboBox.setCurrentIndex(posSub)
self.VerseTextEdit.setPlainText(text)
self.VerseTextEdit.setFocus(QtCore.Qt.OtherFocusReason)
self.onVerseComboChanged(0)
def getVerse(self):
return self.VerseTextEdit.toPlainText(), \
@ -86,3 +120,10 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
def getVerseAll(self):
return self.VerseTextEdit.toPlainText()
def onVerseComboChanged(self, id):
if unicode(self.VerseListComboBox.currentText()) == u'Verse':
self.SubVerseListComboBox.setEnabled(True)
else:
self.SubVerseListComboBox.setEnabled(False)
self.SubVerseListComboBox.setCurrentIndex(0)

View File

@ -289,19 +289,23 @@ class SongMediaItem(MediaManagerItem):
service_item.theme = song.theme_name
service_item.edit_enabled = True
service_item.editId = item_id
service_item.verse_order = song.verse_order
if song.lyrics.startswith(u'<?xml version='):
songXML = SongXMLParser(song.lyrics)
verseList = songXML.get_verses()
if service_item.verse_order is None or service_item.verse_order == u'':
#no verse list or only 1 space (in error)
if song.verse_order is None or \
song.verse_order == u'' or song.verse_order == u' ':
for verse in verseList:
service_item.add_from_text(verse[1][:30], unicode(verse[1]))
else:
for order in service_item.verse_order:
#Loop through the verse list and expand the song accordingly.
for order in song.verse_order.upper().split(u' '):
if len(order) == 0:
break
for verse in verseList:
if verse[1]:
if verse[0][u'type'] == "Verse" and \
verse[0][u'label'][0] == order[0]:
if verse[0][u'type'] == "Verse":
if verse[0][u'label'][0] == order[1:]:
verseTag = u'%s:%s' % \
(verse[0][u'type'], verse[0][u'label'])
service_item.add_from_text\

View File

@ -6,115 +6,100 @@
<rect>
<x>0</x>
<y>0</y>
<width>492</width>
<height>494</height>
<width>500</width>
<height>521</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
<string>Edit Verse</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<widget class="QWidget" name="">
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>9</x>
<y>12</y>
<x>11</x>
<y>1</y>
<width>471</width>
<height>471</height>
<height>491</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QComboBox" name="VerseListComboBox">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<property name="text">
<string/>
</property>
<widget class="QLabel" name="VerseTypeLabel">
<property name="text">
<string>Verse Type</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<property name="text">
<string>Verse</string>
</property>
<widget class="QComboBox" name="VerseListComboBox">
<item>
<property name="text">
<string>Intro</string>
</property>
</item>
<item>
<property name="text">
<string>Verse</string>
</property>
</item>
<item>
<property name="text">
<string>Pre-Chorus</string>
</property>
</item>
<item>
<property name="text">
<string>Chorus</string>
</property>
</item>
<item>
<property name="text">
<string>Bridge</string>
</property>
</item>
<item>
<property name="text">
<string>Ending</string>
</property>
</item>
<item>
<property name="text">
<string>Other</string>
</property>
</item>
</widget>
</item>
<item>
<property name="text">
<string>Chorus</string>
</property>
</item>
<item>
<property name="text">
<string>Bridge</string>
</property>
</item>
</widget>
</layout>
</item>
<item>
<widget class="QComboBox" name="SubVerseListComboBox">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<property name="text">
<string/>
</property>
<widget class="QLabel" name="VerseNumberLabel">
<property name="text">
<string>Number</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<property name="text">
<string>1</string>
</property>
<widget class="QComboBox" name="SubVerseListComboBox"/>
</item>
<item>
<property name="text">
<string>1a</string>
</property>
</item>
<item>
<property name="text">
<string>1b</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>2a</string>
</property>
</item>
<item>
<property name="text">
<string>2b</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
<item>
<property name="text">
<string>5</string>
</property>
</item>
<item>
<property name="text">
<string>6</string>
</property>
</item>
<item>
<property name="text">
<string>7</string>
</property>
</item>
</widget>
</layout>
</item>
</layout>
</item>
@ -127,6 +112,13 @@
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="addBridge">
<property name="text">
<string>Bridge</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addVerse">
<property name="text">
@ -141,10 +133,35 @@
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QPushButton" name="addBridge">
<widget class="QPushButton" name="addPreChorus">
<property name="text">
<string>Bridge</string>
<string>Pre-Chorus</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addIntro">
<property name="text">
<string>Intro</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addOther">
<property name="text">
<string>Other</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addEnding">
<property name="text">
<string>Ending</string>
</property>
</widget>
</item>

View File

@ -126,19 +126,6 @@
<file>theme_import.png</file>
</qresource>
<qresource prefix="pages" >
<file>page_chorus.png</file>
<file>page_bridge.png</file>
<file>page_1.png</file>
<file>page_2.png</file>
<file>page_3.png</file>
<file>page_4.png</file>
<file>page_5.png</file>
<file>page_6.png</file>
<file>page_7.png</file>
<file>page_8.png</file>
<file>page_9.png</file>
<file>page_10.png</file>
<file>page_11.png</file>
<file>page_12.png</file>
<file>slide.png</file>
</qresource>
</RCC>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 402 B

View File

@ -1 +1 @@
1.9.0-682
1.9.0-684