Merge lp:~trb143/openlp/servicing2 into lp:openlp

Proposed by Tim Bentley
Status: Merged
Merged at revision: not available
Proposed branch: lp:~trb143/openlp/servicing2
Merge into: lp:openlp
Diff against target: None lines
To merge this branch: bzr merge lp:~trb143/openlp/servicing2
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Review via email: mp+7735@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote :

Add Author Search to Songs plugin
Add Page_up/Down to SlideController

Revision history for this message
Raoul Snyman (raoul-snyman) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/lib/songxmlhandler.py'
2--- openlp/core/lib/songxmlhandler.py 2009-06-16 18:21:24 +0000
3+++ openlp/core/lib/songxmlhandler.py 2009-06-21 16:26:33 +0000
4@@ -29,6 +29,7 @@
5 </song>
6
7 """
8+import logging
9 from xml.dom.minidom import Document
10 from xml.etree.ElementTree import ElementTree, XML, dump
11
12@@ -70,11 +71,20 @@
13
14 def extract_xml(self):
15 # Print our newly created XML
16- return self.song_xml.toxml()
17+ return self.song_xml.toxml(u'utf-8')
18
19 class SongXMLParser():
20+ global log
21+ log = logging.getLogger(u'SongXMLParser')
22+ log.info(u'SongXMLParser Loaded')
23+
24 def __init__(self, xml):
25- self.song_xml = ElementTree(element=XML(xml))
26+ #print xml
27+ try:
28+ self.song_xml = ElementTree(element=XML(xml))
29+ except:
30+ #print "invalid xml ", xml
31+ log.debug(u'invalid xml %s', xml)
32
33 def get_verses(self):
34 #return a list of verse's and attributes
35
36=== modified file 'openlp/core/ui/slidecontroller.py'
37--- openlp/core/ui/slidecontroller.py 2009-06-20 10:44:12 +0000
38+++ openlp/core/ui/slidecontroller.py 2009-06-21 16:26:33 +0000
39@@ -21,14 +21,11 @@
40 import os
41
42 from PyQt4 import QtCore, QtGui
43-
44 from openlp.core.lib import OpenLPToolbar, translate
45
46 class SlideData(QtCore.QAbstractListModel):
47 """
48- Tree of items for an order of Theme.
49- Includes methods for reading and writing the contents to an OOS file
50- Root contains a list of ThemeItems
51+ List of frames to be displayed on the list and the main display.
52 """
53 global log
54 log = logging.getLogger(u'SlideData')
55@@ -98,6 +95,24 @@
56 filelist = [item[3] for item in self.items];
57 return filelist
58
59+class SlideList(QtGui.QListView):
60+
61+ def __init__(self,parent=None,name=None):
62+ QtGui.QListView.__init__(self,parent.Controller)
63+ self.parent = parent
64+
65+ def keyPressEvent(self, event):
66+ if type(event) == QtGui.QKeyEvent:
67+ #here accept the event and do something
68+ if event.key() == QtCore.Qt.Key_PageUp:
69+ self.parent.onSlideSelectedPrevious()
70+ event.accept()
71+ elif event.key() == QtCore.Qt.Key_PageDown:
72+ self.parent.onSlideSelectedNext()
73+ event.accept()
74+ event.ignore()
75+ else:
76+ event.ignore()
77
78 class SlideController(QtGui.QWidget):
79 """
80@@ -132,7 +147,7 @@
81 self.ControllerLayout.setSpacing(0)
82 self.ControllerLayout.setMargin(0)
83 # Controller list view
84- self.PreviewListView = QtGui.QListView(self.Controller)
85+ self.PreviewListView = SlideList(self)
86 self.PreviewListView.setUniformItemSizes(True)
87 self.PreviewListView.setIconSize(QtCore.QSize(250, 190))
88 self.PreviewListData = SlideData()
89@@ -210,6 +225,11 @@
90 QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
91 QtCore.QObject.connect(self.PreviewListView,
92 QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
93+ QtCore.QObject.connect(self.PreviewListView,
94+ QtCore.SIGNAL(u'entered(QModelIndex)'), self.onTest)
95+
96+ def onTest(self , item):
97+ print "found", item
98
99 def onSlideSelectedFirst(self):
100 """
101
102=== modified file 'openlp/plugins/songs/lib/manager.py'
103--- openlp/plugins/songs/lib/manager.py 2009-06-14 13:50:56 +0000
104+++ openlp/plugins/songs/lib/manager.py 2009-06-21 17:45:59 +0000
105@@ -60,8 +60,8 @@
106 metadata.create_all()
107 log.debug(u'Song Initialised')
108
109- def process_dialog(self, dialogobject):
110- self.dialogobject = dialogobject
111+# def process_dialog(self, dialogobject):
112+# self.dialogobject = dialogobject
113
114 def get_songs(self):
115 """
116@@ -81,6 +81,12 @@
117 """
118 return self.session.query(Song).filter(Song.search_lyrics.like(u'%' + keywords + u'%')).order_by(Song.search_lyrics.asc()).all()
119
120+ def get_song_from_author(self, keywords):
121+ """
122+ Searches the song authors for keywords.
123+ """
124+ return self.session.query(Author).filter(Author.display_name.like(u'%' + keywords + u'%')).order_by(Author.display_name.asc()).all()
125+
126 def get_song(self, id=None):
127 """
128 Returns the details of a song
129
130=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
131--- openlp/plugins/songs/lib/mediaitem.py 2009-06-19 18:41:38 +0000
132+++ openlp/plugins/songs/lib/mediaitem.py 2009-06-21 17:45:59 +0000
133@@ -160,8 +160,25 @@
134 self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Lyrics'))
135 self.SearchTypeComboBox.addItem(translate(u'SongMediaItem', u'Authors'))
136
137- def displayResults(self, searchresults):
138- log.debug(u'display results')
139+ def onSearchTextButtonClick(self):
140+ search_keywords = unicode(self.SearchTextEdit.displayText())
141+ search_results = []
142+ search_type = self.SearchTypeComboBox.currentIndex()
143+ if search_type == 0:
144+ log.debug(u'Titles Search')
145+ search_results = self.parent.songmanager.search_song_title(search_keywords)
146+ self.displayResultsSong(search_results)
147+ elif search_type == 1:
148+ log.debug(u'Lyrics Search')
149+ search_results = self.parent.songmanager.search_song_lyrics(search_keywords)
150+ self.displayResultsSong(search_results)
151+ elif search_type == 2:
152+ log.debug(u'Authors Search')
153+ search_results = self.parent.songmanager.get_song_from_author(search_keywords)
154+ self.displayResultsAuthor(search_results)
155+
156+ def displayResultsSong(self, searchresults):
157+ log.debug(u'display results Song')
158 self.SongListWidget.clear()
159 #log.debug(u'Records returned from search %s", len(searchresults))
160 for song in searchresults:
161@@ -175,6 +192,16 @@
162 song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
163 self.SongListWidget.addItem(song_name)
164
165+ def displayResultsAuthor(self, searchresults):
166+ log.debug(u'display results Author')
167+ self.SongListWidget.clear()
168+ for author in searchresults:
169+ for song in author.songs:
170+ song_detail = unicode(u'%s (%s)' % (unicode(author.display_name), unicode(song.title)))
171+ song_name = QtGui.QListWidgetItem(song_detail)
172+ song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
173+ self.SongListWidget.addItem(song_name)
174+
175 def onClearTextButtonClick(self):
176 """
177 Clear the search text.
178@@ -188,21 +215,6 @@
179 if len(text) > search_length:
180 self.onSearchTextButtonClick()
181
182- def onSearchTextButtonClick(self):
183- search_keywords = unicode(self.SearchTextEdit.displayText())
184- search_results = []
185- search_type = self.SearchTypeComboBox.currentIndex()
186- if search_type == 0:
187- log.debug(u'Titles Search')
188- search_results = self.parent.songmanager.search_song_title(search_keywords)
189- elif search_type == 1:
190- log.debug(u'Lyrics Search')
191- search_results = self.parent.songmanager.search_song_lyrics(search_keywords)
192- elif search_type == 2:
193- log.debug(u'Authors Search')
194- #searchresults = self.songmanager.get_song_from_author(searchtext)
195- self.displayResults(search_results)
196-
197 def onSongNewClick(self):
198 self.edit_song_form.newSong()
199 self.edit_song_form.exec_()
200
201=== modified file 'openlp/plugins/songs/songsplugin.py'
202--- openlp/plugins/songs/songsplugin.py 2009-06-16 18:21:24 +0000
203+++ openlp/plugins/songs/songsplugin.py 2009-06-21 17:45:59 +0000
204@@ -103,7 +103,7 @@
205 QtCore.QObject.connect(self.ExportOpenSongItem, QtCore.SIGNAL(u'triggered()'), self.onExportOpenSongItemClicked)
206
207 def initialise(self):
208- self.media_item.displayResults(self.songmanager.get_songs())
209+ self.media_item.displayResultsSong(self.songmanager.get_songs())
210
211 def onImportOpenlp1ItemClick(self):
212 self.openlp_import_form.show()
213@@ -136,4 +136,4 @@
214 self.media_item.onSongLiveClick()
215 if event.event_type == EventType.LoadSongList :
216 log.debug(u'Load Load Song List Item received')
217- self.media_item.displayResults(self.songmanager.get_songs())
218\ No newline at end of file
219+ self.media_item.displayResults(self.songmanager.get_songs())