added search box, added buttons

This commit is contained in:
Andreas Preikschat 2011-02-09 20:36:13 +01:00
parent 50e9f9ab5e
commit 6a409e8957
1 changed files with 110 additions and 25 deletions

View File

@ -86,11 +86,17 @@ class SongExportForm(OpenLPWizard):
""" """
Song wizard specific signals. Song wizard specific signals.
""" """
QtCore.QObject.connect(self.availableListWidget,
QtCore.SIGNAL(u'itemPressed(QListWidgetItem*)'), self.onItemPressed)
QtCore.QObject.connect(self.searchLineEdit,
QtCore.SIGNAL(u'textEdited(const QString&)'),
self.onSearchLineEditChanged)
QtCore.QObject.connect(self.uncheckButton,
QtCore.SIGNAL(u'clicked()'), self.onUncheckButtonClicked)
QtCore.QObject.connect(self.checkButton,
QtCore.SIGNAL(u'clicked()'), self.onCheckButtonClicked)
QtCore.QObject.connect(self.directoryButton, QtCore.QObject.connect(self.directoryButton,
QtCore.SIGNAL(u'clicked()'), self.onDirectoryButtonClicked) QtCore.SIGNAL(u'clicked()'), self.onDirectoryButtonClicked)
# QtCore.QObject.connect(self.searchLineEdit,
# QtCore.SIGNAL(u'textEdited(const QString&)'),
# self.onSearchLineEditChanged)
def addCustomPages(self): def addCustomPages(self):
""" """
@ -101,16 +107,30 @@ class SongExportForm(OpenLPWizard):
self.availableSongsPage.setObjectName(u'availableSongsPage') self.availableSongsPage.setObjectName(u'availableSongsPage')
self.availableSongsLayout = QtGui.QHBoxLayout(self.availableSongsPage) self.availableSongsLayout = QtGui.QHBoxLayout(self.availableSongsPage)
self.availableSongsLayout.setObjectName(u'availableSongsLayout') self.availableSongsLayout.setObjectName(u'availableSongsLayout')
# self.gridLayout = QtGui.QGridLayout() self.verticalLayout = QtGui.QVBoxLayout()
# self.gridLayout.setObjectName(u'gridLayout') self.verticalLayout.setObjectName(u'verticalLayout')
self.availableListWidget = QtGui.QListWidget(self.availableSongsPage) self.availableListWidget = QtGui.QListWidget(self.availableSongsPage)
self.availableListWidget.setObjectName(u'availableListWidget') self.availableListWidget.setObjectName(u'availableListWidget')
# self.gridLayout.addWidget(self.availableListWidget, 0, 0, 1, 1) self.verticalLayout.addWidget(self.availableListWidget)
# self.searchLineEdit = QtGui.QLineEdit(self.availableSongsPage) self.horizontalLayout = QtGui.QHBoxLayout()
# self.searchLineEdit.setObjectName(u'searchLineEdit') self.horizontalLayout.setObjectName(u'horizontalLayout')
# self.gridLayout.addWidget(self.searchLineEdit, 1, 0, 1, 1) self.searchLabel = QtGui.QLabel(self.availableSongsPage)
# self.availableSongsLayout.addLayout(self.gridLayout) self.searchLabel.setObjectName(u'searchLabel')
self.availableSongsLayout.addWidget(self.availableListWidget) self.horizontalLayout.addWidget(self.searchLabel)
self.searchLineEdit = QtGui.QLineEdit(self.availableSongsPage)
self.searchLineEdit.setObjectName(u'searchLineEdit')
self.horizontalLayout.addWidget(self.searchLineEdit)
spacerItem = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.uncheckButton = QtGui.QPushButton(self.availableSongsPage)
self.uncheckButton.setObjectName(u'uncheckButton')
self.horizontalLayout.addWidget(self.uncheckButton)
self.checkButton = QtGui.QPushButton(self.availableSongsPage)
self.checkButton.setObjectName(u'selectButton')
self.horizontalLayout.addWidget(self.checkButton)
self.verticalLayout.addLayout(self.horizontalLayout)
self.availableSongsLayout.addLayout(self.verticalLayout)
self.addPage(self.availableSongsPage) self.addPage(self.availableSongsPage)
# The page with the selected songs. # The page with the selected songs.
self.exportSongPage = QtGui.QWizardPage() self.exportSongPage = QtGui.QWizardPage()
@ -145,18 +165,24 @@ class SongExportForm(OpenLPWizard):
self.setWindowTitle( self.setWindowTitle(
translate('SongsPlugin.ExportWizardForm', 'Song Export Wizard')) translate('SongsPlugin.ExportWizardForm', 'Song Export Wizard'))
self.titleLabel.setText( self.titleLabel.setText(
u'<span style="font-size:14pt; font-weight:600;">%s</span>' % \ u'<span style="font-size:14pt; font-weight:600;">%s</span>' %
translate('SongsPlugin.ExportWizardForm', translate('SongsPlugin.ExportWizardForm',
'Welcome to the Song Export Wizard')) 'Welcome to the Song Export Wizard'))
self.informationLabel.setText( self.informationLabel.setText(
translate('SongsPlugin.ExportWizardForm', 'This wizard will help to ' translate('SongsPlugin.ExportWizardForm', 'This wizard will help to'
'export your songs to the open and free OpenLyrics worship song ' ' export your songs to the open and free OpenLyrics worship song '
'format.')) 'format.'))
self.availableSongsPage.setTitle( self.availableSongsPage.setTitle(
translate('SongsPlugin.ExportWizardForm', 'Select Songs')) translate('SongsPlugin.ExportWizardForm', 'Select Songs'))
self.availableSongsPage.setSubTitle( self.availableSongsPage.setSubTitle(
translate('SongsPlugin.ExportWizardForm', translate('SongsPlugin.ExportWizardForm',
'Check the songs, you want to export.')) 'Check the songs, you want to export.'))
self.searchLabel.setText(
translate('SongsPlugin.ExportWizardForm', 'Search:'))
self.uncheckButton.setText(
translate('SongsPlugin.ExportWizardForm', 'Deselect All'))
self.checkButton.setText(
translate('SongsPlugin.ExportWizardForm', 'Select All'))
self.exportSongPage.setTitle( self.exportSongPage.setTitle(
translate('SongsPlugin.ExportWizardForm', 'Select Directory')) translate('SongsPlugin.ExportWizardForm', 'Select Directory'))
self.exportSongPage.setSubTitle( self.exportSongPage.setSubTitle(
@ -181,9 +207,10 @@ class SongExportForm(OpenLPWizard):
if self.currentPage() == self.welcomePage: if self.currentPage() == self.welcomePage:
return True return True
elif self.currentPage() == self.availableSongsPage: elif self.currentPage() == self.availableSongsPage:
items = [item for item in self.availableListWidget.findItems( items = [
QtCore.QString(u''), QtCore.Qt.MatchContains) item for item in self._findListWidgetItems(
if item.checkState() == QtCore.Qt.Checked] self.availableListWidget) if item.checkState()
]
if not items: if not items:
critical_error_message_box( critical_error_message_box(
translate('SongsPlugin.ExportWizardForm', translate('SongsPlugin.ExportWizardForm',
@ -241,7 +268,7 @@ class SongExportForm(OpenLPWizard):
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(song)) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(song))
item.setFlags(QtCore.Qt.ItemIsSelectable| item.setFlags(QtCore.Qt.ItemIsSelectable|
QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
item.setCheckState(QtCore.Qt.Checked) item.setCheckState(QtCore.Qt.Unchecked)
self.availableListWidget.addItem(item) self.availableListWidget.addItem(item)
Receiver.send_message(u'cursor_normal') Receiver.send_message(u'cursor_normal')
@ -259,9 +286,10 @@ class SongExportForm(OpenLPWizard):
Perform the actual export. This creates an *openlyricsexport* instance Perform the actual export. This creates an *openlyricsexport* instance
and calls the *do_export* method. and calls the *do_export* method.
""" """
songs = [song.data(QtCore.Qt.UserRole).toPyObject() songs = [
for song in self.selectedListWidget.findItems( song.data(QtCore.Qt.UserRole).toPyObject()
QtCore.QString(u''), QtCore.Qt.MatchContains)] for song in self._findListWidgetItems(self.selectedListWidget)
]
exporter = OpenLyricsExport( exporter = OpenLyricsExport(
self, songs, unicode(self.directoryLineEdit.text())) self, songs, unicode(self.directoryLineEdit.text()))
if exporter.do_export(): if exporter.do_export():
@ -272,8 +300,65 @@ class SongExportForm(OpenLPWizard):
translate('SongsPlugin.SongExportForm', translate('SongsPlugin.SongExportForm',
'Your song export failed.')) 'Your song export failed.'))
# def onSearchLineEditChanged(self, text): def _findListWidgetItems(self, listWidget, text=u''):
# pass """
Returns a list of *QListWidgetItem*s of the ``listWidget``. Note, that
hidden items are included.
``listWidget``
The widget to get all items from. (QListWidget)
``text``
The text to search for. (unicode string)
"""
return [item for item in listWidget.findItems(
QtCore.QString(unicode(text)), QtCore.Qt.MatchContains)
]
def onItemPressed(self, item):
"""
Called, when an item in the *availableListWidget* has been pressed. Thes
item is check if it was not checked, whereas it is unchecked when it was
checked.
``item``
The *QListWidgetItem* which was pressed.
"""
return
item.setCheckState(
QtCore.Qt.Unchecked if item.checkState() else QtCore.Qt.Checked)
def onSearchLineEditChanged(self, text):
"""
The *searchLineEdit*'s text has been changed. Update the list of
available songs. Note that any song, which does not match the ``text``
will be hidden, but not unchecked!
``text``
The text of the *searchLineEdit*. (QString)
"""
search_result = [
song for song in self._findListWidgetItems(
self.availableListWidget, unicode(text))
]
for item in self._findListWidgetItems(self.availableListWidget):
item.setHidden(False if item in search_result else True)
def onUncheckButtonClicked(self):
"""
The *uncheckButton* has been clicked. Set all songs unchecked.
"""
for row in range(self.availableListWidget.count()):
item = self.availableListWidget.item(row)
item.setCheckState(QtCore.Qt.Unchecked)
def onCheckButtonClicked(self):
"""
The *checkButton* has been clicked. Set all songs checked.
"""
for row in range(self.availableListWidget.count()):
item = self.availableListWidget.item(row)
item.setCheckState(QtCore.Qt.Checked)
def onDirectoryButtonClicked(self): def onDirectoryButtonClicked(self):
""" """