Lots of yummy updates to the song maintenance form.

This commit is contained in:
Raoul Snyman 2009-07-24 22:40:34 +02:00
parent af9b8edd6f
commit d4d6a88c6f
17 changed files with 495 additions and 1259 deletions

View File

@ -22,100 +22,44 @@ from openlp.core.lib import translate
class Ui_AuthorsDialog(object): class Ui_AuthorsDialog(object):
def setupUi(self, AuthorsDialog): def setupUi(self, AuthorsDialog):
AuthorsDialog.setObjectName(u'AuthorsDialog') AuthorsDialog.setObjectName("AuthorsDialog")
AuthorsDialog.resize(410, 505) AuthorsDialog.resize(393, 147)
self.DialogLayout = QtGui.QVBoxLayout(AuthorsDialog) self.AuthorsLayout = QtGui.QFormLayout(AuthorsDialog)
self.DialogLayout.setSpacing(8) self.AuthorsLayout.setMargin(8)
self.DialogLayout.setMargin(8) self.AuthorsLayout.setSpacing(8)
self.DialogLayout.setObjectName(u'DialogLayout') self.AuthorsLayout.setObjectName("AuthorsLayout")
self.AuthorListWidget = QtGui.QListWidget() self.FirstNameLabel = QtGui.QLabel(AuthorsDialog)
self.AuthorListWidget.setAlternatingRowColors(True) self.FirstNameLabel.setObjectName("FirstNameLabel")
self.DialogLayout.addWidget(self.AuthorListWidget) self.AuthorsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.FirstNameLabel)
self.AuthorDetails = QtGui.QGroupBox(AuthorsDialog) self.FirstNameEdit = QtGui.QLineEdit(AuthorsDialog)
self.AuthorDetails.setMinimumSize(QtCore.QSize(0, 0)) self.FirstNameEdit.setObjectName("FirstNameEdit")
self.AuthorDetails.setObjectName(u'AuthorDetails') self.AuthorsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.FirstNameEdit)
self.AuthorLayout = QtGui.QVBoxLayout(self.AuthorDetails) self.LastNameLabel = QtGui.QLabel(AuthorsDialog)
self.AuthorLayout.setSpacing(8) self.LastNameLabel.setObjectName("LastNameLabel")
self.AuthorLayout.setMargin(8) self.AuthorsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.LastNameLabel)
self.AuthorLayout.setObjectName(u'AuthorLayout') self.LastNameEdit = QtGui.QLineEdit(AuthorsDialog)
self.DetailsWidget = QtGui.QWidget(self.AuthorDetails) self.LastNameEdit.setObjectName("LastNameEdit")
self.DetailsWidget.setObjectName(u'DetailsWidget') self.AuthorsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.LastNameEdit)
self.DetailsLayout = QtGui.QFormLayout(self.DetailsWidget) self.DisplayLabel = QtGui.QLabel(AuthorsDialog)
self.DetailsLayout.setMargin(0) self.DisplayLabel.setObjectName("DisplayLabel")
self.DetailsLayout.setSpacing(8) self.AuthorsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.DisplayLabel)
self.DetailsLayout.setObjectName(u'DetailsLayout') self.DisplayEdit = QtGui.QLineEdit(AuthorsDialog)
self.DisplayLabel = QtGui.QLabel(self.DetailsWidget) self.DisplayEdit.setObjectName("DisplayEdit")
self.DisplayLabel.setObjectName(u'DisplayLabel') self.AuthorsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.DisplayEdit)
self.DetailsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.DisplayLabel) self.AuthorButtonBox = QtGui.QDialogButtonBox(AuthorsDialog)
self.DisplayEdit = QtGui.QLineEdit(self.DetailsWidget) self.AuthorButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.DisplayEdit.setObjectName(u'DisplayEdit') self.AuthorButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save)
self.DetailsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.DisplayEdit) self.AuthorButtonBox.setObjectName("AuthorButtonBox")
self.FirstNameLabel = QtGui.QLabel(self.DetailsWidget) self.AuthorsLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.AuthorButtonBox)
self.FirstNameLabel.setObjectName(u'FirstNameLabel')
self.DetailsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.FirstNameLabel)
self.FirstNameEdit = QtGui.QLineEdit(self.DetailsWidget)
self.FirstNameEdit.setObjectName(u'FirstNameEdit')
self.DetailsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.FirstNameEdit)
self.LastNameLabel = QtGui.QLabel(self.DetailsWidget)
self.LastNameLabel.setObjectName(u'LastNameLabel')
self.DetailsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.LastNameLabel)
self.LastNameEdit = QtGui.QLineEdit(self.DetailsWidget)
self.LastNameEdit.setObjectName(u'LastNameEdit')
self.DetailsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.LastNameEdit)
self.AuthorLayout.addWidget(self.DetailsWidget)
self.MessageLabel = QtGui.QLabel(self.AuthorDetails)
self.MessageLabel.setObjectName(u'MessageLabel')
self.AuthorLayout.addWidget(self.MessageLabel)
self.ButtonWidget = QtGui.QWidget(self.AuthorDetails)
self.ButtonWidget.setMinimumSize(QtCore.QSize(0, 0))
self.ButtonWidget.setObjectName(u'ButtonWidget')
self.ButtonLayout = QtGui.QHBoxLayout(self.ButtonWidget)
self.ButtonLayout.setSpacing(8)
self.ButtonLayout.setMargin(0)
self.ButtonLayout.setObjectName(u'ButtonLayout')
spacerItem = QtGui.QSpacerItem(198, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.ButtonLayout.addItem(spacerItem)
self.ClearButton = QtGui.QPushButton(self.ButtonWidget)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(u':/services/service_new.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.ClearButton.setIcon(icon)
self.ClearButton.setObjectName(u'ClearButton')
self.ButtonLayout.addWidget(self.ClearButton)
self.AddUpdateButton = QtGui.QPushButton(self.ButtonWidget)
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(u':/services/service_save.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.AddUpdateButton.setIcon(icon1)
self.AddUpdateButton.setObjectName(u'AddUpdateButton')
self.ButtonLayout.addWidget(self.AddUpdateButton)
self.DeleteButton = QtGui.QPushButton(self.ButtonWidget)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(u':/services/service_delete.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.DeleteButton.setIcon(icon2)
self.DeleteButton.setObjectName(u'DeleteButton')
self.ButtonLayout.addWidget(self.DeleteButton)
self.AuthorLayout.addWidget(self.ButtonWidget)
self.DialogLayout.addWidget(self.AuthorDetails)
self.buttonBox = QtGui.QDialogButtonBox(AuthorsDialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName(u'buttonBox')
self.DialogLayout.addWidget(self.buttonBox)
self.retranslateUi(AuthorsDialog) self.retranslateUi(AuthorsDialog)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'accepted()'), AuthorsDialog.accept) QtCore.QObject.connect(self.AuthorButtonBox, QtCore.SIGNAL("accepted()"), AuthorsDialog.accept)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(u'rejected()'), AuthorsDialog.reject) QtCore.QObject.connect(self.AuthorButtonBox, QtCore.SIGNAL("rejected()"), AuthorsDialog.reject)
QtCore.QMetaObject.connectSlotsByName(AuthorsDialog) QtCore.QMetaObject.connectSlotsByName(AuthorsDialog)
def retranslateUi(self, AuthorsDialog): def retranslateUi(self, AuthorsDialog):
AuthorsDialog.setWindowTitle(translate(u'AuthorsDialog', u'Author Maintenance')) AuthorsDialog.setWindowTitle(QtGui.QApplication.translate("AuthorsDialog", "Author Maintenance", None, QtGui.QApplication.UnicodeUTF8))
self.AuthorDetails.setTitle(translate(u'AuthorsDialog', u'Author Details')) self.DisplayLabel.setText(QtGui.QApplication.translate("AuthorsDialog", "Display Name:", None, QtGui.QApplication.UnicodeUTF8))
self.DisplayLabel.setText(translate(u'AuthorsDialog', u'Display Name:')) self.FirstNameLabel.setText(QtGui.QApplication.translate("AuthorsDialog", "First Name:", None, QtGui.QApplication.UnicodeUTF8))
self.FirstNameLabel.setText(translate(u'AuthorsDialog', u'First Name:')) self.AuthorButtonBox.setToolTip(QtGui.QApplication.translate("AuthorsDialog", "Exit Screen", None, QtGui.QApplication.UnicodeUTF8))
self.LastNameLabel.setText(translate(u'AuthorsDialog', u'Last Name:')) self.LastNameLabel.setText(QtGui.QApplication.translate("AuthorsDialog", "Last Name:", None, QtGui.QApplication.UnicodeUTF8))
self.ClearButton.setToolTip(translate(u'AuthorsDialog', u'Clear Selection'))
self.ClearButton.setText(translate(u'AuthorsDialog', u'Clear'))
self.AddUpdateButton.setToolTip(translate(u'AuthorsDialog', u'Add Update Author'))
self.AddUpdateButton.setText(translate(u'AuthorsDialog', u'Save'))
self.DeleteButton.setToolTip(translate(u'AuthorsDialog', u'Delete Author'))
self.DeleteButton.setText(translate(u'AuthorsDialog', u'Delete'))
self.buttonBox.setToolTip(translate(u'AuthorsDialog', u'Exit Screen'))

View File

@ -18,121 +18,142 @@ Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from PyQt4 import QtGui, QtCore from PyQt4 import QtGui, QtCore
from openlp.core.lib import translate from openlp.core.lib import translate
from openlp.plugins.songs.forms.authorsdialog import Ui_AuthorsDialog from authorsdialog import Ui_AuthorsDialog
from openlp.plugins.songs.lib.classes import Author
class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
""" """
Class to control the Maintenance of Authors Dialog Class to control the Maintenance of Authors Dialog
""" """
def __init__(self, songmanager, parent = None): def __init__(self, parent=None):
""" """
Set up the screen and common data Set up the screen and common data
""" """
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
self.songmanager = songmanager self.autoDisplayName = False
self.currentRow = 0 QtCore.QObject.connect(self.FirstNameEdit,
self.author = None QtCore.SIGNAL(u'textEdited(QString)'), self.onFirstNameEditTextEdited)
QtCore.QObject.connect(self.LastNameEdit,
QtCore.SIGNAL(u'textEdited(QString)'), self.onLastNameEditTextEdited)
QtCore.QObject.connect(self.DeleteButton, def exec_(self, clear=True):
QtCore.SIGNAL(u'pressed()'), self.onDeleteButtonClick) if clear:
QtCore.QObject.connect(self.ClearButton, self.FirstNameEdit.clear()
QtCore.SIGNAL(u'pressed()'), self.onClearButtonClick) self.LastNameEdit.clear()
QtCore.QObject.connect(self.AddUpdateButton, self.DisplayEdit.clear()
QtCore.SIGNAL(u'pressed()'), self.onAddUpdateButtonClick) self.FirstNameEdit.setFocus()
QtCore.QObject.connect(self.DisplayEdit, return QtGui.QDialog.exec_(self)
QtCore.SIGNAL(u'lostFocus()'), self.onDisplayEditLostFocus)
QtCore.QObject.connect(self.AuthorListWidget,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onAuthorListWidgetItemClicked)
def load_form(self): def onFirstNameEditTextEdited(self, text):
""" if not self.autoDisplayName:
Refresh the screen and rest fields return
""" display_name = text
self.AuthorListWidget.clear() if self.LastNameEdit.text() != u'':
# tidy up screen display_name = display_name + u' ' + self.LastNameEdit.text()
self.onClearButtonClick() self.DisplayEdit.setText(display_name)
authors = self.songmanager.get_authors()
for author in authors:
author_name = QtGui.QListWidgetItem(author.display_name)
author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
self.AuthorListWidget.addItem(author_name)
if self.currentRow >= self.AuthorListWidget.count() :
self.AuthorListWidget.setCurrentRow(self.AuthorListWidget.count() - 1)
else:
self.AuthorListWidget.setCurrentRow(self.currentRow)
self._validate_form()
def onDeleteButtonClick(self): def onLastNameEditTextEdited(self, text):
""" if not self.autoDisplayName:
Delete the author is the Author is not attached to any songs return
""" display_name = text
self.songmanager.delete_author(self.author.id) if self.FirstNameEdit.text() != u'':
self.load_form() display_name = self.FirstNameEdit.text() + u' ' + display_name
self.DisplayEdit.setText(display_name)
def onDisplayEditLostFocus(self): def autoDisplayName(self):
self._validate_form() return self.autoDisplayName
def onAddUpdateButtonClick(self): def setAutoDisplayName(self, on):
""" self.autoDisplayName = on
Sent New or update details to the database
"""
if self.author == None:
self.author = Author()
self.author.display_name = unicode(self.DisplayEdit.displayText())
self.author.first_name = unicode(self.FirstNameEdit.displayText())
self.author.last_name = unicode(self.LastNameEdit.displayText())
self.songmanager.save_author(self.author)
self.onClearButtonClick()
self.load_form()
def onClearButtonClick(self):
"""
Tidy up screen if clear button pressed
"""
self.DisplayEdit.setText(u'')
self.FirstNameEdit.setText(u'')
self.LastNameEdit.setText(u'')
self.MessageLabel.setText(u'')
self.DeleteButton.setEnabled(False)
self.author = None
self._validate_form()
self.DisplayEdit.setFocus()
def onAuthorListWidgetItemClicked(self, index): # def load_form(self):
""" # """
An Author has been selected display it # Refresh the screen and rest fields
If the author is attached to a Song prevent delete # """
""" # self.AuthorListWidget.clear()
self.currentRow = self.AuthorListWidget.currentRow() # # tidy up screen
item = self.AuthorListWidget.currentItem() # self.onClearButtonClick()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] # authors = self.songmanager.get_authors()
self.author = self.songmanager.get_author(item_id) # for author in authors:
self.DisplayEdit.setText(self.author.display_name) # author_name = QtGui.QListWidgetItem(author.display_name)
if self.author.first_name is None: # author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
self.FirstNameEdit.setText(u'') # self.AuthorListWidget.addItem(author_name)
else: # if self.currentRow >= self.AuthorListWidget.count() :
self.FirstNameEdit.setText(self.author.first_name) # self.AuthorListWidget.setCurrentRow(self.AuthorListWidget.count() - 1)
if self.author.last_name is None: # else:
self.LastNameEdit.setText(u'') # self.AuthorListWidget.setCurrentRow(self.currentRow)
else: # self._validate_form()
self.LastNameEdit.setText(self.author.last_name) #
if len(self.author.songs) > 0: # def onDeleteButtonClick(self):
self.MessageLabel.setText(translate(u'AuthorForm', u'Author in use "Delete" is disabled')) # """
self.DeleteButton.setEnabled(False) # Delete the author is the Author is not attached to any songs
else: # """
self.MessageLabel.setText(translate(u'AuthorForm', u'Author in not used')) # self.songmanager.delete_author(self.author.id)
self.DeleteButton.setEnabled(True) # self.load_form()
self._validate_form() #
self.DisplayEdit.setFocus() # def onDisplayEditLostFocus(self):
# self._validate_form()
def _validate_form(self): #
""" # def onAddUpdateButtonClick(self):
Validate the form and set if Add button if valid. # """
""" # Sent New or update details to the database
# We need at lease a display name # """
if len(self.DisplayEdit.displayText()) == 0: # if self.author == None:
self.AddUpdateButton.setEnabled(False) # self.author = Author()
else: # self.author.display_name = unicode(self.DisplayEdit.displayText())
self.AddUpdateButton.setEnabled(True) # self.author.first_name = unicode(self.FirstNameEdit.displayText())
# self.author.last_name = unicode(self.LastNameEdit.displayText())
# self.songmanager.save_author(self.author)
# self.onClearButtonClick()
# self.load_form()
#
# def onClearButtonClick(self):
# """
# Tidy up screen if clear button pressed
# """
# self.DisplayEdit.setText(u'')
# self.FirstNameEdit.setText(u'')
# self.LastNameEdit.setText(u'')
# self.MessageLabel.setText(u'')
# self.DeleteButton.setEnabled(False)
# self.author = None
# self._validate_form()
# self.DisplayEdit.setFocus()
#
# def onAuthorListWidgetItemClicked(self, index):
# """
# An Author has been selected display it
# If the author is attached to a Song prevent delete
# """
# self.currentRow = self.AuthorListWidget.currentRow()
# item = self.AuthorListWidget.currentItem()
# item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
# self.author = self.songmanager.get_author(item_id)
# self.DisplayEdit.setText(self.author.display_name)
# if self.author.first_name is None:
# self.FirstNameEdit.setText(u'')
# else:
# self.FirstNameEdit.setText(self.author.first_name)
# if self.author.last_name is None:
# self.LastNameEdit.setText(u'')
# else:
# self.LastNameEdit.setText(self.author.last_name)
# if len(self.author.songs) > 0:
# self.MessageLabel.setText(translate(u'AuthorForm', u'Author in use "Delete" is disabled'))
# self.DeleteButton.setEnabled(False)
# else:
# self.MessageLabel.setText(translate(u'AuthorForm', u'Author in not used'))
# self.DeleteButton.setEnabled(True)
# self._validate_form()
# self.DisplayEdit.setFocus()
#
# def _validate_form(self):
# """
# Validate the form and set if Add button if valid.
# """
# # We need at lease a display name
# if len(self.DisplayEdit.displayText()) == 0:
# self.AddUpdateButton.setEnabled(False)
# else:
# self.AddUpdateButton.setEnabled(True)

View File

@ -1,133 +0,0 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '/home/raoul/Projects/openlp/songmaintenance/resources/forms/songmaintenance.ui'
#
# Created: Wed Jul 22 10:03:53 2009
# by: PyQt4 UI code generator 4.4.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_SongMaintenanceDialog(object):
def setupUi(self, SongMaintenanceDialog):
SongMaintenanceDialog.setObjectName("SongMaintenanceDialog")
SongMaintenanceDialog.resize(486, 361)
self.verticalLayout = QtGui.QVBoxLayout(SongMaintenanceDialog)
self.verticalLayout.setSpacing(8)
self.verticalLayout.setMargin(8)
self.verticalLayout.setObjectName("verticalLayout")
self.ContentWidget = QtGui.QWidget(SongMaintenanceDialog)
self.ContentWidget.setObjectName("ContentWidget")
self.horizontalLayout = QtGui.QHBoxLayout(self.ContentWidget)
self.horizontalLayout.setSpacing(8)
self.horizontalLayout.setMargin(0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.TypeListWidget = QtGui.QListWidget(self.ContentWidget)
self.TypeListWidget.setMaximumSize(QtCore.QSize(150, 16777215))
self.TypeListWidget.setProperty("showDropIndicator", QtCore.QVariant(False))
self.TypeListWidget.setIconSize(QtCore.QSize(32, 32))
self.TypeListWidget.setFlow(QtGui.QListView.TopToBottom)
self.TypeListWidget.setSpacing(0)
self.TypeListWidget.setViewMode(QtGui.QListView.IconMode)
self.TypeListWidget.setUniformItemSizes(True)
self.TypeListWidget.setObjectName("TypeListWidget")
#self.TypeListWidget.setColumnWidth(0, self.TypeListWidget.viewport().size().width())
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/songs/author_maintenance.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
item = QtGui.QListWidgetItem(self.TypeListWidget)
item.setIcon(icon)
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(":/songs/topic_maintenance.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
item = QtGui.QListWidgetItem(self.TypeListWidget)
item.setIcon(icon1)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(":/songs/book_maintenance.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
item = QtGui.QListWidgetItem(self.TypeListWidget)
item.setIcon(icon2)
self.horizontalLayout.addWidget(self.TypeListWidget)
self.TypeStackedWidget = QtGui.QStackedWidget(self.ContentWidget)
self.TypeStackedWidget.setObjectName("TypeStackedWidget")
self.AuthorsPage = QtGui.QWidget()
self.AuthorsPage.setObjectName("AuthorsPage")
self.verticalLayout_2 = QtGui.QVBoxLayout(self.AuthorsPage)
self.verticalLayout_2.setSpacing(8)
self.verticalLayout_2.setMargin(0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.AuthorsListWidget = QtGui.QListWidget(self.AuthorsPage)
self.AuthorsListWidget.setObjectName("AuthorsListWidget")
self.verticalLayout_2.addWidget(self.AuthorsListWidget)
self.AuthorWidget = QtGui.QWidget(self.AuthorsPage)
self.AuthorWidget.setObjectName("AuthorWidget")
self.horizontalLayout_2 = QtGui.QHBoxLayout(self.AuthorWidget)
self.horizontalLayout_2.setSpacing(8)
self.horizontalLayout_2.setMargin(0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.AuthorAddButton = QtGui.QPushButton(self.AuthorWidget)
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(":/songs/song_author_edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.AuthorAddButton.setIcon(icon3)
self.AuthorAddButton.setObjectName("AuthorAddButton")
self.horizontalLayout_2.addWidget(self.AuthorAddButton)
self.AuthorEditButton = QtGui.QPushButton(self.AuthorWidget)
icon4 = QtGui.QIcon()
icon4.addPixmap(QtGui.QPixmap(":/songs/song_edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.AuthorEditButton.setIcon(icon4)
self.AuthorEditButton.setObjectName("AuthorEditButton")
self.horizontalLayout_2.addWidget(self.AuthorEditButton)
self.AuthorDeleteButton = QtGui.QPushButton(self.AuthorWidget)
icon5 = QtGui.QIcon()
icon5.addPixmap(QtGui.QPixmap(":/songs/song_delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.AuthorDeleteButton.setIcon(icon5)
self.AuthorDeleteButton.setObjectName("AuthorDeleteButton")
self.horizontalLayout_2.addWidget(self.AuthorDeleteButton)
self.verticalLayout_2.addWidget(self.AuthorWidget)
self.TypeStackedWidget.addWidget(self.AuthorsPage)
self.TopicsPage = QtGui.QWidget()
self.TopicsPage.setObjectName("TopicsPage")
self.TypeStackedWidget.addWidget(self.TopicsPage)
self.BooksPage = QtGui.QWidget()
self.BooksPage.setObjectName("BooksPage")
self.listWidget = QtGui.QListWidget(self.BooksPage)
self.listWidget.setGeometry(QtCore.QRect(30, 20, 256, 192))
self.listWidget.setObjectName("listWidget")
self.TypeStackedWidget.addWidget(self.BooksPage)
self.horizontalLayout.addWidget(self.TypeStackedWidget)
self.verticalLayout.addWidget(self.ContentWidget)
self.MaintenanceButtonBox = QtGui.QDialogButtonBox(SongMaintenanceDialog)
self.MaintenanceButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.MaintenanceButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Close)
self.MaintenanceButtonBox.setObjectName("MaintenanceButtonBox")
self.verticalLayout.addWidget(self.MaintenanceButtonBox)
self.retranslateUi(SongMaintenanceDialog)
self.TypeStackedWidget.setCurrentIndex(0)
QtCore.QObject.connect(self.MaintenanceButtonBox, QtCore.SIGNAL("rejected()"), SongMaintenanceDialog.accept)
QtCore.QObject.connect(self.TypeListWidget, QtCore.SIGNAL("currentRowChanged(int)"), self.TypeStackedWidget.setCurrentIndex)
QtCore.QMetaObject.connectSlotsByName(SongMaintenanceDialog)
def retranslateUi(self, SongMaintenanceDialog):
SongMaintenanceDialog.setWindowTitle(QtGui.QApplication.translate("SongMaintenanceDialog", "Song Maintenance", None, QtGui.QApplication.UnicodeUTF8))
__sortingEnabled = self.TypeListWidget.isSortingEnabled()
self.TypeListWidget.setSortingEnabled(False)
self.TypeListWidget.item(0).setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Authors", None, QtGui.QApplication.UnicodeUTF8))
self.TypeListWidget.item(1).setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Topics", None, QtGui.QApplication.UnicodeUTF8))
self.TypeListWidget.item(2).setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Books/Hymnals", None, QtGui.QApplication.UnicodeUTF8))
self.TypeListWidget.setSortingEnabled(__sortingEnabled)
self.AuthorAddButton.setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Add", None, QtGui.QApplication.UnicodeUTF8))
self.AuthorEditButton.setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Edit", None, QtGui.QApplication.UnicodeUTF8))
self.AuthorDeleteButton.setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Delete", None, QtGui.QApplication.UnicodeUTF8))
from openlp.core.resources import *
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
SongMaintenanceDialog = QtGui.QDialog()
ui = Ui_SongMaintenanceDialog()
ui.setupUi(SongMaintenanceDialog)
SongMaintenanceDialog.show()
sys.exit(app.exec_())

View File

@ -22,98 +22,37 @@ from openlp.core.lib import translate
class Ui_SongBookDialog(object): class Ui_SongBookDialog(object):
def setupUi(self, SongBookDialog): def setupUi(self, SongBookDialog):
SongBookDialog.setObjectName(u'SongBookDialog') SongBookDialog.setObjectName("SongBookDialog")
SongBookDialog.resize(387, 531) SongBookDialog.resize(367, 120)
self.DialogLayout = QtGui.QVBoxLayout(SongBookDialog) self.SongBookLayout = QtGui.QFormLayout(SongBookDialog)
self.DialogLayout.setSpacing(8)
self.DialogLayout.setMargin(8)
self.DialogLayout.setObjectName(u'DialogLayout')
self.BookSongListWidget = QtGui.QListWidget()
self.BookSongListWidget.setAlternatingRowColors(True)
self.DialogLayout.addWidget(self.BookSongListWidget)
self.DialogLayout.addWidget(self.BookSongListWidget)
self.SongBookGroup = QtGui.QGroupBox(SongBookDialog)
self.SongBookGroup.setMinimumSize(QtCore.QSize(0, 200))
self.SongBookGroup.setObjectName(u'SongBookGroup')
self.SongBookLayout = QtGui.QVBoxLayout(self.SongBookGroup)
self.SongBookLayout.setSpacing(8)
self.SongBookLayout.setMargin(8) self.SongBookLayout.setMargin(8)
self.SongBookLayout.setObjectName(u'SongBookLayout') self.SongBookLayout.setSpacing(8)
self.DetailsWidget = QtGui.QWidget(self.SongBookGroup) self.SongBookLayout.setObjectName("SongBookLayout")
self.DetailsWidget.setMinimumSize(QtCore.QSize(0, 0)) self.NameLabel = QtGui.QLabel(SongBookDialog)
self.DetailsWidget.setObjectName(u'DetailsWidget') self.NameLabel.setObjectName("NameLabel")
self.DetailsLayout = QtGui.QFormLayout(self.DetailsWidget) self.SongBookLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.NameLabel)
self.DetailsLayout.setMargin(0) self.NameEdit = QtGui.QLineEdit(SongBookDialog)
self.DetailsLayout.setSpacing(8) self.NameEdit.setObjectName("NameEdit")
self.DetailsLayout.setObjectName(u'DetailsLayout') self.SongBookLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.NameEdit)
self.NameLabel = QtGui.QLabel(self.DetailsWidget) self.PublisherLabel = QtGui.QLabel(SongBookDialog)
self.NameLabel.setObjectName(u'NameLabel') self.PublisherLabel.setObjectName("PublisherLabel")
self.DetailsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.NameLabel) self.SongBookLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.PublisherLabel)
self.NameEdit = QtGui.QLineEdit(self.DetailsWidget) self.PublisherEdit = QtGui.QLineEdit(SongBookDialog)
self.NameEdit.setObjectName(u'NameEdit') self.PublisherEdit.setObjectName("PublisherEdit")
self.DetailsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.NameEdit) self.SongBookLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.PublisherEdit)
self.PublisherLabel = QtGui.QLabel(self.DetailsWidget)
self.PublisherLabel.setObjectName(u'PublisherLabel')
self.DetailsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.PublisherLabel)
self.PublisherEdit = QtGui.QLineEdit(self.DetailsWidget)
self.PublisherEdit.setObjectName(u'PublisherEdit')
self.DetailsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.PublisherEdit)
self.SongBookLayout.addWidget(self.DetailsWidget)
self.MessageLabel = QtGui.QLabel(self.SongBookGroup)
self.MessageLabel.setObjectName(u'MessageLabel')
self.SongBookLayout.addWidget(self.MessageLabel)
self.ButtonWidget = QtGui.QWidget(self.SongBookGroup)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.ButtonWidget.sizePolicy().hasHeightForWidth())
self.ButtonWidget.setSizePolicy(sizePolicy)
self.ButtonWidget.setMinimumSize(QtCore.QSize(0, 0))
self.ButtonWidget.setObjectName(u'ButtonWidget')
self.ButtonLayout = QtGui.QHBoxLayout(self.ButtonWidget)
self.ButtonLayout.setSpacing(8)
self.ButtonLayout.setMargin(0)
self.ButtonLayout.setObjectName(u'ButtonLayout')
spacerItem = QtGui.QSpacerItem(61, 24, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.ButtonLayout.addItem(spacerItem)
self.ClearButton = QtGui.QPushButton(self.ButtonWidget)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(u':/services/service_new.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.ClearButton.setIcon(icon)
self.ClearButton.setObjectName(u'ClearButton')
self.ButtonLayout.addWidget(self.ClearButton)
self.AddUpdateButton = QtGui.QPushButton(self.ButtonWidget)
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(u':/services/service_save.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.AddUpdateButton.setIcon(icon1)
self.AddUpdateButton.setObjectName(u'AddUpdateButton')
self.ButtonLayout.addWidget(self.AddUpdateButton)
self.DeleteButton = QtGui.QPushButton(self.ButtonWidget)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(u':/services/service_delete.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.DeleteButton.setIcon(icon2)
self.DeleteButton.setObjectName(u'DeleteButton')
self.ButtonLayout.addWidget(self.DeleteButton)
self.SongBookLayout.addWidget(self.ButtonWidget)
self.DialogLayout.addWidget(self.SongBookGroup)
self.ButtonBox = QtGui.QDialogButtonBox(SongBookDialog) self.ButtonBox = QtGui.QDialogButtonBox(SongBookDialog)
self.ButtonBox.setOrientation(QtCore.Qt.Horizontal) self.ButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok) self.ButtonBox.setStandardButtons(
self.ButtonBox.setObjectName(u'ButtonBox') QtGui.QDialogButtonBox.Save | QtGui.QDialogButtonBox.Cancel)
self.DialogLayout.addWidget(self.ButtonBox) self.ButtonBox.setObjectName("ButtonBox")
self.SongBookLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.ButtonBox)
self.retranslateUi(SongBookDialog) self.retranslateUi(SongBookDialog)
QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'accepted()'), SongBookDialog.accept) QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("accepted()"), SongBookDialog.accept)
QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'rejected()'), SongBookDialog.reject) QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL("rejected()"), SongBookDialog.reject)
QtCore.QMetaObject.connectSlotsByName(SongBookDialog) QtCore.QMetaObject.connectSlotsByName(SongBookDialog)
def retranslateUi(self, SongBookDialog): def retranslateUi(self, SongBookDialog):
SongBookDialog.setWindowTitle(translate(u'SongBookDialog', u'Book Song Maintenance')) SongBookDialog.setWindowTitle(QtGui.QApplication.translate("SongBookDialog", "Edit Book", None, QtGui.QApplication.UnicodeUTF8))
self.SongBookGroup.setTitle(translate(u'SongBookDialog', u'Song Book')) self.NameLabel.setText(QtGui.QApplication.translate("SongBookDialog", "Name:", None, QtGui.QApplication.UnicodeUTF8))
self.NameLabel.setText(translate(u'SongBookDialog', u'Name:')) self.PublisherLabel.setText(QtGui.QApplication.translate("SongBookDialog", "Publisher:", None, QtGui.QApplication.UnicodeUTF8))
self.PublisherLabel.setText(translate(u'SongBookDialog', u'Publisher:'))
self.ClearButton.setToolTip(translate(u'SongBookDialog', u'Clear Selection'))
self.ClearButton.setText(translate(u'SongBookDialog', u'Clear'))
self.AddUpdateButton.setToolTip(translate(u'SongBookDialog', u'Add Update Author'))
self.AddUpdateButton.setText(translate(u'SongBookDialog', u'Save'))
self.DeleteButton.setToolTip(translate(u'SongBookDialog', u'Delete Author'))
self.DeleteButton.setText(translate(u'SongBookDialog', u'Delete'))

View File

@ -20,107 +20,22 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from PyQt4 import QtGui, QtCore from PyQt4 import QtGui, QtCore
from openlp.core.lib import translate from openlp.core.lib import translate
from songbookdialog import Ui_SongBookDialog from songbookdialog import Ui_SongBookDialog
from openlp.plugins.songs.lib.classes import Book
class SongBookForm(QtGui.QDialog, Ui_SongBookDialog): class SongBookForm(QtGui.QDialog, Ui_SongBookDialog):
""" """
Class documentation goes here. Class documentation goes here.
""" """
def __init__(self, songmanager, parent = None): def __init__(self, parent=None):
""" """
Constructor Constructor
""" """
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
self.songmanager = songmanager
self.currentRow = 0
self.songbook = None
QtCore.QObject.connect(self.DeleteButton, def exec_(self, clear=True):
QtCore.SIGNAL(u'pressed()'), self.onDeleteButtonClick) if clear:
QtCore.QObject.connect(self.ClearButton, self.NameEdit.clear()
QtCore.SIGNAL(u'pressed()'), self.onClearButtonClick) self.PublisherEdit.clear()
QtCore.QObject.connect(self.AddUpdateButton,
QtCore.SIGNAL(u'pressed()'), self.onAddUpdateButtonClick)
QtCore.QObject.connect(self.NameEdit,
QtCore.SIGNAL(u'lostFocus()'), self.onBookNameEditLostFocus)
QtCore.QObject.connect(self.BookSongListWidget,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onBooksListViewItemClicked)
def load_form(self):
"""
Refresh the screen and rest fields
"""
self.BookSongListWidget.clear()
self.onClearButtonClick() # tidy up screen
books = self.songmanager.get_books()
for book in books:
book_name = QtGui.QListWidgetItem(book.name)
book_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(book.id))
self.BookSongListWidget.addItem(book_name)
if self.currentRow >= self.BookSongListWidget.count() :
self.BookSongListWidget.setCurrentRow(self.BookSongListWidget.count() - 1)
else:
self.BookSongListWidget.setCurrentRow(self.currentRow)
def onDeleteButtonClick(self):
"""
Delete the Book is the Book is not attached to any songs
"""
self.songmanager.delete_book(self.Book.id)
self.load_form()
def onBookNameEditLostFocus(self):
self._validate_form()
def onAddUpdateButtonClick(self):
"""
Sent New or update details to the database
"""
if self.Book == None:
self.Book = Book()
self.Book.name = unicode(self.NameEdit.displayText())
self.Book.publisher = unicode(self.PublisherEdit.displayText())
self.songmanager.save_book(self.Book)
self.onClearButtonClick()
self.load_form()
def onClearButtonClick(self):
"""
Tidy up screen if clear button pressed
"""
self.NameEdit.setText(u'')
self.PublisherEdit.setText(u'')
self.MessageLabel.setText(u'')
self.DeleteButton.setEnabled(False)
self.AddUpdateButton.setEnabled(True)
self.Book = None
self._validate_form()
self.NameEdit.setFocus() self.NameEdit.setFocus()
return QtGui.QDialog.exec_(self)
def onBooksListViewItemClicked(self, index):
"""
An Book has been selected display it
If the Book is attached to a Song prevent delete
"""
self.currentRow = self.BookSongListWidget.currentRow()
item = self.BookSongListWidget.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.Book = self.songmanager.get_book(item_id)
self.NameEdit.setText(self.Book.name)
self.PublisherEdit.setText(self.Book.publisher)
if len(self.Book.songs) > 0:
self.MessageLabel.setText(translate(u'BookForm', u'Book in use "Delete" is disabled'))
self.DeleteButton.setEnabled(False)
else:
self.MessageLabel.setText(translate(u'BookForm', u'Book in not used'))
self.DeleteButton.setEnabled(True)
self._validate_form()
self.NameEdit.setFocus()
def _validate_form(self):
# We need at lease a display name
if len(self.NameEdit.displayText()) == 0:
self.AddUpdateButton.setEnabled(False)
else:
self.AddUpdateButton.setEnabled(True)

View File

@ -42,7 +42,6 @@ class Ui_SongMaintenanceDialog(object):
sizePolicy.setHeightForWidth(self.TypeListWidget.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.TypeListWidget.sizePolicy().hasHeightForWidth())
self.TypeListWidget.setSizePolicy(sizePolicy) self.TypeListWidget.setSizePolicy(sizePolicy)
self.TypeListWidget.setProperty("showDropIndicator", QtCore.QVariant(False)) self.TypeListWidget.setProperty("showDropIndicator", QtCore.QVariant(False))
#self.TypeListWidget.setFlow(QtGui.QListView.TopToBottom)
self.TypeListWidget.setSpacing(0) self.TypeListWidget.setSpacing(0)
self.TypeListWidget.setViewMode(QtGui.QListView.IconMode) self.TypeListWidget.setViewMode(QtGui.QListView.IconMode)
self.TypeListWidget.setIconSize(QtCore.QSize(128, 100)); self.TypeListWidget.setIconSize(QtCore.QSize(128, 100));
@ -69,23 +68,12 @@ class Ui_SongMaintenanceDialog(object):
self.AuthorsPage = QtGui.QWidget() self.AuthorsPage = QtGui.QWidget()
self.AuthorsPage.setObjectName("AuthorsPage") self.AuthorsPage.setObjectName("AuthorsPage")
self.AuthorsLayout = QtGui.QVBoxLayout(self.AuthorsPage) self.AuthorsLayout = QtGui.QVBoxLayout(self.AuthorsPage)
self.AuthorsLayout.setSpacing(8) self.AuthorsLayout.setSpacing(4)
self.AuthorsLayout.setMargin(0) self.AuthorsLayout.setMargin(0)
self.AuthorsLayout.setObjectName("AuthorsLayout") self.AuthorsLayout.setObjectName("AuthorsLayout")
self.AuthorsListWidget = QtGui.QListWidget(self.AuthorsPage) self.AuthorsListWidget = QtGui.QListWidget(self.AuthorsPage)
self.AuthorsListWidget.setObjectName("AuthorsListWidget") self.AuthorsListWidget.setObjectName("AuthorsListWidget")
self.AuthorsLayout.addWidget(self.AuthorsListWidget) self.AuthorsLayout.addWidget(self.AuthorsListWidget)
self.AuthorsErrorLabel = QtGui.QLabel(self.AuthorsPage)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.AuthorsErrorLabel.sizePolicy().hasHeightForWidth())
self.AuthorsErrorLabel.setSizePolicy(sizePolicy)
self.AuthorsErrorLabel.setSize(QtCore.QSize(0, 0))
self.AuthorsErrorLabel.setMargin(4)
self.AuthorsErrorLabel.setStyleSheet(u'background-color: #900; color: #fff;')
self.AuthorsErrorLabel.setObjectName("AuthorsErrorLabel")
self.AuthorsLayout.addWidget(self.AuthorsErrorLabel)
self.AuthorButtonWidget = QtGui.QWidget(self.AuthorsPage) self.AuthorButtonWidget = QtGui.QWidget(self.AuthorsPage)
self.AuthorButtonWidget.setObjectName("AuthorButtonWidget") self.AuthorButtonWidget.setObjectName("AuthorButtonWidget")
self.AuthorButtonsLayout = QtGui.QHBoxLayout(self.AuthorButtonWidget) self.AuthorButtonsLayout = QtGui.QHBoxLayout(self.AuthorButtonWidget)
@ -128,13 +116,6 @@ class Ui_SongMaintenanceDialog(object):
self.TopicsListWidget = QtGui.QListWidget(self.TopicsPage) self.TopicsListWidget = QtGui.QListWidget(self.TopicsPage)
self.TopicsListWidget.setObjectName("TopicsListWidget") self.TopicsListWidget.setObjectName("TopicsListWidget")
self.TopicLayout.addWidget(self.TopicsListWidget) self.TopicLayout.addWidget(self.TopicsListWidget)
self.TopicsErrorLabel = QtGui.QLabel(self.TopicsPage)
self.TopicsErrorLabel.setMaximumHeight(0)
self.TopicsErrorLabel.setMinimumHeight(0)
self.TopicsErrorLabel.setIndent(4)
self.TopicsErrorLabel.setStyleSheet(u'background-color: #900; color: #fff;')
self.TopicsErrorLabel.setObjectName("TopicsErrorLabel")
self.TopicLayout.addWidget(self.TopicsErrorLabel)
self.TopicButtonWidget = QtGui.QWidget(self.TopicsPage) self.TopicButtonWidget = QtGui.QWidget(self.TopicsPage)
self.TopicButtonWidget.setObjectName("TopicButtonWidget") self.TopicButtonWidget.setObjectName("TopicButtonWidget")
self.TopicButtonLayout = QtGui.QHBoxLayout(self.TopicButtonWidget) self.TopicButtonLayout = QtGui.QHBoxLayout(self.TopicButtonWidget)
@ -177,13 +158,6 @@ class Ui_SongMaintenanceDialog(object):
self.BooksListWidget = QtGui.QListWidget(self.BooksPage) self.BooksListWidget = QtGui.QListWidget(self.BooksPage)
self.BooksListWidget.setObjectName("BooksListWidget") self.BooksListWidget.setObjectName("BooksListWidget")
self.BookLayout.addWidget(self.BooksListWidget) self.BookLayout.addWidget(self.BooksListWidget)
self.BooksErrorLabel = QtGui.QLabel(self.BooksPage)
self.BooksErrorLabel.setMaximumHeight(0)
self.BooksErrorLabel.setMinimumHeight(0)
self.BooksErrorLabel.setIndent(4)
self.BooksErrorLabel.setStyleSheet(u'background-color: #900; color: #fff;')
self.BooksErrorLabel.setObjectName("BooksErrorLabel")
self.BookLayout.addWidget(self.BooksErrorLabel)
self.BookButtonWidget = QtGui.QWidget(self.BooksPage) self.BookButtonWidget = QtGui.QWidget(self.BooksPage)
self.BookButtonWidget.setObjectName("BookButtonWidget") self.BookButtonWidget.setObjectName("BookButtonWidget")
self.BookButtonLayout = QtGui.QHBoxLayout(self.BookButtonWidget) self.BookButtonLayout = QtGui.QHBoxLayout(self.BookButtonWidget)

View File

@ -19,9 +19,11 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from PyQt4 import QtGui, QtCore from PyQt4 import QtGui, QtCore
from openlp.core.lib import translate from openlp.core.lib import translate
from openlp.plugins.songs.forms import SongBookForm
from openlp.plugins.songs.lib.classes import Author, Book, Topic from openlp.plugins.songs.lib.classes import Author, Book, Topic
from songmaintenancedialog import Ui_SongMaintenanceDialog from songmaintenancedialog import Ui_SongMaintenanceDialog
from authorsform import AuthorsForm
from topicsform import TopicsForm
from songbookform import SongBookForm
class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
""" """
@ -34,9 +36,21 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
self.songmanager = songmanager self.songmanager = songmanager
self.timer = QtCore.QTimer() self.authorform = AuthorsForm(self)
QtCore.QObject.connect(self.timer, self.topicform = TopicsForm(self)
QtCore.SIGNAL(u'timeout()'), self._hideErrors) self.bookform = SongBookForm(self)
QtCore.QObject.connect(self.AuthorAddButton,
QtCore.SIGNAL(u'pressed()'), self.onAuthorAddButtonClick)
QtCore.QObject.connect(self.TopicAddButton,
QtCore.SIGNAL(u'pressed()'), self.onTopicAddButtonClick)
QtCore.QObject.connect(self.BookAddButton,
QtCore.SIGNAL(u'pressed()'), self.onBookAddButtonClick)
QtCore.QObject.connect(self.AuthorEditButton,
QtCore.SIGNAL(u'pressed()'), self.onAuthorEditButtonClick)
QtCore.QObject.connect(self.TopicEditButton,
QtCore.SIGNAL(u'pressed()'), self.onTopicEditButtonClick)
QtCore.QObject.connect(self.BookEditButton,
QtCore.SIGNAL(u'pressed()'), self.onBookEditButtonClick)
QtCore.QObject.connect(self.AuthorDeleteButton, QtCore.QObject.connect(self.AuthorDeleteButton,
QtCore.SIGNAL(u'pressed()'), self.onAuthorDeleteButtonClick) QtCore.SIGNAL(u'pressed()'), self.onAuthorDeleteButtonClick)
QtCore.QObject.connect(self.TopicDeleteButton, QtCore.QObject.connect(self.TopicDeleteButton,
@ -59,28 +73,23 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
else: else:
return -1 return -1
def _showError(self, error): def _deleteItem(self, list_widget, get_func, del_func, reset_func,
self.AuthorsErrorLabel.setSize(QtCore.QSize(0, 32)) dlg_title, del_text, err_text, sel_text):
self.AuthorsErrorLabel.setText(error) item_id = self._getCurrentItemId(list_widget)
self.TopicsErrorLabel.setMaximumHeight(32) if item_id != -1:
self.TopicsErrorLabel.setMinimumHeight(32) item = get_func(item_id)
self.TopicsErrorLabel.setText(error) if QtGui.QMessageBox.warning(self, dlg_title, del_text,
self.BooksErrorLabel.setMaximumHeight(32) QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
self.BooksErrorLabel.setMinimumHeight(32) ) == QtGui.QMessageBox.Yes:
self.BooksErrorLabel.setText(error) if item is not None and len(item.songs) == 0:
self.timer.start(2000) del_func(item.id)
reset_func()
def _hideErrors(self): else:
self.timer.stop() QtGui.QMessageBox.critical(self, dlg_title, err_text,
self.AuthorsErrorLabel.setMaximumHeight(0) QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.AuthorsErrorLabel.setMinimumHeight(0) else:
self.AuthorsErrorLabel.clear() QtGui.QMessageBox.critical(self, dlg_title, sel_text,
self.TopicsErrorLabel.setMaximumHeight(0) QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.TopicsErrorLabel.setMinimumHeight(0)
self.TopicsErrorLabel.clear()
self.BooksErrorLabel.setMaximumHeight(0)
self.BooksErrorLabel.setMinimumHeight(0)
self.BooksErrorLabel.clear()
def resetAuthors(self): def resetAuthors(self):
self.AuthorsListWidget.clear() self.AuthorsListWidget.clear()
@ -110,72 +119,125 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
book_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(book.id)) book_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(book.id))
self.BooksListWidget.addItem(book_name) self.BooksListWidget.addItem(book_name)
def onAuthorAddButtonClick(self):
self.authorform.setAutoDisplayName(True)
if self.authorform.exec_():
author = Author.populate(
first_name=unicode(self.authorform.FirstNameEdit.text(), u'utf-8'),
last_name=unicode(self.authorform.LastNameEdit.text(), u'utf-8'),
display_name=unicode(self.authorform.DisplayEdit.text(), u'utf-8'))
if self.songmanager.save_author(author):
self.resetAuthors()
else:
QtGui.QMessageBox.critical(self,
translate(u'SongMaintenanceForm', u'Error'),
translate(u'SongMaintenanceForm', u'Couldn\'t add your author!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
def onTopicAddButtonClick(self):
if self.topicform.exec_():
topic = Topic.populate(name=unicode(self.topicform.NameEdit.text(), u'utf-8'))
if self.songmanager.save_topic(topic):
self.resetTopics()
else:
QtGui.QMessageBox.critical(self,
translate(u'SongMaintenanceForm', u'Error'),
translate(u'SongMaintenanceForm', u'Couldn\'t add your topic!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
def onBookAddButtonClick(self):
if self.bookform.exec_():
book = Book.populate(name=unicode(self.bookform.NameEdit.text(), u'utf-8'),
publisher=unicode(self.bookform.PublisherEdit.text(), u'utf-8'))
if self.songmanager.save_book(book):
self.resetBooks()
else:
QtGui.QMessageBox.critical(self,
translate(u'SongMaintenanceForm', u'Error'),
translate(u'SongMaintenanceForm', u'Couldn\'t add your book!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
def onAuthorEditButtonClick(self):
author_id = self._getCurrentItemId(self.AuthorsListWidget)
if author_id != -1:
author = self.songmanager.get_author(author_id)
self.authorform.setAutoDisplayName(False)
self.authorform.FirstNameEdit.setText(author.first_name)
self.authorform.LastNameEdit.setText(author.last_name)
self.authorform.DisplayEdit.setText(author.display_name)
if self.authorform.exec_(False):
author.first_name = unicode(self.authorform.FirstNameEdit.text(), u'utf-8')
author.last_name = unicode(self.authorform.LastNameEdit.text(), u'utf-8')
author.display_name = unicode(self.authorform.DisplayEdit.text(), u'utf-8')
if self.songmanager.save_author(author):
self.resetAuthors()
else:
QtGui.QMessageBox.critical(self,
translate(u'SongMaintenanceForm', u'Error'),
translate(u'SongMaintenanceForm', u'Couldn\'t save your author!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
def onTopicEditButtonClick(self):
topic_id = self._getCurrentItemId(self.TopicsListWidget)
if topic_id != -1:
topic = self.songmanager.get_topic(topic_id)
self.topicform.NameEdit.setText(topic.name)
if self.topicform.exec_(False):
topic.name = unicode(self.topicform.NameEdit.text(), u'utf-8')
if self.songmanager.save_topic(topic):
self.resetTopics()
else:
QtGui.QMessageBox.critical(self,
translate(u'SongMaintenanceForm', u'Error'),
translate(u'SongMaintenanceForm', u'Couldn\'t save your topic!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
def onBookEditButtonClick(self):
book_id = self._getCurrentItemId(self.BooksListWidget)
if book_id != -1:
book = self.songmanager.get_book(book_id)
self.bookform.NameEdit.setText(book.name)
self.bookform.PublisherEdit.setText(book.publisher)
if self.bookform.exec_(False):
book.name = unicode(self.bookform.NameEdit.text(), u'utf-8')
book.publisher = unicode(self.bookform.PublisherEdit.text(), u'utf-8')
if self.songmanager.save_book(book):
self.resetBooks()
else:
QtGui.QMessageBox.critical(self,
translate(u'SongMaintenanceForm', u'Error'),
translate(u'SongMaintenanceForm', u'Couldn\'t save your book!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
def onAuthorDeleteButtonClick(self): def onAuthorDeleteButtonClick(self):
""" """
Delete the author if the author is not attached to any songs Delete the author if the author is not attached to any songs
""" """
author_id = self._getCurrentItemId(self.AuthorsListWidget) self._deleteItem(self.AuthorsListWidget, self.songmanager.get_author,
if author_id != -1: self.songmanager.delete_author, self.resetAuthors,
author = self.songmanager.get_author(author_id)
if QtGui.QMessageBox.warning(None,
translate(u'SongMaintenanceForm', u'Delete Author'), translate(u'SongMaintenanceForm', u'Delete Author'),
translate(u'SongMaintenanceForm', u'Are you sure you want to delete the selected author?'), translate(u'SongMaintenanceForm', u'Are you sure you want to delete the selected author?'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
) == QtGui.QMessageBox.Yes:
if len(author.songs) == 0:
self.songmanager.delete_author(author.id)
self.resetAuthors()
else:
QtGui.QMessageBox.critical(None,
translate(u'SongMaintenanceForm', u'Delete Author'),
translate(u'SongMaintenanceForm', u'This author can\'t be deleted, they are currently assigned to at least one song!'), translate(u'SongMaintenanceForm', u'This author can\'t be deleted, they are currently assigned to at least one song!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) translate(u'SongMaintenanceForm', u'No author selected!'))
else:
self._showError(translate(u'SongMaintenanceForm', u'No author selected!'))
def onTopicDeleteButtonClick(self): def onTopicDeleteButtonClick(self):
""" """
Delete the Book is the Book is not attached to any songs Delete the Book is the Book is not attached to any songs
""" """
topic_id = self._getCurrentItemId(self.TopicsListWidget) self._deleteItem(self.TopicsListWidget, self.songmanager.get_topic,
if topic_id != -1: self.songmanager.delete_topic, self.resetTopics,
topic = self.songmanager.get_topic(topic_id)
if QtGui.QMessageBox.warning(None,
translate(u'SongMaintenanceForm', u'Delete Topic'), translate(u'SongMaintenanceForm', u'Delete Topic'),
translate(u'SongMaintenanceForm', u'Are you sure you want to delete the selected topic?'), translate(u'SongMaintenanceForm', u'Are you sure you want to delete the selected topic?'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.Yes) translate(u'SongMaintenanceForm', u'This topic can\'t be deleted, it is currently assigned to at least one song!'),
) == QtGui.QMessageBox.Yes: translate(u'SongMaintenanceForm', u'No topic selected!'))
if len(topic.songs) == 0:
self.songmanager.delete_topic(topic.id)
self.resetTopics()
else:
#QtGui.QMessageBox.critical(None,
# translate(u'SongMaintenanceForm', u'Delete Topic'),
# translate(u'SongMaintenanceForm', u'This topic can\'t be deleted, it is currently assigned to at least one song!'),
# QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self._showError(translate(u'SongMaintenanceForm', u'This topic can\'t be deleted, it is currently assigned to at least one song!'))
else:
self._showError(translate(u'SongMaintenanceForm', u'No topic selected!'))
def onBookDeleteButtonClick(self): def onBookDeleteButtonClick(self):
""" """
Delete the Book is the Book is not attached to any songs Delete the Book is the Book is not attached to any songs
""" """
book_id = self._getCurrentItemId(self.BooksListWidget) self._deleteItem(self.BooksListWidget, self.songmanager.get_book,
if book_id != -1: self.songmanager.delete_book, self.resetBooks,
book = self.songmanager.get_book(book_id)
if QtGui.QMessageBox.warning(None,
translate(u'SongMaintenanceForm', u'Delete Book'), translate(u'SongMaintenanceForm', u'Delete Book'),
translate(u'SongMaintenanceForm', u'Are you sure you want to delete the selected book?'), translate(u'SongMaintenanceForm', u'Are you sure you want to delete the selected book?'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)
) == QtGui.QMessageBox.Yes:
if len(book.songs) == 0:
self.songmanager.delete_book(book.id)
self.resetBooks()
else:
QtGui.QMessageBox.critical(None,
translate(u'SongMaintenanceForm', u'Delete Book'),
translate(u'SongMaintenanceForm', u'This book can\'t be deleted, it is currently assigned to at least one song!'), translate(u'SongMaintenanceForm', u'This book can\'t be deleted, it is currently assigned to at least one song!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) translate(u'SongMaintenanceForm', u'No book selected!'))
else:
self._showError(translate(u'SongMaintenanceForm', u'No book selected!'))

View File

@ -22,67 +22,32 @@ from openlp.core.lib import translate
class Ui_TopicsDialog(object): class Ui_TopicsDialog(object):
def setupUi(self, TopicsDialog): def setupUi(self, TopicsDialog):
TopicsDialog.setObjectName(u'TopicsDialog') TopicsDialog.setObjectName("TopicsDialog")
TopicsDialog.resize(387, 463) TopicsDialog.resize(365, 77)
self.gridLayout_2 = QtGui.QGridLayout(TopicsDialog) self.TopicLayout = QtGui.QFormLayout(TopicsDialog)
self.gridLayout_2.setObjectName(u'gridLayout_2') self.TopicLayout.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow)
self.TopicGroupBox = QtGui.QGroupBox(TopicsDialog) self.TopicLayout.setMargin(8)
self.TopicGroupBox.setObjectName(u'TopicGroupBox') self.TopicLayout.setSpacing(8)
self.gridLayout = QtGui.QGridLayout(self.TopicGroupBox) self.TopicLayout.setObjectName("TopicLayout")
self.gridLayout.setObjectName(u'gridLayout') self.NameLabel = QtGui.QLabel(TopicsDialog)
self.TopicNameLabel = QtGui.QLabel(self.TopicGroupBox) self.NameLabel.setObjectName("NameLabel")
self.TopicNameLabel.setObjectName(u'TopicNameLabel') self.TopicLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.NameLabel)
self.gridLayout.addWidget(self.TopicNameLabel, 0, 0, 1, 1) self.NameEdit = QtGui.QLineEdit(TopicsDialog)
self.TopicNameEdit = QtGui.QLineEdit(self.TopicGroupBox) self.NameEdit.setObjectName("NameEdit")
self.TopicNameEdit.setObjectName(u'TopicNameEdit') self.TopicLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.NameEdit)
self.gridLayout.addWidget(self.TopicNameEdit, 0, 1, 1, 4) self.TopicButtonBox = QtGui.QDialogButtonBox(TopicsDialog)
spacerItem = QtGui.QSpacerItem(198, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.TopicButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.gridLayout.addItem(spacerItem, 1, 0, 1, 2) self.TopicButtonBox.setStandardButtons(
self.DeleteButton = QtGui.QPushButton(self.TopicGroupBox) QtGui.QDialogButtonBox.Save | QtGui.QDialogButtonBox.Cancel)
icon = QtGui.QIcon() self.TopicButtonBox.setObjectName("TopicButtonBox")
icon.addPixmap(QtGui.QPixmap(u':/services/service_delete.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.TopicLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.TopicButtonBox)
self.DeleteButton.setIcon(icon)
self.DeleteButton.setObjectName(u'DeleteButton')
self.gridLayout.addWidget(self.DeleteButton, 1, 3, 1, 1)
self.AddUpdateButton = QtGui.QPushButton(self.TopicGroupBox)
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(u':/services/service_save.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.AddUpdateButton.setIcon(icon1)
self.AddUpdateButton.setObjectName(u'AddUpdateButton')
self.gridLayout.addWidget(self.AddUpdateButton, 1, 4, 1, 1)
self.ClearButton = QtGui.QPushButton(self.TopicGroupBox)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(u':/services/service_new.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.ClearButton.setIcon(icon2)
self.ClearButton.setObjectName(u'ClearButton')
self.gridLayout.addWidget(self.ClearButton, 1, 2, 1, 1)
self.gridLayout_2.addWidget(self.TopicGroupBox, 1, 0, 1, 1)
self.MessageLabel = QtGui.QLabel(TopicsDialog)
self.MessageLabel.setObjectName(u'MessageLabel')
self.gridLayout_2.addWidget(self.MessageLabel, 3, 0, 1, 1)
self.TopicsListWidget = QtGui.QListWidget()
self.TopicsListWidget.setAlternatingRowColors(True)
self.gridLayout_2.addWidget(self.TopicsListWidget, 0, 0, 1, 1)
self.ButtonBox = QtGui.QDialogButtonBox(TopicsDialog)
self.ButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
self.ButtonBox.setObjectName(u'ButtonBox')
self.gridLayout_2.addWidget(self.ButtonBox, 2, 0, 1, 1)
self.retranslateUi(TopicsDialog) self.retranslateUi(TopicsDialog)
QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'accepted()'), TopicsDialog.accept) QtCore.QObject.connect(self.TopicButtonBox, QtCore.SIGNAL("accepted()"), TopicsDialog.accept)
QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'rejected()'), TopicsDialog.reject) QtCore.QObject.connect(self.TopicButtonBox, QtCore.SIGNAL("rejected()"), TopicsDialog.reject)
QtCore.QMetaObject.connectSlotsByName(TopicsDialog) QtCore.QMetaObject.connectSlotsByName(TopicsDialog)
def retranslateUi(self, TopicsDialog): def retranslateUi(self, TopicsDialog):
TopicsDialog.setWindowTitle(translate(u'TopicsDialog', u'Topic Maintenance')) TopicsDialog.setWindowTitle(QtGui.QApplication.translate("TopicsDialog", "Topic Maintenance", None, QtGui.QApplication.UnicodeUTF8))
self.TopicGroupBox.setTitle(translate(u'TopicsDialog', u'Topic')) self.NameLabel.setText(QtGui.QApplication.translate("TopicsDialog", "Topic Name:", None, QtGui.QApplication.UnicodeUTF8))
self.TopicNameLabel.setText(translate(u'TopicsDialog', u'Topic Name:'))
self.DeleteButton.setToolTip(translate(u'TopicsDialog', u'Delete Author'))
self.DeleteButton.setText(translate(u'AuthorsDialog', u'Delete'))
self.AddUpdateButton.setToolTip(translate(u'TopicsDialog', u'Add Update Author'))
self.AddUpdateButton.setText(translate(u'AuthorsDialog', u'Save'))
self.ClearButton.setToolTip(translate(u'TopicsDialog', u'Clear Selection'))
self.ClearButton.setText(translate(u'TopicsDialog', u'Clear'))

View File

@ -18,110 +18,22 @@ Place, Suite 330, Boston, MA 02111-1307 USA
""" """
from PyQt4 import QtGui, QtCore from PyQt4 import QtGui, QtCore
from openlp.core.lib import translate from openlp.core.lib import translate
from openlp.plugins.songs.forms.topicsdialog import Ui_TopicsDialog from topicsdialog import Ui_TopicsDialog
from openlp.plugins.songs.lib.classes import Topic
class TopicsForm(QtGui.QDialog, Ui_TopicsDialog): class TopicsForm(QtGui.QDialog, Ui_TopicsDialog):
""" """
Class documentation goes here. Class documentation goes here.
""" """
def __init__(self, songmanager, parent = None): def __init__(self, parent=None):
""" """
Constructor Constructor
""" """
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
self.songmanager = songmanager
self.currentRow = 0
self.topic = None
QtCore.QObject.connect(self.DeleteButton, def exec_(self, clear=True):
QtCore.SIGNAL(u'pressed()'), self.onDeleteButtonClick) if clear:
QtCore.QObject.connect(self.ClearButton, self.NameEdit.clear()
QtCore.SIGNAL(u'pressed()'), self.onClearButtonClick) self.NameEdit.setFocus()
QtCore.QObject.connect(self.AddUpdateButton, return QtGui.QDialog.exec_(self)
QtCore.SIGNAL(u'pressed()'), self.onAddUpdateButtonClick)
QtCore.QObject.connect(self.TopicNameEdit,
QtCore.SIGNAL(u'lostFocus()'), self.onTopicNameEditLostFocus)
QtCore.QObject.connect(self.TopicsListWidget,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onTopicsListWidgetItemClicked)
def load_form(self):
"""
Refresh the screen and rest fields
"""
self.TopicsListWidget.clear()
# tidy up screen
self.onClearButtonClick()
topics = self.songmanager.get_topics()
for topic in topics:
topic_name = QtGui.QListWidgetItem(topic.name)
topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id))
self.TopicsListWidget.addItem(topic_name)
if self.currentRow >= self.TopicsListWidget.count() :
self.TopicsListWidget.setCurrentRow(self.TopicsListWidget.count() - 1)
else:
self.TopicsListWidget.setCurrentRow(self.currentRow)
self._validate_form()
def onDeleteButtonClick(self):
"""
Delete the Topic is the Topic is not attached to any songs
"""
self.songmanager.delete_topic(self.topic.id)
self.load_form()
def onTopicNameEditLostFocus(self):
self._validate_form()
def onAddUpdateButtonClick(self):
"""
Sent New or update details to the database
"""
if self._validate_form():
if self.topic == None:
self.topic = Topic()
self.topic.name = unicode(self.TopicNameEdit.displayText())
self.songmanager.save_topic(self.topic)
self.onClearButtonClick()
self.load_form()
def onClearButtonClick(self):
"""
Tidy up screen if clear button pressed
"""
self.TopicNameEdit.setText(u'')
self.MessageLabel.setText(u'')
self.DeleteButton.setEnabled(False)
self.topic = None
self._validate_form()
self.TopicNameEdit.setFocus()
def onTopicsListWidgetItemClicked(self, index):
"""
An Topic has been selected display it
If the Topic is attached to a Song prevent delete
"""
self.currentRow = self.TopicsListWidget.currentRow()
item = self.TopicsListWidget.currentItem()
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.topic = self.songmanager.get_topic(item_id)
self.TopicNameEdit.setText(self.topic.name)
if len(self.topic.songs) > 0:
self.MessageLabel.setText(translate(u'TopicForm', u'Topic in use "Delete" is disabled'))
self.DeleteButton.setEnabled(False)
else:
self.MessageLabel.setText(translate(u'TopicForm', u'Topic in not used'))
self.DeleteButton.setEnabled(True)
self._validate_form()
self.TopicNameEdit.setFocus()
def _validate_form(self):
# We need at lease a display name
valid = True
if len(self.TopicNameEdit.displayText()) == 0:
valid = False
self.TopicNameEdit.setStyleSheet(u'background-color: red; color: white')
else:
self.TopicNameEdit.setStyleSheet(u'')
return valid

View File

@ -43,7 +43,8 @@ class Book(BaseModel):
""" """
Book model Book model
""" """
pass def __repr__(self):
return u'<Book id="%s" name="%s" publisher="%s" />' % (str(self.id), self.name, self.publisher)
class Song(BaseModel): class Song(BaseModel):
""" """

View File

@ -218,9 +218,9 @@ class SongManager():
self.session.add(book) self.session.add(book)
self.session.commit() self.session.commit()
return True return True
except: except Exception, e:
self.session.rollback() self.session.rollback()
log.error(u'Errow thrown %s', sys.exc_info()[1]) log.error(u'Errow thrown %s', e.args[0])
return False return False
def delete_book(self, bookid): def delete_book(self, bookid):

View File

@ -60,10 +60,10 @@ class SongMediaItem(MediaManagerItem):
self.ConfigSection = u'song' self.ConfigSection = u'song'
MediaManagerItem.__init__(self, parent, icon, title) MediaManagerItem.__init__(self, parent, icon, title)
self.edit_song_form = EditSongForm(self.parent.songmanager, self.parent.event_manager) self.edit_song_form = EditSongForm(self.parent.songmanager, self.parent.event_manager)
self.authors_form = AuthorsForm(self.parent.songmanager) #self.authors_form = AuthorsForm(self.parent.songmanager)
self.topics_form = TopicsForm(self.parent.songmanager) #self.topics_form = TopicsForm(self.parent.songmanager)
self.song_book_form = SongBookForm(self.parent.songmanager) #self.song_book_form = SongBookForm(self.parent.songmanager)
self.song_maintenance_form = SongMaintenanceForm(self.parent.songmanager) self.song_maintenance_form = SongMaintenanceForm(self.parent.songmanager, self)
def setupUi(self): def setupUi(self):
# Add a toolbar # Add a toolbar

View File

@ -27,8 +27,8 @@ from openlp.plugins.songs.lib.classes import *
def init_models(url): def init_models(url):
engine = create_engine(url) engine = create_engine(url)
metadata.bind = engine metadata.bind = engine
session = scoped_session(sessionmaker(autoflush=True, autocommit=False, session = scoped_session(sessionmaker(autoflush=True,
bind=engine)) autocommit=False, bind=engine))
mapper(Author, authors_table) mapper(Author, authors_table)
mapper(Book, song_books_table) mapper(Book, song_books_table)
mapper(Song, songs_table, mapper(Song, songs_table,

View File

@ -1,229 +1,104 @@
<ui version="4.0" > <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AuthorsDialog</class> <class>AuthorsDialog</class>
<widget class="QDialog" name="AuthorsDialog" > <widget class="QDialog" name="AuthorsDialog">
<property name="geometry" > <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>410</width> <width>393</width>
<height>505</height> <height>147</height>
</rect> </rect>
</property> </property>
<property name="windowTitle" > <property name="windowTitle">
<string>Author Maintenance</string> <string>Author Maintenance</string>
</property> </property>
<layout class="QVBoxLayout" name="DialogLayout" > <layout class="QFormLayout" name="AuthorsLayout">
<property name="spacing" > <property name="horizontalSpacing">
<number>8</number> <number>8</number>
</property> </property>
<property name="margin" > <property name="verticalSpacing">
<number>8</number> <number>8</number>
</property> </property>
<item> <property name="margin">
<widget class="QTableWidget" name="AuthorListView" > <number>8</number>
<property name="dragEnabled" >
<bool>true</bool>
</property> </property>
<property name="alternatingRowColors" > <item row="0" column="1">
<bool>true</bool> <widget class="QLineEdit" name="FirstNameEdit"/>
</property>
<property name="columnCount" >
<number>0</number>
</property>
</widget>
</item> </item>
<item> <item row="2" column="1">
<widget class="QGroupBox" name="AuthorDetails" > <widget class="QLineEdit" name="DisplayEdit"/>
<property name="minimumSize" > </item>
<size> <item row="2" column="0">
<width>0</width> <widget class="QLabel" name="DisplayLabel">
<height>0</height> <property name="text">
</size>
</property>
<property name="title" >
<string>Author Details</string>
</property>
<layout class="QVBoxLayout" name="AuthorLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>8</number>
</property>
<item>
<widget class="QWidget" native="1" name="DetailsWidget" >
<layout class="QFormLayout" name="DetailsLayout" >
<property name="horizontalSpacing" >
<number>8</number>
</property>
<property name="verticalSpacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item row="0" column="0" >
<widget class="QLabel" name="DisplayLabel" >
<property name="text" >
<string>Display Name:</string> <string>Display Name:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1" > <item row="0" column="0">
<widget class="QLineEdit" name="DisplayEdit" /> <widget class="QLabel" name="FirstNameLabel">
</item> <property name="text">
<item row="1" column="0" >
<widget class="QLabel" name="FirstNameLabel" >
<property name="text" >
<string>First Name:</string> <string>First Name:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1" > <item row="3" column="1">
<widget class="QLineEdit" name="FirstNameEdit" /> <widget class="QDialogButtonBox" name="AuthorButtonBox">
</item> <property name="toolTip">
<item row="2" column="0" >
<widget class="QLabel" name="LastNameLabel" >
<property name="text" >
<string>Last Name:</string>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QLineEdit" name="LastNameEdit" />
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="MessageLabel" >
<property name="text" >
<string/>
</property>
</widget>
</item>
<item>
<widget class="QWidget" native="1" name="ButtonWidget" >
<property name="minimumSize" >
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<layout class="QHBoxLayout" name="ButtonLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<spacer name="ButtonSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>198</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="ClearButton" >
<property name="toolTip" >
<string>Clear Selection</string>
</property>
<property name="text" >
<string>New</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_new.png</normaloff>:/services/service_new.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="AddUpdateButton" >
<property name="toolTip" >
<string>Add Update Author</string>
</property>
<property name="text" >
<string>Save</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_save.png</normaloff>:/services/service_save.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="DeleteButton" >
<property name="toolTip" >
<string>Delete Author</string>
</property>
<property name="text" >
<string>Delete</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_delete.png</normaloff>:/services/service_delete.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox" >
<property name="toolTip" >
<string>Exit Screen</string> <string>Exit Screen</string>
</property> </property>
<property name="orientation" > <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="standardButtons" > <property name="standardButtons">
<set>QDialogButtonBox::Ok</set> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="LastNameEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="LastNameLabel">
<property name="text">
<string>Last Name:</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="../images/openlp-2.qrc" /> <include location="../images/openlp-2.qrc"/>
</resources> </resources>
<connections> <connections>
<connection> <connection>
<sender>buttonBox</sender> <sender>AuthorButtonBox</sender>
<signal>accepted()</signal> <signal>accepted()</signal>
<receiver>AuthorsDialog</receiver> <receiver>AuthorsDialog</receiver>
<slot>accept()</slot> <slot>accept()</slot>
<hints> <hints>
<hint type="sourcelabel" > <hint type="sourcelabel">
<x>248</x> <x>248</x>
<y>254</y> <y>254</y>
</hint> </hint>
<hint type="destinationlabel" > <hint type="destinationlabel">
<x>157</x> <x>157</x>
<y>274</y> <y>274</y>
</hint> </hint>
</hints> </hints>
</connection> </connection>
<connection> <connection>
<sender>buttonBox</sender> <sender>AuthorButtonBox</sender>
<signal>rejected()</signal> <signal>rejected()</signal>
<receiver>AuthorsDialog</receiver> <receiver>AuthorsDialog</receiver>
<slot>reject()</slot> <slot>reject()</slot>
<hints> <hints>
<hint type="sourcelabel" > <hint type="sourcelabel">
<x>316</x> <x>316</x>
<y>260</y> <y>260</y>
</hint> </hint>
<hint type="destinationlabel" > <hint type="destinationlabel">
<x>286</x> <x>286</x>
<y>274</y> <y>274</y>
</hint> </hint>

View File

@ -1,195 +1,62 @@
<ui version="4.0" > <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SongBookDialog</class> <class>SongBookDialog</class>
<widget class="QDialog" name="SongBookDialog" > <widget class="QDialog" name="SongBookDialog">
<property name="geometry" > <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>387</width> <width>367</width>
<height>531</height> <height>120</height>
</rect> </rect>
</property> </property>
<property name="windowTitle" > <property name="windowTitle">
<string>Book Song Maintenance</string> <string>Book Song Maintenance</string>
</property> </property>
<layout class="QVBoxLayout" name="DialogLayout" > <layout class="QFormLayout" name="SongBookLayout">
<property name="spacing" > <property name="horizontalSpacing">
<number>8</number> <number>8</number>
</property> </property>
<property name="margin" > <property name="verticalSpacing">
<number>8</number> <number>8</number>
</property> </property>
<item> <property name="margin">
<widget class="QTableWidget" name="BookSongListView" />
</item>
<item>
<widget class="QGroupBox" name="SongBookGroup" >
<property name="minimumSize" >
<size>
<width>0</width>
<height>200</height>
</size>
</property>
<property name="title" >
<string>Song Book</string>
</property>
<layout class="QVBoxLayout" name="SongBookLayout" >
<property name="spacing" >
<number>8</number> <number>8</number>
</property> </property>
<property name="margin" > <item row="0" column="0">
<number>8</number> <widget class="QLabel" name="NameLabel">
</property> <property name="text">
<item>
<widget class="QWidget" native="1" name="DetailsWidget" >
<property name="minimumSize" >
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<layout class="QFormLayout" name="DetailsLayout" >
<property name="horizontalSpacing" >
<number>8</number>
</property>
<property name="verticalSpacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item row="0" column="0" >
<widget class="QLabel" name="NameLabel" >
<property name="text" >
<string>Name:</string> <string>Name:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1" > <item row="0" column="1">
<widget class="QLineEdit" name="NameEdit" /> <widget class="QLineEdit" name="NameEdit"/>
</item> </item>
<item row="1" column="0" > <item row="1" column="0">
<widget class="QLabel" name="PublisherLabel" > <widget class="QLabel" name="PublisherLabel">
<property name="text" > <property name="text">
<string>Publisher:</string> <string>Publisher:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1" > <item row="1" column="1">
<widget class="QLineEdit" name="PublisherEdit" /> <widget class="QLineEdit" name="PublisherEdit"/>
</item> </item>
</layout> <item row="2" column="1">
</widget> <widget class="QDialogButtonBox" name="ButtonBox">
</item> <property name="orientation">
<item>
<widget class="QLabel" name="MessageLabel" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string/>
</property>
</widget>
</item>
<item>
<widget class="QWidget" native="1" name="ButtonWidget" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize" >
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<layout class="QHBoxLayout" name="ButtonLayout" >
<property name="spacing" >
<number>8</number>
</property>
<property name="margin" >
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0" > <property name="standardButtons">
<size> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
<width>61</width>
<height>24</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="ClearButton" >
<property name="toolTip" >
<string>Clear Selection</string>
</property>
<property name="text" >
<string>New</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_new.png</normaloff>:/services/service_new.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="AddUpdateButton" >
<property name="toolTip" >
<string>Add Update Author</string>
</property>
<property name="text" >
<string>Save</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_save.png</normaloff>:/services/service_save.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="DeleteButton" >
<property name="toolTip" >
<string>Delete Author</string>
</property>
<property name="text" >
<string>Delete</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_delete.png</normaloff>:/services/service_delete.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="ButtonBox" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons" >
<set>QDialogButtonBox::Ok</set>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="../images/openlp-2.qrc" /> <include location="../images/openlp-2.qrc"/>
</resources> </resources>
<connections> <connections>
<connection> <connection>
@ -198,11 +65,11 @@
<receiver>SongBookDialog</receiver> <receiver>SongBookDialog</receiver>
<slot>accept()</slot> <slot>accept()</slot>
<hints> <hints>
<hint type="sourcelabel" > <hint type="sourcelabel">
<x>248</x> <x>248</x>
<y>254</y> <y>254</y>
</hint> </hint>
<hint type="destinationlabel" > <hint type="destinationlabel">
<x>157</x> <x>157</x>
<y>274</y> <y>274</y>
</hint> </hint>
@ -214,11 +81,11 @@
<receiver>SongBookDialog</receiver> <receiver>SongBookDialog</receiver>
<slot>reject()</slot> <slot>reject()</slot>
<hints> <hints>
<hint type="sourcelabel" > <hint type="sourcelabel">
<x>316</x> <x>316</x>
<y>260</y> <y>260</y>
</hint> </hint>
<hint type="destinationlabel" > <hint type="destinationlabel">
<x>286</x> <x>286</x>
<y>274</y> <y>274</y>
</hint> </hint>

View File

@ -1,158 +1,52 @@
<ui version="4.0" > <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TopicsDialog</class> <class>TopicsDialog</class>
<widget class="QDialog" name="TopicsDialog" > <widget class="QDialog" name="TopicsDialog">
<property name="geometry" > <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>471</width> <width>365</width>
<height>470</height> <height>77</height>
</rect> </rect>
</property> </property>
<property name="windowTitle" > <property name="windowTitle">
<string>Topic Maintenance</string> <string>Topic Maintenance</string>
</property> </property>
<layout class="QGridLayout" name="TopicsLayout" > <layout class="QFormLayout" name="TopicLayout">
<property name="margin" > <property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<property name="horizontalSpacing">
<number>8</number> <number>8</number>
</property> </property>
<property name="spacing" > <property name="verticalSpacing">
<number>8</number> <number>8</number>
</property> </property>
<item row="1" column="0" > <property name="margin">
<widget class="QGroupBox" name="TopicGroupBox" >
<property name="title" >
<string>Topic Details</string>
</property>
<layout class="QGridLayout" name="DetailsLayout" >
<property name="margin" >
<number>8</number> <number>8</number>
</property> </property>
<property name="spacing" > <item row="0" column="0">
<number>8</number> <widget class="QLabel" name="TopicNameLabel">
</property> <property name="text">
<item row="0" column="0" >
<widget class="QLabel" name="TopicNameLabel" >
<property name="text" >
<string>Topic Name:</string> <string>Topic Name:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1" colspan="6" > <item row="0" column="1">
<widget class="QLineEdit" name="TopicNameEdit" /> <widget class="QLineEdit" name="TopicNameEdit"/>
</item> </item>
<item row="1" column="0" colspan="3" > <item row="1" column="1">
<spacer name="ButtonsSpacer" > <widget class="QDialogButtonBox" name="TopicButtonBox">
<property name="orientation" > <property name="standardButtons">
<enum>Qt::Horizontal</enum> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>198</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="5" >
<widget class="QPushButton" name="DeleteButton" >
<property name="toolTip" >
<string>Delete Author</string>
</property>
<property name="text" >
<string>Delete</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_delete.png</normaloff>:/services/service_delete.png</iconset>
</property>
</widget>
</item>
<item row="1" column="4" >
<widget class="QPushButton" name="AddUpdateButton" >
<property name="toolTip" >
<string>Add Update Author</string>
</property>
<property name="text" >
<string>Save</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_save.png</normaloff>:/services/service_save.png</iconset>
</property>
</widget>
</item>
<item row="1" column="3" >
<widget class="QPushButton" name="ClearButton" >
<property name="toolTip" >
<string>Clear Selection</string>
</property>
<property name="text" >
<string>New</string>
</property>
<property name="icon" >
<iconset resource="../images/openlp-2.qrc" >
<normaloff>:/services/service_new.png</normaloff>:/services/service_new.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0" >
<widget class="QTableWidget" name="TopicsListView" >
<property name="alternatingRowColors" >
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0" >
<widget class="QDialogButtonBox" name="ButtonBox" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons" >
<set>QDialogButtonBox::Ok</set>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="../images/openlp-2.qrc" /> <include location="../images/openlp-2.qrc"/>
</resources> </resources>
<connections> <connections/>
<connection>
<sender>ButtonBox</sender>
<signal>accepted()</signal>
<receiver>TopicsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel" >
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>ButtonBox</sender>
<signal>rejected()</signal>
<receiver>TopicsDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel" >
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel" >
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui> </ui>