forked from openlp/openlp
r2131 + conflicts
This commit is contained in:
commit
f1bdcec79d
@ -480,6 +480,9 @@ class AdvancedTab(SettingsTab):
|
||||
# Default to False on Gnome.
|
||||
x11_bypass_default = bool(not
|
||||
os.environ.get(u'GNOME_DESKTOP_SESSION_ID'))
|
||||
# Default to False on XFce
|
||||
if os.environ.get(u'DESKTOP_SESSION') == u'xfce':
|
||||
x11_bypass_default = False
|
||||
self.x11BypassCheckBox.setChecked(
|
||||
settings.value(u'x11 bypass wm', x11_bypass_default))
|
||||
self.defaultColor = settings.value(u'default color', u'#ffffff')
|
||||
|
@ -142,6 +142,9 @@ class MainDisplay(Display):
|
||||
# Default to False on Gnome.
|
||||
x11_bypass_default = bool(not
|
||||
os.environ.get(u'GNOME_DESKTOP_SESSION_ID'))
|
||||
# Default to False on XFce
|
||||
if os.environ.get(u'DESKTOP_SESSION') == u'xfce':
|
||||
x11_bypass_default = False
|
||||
if Settings().value(u'advanced/x11 bypass wm', x11_bypass_default):
|
||||
windowFlags |= QtCore.Qt.X11BypassWindowManagerHint
|
||||
# TODO: The following combination of windowFlags works correctly
|
||||
|
@ -74,9 +74,9 @@ class Ui_CustomEditDialog(object):
|
||||
self.buttonLayout.addWidget(self.deleteButton)
|
||||
self.buttonLayout.addStretch()
|
||||
self.upButton = create_button(customEditDialog, u'upButton', role=u'up',
|
||||
enable=False, click=customEditDialog.onUpButtonClicked)
|
||||
enabled=False, click=customEditDialog.onUpButtonClicked)
|
||||
self.downButton = create_button(customEditDialog, u'downButton',
|
||||
role=u'down', enable=False,
|
||||
role=u'down', enabled=False,
|
||||
click=customEditDialog.onDownButtonClicked)
|
||||
self.buttonLayout.addWidget(self.upButton)
|
||||
self.buttonLayout.addWidget(self.downButton)
|
||||
|
@ -34,11 +34,11 @@ import logging
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
from openlp.core.lib import build_icon, Receiver, SettingsManager, translate, \
|
||||
from openlp.core.lib import build_icon, Receiver, translate, \
|
||||
create_separated_list
|
||||
from openlp.core.lib.ui import UiStrings, critical_error_message_box
|
||||
from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
|
||||
from openlp.core.utils import locale_direct_compare
|
||||
from openlp.plugins.songs.lib import natcmp
|
||||
from openlp.plugins.songs.lib.db import Song
|
||||
from openlp.plugins.songs.lib.openlyricsexport import OpenLyricsExport
|
||||
|
||||
@ -252,8 +252,7 @@ class SongExportForm(OpenLPWizard):
|
||||
# Load the list of songs.
|
||||
Receiver.send_message(u'cursor_busy')
|
||||
songs = self.plugin.manager.get_all_objects(Song)
|
||||
songs.sort(
|
||||
cmp=locale_direct_compare, key=lambda song: song.sort_string)
|
||||
songs.sort(cmp=natcmp, key=lambda song: song.sort_key)
|
||||
for song in songs:
|
||||
# No need to export temporary songs.
|
||||
if song.temporary:
|
||||
|
@ -28,10 +28,10 @@
|
||||
###############################################################################
|
||||
import re
|
||||
|
||||
from PyQt4 import QtGui
|
||||
from PyQt4 import QtGui, QtCore
|
||||
|
||||
from openlp.core.lib import translate
|
||||
from openlp.core.utils import CONTROL_CHARS
|
||||
from openlp.core.utils import CONTROL_CHARS, locale_direct_compare
|
||||
from db import Author
|
||||
from ui import SongStrings
|
||||
|
||||
@ -594,6 +594,40 @@ def strip_rtf(text, default_encoding=None):
|
||||
text = u''.join(out)
|
||||
return text, default_encoding
|
||||
|
||||
def natcmp(a, b):
|
||||
"""
|
||||
Natural string comparison which mimics the behaviour of Python's internal
|
||||
cmp function.
|
||||
"""
|
||||
if len(a) <= len(b):
|
||||
for i, key in enumerate(a):
|
||||
if isinstance(key, int) and isinstance(b[i], int):
|
||||
result = cmp(key, b[i])
|
||||
elif isinstance(key, int) and not isinstance(b[i], int):
|
||||
result = locale_direct_compare(QtCore.QString(str(key)), b[i])
|
||||
elif not isinstance(key, int) and isinstance(b[i], int):
|
||||
result = locale_direct_compare(key, QtCore.QString(str(b[i])))
|
||||
else:
|
||||
result = locale_direct_compare(key, b[i])
|
||||
if result != 0:
|
||||
return result
|
||||
if len(a) == len(b):
|
||||
return 0
|
||||
else:
|
||||
return -1
|
||||
else:
|
||||
for i, key in enumerate(b):
|
||||
if isinstance(a[i], int) and isinstance(key, int):
|
||||
result = cmp(a[i], key)
|
||||
elif isinstance(a[i], int) and not isinstance(key, int):
|
||||
result = locale_direct_compare(QtCore.QString(str(a[i])), key)
|
||||
elif not isinstance(a[i], int) and isinstance(key, int):
|
||||
result = locale_direct_compare(a[i], QtCore.QString(str(key)))
|
||||
else:
|
||||
result = locale_direct_compare(a[i], key)
|
||||
if result != 0:
|
||||
return result
|
||||
return 1
|
||||
|
||||
from xml import OpenLyrics, SongXML
|
||||
from songstab import SongsTab
|
||||
|
@ -39,54 +39,17 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \
|
||||
translate, check_item_selected, PluginStatus, create_separated_list, \
|
||||
check_directory_exists, ServiceItemContext, Settings
|
||||
from openlp.core.lib.ui import UiStrings, create_widget_action
|
||||
from openlp.core.utils import AppLocation, locale_direct_compare
|
||||
from openlp.core.utils import AppLocation
|
||||
from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \
|
||||
SongImportForm, SongExportForm
|
||||
from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType, \
|
||||
clean_string
|
||||
clean_string, natcmp
|
||||
from openlp.plugins.songs.lib.db import Author, Song, Book, MediaFile
|
||||
from openlp.plugins.songs.lib.ui import SongStrings
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def natcmp(a, b):
|
||||
"""
|
||||
Natural string comparison which mimics the behaviour of Python's internal
|
||||
cmp function.
|
||||
"""
|
||||
log.debug('a: %s; b: %s', a, b)
|
||||
if len(a) <= len(b):
|
||||
for i, key in enumerate(a):
|
||||
if isinstance(key, int) and isinstance(b[i], int):
|
||||
result = cmp(key, b[i])
|
||||
elif isinstance(key, int) and not isinstance(b[i], int):
|
||||
result = locale_direct_compare(str(key), b[i])
|
||||
elif not isinstance(key, int) and isinstance(b[i], int):
|
||||
result = locale_direct_compare(key, str(b[i]))
|
||||
else:
|
||||
result = locale_direct_compare(key, b[i])
|
||||
if result != 0:
|
||||
return result
|
||||
if len(a) == len(b):
|
||||
return 0
|
||||
else:
|
||||
return -1
|
||||
else:
|
||||
for i, key in enumerate(b):
|
||||
if isinstance(a[i], int) and isinstance(key, int):
|
||||
result = cmp(a[i], key)
|
||||
elif isinstance(a[i], int) and not isinstance(key, int):
|
||||
result = locale_direct_compare(str(a[i]), key)
|
||||
elif not isinstance(a[i], int) and isinstance(key, int):
|
||||
result = locale_direct_compare(a[i], str(key))
|
||||
else:
|
||||
result = locale_direct_compare(a[i], key)
|
||||
if result != 0:
|
||||
return result
|
||||
return 1
|
||||
|
||||
|
||||
class SongSearch(object):
|
||||
"""
|
||||
An enumeration for song search methods.
|
||||
|
Loading…
Reference in New Issue
Block a user