forked from openlp/openlp
More changes to Songs plugin to get ManageAuthors working.
This commit is contained in:
parent
a473a4dffc
commit
29530d31ca
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
"""
|
||||
from textlistdata import TextListData
|
||||
|
||||
from authorsform import AuthorsForm
|
||||
from topicsform import TopicsForm
|
||||
from songbookform import SongBookForm
|
||||
|
@ -8,6 +8,7 @@
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
from openlp.plugins.songs.lib import TextListData
|
||||
|
||||
class Ui_AuthorsDialog(object):
|
||||
def setupUi(self, AuthorsDialog):
|
||||
@ -17,14 +18,21 @@ class Ui_AuthorsDialog(object):
|
||||
self.DialogLayout.setSpacing(8)
|
||||
self.DialogLayout.setMargin(8)
|
||||
self.DialogLayout.setObjectName("DialogLayout")
|
||||
self.AuthorListView = QtGui.QTableWidget(AuthorsDialog)
|
||||
self.AuthorListView.setDragEnabled(True)
|
||||
|
||||
|
||||
# self.AuthorListView = QtGui.QTableWidget(AuthorsDialog)
|
||||
# self.AuthorListView.setDragEnabled(True)
|
||||
# self.AuthorListView.setAlternatingRowColors(True)
|
||||
# self.AuthorListView.setColumnCount(0)
|
||||
# self.AuthorListView.setObjectName("AuthorListView")
|
||||
# self.AuthorListView.setColumnCount(0)
|
||||
# self.AuthorListView.setRowCount(0)
|
||||
self.AuthorListView = QtGui.QListView()
|
||||
self.AuthorListView.setAlternatingRowColors(True)
|
||||
self.AuthorListView.setColumnCount(0)
|
||||
self.AuthorListView.setObjectName("AuthorListView")
|
||||
self.AuthorListView.setColumnCount(0)
|
||||
self.AuthorListView.setRowCount(0)
|
||||
self.AuthorListData = TextListData()
|
||||
self.AuthorListView.setModel(self.AuthorListData)
|
||||
self.DialogLayout.addWidget(self.AuthorListView)
|
||||
|
||||
self.AuthorDetails = QtGui.QGroupBox(AuthorsDialog)
|
||||
self.AuthorDetails.setMinimumSize(QtCore.QSize(0, 0))
|
||||
self.AuthorDetails.setObjectName("AuthorDetails")
|
||||
|
@ -19,6 +19,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
from PyQt4 import QtGui, QtCore
|
||||
|
||||
from openlp.plugins.songs.forms.authorsdialog import Ui_AuthorsDialog
|
||||
from openlp.plugins.songs.lib import TextListData
|
||||
|
||||
class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
|
||||
"""
|
||||
@ -31,11 +32,6 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
|
||||
QtGui.QDialog.__init__(self, parent)
|
||||
self.setupUi(self)
|
||||
self.songmanager = songmanager
|
||||
self.AuthorListView.setColumnCount(2)
|
||||
self.AuthorListView.setColumnHidden(0, True)
|
||||
self.AuthorListView.setColumnWidth(1, 300)
|
||||
self.AuthorListView.horizontalHeader().setVisible(False)
|
||||
self.AuthorListView.verticalHeader().setVisible(False)
|
||||
self.currentRow = 0
|
||||
self.author = None
|
||||
|
||||
@ -48,33 +44,24 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
|
||||
QtCore.QObject.connect(self.DisplayEdit,
|
||||
QtCore.SIGNAL('pressed()'), self.onDisplayEditLostFocus)
|
||||
QtCore.QObject.connect(self.AuthorListView,
|
||||
QtCore.SIGNAL('pressed()'), self.onAuthorListViewItemClicked)
|
||||
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onAuthorListViewItemClicked)
|
||||
|
||||
def load_form(self):
|
||||
"""
|
||||
Refresh the screen and rest fields
|
||||
"""
|
||||
self.AuthorListData.resetStore()
|
||||
self.onClearButtonClick() # tidy up screen
|
||||
authors = self.songmanager.get_authors()
|
||||
self.AuthorListView.clear() # clear the results
|
||||
#self.AuthorListView.setHorizontalHeaderLabels(QtCore.QStringList([" ","Author"]))
|
||||
self.AuthorListView.horizontalHeader().setVisible(False)
|
||||
self.AuthorListView.verticalHeader().setVisible(False)
|
||||
self.AuthorListView.setRowCount(0)
|
||||
for author in authors:
|
||||
row_count = self.AuthorListView.rowCount()
|
||||
self.AuthorListView.setRowCount(row_count + 1)
|
||||
author_id = QtGui.QTableWidgetItem(str(author.id))
|
||||
self.AuthorListView.setItem(row_count, 0, author_id)
|
||||
display_name = QtGui.QTableWidgetItem(author.display_name)
|
||||
display_name.setFlags(QtCore.Qt.ItemIsSelectable)
|
||||
self.AuthorListView.setItem(row_count, 1, display_name)
|
||||
self.AuthorListView.setRowHeight(row_count, 20)
|
||||
row_count = self.AuthorListView.rowCount()
|
||||
self.AuthorListData.addRow(author.id,author.display_name)
|
||||
row_count = self.AuthorListData.rowCount(None)
|
||||
if self.currentRow > row_count:
|
||||
# in case we have delete the last row of the table
|
||||
self.currentRow = row_count
|
||||
self.AuthorListView.selectRow(self.currentRow) # set selected row to previous selected row
|
||||
row = self.AuthorListData.createIndex(self.currentRow, 0)
|
||||
if row.isValid():
|
||||
self.AuthorListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
|
||||
self._validate_form()
|
||||
|
||||
def onDeleteButtonClick(self):
|
||||
@ -106,27 +93,26 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
|
||||
"""
|
||||
Tidy up screen if clear button pressed
|
||||
"""
|
||||
self.DisplayEdit.setText("")
|
||||
self.FirstNameEdit.setText("")
|
||||
self.LastNameEdit.setText("")
|
||||
self.MessageLabel.setText("")
|
||||
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()
|
||||
|
||||
def onAuthorListViewItemClicked(self, item):
|
||||
def onAuthorListViewItemClicked(self, index):
|
||||
"""
|
||||
An Author has been selected display it
|
||||
If the author is attached to a Song prevent delete
|
||||
"""
|
||||
self.currentRow = self.AuthorListView.currentRow()
|
||||
id = int(self.AuthorListView.item(self.currentRow, 0).text())
|
||||
print index
|
||||
id = int(self.AuthorListData.getId(index))
|
||||
self.author = self.songmanager.get_author(id)
|
||||
|
||||
self.DisplayEdit.setText(self.author.display_name)
|
||||
self.FirstNameEdit.setText(self.author.first_name)
|
||||
self.LastNameEdit.setText(self.author.last_name)
|
||||
#songs = self.songmanager.get_song_authors_for_author(id)
|
||||
if len(self.author.songs) > 0:
|
||||
self.MessageLabel.setText("Author in use 'Delete' is disabled")
|
||||
self.DeleteButton.setEnabled(False)
|
||||
|
@ -1,80 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||
"""
|
||||
OpenLP - Open Source Lyrics Projection
|
||||
Copyright (c) 2008 Raoul Snyman
|
||||
Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
"""
|
||||
import logging
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
class TextListData(QtCore.QAbstractListModel):
|
||||
"""
|
||||
An abstract list of strings
|
||||
"""
|
||||
global log
|
||||
log = logging.getLogger(u'TextListData')
|
||||
log.info(u'started')
|
||||
|
||||
def __init__(self):
|
||||
QtCore.QAbstractListModel.__init__(self)
|
||||
self.items = [] # will be a list of (database id , title) tuples
|
||||
|
||||
def resetStore(self):
|
||||
#reset list so can be reloaded
|
||||
self.items = []
|
||||
|
||||
def rowCount(self, parent):
|
||||
return len(self.items)
|
||||
|
||||
def insertRow(self, row, id, title):
|
||||
self.beginInsertRows(QtCore.QModelIndex(),row,row)
|
||||
log.debug("insert row %d:%s for id %d" % (row,title, id))
|
||||
self.items.insert(row, (id, title))
|
||||
self.endInsertRows()
|
||||
|
||||
def removeRow(self, row):
|
||||
self.beginRemoveRows(QtCore.QModelIndex(), row,row)
|
||||
self.items.pop(row)
|
||||
self.endRemoveRows()
|
||||
|
||||
def addRow(self, id, title):
|
||||
self.insertRow(len(self.items), id, title)
|
||||
|
||||
def data(self, index, role):
|
||||
row = index.row()
|
||||
if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
|
||||
return QtCore.QVariant()
|
||||
if role == QtCore.Qt.DisplayRole:
|
||||
retval = self.items[row][1]
|
||||
else:
|
||||
retval = QtCore.QVariant()
|
||||
if type(retval) is not type(QtCore.QVariant):
|
||||
return QtCore.QVariant(retval)
|
||||
else:
|
||||
return retval
|
||||
|
||||
def getIdList(self):
|
||||
filelist = [item[0] for item in self.items];
|
||||
return filelist
|
||||
|
||||
def getId(self, index):
|
||||
row = index.row()
|
||||
return self.items[row][0]
|
||||
|
||||
def deleteRow(self, index):
|
||||
row = index.row()
|
||||
self.removeRow(row)
|
@ -3,7 +3,7 @@
|
||||
"""
|
||||
OpenLP - Open Source Lyrics Projection
|
||||
Copyright (c) 2008 Raoul Snyman
|
||||
Portions copyright (c) 2008 Martin Thompson, Tim Bentley
|
||||
Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
@ -134,11 +134,14 @@ class SongManager():
|
||||
|
||||
def delete_author(self, authorid):
|
||||
"""
|
||||
Delete the author and refresh the author cache
|
||||
Delete the author
|
||||
"""
|
||||
author = self.get_author(authorid)
|
||||
try:
|
||||
self.session.delete(author)
|
||||
self.session.commit()
|
||||
return True
|
||||
except:
|
||||
log.error("Errow thrown %s", sys.exc_info()[1])
|
||||
print "Errow thrown ", sys.exc_info()[1]
|
||||
return False
|
||||
|
Loading…
Reference in New Issue
Block a user