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``. ``:/resource/file.png``, or a file location like ``/path/to/file.png``.
""" """
ButtonIcon = None ButtonIcon = None
if type(icon) is QtGui.QIcon: if isinstance(icon, QtGui.QIcon):
ButtonIcon = icon ButtonIcon = icon
elif type(icon) is types.StringType or type(icon) is types.UnicodeType: elif isinstance(icon, basestring):
ButtonIcon = QtGui.QIcon() ButtonIcon = QtGui.QIcon()
if icon.startswith(u':/'): if icon.startswith(u':/'):
ButtonIcon.addPixmap( ButtonIcon.addPixmap(
QtGui.QPixmap(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off) QtGui.QPixmap(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off)
else: else:
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), if len(icon) > 2:
QtGui.QIcon.Normal, QtGui.QIcon.Off) ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
elif type(icon) is QtGui.QImage: 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 = QtGui.QIcon()
ButtonIcon.addPixmap( ButtonIcon.addPixmap(
QtGui.QPixmap.fromImage(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off) QtGui.QPixmap.fromImage(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off)

View File

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

View File

@ -206,7 +206,7 @@ class RenderManager(object):
footer.append(u'Public Domain') footer.append(u'Public Domain')
footer.append(u'CCLI 123456') footer.append(u'CCLI 123456')
formatted = self.renderer.format_slide(verse, False) 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): def format_slide(self, words):
""" """

View File

@ -293,7 +293,7 @@ class ServiceItem(object):
if self.service_item_type == ServiceItemType.Text: if self.service_item_type == ServiceItemType.Text:
return self.render_individual(row) return self.render_individual(row)
else: 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): def get_frame_title(self, row=0):
""" """

View File

@ -68,21 +68,30 @@ class OpenLPToolbar(QtGui.QToolBar):
``objectname`` ``objectname``
The name of the object, as used in `<button>.setObjectName()`. 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 ButtonIcon:
if slot and not checkable: if slot and not checkable:
ToolbarButton = self.addAction(ButtonIcon, title, slot) ToolbarButton = self.addAction(ButtonIcon, title, slot)
else: else:
ToolbarButton = self.addAction(ButtonIcon, title) 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.icons[title] = ButtonIcon
self.actions[title] = ToolbarButton else:
return ToolbarButton 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): def addToolbarSeparator(self, handle):
""" """
@ -106,7 +115,8 @@ class OpenLPToolbar(QtGui.QToolBar):
``title`` ``title``
The title of the icon to search for. 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] return self.icons[title]
else: else:
self.log.error(u'getIconFromTitle - no icon for %s' % title) self.log.error(u'getIconFromTitle - no icon for %s' % title)

View File

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

View File

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

View File

@ -23,7 +23,6 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
from mediatab import MediaTab
from mediaitem import MediaMediaItem 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 import logging
from openlp.core.lib import Plugin, build_icon 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): class MediaPlugin(Plugin):
global log global log
@ -40,9 +40,6 @@ class MediaPlugin(Plugin):
# passed with drag and drop messages # passed with drag and drop messages
self.dnd_id = u'Media' self.dnd_id = u'Media'
def get_settings_tab(self):
return MediaTab(self.name)
def initialise(self): def initialise(self):
log.info(u'Plugin Initialising') log.info(u'Plugin Initialising')
Plugin.initialise(self) Plugin.initialise(self)

View File

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

View File

@ -1,88 +1,91 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
############################################################################### # Form implementation generated from reading ui file 'editversedialog.ui'
# OpenLP - Open Source Lyrics Projection # #
# --------------------------------------------------------------------------- # # Created: Wed Dec 2 08:14:47 2009
# Copyright (c) 2008-2009 Raoul Snyman # # by: PyQt4 UI code generator 4.6.2
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael # #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, # # WARNING! All changes made in this file will be lost!
# 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 PyQt4 import QtCore, QtGui
class Ui_EditVerseDialog(object): class Ui_EditVerseDialog(object):
def setupUi(self, EditVerseDialog): def setupUi(self, EditVerseDialog):
EditVerseDialog.setObjectName("EditVerseDialog") EditVerseDialog.setObjectName("EditVerseDialog")
EditVerseDialog.resize(492, 494) EditVerseDialog.resize(500, 521)
EditVerseDialog.setModal(True) EditVerseDialog.setModal(True)
self.widget = QtGui.QWidget(EditVerseDialog) self.layoutWidget = QtGui.QWidget(EditVerseDialog)
self.widget.setGeometry(QtCore.QRect(9, 12, 471, 471)) self.layoutWidget.setGeometry(QtCore.QRect(11, 1, 471, 491))
self.widget.setObjectName("widget") self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout = QtGui.QVBoxLayout(self.widget) self.verticalLayout_3 = QtGui.QVBoxLayout(self.layoutWidget)
self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout_3.setObjectName("verticalLayout_3")
self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout") 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.setObjectName("VerseListComboBox")
self.VerseListComboBox.addItem("") self.VerseListComboBox.addItem("")
self.VerseListComboBox.setItemText(0, "")
self.VerseListComboBox.addItem("") self.VerseListComboBox.addItem("")
self.VerseListComboBox.addItem("") self.VerseListComboBox.addItem("")
self.VerseListComboBox.addItem("") self.VerseListComboBox.addItem("")
self.horizontalLayout.addWidget(self.VerseListComboBox) self.VerseListComboBox.addItem("")
self.SubVerseListComboBox = QtGui.QComboBox(self.widget) 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.setObjectName("SubVerseListComboBox")
self.SubVerseListComboBox.addItem("") self.verticalLayout_2.addWidget(self.SubVerseListComboBox)
self.SubVerseListComboBox.setItemText(0, "") self.horizontalLayout.addLayout(self.verticalLayout_2)
self.SubVerseListComboBox.addItem("") self.verticalLayout_3.addLayout(self.horizontalLayout)
self.SubVerseListComboBox.addItem("") self.VerseTextEdit = QtGui.QTextEdit(self.layoutWidget)
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.VerseTextEdit.setAcceptRichText(False) self.VerseTextEdit.setAcceptRichText(False)
self.VerseTextEdit.setObjectName("VerseTextEdit") self.VerseTextEdit.setObjectName("VerseTextEdit")
self.verticalLayout.addWidget(self.VerseTextEdit) self.verticalLayout_3.addWidget(self.VerseTextEdit)
self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2 = QtGui.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.addVerse = QtGui.QPushButton(self.widget) self.addBridge = QtGui.QPushButton(self.layoutWidget)
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.setObjectName("addBridge") self.addBridge.setObjectName("addBridge")
self.horizontalLayout_2.addWidget(self.addBridge) self.horizontalLayout_2.addWidget(self.addBridge)
self.verticalLayout.addLayout(self.horizontalLayout_2) self.addVerse = QtGui.QPushButton(self.layoutWidget)
self.ButtonBox = QtGui.QDialogButtonBox(self.widget) 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.setOrientation(QtCore.Qt.Horizontal)
self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save) self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save)
self.ButtonBox.setObjectName("ButtonBox") self.ButtonBox.setObjectName("ButtonBox")
self.verticalLayout.addWidget(self.ButtonBox) self.verticalLayout_3.addWidget(self.ButtonBox)
self.retranslateUi(EditVerseDialog) self.retranslateUi(EditVerseDialog)
QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("accepted()"), EditVerseDialog.accept) QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("accepted()"), EditVerseDialog.accept)
@ -91,20 +94,20 @@ class Ui_EditVerseDialog(object):
def retranslateUi(self, EditVerseDialog): def retranslateUi(self, EditVerseDialog):
EditVerseDialog.setWindowTitle(QtGui.QApplication.translate("EditVerseDialog", "Edit Verse", None, QtGui.QApplication.UnicodeUTF8)) 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(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(2, QtGui.QApplication.translate("EditVerseDialog", "Pre-Chorus", None, QtGui.QApplication.UnicodeUTF8))
self.VerseListComboBox.setItemText(3, QtGui.QApplication.translate("EditVerseDialog", "Bridge", None, QtGui.QApplication.UnicodeUTF8)) self.VerseListComboBox.setItemText(3, QtGui.QApplication.translate("EditVerseDialog", "Chorus", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(1, QtGui.QApplication.translate("EditVerseDialog", "1", None, QtGui.QApplication.UnicodeUTF8)) self.VerseListComboBox.setItemText(4, QtGui.QApplication.translate("EditVerseDialog", "Bridge", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(2, QtGui.QApplication.translate("EditVerseDialog", "1a", None, QtGui.QApplication.UnicodeUTF8)) self.VerseListComboBox.setItemText(5, QtGui.QApplication.translate("EditVerseDialog", "Ending", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(3, QtGui.QApplication.translate("EditVerseDialog", "1b", None, QtGui.QApplication.UnicodeUTF8)) self.VerseListComboBox.setItemText(6, QtGui.QApplication.translate("EditVerseDialog", "Other", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(4, QtGui.QApplication.translate("EditVerseDialog", "2", None, QtGui.QApplication.UnicodeUTF8)) self.VerseNumberLabel.setText(QtGui.QApplication.translate("EditVerseDialog", "Number", None, QtGui.QApplication.UnicodeUTF8))
self.SubVerseListComboBox.setItemText(5, QtGui.QApplication.translate("EditVerseDialog", "2a", None, QtGui.QApplication.UnicodeUTF8)) self.addBridge.setText(QtGui.QApplication.translate("EditVerseDialog", "Bridge", 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.addVerse.setText(QtGui.QApplication.translate("EditVerseDialog", "Verse", 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.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.SIGNAL(u'clicked()'), self.onAddChorus)
QtCore.QObject.connect(self.addBridge, QtCore.QObject.connect(self.addBridge,
QtCore.SIGNAL(u'clicked()'), self.onAddBridge) 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): def onAddBridge(self):
self.VerseTextEdit.insertPlainText(u'---[Bridge:1]---\n') self.VerseTextEdit.insertPlainText(u'---[Bridge:1]---')
def onAddChorus(self): def onAddChorus(self):
self.VerseTextEdit.insertPlainText(u'---[Chorus:1]---\n') self.VerseTextEdit.insertPlainText(u'---[Chorus:1]---')
def onAddVerse(self): 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 posVerse = 0
posSub = 0 posSub = 0
if single: if single:
@ -65,19 +87,31 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
posSub = 0 posSub = 0
self.VerseListComboBox.setEnabled(True) self.VerseListComboBox.setEnabled(True)
self.SubVerseListComboBox.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.addBridge.setEnabled(False)
self.addChorus.setEnabled(False) self.addChorus.setEnabled(False)
self.addVerse.setEnabled(False) self.addVerse.setEnabled(False)
self.addIntro.setEnabled(False)
self.addPreChorus.setEnabled(False)
self.addOther.setEnabled(False)
self.addEnding.setEnabled(False)
else: else:
self.VerseListComboBox.setEnabled(False) self.VerseListComboBox.setEnabled(False)
self.SubVerseListComboBox.setEnabled(False) self.SubVerseListComboBox.setEnabled(False)
self.addBridge.setEnabled(True) self.addBridge.setEnabled(True)
self.addChorus.setEnabled(True) self.addChorus.setEnabled(True)
self.addVerse.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.VerseListComboBox.setCurrentIndex(posVerse)
self.SubVerseListComboBox.setCurrentIndex(posSub) self.SubVerseListComboBox.setCurrentIndex(posSub)
self.VerseTextEdit.setPlainText(text) self.VerseTextEdit.setPlainText(text)
self.VerseTextEdit.setFocus(QtCore.Qt.OtherFocusReason) self.VerseTextEdit.setFocus(QtCore.Qt.OtherFocusReason)
self.onVerseComboChanged(0)
def getVerse(self): def getVerse(self):
return self.VerseTextEdit.toPlainText(), \ return self.VerseTextEdit.toPlainText(), \
@ -86,3 +120,10 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
def getVerseAll(self): def getVerseAll(self):
return self.VerseTextEdit.toPlainText() 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.theme = song.theme_name
service_item.edit_enabled = True service_item.edit_enabled = True
service_item.editId = item_id service_item.editId = item_id
service_item.verse_order = song.verse_order
if song.lyrics.startswith(u'<?xml version='): if song.lyrics.startswith(u'<?xml version='):
songXML = SongXMLParser(song.lyrics) songXML = SongXMLParser(song.lyrics)
verseList = songXML.get_verses() 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: for verse in verseList:
service_item.add_from_text(verse[1][:30], unicode(verse[1])) service_item.add_from_text(verse[1][:30], unicode(verse[1]))
else: 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: for verse in verseList:
if verse[1]: if verse[1]:
if verse[0][u'type'] == "Verse" and \ if verse[0][u'type'] == "Verse":
verse[0][u'label'][0] == order[0]: if verse[0][u'label'][0] == order[1:]:
verseTag = u'%s:%s' % \ verseTag = u'%s:%s' % \
(verse[0][u'type'], verse[0][u'label']) (verse[0][u'type'], verse[0][u'label'])
service_item.add_from_text\ service_item.add_from_text\

View File

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

View File

@ -126,19 +126,6 @@
<file>theme_import.png</file> <file>theme_import.png</file>
</qresource> </qresource>
<qresource prefix="pages" > <qresource prefix="pages" >
<file>page_chorus.png</file> <file>slide.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>
</qresource> </qresource>
</RCC> </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