This commit is contained in:
Andreas Preikschat 2010-12-31 08:10:13 +01:00
commit 77e7bc8daf
17 changed files with 334 additions and 79 deletions

View File

@ -3,6 +3,7 @@ recursive-include openlp *.sqlite
recursive-include openlp *.csv
recursive-include openlp *.html
recursive-include openlp *.js
recursive-include openlp *.css
recursive-include openlp *.qm
recursive-include documentation *
recursive-include resources/forms *

View File

@ -381,7 +381,7 @@ class MediaManagerItem(QtGui.QWidget):
if os.path.exists(thumb):
filedate = os.stat(file).st_mtime
thumbdate = os.stat(thumb).st_mtime
#if file updated rebuild icon
# if file updated rebuild icon
if filedate > thumbdate:
self.iconFromFile(file, thumb)
else:
@ -544,4 +544,4 @@ class MediaManagerItem(QtGui.QWidget):
Method to add processing when a service has been loaded and
individual service items need to be processed by the plugins
"""
pass
pass

View File

@ -0,0 +1,191 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2011 Raoul Snyman #
# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian #
# Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard, Frode Woldsund #
# --------------------------------------------------------------------------- #
# 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.lib import build_icon
log = logging.getLogger(__name__)
class SearchEdit(QtGui.QLineEdit):
"""
This is a specialised QLineEdit with a "clear" button inside for searches.
"""
def __init__(self, parent):
"""
Constructor.
"""
QtGui.QLineEdit.__init__(self, parent)
self._currentSearchType = -1
self.clearButton = QtGui.QToolButton(self)
self.clearButton.setIcon(build_icon(u':/system/clear_shortcut.png'))
self.clearButton.setCursor(QtCore.Qt.ArrowCursor)
self.clearButton.setStyleSheet(
u'QToolButton { border: none; padding: 0px; }')
self.clearButton.resize(18, 18)
self.clearButton.hide()
QtCore.QObject.connect(
self.clearButton,
QtCore.SIGNAL(u'clicked()'),
self._onClearButtonClicked
)
QtCore.QObject.connect(
self,
QtCore.SIGNAL(u'textChanged(const QString&)'),
self._onSearchEditTextChanged
)
self._updateStyleSheet()
def _updateStyleSheet(self):
"""
Internal method to update the stylesheet depending on which widgets are
available and visible.
"""
frameWidth = self.style().pixelMetric(
QtGui.QStyle.PM_DefaultFrameWidth)
rightPadding = self.clearButton.sizeHint().width() + frameWidth
if hasattr(self, u'menuButton'):
leftPadding = self.menuButton.width()
self.setStyleSheet(
u'QLineEdit { padding-left: %spx; padding-right: %spx; } ' % \
(leftPadding, rightPadding))
else:
self.setStyleSheet(u'QLineEdit { padding-right: %spx; } ' % \
rightPadding)
msz = self.minimumSizeHint();
self.setMinimumSize(
max(msz.width(),
self.clearButton.sizeHint().width() + (frameWidth * 2) + 2),
max(msz.height(),
self.clearButton.height() + (frameWidth * 2) + 2)
)
def resizeEvent(self, event):
"""
Reimplemented method to react to resizing of the widget.
``event``
The event that happened.
"""
sz = self.clearButton.sizeHint()
frameWidth = self.style().pixelMetric(
QtGui.QStyle.PM_DefaultFrameWidth)
self.clearButton.move(self.rect().right() - frameWidth - sz.width(),
(self.rect().bottom() + 1 - sz.height()) / 2)
if hasattr(self, u'menuButton'):
sz = self.menuButton.sizeHint()
self.menuButton.move(self.rect().left() + frameWidth + 2,
(self.rect().bottom() + 1 - sz.height()) / 2)
def currentSearchType(self):
"""
Readonly property to return the current search type.
"""
return self._currentSearchType
def setSearchTypes(self, items):
"""
A list of tuples to be used in the search type menu. The first item in
the list will be preselected as the default.
``items``
The list of tuples to use. The tuples should contain an integer
identifier, an icon (QIcon instance or string) and a title for the
item in the menu. In short, they should look like this::
(<identifier>, <icon>, <title>)
For instance::
(1, <QIcon instance>, "Titles")
Or::
(2, ":/songs/authors.png", "Authors")
"""
menu = QtGui.QMenu(self)
first = None
for identifier, icon, title in items:
action = QtGui.QAction(build_icon(icon), title, menu)
action.setData(QtCore.QVariant(identifier))
menu.addAction(action)
QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'),
self._onMenuActionTriggered)
if first is None:
first = action
self._currentSearchType = identifier
if not hasattr(self, u'menuButton'):
self.menuButton = QtGui.QToolButton(self)
self.menuButton.setIcon(build_icon(u':/system/clear_shortcut.png'))
self.menuButton.setCursor(QtCore.Qt.ArrowCursor)
self.menuButton.setPopupMode(QtGui.QToolButton.InstantPopup)
self.menuButton.setStyleSheet(
u'QToolButton { border: none; padding: 0px 10px 0px 0px; }')
self.menuButton.resize(QtCore.QSize(28, 18))
self.menuButton.setMenu(menu)
self.menuButton.setDefaultAction(first)
self.menuButton.show()
self._updateStyleSheet()
def _onSearchEditTextChanged(self, text):
"""
Internally implemented slot to react to when the text in the line edit
has changed so that we can show or hide the clear button.
``text``
A :class:`~PyQt4.QtCore.QString` instance which represents the text
in the line edit.
"""
self.clearButton.setVisible(not text.isEmpty())
def _onClearButtonClicked(self):
"""
Internally implemented slot to react to the clear button being pressed
to clear the line edit. Once it has cleared the line edit, it emits the
``cleared()`` signal so that an application can react to the clearing
of the line edit.
"""
self.clear()
self.emit(QtCore.SIGNAL(u'cleared()'))
def _onMenuActionTriggered(self):
"""
Internally implemented slot to react to the select of one of the search
types in the menu. Once it has set the correct action on the button,
and set the current search type (using the list of identifiers provided
by the developer), the ``searchTypeChanged(int)`` signal is emitted
with the identifier.
"""
sender = self.sender()
for action in self.menuButton.menu().actions():
action.setChecked(False)
self.menuButton.setDefaultAction(sender)
self._currentSearchType = sender.data().toInt()[0]
self.emit(QtCore.SIGNAL(u'searchTypeChanged(int)'),
self._currentSearchType)

View File

@ -58,7 +58,7 @@ class ItemCapabilities(object):
NoLineBreaks = 7
OnLoadUpdate = 8
AddIfNewItem = 9
ProvidesOwnDisplay = 10
class ServiceItem(object):
"""
@ -397,4 +397,4 @@ class ServiceItem(object):
"""
Returns the path of the raw frame
"""
return self._raw_frames[row][u'path']
return self._raw_frames[row][u'path']

View File

@ -825,8 +825,18 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
else:
event.ignore()
else:
self.cleanUp()
event.accept()
ret = QtGui.QMessageBox.question(self,
translate('OpenLP.MainWindow', 'Close OpenLP'),
translate('OpenLP.MainWindow', 'Are you sure you want to Exit?'),
QtGui.QMessageBox.StandardButtons(
QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No),
QtGui.QMessageBox.Yes)
if ret == QtGui.QMessageBox.Yes:
self.cleanUp()
event.accept()
else:
event.ignore()
def cleanUp(self):
"""

View File

@ -393,6 +393,7 @@ class SlideController(QtGui.QWidget):
"""
# We need to make this circuit, because we have to consider the other
# slidecontroller as well.
log.debug(u'paintEvent live = %s' % self.isLive)
self.parent.previewController.previewSizeChanged()
self.parent.liveController.previewSizeChanged()
@ -561,6 +562,8 @@ class SlideController(QtGui.QWidget):
if self.serviceItem.is_media():
self.onMediaClose()
if self.isLive:
if serviceItem.is_capable(ItemCapabilities.ProvidesOwnDisplay):
self._forceUnblank()
blanked = self.BlankScreen.isChecked()
else:
blanked = False
@ -568,8 +571,6 @@ class SlideController(QtGui.QWidget):
[serviceItem, self.isLive, blanked, slideno])
self.slideList = {}
width = self.parent.ControlSplitter.sizes()[self.split]
# Set pointing cursor when we have something to point at
self.PreviewListWidget.setCursor(QtCore.Qt.PointingHandCursor)
self.serviceItem = serviceItem
self.PreviewListWidget.clear()
self.PreviewListWidget.setRowCount(0)
@ -698,7 +699,7 @@ class SlideController(QtGui.QWidget):
"""
log.debug(u'mainDisplaySetBackground live = %s' % self.isLive)
if not self.display.primary:
self.onHideDisplay(True)
self.onBlankDisplay(True)
def onSlideBlank(self):
"""
@ -1041,3 +1042,22 @@ class SlideController(QtGui.QWidget):
self.video.hide()
self.SlidePreview.clear()
self.SlidePreview.show()
def _forceUnblank(self):
"""
Used by command items which provide their own displays to reset the
screen hide attributes
"""
if self.BlankScreen.isChecked:
self.BlankScreen.setChecked(False)
self.HideMenu.setDefaultAction(self.BlankScreen)
QtCore.QSettings().setValue(
self.parent.generalSettingsSection + u'/screen blank',
QtCore.QVariant(False))
if self.ThemeScreen.isChecked:
self.ThemeScreen.setChecked(False)
self.HideMenu.setDefaultAction(self.ThemeScreen)
if self.DesktopScreen.isChecked:
self.DesktopScreen.setChecked(False)
self.HideMenu.setDefaultAction(self.DesktopScreen)

View File

@ -132,7 +132,7 @@ class ImageMediaItem(MediaManagerItem):
os.remove(os.path.join(self.servicePath,
unicode(text.text())))
except OSError:
#if not present do not worry
# if not present do not worry
pass
self.listView.takeItem(row)
SettingsManager.set_list(self.settingsSection,
@ -172,9 +172,18 @@ class ImageMediaItem(MediaManagerItem):
for item in items:
bitem = self.listView.item(item.row())
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
(path, name) = os.path.split(filename)
service_item.add_from_image(filename, name)
return True
if os.path.exists(filename):
(path, name) = os.path.split(filename)
service_item.add_from_image(filename, name)
return True
else:
# File is no longer present
QtGui.QMessageBox.critical(
self, translate('ImagePlugin.MediaItem',
'Missing Image'),
unicode(translate('ImagePlugin.MediaItem',
'The Image %s no longer exists.')) % filename)
return False
else:
return False
@ -195,4 +204,4 @@ class ImageMediaItem(MediaManagerItem):
self.resetButton.setVisible(True)
def onPreviewClick(self):
MediaManagerItem.onPreviewClick(self)
MediaManagerItem.onPreviewClick(self)

View File

@ -89,7 +89,7 @@ class MediaMediaItem(MediaManagerItem):
self.ImageWidget.sizePolicy().hasHeightForWidth())
self.ImageWidget.setSizePolicy(sizePolicy)
self.ImageWidget.setObjectName(u'ImageWidget')
#Replace backgrounds do not work at present so remove functionality.
# Replace backgrounds do not work at present so remove functionality.
self.blankButton = self.toolbar.addToolbarButton(
translate('MediaPlugin.MediaItem', 'Replace Background'),
u':/slides/slide_blank.png',
@ -122,15 +122,24 @@ class MediaMediaItem(MediaManagerItem):
if item is None:
return False
filename = unicode(item.data(QtCore.Qt.UserRole).toString())
service_item.title = unicode(
translate('MediaPlugin.MediaItem', 'Media'))
service_item.add_capability(ItemCapabilities.RequiresMedia)
# force a nonexistent theme
service_item.theme = -1
frame = u':/media/image_clapperboard.png'
(path, name) = os.path.split(filename)
service_item.add_from_command(path, name, frame)
return True
if os.path.exists(filename):
service_item.title = unicode(
translate('MediaPlugin.MediaItem', 'Media'))
service_item.add_capability(ItemCapabilities.RequiresMedia)
# force a nonexistent theme
service_item.theme = -1
frame = u':/media/image_clapperboard.png'
(path, name) = os.path.split(filename)
service_item.add_from_command(path, name, frame)
return True
else:
# File is no longer present
QtGui.QMessageBox.critical(
self, translate('MediaPlugin.MediaItem',
'Missing Media File'),
unicode(translate('MediaPlugin.MediaItem',
'The file %s no longer exists.')) % filename)
return False
def initialise(self):
self.listView.setSelectionMode(
@ -159,4 +168,4 @@ class MediaMediaItem(MediaManagerItem):
img = QtGui.QPixmap(u':/media/media_video.png').toImage()
item_name.setIcon(build_icon(img))
item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
self.listView.addItem(item_name)
self.listView.addItem(item_name)

View File

@ -255,8 +255,9 @@ class ImpressDocument(PresentationDocument):
self.document = desktop.loadComponentFromURL(url, u'_blank',
0, properties)
except:
log.exception(u'Failed to load presentation')
log.exception(u'Failed to load presentation %s' % url)
return False
self.presentation = self.document.getPresentation()
self.presentation.Display = \
self.controller.plugin.renderManager.screens.current_display + 1
@ -478,4 +479,4 @@ class ImpressDocument(PresentationDocument):
shape = notes.getByIndex(idx)
if shape.supportsService("com.sun.star.drawing.Text"):
text += shape.getString() + '\n'
return text
return text

View File

@ -30,7 +30,7 @@ import os
from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
SettingsManager, translate, check_item_selected, Receiver
SettingsManager, translate, check_item_selected, Receiver, ItemCapabilities
from openlp.plugins.presentations.lib import MessageListener
log = logging.getLogger(__name__)
@ -153,7 +153,7 @@ class PresentationMediaItem(MediaManagerItem):
"""
self.DisplayTypeComboBox.clear()
for item in self.controllers:
#load the drop down selection
# load the drop down selection
if self.controllers[item].enabled():
self.DisplayTypeComboBox.addItem(item)
if self.DisplayTypeComboBox.count() > 1:
@ -249,28 +249,39 @@ class PresentationMediaItem(MediaManagerItem):
return False
service_item.title = unicode(self.DisplayTypeComboBox.currentText())
service_item.shortname = unicode(self.DisplayTypeComboBox.currentText())
service_item.add_capability(ItemCapabilities.ProvidesOwnDisplay)
shortname = service_item.shortname
if shortname:
for item in items:
bitem = self.listView.item(item.row())
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
if shortname == self.Automatic:
service_item.shortname = self.findControllerByType(filename)
if not service_item.shortname:
return False
controller = self.controllers[service_item.shortname]
(path, name) = os.path.split(filename)
doc = controller.add_doc(filename)
if doc.get_thumbnail_path(1, True) is None:
doc.load_presentation()
i = 1
img = doc.get_thumbnail_path(i, True)
while img:
service_item.add_from_command(path, name, img)
i = i + 1
if os.path.exists(filename):
if shortname == self.Automatic:
service_item.shortname = \
self.findControllerByType(filename)
if not service_item.shortname:
return False
controller = self.controllers[service_item.shortname]
(path, name) = os.path.split(filename)
doc = controller.add_doc(filename)
if doc.get_thumbnail_path(1, True) is None:
doc.load_presentation()
i = 1
img = doc.get_thumbnail_path(i, True)
doc.close_presentation()
return True
while img:
service_item.add_from_command(path, name, img)
i = i + 1
img = doc.get_thumbnail_path(i, True)
doc.close_presentation()
return True
else:
# File is no longer present
QtGui.QMessageBox.critical(
self, translate('PresentationPlugin.MediaItem',
'Missing Presentation'),
unicode(translate('PresentationPlugin.MediaItem',
'The Presentation %s no longer exists.')) % filename)
return False
else:
return False
@ -280,7 +291,7 @@ class PresentationMediaItem(MediaManagerItem):
file type. This is used if "Automatic" is set as the preferred
controller. Find the first (alphabetic) enabled controller which
"supports" the extension. If none found, then look for a controller
which "alsosupports" it instead.
which "also supports" it instead.
"""
filetype = filename.split(u'.')[1]
if not filetype:
@ -293,4 +304,4 @@ class PresentationMediaItem(MediaManagerItem):
if self.controllers[controller].enabled():
if filetype in self.controllers[controller].alsosupports:
return controller
return None
return None

View File

@ -29,6 +29,7 @@ import locale
import re
from PyQt4 import QtCore, QtGui
from sqlalchemy.sql import or_
from openlp.core.lib import MediaManagerItem, BaseListWithDnD, Receiver, \
ItemCapabilities, translate, check_item_selected
@ -36,6 +37,7 @@ from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \
SongImportForm
from openlp.plugins.songs.lib import SongXMLParser, OpenLyricsParser
from openlp.plugins.songs.lib.db import Author, Song
from openlp.core.lib.searchedit import SearchEdit
log = logging.getLogger(__name__)
@ -88,20 +90,10 @@ class SongMediaItem(MediaManagerItem):
self.SearchTextLabel.setObjectName(u'SearchTextLabel')
self.SearchLayout.setWidget(
0, QtGui.QFormLayout.LabelRole, self.SearchTextLabel)
self.SearchTextEdit = QtGui.QLineEdit(self)
self.SearchTextEdit = SearchEdit(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.SearchButtonLayout = QtGui.QHBoxLayout()
self.SearchButtonLayout.setMargin(0)
@ -113,9 +105,6 @@ class SongMediaItem(MediaManagerItem):
self.SearchTextButton = QtGui.QPushButton(self)
self.SearchTextButton.setObjectName(u'SearchTextButton')
self.SearchButtonLayout.addWidget(self.SearchTextButton)
self.ClearTextButton = QtGui.QPushButton(self)
self.ClearTextButton.setObjectName(u'ClearTextButton')
self.SearchButtonLayout.addWidget(self.ClearTextButton)
self.pageLayout.addLayout(self.SearchButtonLayout)
# Signals and slots
QtCore.QObject.connect(Receiver.get_receiver(),
@ -124,8 +113,6 @@ class SongMediaItem(MediaManagerItem):
QtCore.SIGNAL(u'returnPressed()'), self.onSearchTextButtonClick)
QtCore.QObject.connect(self.SearchTextButton,
QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick)
QtCore.QObject.connect(self.ClearTextButton,
QtCore.SIGNAL(u'pressed()'), self.onClearTextButtonClick)
QtCore.QObject.connect(self.SearchTextEdit,
QtCore.SIGNAL(u'textChanged(const QString&)'),
self.onSearchTextEditChanged)
@ -139,6 +126,11 @@ class SongMediaItem(MediaManagerItem):
QtCore.SIGNAL(u'songs_edit'), self.onRemoteEdit)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'songs_edit_clear'), self.onRemoteEditClear)
QtCore.QObject.connect(self.SearchTextEdit,
QtCore.SIGNAL(u'cleared()'), self.onClearTextButtonClick)
QtCore.QObject.connect(self.SearchTextEdit,
QtCore.SIGNAL(u'searchTypeChanged(int)'),
self.onSearchTextButtonClick)
def configUpdated(self):
self.searchAsYouType = QtCore.QSettings().value(
@ -154,39 +146,44 @@ class SongMediaItem(MediaManagerItem):
def retranslateUi(self):
self.SearchTextLabel.setText(
translate('SongsPlugin.MediaItem', 'Search:'))
self.SearchTypeLabel.setText(
translate('SongsPlugin.MediaItem', 'Type:'))
self.ClearTextButton.setText(
translate('SongsPlugin.MediaItem', 'Clear'))
self.SearchTextButton.setText(
translate('SongsPlugin.MediaItem', 'Search'))
def initialise(self):
self.SearchTypeComboBox.addItem(
translate('SongsPlugin.MediaItem', 'Titles'))
self.SearchTypeComboBox.addItem(
translate('SongsPlugin.MediaItem', 'Lyrics'))
self.SearchTypeComboBox.addItem(
translate('SongsPlugin.MediaItem', 'Authors'))
self.SearchTextEdit.setSearchTypes([
(1, u':/songs/song_search_all.png', translate('SongsPlugin.MediaItem', 'Entire Song')),
(2, u':/songs/song_search_title.png', translate('SongsPlugin.MediaItem', 'Titles')),
(3, u':/songs/song_search_lyrics.png', translate('SongsPlugin.MediaItem', 'Lyrics')),
(4, u':/songs/song_search_author.png', translate('SongsPlugin.MediaItem', 'Authors'))
])
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()
search_type = self.SearchTextEdit.currentSearchType()
if search_type == 1:
log.debug(u'Entire Song Search')
search_results = self.parent.manager.get_all_objects(Song,
or_(Song.search_title.like(u'%' + self.whitespace.sub(u' ',
search_keywords.lower()) + u'%'),
Song.search_lyrics.like(u'%' + search_keywords.lower() + \
u'%')), Song.search_title.asc())
self.displayResultsSong(search_results)
if search_type == 2:
log.debug(u'Titles Search')
search_results = self.parent.manager.get_all_objects(Song,
Song.search_title.like(u'%' + self.whitespace.sub(u' ',
search_keywords.lower()) + u'%'), Song.search_title.asc())
self.displayResultsSong(search_results)
elif search_type == 1:
elif search_type == 3:
log.debug(u'Lyrics Search')
search_results = self.parent.manager.get_all_objects(Song,
Song.search_lyrics.like(u'%' + search_keywords.lower() + u'%'),
Song.search_lyrics.asc())
self.displayResultsSong(search_results)
elif search_type == 2:
elif search_type == 4:
log.debug(u'Authors Search')
search_results = self.parent.manager.get_all_objects(Author,
Author.display_name.like(u'%' + search_keywords + u'%'),
@ -255,7 +252,9 @@ class SongMediaItem(MediaManagerItem):
"""
if self.searchAsYouType:
search_length = 1
if self.SearchTypeComboBox.currentIndex() == 1:
if self.SearchTextEdit.currentSearchType() == 1:
search_length = 3
elif self.SearchTextEdit.currentSearchType() == 3:
search_length = 7
if len(text) > search_length:
self.onSearchTextButtonClick()
@ -457,4 +456,4 @@ class SongMediaItem(MediaManagerItem):
"""
Locale aware collation of song titles
"""
return locale.strcoll(unicode(song_1.title), unicode(song_2.title))
return locale.strcoll(unicode(song_1.title), unicode(song_2.title))

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

View File

@ -1,5 +1,9 @@
<RCC>
<qresource prefix="songs">
<file>song_search_all.png</file>
<file>song_search_author.png</file>
<file>song_search_lyrics.png</file>
<file>song_search_title.png</file>
<file>topic_edit.png</file>
<file>author_add.png</file>
<file>author_delete.png</file>

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B