From 76f6c8b87ca2598fc66f094c4c90de1bafcfb6d2 Mon Sep 17 00:00:00 2001 From: M2j Date: Tue, 29 Jun 2010 00:29:54 +0200 Subject: [PATCH] proof-of-concept songs search button --- openlp/core/lib/__init__.py | 9 ++- openlp/core/ui/servicemanager.py | 2 +- openlp/core/ui/slidecontroller.py | 2 +- openlp/plugins/songs/lib/mediaitem.py | 104 ++++++++++++++++---------- 4 files changed, 73 insertions(+), 44 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 5a4d3f5b3..ae3d15fe1 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -35,7 +35,7 @@ from PyQt4 import QtCore, QtGui log = logging.getLogger(__name__) -def translate(context, text, comment=None): +def translate(context, text, comment=None, count=-1): """ A special shortcut method to wrap around the Qt4 translation functions. This abstracts the translation procedure so that we can change it if at a @@ -47,6 +47,13 @@ def translate(context, text, comment=None): ``text`` The text to put into the translation tables for translation. + + ``comment`` + A optional comment for translators. + + ``count`` + If count is given it replaces %n in the text. A propper plural form is + chosen. """ return QtCore.QCoreApplication.translate(context, text, comment) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index cccd34195..41704bc5d 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -108,7 +108,7 @@ class ServiceManager(QtGui.QWidget): #is a new service and has not been saved self.isNew = True self.serviceNoteForm = ServiceNoteForm() - self.serviceItemEditForm = ServiceItemEditForm() + self.serviceItemEditForm = ServiceItemEditForm(self) #start with the layout self.Layout = QtGui.QVBoxLayout(self) self.Layout.setSpacing(0) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 10cd3cff0..53327eb7e 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -802,7 +802,7 @@ class SlideController(QtGui.QWidget): QtCore.QTimer.singleShot(2.5, self.grabMainDisplay) else: label = self.PreviewListWidget.cellWidget( - self.PreviewListWidget.currentRow(), 1) + self.PreviewListWidget.currentRow(), 0) self.SlidePreview.setPixmap(label.pixmap()) def grabMainDisplay(self): diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index ab70c9659..1a87a6c23 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -74,45 +74,60 @@ class SongMediaItem(MediaManagerItem): u'Maintain the lists of authors, topics and books'), ':/songs/song_maintenance.png', self.onSongMaintenanceClick) self.PageLayout.setSpacing(4) - self.SearchLayout = QtGui.QFormLayout() - self.SearchLayout.setMargin(0) - self.SearchLayout.setSpacing(4) - self.SearchLayout.setObjectName(u'SearchLayout') + self.SearchLineLayout = QtGui.QHBoxLayout() + self.SearchLineLayout.setMargin(0) + self.SearchLineLayout.setSpacing(4) + self.SearchLineLayout.setObjectName(u'SearchLineLayout') + self.PageLayout.addLayout(self.SearchLineLayout) self.SearchTextLabel = QtGui.QLabel(self) - self.SearchTextLabel.setAlignment( - QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) self.SearchTextLabel.setObjectName(u'SearchTextLabel') - self.SearchLayout.setWidget( - 0, QtGui.QFormLayout.LabelRole, self.SearchTextLabel) + self.SearchLineLayout.addWidget(self.SearchTextLabel) self.SearchTextEdit = QtGui.QLineEdit(self) self.SearchTextEdit.setObjectName(u'SearchTextEdit') - self.SearchLayout.setWidget( - 0, QtGui.QFormLayout.FieldRole, self.SearchTextEdit) - self.SearchTypeLabel = QtGui.QLabel(self) - self.SearchTypeLabel.setAlignment( - QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) - self.SearchTypeLabel.setObjectName(u'SearchTypeLabel') - self.SearchLayout.setWidget( - 1, QtGui.QFormLayout.LabelRole, self.SearchTypeLabel) - self.SearchTypeComboBox = QtGui.QComboBox(self) - self.SearchTypeComboBox.setObjectName(u'SearchTypeComboBox') - self.SearchLayout.setWidget( - 1, QtGui.QFormLayout.FieldRole, self.SearchTypeComboBox) - self.PageLayout.addLayout(self.SearchLayout) + self.SearchLineLayout.addWidget(self.SearchTextEdit) self.SearchButtonLayout = QtGui.QHBoxLayout() self.SearchButtonLayout.setMargin(0) self.SearchButtonLayout.setSpacing(4) self.SearchButtonLayout.setObjectName(u'SearchButtonLayout') + self.PageLayout.addLayout(self.SearchButtonLayout) self.SearchButtonSpacer = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.SearchButtonLayout.addItem(self.SearchButtonSpacer) - self.SearchTextButton = QtGui.QPushButton(self) - self.SearchTextButton.setObjectName(u'SearchTextButton') - self.SearchButtonLayout.addWidget(self.SearchTextButton) + self.SearchButtonLayout.addSpacerItem(self.SearchButtonSpacer) self.ClearTextButton = QtGui.QPushButton(self) self.ClearTextButton.setObjectName(u'ClearTextButton') self.SearchButtonLayout.addWidget(self.ClearTextButton) - self.PageLayout.addLayout(self.SearchButtonLayout) + self.SearchTextButton = QtGui.QToolButton(self) + self.SearchTextButton.setObjectName(u'SearchTextButton') + self.SearchButtonLayout.addWidget(self.SearchTextButton) + self.SearchTitlesAction = QtGui.QAction(self) + self.SearchTitlesAction.setObjectName(u'SearchTitlesAction') + self.SearchTitlesAction.setCheckable(True) + self.SearchLyricsAction = QtGui.QAction(self) + self.SearchLyricsAction.setObjectName(u'SearchLyricsAction') + self.SearchLyricsAction.setCheckable(True) + self.SearchAuthorsAction = QtGui.QAction(self) + self.SearchAuthorsAction.setObjectName(u'SearchAuthorsAction') + self.SearchAuthorsAction.setCheckable(True) + self.SearchActionGroup = QtGui.QActionGroup(self) + self.SearchActionGroup.setObjectName(u'SearchActionGroup') + self.SearchActionGroup.setExclusive(True) + self.SearchActionGroup.addAction(self.SearchTitlesAction) + self.SearchActionGroup.addAction(self.SearchLyricsAction) + self.SearchActionGroup.addAction(self.SearchAuthorsAction) + self.SearchTypeMenu = QtGui.QMenu(self) + self.SearchTypeMenu.setObjectName(u'SearchTypeMenu') + self.SearchTypeMenu.addAction(self.SearchTitlesAction) + self.SearchTypeMenu.addAction(self.SearchLyricsAction) + self.SearchTypeMenu.addAction(self.SearchAuthorsAction) + self.SearchTextButton.setPopupMode(QtGui.QToolButton.MenuButtonPopup) + self.SearchTextButton.setMenu(self.SearchTypeMenu) + QtCore.QObject.connect(self.SearchTitlesAction, + QtCore.SIGNAL(u'triggered()'), self.onSearchTextButtonClick) + QtCore.QObject.connect(self.SearchLyricsAction, + QtCore.SIGNAL(u'triggered()'), self.onSearchTextButtonClick) + QtCore.QObject.connect(self.SearchAuthorsAction, + QtCore.SIGNAL(u'triggered()'), self.onSearchTextButtonClick) + # Signals and slots QtCore.QObject.connect(self.SearchTextEdit, QtCore.SIGNAL(u'returnPressed()'), self.onSearchTextButtonClick) @@ -142,38 +157,45 @@ class SongMediaItem(MediaManagerItem): def retranslateUi(self): self.SearchTextLabel.setText( translate(u'SongsPlugin.MediaItem', u'Search:')) - self.SearchTypeLabel.setText( - translate(u'SongsPlugin.MediaItem', u'Type:')) self.ClearTextButton.setText( translate(u'SongsPlugin.MediaItem', u'Clear')) - self.SearchTextButton.setText( - translate(u'SongsPlugin.MediaItem', u'Search')) + self.SearchTitlesAction.setText( + translate(u'SongsPlugin.MediaItem', u'Search Titles')) + self.SearchLyricsAction.setText( + translate(u'SongsPlugin.MediaItem', u'Search Lyrics')) + self.SearchAuthorsAction.setText( + translate(u'SongsPlugin.MediaItem', u'Search Authors')) + if self.SearchTitlesAction.isChecked(): + self.SearchTextButton.setText(self.SearchTitlesAction.text()) + if self.SearchLyricsAction.isChecked(): + self.SearchTextButton.setText(self.SearchLyricsAction.text()) + if self.SearchAuthorsAction.isChecked(): + self.SearchTextButton.setText(self.SearchAuthorsAction.text()) def initialise(self): - self.SearchTypeComboBox.addItem( - translate(u'SongsPlugin.MediaItem', u'Titles')) - self.SearchTypeComboBox.addItem( - translate(u'SongsPlugin.MediaItem', u'Lyrics')) - self.SearchTypeComboBox.addItem( - translate(u'SongsPlugin.MediaItem', u'Authors')) + self.SearchTitlesAction.setChecked(True) + self.SearchTextButton.setText(self.SearchTitlesAction.text()) self.configUpdated() def onSearchTextButtonClick(self): search_keywords = unicode(self.SearchTextEdit.displayText()) search_results = [] - search_type = self.SearchTypeComboBox.currentIndex() - if search_type == 0: +# search_type = self.SearchTypeComboBox.currentIndex() + if self.SearchTitlesAction.isChecked(): #search_type == 0: log.debug(u'Titles Search') + self.SearchTextButton.setText(self.SearchTitlesAction.text()) search_results = self.parent.manager.search_song_title( search_keywords) self.displayResultsSong(search_results) - elif search_type == 1: + elif self.SearchLyricsAction.isChecked(): #search_type == 1: log.debug(u'Lyrics Search') + self.SearchTextButton.setText(self.SearchLyricsAction.text()) search_results = self.parent.manager.search_song_lyrics( search_keywords) self.displayResultsSong(search_results) - elif search_type == 2: + elif self.SearchAuthorsAction.isChecked(): #search_type == 2: log.debug(u'Authors Search') + self.SearchTextButton.setText(self.SearchAuthorsAction.text()) search_results = self.parent.manager.get_song_from_author( search_keywords) self.displayResultsAuthor(search_results) @@ -228,7 +250,7 @@ class SongMediaItem(MediaManagerItem): """ if self.searchAsYouType: search_length = 1 - if self.SearchTypeComboBox.currentIndex() == 1: + if self.SearchLyricsAction.isChecked(): # self.SearchTypeComboBox.currentIndex() == 1: search_length = 7 if len(text) > search_length: self.onSearchTextButtonClick()