forked from openlp/openlp
Add double click to allow servicemanager to live
Add StateMachine to Song Editor (Verses and Authors) Allow Authors to be Added and Removed from Songs
This commit is contained in:
parent
e8ae29e620
commit
4f7310a5a6
@ -103,6 +103,8 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
# Connect up our signals and slots
|
# Connect up our signals and slots
|
||||||
QtCore.QObject.connect(self.ThemeComboBox,
|
QtCore.QObject.connect(self.ThemeComboBox,
|
||||||
QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected)
|
QtCore.SIGNAL(u'activated(int)'), self.onThemeComboBoxSelected)
|
||||||
|
QtCore.QObject.connect(self.ServiceManagerList,
|
||||||
|
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.makeLive)
|
||||||
# Last little bits of setting up
|
# Last little bits of setting up
|
||||||
self.config = PluginConfig(u'Main')
|
self.config = PluginConfig(u'Main')
|
||||||
self.service_theme = self.config.get_config(u'theme service theme', u'')
|
self.service_theme = self.config.get_config(u'theme service theme', u'')
|
||||||
|
@ -148,8 +148,6 @@ class Ui_EditSongDialog(object):
|
|||||||
self.AuthorsListView = QtGui.QListWidget(self.AuthorsGroupBox)
|
self.AuthorsListView = QtGui.QListWidget(self.AuthorsGroupBox)
|
||||||
self.AuthorsListView.setAlternatingRowColors(True)
|
self.AuthorsListView.setAlternatingRowColors(True)
|
||||||
self.AuthorsListView.setObjectName(u'AuthorsListView')
|
self.AuthorsListView.setObjectName(u'AuthorsListView')
|
||||||
#self.AuthorsListView.setColumnCount(0)
|
|
||||||
#self.AuthorsListView.setRowCount(0)
|
|
||||||
self.AuthorsLayout.addWidget(self.AuthorsListView)
|
self.AuthorsLayout.addWidget(self.AuthorsListView)
|
||||||
self.AuthorRemoveWidget = QtGui.QWidget(self.AuthorsGroupBox)
|
self.AuthorRemoveWidget = QtGui.QWidget(self.AuthorsGroupBox)
|
||||||
self.AuthorRemoveWidget.setObjectName(u'AuthorRemoveWidget')
|
self.AuthorRemoveWidget.setObjectName(u'AuthorRemoveWidget')
|
||||||
@ -227,8 +225,6 @@ class Ui_EditSongDialog(object):
|
|||||||
self.TopicsListView = QtGui.QListWidget(self.TopicGroupBox)
|
self.TopicsListView = QtGui.QListWidget(self.TopicGroupBox)
|
||||||
self.TopicsListView.setAlternatingRowColors(True)
|
self.TopicsListView.setAlternatingRowColors(True)
|
||||||
self.TopicsListView.setObjectName(u'TopicsListView')
|
self.TopicsListView.setObjectName(u'TopicsListView')
|
||||||
#self.TopicsListView.setColumnCount(0)
|
|
||||||
#self.TopicsListView.setRowCount(0)
|
|
||||||
self.TopicLayout.addWidget(self.TopicsListView)
|
self.TopicLayout.addWidget(self.TopicsListView)
|
||||||
self.TopicRemoveWidget = QtGui.QWidget(self.TopicGroupBox)
|
self.TopicRemoveWidget = QtGui.QWidget(self.TopicGroupBox)
|
||||||
self.TopicRemoveWidget.setObjectName(u'TopicRemoveWidget')
|
self.TopicRemoveWidget.setObjectName(u'TopicRemoveWidget')
|
||||||
|
@ -17,6 +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
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
"""
|
"""
|
||||||
|
import logging
|
||||||
from PyQt4 import Qt, QtCore, QtGui
|
from PyQt4 import Qt, QtCore, QtGui
|
||||||
from openlp.core.lib import SongXMLBuilder, SongXMLParser
|
from openlp.core.lib import SongXMLBuilder, SongXMLParser
|
||||||
from openlp.plugins.songs.forms import AuthorsForm, TopicsForm, SongBookForm, \
|
from openlp.plugins.songs.forms import AuthorsForm, TopicsForm, SongBookForm, \
|
||||||
@ -27,8 +28,11 @@ from editsongdialog import Ui_EditSongDialog
|
|||||||
|
|
||||||
class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
||||||
"""
|
"""
|
||||||
Class documentation goes here.
|
Class to manage the editing of a song
|
||||||
"""
|
"""
|
||||||
|
global log
|
||||||
|
log = logging.getLogger(u'EditSongForm')
|
||||||
|
log.info(u'Song Editor loaded')
|
||||||
def __init__(self, songmanager, parent=None):
|
def __init__(self, songmanager, parent=None):
|
||||||
"""
|
"""
|
||||||
Constructor
|
Constructor
|
||||||
@ -38,6 +42,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
# Connecting signals and slots
|
# Connecting signals and slots
|
||||||
QtCore.QObject.connect(self.AddAuthorsButton,
|
QtCore.QObject.connect(self.AddAuthorsButton,
|
||||||
QtCore.SIGNAL(u'clicked()'), self.onAddAuthorsButtonClicked)
|
QtCore.SIGNAL(u'clicked()'), self.onAddAuthorsButtonClicked)
|
||||||
|
QtCore.QObject.connect(self.AuthorAddtoSongItem,
|
||||||
|
QtCore.SIGNAL(u'clicked()'), self.onAuthorAddtoSongItemClicked)
|
||||||
|
QtCore.QObject.connect(self.AuthorRemoveItem,
|
||||||
|
QtCore.SIGNAL(u'clicked()'), self.onAuthorRemovefromSongItemClicked)
|
||||||
|
QtCore.QObject.connect(self.AuthorsListView,
|
||||||
|
QtCore.SIGNAL("itemClicked(QListWidgetItem*)"), self.onAuthorsListViewPressed)
|
||||||
|
|
||||||
QtCore.QObject.connect(self.AddTopicButton,
|
QtCore.QObject.connect(self.AddTopicButton,
|
||||||
QtCore.SIGNAL(u'clicked()'), self.onAddTopicButtonClicked)
|
QtCore.SIGNAL(u'clicked()'), self.onAddTopicButtonClicked)
|
||||||
QtCore.QObject.connect(self.AddSongBookButton,
|
QtCore.QObject.connect(self.AddSongBookButton,
|
||||||
@ -50,6 +61,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
QtCore.SIGNAL(u'clicked()'), self.onEditVerseButtonClicked)
|
QtCore.SIGNAL(u'clicked()'), self.onEditVerseButtonClicked)
|
||||||
QtCore.QObject.connect(self.DeleteButton,
|
QtCore.QObject.connect(self.DeleteButton,
|
||||||
QtCore.SIGNAL(u'clicked()'), self.onDeleteVerseButtonClicked)
|
QtCore.SIGNAL(u'clicked()'), self.onDeleteVerseButtonClicked)
|
||||||
|
QtCore.QObject.connect(self.VerseListWidget,
|
||||||
|
QtCore.SIGNAL("itemClicked(QListWidgetItem*)"), self.onVerseListViewPressed)
|
||||||
# Create other objects and forms
|
# Create other objects and forms
|
||||||
self.songmanager = songmanager
|
self.songmanager = songmanager
|
||||||
self.authors_form = AuthorsForm(self.songmanager)
|
self.authors_form = AuthorsForm(self.songmanager)
|
||||||
@ -66,6 +79,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
self.loadAuthors()
|
self.loadAuthors()
|
||||||
self.loadTopics()
|
self.loadTopics()
|
||||||
self.loadBooks()
|
self.loadBooks()
|
||||||
|
self.EditButton.setEnabled(False)
|
||||||
|
self.DeleteButton.setEnabled(False)
|
||||||
|
self.AuthorRemoveItem.setEnabled(False)
|
||||||
|
|
||||||
def loadAuthors(self):
|
def loadAuthors(self):
|
||||||
authors = self.songmanager.get_authors()
|
authors = self.songmanager.get_authors()
|
||||||
@ -82,10 +98,12 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
def loadBooks(self):
|
def loadBooks(self):
|
||||||
books = self.songmanager.get_books()
|
books = self.songmanager.get_books()
|
||||||
self.SongbookCombo.clear()
|
self.SongbookCombo.clear()
|
||||||
|
self.SongbookCombo.addItem(u' ')
|
||||||
for book in books:
|
for book in books:
|
||||||
self.SongbookCombo.addItem(book.name)
|
self.SongbookCombo.addItem(book.name)
|
||||||
|
|
||||||
def newSong(self):
|
def newSong(self):
|
||||||
|
log.debug(u'New Song')
|
||||||
self.song = Song()
|
self.song = Song()
|
||||||
self.TitleEditItem.setText(u'')
|
self.TitleEditItem.setText(u'')
|
||||||
self.AlternativeEdit.setText(u'')
|
self.AlternativeEdit.setText(u'')
|
||||||
@ -95,9 +113,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
self.TopicsListView.clear()
|
self.TopicsListView.clear()
|
||||||
|
|
||||||
def loadSong(self, id):
|
def loadSong(self, id):
|
||||||
|
log.debug(u'Load Song')
|
||||||
self.song = self.songmanager.get_song(id)
|
self.song = self.songmanager.get_song(id)
|
||||||
self.TitleEditItem.setText(self.song.title)
|
self.TitleEditItem.setText(self.song.title)
|
||||||
title = self.song.search_title.split(u'@')
|
title = self.song.search_title.split(u'@')
|
||||||
|
if self.song.song_book_id != 0:
|
||||||
|
book_name = self.songmanager.get_book(self.song.song_book_id)
|
||||||
|
|
||||||
if len(title) > 1:
|
if len(title) > 1:
|
||||||
self.AlternativeEdit.setText(title[1])
|
self.AlternativeEdit.setText(title[1])
|
||||||
self.CopyrightEditItem.setText(self.song.copyright)
|
self.CopyrightEditItem.setText(self.song.copyright)
|
||||||
@ -126,6 +148,27 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
self.AuthorsListView.addItem(author_name)
|
self.AuthorsListView.addItem(author_name)
|
||||||
self._validate_song()
|
self._validate_song()
|
||||||
|
|
||||||
|
def onAuthorAddtoSongItemClicked(self):
|
||||||
|
author_name = unicode(self.AuthorsSelectionComboItem.currentText())
|
||||||
|
author = self.songmanager.get_author_by_name(author_name)
|
||||||
|
self.song.authors.append(author)
|
||||||
|
author_name = QtGui.QListWidgetItem(unicode(author.display_name))
|
||||||
|
author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
|
||||||
|
self.AuthorsListView.addItem(author_name)
|
||||||
|
|
||||||
|
def onAuthorsListViewPressed(self):
|
||||||
|
self.AuthorRemoveItem.setEnabled(True)
|
||||||
|
|
||||||
|
def onAuthorRemovefromSongItemClicked(self):
|
||||||
|
self.AuthorRemoveItem.setEnabled(False)
|
||||||
|
item = self.AuthorsListView.currentItem()
|
||||||
|
author_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
||||||
|
author = self.songmanager.get_author(author_id)
|
||||||
|
self.song.authors.remove(author)
|
||||||
|
row = self.AuthorsListView.row(item)
|
||||||
|
self.AuthorsListView.takeItem(row)
|
||||||
|
self.AuthorRemoveItem.setEnabled(False)
|
||||||
|
|
||||||
def onAddAuthorsButtonClicked(self):
|
def onAddAuthorsButtonClicked(self):
|
||||||
"""
|
"""
|
||||||
Slot documentation goes here.
|
Slot documentation goes here.
|
||||||
@ -150,6 +193,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
self.song_book_form.exec_()
|
self.song_book_form.exec_()
|
||||||
self.loadBooks()
|
self.loadBooks()
|
||||||
|
|
||||||
|
def onVerseListViewPressed(self):
|
||||||
|
self.EditButton.setEnabled(True)
|
||||||
|
self.DeleteButton.setEnabled(True)
|
||||||
|
|
||||||
def onAddVerseButtonClicked(self):
|
def onAddVerseButtonClicked(self):
|
||||||
self.verse_form.setVerse(u'')
|
self.verse_form.setVerse(u'')
|
||||||
self.verse_form.exec_()
|
self.verse_form.exec_()
|
||||||
@ -157,23 +204,35 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
|
|
||||||
def onEditVerseButtonClicked(self):
|
def onEditVerseButtonClicked(self):
|
||||||
item = self.VerseListWidget.currentItem()
|
item = self.VerseListWidget.currentItem()
|
||||||
self.verse_form.setVerse(item.text())
|
if item is not None:
|
||||||
self.verse_form.exec_()
|
self.verse_form.setVerse(item.text())
|
||||||
item.setText(self.verse_form.getVerse())
|
self.verse_form.exec_()
|
||||||
|
item.setText(self.verse_form.getVerse())
|
||||||
|
self.EditButton.setEnabled(False)
|
||||||
|
self.DeleteButton.setEnabled(False)
|
||||||
|
|
||||||
def onDeleteVerseButtonClicked(self):
|
def onDeleteVerseButtonClicked(self):
|
||||||
item = self.VerseListWidget.takeItem(self.VerseListWidget.currentRow())
|
item = self.VerseListWidget.takeItem(self.VerseListWidget.currentRow())
|
||||||
item = None
|
item = None
|
||||||
|
self.EditButton.setEnabled(False)
|
||||||
|
self.DeleteButton.setEnabled(False)
|
||||||
|
|
||||||
def _validate_song(self):
|
def _validate_song(self):
|
||||||
"""
|
"""
|
||||||
Check the validity of the form. Only display the 'save' if the data can be saved.
|
Check the validity of the form. Only display the 'save' if the data can be saved.
|
||||||
"""
|
"""
|
||||||
valid = True # Lets be nice and assume the data is correct.
|
log.debug(u'Validate Song')
|
||||||
|
# Lets be nice and assume the data is correct.
|
||||||
|
valid = True
|
||||||
if len(self.TitleEditItem.displayText()) == 0:
|
if len(self.TitleEditItem.displayText()) == 0:
|
||||||
valid = False
|
valid = False
|
||||||
if len(self.CopyrightEditItem.displayText()) == 0:
|
if len(self.CopyrightEditItem.displayText()) == 0:
|
||||||
valid = False
|
valid = False
|
||||||
|
if self.VerseListWidget.count() == 0:
|
||||||
|
valid = False
|
||||||
|
if self.AuthorsListView.count() == 0:
|
||||||
|
valid = False
|
||||||
|
return valid
|
||||||
|
|
||||||
def _color_widget(self, slot, invalid):
|
def _color_widget(self, slot, invalid):
|
||||||
r = Qt.QPalette(slot.palette())
|
r = Qt.QPalette(slot.palette())
|
||||||
@ -197,22 +256,26 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
self.CopyrightEditItem.setCursorPosition(pos + 1)
|
self.CopyrightEditItem.setCursorPosition(pos + 1)
|
||||||
|
|
||||||
def onAccept(self):
|
def onAccept(self):
|
||||||
|
log.debug(u'OnAccept')
|
||||||
#self.song.topics.append(9) << need opject here
|
#self.song.topics.append(9) << need opject here
|
||||||
|
if not self._validate_song():
|
||||||
|
return
|
||||||
self.song.title = unicode(self.TitleEditItem.displayText())
|
self.song.title = unicode(self.TitleEditItem.displayText())
|
||||||
self.song.copyright = unicode(self.CopyrightEditItem.displayText())
|
self.song.copyright = unicode(self.CopyrightEditItem.displayText())
|
||||||
self.song.search_title = self.TitleEditItem.displayText() + u'@'+ self.AlternativeEdit.displayText()
|
self.song.search_title = self.TitleEditItem.displayText() + u'@'+ self.AlternativeEdit.displayText()
|
||||||
self.processLyrics()
|
self.processLyrics()
|
||||||
self.processTitle()
|
self.processTitle()
|
||||||
|
self.song.song_book_id = 0
|
||||||
for i in range(0, self.AuthorsListView.count()):
|
# for i in range(0, self.AuthorsListView.count()):
|
||||||
print self.AuthorsListView.item(i)
|
# print self.AuthorsListView.item(i)
|
||||||
for i in range(0, self.TopicsListView.count()):
|
# for i in range(0, self.TopicsListView.count()):
|
||||||
print self.TopicsListView.item(i)
|
# print self.TopicsListView.item(i)
|
||||||
|
|
||||||
self.songmanager.save_song(self.song)
|
self.songmanager.save_song(self.song)
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def processLyrics(self):
|
def processLyrics(self):
|
||||||
|
log.debug(u'processLyrics')
|
||||||
sxml=SongXMLBuilder()
|
sxml=SongXMLBuilder()
|
||||||
sxml.new_document()
|
sxml.new_document()
|
||||||
sxml.add_lyrics_to_song()
|
sxml.add_lyrics_to_song()
|
||||||
@ -235,6 +298,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
|
|||||||
self.song.lyrics = unicode(sxml.extract_xml())
|
self.song.lyrics = unicode(sxml.extract_xml())
|
||||||
|
|
||||||
def processTitle(self):
|
def processTitle(self):
|
||||||
|
log.debug(u'processTitle')
|
||||||
self.song.search_title = self.song.search_title.replace("'", u'')
|
self.song.search_title = self.song.search_title.replace("'", u'')
|
||||||
self.song.search_title = self.song.search_title.replace(u',', u'')
|
self.song.search_title = self.song.search_title.replace(u',', u'')
|
||||||
self.song.search_title = self.song.search_title.replace(u';', u'')
|
self.song.search_title = self.song.search_title.replace(u';', u'')
|
||||||
|
@ -125,6 +125,11 @@ class SongManager():
|
|||||||
"""
|
"""
|
||||||
return self.session.query(Author).get(id)
|
return self.session.query(Author).get(id)
|
||||||
|
|
||||||
|
def get_author_by_name(self, name):
|
||||||
|
"""
|
||||||
|
Details of the Author
|
||||||
|
"""
|
||||||
|
return self.session.query(Author).filter_by(display_name = name).first()
|
||||||
def save_author(self, author):
|
def save_author(self, author):
|
||||||
"""
|
"""
|
||||||
Save the Author and refresh the cache
|
Save the Author and refresh the cache
|
||||||
|
Loading…
Reference in New Issue
Block a user