Fix up song dialog errors

Fix servicemanager key entry
Fix servicemanager state handling

bzr-revno: 496
This commit is contained in:
Tim Bentley 2009-07-22 19:30:35 +01:00
commit b30c7d5558
8 changed files with 153 additions and 58 deletions

View File

@ -20,6 +20,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
""" """
import codecs import codecs
import sys import sys
import chardet
def convert_file(inname, outname): def convert_file(inname, outname):
""" """
@ -31,7 +32,7 @@ def convert_file(inname, outname):
``outname`` ``outname``
The output file name. The output file name.
""" """
infile = codecs.open(inname, 'r', encoding='iso-8859-1') infile = codecs.open(inname, 'r', encoding='CP1252')
writefile = codecs.open(outname, 'w', encoding='utf-8') writefile = codecs.open(outname, 'w', encoding='utf-8')
for line in infile: for line in infile:
#replace the quotes with quotes #replace the quotes with quotes

View File

@ -40,6 +40,7 @@ class Renderer(object):
self._debug = 0 self._debug = 0
self._right_margin = 64 # the amount of right indent self._right_margin = 64 # the amount of right indent
self._shadow_offset = 5 self._shadow_offset = 5
self._shadow_offset_footer = 3
self._outline_offset = 2 self._outline_offset = 2
self.theme_name = None self.theme_name = None
self._theme = None self._theme = None
@ -482,15 +483,17 @@ class Renderer(object):
# dont allow alignment messing with footers # dont allow alignment messing with footers
if footer: if footer:
align = 0 align = 0
shadow_offset = self._shadow_offset_footer
else: else:
align = int(self._theme .display_horizontalAlign) align = int(self._theme .display_horizontalAlign)
shadow_offset = self._shadow_offset
for linenum in range(len(lines)): for linenum in range(len(lines)):
line = lines[linenum] line = lines[linenum]
#find out how wide line is #find out how wide line is
w , h = self._get_extent_and_render(line, footer, tlcorner=(x, y), draw=False) w , h = self._get_extent_and_render(line, footer, tlcorner=(x, y), draw=False)
if self._theme.display_shadow: if self._theme.display_shadow:
w += self._shadow_offset w += shadow_offset
h += self._shadow_offset h += shadow_offset
if self._theme.display_outline: if self._theme.display_outline:
# pixels either side # pixels either side
w += 2 * self._outline_offset w += 2 * self._outline_offset
@ -515,7 +518,7 @@ class Renderer(object):
if live: if live:
# now draw the text, and any outlines/shadows # now draw the text, and any outlines/shadows
if self._theme.display_shadow: if self._theme.display_shadow:
self._get_extent_and_render(line, footer, tlcorner=(x+self._shadow_offset,y+self._shadow_offset), self._get_extent_and_render(line, footer, tlcorner=(x + shadow_offset, y + shadow_offset),
draw=True, color = self._theme.display_shadow_color) draw=True, color = self._theme.display_shadow_color)
if self._theme.display_outline: if self._theme.display_outline:
self._get_extent_and_render(line, footer, (x+self._outline_offset,y), draw=True, self._get_extent_and_render(line, footer, (x+self._outline_offset,y), draw=True,

View File

@ -62,12 +62,22 @@ class MainDisplay(QtGui.QWidget):
self.showFullScreen() self.showFullScreen()
else: else:
self.showMinimized() self.showMinimized()
#Build a custom splash screen
self.InitialFrame = QtGui.QImage(screen[u'size'].width(),
screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied)
splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png')
painter_image = QtGui.QPainter()
painter_image.begin(self.InitialFrame)
painter_image.fillRect(self.InitialFrame.rect(), QtCore.Qt.white)
painter_image.drawImage((screen[u'size'].width() - splash_image.width()) / 2,
(screen[u'size'].height() - splash_image.height()) / 2 , splash_image)
self.frameView(self.InitialFrame)
#Build a Black screen
painter = QtGui.QPainter() painter = QtGui.QPainter()
self.blankFrame = QtGui.QImage(screen[u'size'].width(), self.blankFrame = QtGui.QImage(screen[u'size'].width(),
screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied) screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied)
painter.begin(self.blankFrame) painter.begin(self.blankFrame)
painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black) painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black)
self.frameView(self.blankFrame)
def frameView(self, frame): def frameView(self, frame):
""" """

View File

@ -41,10 +41,39 @@ class ServiceManagerList(QtGui.QTreeWidget):
if event.key() == QtCore.Qt.Key_Enter: if event.key() == QtCore.Qt.Key_Enter:
self.parent.makeLive() self.parent.makeLive()
event.accept() event.accept()
elif event.key() == QtCore.Qt.Key_Home:
self.parent.onServiceTop()
event.accept()
elif event.key() == QtCore.Qt.Key_End:
self.parent.onServiceEnd()
event.accept()
elif event.key() == QtCore.Qt.Key_PageUp:
self.parent.onServiceUp()
event.accept()
elif event.key() == QtCore.Qt.Key_PageDown:
self.parent.onServiceDown()
event.accept()
elif event.key() == QtCore.Qt.Key_Up:
self.parent.onMoveSelectionUp()
event.accept()
elif event.key() == QtCore.Qt.Key_Down:
self.parent.onMoveSelectionDown()
event.accept()
event.ignore() event.ignore()
else: else:
event.ignore() event.ignore()
class Iter(QtGui.QTreeWidgetItemIterator):
def __init__(self, *args):
QtGui.QTreeWidgetItemIterator.__init__(self, *args)
def next(self):
self.__iadd__(1)
value = self.value()
if value:
return self.value()
else:
return None
class ServiceManager(QtGui.QWidget): class ServiceManager(QtGui.QWidget):
""" """
Manages the orders of service. Currently this involves taking Manages the orders of service. Currently this involves taking
@ -134,6 +163,52 @@ class ServiceManager(QtGui.QWidget):
self.servicePath = self.config.get_data_path() self.servicePath = self.config.get_data_path()
self.service_theme = self.config.get_config(u'theme service theme', u'') self.service_theme = self.config.get_config(u'theme service theme', u'')
def onMoveSelectionUp(self):
"""
Moves the selection up the window
Called by the up arrow
"""
it = Iter(self.ServiceManagerList)
item = it.value()
tempItem = None
setLastItem = False
while item is not None:
if item.isSelected() and tempItem is None:
setLastItem = True
item.setSelected(False)
if item.isSelected():
#We are on the first record
if tempItem is not None:
tempItem.setSelected(True)
item.setSelected(False)
else:
tempItem = item
lastItem = item
item = it.next()
#Top Item was selected so set the last one
if setLastItem:
lastItem.setSelected(True)
def onMoveSelectionDown(self):
"""
Moves the selection down the window
Called by the down arrow
"""
it = Iter(self.ServiceManagerList)
item = it.value()
firstItem = item
setSelected = False
while item is not None:
if setSelected:
setSelected = False
item.setSelected(True)
elif item.isSelected():
item.setSelected(False)
setSelected = True
item = it.next()
if setSelected:
firstItem.setSelected(True)
def collapsed(self, item): def collapsed(self, item):
""" """
Record if an item is collapsed Record if an item is collapsed
@ -159,7 +234,7 @@ class ServiceManager(QtGui.QWidget):
temp = self.serviceItems[item] temp = self.serviceItems[item]
self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.remove(self.serviceItems[item])
self.serviceItems.insert(0, temp) self.serviceItems.insert(0, temp)
self.repaintServiceList() self.repaintServiceList(0, count)
self.parent.OosChanged(False, self.serviceName) self.parent.OosChanged(False, self.serviceName)
def onServiceUp(self): def onServiceUp(self):
@ -172,7 +247,7 @@ class ServiceManager(QtGui.QWidget):
temp = self.serviceItems[item] temp = self.serviceItems[item]
self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.remove(self.serviceItems[item])
self.serviceItems.insert(item - 1, temp) self.serviceItems.insert(item - 1, temp)
self.repaintServiceList() self.repaintServiceList(item - 1 , count)
self.parent.OosChanged(False, self.serviceName) self.parent.OosChanged(False, self.serviceName)
def onServiceDown(self): def onServiceDown(self):
@ -185,7 +260,7 @@ class ServiceManager(QtGui.QWidget):
temp = self.serviceItems[item] temp = self.serviceItems[item]
self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.remove(self.serviceItems[item])
self.serviceItems.insert(item + 1, temp) self.serviceItems.insert(item + 1, temp)
self.repaintServiceList() self.repaintServiceList(item + 1 , count)
self.parent.OosChanged(False, self.serviceName) self.parent.OosChanged(False, self.serviceName)
def onServiceEnd(self): def onServiceEnd(self):
@ -197,7 +272,7 @@ class ServiceManager(QtGui.QWidget):
temp = self.serviceItems[item] temp = self.serviceItems[item]
self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.remove(self.serviceItems[item])
self.serviceItems.insert(len(self.serviceItems), temp) self.serviceItems.insert(len(self.serviceItems), temp)
self.repaintServiceList() self.repaintServiceList(len(self.serviceItems) - 1, count)
self.parent.OosChanged(False, self.serviceName) self.parent.OosChanged(False, self.serviceName)
def onNewService(self): def onNewService(self):
@ -216,10 +291,10 @@ class ServiceManager(QtGui.QWidget):
item, count = self.findServiceItem() item, count = self.findServiceItem()
if item is not -1: if item is not -1:
self.serviceItems.remove(self.serviceItems[item]) self.serviceItems.remove(self.serviceItems[item])
self.repaintServiceList() self.repaintServiceList(0, 0)
self.parent.OosChanged(False, self.serviceName) self.parent.OosChanged(False, self.serviceName)
def repaintServiceList(self): def repaintServiceList(self, serviceItem, serviceItemCount):
""" """
Clear the existing service list and prepaint all the items Clear the existing service list and prepaint all the items
Used when moving items as the move takes place in supporting array, Used when moving items as the move takes place in supporting array,
@ -232,20 +307,20 @@ class ServiceManager(QtGui.QWidget):
count += 1 count += 1
#Repaint the screen #Repaint the screen
self.ServiceManagerList.clear() self.ServiceManagerList.clear()
for item in self.serviceItems: for itemcount, item in enumerate(self.serviceItems):
serviceitem = item[u'data'] serviceitem = item[u'data']
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList) treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
treewidgetitem.setText(0,serviceitem.title) treewidgetitem.setText(0,serviceitem.title)
treewidgetitem.setIcon(0,serviceitem.iconic_representation) treewidgetitem.setIcon(0,serviceitem.iconic_representation)
treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order'])) treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order']))
treewidgetitem.setExpanded(item[u'expanded']) treewidgetitem.setExpanded(item[u'expanded'])
count = 0 for count , frame in enumerate(serviceitem.frames):
for frame in serviceitem.frames:
treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem) treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
text = frame[u'title'] text = frame[u'title']
treewidgetitem1.setText(0,text[:40]) treewidgetitem1.setText(0,text[:40])
treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count)) treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
count = count + 1 if serviceItem == itemcount and serviceItemCount == count:
self.ServiceManagerList.setCurrentItem(treewidgetitem1)
def onSaveService(self): def onSaveService(self):
""" """

View File

@ -63,6 +63,7 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
else: else:
self.AuthorListWidget.setCurrentRow(self.currentRow) self.AuthorListWidget.setCurrentRow(self.currentRow)
self._validate_form() self._validate_form()
self.onAuthorListWidgetItemClicked()
def onDeleteButtonClick(self): def onDeleteButtonClick(self):
""" """
@ -100,31 +101,32 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
self._validate_form() self._validate_form()
self.DisplayEdit.setFocus() self.DisplayEdit.setFocus()
def onAuthorListWidgetItemClicked(self, index): def onAuthorListWidgetItemClicked(self):
""" """
An Author has been selected display it An Author has been selected display it
If the author is attached to a Song prevent delete If the author is attached to a Song prevent delete
""" """
self.currentRow = self.AuthorListWidget.currentRow() self.currentRow = self.AuthorListWidget.currentRow()
item = self.AuthorListWidget.currentItem() item = self.AuthorListWidget.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] if item is not None:
self.author = self.songmanager.get_author(item_id) item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.DisplayEdit.setText(self.author.display_name) self.author = self.songmanager.get_author(item_id)
if self.author.first_name is None: self.DisplayEdit.setText(self.author.display_name)
self.FirstNameEdit.setText(u'') if self.author.first_name is None:
else: self.FirstNameEdit.setText(u'')
self.FirstNameEdit.setText(self.author.first_name) else:
if self.author.last_name is None: self.FirstNameEdit.setText(self.author.first_name)
self.LastNameEdit.setText(u'') if self.author.last_name is None:
else: self.LastNameEdit.setText(u'')
self.LastNameEdit.setText(self.author.last_name) else:
if len(self.author.songs) > 0: self.LastNameEdit.setText(self.author.last_name)
self.MessageLabel.setText(translate(u'AuthorForm', u'Author in use "Delete" is disabled')) if len(self.author.songs) > 0:
self.DeleteButton.setEnabled(False) self.MessageLabel.setText(translate(u'AuthorForm', u'Author in use "Delete" is disabled'))
else: self.DeleteButton.setEnabled(False)
self.MessageLabel.setText(translate(u'AuthorForm', u'Author in not used')) else:
self.DeleteButton.setEnabled(True) self.MessageLabel.setText(translate(u'AuthorForm', u'Author in not used'))
self._validate_form() self.DeleteButton.setEnabled(True)
self._validate_form()
self.DisplayEdit.setFocus() self.DisplayEdit.setFocus()
def _validate_form(self): def _validate_form(self):

View File

@ -62,6 +62,7 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog):
self.BookSongListWidget.setCurrentRow(self.BookSongListWidget.count() - 1) self.BookSongListWidget.setCurrentRow(self.BookSongListWidget.count() - 1)
else: else:
self.BookSongListWidget.setCurrentRow(self.currentRow) self.BookSongListWidget.setCurrentRow(self.currentRow)
self.onBooksListViewItemClicked()
def onDeleteButtonClick(self): def onDeleteButtonClick(self):
""" """
@ -98,24 +99,25 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog):
self._validate_form() self._validate_form()
self.NameEdit.setFocus() self.NameEdit.setFocus()
def onBooksListViewItemClicked(self, index): def onBooksListViewItemClicked(self):
""" """
An Book has been selected display it An Book has been selected display it
If the Book is attached to a Song prevent delete If the Book is attached to a Song prevent delete
""" """
self.currentRow = self.BookSongListWidget.currentRow() self.currentRow = self.BookSongListWidget.currentRow()
item = self.BookSongListWidget.currentItem() item = self.BookSongListWidget.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] if item is not None:
self.Book = self.songmanager.get_book(item_id) item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.NameEdit.setText(self.Book.name) self.Book = self.songmanager.get_book(item_id)
self.PublisherEdit.setText(self.Book.publisher) self.NameEdit.setText(self.Book.name)
if len(self.Book.songs) > 0: self.PublisherEdit.setText(self.Book.publisher)
self.MessageLabel.setText(translate(u'BookForm', u'Book in use "Delete" is disabled')) if len(self.Book.songs) > 0:
self.DeleteButton.setEnabled(False) self.MessageLabel.setText(translate(u'BookForm', u'Book in use "Delete" is disabled'))
else: self.DeleteButton.setEnabled(False)
self.MessageLabel.setText(translate(u'BookForm', u'Book in not used')) else:
self.DeleteButton.setEnabled(True) self.MessageLabel.setText(translate(u'BookForm', u'Book in not used'))
self._validate_form() self.DeleteButton.setEnabled(True)
self._validate_form()
self.NameEdit.setFocus() self.NameEdit.setFocus()
def _validate_form(self): def _validate_form(self):

View File

@ -63,6 +63,7 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog):
else: else:
self.TopicsListWidget.setCurrentRow(self.currentRow) self.TopicsListWidget.setCurrentRow(self.currentRow)
self._validate_form() self._validate_form()
self.onTopicsListWidgetItemClicked()
def onDeleteButtonClick(self): def onDeleteButtonClick(self):
""" """
@ -97,23 +98,24 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog):
self._validate_form() self._validate_form()
self.TopicNameEdit.setFocus() self.TopicNameEdit.setFocus()
def onTopicsListWidgetItemClicked(self, index): def onTopicsListWidgetItemClicked(self):
""" """
An Topic has been selected display it An Topic has been selected display it
If the Topic is attached to a Song prevent delete If the Topic is attached to a Song prevent delete
""" """
self.currentRow = self.TopicsListWidget.currentRow() self.currentRow = self.TopicsListWidget.currentRow()
item = self.TopicsListWidget.currentItem() item = self.TopicsListWidget.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] if item is not None:
self.topic = self.songmanager.get_topic(item_id) item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.TopicNameEdit.setText(self.topic.name) self.topic = self.songmanager.get_topic(item_id)
if len(self.topic.songs) > 0: self.TopicNameEdit.setText(self.topic.name)
self.MessageLabel.setText(translate(u'TopicForm', u'Topic in use "Delete" is disabled')) if len(self.topic.songs) > 0:
self.DeleteButton.setEnabled(False) self.MessageLabel.setText(translate(u'TopicForm', u'Topic in use "Delete" is disabled'))
else: self.DeleteButton.setEnabled(False)
self.MessageLabel.setText(translate(u'TopicForm', u'Topic in not used')) else:
self.DeleteButton.setEnabled(True) self.MessageLabel.setText(translate(u'TopicForm', u'Topic in not used'))
self._validate_form() self.DeleteButton.setEnabled(True)
self._validate_form()
self.TopicNameEdit.setFocus() self.TopicNameEdit.setFocus()
def _validate_form(self): def _validate_form(self):

View File

@ -289,7 +289,7 @@ class SongMediaItem(MediaManagerItem):
else: else:
verses = song.lyrics.split(u'\n\n') verses = song.lyrics.split(u'\n\n')
for slide in verses: for slide in verses:
service_item.add_from_text(slide[:30], slide) service_item.add_from_text(slide[:30], unicode(slide))
service_item.title = song.title service_item.title = song.title
for author in song.authors: for author in song.authors:
if len(author_list) > 1: if len(author_list) > 1: