From 735527d5589d46704d15a46f995b7bb129afcda4 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 9 Mar 2009 12:49:55 +0000 Subject: [PATCH] Moved code out into SongMediaItem bzr-revno: 401 --- openlp/plugins/bibles/lib/biblemediaitem.py | 12 +- openlp/plugins/bibles/lib/biblestab.py | 41 ++-- openlp/plugins/songs/forms/__init__.py | 2 +- openlp/plugins/songs/forms/authorsform.py | 11 +- openlp/plugins/songs/forms/editsongform.py | 6 +- openlp/plugins/songs/lib/__init__.py | 4 +- openlp/plugins/songs/lib/mediaitem.py | 220 ++++++++++++++++++++ openlp/plugins/songs/songsplugin.py | 178 +--------------- 8 files changed, 262 insertions(+), 212 deletions(-) create mode 100644 openlp/plugins/songs/lib/mediaitem.py diff --git a/openlp/plugins/bibles/lib/biblemediaitem.py b/openlp/plugins/bibles/lib/biblemediaitem.py index e3e2acc61..d79708d46 100644 --- a/openlp/plugins/bibles/lib/biblemediaitem.py +++ b/openlp/plugins/bibles/lib/biblemediaitem.py @@ -26,7 +26,7 @@ from openlp.core.lib import MediaManagerItem, Receiver from openlp.core.resources import * from openlp.plugins.bibles.forms import BibleImportForm -from openlp.plugins.bibles.lib import BiblesTab +#from openlp.plugins.bibles.lib import BiblesTab class BibleMediaItem(MediaManagerItem): """ @@ -244,7 +244,7 @@ class BibleMediaItem(MediaManagerItem): self.ClearAdvancedSearchComboBox.clear() def loadBibles(self): - log.debug("Loading Bibles") + log.debug("Loading Bibles") bibles = self.parent.biblemanager.get_bibles('full') for bible in bibles: # load bibles into the combo boxes self.QuickVersionComboBox.addItem(bible) @@ -326,7 +326,7 @@ class BibleMediaItem(MediaManagerItem): self.displayResults(bible) def onBiblePreviewClick(self): - log.debug("Bible Preview Button pressed") + log.debug("Bible Preview Button pressed") items = self.BibleListView.selectedItems() old_chapter = '' for item in items: @@ -344,7 +344,7 @@ class BibleMediaItem(MediaManagerItem): loc = self.formatVerse(old_chapter, chapter, verse, u'(', u')') elif self.parent.bibles_tab.display_style == 2: loc = self.formatVerse(old_chapter, chapter, verse, u'{', u'}') - elif self.parent.bibles_tab.display_style == 3: + elif self.parent.bibles_tab.display_style == 3: loc = self.formatVerse(old_chapter, chapter, verse, u'[', u']') else: loc = self.formatVerse(old_chapter, chapter, verse, u'', u'') @@ -364,7 +364,7 @@ class BibleMediaItem(MediaManagerItem): return loc def reloadBibles(self): - log.debug("Reloading Bibles") + log.debug("Reloading Bibles") self.parent.biblemanager.reload_bibles() #self.initialiseForm() self.loadBibles() @@ -414,7 +414,7 @@ class BibleMediaItem(MediaManagerItem): self.BibleListView.setRowHeight(row_count, 20) def searchByReference(self, bible, search): - log.debug("searchByReference %s ,%s", bible, search) + log.debug("searchByReference %s ,%s", bible, search) book = '' start_chapter = '' end_chapter = '' diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index b329d3d0c..0e3daf476 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -29,6 +29,10 @@ class BiblesTab(SettingsTab): BiblesTab is the Bibles settings tab in the settings dialog. """ def __init__(self): + self.paragraph_style = True + self.show_new_chapters = False + self.display_style = 0 + self.bible_search = True SettingsTab.__init__(self, u'Bibles') def setupUi(self): @@ -120,7 +124,7 @@ class BiblesTab(SettingsTab): QtCore.QObject.connect(self.ParagraphRadioButton, QtCore.SIGNAL("pressed()"), self.onParagraphRadioButtonPressed) QtCore.QObject.connect(self.DisplayStyleComboBox, - QtCore.SIGNAL("activated(int)"), self.onDisplayStyleComboBoxChanged) + QtCore.SIGNAL("activated(int)"), self.onDisplayStyleComboBoxChanged) def retranslateUi(self): self.VerseDisplayGroupBox.setTitle(translate('SettingsForm', 'Verse Display')) @@ -138,7 +142,7 @@ class BiblesTab(SettingsTab): def onDisplayStyleComboBoxChanged(self): self.display_style = self.DisplayStyleComboBox.currentIndex() - + def onVerseRadioButtonPressed(self): self.paragraph_style = False @@ -146,35 +150,32 @@ class BiblesTab(SettingsTab): self.paragraph_style = True def onNewChaptersCheckBoxChanged(self): - check_box = self.NewChaptersCheckBox.checkState() - self.new_chapter_check = False - if check_box == 2: # we have a set value convert to True/False - self.new_chapter_check = True - + check_state = self.NewChaptersCheckBox.checkState() + self.show_new_chapters = False + if check_state == 2: # we have a set value convert to True/False + self.show_new_chapters = True + def onBibleSearchCheckBoxChanged(self): - bible_search = self.BibleSearchCheckBox.checkState() - self.bible_search_check = False - if bible_search == 2: # we have a set value convert to True/False - self.bible_search_check = True + check_state = self.BibleSearchCheckBox.checkState() + self.bible_search = False + if check_state == 2: # we have a set value convert to True/False + self.bible_search = True def load(self): self.paragraph_style = self.convertStringToBoolean(self.config.get_config('paragraph style', u'True')) - self.new_chapter_check = self.convertStringToBoolean(self.config.get_config('display new chapter', u"False")) + self.show_new_chapters = self.convertStringToBoolean(self.config.get_config('display new chapter', u"False")) self.display_style = int(self.config.get_config('display brackets', '0')) - self.search_as_type = self.convertStringToBoolean(self.config.get_config('search as type', u'True')) + self.bible_search = self.convertStringToBoolean(self.config.get_config('search as type', u'True')) if self.paragraph_style: self.ParagraphRadioButton.setChecked(True) else: self.VerseRadioButton.setChecked(True) - if self.new_chapter_check: - self.NewChaptersCheckBox.setChecked(True) + self.NewChaptersCheckBox.setChecked(self.show_new_chapters) self.DisplayStyleComboBox.setCurrentIndex(self.display_style) - if self.search_as_type: - self.BibleSearchCheckBox.setChecked(True) + self.BibleSearchCheckBox.setChecked(self.bible_search) def save(self): self.config.set_config("paragraph style", str(self.paragraph_style)) - self.config.set_config("display new chapter", str(self.new_chapter_check)) + self.config.set_config("display new chapter", str(self.show_new_chapters)) self.config.set_config("display brackets", str(self.display_style)) - self.config.set_config("search as type", str(self.bible_search_check)) - + self.config.set_config("search as type", str(self.bible_search)) diff --git a/openlp/plugins/songs/forms/__init__.py b/openlp/plugins/songs/forms/__init__.py index a6ddc1f72..5f75b5a45 100644 --- a/openlp/plugins/songs/forms/__init__.py +++ b/openlp/plugins/songs/forms/__init__.py @@ -18,11 +18,11 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from editsongform import EditSongForm from authorsform import AuthorsForm from topicsform import TopicsForm from songbookform import SongBookForm from editverseform import EditVerseForm +from editsongform import EditSongForm from openlpexportform import OpenLPExportForm from openlpimportform import OpenLPImportForm diff --git a/openlp/plugins/songs/forms/authorsform.py b/openlp/plugins/songs/forms/authorsform.py index 95877f18e..876758934 100644 --- a/openlp/plugins/songs/forms/authorsform.py +++ b/openlp/plugins/songs/forms/authorsform.py @@ -16,16 +16,15 @@ 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 openlp.core.resources import * - from PyQt4 import QtGui, QtCore -from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature -from authorsdialog import Ui_AuthorsDialog +from openlp.core.resources import * from openlp.plugins.songs.lib.classes import * -class AuthorsForm(QDialog, Ui_AuthorsDialog): +from openlp.plugins.songs.forms.authorsdialog import Ui_AuthorsDialog + +class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): """ Class to control the Maintenance of Authors Dialog """ @@ -33,7 +32,7 @@ class AuthorsForm(QDialog, Ui_AuthorsDialog): """ Set up the screen and common data """ - QDialog.__init__(self, parent) + QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.songmanager = songmanager self.AuthorListView.setColumnCount(2) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index b1f79bf38..84602638b 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -19,10 +19,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA """ from PyQt4 import Qt, QtCore, QtGui -from authorsform import AuthorsForm -from topicsform import TopicsForm -from songbookform import SongBookForm -from editverseform import EditVerseForm +from openlp.plugins.songs.forms import AuthorsForm, TopicsForm, SongBookForm, \ + EditVerseForm from editsongdialog import Ui_EditSongDialog diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index ca37210d0..699daee1b 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -20,7 +20,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA from manager import SongManager from songstab import SongsTab +from mediaitem import SongMediaItem #from xml import SongOpenXml -__all__ = ['SongManager', SongsTab] - +#__all__ = ['SongManager', 'SongsTab', 'SongMediaItem'] diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py new file mode 100644 index 000000000..df12d467f --- /dev/null +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -0,0 +1,220 @@ +# -*- 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 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 + +from openlp.core import translate +from openlp.core.lib import MediaManagerItem +from openlp.core.resources import * + +from openlp.plugins.songs.forms import EditSongForm + +class SongMediaItem(MediaManagerItem): + """ + This is the custom media manager item for Songs. + """ + global log + log=logging.getLogger("SongMediaItem") + log.info("Song Media Item loaded") + + def __init__(self, parent, icon, title): + MediaManagerItem.__init__(self, parent, icon, title) + self.edit_song_form = EditSongForm(self.parent.songmanager) + + def setupUi(self): + # Add a toolbar + self.addToolbar() + # Create buttons for the toolbar + ## New Song Button ## + self.addToolbarButton(translate('SongMediaItem', u'New Song'), + translate('SongMediaItem', u'Add a new song'), + ':/songs/song_new.png', self.onSongNewClick, 'SongNewItem') + ## Edit Song Button ## + self.addToolbarButton(translate('SongMediaItem', u'Edit Song'), + translate('SongMediaItem', u'Edit the selected song'), + ':/songs/song_edit.png', self.onSongEditClick, 'SongEditItem') + ## Delete Song Button ## + self.addToolbarButton(translate('SongMediaItem', u'Delete Song'), + translate('SongMediaItem', u'Delete the selected song'), + ':/songs/song_delete.png', self.onSongDeleteClick, 'SongDeleteItem') + ## Separator Line ## + self.addToolbarSeparator() + ## Preview Song Button ## + self.addToolbarButton(translate('SongMediaItem', u'Preview Song'), + translate('SongMediaItem', u'Preview the selected song'), + ':/system/system_preview.png', self.onSongPreviewClick, 'SongPreviewItem') + ## Live Song Button ## + self.addToolbarButton(translate('SongMediaItem', u'Go Live'), + translate('SongMediaItem', u'Send the selected song live'), + ':/system/system_live.png', self.onSongLiveClick, 'SongLiveItem') + ## Add Song Button ## + self.addToolbarButton(translate('SongMediaItem', u'Add Song To Service'), + translate('SongMediaItem', u'Add the selected song(s) to the service'), + ':/system/system_add.png', self.onSongAddClick, 'SongAddItem') + ## Add the songlist widget ## + # Create the tab widget + self.SongWidget = QtGui.QWidget(self) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.SongWidget.sizePolicy().hasHeightForWidth()) + self.SongWidget.setSizePolicy(sizePolicy) + self.SongWidget.setObjectName('SongWidget') + self.SearchLayout = QtGui.QGridLayout(self.SongWidget) + self.SearchLayout.setObjectName('SearchLayout') + self.SearchTypeComboBox = QtGui.QComboBox(self.SongWidget) + self.SearchTypeComboBox.setObjectName('SearchTypeComboBox') + self.SearchLayout.addWidget(self.SearchTypeComboBox, 0, 1, 1, 2) + self.SearchTypeLabel = QtGui.QLabel(self.SongWidget) + self.SearchTypeLabel.setObjectName('SearchTypeLabel') + self.SearchLayout.addWidget(self.SearchTypeLabel, 0, 0, 1, 1) + self.SearchTextLabel = QtGui.QLabel(self.SongWidget) + self.SearchTextLabel.setObjectName('SearchTextLabel') + self.SearchLayout.addWidget(self.SearchTextLabel, 2, 0, 1, 1) + self.SearchTextEdit = QtGui.QLineEdit(self.SongWidget) + self.SearchTextEdit.setObjectName('SearchTextEdit') + self.SearchLayout.addWidget(self.SearchTextEdit, 2, 1, 1, 2) + self.ClearTextButton = QtGui.QPushButton(self.SongWidget) + self.ClearTextButton.setObjectName('ClearTextButton') + self.SearchLayout.addWidget(self.ClearTextButton, 3, 1, 1, 1) + self.SearchTextButton = QtGui.QPushButton(self.SongWidget) + self.SearchTextButton.setObjectName('SearchTextButton') + self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) + # Add the song widget to the page layout + self.PageLayout.addWidget(self.SongWidget) + self.SongListView = QtGui.QTableWidget() + self.SongListView.setColumnCount(2) + self.SongListView.setColumnHidden(0, True) + self.SongListView.setColumnWidth(1, 240) + self.SongListView.setShowGrid(False) + self.SongListView.setSortingEnabled(False) + self.SongListView.setAlternatingRowColors(True) + self.SongListView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) + self.SongListView.horizontalHeader().setVisible(False) + self.SongListView.verticalHeader().setVisible(False) + self.SongListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) + self.SongListView.setObjectName('listView') + self.PageLayout.addWidget(self.SongListView) + # Signals and slots + QtCore.QObject.connect(self.SearchTextButton, + QtCore.SIGNAL("pressed()"), self.onSearchTextButtonClick) + QtCore.QObject.connect(self.ClearTextButton, + QtCore.SIGNAL("pressed()"), self.onClearTextButtonClick) + QtCore.QObject.connect(self.SearchTextEdit, + QtCore.SIGNAL("textChanged(const QString&)"), self.onSearchTextEditChanged) + QtCore.QObject.connect(self.SongListView, + QtCore.SIGNAL("itemPressed(QTableWidgetItem * item)"), self.onSongSelected) + #define and add the context menu + self.SongListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) + self.SongListView.addAction(self.contextMenuAction(self.SongListView, + ':/songs/song_new.png', translate('SongMediaItem', u'&Edit Song'), + self.onSongEditClick)) + self.SongListView.addAction(self.contextMenuSeparator(self.SongListView)) + self.SongListView.addAction(self.contextMenuAction(self.SongListView, + ':/system/system_preview.png', translate('SongMediaItem', u'&Preview Song'), + self.onSongPreviewClick)) + self.SongListView.addAction(self.contextMenuAction(self.SongListView, + ':/system/system_live.png', translate('SongMediaItem', u'&Show Live'), + self.onSongLiveClick)) + self.SongListView.addAction(self.contextMenuAction(self.SongListView, + ':/system/system_add.png', translate('SongMediaItem', u'&Add to Service'), + self.onSongEditClick)) + + def retranslateUi(self): + self.SearchTypeLabel.setText(translate('SongMediaItem', u'Search Type:')) + self.SearchTextLabel.setText(translate('SongMediaItem', u'Search Text:')) + self.ClearTextButton.setText(translate('SongMediaItem', u'Clear')) + self.SearchTextButton.setText(translate('SongMediaItem', u'Search')) + + def initialise(self): + self.SearchTypeComboBox.addItem(translate('SongMediaItem', u'Titles')) + self.SearchTypeComboBox.addItem(translate('SongMediaItem', u'Lyrics')) + self.SearchTypeComboBox.addItem(translate('SongMediaItem', u'Authors')) + + def displayResults(self, searchresults): + log.debug("_search results") + self.SongListView.clear() # clear the results + self.SongListView.horizontalHeader().setVisible(False) + self.SongListView.verticalHeader().setVisible(False) + self.SongListView.setRowCount(0) + #log.debug("Records returned from search %s", len(searchresults)) + for song in searchresults: + for author in song.authors: + c = self.SongListView.rowCount() + self.SongListView.setRowCount(c + 1) + song_index = QtGui.QTableWidgetItem(str(song.id)) + self.SongListView.setItem(c , 0, song_index) + song_detail = QtGui.QTableWidgetItem( + u'%s (%s)' % (str(song.title), str(author.display_name))) + self.SongListView.setItem(c , 1, song_detail) + self.SongListView.setRowHeight(c, 20) + + def onClearTextButtonClick(self): + """ + Clear the search text. + """ + self.SearchTextEdit.clear() + + def onSearchTextEditChanged(self, text): + search_length = 3 + if self.SearchTypeComboBox.currentIndex() == 1: + search_length = 7 + if len(text) > search_length: # only search if > 3 characters + self.onSearchTextButtonClick() + + def onSearchTextButtonClick(self): + search_keywords = str(self.SearchTextEdit.displayText()) + search_results = [] + search_type = self.SearchTypeComboBox.currentIndex() + if search_type == 0: + log.debug("Titles Search") + search_results = self.parent.songmanager.search_song_title(search_keywords) + elif search_type == 1: + log.debug("Lyrics Search") + search_results = self.parent.songmanager.search_song_lyrics(search_keywords) + elif search_type == 2: + log.debug("Authors Search") + #searchresults = self.songmanager.get_song_from_author(searchtext) + self.displayResults(search_results) + + def onSongSelected(self, item): + print item + + def onSongNewClick(self): + self.edit_song_form.exec_() + + def onSongEditClick(self): + current_row = self.SongListView.currentRow() + id = int(self.SongListView.item(current_row, 0).text()) + self.parent.edit_song_form.loadSong(id) + self.parent.edit_song_form.exec_() + + def onSongDeleteClick(self): + pass + + def onSongPreviewClick(self): + pass + + def onSongLiveClick(self): + pass + + def onSongAddClick(self): + pass diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index a513c88f9..5086b40d2 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -22,10 +22,10 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.resources import * -from openlp.core.lib import Plugin, PluginUtils, MediaManagerItem -from forms import EditSongForm, OpenLPImportForm, OpenSongImportForm, \ - OpenLPExportForm, OpenSongExportForm -from openlp.plugins.songs.lib import SongManager, SongsTab +from openlp.core.lib import Plugin, PluginUtils +from openlp.plugins.songs.lib import SongManager, SongsTab, SongMediaItem +from openlp.plugins.songs.forms import OpenLPImportForm, OpenSongExportForm, \ + OpenSongImportForm, OpenLPExportForm class SongsPlugin(Plugin, PluginUtils): @@ -38,7 +38,6 @@ class SongsPlugin(Plugin, PluginUtils): Plugin.__init__(self, 'Songs', '1.9.0') self.weight = -10 self.songmanager = SongManager(self.config) - self.edit_song_form = EditSongForm(self.songmanager) self.openlp_import_form = OpenLPImportForm() self.opensong_import_form = OpenSongImportForm() self.openlp_export_form = OpenLPExportForm() @@ -48,101 +47,9 @@ class SongsPlugin(Plugin, PluginUtils): self.icon.addPixmap(QtGui.QPixmap(':/media/media_song.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off) - def get_media_manager_item(self): # Create the MediaManagerItem object - self.MediaManagerItem = MediaManagerItem(self, self.icon, 'Songs') - # Add a toolbar - self.MediaManagerItem.addToolbar() - # Create buttons for the toolbar - ## New Song Button ## - self.MediaManagerItem.addToolbarButton('New Song', 'Add a new song', - ':/songs/song_new.png', self.onSongNewClick, 'SongNewItem') - ## Edit Song Button ## - self.MediaManagerItem.addToolbarButton('Edit Song', 'Edit the selected song', - ':/songs/song_edit.png', self.onSongEditClick, 'SongEditItem') - ## Delete Song Button ## - self.MediaManagerItem.addToolbarButton('Delete Song', 'Delete the selected song', - ':/songs/song_delete.png', self.onSongDeleteClick, 'SongDeleteItem') - ## Separator Line ## - self.MediaManagerItem.addToolbarSeparator() - ## Preview Song Button ## - self.MediaManagerItem.addToolbarButton('Preview Song', 'Preview the selected song', - ':/system/system_preview.png', self.onSongPreviewClick, 'SongPreviewItem') - ## Live Song Button ## - self.MediaManagerItem.addToolbarButton('Go Live', 'Send the selected song live', - ':/system/system_live.png', self.onSongLiveClick, 'SongLiveItem') - ## Add Song Button ## - self.MediaManagerItem.addToolbarButton('Add Song To Service', - 'Add the selected song(s) to the service', ':/system/system_add.png', - self.onSongAddClick, 'SongAddItem') - ## Add the songlist widget ## - # Create the tab widget - self.SongWidget = QtGui.QWidget(self.MediaManagerItem) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.SongWidget.sizePolicy().hasHeightForWidth()) - self.SongWidget.setSizePolicy(sizePolicy) - self.SongWidget.setObjectName('SongWidget') - self.SearchLayout = QtGui.QGridLayout(self.SongWidget) - self.SearchLayout.setObjectName('SearchLayout') - self.SearchTypeComboBox = QtGui.QComboBox(self.SongWidget) - self.SearchTypeComboBox.setObjectName('SearchTypeComboBox') - self.SearchLayout.addWidget(self.SearchTypeComboBox, 0, 1, 1, 2) - self.SearchTypeLabel = QtGui.QLabel(self.SongWidget) - self.SearchTypeLabel.setObjectName('SearchTypeLabel') - self.SearchTypeLabel.setText('Search Type:') - self.SearchLayout.addWidget(self.SearchTypeLabel, 0, 0, 1, 1) - self.SearchTextLabel = QtGui.QLabel(self.SongWidget) - self.SearchTextLabel.setObjectName('SearchTextLabel') - self.SearchTextLabel.setText('Search Text:') - self.SearchLayout.addWidget(self.SearchTextLabel, 2, 0, 1, 1) - self.SearchTextEdit = QtGui.QLineEdit(self.SongWidget) - self.SearchTextEdit.setObjectName('SearchTextEdit') - self.SearchLayout.addWidget(self.SearchTextEdit, 2, 1, 1, 2) - self.ClearTextButton = QtGui.QPushButton(self.SongWidget) - self.ClearTextButton.setObjectName('ClearTextButton') - self.ClearTextButton.setText('Clear') - self.SearchLayout.addWidget(self.ClearTextButton, 3, 1, 1, 1) - self.SearchTextButton = QtGui.QPushButton(self.SongWidget) - self.SearchTextButton.setObjectName('SearchTextButton') - self.SearchTextButton.setText('Search') - self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) - # Add the song widget to the page layout - self.MediaManagerItem.PageLayout.addWidget(self.SongWidget) - self.SongListView = QtGui.QTableWidget() - self.SongListView.setColumnCount(2) - self.SongListView.setColumnHidden(0, True) - self.SongListView.setColumnWidth(1, 240) - #self.SongListView.setColumnWidth(2, 80) - self.SongListView.setShowGrid(False) - self.SongListView.setSortingEnabled(False) - self.SongListView.setAlternatingRowColors(True) - self.SongListView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) - self.SongListView.setHorizontalHeaderLabels(QtCore.QStringList(['', u'Song Name'])) - self.SongListView.horizontalHeader().setVisible(False) - self.SongListView.verticalHeader().setVisible(False) - self.SongListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) - self.SongListView.setObjectName('listView') - self.MediaManagerItem.PageLayout.addWidget(self.SongListView) - - QtCore.QObject.connect(self.SearchTextButton, QtCore.SIGNAL("pressed()"), self.onSearchTextButtonClick) - QtCore.QObject.connect(self.ClearTextButton, QtCore.SIGNAL("pressed()"), self.onClearTextButtonClick) - QtCore.QObject.connect(self.SearchTextEdit, QtCore.SIGNAL("textChanged(const QString&)"), self.onSearchTextEditChanged) - - QtCore.QObject.connect(self.SongListView, QtCore.SIGNAL("itemPressed(QTableWidgetItem * item)"), self.onSongSelected) - - - #define and add the context menu - self.SongListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) - - self.SongListView.addAction(self.add_to_context_menu(self.SongListView, ':/songs/song_new.png', "&Edit Song", self.onSongEditClick)) - self.SongListView.addAction(self.add_to_context_separator(self.SongListView)) - self.SongListView.addAction(self.add_to_context_menu(self.SongListView, ':/system/system_preview.png', "&Preview Song", self.onSongPreviewClick)) - self.SongListView.addAction(self.add_to_context_menu(self.SongListView, ':/system/system_live.png', "&Show Live", self.onSongLiveClick)) - self.SongListView.addAction(self.add_to_context_menu(self.SongListView, ':/system/system_add.png', "&Add to Service", self.onSongEditClick)) - + self.MediaManagerItem = SongMediaItem(self, self.icon, 'Songs') return self.MediaManagerItem def add_import_menu_item(self, import_menu): @@ -202,60 +109,6 @@ class SongsPlugin(Plugin, PluginUtils): return self.SongsTab def initialise(self): - self.SearchTypeComboBox.addItem(u'Titles') - self.SearchTypeComboBox.addItem(u'Lyrics') - self.SearchTypeComboBox.addItem(u'Authors') - - def onClearTextButtonClick(self): - """ - Clear the search text. - """ - self.SearchTextEdit.clear() - - def onSearchTextEditChanged(self, text): - sl = 3 - if self.SearchTypeComboBox.currentText() == u'Lyrics': - sl = 7 - if len(text) > sl: # only search if > 3 characters - self.onSearchTextButtonClick() - - def onSearchTextButtonClick(self): - search_keywords = str(self.SearchTextEdit.displayText()) - search_results = [] - search_type = self.SearchTypeComboBox.currentText() - if search_type == u'Titles': - log.debug("Titles Search") - search_results = self.songmanager.search_song_title(search_keywords) - elif search_type == u'Lyrics': - log.debug("Lyrics Search") - search_results = self.songmanager.search_song_lyrics(search_keywords) - elif search_type == u'Authors': - log.debug("Authors Search") - #searchresults = self.songmanager.get_song_from_author(searchtext) - self._display_results(search_results) - - def onSongSelected(self, item): - print item - - def onSongNewClick(self): - self.edit_song_form.exec_() - - def onSongEditClick(self): - current_row = self.SongListView.currentRow() - id = int(self.SongListView.item(current_row, 0).text()) - self.edit_song_form.loadSong(id) - self.edit_song_form.exec_() - - def onSongDeleteClick(self): - pass - - def onSongPreviewClick(self): - pass - - def onSongLiveClick(self): - pass - - def onSongAddClick(self): pass def onImportOpenlp1ItemClick(self): @@ -269,24 +122,3 @@ class SongsPlugin(Plugin, PluginUtils): def onExportOpenSongItemClicked(self): self.opensong_export_form.show() - - def _display_results(self, searchresults): - log.debug("_search results") - self.SongListView.clear() # clear the results - self.SongListView.setHorizontalHeaderLabels(QtCore.QStringList(['', u'Song Name'])) - self.SongListView.horizontalHeader().setVisible(False) - self.SongListView.verticalHeader().setVisible(False) - self.SongListView.setRowCount(0) - #log.debug("Records returned from search %s", len(searchresults)) - for song in searchresults: - for author in song.authors: - c = self.SongListView.rowCount() - self.SongListView.setRowCount(c + 1) - song_index = QtGui.QTableWidgetItem(str(song.id)) - self.SongListView.setItem(c , 0, song_index) - song_detail = QtGui.QTableWidgetItem(u'%s (%s)' % (str(song.title), str(author.display_name))) - self.SongListView.setItem(c , 1, song_detail) - #twi = QtGui.QTableWidgetItem() - #self.SongListView.setItem(c , 2, twi) - self.SongListView.setRowHeight(c, 20) -