forked from openlp/openlp
Page Up/Down works on SlideController
Search for Authors on Songs now work bzr-revno: 473
This commit is contained in:
commit
eb523ede80
openlp
@ -29,6 +29,7 @@ from xml.etree.ElementTree import ElementTree, XML, dump
|
||||
</song>
|
||||
|
||||
"""
|
||||
import logging
|
||||
from xml.dom.minidom import Document
|
||||
from xml.etree.ElementTree import ElementTree, XML, dump
|
||||
|
||||
@ -70,11 +71,20 @@ class SongXMLBuilder():
|
||||
|
||||
def extract_xml(self):
|
||||
# Print our newly created XML
|
||||
return self.song_xml.toxml()
|
||||
return self.song_xml.toxml(u'utf-8')
|
||||
|
||||
class SongXMLParser():
|
||||
global log
|
||||
log = logging.getLogger(u'SongXMLParser')
|
||||
log.info(u'SongXMLParser Loaded')
|
||||
|
||||
def __init__(self, xml):
|
||||
self.song_xml = ElementTree(element=XML(xml))
|
||||
#print xml
|
||||
try:
|
||||
self.song_xml = ElementTree(element=XML(xml))
|
||||
except:
|
||||
#print "invalid xml ", xml
|
||||
log.debug(u'invalid xml %s', xml)
|
||||
|
||||
def get_verses(self):
|
||||
#return a list of verse's and attributes
|
||||
|
@ -21,14 +21,11 @@ import logging
|
||||
import os
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
from openlp.core.lib import OpenLPToolbar, translate
|
||||
|
||||
class SlideData(QtCore.QAbstractListModel):
|
||||
"""
|
||||
Tree of items for an order of Theme.
|
||||
Includes methods for reading and writing the contents to an OOS file
|
||||
Root contains a list of ThemeItems
|
||||
List of frames to be displayed on the list and the main display.
|
||||
"""
|
||||
global log
|
||||
log = logging.getLogger(u'SlideData')
|
||||
@ -98,6 +95,24 @@ class SlideData(QtCore.QAbstractListModel):
|
||||
filelist = [item[3] for item in self.items];
|
||||
return filelist
|
||||
|
||||
class SlideList(QtGui.QListView):
|
||||
|
||||
def __init__(self,parent=None,name=None):
|
||||
QtGui.QListView.__init__(self,parent.Controller)
|
||||
self.parent = parent
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
if type(event) == QtGui.QKeyEvent:
|
||||
#here accept the event and do something
|
||||
if event.key() == QtCore.Qt.Key_PageUp:
|
||||
self.parent.onSlideSelectedPrevious()
|
||||
event.accept()
|
||||
elif event.key() == QtCore.Qt.Key_PageDown:
|
||||
self.parent.onSlideSelectedNext()
|
||||
event.accept()
|
||||
event.ignore()
|
||||
else:
|
||||
event.ignore()
|
||||
|
||||
class SlideController(QtGui.QWidget):
|
||||
"""
|
||||
@ -132,7 +147,7 @@ class SlideController(QtGui.QWidget):
|
||||
self.ControllerLayout.setSpacing(0)
|
||||
self.ControllerLayout.setMargin(0)
|
||||
# Controller list view
|
||||
self.PreviewListView = QtGui.QListView(self.Controller)
|
||||
self.PreviewListView = SlideList(self)
|
||||
self.PreviewListView.setUniformItemSizes(True)
|
||||
self.PreviewListView.setIconSize(QtCore.QSize(250, 190))
|
||||
self.PreviewListData = SlideData()
|
||||
@ -210,6 +225,11 @@ class SlideController(QtGui.QWidget):
|
||||
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
|
||||
QtCore.QObject.connect(self.PreviewListView,
|
||||
QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
|
||||
QtCore.QObject.connect(self.PreviewListView,
|
||||
QtCore.SIGNAL(u'entered(QModelIndex)'), self.onTest)
|
||||
|
||||
def onTest(self , item):
|
||||
print "found", item
|
||||
|
||||
def onSlideSelectedFirst(self):
|
||||
"""
|
||||
|
@ -60,8 +60,8 @@ class SongManager():
|
||||
metadata.create_all()
|
||||
log.debug(u'Song Initialised')
|
||||
|
||||
def process_dialog(self, dialogobject):
|
||||
self.dialogobject = dialogobject
|
||||
# def process_dialog(self, dialogobject):
|
||||
# self.dialogobject = dialogobject
|
||||
|
||||
def get_songs(self):
|
||||
"""
|
||||
@ -81,6 +81,12 @@ class SongManager():
|
||||
"""
|
||||
return self.session.query(Song).filter(Song.search_lyrics.like(u'%' + keywords + u'%')).order_by(Song.search_lyrics.asc()).all()
|
||||
|
||||
def get_song_from_author(self, keywords):
|
||||
"""
|
||||
Searches the song authors for keywords.
|
||||
"""
|
||||
return self.session.query(Author).filter(Author.display_name.like(u'%' + keywords + u'%')).order_by(Author.display_name.asc()).all()
|
||||
|
||||
def get_song(self, id=None):
|
||||
"""
|
||||
Returns the details of a song
|
||||
|
@ -160,8 +160,25 @@ class SongMediaItem(MediaManagerItem):
|
||||
self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Lyrics'))
|
||||
self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Authors'))
|
||||
|
||||
def displayResults(self, searchresults):
|
||||
log.debug(u'display results')
|
||||
def onSearchTextButtonClick(self):
|
||||
search_keywords = unicode(self.SearchTextEdit.displayText())
|
||||
search_results = []
|
||||
search_type = self.SearchTypeComboBox.currentIndex()
|
||||
if search_type == 0:
|
||||
log.debug(u'Titles Search')
|
||||
search_results = self.parent.songmanager.search_song_title(search_keywords)
|
||||
self.displayResultsSong(search_results)
|
||||
elif search_type == 1:
|
||||
log.debug(u'Lyrics Search')
|
||||
search_results = self.parent.songmanager.search_song_lyrics(search_keywords)
|
||||
self.displayResultsSong(search_results)
|
||||
elif search_type == 2:
|
||||
log.debug(u'Authors Search')
|
||||
search_results = self.parent.songmanager.get_song_from_author(search_keywords)
|
||||
self.displayResultsAuthor(search_results)
|
||||
|
||||
def displayResultsSong(self, searchresults):
|
||||
log.debug(u'display results Song')
|
||||
self.SongListWidget.clear()
|
||||
#log.debug(u'Records returned from search %s", len(searchresults))
|
||||
for song in searchresults:
|
||||
@ -175,6 +192,16 @@ class SongMediaItem(MediaManagerItem):
|
||||
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
|
||||
self.SongListWidget.addItem(song_name)
|
||||
|
||||
def displayResultsAuthor(self, searchresults):
|
||||
log.debug(u'display results Author')
|
||||
self.SongListWidget.clear()
|
||||
for author in searchresults:
|
||||
for song in author.songs:
|
||||
song_detail = unicode(u'%s (%s)' % (unicode(author.display_name), unicode(song.title)))
|
||||
song_name = QtGui.QListWidgetItem(song_detail)
|
||||
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
|
||||
self.SongListWidget.addItem(song_name)
|
||||
|
||||
def onClearTextButtonClick(self):
|
||||
"""
|
||||
Clear the search text.
|
||||
@ -188,21 +215,6 @@ class SongMediaItem(MediaManagerItem):
|
||||
if len(text) > search_length:
|
||||
self.onSearchTextButtonClick()
|
||||
|
||||
def onSearchTextButtonClick(self):
|
||||
search_keywords = unicode(self.SearchTextEdit.displayText())
|
||||
search_results = []
|
||||
search_type = self.SearchTypeComboBox.currentIndex()
|
||||
if search_type == 0:
|
||||
log.debug(u'Titles Search')
|
||||
search_results = self.parent.songmanager.search_song_title(search_keywords)
|
||||
elif search_type == 1:
|
||||
log.debug(u'Lyrics Search')
|
||||
search_results = self.parent.songmanager.search_song_lyrics(search_keywords)
|
||||
elif search_type == 2:
|
||||
log.debug(u'Authors Search')
|
||||
#searchresults = self.songmanager.get_song_from_author(searchtext)
|
||||
self.displayResults(search_results)
|
||||
|
||||
def onSongNewClick(self):
|
||||
self.edit_song_form.newSong()
|
||||
self.edit_song_form.exec_()
|
||||
|
@ -103,7 +103,7 @@ class SongsPlugin(Plugin):
|
||||
QtCore.QObject.connect(self.ExportOpenSongItem, QtCore.SIGNAL(u'triggered()'), self.onExportOpenSongItemClicked)
|
||||
|
||||
def initialise(self):
|
||||
self.media_item.displayResults(self.songmanager.get_songs())
|
||||
self.media_item.displayResultsSong(self.songmanager.get_songs())
|
||||
|
||||
def onImportOpenlp1ItemClick(self):
|
||||
self.openlp_import_form.show()
|
||||
@ -136,4 +136,4 @@ class SongsPlugin(Plugin):
|
||||
self.media_item.onSongLiveClick()
|
||||
if event.event_type == EventType.LoadSongList :
|
||||
log.debug(u'Load Load Song List Item received')
|
||||
self.media_item.displayResults(self.songmanager.get_songs())
|
||||
self.media_item.displayResults(self.songmanager.get_songs())
|
||||
|
Loading…
Reference in New Issue
Block a user