Page Up/Down works on SlideController

Search for Authors on Songs now work

bzr-revno: 473
This commit is contained in:
Tim Bentley 2009-06-21 19:09:51 +01:00
commit eb523ede80
5 changed files with 76 additions and 28 deletions

View File

@ -29,6 +29,7 @@ from xml.etree.ElementTree import ElementTree, XML, dump
</song> </song>
""" """
import logging
from xml.dom.minidom import Document from xml.dom.minidom import Document
from xml.etree.ElementTree import ElementTree, XML, dump from xml.etree.ElementTree import ElementTree, XML, dump
@ -70,11 +71,20 @@ class SongXMLBuilder():
def extract_xml(self): def extract_xml(self):
# Print our newly created XML # Print our newly created XML
return self.song_xml.toxml() return self.song_xml.toxml(u'utf-8')
class SongXMLParser(): class SongXMLParser():
global log
log = logging.getLogger(u'SongXMLParser')
log.info(u'SongXMLParser Loaded')
def __init__(self, xml): 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): def get_verses(self):
#return a list of verse's and attributes #return a list of verse's and attributes

View File

@ -21,14 +21,11 @@ import logging
import os import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import OpenLPToolbar, translate from openlp.core.lib import OpenLPToolbar, translate
class SlideData(QtCore.QAbstractListModel): class SlideData(QtCore.QAbstractListModel):
""" """
Tree of items for an order of Theme. List of frames to be displayed on the list and the main display.
Includes methods for reading and writing the contents to an OOS file
Root contains a list of ThemeItems
""" """
global log global log
log = logging.getLogger(u'SlideData') log = logging.getLogger(u'SlideData')
@ -98,6 +95,24 @@ class SlideData(QtCore.QAbstractListModel):
filelist = [item[3] for item in self.items]; filelist = [item[3] for item in self.items];
return filelist 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): class SlideController(QtGui.QWidget):
""" """
@ -132,7 +147,7 @@ class SlideController(QtGui.QWidget):
self.ControllerLayout.setSpacing(0) self.ControllerLayout.setSpacing(0)
self.ControllerLayout.setMargin(0) self.ControllerLayout.setMargin(0)
# Controller list view # Controller list view
self.PreviewListView = QtGui.QListView(self.Controller) self.PreviewListView = SlideList(self)
self.PreviewListView.setUniformItemSizes(True) self.PreviewListView.setUniformItemSizes(True)
self.PreviewListView.setIconSize(QtCore.QSize(250, 190)) self.PreviewListView.setIconSize(QtCore.QSize(250, 190))
self.PreviewListData = SlideData() self.PreviewListData = SlideData()
@ -210,6 +225,11 @@ class SlideController(QtGui.QWidget):
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
QtCore.QObject.connect(self.PreviewListView, QtCore.QObject.connect(self.PreviewListView,
QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected) 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): def onSlideSelectedFirst(self):
""" """

View File

@ -60,8 +60,8 @@ class SongManager():
metadata.create_all() metadata.create_all()
log.debug(u'Song Initialised') log.debug(u'Song Initialised')
def process_dialog(self, dialogobject): # def process_dialog(self, dialogobject):
self.dialogobject = dialogobject # self.dialogobject = dialogobject
def get_songs(self): 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() 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): def get_song(self, id=None):
""" """
Returns the details of a song Returns the details of a song

View File

@ -160,8 +160,25 @@ class SongMediaItem(MediaManagerItem):
self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Lyrics')) self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Lyrics'))
self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Authors')) self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Authors'))
def displayResults(self, searchresults): def onSearchTextButtonClick(self):
log.debug(u'display results') 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() self.SongListWidget.clear()
#log.debug(u'Records returned from search %s", len(searchresults)) #log.debug(u'Records returned from search %s", len(searchresults))
for song in searchresults: for song in searchresults:
@ -175,6 +192,16 @@ class SongMediaItem(MediaManagerItem):
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
self.SongListWidget.addItem(song_name) 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): def onClearTextButtonClick(self):
""" """
Clear the search text. Clear the search text.
@ -188,21 +215,6 @@ class SongMediaItem(MediaManagerItem):
if len(text) > search_length: if len(text) > search_length:
self.onSearchTextButtonClick() 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): def onSongNewClick(self):
self.edit_song_form.newSong() self.edit_song_form.newSong()
self.edit_song_form.exec_() self.edit_song_form.exec_()

View File

@ -103,7 +103,7 @@ class SongsPlugin(Plugin):
QtCore.QObject.connect(self.ExportOpenSongItem, QtCore.SIGNAL(u'triggered()'), self.onExportOpenSongItemClicked) QtCore.QObject.connect(self.ExportOpenSongItem, QtCore.SIGNAL(u'triggered()'), self.onExportOpenSongItemClicked)
def initialise(self): def initialise(self):
self.media_item.displayResults(self.songmanager.get_songs()) self.media_item.displayResultsSong(self.songmanager.get_songs())
def onImportOpenlp1ItemClick(self): def onImportOpenlp1ItemClick(self):
self.openlp_import_form.show() self.openlp_import_form.show()
@ -136,4 +136,4 @@ class SongsPlugin(Plugin):
self.media_item.onSongLiveClick() self.media_item.onSongLiveClick()
if event.event_type == EventType.LoadSongList : if event.event_type == EventType.LoadSongList :
log.debug(u'Load Load Song List Item received') 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())