diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index d5556d16e..9da185ddf 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -43,14 +43,13 @@ from traceback import format_exception from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, Settings, check_directory_exists -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import Receiver, Settings, check_directory_exists, ScreenList, UiStrings from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow from openlp.core.ui.firsttimelanguageform import FirstTimeLanguageForm from openlp.core.ui.firsttimeform import FirstTimeForm from openlp.core.ui.exceptionform import ExceptionForm -from openlp.core.ui import SplashScreen, ScreenList +from openlp.core.ui import SplashScreen from openlp.core.utils import AppLocation, LanguageManager, VersionThread, \ get_application_version @@ -118,7 +117,7 @@ class OpenLP(QtGui.QApplication): # Decide how many screens we have and their size screens = ScreenList.create(self.desktop()) # First time checks in settings - has_run_wizard = Settings().value(u'general/has run wizard', False) + has_run_wizard = Settings().value(u'general/has run wizard') if not has_run_wizard: if FirstTimeForm(screens).exec_() == QtGui.QDialog.Accepted: Settings().setValue(u'general/has run wizard', True) @@ -129,7 +128,7 @@ class OpenLP(QtGui.QApplication): u'QTableWidget, QListWidget, QTreeWidget {alternate-background-color: ' + base_color.name() + ';}\n' application_stylesheet += nt_repair_stylesheet self.setStyleSheet(application_stylesheet) - show_splash = Settings().value(u'general/show splash', True) + show_splash = Settings().value(u'general/show splash') if show_splash: self.splash = SplashScreen() self.splash.show() @@ -148,7 +147,7 @@ class OpenLP(QtGui.QApplication): self.processEvents() if not has_run_wizard: self.mainWindow.firstTime() - update_check = Settings().value(u'general/update check', True) + update_check = Settings().value(u'general/update check') if update_check: VersionThread(self.mainWindow).start() Receiver.send_message(u'live_display_blank_check') @@ -276,7 +275,7 @@ def main(args=None): portable_settings_file = os.path.abspath(os.path.join(app_path, u'..', u'..', u'Data', u'OpenLP.ini')) # Make this our settings file log.info(u'INI file: %s', portable_settings_file) - Settings.setFilename(portable_settings_file) + Settings.set_filename(portable_settings_file) portable_settings = Settings() # Set our data path data_path = os.path.abspath(os.path.join(app_path, @@ -295,7 +294,7 @@ def main(args=None): if app.isAlreadyRunning(): sys.exit() # First time checks in settings - if not Settings().value(u'general/has run wizard', False): + if not Settings().value(u'general/has run wizard'): if not FirstTimeLanguageForm().exec_(): # if cancel then stop processing sys.exit() diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index dfafcd641..c06d5f95a 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -90,83 +90,6 @@ class ServiceItemAction(object): Next = 3 -class Settings(QtCore.QSettings): - """ - Class to wrap QSettings. - - * Exposes all the methods of QSettings. - * Adds functionality for OpenLP Portable. If the ``defaultFormat`` is set to - ``IniFormat``, and the path to the Ini file is set using ``setFilename``, - then the Settings constructor (without any arguments) will create a Settings - object for accessing settings stored in that Ini file. - """ - __filePath__ = u'' - - @staticmethod - def setFilename(iniFile): - """ - Sets the complete path to an Ini file to be used by Settings objects. - - Does not affect existing Settings objects. - """ - Settings.__filePath__ = iniFile - - def __init__(self, *args): - if not args and Settings.__filePath__ and \ - Settings.defaultFormat() == Settings.IniFormat: - QtCore.QSettings.__init__(self, Settings.__filePath__, Settings.IniFormat) - else: - QtCore.QSettings.__init__(self, *args) - - def value(self, key, defaultValue): - """ - Returns the value for the given ``key``. The returned ``value`` is - of the same type as the ``defaultValue``. - - ``key`` - The key to return the value from. - - ``defaultValue`` - The value to be returned if the given ``key`` is not present in the - config. Note, the ``defaultValue``'s type defines the type the - returned is converted to. In other words, if the ``defaultValue`` is - a boolean, then the returned value will be converted to a boolean. - - **Note**, this method only converts a few types and might need to be - extended if a certain type is missing! - """ - # Check for none as u'' is passed as default and is valid! This is - # needed because the settings export does not know the default values, - # thus just passes None. - if defaultValue is None and not super(Settings, self).contains(key): - return None - setting = super(Settings, self).value(key, defaultValue) - # On OS X (and probably on other platforms too) empty value from QSettings - # is represented as type PyQt4.QtCore.QPyNullVariant. This type has to be - # converted to proper 'None' Python type. - if isinstance(setting, QtCore.QPyNullVariant) and setting.isNull(): - setting = None - # Handle 'None' type (empty value) properly. - if setting is None: - # An empty string saved to the settings results in a None type being - # returned. Convert it to empty unicode string. - if isinstance(defaultValue, unicode): - return u'' - # An empty list saved to the settings results in a None type being - # returned. - else: - return [] - # Convert the setting to the correct type. - if isinstance(defaultValue, bool): - if isinstance(setting, bool): - return setting - # Sometimes setting is string instead of a boolean. - return setting == u'true' - if isinstance(defaultValue, int): - return int(setting) - return setting - - def translate(context, text, comment=None, encoding=QtCore.QCoreApplication.CodecForTr, n=-1, translate=QtCore.QCoreApplication.translate): @@ -459,7 +382,10 @@ def create_separated_list(stringlist): u'Locale list separator: start') % (stringlist[0], merged) +from uistrings import UiStrings from eventreceiver import Receiver +from screen import ScreenList +from settings import Settings from listwidgetwithdnd import ListWidgetWithDnD from formattingtags import FormattingTags from spelltextedit import SpellTextEdit diff --git a/openlp/core/lib/db.py b/openlp/core/lib/db.py index ce920d598..1e696a107 100644 --- a/openlp/core/lib/db.py +++ b/openlp/core/lib/db.py @@ -118,8 +118,7 @@ def upgrade_db(url, upgrade): session.commit() version += 1 else: - version_meta = Metadata.populate(key=u'version', - value=int(upgrade.__version__)) + version_meta = Metadata.populate(key=u'version', value=int(upgrade.__version__)) session.commit() return int(version_meta.value), upgrade.__version__ @@ -185,7 +184,7 @@ class Manager(object): self.db_url = u'' self.is_dirty = False self.session = None - db_type = settings.value(u'db type', u'sqlite') + db_type = settings.value(u'db type') if db_type == u'sqlite': if db_file_name: self.db_url = u'sqlite:///%s/%s' % (AppLocation.get_section_data_path(plugin_name), db_file_name) @@ -193,12 +192,12 @@ class Manager(object): self.db_url = u'sqlite:///%s/%s.sqlite' % (AppLocation.get_section_data_path(plugin_name), plugin_name) else: self.db_url = u'%s://%s:%s@%s/%s' % (db_type, - urlquote(settings.value(u'db username', u'')), - urlquote(settings.value(u'db password', u'')), - urlquote(settings.value(u'db hostname', u'')), - urlquote(settings.value(u'db database', u''))) + urlquote(settings.value(u'db username')), + urlquote(settings.value(u'db password')), + urlquote(settings.value(u'db hostname')), + urlquote(settings.value(u'db database'))) if db_type == u'mysql': - db_encoding = settings.value(u'db encoding', u'utf8') + db_encoding = settings.value(u'db encoding') self.db_url += u'?charset=%s' % urlquote(db_encoding) settings.endGroup() if upgrade_mod: diff --git a/openlp/core/lib/dockwidget.py b/openlp/core/lib/dockwidget.py index fd938e6a5..1a19a538b 100644 --- a/openlp/core/lib/dockwidget.py +++ b/openlp/core/lib/dockwidget.py @@ -35,8 +35,7 @@ import logging from PyQt4 import QtGui -from openlp.core.lib import build_icon -from openlp.core.ui import ScreenList +from openlp.core.lib import build_icon, ScreenList log = logging.getLogger(__name__) diff --git a/openlp/core/lib/formattingtags.py b/openlp/core/lib/formattingtags.py index eb52dc26f..df24775c8 100644 --- a/openlp/core/lib/formattingtags.py +++ b/openlp/core/lib/formattingtags.py @@ -162,7 +162,7 @@ class FormattingTags(object): FormattingTags.add_html_tags(temporary_tags) # Formatting Tags were also known as display tags. - user_expands = Settings().value(u'displayTags/html_tags', u'') + user_expands = Settings().value(u'displayTags/html_tags') # cPickle only accepts str not unicode strings user_expands_string = str(user_expands) if user_expands_string: diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 941818295..dec83e991 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -39,8 +39,7 @@ import Queue from PyQt4 import QtCore -from openlp.core.lib import resize_image, image_to_byte, Receiver -from openlp.core.ui import ScreenList +from openlp.core.lib import resize_image, image_to_byte, Receiver, ScreenList log = logging.getLogger(__name__) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 55e1bb84b..30d5c09e1 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -36,9 +36,10 @@ import re from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsManager, OpenLPToolbar, ServiceItem, StringContent, build_icon, translate, \ - Receiver, ListWidgetWithDnD, ServiceItemContext, Settings + Receiver, ListWidgetWithDnD, ServiceItemContext, Settings, UiStrings from openlp.core.lib.searchedit import SearchEdit -from openlp.core.lib.ui import UiStrings, create_widget_action, critical_error_message_box +from openlp.core.lib.ui import create_widget_action, critical_error_message_box + log = logging.getLogger(__name__) @@ -327,7 +328,7 @@ class MediaManagerItem(QtGui.QWidget): Add a file to the list widget to make it available for showing """ files = QtGui.QFileDialog.getOpenFileNames(self, self.onNewPrompt, - SettingsManager.get_last_dir(self.settingsSection), self.onNewFileMasks) + Settings().value(self.settingsSection + u'/last directory'), self.onNewFileMasks) log.info(u'New files(s) %s', files) if files: Receiver.send_message(u'cursor_busy') @@ -336,8 +337,7 @@ class MediaManagerItem(QtGui.QWidget): def loadFile(self, files): """ - Turn file from Drag and Drop into an array so the Validate code - can run it. + Turn file from Drag and Drop into an array so the Validate code can run it. ``files`` The list of files to be loaded @@ -382,9 +382,8 @@ class MediaManagerItem(QtGui.QWidget): self.listView.clear() self.loadList(full_list) last_dir = os.path.split(unicode(files[0]))[0] - SettingsManager.set_last_dir(self.settingsSection, last_dir) - SettingsManager.set_list(self.settingsSection, - self.settingsSection, self.getFileList()) + Settings().setValue(self.settingsSection + u'/last directory', last_dir) + Settings().setValue(u'%s/%s files' % (self.settingsSection, self.settingsSection), self.getFileList()) if duplicates_found: critical_error_message_box(UiStrings().Duplicate, translate('OpenLP.MediaManagerItem', 'Duplicate files were found on import and were ignored.')) @@ -444,7 +443,7 @@ class MediaManagerItem(QtGui.QWidget): """ Allows the list click action to be determined dynamically """ - if Settings().value(u'advanced/double click live', False): + if Settings().value(u'advanced/double click live'): self.onLiveClick() else: self.onPreviewClick() @@ -453,7 +452,7 @@ class MediaManagerItem(QtGui.QWidget): """ Allows the change of current item in the list to be actioned """ - if Settings().value(u'advanced/single click preview', False) and self.quickPreviewAllowed \ + if Settings().value(u'advanced/single click preview') and self.quickPreviewAllowed \ and self.listView.selectedIndexes() and self.autoSelectId == -1: self.onPreviewClick(True) diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 1a127a83e..ba6b7673e 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -33,8 +33,7 @@ import logging from PyQt4 import QtCore -from openlp.core.lib import Receiver, Settings -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import Receiver, Settings, UiStrings from openlp.core.utils import get_application_version log = logging.getLogger(__name__) @@ -119,7 +118,7 @@ class Plugin(QtCore.QObject): """ log.info(u'loaded') - def __init__(self, name, plugin_helpers=None, media_item_class=None, + def __init__(self, name, default_settings, plugin_helpers=None, media_item_class=None, settings_tab_class=None, version=None): """ This is the constructor for the plugin object. This provides an easy @@ -133,8 +132,8 @@ class Plugin(QtCore.QObject): ``name`` Defaults to *None*. The name of the plugin. - ``version`` - Defaults to *None*. The version of the plugin. + ``default_settings`` + A dict containing the plugin's settings. The value to each key is the default value to be used. ``plugin_helpers`` Defaults to *None*. A list of helper objects. @@ -144,6 +143,9 @@ class Plugin(QtCore.QObject): ``settings_tab_class`` The class name of the plugin's settings tab. + + ``version`` + Defaults to *None*, which means that the same version number is used as OpenLP's version number. """ log.debug(u'Plugin %s initialised' % name) QtCore.QObject.__init__(self) @@ -172,6 +174,15 @@ class Plugin(QtCore.QObject): self.pluginManager = plugin_helpers[u'pluginmanager'] self.formParent = plugin_helpers[u'formparent'] self.mediaController = plugin_helpers[u'mediacontroller'] + # Add the default status to the default settings. + default_settings[name + u'/status'] = PluginStatus.Inactive + default_settings[name + u'/last directory'] = u'' + # Append a setting for files in the mediamanager (note not all plugins + # which have a mediamanager need this). + if media_item_class is not None: + default_settings[u'%s/%s files' % (name, name)] = [] + # Add settings to the dict of all settings. + Settings.extend_default_settings(default_settings) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'%s_add_service_item' % self.name), self.processAddServiceEvent) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'%s_config_updated' % self.name), @@ -190,7 +201,7 @@ class Plugin(QtCore.QObject): """ Sets the status of the plugin """ - self.status = Settings().value(self.settingsSection + u'/status', PluginStatus.Inactive) + self.status = Settings().value(self.settingsSection + u'/status') def toggleStatus(self, new_status): """ @@ -300,7 +311,28 @@ class Plugin(QtCore.QObject): """ Perform tasks on application startup """ - pass + # FIXME: Remove after 2.2 release. + # This is needed to load the list of images/media/presentation from the config saved + # before the settings rewrite. + if self.mediaItemClass is not None: + # We need QSettings instead of Settings here to bypass our central settings dict. + # Do NOT do this anywhere else! + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + if settings.contains(u'%s count' % self.name): + list_count = int(settings.value(u'%s count' % self.name, 0)) + loaded_list = [] + if list_count: + for counter in range(list_count): + item = settings.value(u'%s %d' % (self.name, counter), u'') + if item: + loaded_list.append(item) + settings.remove(u'%s %d' % (self.name, counter)) + settings.remove(u'%s count' % self.name) + # Now save the list to the config using our Settings class. + Settings().setValue(u'%s/%s files' % (self.settingsSection, self.name), loaded_list) + settings.endGroup() + def usesTheme(self, theme): """ diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 235d7d269..2eb19c1e7 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -32,9 +32,9 @@ import logging from PyQt4 import QtGui, QtCore, QtWebKit from openlp.core.lib import ServiceItem, expand_tags, build_lyrics_format_css, build_lyrics_outline_css, Receiver, \ - ItemCapabilities, FormattingTags, ImageSource + ItemCapabilities, FormattingTags, ImageSource, ScreenList from openlp.core.lib.theme import ThemeLevel -from openlp.core.ui import MainDisplay, ScreenList +from openlp.core.ui import MainDisplay log = logging.getLogger(__name__) @@ -48,6 +48,7 @@ VERSE = u'The Lord said to {r}Noah{/r}: \n' \ VERSE_FOR_LINE_COUNT = u'\n'.join(map(unicode, xrange(50))) FOOTER = [u'Arky Arky (Unknown)', u'Public Domain', u'CCLI 123456'] + class Renderer(object): """ Class to pull all Renderer interactions into one place. The plugins will diff --git a/openlp/core/ui/screen.py b/openlp/core/lib/screen.py similarity index 90% rename from openlp/core/ui/screen.py rename to openlp/core/lib/screen.py index cbd133e08..4c9032c97 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/lib/screen.py @@ -35,10 +35,12 @@ import copy from PyQt4 import QtCore -from openlp.core.lib import Receiver, translate, Settings +from openlp.core.lib import Receiver, translate + log = logging.getLogger(__name__) + class ScreenList(object): """ Wrapper to handle the parameters of the display screen. @@ -241,15 +243,27 @@ class ScreenList(object): """ Loads the screen size and the monitor number from the settings. """ + from openlp.core.lib import Settings + # Add the screen settings to the settings dict. This has to be done here due to crycle dependency. + # Do not do this anywhere else. + screen_settings = { + u'general/x position': self.current[u'size'].x(), + u'general/y position': self.current[u'size'].y(), + u'general/monitor': self.display_count - 1, + u'general/height': self.current[u'size'].height(), + u'general/width': self.current[u'size'].width() + } + Settings.extend_default_settings(screen_settings) settings = Settings() settings.beginGroup(u'general') - self.set_current_display(settings.value(u'monitor', self.display_count - 1)) - self.display = settings.value(u'display on monitor', True) - override_display = settings.value(u'override position', False) - x = settings.value(u'x position', self.current[u'size'].x()) - y = settings.value(u'y position', self.current[u'size'].y()) - width = settings.value(u'width', self.current[u'size'].width()) - height = settings.value(u'height', self.current[u'size'].height()) + monitor = settings.value(u'monitor') + self.set_current_display(monitor) + self.display = settings.value(u'display on monitor') + override_display = settings.value(u'override position') + x = settings.value(u'x position') + y = settings.value(u'y position') + width = settings.value(u'width') + height = settings.value(u'height') self.override[u'size'] = QtCore.QRect(x, y, width, height) self.override[u'primary'] = False settings.endGroup() diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index ef37ae818..2f461c0a6 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -420,7 +420,7 @@ class ServiceItem(object): self._raw_frames.append(slide) elif self.service_item_type == ServiceItemType.Image: settingsSection = serviceitem[u'serviceitem'][u'header'][u'name'] - background = QtGui.QColor(Settings().value(settingsSection + u'/background color', u'#000000')) + background = QtGui.QColor(Settings().value(settingsSection + u'/background color')) if path: self.has_original_files = False for text_image in serviceitem[u'serviceitem'][u'data']: diff --git a/openlp/core/lib/settings.py b/openlp/core/lib/settings.py new file mode 100644 index 000000000..aad851dca --- /dev/null +++ b/openlp/core/lib/settings.py @@ -0,0 +1,337 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2013 Raoul Snyman # +# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, # +# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. # +# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, # +# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, # +# Frode Woldsund, Martin Zibricky, Patrick Zimmermann # +# --------------------------------------------------------------------------- # +# 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 # +############################################################################### +""" +This class contains the core default settings. +""" +import datetime +import logging +import os +import sys + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import SlideLimits +from openlp.core.lib.theme import ThemeLevel +from openlp.core.lib import UiStrings + + +log = logging.getLogger(__name__) + + +# Fix for bug #1014422. +X11_BYPASS_DEFAULT = True +if sys.platform.startswith(u'linux'): + # 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 + + +class Settings(QtCore.QSettings): + """ + Class to wrap QSettings. + + * Exposes all the methods of QSettings. + * Adds functionality for OpenLP Portable. If the ``defaultFormat`` is set to + ``IniFormat``, and the path to the Ini file is set using ``set_filename``, + then the Settings constructor (without any arguments) will create a Settings + object for accessing settings stored in that Ini file. + + ``__default_settings__`` + This dict contains all core settings with their default values. + + ``__obsolete_settings__`` + Each entry is structured in the following way:: + + (u'general/enable slide loop', u'advanced/slide limits', [(SlideLimits.Wrap, True), (SlideLimits.End, False)]) + + The first entry is the *old key*; it will be removed. + + The second entry is the *new key*; we will add it to the config. + + The last entry is a list containing two-pair tuples. If the list is empty, no conversion is made. Otherwise each + pair describes how to convert the old setting's value:: + + (SlideLimits.Wrap, True) + + This means, that if the value of ``general/enable slide loop`` is equal (``==``) ``True`` then we set + ``advanced/slide limits`` to ``SlideLimits.Wrap``. **NOTE**, this means that the rules have to cover all cases! + So, if the type of the old value is bool, then there must be two rules. + """ + __default_settings__ = { + u'advanced/x11 bypass wm': X11_BYPASS_DEFAULT, + u'advanced/default service enabled': True, + u'advanced/enable exit confirmation': True, + u'advanced/save current plugin': False, + u'advanced/single click preview': False, + # 7 stands for now, 0 to 6 is Monday to Sunday. + u'advanced/default service day': 7, + u'advanced/max recent files': 20, + u'advanced/is portable': False, + u'advanced/hide mouse': True, + u'advanced/current media plugin': -1, + u'advanced/double click live': False, + u'advanced/default service hour': 11, + u'advanced/default color': u'#ffffff', + u'advanced/default image': u':/graphics/openlp-splash-screen.png', + u'advanced/expand service item': False, + u'advanced/recent file count': 4, + u'advanced/default service name': UiStrings().DefaultServiceName, + u'advanced/default service minute': 0, + u'advanced/slide limits': SlideLimits.End, + u'advanced/print slide text': False, + u'advanced/add page break': False, + u'advanced/print file meta data': False, + u'advanced/print notes': False, + u'advanced/display size': 0, + u'crashreport/last directory': u'', + u'displayTags/html_tags': u'', + u'general/ccli number': u'', + u'general/has run wizard': False, + u'general/update check': True, + u'general/language': u'[en]', + u'general/songselect password': u'', + u'general/recent files': [], + u'general/save prompt': False, + u'general/auto preview': False, + u'general/view mode': u'default', + u'general/auto open': False, + u'general/enable slide loop': True, + u'general/show splash': True, + u'general/screen blank': False, + # The oder display settings (display position and dimensions) are defined in the ScreenList class due to crycle + # dependency. + u'general/override position': False, + u'general/loop delay': 5, + u'general/songselect username': u'', + u'general/audio repeat list': False, + u'general/auto unblank': False, + u'general/display on monitor': True, + u'general/audio start paused': True, + # This defaults to yesterday in order to force the update check to run when you've never run it before. + u'general/last version test': datetime.datetime.now().date() - datetime.timedelta(days=1), + u'general/blank warning': False, + u'players/background color': u'#000000', + u'servicemanager/service theme': u'', + u'servicemanager/last directory': u'', + u'servicemanager/last file': u'', + u'SettingsImport/Make_Changes': u'At_Own_RISK', + u'SettingsImport/type': u'OpenLP_settings_export', + u'SettingsImport/file_date_created': datetime.datetime.now().strftime("%Y-%m-%d %H:%M"), + u'SettingsImport/version': u'', + u'shortcuts/aboutItem': [QtGui.QKeySequence(u'Ctrl+F1')], + u'shortcuts/audioPauseItem': [], + u'shortcuts/displayTagItem': [], + u'shortcuts/blankScreen': [QtCore.Qt.Key_Period], + u'shortcuts/collapse': [QtCore.Qt.Key_Minus], + u'shortcuts/desktopScreen': [QtGui.QKeySequence(u'D')], + u'shortcuts/down': [QtCore.Qt.Key_Down], + u'shortcuts/escapeItem': [QtCore.Qt.Key_Escape], + u'shortcuts/expand': [QtCore.Qt.Key_Plus], + u'shortcuts/exportThemeItem': [], + u'shortcuts/fileNewItem': [QtGui.QKeySequence(u'Ctrl+N')], + u'shortcuts/fileSaveAsItem': [QtGui.QKeySequence(u'Ctrl+Shift+S')], + u'shortcuts/fileExitItem': [QtGui.QKeySequence(u'Alt+F4')], + u'shortcuts/fileSaveItem': [QtGui.QKeySequence(u'Ctrl+S')], + u'shortcuts/fileOpenItem': [QtGui.QKeySequence(u'Ctrl+O')], + u'shortcuts/importThemeItem': [], + u'shortcuts/importBibleItem': [], + u'shortcuts/modeDefaultItem': [], + u'shortcuts/modeLiveItem': [], + u'shortcuts/makeLive': [QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return], + u'shortcuts/moveUp': [QtCore.Qt.Key_PageUp], + u'shortcuts/moveTop': [QtCore.Qt.Key_Home], + u'shortcuts/modeSetupItem': [], + u'shortcuts/moveBottom': [QtCore.Qt.Key_End], + u'shortcuts/moveDown': [QtCore.Qt.Key_PageDown], + u'shortcuts/nextTrackItem': [], + u'shortcuts/nextItem_live': [QtCore.Qt.Key_Down, QtCore.Qt.Key_PageDown], + u'shortcuts/nextService': [QtCore.Qt.Key_Right], + u'shortcuts/offlineHelpItem': [], + u'shortcuts/onlineHelpItem': [QtGui.QKeySequence(u'Alt+F1')], + u'shortcuts/previousItem_live': [QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], + u'shortcuts/playSlidesLoop': [], + u'shortcuts/playSlidesOnce': [], + u'shortcuts/previousService': [QtCore.Qt.Key_Left], + u'shortcuts/printServiceItem': [QtGui.QKeySequence(u'Ctrl+P')], + u'shortcuts/songExportItem': [], + u'shortcuts/songUsageStatus': [QtCore.Qt.Key_F4], + u'shortcuts/settingsShortcutsItem': [], + u'shortcuts/settingsImportItem': [], + u'shortcuts/settingsPluginListItem': [QtGui.QKeySequence(u'Alt+F7')], + u'shortcuts/songUsageDelete': [], + u'shortcuts/settingsConfigureItem': [], + u'shortcuts/shortcutAction_B': [QtGui.QKeySequence(u'B')], + u'shortcuts/shortcutAction_C': [QtGui.QKeySequence(u'C')], + u'shortcuts/shortcutAction_E': [QtGui.QKeySequence(u'E')], + u'shortcuts/shortcutAction_I': [QtGui.QKeySequence(u'I')], + u'shortcuts/shortcutAction_O': [QtGui.QKeySequence(u'O')], + u'shortcuts/shortcutAction_P': [QtGui.QKeySequence(u'P')], + u'shortcuts/shortcutAction_V': [QtGui.QKeySequence(u'V')], + u'shortcuts/settingsExportItem': [], + u'shortcuts/songUsageReport': [], + u'shortcuts/songImportItem': [], + u'shortcuts/themeScreen': [QtGui.QKeySequence(u'T')], + u'shortcuts/toolsReindexItem': [], + u'shortcuts/toolsAlertItem': [u'F7'], + u'shortcuts/toolsFirstTimeWizard': [], + u'shortcuts/toolsOpenDataFolder': [], + u'shortcuts/toolsAddToolItem': [], + u'shortcuts/updateThemeImages': [], + u'shortcuts/up': [QtCore.Qt.Key_Up], + u'shortcuts/viewThemeManagerItem': [QtGui.QKeySequence(u'F10')], + u'shortcuts/viewMediaManagerItem': [QtGui.QKeySequence(u'F8')], + u'shortcuts/viewPreviewPanel': [QtGui.QKeySequence(u'F11')], + u'shortcuts/viewLivePanel': [QtGui.QKeySequence(u'F12')], + u'shortcuts/viewServiceManagerItem': [QtGui.QKeySequence(u'F9')], + u'shortcuts/webSiteItem': [], + u'themes/theme level': ThemeLevel.Song, + u'themes/global theme': u'', + u'themes/last directory': u'', + u'themes/last directory export': u'', + u'themes/last directory import': u'', + u'user interface/main window position': QtCore.QPoint(0, 0), + u'user interface/preview panel': True, + u'user interface/live panel': True, + u'user interface/main window geometry': QtCore.QByteArray(), + u'user interface/preview splitter geometry': QtCore.QByteArray(), + u'user interface/lock panel': False, + u'user interface/mainwindow splitter geometry': QtCore.QByteArray(), + u'user interface/live splitter geometry': QtCore.QByteArray(), + u'user interface/main window state': QtCore.QByteArray(), + u'media/players': u'webkit', + u'media/override player': QtCore.Qt.Unchecked + } + __file_path__ = u'' + __obsolete_settings__ = [ + (u'bibles/bookname language', u'bibles/book name language', []), + (u'general/enable slide loop', u'advanced/slide limits', [(SlideLimits.Wrap, True), (SlideLimits.End, False)]), + (u'themes/last directory', u'themes/last directory import', []), + (u'themes/last directory 1', u'themes/last directory export', []), + (u'servicemanager/last directory', u'', []), + (u'songs/last directory 1', u'songs/last directory import', []), + (u'bibles/last directory 1', u'bibles/last directory import', []), + (u'songusage/last directory 1', u'songusage/last directory export', []) + ] + + @staticmethod + def extend_default_settings(default_values): + """ + Static method to merge the given ``default_values`` with the ``Settings.__default_settings__``. + + ``default_values`` + A dict with setting keys and their default values. + """ + Settings.__default_settings__ = dict(default_values.items() + Settings.__default_settings__.items()) + + @staticmethod + def set_filename(ini_file): + """ + Sets the complete path to an Ini file to be used by Settings objects. + + Does not affect existing Settings objects. + """ + Settings.__file_path__ = ini_file + + @staticmethod + def set_up_default_values(): + """ + This static method is called on start up. It is used to perform any operation on the __default_settings__ dict. + """ + # Make sure the string is translated (when building the dict the string is not translated because the translate + # function was not set up as this stage). + Settings.__default_settings__[u'advanced/default service name'] = UiStrings().DefaultServiceName + + def __init__(self, *args): + if not args and Settings.__file_path__ and Settings.defaultFormat() == Settings.IniFormat: + QtCore.QSettings.__init__(self, Settings.__file_path__, Settings.IniFormat) + else: + QtCore.QSettings.__init__(self, *args) + + def remove_obsolete_settings(self): + """ + This method is only called to clean up the config. It removes old settings and it renames settings. See + ``__obsolete_settings__`` for more details. + """ + for old_key, new_key, rules in Settings.__obsolete_settings__: + # Once removed we don't have to do this again. + if self.contains(old_key): + if new_key: + # Get the value of the old_key. + old_value = super(Settings, self).value(old_key) + # Iterate over our rules and check what the old_value should be "converted" to. + for new, old in rules: + # If the value matches with the condition (rule), then use the provided value. This is used to + # convert values. E. g. an old value 1 results in True, and 0 in False. + if old == old_value: + old_value = new + break + self.setValue(new_key, old_value) + self.remove(old_key) + + def value(self, key): + """ + Returns the value for the given ``key``. The returned ``value`` is of the same type as the default value in the + *Settings.__default_settings__* dict. + + **Note**, this method only converts a few types and might need to be extended if a certain type is missing! + + ``key`` + The key to return the value from. + """ + # if group() is not empty the group has not been specified together with the key. + if self.group(): + default_value = Settings.__default_settings__[self.group() + u'/' + key] + else: + default_value = Settings.__default_settings__[key] + setting = super(Settings, self).value(key, default_value) + # On OS X (and probably on other platforms too) empty value from QSettings is represented as type + # PyQt4.QtCore.QPyNullVariant. This type has to be converted to proper 'None' Python type. + if isinstance(setting, QtCore.QPyNullVariant) and setting.isNull(): + setting = None + # Handle 'None' type (empty value) properly. + if setting is None: + # An empty string saved to the settings results in a None type being returned. + # Convert it to empty unicode string. + if isinstance(default_value, unicode): + return u'' + # An empty list saved to the settings results in a None type being returned. + else: + return [] + # Convert the setting to the correct type. + if isinstance(default_value, bool): + if isinstance(setting, bool): + return setting + # Sometimes setting is string instead of a boolean. + return setting == u'true' + if isinstance(default_value, int): + return int(setting) + return setting + diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index 37b8fc43d..8491fe4f1 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -27,9 +27,8 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### """ -Provide handling for persisting OpenLP settings. OpenLP uses QSettings to -manage settings persistence. QSettings provides a single API for saving and -retrieving settings from the application but writes to disk in an OS dependant +Provide handling for persisting OpenLP settings. OpenLP uses QSettings to manage settings persistence. QSettings +provides a single API for saving and retrieving settings from the application but writes to disk in an OS dependant format. """ import os @@ -39,109 +38,19 @@ from PyQt4 import QtCore from openlp.core.lib import Settings from openlp.core.utils import AppLocation + class SettingsManager(object): """ - Class to provide helper functions for the loading and saving of application - settings. + Class to provide helper functions for the loading and saving of application settings. """ - @staticmethod - def get_last_dir(section, num=None): - """ - Read the last directory used for plugin. - - ``section`` - The section of code calling the method. This is used in the - settings key. - - ``num`` - Defaults to *None*. A further qualifier. - """ - if num: - name = u'last directory %d' % num - else: - name = u'last directory' - return Settings().value(section + u'/' + name, u'') - - @staticmethod - def set_last_dir(section, directory, num=None): - """ - Save the last directory used for plugin. - - ``section`` - The section of code calling the method. This is used in the - settings key. - - ``directory`` - The directory being stored in the settings. - - ``num`` - Defaults to *None*. A further qualifier. - """ - if num: - name = u'last directory %d' % num - else: - name = u'last directory' - Settings().setValue(section + u'/' + name, directory) - - @staticmethod - def set_list(section, name, list): - """ - Save a list to application settings. - - ``section`` - The section of the settings to store this list. - - ``name`` - The name of the list to save. - - ``list`` - The list of values to save. - """ - settings = Settings() - settings.beginGroup(section) - old_count = settings.value(u'%s count' % name, 0) - new_count = len(list) - settings.setValue(u'%s count' % name, new_count) - for counter in range(new_count): - settings.setValue(u'%s %d' % (name, counter), list[counter - 1]) - if old_count > new_count: - # Tidy up any old list items - for counter in range(new_count, old_count): - settings.remove(u'%s %d' % (name, counter)) - settings.endGroup() - - @staticmethod - def load_list(section, name): - """ - Load a list from the config file. - - ``section`` - The section of the settings to load the list from. - - ``name`` - The name of the list. - """ - settings = Settings() - settings.beginGroup(section) - list_count = settings.value(u'%s count' % name, 0) - list = [] - if list_count: - for counter in range(list_count): - item = settings.value(u'%s %d' % (name, counter), u'') - if item: - list.append(item) - settings.endGroup() - return list - @staticmethod def get_files(section=None, extension=None): """ Get a list of files from the data files path. ``section`` - Defaults to *None*. The section of code getting the files - used - to load from a section's data subdirectory. + Defaults to *None*. The section of code getting the files - used to load from a section's data subdirectory. ``extension`` Defaults to *None*. The extension to search for. @@ -154,8 +63,7 @@ class SettingsManager(object): except OSError: return [] if extension: - return [filename for filename in files - if extension == os.path.splitext(filename)[1]] + return [filename for filename in files if extension == os.path.splitext(filename)[1]] else: # no filtering required return files diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index b2803c965..8a85c0d86 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -36,7 +36,7 @@ import logging from xml.dom.minidom import Document from lxml import etree, objectify -from openlp.core.lib import str_to_bool +from openlp.core.lib import str_to_bool, ScreenList log = logging.getLogger(__name__) @@ -380,8 +380,7 @@ class ThemeXML(object): # Create italics name element self.child_element(background, u'italics', unicode(italics)) # Create indentation name element - self.child_element( - background, u'line_adjustment', unicode(line_adjustment)) + self.child_element(background, u'line_adjustment', unicode(line_adjustment)) # Create Location element element = self.theme_xml.createElement(u'location') element.setAttribute(u'override', unicode(override)) @@ -451,7 +450,6 @@ class ThemeXML(object): Set the header and footer size into the current primary screen. 10 px on each side is removed to allow for a border. """ - from openlp.core.ui import ScreenList current_screen = ScreenList().current self.font_main_y = 0 self.font_main_width = current_screen[u'size'].width() - 20 diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 10935384a..0d869d724 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -33,116 +33,12 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, Receiver, translate +from openlp.core.lib import build_icon, translate, Receiver, UiStrings from openlp.core.utils.actions import ActionList + log = logging.getLogger(__name__) -class UiStrings(object): - """ - Provide standard strings for objects to use. - """ - __instance__ = None - - def __new__(cls): - """ - Override the default object creation method to return a single instance. - """ - if not cls.__instance__: - cls.__instance__ = object.__new__(cls) - return cls.__instance__ - - def __init__(self): - """ - These strings should need a good reason to be retranslated elsewhere. - Should some/more/less of these have an & attached? - """ - self.About = translate('OpenLP.Ui', 'About') - self.Add = translate('OpenLP.Ui', '&Add') - self.Advanced = translate('OpenLP.Ui', 'Advanced') - self.AllFiles = translate('OpenLP.Ui', 'All Files') - self.Automatic = translate('OpenLP.Ui', 'Automatic') - self.BackgroundColor = translate('OpenLP.Ui', 'Background Color') - self.Bottom = translate('OpenLP.Ui', 'Bottom') - self.Browse = translate('OpenLP.Ui', 'Browse...') - self.Cancel = translate('OpenLP.Ui', 'Cancel') - self.CCLINumberLabel = translate('OpenLP.Ui', 'CCLI number:') - self.CreateService = translate('OpenLP.Ui', 'Create a new service.') - self.ConfirmDelete = translate('OpenLP.Ui', 'Confirm Delete') - self.Continuous = translate('OpenLP.Ui', 'Continuous') - self.Default = translate('OpenLP.Ui', 'Default') - self.DefaultColor = translate('OpenLP.Ui', 'Default Color:') - self.Delete = translate('OpenLP.Ui', '&Delete') - self.DisplayStyle = translate('OpenLP.Ui', 'Display style:') - self.Duplicate = translate('OpenLP.Ui', 'Duplicate Error') - self.Edit = translate('OpenLP.Ui', '&Edit') - self.EmptyField = translate('OpenLP.Ui', 'Empty Field') - self.Error = translate('OpenLP.Ui', 'Error') - self.Export = translate('OpenLP.Ui', 'Export') - self.File = translate('OpenLP.Ui', 'File') - self.FontSizePtUnit = translate('OpenLP.Ui', 'pt', 'Abbreviated font pointsize unit') - self.Help = translate('OpenLP.Ui', 'Help') - self.Hours = translate('OpenLP.Ui', 'h', 'The abbreviated unit for hours') - self.IFdSs = translate('OpenLP.Ui', 'Invalid Folder Selected', 'Singular') - self.IFSs = translate('OpenLP.Ui', 'Invalid File Selected', 'Singular') - self.IFSp = translate('OpenLP.Ui', 'Invalid Files Selected', 'Plural') - self.Image = translate('OpenLP.Ui', 'Image') - self.Import = translate('OpenLP.Ui', 'Import') - self.LayoutStyle = translate('OpenLP.Ui', 'Layout style:') - self.Live = translate('OpenLP.Ui', 'Live') - self.LiveBGError = translate('OpenLP.Ui', 'Live Background Error') - self.LiveToolbar = translate('OpenLP.Ui', 'Live Toolbar') - self.Load = translate('OpenLP.Ui', 'Load') - self.Minutes = translate('OpenLP.Ui', 'm', 'The abbreviated unit for minutes') - self.Middle = translate('OpenLP.Ui', 'Middle') - self.New = translate('OpenLP.Ui', 'New') - self.NewService = translate('OpenLP.Ui', 'New Service') - self.NewTheme = translate('OpenLP.Ui', 'New Theme') - self.NextTrack = translate('OpenLP.Ui', 'Next Track') - self.NFdSs = translate('OpenLP.Ui', 'No Folder Selected', 'Singular') - self.NFSs = translate('OpenLP.Ui', 'No File Selected', 'Singular') - self.NFSp = translate('OpenLP.Ui', 'No Files Selected', 'Plural') - self.NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular') - self.NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural') - self.OLPV1 = translate('OpenLP.Ui', 'openlp.org 1.x') - self.OLPV2 = translate('OpenLP.Ui', 'OpenLP 2') - self.OLPV2x = translate('OpenLP.Ui', 'OpenLP 2.1') - self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you wish to continue?') - self.OpenService = translate('OpenLP.Ui', 'Open service.') - self.PlaySlidesInLoop = translate('OpenLP.Ui','Play Slides in Loop') - self.PlaySlidesToEnd = translate('OpenLP.Ui','Play Slides to End') - self.Preview = translate('OpenLP.Ui', 'Preview') - self.PrintService = translate('OpenLP.Ui', 'Print Service') - self.ReplaceBG = translate('OpenLP.Ui', 'Replace Background') - self.ReplaceLiveBG = translate('OpenLP.Ui', 'Replace live background.') - self.ResetBG = translate('OpenLP.Ui', 'Reset Background') - self.ResetLiveBG = translate('OpenLP.Ui', 'Reset live background.') - self.Seconds = translate('OpenLP.Ui', 's', 'The abbreviated unit for seconds') - self.SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview') - self.Search = translate('OpenLP.Ui', 'Search') - self.SearchThemes = translate('OpenLP.Ui', 'Search Themes...', 'Search bar place holder text ') - self.SelectDelete = translate('OpenLP.Ui', 'You must select an item to delete.') - self.SelectEdit = translate('OpenLP.Ui', 'You must select an item to edit.') - self.Settings = translate('OpenLP.Ui', 'Settings') - self.SaveService = translate('OpenLP.Ui', 'Save Service') - self.Service = translate('OpenLP.Ui', 'Service') - self.Split = translate('OpenLP.Ui', 'Optional &Split') - self.SplitToolTip = translate('OpenLP.Ui', - 'Split a slide into two only if it does not fit on the screen as one slide.') - self.StartTimeCode = translate('OpenLP.Ui', 'Start %s') - self.StopPlaySlidesInLoop = translate('OpenLP.Ui', 'Stop Play Slides in Loop') - self.StopPlaySlidesToEnd = translate('OpenLP.Ui', 'Stop Play Slides to End') - self.Theme = translate('OpenLP.Ui', 'Theme', 'Singular') - self.Themes = translate('OpenLP.Ui', 'Themes', 'Plural') - self.Tools = translate('OpenLP.Ui', 'Tools') - self.Top = translate('OpenLP.Ui', 'Top') - self.UnsupportedFile = translate('OpenLP.Ui', 'Unsupported File') - self.VersePerSlide = translate('OpenLP.Ui', 'Verse Per Slide') - self.VersePerLine = translate('OpenLP.Ui', 'Verse Per Line') - self.Version = translate('OpenLP.Ui', 'Version') - self.View = translate('OpenLP.Ui', 'View') - self.ViewMode = translate('OpenLP.Ui', 'View Mode') - def add_welcome_page(parent, image): """ diff --git a/openlp/core/lib/uistrings.py b/openlp/core/lib/uistrings.py new file mode 100644 index 000000000..f89b52a98 --- /dev/null +++ b/openlp/core/lib/uistrings.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2013 Raoul Snyman # +# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, # +# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. # +# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, # +# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, # +# Frode Woldsund, Martin Zibricky, Patrick Zimmermann # +# --------------------------------------------------------------------------- # +# 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 # +############################################################################### +""" +The :mod:`uistrings` module provides standard strings for OpenLP. +""" +import logging + +from openlp.core.lib import translate + + +log = logging.getLogger(__name__) + + +class UiStrings(object): + """ + Provide standard strings for objects to use. + """ + __instance__ = None + + def __new__(cls): + """ + Override the default object creation method to return a single instance. + """ + if not cls.__instance__: + cls.__instance__ = object.__new__(cls) + return cls.__instance__ + + def __init__(self): + """ + These strings should need a good reason to be retranslated elsewhere. + Should some/more/less of these have an & attached? + """ + self.About = translate('OpenLP.Ui', 'About') + self.Add = translate('OpenLP.Ui', '&Add') + self.Advanced = translate('OpenLP.Ui', 'Advanced') + self.AllFiles = translate('OpenLP.Ui', 'All Files') + self.Automatic = translate('OpenLP.Ui', 'Automatic') + self.BackgroundColor = translate('OpenLP.Ui', 'Background Color') + self.Bottom = translate('OpenLP.Ui', 'Bottom') + self.Browse = translate('OpenLP.Ui', 'Browse...') + self.Cancel = translate('OpenLP.Ui', 'Cancel') + self.CCLINumberLabel = translate('OpenLP.Ui', 'CCLI number:') + self.CreateService = translate('OpenLP.Ui', 'Create a new service.') + self.ConfirmDelete = translate('OpenLP.Ui', 'Confirm Delete') + self.Continuous = translate('OpenLP.Ui', 'Continuous') + self.Default = translate('OpenLP.Ui', 'Default') + self.DefaultColor = translate('OpenLP.Ui', 'Default Color:') + self.DefaultServiceName = translate('OpenLP.Ui', 'Service %Y-%m-%d %H-%M', + 'This may not contain any of the following characters: /\\?*|<>\[\]":+\n' + 'See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information.') + self.Delete = translate('OpenLP.Ui', '&Delete') + self.DisplayStyle = translate('OpenLP.Ui', 'Display style:') + self.Duplicate = translate('OpenLP.Ui', 'Duplicate Error') + self.Edit = translate('OpenLP.Ui', '&Edit') + self.EmptyField = translate('OpenLP.Ui', 'Empty Field') + self.Error = translate('OpenLP.Ui', 'Error') + self.Export = translate('OpenLP.Ui', 'Export') + self.File = translate('OpenLP.Ui', 'File') + self.FontSizePtUnit = translate('OpenLP.Ui', 'pt', 'Abbreviated font pointsize unit') + self.Help = translate('OpenLP.Ui', 'Help') + self.Hours = translate('OpenLP.Ui', 'h', 'The abbreviated unit for hours') + self.IFdSs = translate('OpenLP.Ui', 'Invalid Folder Selected', 'Singular') + self.IFSs = translate('OpenLP.Ui', 'Invalid File Selected', 'Singular') + self.IFSp = translate('OpenLP.Ui', 'Invalid Files Selected', 'Plural') + self.Image = translate('OpenLP.Ui', 'Image') + self.Import = translate('OpenLP.Ui', 'Import') + self.LayoutStyle = translate('OpenLP.Ui', 'Layout style:') + self.Live = translate('OpenLP.Ui', 'Live') + self.LiveBGError = translate('OpenLP.Ui', 'Live Background Error') + self.LiveToolbar = translate('OpenLP.Ui', 'Live Toolbar') + self.Load = translate('OpenLP.Ui', 'Load') + self.Minutes = translate('OpenLP.Ui', 'm', 'The abbreviated unit for minutes') + self.Middle = translate('OpenLP.Ui', 'Middle') + self.New = translate('OpenLP.Ui', 'New') + self.NewService = translate('OpenLP.Ui', 'New Service') + self.NewTheme = translate('OpenLP.Ui', 'New Theme') + self.NextTrack = translate('OpenLP.Ui', 'Next Track') + self.NFdSs = translate('OpenLP.Ui', 'No Folder Selected', 'Singular') + self.NFSs = translate('OpenLP.Ui', 'No File Selected', 'Singular') + self.NFSp = translate('OpenLP.Ui', 'No Files Selected', 'Plural') + self.NISs = translate('OpenLP.Ui', 'No Item Selected', 'Singular') + self.NISp = translate('OpenLP.Ui', 'No Items Selected', 'Plural') + self.OLPV1 = translate('OpenLP.Ui', 'openlp.org 1.x') + self.OLPV2 = translate('OpenLP.Ui', 'OpenLP 2') + self.OLPV2x = translate('OpenLP.Ui', 'OpenLP 2.1') + self.OpenLPStart = translate('OpenLP.Ui', 'OpenLP is already running. Do you wish to continue?') + self.OpenService = translate('OpenLP.Ui', 'Open service.') + self.PlaySlidesInLoop = translate('OpenLP.Ui','Play Slides in Loop') + self.PlaySlidesToEnd = translate('OpenLP.Ui','Play Slides to End') + self.Preview = translate('OpenLP.Ui', 'Preview') + self.PrintService = translate('OpenLP.Ui', 'Print Service') + self.ReplaceBG = translate('OpenLP.Ui', 'Replace Background') + self.ReplaceLiveBG = translate('OpenLP.Ui', 'Replace live background.') + self.ResetBG = translate('OpenLP.Ui', 'Reset Background') + self.ResetLiveBG = translate('OpenLP.Ui', 'Reset live background.') + self.Seconds = translate('OpenLP.Ui', 's', 'The abbreviated unit for seconds') + self.SaveAndPreview = translate('OpenLP.Ui', 'Save && Preview') + self.Search = translate('OpenLP.Ui', 'Search') + self.SearchThemes = translate('OpenLP.Ui', 'Search Themes...', 'Search bar place holder text ') + self.SelectDelete = translate('OpenLP.Ui', 'You must select an item to delete.') + self.SelectEdit = translate('OpenLP.Ui', 'You must select an item to edit.') + self.Settings = translate('OpenLP.Ui', 'Settings') + self.SaveService = translate('OpenLP.Ui', 'Save Service') + self.Service = translate('OpenLP.Ui', 'Service') + self.Split = translate('OpenLP.Ui', 'Optional &Split') + self.SplitToolTip = translate('OpenLP.Ui', + 'Split a slide into two only if it does not fit on the screen as one slide.') + self.StartTimeCode = translate('OpenLP.Ui', 'Start %s') + self.StopPlaySlidesInLoop = translate('OpenLP.Ui', 'Stop Play Slides in Loop') + self.StopPlaySlidesToEnd = translate('OpenLP.Ui', 'Stop Play Slides to End') + self.Theme = translate('OpenLP.Ui', 'Theme', 'Singular') + self.Themes = translate('OpenLP.Ui', 'Themes', 'Plural') + self.Tools = translate('OpenLP.Ui', 'Tools') + self.Top = translate('OpenLP.Ui', 'Top') + self.UnsupportedFile = translate('OpenLP.Ui', 'Unsupported File') + self.VersePerSlide = translate('OpenLP.Ui', 'Verse Per Slide') + self.VersePerLine = translate('OpenLP.Ui', 'Verse Per Line') + self.Version = translate('OpenLP.Ui', 'Version') + self.View = translate('OpenLP.Ui', 'View') + self.ViewMode = translate('OpenLP.Ui', 'View Mode') + diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 132465b2e..a0065966b 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -31,31 +31,29 @@ The :mod:`ui` module provides the core user interface for OpenLP """ + class HideMode(object): """ - This is an enumeration class which specifies the different modes of hiding - the display. + This is an enumeration class which specifies the different modes of hiding the display. ``Blank`` - This mode is used to hide all output, specifically by covering the - display with a black screen. + This mode is used to hide all output, specifically by covering the display with a black screen. ``Theme`` - This mode is used to hide all output, but covers the display with the - current theme background, as opposed to black. + This mode is used to hide all output, but covers the display with the current theme background, as opposed to + black. ``Desktop`` - This mode hides all output by minimising the display, leaving the user's - desktop showing. + This mode hides all output by minimising the display, leaving the user's desktop showing. """ Blank = 1 Theme = 2 Screen = 3 + class AlertLocation(object): """ - This is an enumeration class which controls where Alerts are placed on the - screen. + This is an enumeration class which controls where Alerts are placed on the screen. ``Top`` Place the text at the top of the screen. @@ -70,10 +68,10 @@ class AlertLocation(object): Middle = 1 Bottom = 2 + class DisplayControllerType(object): """ - This is an enumeration class which says where a display controller - originated from. + This is an enumeration class which says where a display controller originated from. """ Live = 0 Preview = 1 @@ -86,7 +84,6 @@ from themelayoutform import ThemeLayoutForm from themeform import ThemeForm from filerenameform import FileRenameForm from starttimeform import StartTimeForm -from screen import ScreenList from maindisplay import MainDisplay, Display from servicenoteform import ServiceNoteForm from serviceitemeditform import ServiceItemEditForm diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index 13da58845..7a823017b 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -29,8 +29,9 @@ from PyQt4 import QtGui -from openlp.core.lib import build_icon, translate -from openlp.core.lib.ui import UiStrings, create_button, create_button_box +from openlp.core.lib import build_icon, translate, UiStrings +from openlp.core.lib.ui import create_button, create_button_box + class Ui_AboutDialog(object): def setupUi(self, aboutDialog): diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 17d554145..3be6fbeb9 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -36,13 +36,13 @@ import sys from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, translate, build_icon, Receiver, Settings -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import SettingsTab, translate, build_icon, Receiver, Settings, UiStrings from openlp.core.utils import get_images_filter, AppLocation, format_time from openlp.core.lib import SlideLimits log = logging.getLogger(__name__) + class AdvancedTab(SettingsTab): """ The :class:`AdvancedTab` manages the advanced settings tab including the UI @@ -53,17 +53,6 @@ class AdvancedTab(SettingsTab): Initialise the settings tab """ self.displayChanged = False - # 7 stands for now, 0 to 6 is Monday to Sunday. - self.defaultServiceDay = 7 - # 11 o'clock is the most popular time for morning service. - self.defaultServiceHour = 11 - self.defaultServiceMinute = 0 - self.defaultServiceName = translate('OpenLP.AdvancedTab', - 'Service %Y-%m-%d %H-%M', - 'This may not contain any of the following characters: ' - '/\\?*|<>\[\]":+\n' - 'See http://docs.python.org/library/datetime.html' - '#strftime-strptime-behavior for more information.') self.defaultImage = u':/graphics/openlp-splash-screen.png' self.defaultColor = u'#ffffff' self.dataExists = False @@ -310,7 +299,7 @@ class AdvancedTab(SettingsTab): self.serviceNameLabel.setText(translate('OpenLP.AdvancedTab', 'Name:')) self.serviceNameEdit.setToolTip(translate('OpenLP.AdvancedTab', 'Consult the OpenLP manual for usage.')) self.serviceNameRevertButton.setToolTip( - translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".') % self.defaultServiceName) + translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".') % UiStrings().DefaultServiceName) self.serviceNameExampleLabel.setText(translate('OpenLP.AdvancedTab', 'Example:')) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', 'Hide mouse cursor when over display window')) @@ -352,36 +341,26 @@ class AdvancedTab(SettingsTab): # The max recent files value does not have an interface and so never # gets actually stored in the settings therefore the default value of # 20 will always be used. - self.recentSpinBox.setMaximum(settings.value(u'max recent files', 20)) - self.recentSpinBox.setValue(settings.value(u'recent file count', 4)) - self.mediaPluginCheckBox.setChecked(settings.value(u'save current plugin', False)) - self.doubleClickLiveCheckBox.setChecked(settings.value(u'double click live', False)) - self.singleClickPreviewCheckBox.setChecked(settings.value(u'single click preview', False)) - self.expandServiceItemCheckBox.setChecked(settings.value(u'expand service item', False)) - self.enableAutoCloseCheckBox.setChecked(settings.value(u'enable exit confirmation', True)) - self.hideMouseCheckBox.setChecked(settings.value(u'hide mouse', True)) - self.serviceNameDay.setCurrentIndex(settings.value(u'default service day', self.defaultServiceDay)) - self.serviceNameTime.setTime(QtCore.QTime(settings.value(u'default service hour', self.defaultServiceHour), - settings.value(u'default service minute',self.defaultServiceMinute))) + self.recentSpinBox.setMaximum(settings.value(u'max recent files')) + self.recentSpinBox.setValue(settings.value(u'recent file count')) + self.mediaPluginCheckBox.setChecked(settings.value(u'save current plugin')) + self.doubleClickLiveCheckBox.setChecked(settings.value(u'double click live')) + self.singleClickPreviewCheckBox.setChecked(settings.value(u'single click preview')) + self.expandServiceItemCheckBox.setChecked(settings.value(u'expand service item')) + self.enableAutoCloseCheckBox.setChecked(settings.value(u'enable exit confirmation')) + self.hideMouseCheckBox.setChecked(settings.value(u'hide mouse')) + self.serviceNameDay.setCurrentIndex(settings.value(u'default service day')) + self.serviceNameTime.setTime(QtCore.QTime(settings.value(u'default service hour'), + settings.value(u'default service minute'))) self.shouldUpdateServiceNameExample = True - self.serviceNameEdit.setText(settings.value(u'default service name', - self.defaultServiceName)) - default_service_enabled = settings.value(u'default service enabled', True) + self.serviceNameEdit.setText(settings.value(u'default service name')) + default_service_enabled = settings.value(u'default service enabled') self.serviceNameCheckBox.setChecked(default_service_enabled) self.serviceNameCheckBoxToggled(default_service_enabled) - # Fix for bug #1014422. - x11_bypass_default = True - if sys.platform.startswith(u'linux'): - # 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') - self.defaultFileEdit.setText(settings.value(u'default image', u':/graphics/openlp-splash-screen.png')) - self.slide_limits = settings.value(u'slide limits', SlideLimits.End) + self.x11BypassCheckBox.setChecked(settings.value(u'x11 bypass wm')) + self.defaultColor = settings.value(u'default color') + self.defaultFileEdit.setText(settings.value(u'default image')) + self.slide_limits = settings.value(u'slide limits') if self.slide_limits == SlideLimits.End: self.endSlideRadioButton.setChecked(True) elif self.slide_limits == SlideLimits.Wrap: @@ -423,7 +402,7 @@ class AdvancedTab(SettingsTab): self.dataDirectoryLabel.setText(os.path.abspath(self.currentDataPath)) self.defaultColorButton.setStyleSheet(u'background-color: %s' % self.defaultColor) # Don't allow data directory move if running portable. - if settings.value(u'advanced/is portable', False): + if settings.value(u'advanced/is portable'): self.dataDirectoryGroupBox.hide() def save(self): @@ -432,11 +411,10 @@ class AdvancedTab(SettingsTab): """ settings = Settings() settings.beginGroup(self.settingsSection) - settings.setValue(u'default service enabled', - self.serviceNameCheckBox.isChecked()) + settings.setValue(u'default service enabled', self.serviceNameCheckBox.isChecked()) service_name = self.serviceNameEdit.text() preset_is_valid = self.generateServiceNameExample()[0] - if service_name == self.defaultServiceName or not preset_is_valid: + if service_name == UiStrings().DefaultServiceName or not preset_is_valid: settings.remove(u'default service name') self.serviceNameEdit.setText(service_name) else: @@ -503,7 +481,7 @@ class AdvancedTab(SettingsTab): self.updateServiceNameExample(None) def onServiceNameRevertButtonClicked(self): - self.serviceNameEdit.setText(self.defaultServiceName) + self.serviceNameEdit.setText(UiStrings().DefaultServiceName) self.serviceNameEdit.setFocus() def onDefaultColorButtonClicked(self): @@ -528,9 +506,9 @@ class AdvancedTab(SettingsTab): """ old_root_path = unicode(self.dataDirectoryLabel.text()) # Get the new directory location. - new_data_path = unicode(QtGui.QFileDialog.getExistingDirectory(self, + new_data_path = QtGui.QFileDialog.getExistingDirectory(self, translate('OpenLP.AdvancedTab', 'Select Data Directory Location'), old_root_path, - options = QtGui.QFileDialog.ShowDirsOnly)) + options = QtGui.QFileDialog.ShowDirsOnly) # Set the new data path. if new_data_path: new_data_path = os.path.normpath(new_data_path) diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index 2fcc67071..213a66388 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -85,8 +85,7 @@ except AttributeError: WEBKIT_VERSION = u'-' -from openlp.core.lib import translate, SettingsManager -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import translate, UiStrings, Settings from openlp.core.utils import get_application_version from exceptiondialog import Ui_ExceptionDialog @@ -147,12 +146,12 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): '--- Library Versions ---\n%s\n') filename = QtGui.QFileDialog.getSaveFileName(self, translate('OpenLP.ExceptionForm', 'Save Crash Report'), - SettingsManager.get_last_dir(self.settingsSection), + Settings().value(self.settingsSection + u'/last directory'), translate('OpenLP.ExceptionForm', 'Text files (*.txt *.log *.text)')) if filename: filename = unicode(filename).replace(u'/', os.path.sep) - SettingsManager.set_last_dir(self.settingsSection, os.path.dirname(filename)) + Settings().setValue(self.settingsSection + u'/last directory', os.path.dirname(filename)) report_text = report_text % self._createReport() try: report_file = open(filename, u'w') @@ -212,7 +211,7 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): def onAttachFileButtonClicked(self): files = QtGui.QFileDialog.getOpenFileName( self, translate('ImagePlugin.ExceptionDialog', 'Select Attachment'), - SettingsManager.get_last_dir(u'exceptions'), u'%s (*.*) (*)' % UiStrings().AllFiles) + Settings().value(self.settingsSection + u'/last directory'), u'%s (*.*) (*)' % UiStrings().AllFiles) log.info(u'New files(s) %s', unicode(files)) if files: self.fileAttachment = unicode(files) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index f979fc5a5..95ae35d5d 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -116,7 +116,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): unicode(gettempdir(), get_filesystem_encoding()), u'openlp')) self.noInternetFinishButton.setVisible(False) # Check if this is a re-run of the wizard. - self.hasRunWizard = Settings().value(u'general/has run wizard', False) + self.hasRunWizard = Settings().value(u'general/has run wizard') # Sort out internet access for downloads if self.webAccess: songs = self.config.get(u'songs', u'languages') @@ -202,7 +202,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): index = self.themeComboBox.findText(theme) if index == -1: self.themeComboBox.addItem(theme) - default_theme = Settings().value(u'themes/global theme', u'') + default_theme = Settings().value(u'themes/global theme') # Pre-select the current default theme. index = self.themeComboBox.findText(default_theme) self.themeComboBox.setCurrentIndex(index) diff --git a/openlp/core/ui/formattingtagdialog.py b/openlp/core/ui/formattingtagdialog.py index 1477235ab..9d98ec38e 100644 --- a/openlp/core/ui/formattingtagdialog.py +++ b/openlp/core/ui/formattingtagdialog.py @@ -29,8 +29,9 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate -from openlp.core.lib.ui import UiStrings, create_button_box +from openlp.core.lib import translate, UiStrings +from openlp.core.lib.ui import create_button_box + class Ui_FormattingTagDialog(object): diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 3328e06e2..31a07037a 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -30,9 +30,7 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, Settings, SettingsTab, translate -from openlp.core.lib.ui import UiStrings -from openlp.core.ui import ScreenList +from openlp.core.lib import Receiver, Settings, SettingsTab, translate, ScreenList, UiStrings log = logging.getLogger(__name__) @@ -247,28 +245,28 @@ class GeneralTab(SettingsTab): settings.beginGroup(self.settingsSection) self.monitorComboBox.clear() self.monitorComboBox.addItems(self.screens.get_screen_list()) - monitorNumber = settings.value(u'monitor', self.screens.display_count - 1) + monitorNumber = settings.value(u'monitor') self.monitorComboBox.setCurrentIndex(monitorNumber) - self.numberEdit.setText(settings.value(u'ccli number', u'')) - self.usernameEdit.setText(settings.value(u'songselect username', u'')) - self.passwordEdit.setText(settings.value(u'songselect password', u'')) - self.saveCheckServiceCheckBox.setChecked(settings.value(u'save prompt', False)) - self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank', False)) + self.numberEdit.setText(settings.value(u'ccli number')) + self.usernameEdit.setText(settings.value(u'songselect username')) + self.passwordEdit.setText(settings.value(u'songselect password')) + self.saveCheckServiceCheckBox.setChecked(settings.value(u'save prompt')) + self.autoUnblankCheckBox.setChecked(settings.value(u'auto unblank')) self.displayOnMonitorCheck.setChecked(self.screens.display) - self.warningCheckBox.setChecked(settings.value(u'blank warning', False)) - self.autoOpenCheckBox.setChecked(settings.value(u'auto open', False)) - self.showSplashCheckBox.setChecked(settings.value(u'show splash', True)) - self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check', True)) - self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview', False)) - self.timeoutSpinBox.setValue(settings.value(u'loop delay', 5)) - self.monitorRadioButton.setChecked(not settings.value(u'override position', False)) - self.overrideRadioButton.setChecked(settings.value(u'override position', False)) - self.customXValueEdit.setValue(settings.value(u'x position', self.screens.current[u'size'].x())) - self.customYValueEdit.setValue(settings.value(u'y position', self.screens.current[u'size'].y())) - self.customHeightValueEdit.setValue(settings.value(u'height', self.screens.current[u'size'].height())) - self.customWidthValueEdit.setValue(settings.value(u'width', self.screens.current[u'size'].width())) - self.startPausedCheckBox.setChecked(settings.value(u'audio start paused', True)) - self.repeatListCheckBox.setChecked(settings.value(u'audio repeat list', False)) + self.warningCheckBox.setChecked(settings.value(u'blank warning')) + self.autoOpenCheckBox.setChecked(settings.value(u'auto open')) + self.showSplashCheckBox.setChecked(settings.value(u'show splash')) + self.checkForUpdatesCheckBox.setChecked(settings.value(u'update check')) + self.autoPreviewCheckBox.setChecked(settings.value(u'auto preview')) + self.timeoutSpinBox.setValue(settings.value(u'loop delay')) + self.monitorRadioButton.setChecked(not settings.value(u'override position',)) + self.overrideRadioButton.setChecked(settings.value(u'override position')) + self.customXValueEdit.setValue(settings.value(u'x position')) + self.customYValueEdit.setValue(settings.value(u'y position')) + self.customHeightValueEdit.setValue(settings.value(u'height')) + self.customWidthValueEdit.setValue(settings.value(u'width')) + self.startPausedCheckBox.setChecked(settings.value(u'audio start paused')) + self.repeatListCheckBox.setChecked(settings.value(u'audio repeat list')) settings.endGroup() self.monitorComboBox.setDisabled(self.overrideRadioButton.isChecked()) self.customXValueEdit.setEnabled(self.overrideRadioButton.isChecked()) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index ce4f3efe4..e14309257 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -42,7 +42,8 @@ from openlp.core.lib import Receiver, build_html, ServiceItem, image_to_byte, tr Settings, ImageSource from openlp.core.lib.theme import BackgroundType -from openlp.core.ui import HideMode, ScreenList, AlertLocation +from openlp.core.lib import ScreenList +from openlp.core.ui import HideMode, AlertLocation log = logging.getLogger(__name__) @@ -131,18 +132,8 @@ class MainDisplay(Display): self.firstTime = True self.webLoaded = True self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;') - windowFlags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | \ - QtCore.Qt.WindowStaysOnTopHint - # Fix for bug #1014422. - x11_bypass_default = True - if sys.platform.startswith(u'linux'): - # 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.FramelessWindowHint | QtCore.Qt.Tool | QtCore.Qt.WindowStaysOnTopHint + if Settings().value(u'advanced/x11 bypass wm'): windowFlags |= QtCore.Qt.X11BypassWindowManagerHint # TODO: The following combination of windowFlags works correctly # on Mac OS X. For next OpenLP version we should test it on other @@ -204,10 +195,10 @@ class MainDisplay(Display): if self.isLive: # Build the initial frame. background_color = QtGui.QColor() - background_color.setNamedColor(Settings().value(u'advanced/default color', u'#ffffff')) + background_color.setNamedColor(Settings().value(u'advanced/default color')) if not background_color.isValid(): background_color = QtCore.Qt.white - image_file = Settings().value(u'advanced/default image', u':/graphics/openlp-splash-screen.png') + image_file = Settings().value(u'advanced/default image') splash_image = QtGui.QImage(image_file) self.initialFrame = QtGui.QImage( self.screen[u'size'].width(), @@ -364,7 +355,7 @@ class MainDisplay(Display): # Single screen active if self.screens.display_count == 1: # Only make visible if setting enabled. - if Settings().value(u'general/display on monitor', True): + if Settings().value(u'general/display on monitor'): self.setVisible(True) else: self.setVisible(True) @@ -410,7 +401,7 @@ class MainDisplay(Display): self.footer(serviceItem.foot_text) # if was hidden keep it hidden if self.hideMode and self.isLive and not serviceItem.is_media(): - if Settings().value(u'general/auto unblank', False): + if Settings().value(u'general/auto unblank'): Receiver.send_message(u'slidecontroller_live_unblank') else: self.hideDisplay(self.hideMode) @@ -432,7 +423,7 @@ class MainDisplay(Display): log.debug(u'hideDisplay mode = %d', mode) if self.screens.display_count == 1: # Only make visible if setting enabled. - if not Settings().value(u'general/display on monitor', True): + if not Settings().value(u'general/display on monitor'): return if mode == HideMode.Screen: self.frame.evaluateJavaScript(u'show_blank("desktop");') @@ -456,7 +447,7 @@ class MainDisplay(Display): log.debug(u'showDisplay') if self.screens.display_count == 1: # Only make visible if setting enabled. - if not Settings().value(u'general/display on monitor', True): + if not Settings().value(u'general/display on monitor'): return self.frame.evaluateJavaScript('show_blank("show");') if self.isHidden(): @@ -470,7 +461,7 @@ class MainDisplay(Display): """ Hide mouse cursor when moved over display. """ - if Settings().value(u'advanced/hide mouse', True): + if Settings().value(u'advanced/hide mouse'): self.setCursor(QtCore.Qt.BlankCursor) self.frame.evaluateJavaScript('document.body.style.cursor = "none"') else: diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 6ba7a4d6d..75a81d548 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -40,9 +40,9 @@ from datetime import datetime from PyQt4 import QtCore, QtGui from openlp.core.lib import Renderer, build_icon, OpenLPDockWidget, PluginManager, Receiver, translate, ImageManager, \ - PluginStatus -from openlp.core.lib.ui import UiStrings, create_action -from openlp.core.lib import SlideLimits, Settings + PluginStatus, ScreenList, UiStrings +from openlp.core.lib.ui import create_action +from openlp.core.lib import Settings from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, ThemeManager, SlideController, PluginForm, \ MediaDockManager, ShortcutListForm, FormattingTagForm from openlp.core.ui.media import MediaController @@ -50,7 +50,6 @@ from openlp.core.utils import AppLocation, add_actions, LanguageManager, get_app get_filesystem_encoding from openlp.core.utils.actions import ActionList, CategoryOrder from openlp.core.ui.firsttimeform import FirstTimeForm -from openlp.core.ui import ScreenList log = logging.getLogger(__name__) @@ -80,6 +79,7 @@ PROGRESSBAR_STYLE = """ } """ + class Ui_MainWindow(object): def setupUi(self, mainWindow): """ @@ -103,10 +103,10 @@ class Ui_MainWindow(object): # Create slide controllers self.previewController = SlideController(self) self.liveController = SlideController(self, True) - previewVisible = Settings().value(u'user interface/preview panel', True) + previewVisible = Settings().value(u'user interface/preview panel') self.previewController.panel.setVisible(previewVisible) - liveVisible = Settings().value(u'user interface/live panel', True) - panelLocked = Settings().value(u'user interface/lock panel', False) + liveVisible = Settings().value(u'user interface/live panel') + panelLocked = Settings().value(u'user interface/lock panel') self.liveController.panel.setVisible(liveVisible) # Create menu self.menuBar = QtGui.QMenuBar(mainWindow) @@ -232,7 +232,7 @@ class Ui_MainWindow(object): checked=panelLocked, triggers=self.setLockPanel) action_list.add_category(UiStrings().ViewMode, CategoryOrder.standardMenu) - self.modeDefaultItem = create_action(mainWindow, u'modeDefaultItem', checked=False, + self.modeDefaultItem = create_action(mainWindow, u'modeDefaultItem', checked=False, category=UiStrings().ViewMode) self.modeSetupItem = create_action(mainWindow, u'modeSetupItem', checked=False, category=UiStrings().ViewMode) self.modeLiveItem = create_action(mainWindow, u'modeLiveItem', checked=True, category=UiStrings().ViewMode) @@ -459,8 +459,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.application = application self.clipboard = self.application.clipboard() self.arguments = self.application.args - # Set up settings sections for the main application - # (not for use by plugins) + # Set up settings sections for the main application (not for use by plugins). self.uiSettingsSection = u'user interface' self.generalSettingsSection = u'general' self.advancedSettingsSection = u'advanced' @@ -471,6 +470,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.playersSettingsSection = u'players' self.displayTagsSection = u'displayTags' self.headerSection = u'SettingsImport' + Settings().set_up_default_values() + Settings().remove_obsolete_settings() self.serviceNotSaved = False self.aboutForm = AboutForm(self) self.mediaController = MediaController(self) @@ -579,8 +580,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.previewController.screenSizeChanged() self.liveController.screenSizeChanged() log.info(u'Load data from Settings') - if Settings().value(u'advanced/save current plugin', False): - savedPlugin = Settings().value(u'advanced/current media plugin', -1) + if Settings().value(u'advanced/save current plugin'): + savedPlugin = Settings().value(u'advanced/current media plugin') if savedPlugin != -1: self.mediaToolBox.setCurrentIndex(savedPlugin) self.settingsForm.postSetUp() @@ -629,10 +630,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if not isinstance(filename, unicode): filename = unicode(filename, sys.getfilesystemencoding()) self.serviceManagerContents.loadFile(filename) - elif Settings().value( - self.generalSettingsSection + u'/auto open', False): + elif Settings().value(self.generalSettingsSection + u'/auto open'): self.serviceManagerContents.loadLastFile() - view_mode = Settings().value(u'%s/view mode' % self.generalSettingsSection, u'default') + view_mode = Settings().value(u'%s/view mode' % self.generalSettingsSection) if view_mode == u'default': self.modeDefaultItem.setChecked(True) elif view_mode == u'setup': @@ -710,10 +710,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ settings = Settings() self.liveController.mainDisplaySetBackground() - if settings.value(u'%s/screen blank' % self.generalSettingsSection, - False): - if settings.value(u'%s/blank warning' % self.generalSettingsSection, - False): + if settings.value(u'%s/screen blank' % self.generalSettingsSection): + if settings.value(u'%s/blank warning' % self.generalSettingsSection): QtGui.QMessageBox.question(self, translate('OpenLP.MainWindow', 'OpenLP Main Display Blanked'), translate('OpenLP.MainWindow', 'The Main Display has been blanked out')) @@ -837,7 +835,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Lets do a basic sanity check. If it contains this string we can # assume it was created by OpenLP and so we'll load what we can # from it, and just silently ignore anything we don't recognise - if import_settings.value(u'SettingsImport/type', u'') != u'OpenLP_settings_export': + if import_settings.value(u'SettingsImport/type') != u'OpenLP_settings_export': QtGui.QMessageBox.critical(self, translate('OpenLP.MainWindow', 'Import settings'), translate('OpenLP.MainWindow', 'The file you have selected does not appear to be a valid OpenLP ' 'settings file.\n\nProcessing has terminated and no changes have been made.'), @@ -860,7 +858,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): continue # We have a good file, import it. for section_key in import_keys: - value = import_settings.value(section_key, None) + if u'eneral' in section_key: + section_key = section_key.lower() + value = import_settings.value(section_key) if value is not None: settings.setValue(u'%s' % (section_key), value) now = datetime.now() @@ -926,13 +926,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): export_settings.beginGroup(self.headerSection) export_settings.setValue(u'Make_Changes', u'At_Own_RISK') export_settings.setValue(u'type', u'OpenLP_settings_export') - export_settings.setValue(u'file_date_created', - now.strftime("%Y-%m-%d %H:%M")) + export_settings.setValue(u'file_date_created', now.strftime("%Y-%m-%d %H:%M")) export_settings.setValue(u'version', application_version[u'full']) export_settings.endGroup() # Write all the sections and keys. for section_key in keys: - key_value = settings.value(section_key, None) + # FIXME: We are conflicting with the standard "General" section. + section_key = section_key.lower() + key_value = settings.value(section_key) if key_value is not None: export_settings.setValue(section_key, key_value) export_settings.sync() @@ -940,11 +941,11 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Read the temp file and output the user's CONF file with blanks to # make it more readable. temp_conf = open(temp_file, u'r') - export_conf = open(export_file_name, u'w') + export_conf = open(export_file_name, u'w') for file_record in temp_conf: # Get rid of any invalid entries. if file_record.find(u'@Invalid()') == -1: - file_record = file_record.replace(u'%20', u' ') + file_record = file_record.replace(u'%20', u' ') export_conf.write(file_record) temp_conf.close() export_conf.close() @@ -1025,7 +1026,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): else: event.ignore() else: - if Settings().value(u'advanced/enable exit confirmation', True): + if Settings().value(u'advanced/enable exit confirmation'): ret = QtGui.QMessageBox.question(self, translate('OpenLP.MainWindow', 'Close OpenLP'), translate('OpenLP.MainWindow', 'Are you sure you want to close OpenLP?'), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), @@ -1052,7 +1053,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Clean temporary files used by services self.serviceManagerContents.cleanUp() if save_settings: - if Settings().value(u'advanced/save current plugin', False): + if Settings().value(u'advanced/save current plugin'): Settings().setValue(u'advanced/current media plugin', self.mediaToolBox.currentIndex()) # Call the cleanup method to shutdown plugins. log.info(u'cleanup plugins') @@ -1181,28 +1182,20 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): Load the main window settings. """ log.debug(u'Loading QSettings') - # Migrate Wrap Settings to Slide Limits Settings - if Settings().contains(self.generalSettingsSection + u'/enable slide loop'): - if Settings().value(self.generalSettingsSection + u'/enable slide loop', True): - Settings().setValue(self.advancedSettingsSection + u'/slide limits', SlideLimits.Wrap) - else: - Settings().setValue(self.advancedSettingsSection + u'/slide limits', SlideLimits.End) - Settings().remove(self.generalSettingsSection + u'/enable slide loop') - Receiver.send_message(u'slidecontroller_update_slide_limits') settings = Settings() # Remove obsolete entries. settings.remove(u'custom slide') settings.remove(u'service') settings.beginGroup(self.generalSettingsSection) - self.recentFiles = settings.value(u'recent files', self.recentFiles) + self.recentFiles = settings.value(u'recent files') settings.endGroup() settings.beginGroup(self.uiSettingsSection) - self.move(settings.value(u'main window position', QtCore.QPoint(0, 0))) - self.restoreGeometry(settings.value(u'main window geometry', QtCore.QByteArray())) - self.restoreState(settings.value(u'main window state', QtCore.QByteArray())) - self.liveController.splitter.restoreState(settings.value(u'live splitter geometry', QtCore.QByteArray())) - self.previewController.splitter.restoreState(settings.value(u'preview splitter geometry', QtCore.QByteArray())) - self.controlSplitter.restoreState(settings.value(u'mainwindow splitter geometry', QtCore.QByteArray())) + self.move(settings.value(u'main window position')) + self.restoreGeometry(settings.value(u'main window geometry')) + self.restoreState(settings.value(u'main window state')) + self.liveController.splitter.restoreState(settings.value(u'live splitter geometry')) + self.previewController.splitter.restoreState(settings.value(u'preview splitter geometry')) + self.controlSplitter.restoreState(settings.value(u'mainwindow splitter geometry')) settings.endGroup() def saveSettings(self): @@ -1231,7 +1224,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): Updates the recent file menu with the latest list of service files accessed. """ - recentFileCount = Settings().value(u'advanced/recent file count', 4) + recentFileCount = Settings().value(u'advanced/recent file count') existingRecentFiles = [recentFile for recentFile in self.recentFiles if os.path.isfile(unicode(recentFile))] recentFilesToDisplay = existingRecentFiles[0:recentFileCount] @@ -1261,7 +1254,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # The maxRecentFiles value does not have an interface and so never gets # actually stored in the settings therefore the default value of 20 will # always be used. - maxRecentFiles = Settings().value(u'advanced/max recent files', 20) + maxRecentFiles = Settings().value(u'advanced/max recent files') if filename: # Add some cleanup to reduce duplication in the recent file list filename = os.path.abspath(filename) @@ -1332,7 +1325,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): '- Please wait for copy to finish').replace('%s', self.newDataPath)) dir_util.copy_tree(old_data_path, self.newDataPath) log.info(u'Copy sucessful') - except (IOError, os.error, DistutilsFileError), why: + except (IOError, os.error, DistutilsFileError), why: Receiver.send_message(u'cursor_normal') log.exception(u'Data copy failed %s' % unicode(why)) QtGui.QMessageBox.critical(self, translate('OpenLP.MainWindow', 'New Data Directory Error'), diff --git a/openlp/core/ui/media/__init__.py b/openlp/core/ui/media/__init__.py index 9653bb5ce..10c206b10 100644 --- a/openlp/core/ui/media/__init__.py +++ b/openlp/core/ui/media/__init__.py @@ -76,10 +76,9 @@ def get_media_players(): from the settings. """ log.debug(u'get_media_players') - saved_players = Settings().value(u'media/players', u'webkit') + saved_players = Settings().value(u'media/players') reg_ex = QtCore.QRegExp(".*\[(.*)\].*") - if Settings().value(u'media/override player', - QtCore.Qt.Unchecked)== QtCore.Qt.Checked: + if Settings().value(u'media/override player') == QtCore.Qt.Checked: if reg_ex.exactMatch(saved_players): overridden_player = u'%s' % reg_ex.cap(1) else: diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index f371610f0..4ba327b21 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -32,8 +32,8 @@ import os import datetime from PyQt4 import QtCore, QtGui -from openlp.core.lib import OpenLPToolbar, Receiver, translate, Settings -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib import OpenLPToolbar, Receiver, translate, Settings, UiStrings +from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui.media import MediaState, MediaInfo, MediaType, get_media_players, set_media_players from openlp.core.ui.media.mediaplayer import MediaPlayer from openlp.core.utils import AppLocation @@ -409,7 +409,7 @@ class MediaController(object): elif not hidden or controller.media_info.is_background or serviceItem.will_auto_start: autoplay = True # Unblank on load set - elif Settings().value(u'general/auto unblank', False): + elif Settings().value(u'general/auto unblank'): autoplay = True if autoplay: if not self.media_play(controller): diff --git a/openlp/core/ui/media/phononplayer.py b/openlp/core/ui/media/phononplayer.py index bcba26e2d..da2d19857 100644 --- a/openlp/core/ui/media/phononplayer.py +++ b/openlp/core/ui/media/phononplayer.py @@ -223,7 +223,7 @@ class PhononPlayer(MediaPlayer): """ Add css style sheets to htmlbuilder """ - background = QtGui.QColor(Settings().value(u'players/background color', u'#000000')).name() + background = QtGui.QColor(Settings().value(u'players/background color')).name() return VIDEO_CSS % (background,background,background) def get_info(self): diff --git a/openlp/core/ui/media/playertab.py b/openlp/core/ui/media/playertab.py index ee6f80246..a0cab2e48 100644 --- a/openlp/core/ui/media/playertab.py +++ b/openlp/core/ui/media/playertab.py @@ -29,8 +29,8 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, translate, Receiver, Settings -from openlp.core.lib.ui import UiStrings, create_button +from openlp.core.lib import SettingsTab, translate, Receiver, Settings, UiStrings +from openlp.core.lib.ui import create_button from openlp.core.ui.media import get_media_players, set_media_players class MediaQCheckBox(QtGui.QCheckBox): @@ -177,7 +177,7 @@ class PlayerTab(SettingsTab): settings = Settings() settings.beginGroup(self.settingsSection) self.updatePlayerList() - self.bg_color = settings.value(u'background color', u'#000000') + self.bg_color = settings.value(u'background color') self.initial_color = self.bg_color settings.endGroup() self.backgroundColorButton.setStyleSheet(u'background-color: %s' % self.bg_color) diff --git a/openlp/core/ui/media/vlcplayer.py b/openlp/core/ui/media/vlcplayer.py index 20191d5b6..6f3e3d0e7 100644 --- a/openlp/core/ui/media/vlcplayer.py +++ b/openlp/core/ui/media/vlcplayer.py @@ -114,7 +114,7 @@ class VlcPlayer(MediaPlayer): command_line_options = u'--no-video-title-show' if not display.hasAudio: command_line_options += u' --no-audio --no-video-title-show' - if Settings().value(u'advanced/hide mouse', True) and display.controller.isLive: + if Settings().value(u'advanced/hide mouse') and display.controller.isLive: command_line_options += u' --mouse-hide-timeout=0' display.vlcInstance = vlc.Instance(command_line_options) display.vlcInstance.set_log_verbosity(2) diff --git a/openlp/core/ui/media/webkitplayer.py b/openlp/core/ui/media/webkitplayer.py index ff21a879b..ce72f4583 100644 --- a/openlp/core/ui/media/webkitplayer.py +++ b/openlp/core/ui/media/webkitplayer.py @@ -253,7 +253,7 @@ VIDEO_EXT = [ , u'*.mp4' , u'*.ogv' , u'*.webm' - , u'*.mpg', u'*.wmv', u'*.mpeg', u'*.avi' + , u'*.mpg', u'*.wmv', u'*.mpeg', u'*.avi' , u'*.swf' ] @@ -282,7 +282,7 @@ class WebkitPlayer(MediaPlayer): """ Add css style sheets to htmlbuilder """ - background = QtGui.QColor(Settings().value(u'players/background color', u'#000000')).name() + background = QtGui.QColor(Settings().value(u'players/background color')).name() css = VIDEO_CSS % (background,background,background) return css + FLASH_CSS diff --git a/openlp/core/ui/plugindialog.py b/openlp/core/ui/plugindialog.py index eca4f2de2..06bfbe0c2 100644 --- a/openlp/core/ui/plugindialog.py +++ b/openlp/core/ui/plugindialog.py @@ -29,8 +29,9 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate -from openlp.core.lib.ui import UiStrings, create_button_box +from openlp.core.lib import translate, UiStrings +from openlp.core.lib.ui import create_button_box + class Ui_PluginViewDialog(object): def setupUi(self, pluginViewDialog): diff --git a/openlp/core/ui/printservicedialog.py b/openlp/core/ui/printservicedialog.py index 3fd49dc7a..0a7ab4874 100644 --- a/openlp/core/ui/printservicedialog.py +++ b/openlp/core/ui/printservicedialog.py @@ -29,8 +29,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, translate, SpellTextEdit -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import build_icon, translate, SpellTextEdit, UiStrings class ZoomSize(object): """ diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 70afca604..0cdba6c9b 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -33,8 +33,7 @@ import os from PyQt4 import QtCore, QtGui from lxml import html -from openlp.core.lib import translate, get_text_file_string, Receiver, Settings -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import translate, get_text_file_string, Receiver, Settings, UiStrings from openlp.core.ui.printservicedialog import Ui_PrintServiceDialog, ZoomSize from openlp.core.utils import AppLocation @@ -124,13 +123,13 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): # Load the settings for the dialog. settings = Settings() settings.beginGroup(u'advanced') - self.slideTextCheckBox.setChecked(settings.value(u'print slide text', False)) - self.pageBreakAfterText.setChecked(settings.value(u'add page break', False)) + self.slideTextCheckBox.setChecked(settings.value(u'print slide text')) + self.pageBreakAfterText.setChecked(settings.value(u'add page break')) if not self.slideTextCheckBox.isChecked(): self.pageBreakAfterText.setDisabled(True) - self.metaDataCheckBox.setChecked(settings.value(u'print file meta data', False)) - self.notesCheckBox.setChecked(settings.value(u'print notes', False)) - self.zoomComboBox.setCurrentIndex(settings.value(u'display size', 0)) + self.metaDataCheckBox.setChecked(settings.value(u'print file meta data')) + self.notesCheckBox.setChecked(settings.value(u'print notes')) + self.zoomComboBox.setCurrentIndex(settings.value(u'display size')) settings.endGroup() # Signals QtCore.QObject.connect(self.printButton, QtCore.SIGNAL(u'triggered()'), self.printServiceOrder) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 92c98f59c..223313e3e 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -39,10 +39,10 @@ log = logging.getLogger(__name__) from PyQt4 import QtCore, QtGui -from openlp.core.lib import OpenLPToolbar, ServiceItem, Receiver, build_icon, ItemCapabilities, SettingsManager, \ - translate, str_to_bool, check_directory_exists, Settings, PluginStatus +from openlp.core.lib import OpenLPToolbar, ServiceItem, Receiver, build_icon, ItemCapabilities, \ + translate, str_to_bool, check_directory_exists, Settings, PluginStatus, UiStrings from openlp.core.lib.theme import ThemeLevel -from openlp.core.lib.ui import UiStrings, critical_error_message_box, create_widget_action, find_and_set_in_combo_box +from openlp.core.lib.ui import critical_error_message_box, create_widget_action, find_and_set_in_combo_box from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.utils import AppLocation, delete_file, split_filename, format_time @@ -230,7 +230,7 @@ class ServiceManager(QtGui.QWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_global'), self.themeChange) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate) # Last little bits of setting up - self.service_theme = Settings().value(self.mainwindow.serviceManagerSettingsSection + u'/service theme', u'') + self.service_theme = Settings().value(self.mainwindow.serviceManagerSettingsSection + u'/service theme') self.servicePath = AppLocation.get_section_data_path(u'servicemanager') # build the drag and drop context menu self.dndMenu = QtGui.QMenu() @@ -245,7 +245,7 @@ class ServiceManager(QtGui.QWidget): self.maintainAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Reorder Item'), icon=u':/general/general_edit.png', triggers=self.onServiceItemEditForm) self.notesAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Notes'), - icon=u':/services/service_notes.png', triggers=self.onServiceItemNoteForm) + icon=u':/services/service_notes.png', triggers=self.onServiceItemNoteForm) self.timeAction = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Start Time'), icon=u':/media/media_time.png', triggers=self.onStartTimeForm) self.autoStartAction = create_widget_action(self.menu, text=u'', @@ -333,7 +333,7 @@ class ServiceManager(QtGui.QWidget): """ Triggered when Config dialog is updated. """ - self.expandTabs = Settings().value(u'advanced/expand service item', False) + self.expandTabs = Settings().value(u'advanced/expand service item') def resetSupportedSuffixes(self): """ @@ -383,13 +383,13 @@ class ServiceManager(QtGui.QWidget): if not loadFile: fileName = QtGui.QFileDialog.getOpenFileName(self.mainwindow, translate('OpenLP.ServiceManager', 'Open File'), - SettingsManager.get_last_dir(self.mainwindow.serviceManagerSettingsSection), + Settings().value(self.mainwindow.serviceManagerSettingsSection + u'/last directory'), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz *.oszl)')) if not fileName: return False else: fileName = loadFile - SettingsManager.set_last_dir(self.mainwindow.serviceManagerSettingsSection, split_filename(fileName)[0]) + Settings().setValue(self.mainwindow.serviceManagerSettingsSection + u'/last directory', split_filename(fileName)[0]) self.loadFile(fileName) def saveModifiedService(self): @@ -441,7 +441,7 @@ class ServiceManager(QtGui.QWidget): basename = os.path.splitext(file_name)[0] service_file_name = '%s.osd' % basename log.debug(u'ServiceManager.saveFile - %s', path_file_name) - SettingsManager.set_last_dir(self.mainwindow.serviceManagerSettingsSection, path) + Settings().setValue(self.mainwindow.serviceManagerSettingsSection + u'/last directory', path) service = [] write_list = [] missing_list = [] @@ -561,7 +561,7 @@ class ServiceManager(QtGui.QWidget): base_name = os.path.splitext(file_name)[0] service_file_name = '%s.osd' % base_name log.debug(u'ServiceManager.saveFile - %s', path_file_name) - SettingsManager.set_last_dir(self.mainwindow.serviceManagerSettingsSection, path) + Settings().setValue(self.mainwindow.serviceManagerSettingsSection + u'/last directory', path) service = [] Receiver.send_message(u'cursor_busy') # Number of items + 1 to zip it @@ -608,29 +608,25 @@ class ServiceManager(QtGui.QWidget): Get a file name and then call :func:`ServiceManager.saveFile` to save the file. """ - default_service_enabled = Settings().value(u'advanced/default service enabled', True) + default_service_enabled = Settings().value(u'advanced/default service enabled') if default_service_enabled: - service_day = Settings().value(u'advanced/default service day', 7) + service_day = Settings().value(u'advanced/default service day') if service_day == 7: local_time = datetime.now() else: - service_hour = Settings().value(u'advanced/default service hour', 11) - service_minute = Settings().value(u'advanced/default service minute', 0) + service_hour = Settings().value(u'advanced/default service hour') + service_minute = Settings().value(u'advanced/default service minute') now = datetime.now() day_delta = service_day - now.weekday() if day_delta < 0: day_delta += 7 time = now + timedelta(days=day_delta) local_time = time.replace(hour=service_hour, minute=service_minute) - default_pattern = Settings().value(u'advanced/default service name', - translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M', - 'This may not contain any of the following characters: ' - '/\\?*|<>\[\]":+\nSee http://docs.python.org/library/' - 'datetime.html#strftime-strptime-behavior for more information.')) + default_pattern = Settings().value(u'advanced/default service name') default_filename = format_time(default_pattern, local_time) else: default_filename = u'' - directory = SettingsManager.get_last_dir(self.mainwindow.serviceManagerSettingsSection) + directory = Settings().value(self.mainwindow.serviceManagerSettingsSection + u'/last directory') path = os.path.join(directory, default_filename) # SaveAs from osz to oszl is not valid as the files will be deleted # on exit which is not sensible or usable in the long term. @@ -754,7 +750,7 @@ class ServiceManager(QtGui.QWidget): service was last closed. Can be blank if there was no service present. """ - fileName = Settings().value(u'servicemanager/last file', u'') + fileName = Settings().value(u'servicemanager/last file') if fileName: self.loadFile(fileName) @@ -853,7 +849,7 @@ class ServiceManager(QtGui.QWidget): service_item.auto_play_slides_loop = False self.autoPlaySlidesLoop.setChecked(False) if service_item.auto_play_slides_once and service_item.timed_slide_interval == 0: - service_item.timed_slide_interval = Settings().value(u'loop delay', 5) + service_item.timed_slide_interval = Settings().value(u'loop delay') self.setModified() def toggleAutoPlaySlidesLoop(self): @@ -867,7 +863,7 @@ class ServiceManager(QtGui.QWidget): service_item.auto_play_slides_once = False self.autoPlaySlidesOnce.setChecked(False) if service_item.auto_play_slides_loop and service_item.timed_slide_interval == 0: - service_item.timed_slide_interval = Settings().value(u'loop delay', 5) + service_item.timed_slide_interval = Settings().value(u'loop delay') self.setModified() def onTimedSlideInterval(self): @@ -878,7 +874,7 @@ class ServiceManager(QtGui.QWidget): item = self.findServiceItem()[0] service_item = self.serviceItems[item][u'service_item'] if service_item.timed_slide_interval == 0: - timed_slide_interval = Settings().value(u'loop delay', 5) + timed_slide_interval = Settings().value(u'loop delay') else: timed_slide_interval = service_item.timed_slide_interval timed_slide_interval, ok = QtGui.QInputDialog.getInteger(self, translate('OpenLP.ServiceManager', @@ -1368,7 +1364,7 @@ class ServiceManager(QtGui.QWidget): if self.serviceItems[item][u'service_item'].is_valid: self.mainwindow.liveController.addServiceManagerItem( self.serviceItems[item][u'service_item'], child) - if Settings().value(self.mainwindow.generalSettingsSection + u'/auto preview', False): + if Settings().value(self.mainwindow.generalSettingsSection + u'/auto preview'): item += 1 if self.serviceItems and item < len(self.serviceItems) and \ self.serviceItems[item][u'service_item'].is_capable(ItemCapabilities.CanPreview): diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 959a95bfe..b6753bb7c 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -41,6 +41,7 @@ REMOVE_AMPERSAND = re.compile(r'&{1}') log = logging.getLogger(__name__) + class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): """ The shortcut list dialog diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 40fc11ae3..499032661 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -34,14 +34,11 @@ from collections import deque from PyQt4 import QtCore, QtGui -from openlp.core.lib import OpenLPToolbar, Receiver, ItemCapabilities, \ - translate, build_icon, build_html, PluginManager, ServiceItem, \ - ImageSource, SlideLimits, ServiceItemAction, Settings -from openlp.core.ui import HideMode, MainDisplay, Display, ScreenList -from openlp.core.lib.ui import UiStrings, create_action +from openlp.core.lib import OpenLPToolbar, Receiver, ItemCapabilities, translate, build_icon, build_html, \ + PluginManager, ServiceItem, ImageSource, SlideLimits, ServiceItemAction, Settings, ScreenList, UiStrings +from openlp.core.lib.ui import create_action from openlp.core.lib import SlideLimits, ServiceItemAction -from openlp.core.ui import HideMode, MainDisplay, Display, ScreenList, \ - DisplayControllerType +from openlp.core.ui import HideMode, MainDisplay, Display, DisplayControllerType from openlp.core.utils.actions import ActionList, CategoryOrder log = logging.getLogger(__name__) @@ -211,7 +208,7 @@ class SlideController(DisplayController): self.playSlidesOnce = create_action(self, u'playSlidesOnce', text=UiStrings().PlaySlidesToEnd, icon=u':/media/media_time.png', checked=False, shortcuts=[], category=self.category, triggers=self.onPlaySlidesOnce) - if Settings().value(self.parent().generalSettingsSection + u'/enable slide loop', True): + if Settings().value(self.parent().generalSettingsSection + u'/enable slide loop'): self.playSlidesMenu.setDefaultAction(self.playSlidesLoop) else: self.playSlidesMenu.setDefaultAction(self.playSlidesOnce) @@ -585,7 +582,7 @@ class SlideController(DisplayController): """ Updates the Slide Limits variable from the settings. """ - self.slide_limits = Settings().value(self.parent().advancedSettingsSection + u'/slide limits', SlideLimits.End) + self.slide_limits = Settings().value(self.parent().advancedSettingsSection + u'/slide limits') def enableToolBar(self, item): """ @@ -613,7 +610,7 @@ class SlideController(DisplayController): self.playSlidesLoop.setChecked(False) self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png')) if item.is_text(): - if Settings().value(self.parent().songsSettingsSection + u'/display songbar', True) and self.slideList: + if Settings().value(self.parent().songsSettingsSection + u'/display songbar') and self.slideList: self.songMenu.show() if item.is_capable(ItemCapabilities.CanLoop) and len(item.get_frames()) > 1: self.toolbar.setWidgetVisible(self.loopList) @@ -735,8 +732,8 @@ class SlideController(DisplayController): action.setData(counter) QtCore.QObject.connect(action, QtCore.SIGNAL(u'triggered(bool)'), self.onTrackTriggered) self.display.audioPlayer.repeat = Settings().value( - self.parent().generalSettingsSection + u'/audio repeat list', False) - if Settings().value(self.parent().generalSettingsSection + u'/audio start paused', True): + self.parent().generalSettingsSection + u'/audio repeat list') + if Settings().value(self.parent().generalSettingsSection + u'/audio start paused'): self.audioPauseItem.setChecked(True) self.display.audioPlayer.pause() else: @@ -845,8 +842,7 @@ class SlideController(DisplayController): Allow the main display to blank the main display at startup time """ log.debug(u'mainDisplaySetBackground live = %s' % self.isLive) - display_type = Settings().value(self.parent().generalSettingsSection + u'/screen blank', - u'') + display_type = Settings().value(self.parent().generalSettingsSection + u'/screen blank') if self.screens.which_screen(self.window()) != self.screens.which_screen(self.display): # Order done to handle initial conversion if display_type == u'themed': @@ -1202,7 +1198,7 @@ class SlideController(DisplayController): """ triggered by clicking the Preview slide items """ - if Settings().value(u'advanced/double click live', False): + if Settings().value(u'advanced/double click live'): # Live and Preview have issues if we have video or presentations # playing in both at the same time. if self.serviceItem.is_command(): diff --git a/openlp/core/ui/starttimedialog.py b/openlp/core/ui/starttimedialog.py index c0977ab52..ff8b486bd 100644 --- a/openlp/core/ui/starttimedialog.py +++ b/openlp/core/ui/starttimedialog.py @@ -29,8 +29,9 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate -from openlp.core.lib.ui import UiStrings, create_button_box +from openlp.core.lib import translate, UiStrings +from openlp.core.lib.ui import create_button_box + class Ui_StartTimeDialog(object): def setupUi(self, StartTimeDialog): diff --git a/openlp/core/ui/starttimeform.py b/openlp/core/ui/starttimeform.py index 2e2f4ee4f..b2577da5b 100644 --- a/openlp/core/ui/starttimeform.py +++ b/openlp/core/ui/starttimeform.py @@ -31,8 +31,8 @@ from PyQt4 import QtGui from starttimedialog import Ui_StartTimeDialog -from openlp.core.lib import translate -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib import translate, UiStrings +from openlp.core.lib.ui import critical_error_message_box class StartTimeForm(QtGui.QDialog, Ui_StartTimeDialog): """ diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index 54bcb91c8..37af3b7b9 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -32,9 +32,9 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, translate +from openlp.core.lib import Receiver, translate, UiStrings from openlp.core.lib.theme import BackgroundType, BackgroundGradientType -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui import ThemeLayoutForm from openlp.core.utils import get_images_filter from themewizard import Ui_ThemeWizard @@ -72,7 +72,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.onGradientStartButtonClicked) QtCore.QObject.connect(self.gradientEndButton, QtCore.SIGNAL(u'clicked()'), self.onGradientEndButtonClicked) QtCore.QObject.connect(self.imageBrowseButton, QtCore.SIGNAL(u'clicked()'), self.onImageBrowseButtonClicked) - QtCore.QObject.connect(self.mainColorButton, QtCore.SIGNAL(u'clicked()'), self.onMainColorButtonClicked) + QtCore.QObject.connect(self.mainColorButton, QtCore.SIGNAL(u'clicked()'), self.onMainColorButtonClicked) QtCore.QObject.connect(self.outlineColorButton, QtCore.SIGNAL(u'clicked()'), self.onOutlineColorButtonClicked) QtCore.QObject.connect(self.shadowColorButton, QtCore.SIGNAL(u'clicked()'), self.onShadowColorButtonClicked) QtCore.QObject.connect(self.outlineCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index ea53808a4..9b2b6e622 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -37,9 +37,9 @@ from xml.etree.ElementTree import ElementTree, XML from PyQt4 import QtCore, QtGui from openlp.core.lib import OpenLPToolbar, get_text_file_string, build_icon, Receiver, SettingsManager, translate, \ - check_item_selected, check_directory_exists, create_thumb, validate_thumb, ImageSource, Settings + check_item_selected, check_directory_exists, create_thumb, validate_thumb, ImageSource, Settings, UiStrings from openlp.core.lib.theme import ThemeXML, BackgroundType, VerticalType, BackgroundGradientType -from openlp.core.lib.ui import UiStrings, critical_error_message_box, create_widget_action +from openlp.core.lib.ui import critical_error_message_box, create_widget_action from openlp.core.theme import Theme from openlp.core.ui import FileRenameForm, ThemeForm from openlp.core.utils import AppLocation, delete_file, locale_compare, get_filesystem_encoding @@ -158,7 +158,7 @@ class ThemeManager(QtGui.QWidget): """ Triggered when Config dialog is updated. """ - self.global_theme = Settings().value(self.settingsSection + u'/global theme', u'') + self.global_theme = Settings().value(self.settingsSection + u'/global theme') def checkListState(self, item): """ @@ -360,12 +360,12 @@ class ThemeManager(QtGui.QWidget): theme = item.data(QtCore.Qt.UserRole) path = QtGui.QFileDialog.getExistingDirectory(self, translate('OpenLP.ThemeManager', 'Save Theme - (%s)') % theme, - SettingsManager.get_last_dir(self.settingsSection, 1)) - path = unicode(path) + Settings().value(self.settingsSection + u'/last directory export')) Receiver.send_message(u'cursor_busy') if path: - SettingsManager.set_last_dir(self.settingsSection, path, 1) + Settings().setValue(self.settingsSection + u'/last directory export', path) theme_path = os.path.join(path, theme + u'.otz') + # FIXME: Do not overwrite build-in. zip = None try: zip = zipfile.ZipFile(theme_path, u'w') @@ -396,14 +396,14 @@ class ThemeManager(QtGui.QWidget): """ files = QtGui.QFileDialog.getOpenFileNames(self, translate('OpenLP.ThemeManager', 'Select Theme Import File'), - SettingsManager.get_last_dir(self.settingsSection), + Settings().value(self.settingsSection + u'/last directory import'), translate('OpenLP.ThemeManager', 'OpenLP Themes (*.theme *.otz)')) log.info(u'New Themes %s', unicode(files)) if not files: return Receiver.send_message(u'cursor_busy') for file in files: - SettingsManager.set_last_dir(self.settingsSection, unicode(file)) + Settings().setValue(self.settingsSection + u'/last directory import', unicode(file)) self.unzipTheme(file, self.path) self.loadThemes() Receiver.send_message(u'cursor_normal') @@ -429,7 +429,7 @@ class ThemeManager(QtGui.QWidget): Settings().setValue(self.settingsSection + u'/global theme', theme.theme_name) self.configUpdated() files = SettingsManager.get_files(self.settingsSection, u'.png') - # Sort the themes by its name considering language specific + # Sort the themes by its name considering language specific files.sort(key=lambda file_name: unicode(file_name), cmp=locale_compare) # now process the file list of png files @@ -728,8 +728,7 @@ class ThemeManager(QtGui.QWidget): Check to see if theme has been selected and the destructive action is allowed. """ - self.global_theme = Settings().value( - self.settingsSection + u'/global theme', u'') + self.global_theme = Settings().value(self.settingsSection + u'/global theme') if check_item_selected(self.themeListWidget, select_text): item = self.themeListWidget.currentItem() theme = item.text() diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 45188d075..1867fe872 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -29,9 +29,10 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, Settings, SettingsTab, translate +from openlp.core.lib import Receiver, Settings, SettingsTab, translate, UiStrings from openlp.core.lib.theme import ThemeLevel -from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box +from openlp.core.lib.ui import find_and_set_in_combo_box + class ThemesTab(SettingsTab): """ @@ -118,8 +119,8 @@ class ThemesTab(SettingsTab): def load(self): settings = Settings() settings.beginGroup(self.settingsSection) - self.theme_level = settings.value(u'theme level', ThemeLevel.Song) - self.global_theme = settings.value(u'global theme', u'') + self.theme_level = settings.value(u'theme level') + self.global_theme = settings.value(u'global theme') settings.endGroup() if self.theme_level == ThemeLevel.Global: self.GlobalLevelRadioButton.setChecked(True) @@ -165,7 +166,7 @@ class ThemesTab(SettingsTab): [u'Bible Theme', u'Song Theme'] """ # Reload as may have been triggered by the ThemeManager. - self.global_theme = Settings().value(self.settingsSection + u'/global theme', u'') + self.global_theme = Settings().value(self.settingsSection + u'/global theme') self.DefaultComboBox.clear() self.DefaultComboBox.addItems(theme_list) find_and_set_in_combo_box(self.DefaultComboBox, self.global_theme) diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index c6f30c96d..7cabae2bc 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -29,9 +29,9 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate, build_icon +from openlp.core.lib import translate, build_icon, UiStrings from openlp.core.lib.theme import HorizontalType, BackgroundType, BackgroundGradientType -from openlp.core.lib.ui import UiStrings, add_welcome_page, create_valign_selection_widgets +from openlp.core.lib.ui import add_welcome_page, create_valign_selection_widgets class Ui_ThemeWizard(object): def setupUi(self, themeWizard): diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index 3609302b5..bf7dff269 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -34,8 +34,8 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, Receiver, SettingsManager, translate -from openlp.core.lib.ui import UiStrings, add_welcome_page +from openlp.core.lib import build_icon, Receiver, Settings, translate, UiStrings +from openlp.core.lib.ui import add_welcome_page log = logging.getLogger(__name__) @@ -235,7 +235,7 @@ class OpenLPWizard(QtGui.QWizard): self.cancelButton.setVisible(False) Receiver.send_message(u'openlp_process_events') - def getFileName(self, title, editbox, filters=u''): + def getFileName(self, title, editbox, setting_name, filters=u''): """ Opens a QFileDialog and saves the filename to the given editbox. @@ -245,6 +245,9 @@ class OpenLPWizard(QtGui.QWizard): ``editbox`` An editbox (QLineEdit). + ``setting_name`` + The place where to save the last opened directory. + ``filters`` The file extension filters. It should contain the file description as well as the file extension. For example:: @@ -254,15 +257,13 @@ class OpenLPWizard(QtGui.QWizard): if filters: filters += u';;' filters += u'%s (*)' % UiStrings().AllFiles - filename = unicode(QtGui.QFileDialog.getOpenFileName(self, title, - os.path.dirname(SettingsManager.get_last_dir( - self.plugin.settingsSection, 1)), filters)) + filename = QtGui.QFileDialog.getOpenFileName(self, title, + os.path.dirname(Settings().value(self.plugin.settingsSection + u'/' + setting_name)), filters) if filename: editbox.setText(filename) - SettingsManager.set_last_dir(self.plugin.settingsSection, - filename, 1) + Settings().setValue(self.plugin.settingsSection + u'/' + setting_name, filename) - def getFolder(self, title, editbox): + def getFolder(self, title, editbox, setting_name): """ Opens a QFileDialog and saves the selected folder to the given editbox. @@ -271,10 +272,13 @@ class OpenLPWizard(QtGui.QWizard): ``editbox`` An editbox (QLineEdit). + + ``setting_name`` + The place where to save the last opened directory. """ - folder = unicode(QtGui.QFileDialog.getExistingDirectory(self, title, - os.path.dirname(SettingsManager.get_last_dir(self.plugin.settingsSection, 1)), - QtGui.QFileDialog.ShowDirsOnly)) + folder = QtGui.QFileDialog.getExistingDirectory(self, title, + Settings().value(self.plugin.settingsSection + u'/' + setting_name), + QtGui.QFileDialog.ShowDirsOnly) if folder: editbox.setText(folder) - SettingsManager.set_last_dir(self.plugin.settingsSection, folder, 1) + Settings().setValue(self.plugin.settingsSection + u'/' + setting_name, folder) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 9aa94dd0a..4dc2d8b3d 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -127,7 +127,7 @@ class AppLocation(object): """ # Check if we have a different data location. if Settings().contains(u'advanced/data path'): - path = Settings().value(u'advanced/data path', u'') + path = Settings().value(u'advanced/data path') else: path = AppLocation.get_directory(AppLocation.DataDir) check_directory_exists(path) @@ -288,8 +288,7 @@ def check_latest_version(current_version): # set to prod in the distribution config file. settings = Settings() settings.beginGroup(u'general') - # This defaults to yesterday in order to force the update check to run when you've never run it before. - last_test = settings.value(u'last version test', datetime.now().date() - timedelta(days=1)) + last_test = settings.value(u'last version test') this_test = datetime.now().date() settings.setValue(u'last version test', this_test) settings.endGroup() @@ -333,8 +332,7 @@ def add_actions(target, actions): def get_filesystem_encoding(): """ - Returns the name of the encoding used to convert Unicode filenames into - system file names. + Returns the name of the encoding used to convert Unicode filenames into system file names. """ encoding = sys.getfilesystemencoding() if encoding is None: @@ -344,8 +342,7 @@ def get_filesystem_encoding(): def get_images_filter(): """ - Returns a filter string for a file dialog containing all the supported - image formats. + Returns a filter string for a file dialog containing all the supported image formats. """ global IMAGES_FILTER if not IMAGES_FILTER: @@ -473,6 +470,7 @@ def format_time(text, local_time): ``text`` The text to be processed. + ``local_time`` The time to be used to add to the string. This is a time object """ @@ -489,8 +487,7 @@ def locale_compare(string1, string2): or 0, depending on whether string1 collates before or after string2 or is equal to it. Comparison is case insensitive. """ - # Function locale.strcoll() from standard Python library does not work - # properly on Windows. + # Function locale.strcoll() from standard Python library does not work properly on Windows. return locale.strcoll(string1.lower(), string2.lower()) diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 5cf7e810a..88bcbb44a 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -233,7 +233,7 @@ class ActionList(object): # Load the shortcut from the config. settings = Settings() settings.beginGroup(u'shortcuts') - shortcuts = settings.value(action.objectName(), action.shortcuts()) + shortcuts = settings.value(action.objectName()) settings.endGroup() if not shortcuts: action.setShortcuts([]) diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 2d6e2746d..355f35915 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -98,7 +98,7 @@ class LanguageManager(object): """ Retrieve a saved language to use from settings """ - language = Settings().value(u'general/language', u'[en]') + language = Settings().value(u'general/language') language = str(language) log.info(u'Language file: \'%s\' Loaded from conf file' % language) if re.match(r'[[].*[]]', language): diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index e81c53d67..1a4e8e411 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -29,12 +29,13 @@ import logging -from PyQt4 import QtCore +from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate, Settings from openlp.core.lib.db import Manager from openlp.core.lib.ui import create_action, UiStrings from openlp.core.lib.theme import VerticalType +from openlp.core.ui import AlertLocation from openlp.core.utils.actions import ActionList from openlp.plugins.alerts.lib import AlertsManager, AlertsTab from openlp.plugins.alerts.lib.db import init_schema @@ -113,11 +114,22 @@ HTML = """ """ +__default_settings__ = { + u'alerts/font face': QtGui.QFont().family(), + u'alerts/font size': 40, + u'alerts/db type': u'sqlite', + u'alerts/location': AlertLocation.Bottom, + u'alerts/background color': u'#660000', + u'alerts/font color': u'#ffffff', + u'alerts/timeout': 5 + } + + class AlertsPlugin(Plugin): log.info(u'Alerts Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'alerts', plugin_helpers, settings_tab_class=AlertsTab) + Plugin.__init__(self, u'alerts', __default_settings__, plugin_helpers, settings_tab_class=AlertsTab) self.weight = -3 self.iconPath = u':/plugins/plugin_alerts.png' self.icon = build_icon(self.iconPath) diff --git a/openlp/plugins/alerts/lib/alertstab.py b/openlp/plugins/alerts/lib/alertstab.py index 2007ab72e..60451f20c 100644 --- a/openlp/plugins/alerts/lib/alertstab.py +++ b/openlp/plugins/alerts/lib/alertstab.py @@ -29,9 +29,9 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, translate, Receiver, Settings +from openlp.core.lib import SettingsTab, translate, Receiver, Settings, UiStrings from openlp.core.ui import AlertLocation -from openlp.core.lib.ui import UiStrings, create_valign_selection_widgets +from openlp.core.lib.ui import create_valign_selection_widgets class AlertsTab(SettingsTab): """ @@ -141,12 +141,12 @@ class AlertsTab(SettingsTab): def load(self): settings = Settings() settings.beginGroup(self.settingsSection) - self.timeout = settings.value(u'timeout', 5) - self.font_color = settings.value(u'font color', u'#ffffff') - self.font_size = settings.value(u'font size', 40) - self.bg_color = settings.value(u'background color', u'#660000') - self.font_face = settings.value(u'font face', QtGui.QFont().family()) - self.location = settings.value(u'location', AlertLocation.Bottom) + self.timeout = settings.value(u'timeout') + self.font_color = settings.value(u'font color') + self.font_size = settings.value(u'font size') + self.bg_color = settings.value(u'background color') + self.font_face = settings.value(u'font face') + self.location = settings.value(u'location') settings.endGroup() self.fontSizeSpinBox.setValue(self.font_size) self.timeoutSpinBox.setValue(self.timeout) @@ -163,7 +163,7 @@ class AlertsTab(SettingsTab): settings = Settings() settings.beginGroup(self.settingsSection) # Check value has changed as no event handles this field - if settings.value(u'location', 1) != self.verticalComboBox.currentIndex(): + if settings.value(u'location') != self.verticalComboBox.currentIndex(): self.changed = True settings.setValue(u'background color', self.bg_color) settings.setValue(u'font color', self.font_color) diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index f22fc8bf8..54ad44227 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -34,16 +34,42 @@ from PyQt4 import QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate, Settings from openlp.core.lib.ui import create_action, UiStrings from openlp.core.utils.actions import ActionList -from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem +from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem, LayoutStyle, DisplayStyle, \ + LanguageSelection +from openlp.plugins.bibles.lib.mediaitem import BibleSearch from openlp.plugins.bibles.forms import BibleUpgradeForm log = logging.getLogger(__name__) + +__default_settings__ = { + u'bibles/db type': u'sqlite', + u'bibles/last search type': BibleSearch.Reference, + u'bibles/verse layout style': LayoutStyle.VersePerSlide, + u'bibles/book name language': LanguageSelection.Bible, + u'bibles/display brackets': DisplayStyle.NoBrackets, + u'bibles/display new chapter': False, + u'bibles/second bibles': True, + u'bibles/advanced bible': u'', + u'bibles/quick bible': u'', + u'bibles/proxy name': u'', + u'bibles/proxy address': u'', + u'bibles/proxy username': u'', + u'bibles/proxy password': u'', + u'bibles/bible theme': u'', + u'bibles/verse separator': u'', + u'bibles/range separator': u'', + u'bibles/list separator': u'', + u'bibles/end separator': u'', + u'bibles/last directory import': u'' + } + + class BiblePlugin(Plugin): log.info(u'Bible Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'bibles', plugin_helpers, BibleMediaItem, BiblesTab) + Plugin.__init__(self, u'bibles', __default_settings__, plugin_helpers, BibleMediaItem, BiblesTab) self.weight = -9 self.iconPath = u':/plugins/plugin_bibles.png' self.icon = build_icon(self.iconPath) @@ -80,6 +106,7 @@ class BiblePlugin(Plugin): """ Perform tasks on application startup """ + Plugin.appStartup(self) if self.manager.old_bible_databases: if QtGui.QMessageBox.information(self.formParent, translate('OpenLP', 'Information'), @@ -88,12 +115,6 @@ class BiblePlugin(Plugin): QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) == \ QtGui.QMessageBox.Yes: self.onToolsUpgradeItemTriggered() - settings = Settings() - settings.beginGroup(self.settingsSection) - if settings.contains(u'bookname language'): - settings.setValue(u'book name language', settings.value(u'bookname language', 0)) - settings.remove(u'bookname language') - settings.endGroup() def addImportMenuItem(self, import_menu): self.importBibleItem = create_action(import_menu, u'importBibleItem', diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index d2d9cf8e4..05469eae9 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -34,9 +34,9 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, translate, Settings +from openlp.core.lib import Receiver, translate, Settings, UiStrings from openlp.core.lib.db import delete_database -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings from openlp.core.utils import AppLocation, locale_compare from openlp.plugins.bibles.lib.manager import BibleFormat @@ -469,34 +469,34 @@ class BibleImportForm(OpenLPWizard): """ Show the file open dialog for the OSIS file. """ - self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.OSIS, self.osisFileEdit) + self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.OSIS, self.osisFileEdit, u'last directory import') def onCsvBooksBrowseButtonClicked(self): """ Show the file open dialog for the books CSV file. """ - self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.CSV, self.csvBooksEdit, u'%s (*.csv)' - % translate('BiblesPlugin.ImportWizardForm', 'CSV File')) + self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.CSV, self.csvBooksEdit, u'last directory import', + u'%s (*.csv)' % translate('BiblesPlugin.ImportWizardForm', 'CSV File')) def onCsvVersesBrowseButtonClicked(self): """ Show the file open dialog for the verses CSV file. """ - self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.CSV, self.csvVersesEdit, u'%s (*.csv)' - % translate('BiblesPlugin.ImportWizardForm', 'CSV File')) + self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.CSV, self.csvVersesEdit, u'last directory import', + u'%s (*.csv)' % translate('BiblesPlugin.ImportWizardForm', 'CSV File')) def onOpenSongBrowseButtonClicked(self): """ Show the file open dialog for the OpenSong file. """ - self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.OS, self.openSongFileEdit) + self.getFileName(WizardStrings.OpenTypeFile % WizardStrings.OS, self.openSongFileEdit, u'last directory import') def onOpenlp1BrowseButtonClicked(self): """ Show the file open dialog for the openlp.org 1.x file. """ - self.getFileName(WizardStrings.OpenTypeFile % UiStrings().OLPV1, self.openlp1FileEdit, u'%s (*.bible)' % - translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x Bible Files')) + self.getFileName(WizardStrings.OpenTypeFile % UiStrings().OLPV1, self.openlp1FileEdit, u'last directory import', + u'%s (*.bible)' % translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x Bible Files')) def registerFields(self): """ @@ -533,9 +533,9 @@ class BibleImportForm(OpenLPWizard): self.setField(u'opensong_file', '') self.setField(u'web_location', WebDownload.Crosswalk) self.setField(u'web_biblename', self.webTranslationComboBox.currentIndex()) - self.setField(u'proxy_server', settings.value(u'proxy address', u'')) - self.setField(u'proxy_username', settings.value(u'proxy username', u'')) - self.setField(u'proxy_password', settings.value(u'proxy password', u'')) + self.setField(u'proxy_server', settings.value(u'proxy address')) + self.setField(u'proxy_username', settings.value(u'proxy username')) + self.setField(u'proxy_password', settings.value(u'proxy password')) self.setField(u'openlp1_location', '') self.setField(u'license_version', self.versionNameEdit.text()) self.setField(u'license_copyright', self.copyrightEdit.text()) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index b42dfd710..0b2f214f7 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -36,8 +36,8 @@ from tempfile import gettempdir from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, SettingsManager, translate, check_directory_exists, Settings -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib import Receiver, translate, check_directory_exists, Settings, UiStrings +from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings from openlp.core.utils import AppLocation, delete_file, get_filesystem_encoding from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, BiblesResourcesDB @@ -116,11 +116,9 @@ class BibleUpgradeForm(OpenLPWizard): Show the file open dialog for the OSIS file. """ filename = QtGui.QFileDialog.getExistingDirectory(self, - translate('BiblesPlugin.UpgradeWizardForm', 'Select a Backup Directory'), - os.path.dirname(SettingsManager.get_last_dir(self.plugin.settingsSection, 1))) + translate('BiblesPlugin.UpgradeWizardForm', 'Select a Backup Directory'), u'') if filename: self.backupDirectoryEdit.setText(filename) - SettingsManager.set_last_dir(self.plugin.settingsSection, filename, 1) def onNoBackupCheckBoxToggled(self, checked): """ diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 517111c73..26a58d14b 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -32,8 +32,8 @@ import re from PyQt4 import QtGui -from openlp.core.lib import Receiver, translate -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib import Receiver, translate, UiStrings +from openlp.core.lib.ui import critical_error_message_box from editbibledialog import Ui_EditBibleDialog from openlp.plugins.bibles.lib import BibleStrings from openlp.plugins.bibles.lib.db import BiblesResourcesDB diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index 01314ddc9..2ba2ff590 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -187,10 +187,10 @@ def update_reference_separators(): settings = Settings() settings.beginGroup(u'bibles') custom_separators = [ - settings.value(u'verse separator', u''), - settings.value(u'range separator', u''), - settings.value(u'list separator', u''), - settings.value(u'end separator', u'')] + settings.value(u'verse separator'), + settings.value(u'range separator'), + settings.value(u'list separator'), + settings.value(u'end separator')] settings.endGroup() for index, role in enumerate([u'v', u'r', u'l', u'e']): if custom_separators[index].strip(u'|') == u'': diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index e3d7acb35..291930a4b 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -31,8 +31,8 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, SettingsTab, translate, Settings -from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box +from openlp.core.lib import Receiver, SettingsTab, translate, Settings, UiStrings +from openlp.core.lib.ui import find_and_set_in_combo_box from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, update_reference_separators, \ get_reference_separator, LanguageSelection @@ -331,16 +331,16 @@ class BiblesTab(SettingsTab): def load(self): settings = Settings() settings.beginGroup(self.settingsSection) - self.show_new_chapters = settings.value(u'display new chapter', False) - self.display_style = settings.value(u'display brackets', 0) - self.layout_style = settings.value(u'verse layout style', 0) - self.bible_theme = settings.value(u'bible theme', u'') - self.second_bibles = settings.value(u'second bibles', True) + self.show_new_chapters = settings.value(u'display new chapter') + self.display_style = settings.value(u'display brackets') + self.layout_style = settings.value(u'verse layout style') + self.bible_theme = settings.value(u'bible theme') + self.second_bibles = settings.value(u'second bibles') self.newChaptersCheckBox.setChecked(self.show_new_chapters) self.displayStyleComboBox.setCurrentIndex(self.display_style) self.layoutStyleComboBox.setCurrentIndex(self.layout_style) self.bibleSecondCheckBox.setChecked(self.second_bibles) - verse_separator = settings.value(u'verse separator', u'') + verse_separator = settings.value(u'verse separator') if (verse_separator.strip(u'|') == u'') or (verse_separator == get_reference_separator(u'sep_v_default')): self.verseSeparatorLineEdit.setText(get_reference_separator(u'sep_v_default')) self.verseSeparatorLineEdit.setPalette(self.getGreyTextPalette(True)) @@ -349,7 +349,7 @@ class BiblesTab(SettingsTab): self.verseSeparatorLineEdit.setText(verse_separator) self.verseSeparatorLineEdit.setPalette(self.getGreyTextPalette(False)) self.verseSeparatorCheckBox.setChecked(True) - range_separator = settings.value(u'range separator', u'') + range_separator = settings.value(u'range separator') if (range_separator.strip(u'|') == u'') or (range_separator == get_reference_separator(u'sep_r_default')): self.rangeSeparatorLineEdit.setText(get_reference_separator(u'sep_r_default')) self.rangeSeparatorLineEdit.setPalette(self.getGreyTextPalette(True)) @@ -358,7 +358,7 @@ class BiblesTab(SettingsTab): self.rangeSeparatorLineEdit.setText(range_separator) self.rangeSeparatorLineEdit.setPalette(self.getGreyTextPalette(False)) self.rangeSeparatorCheckBox.setChecked(True) - list_separator = settings.value(u'list separator', u'') + list_separator = settings.value(u'list separator') if (list_separator.strip(u'|') == u'') or (list_separator == get_reference_separator(u'sep_l_default')): self.listSeparatorLineEdit.setText(get_reference_separator(u'sep_l_default')) self.listSeparatorLineEdit.setPalette(self.getGreyTextPalette(True)) @@ -367,7 +367,7 @@ class BiblesTab(SettingsTab): self.listSeparatorLineEdit.setText(list_separator) self.listSeparatorLineEdit.setPalette(self.getGreyTextPalette(False)) self.listSeparatorCheckBox.setChecked(True) - end_separator = settings.value(u'end separator', u'') + end_separator = settings.value(u'end separator') if (end_separator.strip(u'|') == u'') or (end_separator == get_reference_separator(u'sep_e_default')): self.endSeparatorLineEdit.setText(get_reference_separator(u'sep_e_default')) self.endSeparatorLineEdit.setPalette(self.getGreyTextPalette(True)) @@ -376,7 +376,7 @@ class BiblesTab(SettingsTab): self.endSeparatorLineEdit.setText(end_separator) self.endSeparatorLineEdit.setPalette(self.getGreyTextPalette(False)) self.endSeparatorCheckBox.setChecked(True) - self.language_selection = settings.value(u'book name language', 0) + self.language_selection = settings.value(u'book name language') self.languageSelectionComboBox.setCurrentIndex(self.language_selection) settings.endGroup() diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 69a3a663f..11bdd09e7 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -778,7 +778,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): The source of the webbible. """ log.debug(u'BiblesResourcesDB.get_webbibles("%s")', source) - if not isinstance(source, unicode): + if not isinstance(source, unicode): source = unicode(source) source = BiblesResourcesDB.get_download_source(source) bibles = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, ' @@ -953,7 +953,7 @@ class AlternativeBookNamesDB(QtCore.QObject, Manager): return cursor.fetchall() @staticmethod - def get_book_reference_id(name, language_id=None): + def get_book_reference_id(name, language_id=None): """ Return a book_reference_id if the name matches. diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index ee48945e5..327f03565 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -526,7 +526,7 @@ class HTTPBible(BibleDB): books = handler.get_books_from_http(self.download_name) if not books: log.exception(u'Importing books from %s - download name: "%s" '\ - 'failed' % (self.download_source, self.download_name)) + 'failed' % (self.download_source, self.download_name)) return False self.wizard.progressBar.setMaximum(len(books)+2) self.wizard.incrementProgressBar(translate( @@ -552,7 +552,7 @@ class HTTPBible(BibleDB): language_id) if not book_ref_id: log.exception(u'Importing books from %s - download name: "%s" '\ - 'failed' % (self.download_source, self.download_name)) + 'failed' % (self.download_source, self.download_name)) return False book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) log.debug(u'Book details: Name:%s; id:%s; testament_id:%s', diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 1fa07ba86..aaf91d2c0 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -124,7 +124,7 @@ class BibleManager(object): self.web = u'Web' self.db_cache = None self.path = AppLocation.get_section_data_path(self.settingsSection) - self.proxy_name = Settings().value(self.settingsSection + u'/proxy name', u'') + self.proxy_name = Settings().value(self.settingsSection + u'/proxy name') self.suffix = u'.sqlite' self.import_wizard = None self.reload_bibles() @@ -356,7 +356,7 @@ class BibleManager(object): if not language_selection or language_selection.value == "None" or language_selection.value == "-1": # If None is returned, it's not the singleton object but a # BibleMeta object with the value "None" - language_selection = Settings().value(self.settingsSection + u'/book name language', 0) + language_selection = Settings().value(self.settingsSection + u'/book name language') else: language_selection = language_selection.value try: diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index b4a1ec470..306265f35 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -31,10 +31,10 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ - translate, create_separated_list, ServiceItemContext, Settings +from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, translate, create_separated_list, \ + ServiceItemContext, Settings, UiStrings from openlp.core.lib.searchedit import SearchEdit -from openlp.core.lib.ui import UiStrings, set_case_insensitive_completer, create_horizontal_adjusting_combo_box, \ +from openlp.core.lib.ui import set_case_insensitive_completer, create_horizontal_adjusting_combo_box, \ critical_error_message_box, find_and_set_in_combo_box, build_icon from openlp.core.utils import locale_compare from openlp.plugins.bibles.forms import BibleImportForm, EditBibleForm @@ -228,7 +228,7 @@ class BibleMediaItem(MediaManagerItem): self.addSearchFields(u'advanced', UiStrings().Advanced) # Combo Boxes QtCore.QObject.connect(self.quickVersionComboBox, QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter) - QtCore.QObject.connect(self.quickSecondComboBox, QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter) + QtCore.QObject.connect(self.quickSecondComboBox, QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter) QtCore.QObject.connect(self.advancedVersionComboBox,QtCore.SIGNAL(u'activated(int)'), self.onAdvancedVersionComboBox) QtCore.QObject.connect(self.advancedSecondComboBox, QtCore.SIGNAL(u'activated(int)'), @@ -260,7 +260,7 @@ class BibleMediaItem(MediaManagerItem): def configUpdated(self): log.debug(u'configUpdated') - if Settings().value(self.settingsSection + u'/second bibles', True): + if Settings().value(self.settingsSection + u'/second bibles'): self.advancedSecondLabel.setVisible(True) self.advancedSecondComboBox.setVisible(True) self.quickSecondLabel.setVisible(True) @@ -312,8 +312,7 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'Text Search'), translate('BiblesPlugin.MediaItem', 'Search Text...')) ]) - self.quickSearchEdit.setCurrentSearchType(Settings().value(u'%s/last search type' % self.settingsSection, - BibleSearch.Reference)) + self.quickSearchEdit.setCurrentSearchType(Settings().value(u'%s/last search type' % self.settingsSection)) self.configUpdated() log.debug(u'bible manager initialise complete') @@ -335,13 +334,13 @@ class BibleMediaItem(MediaManagerItem): self.advancedVersionComboBox.addItems(bibles) self.advancedSecondComboBox.addItems(bibles) # set the default value - bible = Settings().value(self.settingsSection + u'/advanced bible', u'') + bible = Settings().value(self.settingsSection + u'/advanced bible') if bible in bibles: find_and_set_in_combo_box(self.advancedVersionComboBox, bible) self.initialiseAdvancedBible(unicode(bible)) elif bibles: self.initialiseAdvancedBible(bibles[0]) - bible = Settings().value(self.settingsSection + u'/quick bible', self.quickVersionComboBox.currentText()) + bible = Settings().value(self.settingsSection + u'/quick bible') find_and_set_in_combo_box(self.quickVersionComboBox, bible) def reloadBibles(self, process=False): diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index 3d57d1cc2..116c6454a 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -37,9 +37,18 @@ from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.lib.db import Manager from openlp.plugins.custom.lib import CustomMediaItem, CustomTab from openlp.plugins.custom.lib.db import CustomSlide, init_schema +from openlp.plugins.custom.lib.mediaitem import CustomSearch log = logging.getLogger(__name__) +__default_settings__ = { + u'custom/db type': u'sqlite', + u'custom/last search type': CustomSearch.Titles, + u'custom/display footer': True, + u'custom/add custom from service': True + } + + class CustomPlugin(Plugin): """ This plugin enables the user to create, edit and display @@ -52,7 +61,7 @@ class CustomPlugin(Plugin): log.info(u'Custom Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'custom', plugin_helpers, CustomMediaItem, CustomTab) + Plugin.__init__(self, u'custom', __default_settings__, plugin_helpers, CustomMediaItem, CustomTab) self.weight = -5 self.manager = Manager(u'custom', init_schema) self.iconPath = u':/plugins/plugin_custom.png' diff --git a/openlp/plugins/custom/forms/editcustomdialog.py b/openlp/plugins/custom/forms/editcustomdialog.py index f9fc608dd..50534d171 100644 --- a/openlp/plugins/custom/forms/editcustomdialog.py +++ b/openlp/plugins/custom/forms/editcustomdialog.py @@ -29,8 +29,8 @@ from PyQt4 import QtGui -from openlp.core.lib import build_icon, translate -from openlp.core.lib.ui import UiStrings, create_button_box, create_button +from openlp.core.lib import build_icon, translate, UiStrings +from openlp.core.lib.ui import create_button_box, create_button class Ui_CustomEditDialog(object): def setupUi(self, customEditDialog): diff --git a/openlp/plugins/custom/forms/editcustomslidedialog.py b/openlp/plugins/custom/forms/editcustomslidedialog.py index 4f226d89f..cb16926d0 100644 --- a/openlp/plugins/custom/forms/editcustomslidedialog.py +++ b/openlp/plugins/custom/forms/editcustomslidedialog.py @@ -29,8 +29,8 @@ from PyQt4 import QtGui -from openlp.core.lib import translate, SpellTextEdit, build_icon -from openlp.core.lib.ui import UiStrings, create_button, create_button_box +from openlp.core.lib import translate, SpellTextEdit, build_icon, UiStrings +from openlp.core.lib.ui import create_button, create_button_box class Ui_CustomSlideEditDialog(object): def setupUi(self, customSlideEditDialog): diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py index 531703297..5b0b7f11f 100644 --- a/openlp/plugins/custom/lib/customtab.py +++ b/openlp/plugins/custom/lib/customtab.py @@ -84,8 +84,8 @@ class CustomTab(SettingsTab): def load(self): settings = Settings() settings.beginGroup(self.settingsSection) - self.displayFooter = settings.value(u'display footer', True) - self.update_load = settings.value(u'add custom from service', True) + self.displayFooter = settings.value(u'display footer') + self.update_load = settings.value(u'add custom from service') self.displayFooterCheckBox.setChecked(self.displayFooter) self.add_from_service_checkbox.setChecked(self.update_load) settings.endGroup() diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index bd4049358..7da03bc18 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -33,8 +33,7 @@ from PyQt4 import QtCore, QtGui from sqlalchemy.sql import or_, func, and_ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, check_item_selected, translate, \ - ServiceItemContext, Settings, PluginStatus -from openlp.core.lib.ui import UiStrings + ServiceItemContext, Settings, PluginStatus, UiStrings from openlp.plugins.custom.forms import EditCustomForm from openlp.plugins.custom.lib import CustomXMLParser, CustomXMLBuilder from openlp.plugins.custom.lib.db import CustomSlide @@ -83,7 +82,7 @@ class CustomMediaItem(MediaManagerItem): self.create_from_service_item) def config_updated(self): - self.add_custom_from_service = Settings().value(self.settingsSection + u'/add custom from service', True) + self.add_custom_from_service = Settings().value(self.settingsSection + u'/add custom from service') def retranslateUi(self): self.searchTextLabel.setText(u'%s:' % UiStrings().Search) @@ -97,8 +96,7 @@ class CustomMediaItem(MediaManagerItem): (CustomSearch.Themes, u':/slides/slide_theme.png', UiStrings().Themes, UiStrings().SearchThemes) ]) self.loadList(self.manager.get_all_objects(CustomSlide, order_by_ref=CustomSlide.title)) - self.searchTextEdit.setCurrentSearchType(Settings().value( u'%s/last search type' % self.settingsSection, - CustomSearch.Titles)) + self.searchTextEdit.setCurrentSearchType(Settings().value( u'%s/last search type' % self.settingsSection)) self.config_updated() def loadList(self, custom_slides): @@ -208,7 +206,7 @@ class CustomMediaItem(MediaManagerItem): service_item.title = title for slide in raw_slides: service_item.add_from_text(slide) - if Settings().value(self.settingsSection + u'/display footer', True) or credit: + if Settings().value(self.settingsSection + u'/display footer') or credit: service_item.raw_footer.append(u' '.join([title, credit])) else: service_item.raw_footer.append(u'') diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index 810794469..d46fabb9d 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -36,11 +36,17 @@ from openlp.plugins.images.lib import ImageMediaItem, ImageTab log = logging.getLogger(__name__) +__default_settings__ = { + u'images/background color': u'#000000', + u'images/images files': [] + } + + class ImagePlugin(Plugin): log.info(u'Image Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'images', plugin_helpers, ImageMediaItem, ImageTab) + Plugin.__init__(self, u'images', __default_settings__, plugin_helpers, ImageMediaItem, ImageTab) self.weight = -7 self.iconPath = u':/plugins/plugin_images.png' self.icon = build_icon(self.iconPath) @@ -91,5 +97,5 @@ class ImagePlugin(Plugin): image manager to require updates. Actual update is triggered by the last part of saving the config. """ - background = QtGui.QColor(Settings().value(self.settingsSection + u'/background color', u'#000000')) + background = QtGui.QColor(Settings().value(self.settingsSection + u'/background color')) self.liveController.imageManager.updateImagesBorder(ImageSource.ImagePlugin, background) diff --git a/openlp/plugins/images/lib/imagetab.py b/openlp/plugins/images/lib/imagetab.py index a59ce6d10..8e3f1c657 100644 --- a/openlp/plugins/images/lib/imagetab.py +++ b/openlp/plugins/images/lib/imagetab.py @@ -29,8 +29,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, translate, Receiver, Settings -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import SettingsTab, translate, Receiver, Settings, UiStrings class ImageTab(SettingsTab): """ @@ -81,7 +80,7 @@ class ImageTab(SettingsTab): def load(self): settings = Settings() settings.beginGroup(self.settingsSection) - self.bg_color = settings.value(u'background color', u'#000000') + self.bg_color = settings.value(u'background color') self.initial_color = self.bg_color settings.endGroup() self.backgroundColorButton.setStyleSheet(u'background-color: %s' % self.bg_color) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index c6fb3881a..7d864c33b 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -33,8 +33,9 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, SettingsManager, translate, \ - check_item_selected, check_directory_exists, Receiver, create_thumb, validate_thumb, ServiceItemContext, Settings -from openlp.core.lib.ui import UiStrings, critical_error_message_box + check_item_selected, check_directory_exists, Receiver, create_thumb, validate_thumb, ServiceItemContext, Settings, \ + UiStrings +from openlp.core.lib.ui import critical_error_message_box from openlp.core.utils import AppLocation, delete_file, locale_compare, get_images_filter log = logging.getLogger(__name__) @@ -77,7 +78,7 @@ class ImageMediaItem(MediaManagerItem): self.listView.setIconSize(QtCore.QSize(88, 50)) self.servicePath = os.path.join(AppLocation.get_section_data_path(self.settingsSection), u'thumbnails') check_directory_exists(self.servicePath) - self.loadList(SettingsManager.load_list(self.settingsSection, u'images'), True) + self.loadList(Settings().value(self.settingsSection + u'/images files'), True) def addListViewToToolBar(self): MediaManagerItem.addListViewToToolBar(self) @@ -106,7 +107,7 @@ class ImageMediaItem(MediaManagerItem): delete_file(os.path.join(self.servicePath, text.text())) self.listView.takeItem(row) self.plugin.formParent.incrementProgressBar() - SettingsManager.set_list(self.settingsSection, u'images', self.getFileList()) + Settings().setValue(self.settingsSection + u'/images files', self.getFileList()) self.plugin.formParent.finishedProgressBar() Receiver.send_message(u'cursor_normal') self.listView.blockSignals(False) @@ -141,7 +142,7 @@ class ImageMediaItem(MediaManagerItem): def generateSlideData(self, service_item, item=None, xmlVersion=False, remote=False, context=ServiceItemContext.Service): - background = QtGui.QColor(Settings().value(self.settingsSection + u'/background color', u'#000000')) + background = QtGui.QColor(Settings().value(self.settingsSection + u'/background color')) if item: items = [item] else: @@ -205,7 +206,7 @@ class ImageMediaItem(MediaManagerItem): """ if check_item_selected(self.listView, translate('ImagePlugin.MediaItem', 'You must select an image to replace the background with.')): - background = QtGui.QColor(Settings().value(self.settingsSection + u'/background color', u'#000000')) + background = QtGui.QColor(Settings().value(self.settingsSection + u'/background color')) item = self.listView.selectedIndexes()[0] bitem = self.listView.item(item.row()) filename = bitem.data(QtCore.Qt.UserRole) @@ -221,7 +222,7 @@ class ImageMediaItem(MediaManagerItem): 'the image file "%s" no longer exists.') % filename) def search(self, string, showError): - files = SettingsManager.load_list(self.settingsSection, u'images') + files = Settings().value(self.settingsSection + u'/images files') results = [] string = string.lower() for file in files: diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 1c44a4cda..c8bba1022 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -33,8 +33,9 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, SettingsManager, translate, \ - check_item_selected, Receiver, MediaType, ServiceItem, ServiceItemContext, Settings, check_directory_exists -from openlp.core.lib.ui import UiStrings, critical_error_message_box, create_horizontal_adjusting_combo_box + check_item_selected, Receiver, MediaType, ServiceItem, ServiceItemContext, Settings, UiStrings, \ + check_directory_exists +from openlp.core.lib.ui import critical_error_message_box, create_horizontal_adjusting_combo_box from openlp.core.ui import DisplayController, Display, DisplayControllerType from openlp.core.ui.media import get_media_players, set_media_players from openlp.core.utils import AppLocation, locale_compare @@ -190,7 +191,7 @@ class MediaMediaItem(MediaManagerItem): service_item.add_capability(ItemCapabilities.CanAutoStartForLive) service_item.add_capability(ItemCapabilities.RequiresMedia) service_item.add_capability(ItemCapabilities.HasDetailedTitleDisplay) - if Settings().value(self.settingsSection + u'/media auto start', QtCore.Qt.Unchecked) == QtCore.Qt.Checked: + if Settings().value(self.settingsSection + u'/media auto start') == QtCore.Qt.Checked: service_item.will_auto_start = True # force a non-existent theme service_item.theme = -1 @@ -201,7 +202,7 @@ class MediaMediaItem(MediaManagerItem): self.listView.setIconSize(QtCore.QSize(88, 50)) self.servicePath = os.path.join(AppLocation.get_section_data_path(self.settingsSection), u'thumbnails') check_directory_exists(self.servicePath) - self.loadList(SettingsManager.load_list(self.settingsSection, u'media')) + self.loadList(Settings().value(self.settingsSection + u'/media files')) self.populateDisplayTypes() def rebuild_players(self): @@ -253,7 +254,7 @@ class MediaMediaItem(MediaManagerItem): row_list.sort(reverse=True) for row in row_list: self.listView.takeItem(row) - SettingsManager.set_list(self.settingsSection, u'media', self.getFileList()) + Settings().setValue(self.settingsSection + u'/media files', self.getFileList()) def loadList(self, media): # Sort the media by its filename considering language specific @@ -283,7 +284,7 @@ class MediaMediaItem(MediaManagerItem): self.listView.addItem(item_name) def getList(self, type=MediaType.Audio): - media = SettingsManager.load_list(self.settingsSection, u'media') + media = Settings().value(self.settingsSection + u'/media files') media.sort(cmp=locale_compare, key=lambda filename: os.path.split(unicode(filename))[1]) ext = [] if type == MediaType.Audio: @@ -295,7 +296,7 @@ class MediaMediaItem(MediaManagerItem): return media def search(self, string, showError): - files = SettingsManager.load_list(self.settingsSection, u'media') + files = Settings().value(self.settingsSection + u'/media files') results = [] string = string.lower() for file in files: diff --git a/openlp/plugins/media/lib/mediatab.py b/openlp/plugins/media/lib/mediatab.py index 420548038..0b220698c 100644 --- a/openlp/plugins/media/lib/mediatab.py +++ b/openlp/plugins/media/lib/mediatab.py @@ -29,8 +29,8 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, Settings, SettingsTab, translate -from openlp.core.lib.ui import UiStrings, create_button +from openlp.core.lib import Receiver, Settings, SettingsTab, translate, UiStrings +from openlp.core.lib.ui import create_button from openlp.core.ui.media import get_media_players, set_media_players class MediaQCheckBox(QtGui.QCheckBox): @@ -72,19 +72,17 @@ class MediaTab(SettingsTab): self.autoStartCheckBox.setText(translate('MediaPlugin.MediaTab', 'Start Live items automatically')) def load(self): - self.overridePlayerCheckBox.setChecked(Settings().value(self.settingsSection + u'/override player', - QtCore.Qt.Unchecked)) - self.autoStartCheckBox.setChecked(Settings().value(self.settingsSection + u'/media auto start', - QtCore.Qt.Unchecked)) + self.overridePlayerCheckBox.setChecked(Settings().value(self.settingsSection + u'/override player')) + self.autoStartCheckBox.setChecked(Settings().value(self.settingsSection + u'/media auto start')) def save(self): override_changed = False setting_key = self.settingsSection + u'/override player' - if Settings().value(setting_key, QtCore.Qt.Unchecked) != self.overridePlayerCheckBox.checkState(): + if Settings().value(setting_key) != self.overridePlayerCheckBox.checkState(): Settings().setValue(setting_key, self.overridePlayerCheckBox.checkState()) override_changed = True setting_key = self.settingsSection + u'/media auto start' - if Settings().value(setting_key, QtCore.Qt.Unchecked) != self.autoStartCheckBox.checkState(): + if Settings().value(setting_key) != self.autoStartCheckBox.checkState(): Settings().setValue(setting_key, self.autoStartCheckBox.checkState()) if override_changed: self.parent.resetSupportedSuffixes() diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index 9a67af766..e1468cccf 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -31,17 +31,23 @@ import logging from PyQt4 import QtCore -from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ - Settings +from openlp.core.lib import Plugin, StringContent, build_icon, translate, Settings from openlp.plugins.media.lib import MediaMediaItem, MediaTab log = logging.getLogger(__name__) +# Some settings starting with "media" are in core, because they are needed for core functionality. +__default_settings__ = { + u'media/media auto start': QtCore.Qt.Unchecked, + u'media/media files': [] + } + + class MediaPlugin(Plugin): log.info(u'%s MediaPlugin loaded', __name__) def __init__(self, plugin_helpers): - Plugin.__init__(self, u'media', plugin_helpers, MediaMediaItem) + Plugin.__init__(self, u'media', __default_settings__, plugin_helpers, MediaMediaItem) self.weight = -6 self.iconPath = u':/plugins/plugin_media.png' self.icon = build_icon(self.iconPath) @@ -118,6 +124,7 @@ class MediaPlugin(Plugin): we want to check if we have the old "Use Phonon" setting, and convert it to "enable Phonon" and "make it the first one in the list". """ + Plugin.appStartup(self) settings = Settings() settings.beginGroup(self.settingsSection) if settings.contains(u'use phonon'): diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index c34a17562..94ba4dad3 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -33,8 +33,8 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, build_icon, SettingsManager, translate, check_item_selected, Receiver, \ - ItemCapabilities, create_thumb, validate_thumb, ServiceItemContext, Settings -from openlp.core.lib.ui import UiStrings, critical_error_message_box, create_horizontal_adjusting_combo_box + ItemCapabilities, create_thumb, validate_thumb, ServiceItemContext, Settings, UiStrings +from openlp.core.lib.ui import critical_error_message_box, create_horizontal_adjusting_combo_box from openlp.core.utils import locale_compare from openlp.plugins.presentations.lib import MessageListener @@ -120,7 +120,7 @@ class PresentationMediaItem(MediaManagerItem): Populate the media manager tab """ self.listView.setIconSize(QtCore.QSize(88, 50)) - files = SettingsManager.load_list(self.settingsSection, u'presentations') + files = Settings().value(self.settingsSection + u'/presentations files') self.loadList(files, True) self.populateDisplayTypes() @@ -137,8 +137,7 @@ class PresentationMediaItem(MediaManagerItem): if self.displayTypeComboBox.count() > 1: self.displayTypeComboBox.insertItem(0, self.Automatic) self.displayTypeComboBox.setCurrentIndex(0) - if Settings().value(self.settingsSection + u'/override app', - QtCore.Qt.Unchecked) == QtCore.Qt.Checked: + if Settings().value(self.settingsSection + u'/override app') == QtCore.Qt.Checked: self.presentationWidget.show() else: self.presentationWidget.hide() @@ -233,7 +232,7 @@ class PresentationMediaItem(MediaManagerItem): Receiver.send_message(u'cursor_normal') for row in row_list: self.listView.takeItem(row) - SettingsManager.set_list(self.settingsSection, u'presentations', self.getFileList()) + Settings().setValue(self.settingsSection + u'/presentations files', self.getFileList()) def generateSlideData(self, service_item, item=None, xmlVersion=False, remote=False, context=ServiceItemContext.Service): @@ -312,8 +311,7 @@ class PresentationMediaItem(MediaManagerItem): return None def search(self, string, showError): - files = SettingsManager.load_list( - self.settingsSection, u'presentations') + files = Settings().value(self.settingsSection + u'/presentations files') results = [] string = string.lower() for file in files: diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index 0c7199825..0051b1d0a 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -387,7 +387,7 @@ class PresentationController(object): """ Return whether the controller is currently enabled """ - if Settings().value(self.settings_section + u'/' + self.name, QtCore.Qt.Checked) == QtCore.Qt.Checked: + if Settings().value(self.settings_section + u'/' + self.name) == QtCore.Qt.Checked: return self.is_available() else: return False diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index 4c2b00174..2c8d3002f 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -29,8 +29,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, Settings, SettingsTab, translate -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import Receiver, Settings, SettingsTab, translate, UiStrings class PresentationTab(SettingsTab): """ @@ -101,9 +100,8 @@ class PresentationTab(SettingsTab): for key in self.controllers: controller = self.controllers[key] checkbox = self.PresenterCheckboxes[controller.name] - checkbox.setChecked(Settings().value(self.settingsSection + u'/' + controller.name, QtCore.Qt.Checked)) - self.OverrideAppCheckBox.setChecked(Settings().value(self.settingsSection + u'/override app', - QtCore.Qt.Unchecked)) + checkbox.setChecked(Settings().value(self.settingsSection + u'/' + controller.name)) + self.OverrideAppCheckBox.setChecked(Settings().value(self.settingsSection + u'/override app')) def save(self): """ @@ -119,7 +117,7 @@ class PresentationTab(SettingsTab): if controller.is_available(): checkbox = self.PresenterCheckboxes[controller.name] setting_key = self.settingsSection + u'/' + controller.name - if Settings().value(setting_key, QtCore.Qt.Checked) != checkbox.checkState(): + if Settings().value(setting_key) != checkbox.checkState(): changed = True Settings().setValue(setting_key, checkbox.checkState()) if checkbox.isChecked(): @@ -127,7 +125,7 @@ class PresentationTab(SettingsTab): else: controller.kill() setting_key = self.settingsSection + u'/override app' - if Settings().value(setting_key, QtCore.Qt.Checked) != self.OverrideAppCheckBox.checkState(): + if Settings().value(setting_key) != self.OverrideAppCheckBox.checkState(): Settings().setValue(setting_key, self.OverrideAppCheckBox.checkState()) changed = True if changed: diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 937b78641..515faa18f 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -33,6 +33,8 @@ presentations from a variety of document formats. import os import logging +from PyQt4 import QtCore + from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.utils import AppLocation from openlp.plugins.presentations.lib import PresentationController, \ @@ -40,6 +42,15 @@ from openlp.plugins.presentations.lib import PresentationController, \ log = logging.getLogger(__name__) +__default_settings__ = { + u'presentations/override app': QtCore.Qt.Unchecked, + u'presentations/Impress': QtCore.Qt.Checked, + u'presentations/Powerpoint': QtCore.Qt.Checked, + u'presentations/Powerpoint Viewer': QtCore.Qt.Checked, + u'presentations/presentations files': [] + } + + class PresentationPlugin(Plugin): """ This plugin allowed a Presentation to be opened, controlled and displayed @@ -54,7 +65,7 @@ class PresentationPlugin(Plugin): """ log.debug(u'Initialised') self.controllers = {} - Plugin.__init__(self, u'presentations', plugin_helpers) + Plugin.__init__(self, u'presentations', __default_settings__, plugin_helpers, __default_settings__) self.weight = -8 self.iconPath = u':/plugins/plugin_presentations.png' self.icon = build_icon(self.iconPath) diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index 42241476d..af12cc9c4 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -169,8 +169,8 @@ class HttpServer(object): clients. Listen out for socket connections. """ log.debug(u'Start TCP server') - port = Settings().value(self.plugin.settingsSection + u'/port', 4316) - address = Settings().value(self.plugin.settingsSection + u'/ip address', u'0.0.0.0') + port = Settings().value(self.plugin.settingsSection + u'/port') + address = Settings().value(self.plugin.settingsSection + u'/ip address') self.server = QtNetwork.QTcpServer() self.server.listen(QtNetwork.QHostAddress(address), port) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_live_changed'), @@ -389,7 +389,7 @@ class HttpConnection(object): u'service': self.parent.plugin.serviceManager.service_id, u'slide': self.parent.current_slide or 0, u'item': self.parent.current_item.unique_identifier if self.parent.current_item else u'', - u'twelve':Settings().value(u'remotes/twelve hour', True), + u'twelve':Settings().value(u'remotes/twelve hour'), u'blank': self.parent.plugin.liveController.blankScreen.isChecked(), u'theme': self.parent.plugin.liveController.themeScreen.isChecked(), u'display': self.parent.plugin.liveController.desktopScreen.isChecked() diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 9baaae8c2..1d28355c4 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -31,8 +31,10 @@ from PyQt4 import QtCore, QtGui, QtNetwork from openlp.core.lib import Settings, SettingsTab, translate, Receiver + ZERO_URL = u'0.0.0.0' + class RemoteTab(SettingsTab): """ RemoteTab is the Remotes settings tab in the settings dialog. @@ -135,16 +137,16 @@ class RemoteTab(SettingsTab): self.stageUrl.setText(u'%s' % (url, url)) def load(self): - self.portSpinBox.setValue(Settings().value(self.settingsSection + u'/port', 4316)) - self.addressEdit.setText(Settings().value(self.settingsSection + u'/ip address', ZERO_URL)) - self.twelveHour = Settings().value(self.settingsSection + u'/twelve hour', True) + self.portSpinBox.setValue(Settings().value(self.settingsSection + u'/port')) + self.addressEdit.setText(Settings().value(self.settingsSection + u'/ip address')) + self.twelveHour = Settings().value(self.settingsSection + u'/twelve hour') self.twelveHourCheckBox.setChecked(self.twelveHour) self.setUrls() def save(self): changed = False - if Settings().value(self.settingsSection + u'/ip address', ZERO_URL != self.addressEdit.text() or - Settings().value(self.settingsSection + u'/port', 4316) != self.portSpinBox.value()): + if Settings().value(self.settingsSection + u'/ip address') != self.addressEdit.text() or \ + Settings().value(self.settingsSection + u'/port') != self.portSpinBox.value(): changed = True Settings().setValue(self.settingsSection + u'/port', self.portSpinBox.value()) Settings().setValue(self.settingsSection + u'/ip address', self.addressEdit.text()) diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index b3f9be5f9..5e71ba5b4 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -34,6 +34,13 @@ from openlp.plugins.remotes.lib import RemoteTab, HttpServer log = logging.getLogger(__name__) +__default_settings__ = { + u'remotes/twelve hour': True, + u'remotes/port': 4316, + u'remotes/ip address': u'0.0.0.0' + } + + class RemotesPlugin(Plugin): log.info(u'Remote Plugin loaded') @@ -41,7 +48,7 @@ class RemotesPlugin(Plugin): """ remotes constructor """ - Plugin.__init__(self, u'remotes', plugin_helpers, settings_tab_class=RemoteTab) + Plugin.__init__(self, u'remotes', __default_settings__, plugin_helpers, settings_tab_class=RemoteTab) self.iconPath = u':/plugins/plugin_remote.png' self.icon = build_icon(self.iconPath) self.weight = -1 diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 4027d2a66..79d4b2778 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -29,8 +29,8 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, translate -from openlp.core.lib.ui import UiStrings, create_button_box, create_button +from openlp.core.lib import build_icon, translate, UiStrings +from openlp.core.lib.ui import create_button_box, create_button from openlp.plugins.songs.lib.ui import SongStrings class Ui_EditSongDialog(object): diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index e22937cd1..83adffb92 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -38,8 +38,9 @@ import shutil from PyQt4 import QtCore, QtGui -from openlp.core.lib import PluginStatus, Receiver, MediaType, translate, create_separated_list, check_directory_exists -from openlp.core.lib.ui import UiStrings, set_case_insensitive_completer, critical_error_message_box, \ +from openlp.core.lib import PluginStatus, Receiver, MediaType, translate, create_separated_list, \ + check_directory_exists, UiStrings +from openlp.core.lib.ui import set_case_insensitive_completer, critical_error_message_box, \ find_and_set_in_combo_box from openlp.core.utils import AppLocation from openlp.plugins.songs.forms import EditVerseForm, MediaFilesForm diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 4ea433b66..29d4b8609 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -34,8 +34,8 @@ import logging from PyQt4 import QtCore, QtGui -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.lib import build_icon, Receiver, translate, create_separated_list, UiStrings +from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings from openlp.plugins.songs.lib import natcmp from openlp.plugins.songs.lib.db import Song @@ -331,4 +331,5 @@ class SongExportForm(OpenLPWizard): Called when the *directoryButton* was clicked. Opens a dialog and writes the path to *directoryLineEdit*. """ - self.getFolder(translate('SongsPlugin.ExportWizardForm', 'Select Destination Folder'), self.directoryLineEdit) + self.getFolder(translate('SongsPlugin.ExportWizardForm', 'Select Destination Folder'), + self.directoryLineEdit, u'last directory export') diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index d9045e163..eb0980a75 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -35,8 +35,8 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, Settings, SettingsManager, translate -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib import Receiver, Settings, SettingsManager, translate, UiStrings +from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings from openlp.plugins.songs.lib.importer import SongFormat, SongFormatSelect @@ -250,10 +250,11 @@ class SongImportForm(OpenLPWizard): filters += u';;' filters += u'%s (*)' % UiStrings().AllFiles filenames = QtGui.QFileDialog.getOpenFileNames(self, title, - SettingsManager.get_last_dir(self.plugin.settingsSection, 1), filters) + Settings().value(self.plugin.settingsSection + u'/last directory import'), filters) if filenames: listbox.addItems(filenames) - SettingsManager.set_last_dir(self.plugin.settingsSection, os.path.split(unicode(filenames[0]))[0], 1) + Settings().setValue(self.plugin.settingsSection + u'/last directory import', + os.path.split(unicode(filenames[0]))[0]) def getListOfFiles(self, listbox): """ @@ -275,9 +276,9 @@ class SongImportForm(OpenLPWizard): u'name', u'filter') filepathEdit = self.formatWidgets[format][u'filepathEdit'] if select_mode == SongFormatSelect.SingleFile: - self.getFileName(WizardStrings.OpenTypeFile % format_name, filepathEdit, filter) + self.getFileName(WizardStrings.OpenTypeFile % format_name, filepathEdit, u'last directory import', filter) elif select_mode == SongFormatSelect.SingleFolder: - self.getFolder(WizardStrings.OpenTypeFolder % format_name, filepathEdit) + self.getFolder(WizardStrings.OpenTypeFolder % format_name, filepathEdit, u'last directory import') def onAddButtonClicked(self): format = self.currentFormat @@ -306,7 +307,7 @@ class SongImportForm(OpenLPWizard): self.restart() self.finishButton.setVisible(False) self.cancelButton.setVisible(True) - last_import_type = Settings().value(u'songs/last import type', SongFormat.OpenLyrics) + last_import_type = Settings().value(u'songs/last import type') if last_import_type < 0 or last_import_type >= self.formatComboBox.count(): last_import_type = 0 self.formatComboBox.setCurrentIndex(last_import_type) @@ -360,7 +361,7 @@ class SongImportForm(OpenLPWizard): Save the error report to a file. """ filename = QtGui.QFileDialog.getSaveFileName(self, - SettingsManager.get_last_dir(self.plugin.settingsSection, 1)) + Settings().value(self.plugin.settingsSection + u'last directory import')) if not filename: return report_file = codecs.open(filename, u'w', u'utf-8') diff --git a/openlp/plugins/songs/forms/songmaintenancedialog.py b/openlp/plugins/songs/forms/songmaintenancedialog.py index 455c1a69c..a14bfc114 100644 --- a/openlp/plugins/songs/forms/songmaintenancedialog.py +++ b/openlp/plugins/songs/forms/songmaintenancedialog.py @@ -29,8 +29,8 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon -from openlp.core.lib.ui import UiStrings, create_button_box +from openlp.core.lib import build_icon, UiStrings +from openlp.core.lib.ui import create_button_box from openlp.plugins.songs.lib.ui import SongStrings class Ui_SongMaintenanceDialog(object): diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 5d62b5888..474e68040 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -31,8 +31,8 @@ import logging from PyQt4 import QtGui, QtCore from sqlalchemy.sql import and_ -from openlp.core.lib import Receiver, translate -from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.lib import Receiver, translate, UiStrings +from openlp.core.lib.ui import critical_error_message_box from openlp.plugins.songs.forms import AuthorsForm, TopicsForm, SongBookForm from openlp.plugins.songs.lib.db import Author, Book, Topic, Song from songmaintenancedialog import Ui_SongMaintenanceDialog diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index bd20f5ffd..5c3b6998a 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -32,8 +32,7 @@ The :mod:`importer` modules provides the general song import functionality. import os import logging -from openlp.core.lib import translate -from openlp.core.lib.ui import UiStrings +from openlp.core.lib import translate, UiStrings from openlp.core.ui.wizard import WizardStrings from opensongimport import OpenSongImport from easyslidesimport import EasySlidesImport diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 99c9fedfe..695e87540 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -37,8 +37,8 @@ from sqlalchemy.sql import or_ 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 + check_directory_exists, ServiceItemContext, Settings, UiStrings +from openlp.core.lib.ui import create_widget_action from openlp.core.utils import AppLocation from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ SongImportForm, SongExportForm @@ -122,9 +122,9 @@ class SongMediaItem(MediaManagerItem): self.searchTextEdit.setFocus() def configUpdated(self): - self.searchAsYouType = Settings().value(self.settingsSection + u'/search as type', False) - self.updateServiceOnEdit = Settings().value(self.settingsSection + u'/update service on edit', False) - self.addSongFromService = Settings().value(self.settingsSection + u'/add song from service', True) + self.searchAsYouType = Settings().value(self.settingsSection + u'/search as type') + self.updateServiceOnEdit = Settings().value(self.settingsSection + u'/update service on edit') + self.addSongFromService = Settings().value(self.settingsSection + u'/add song from service',) def retranslateUi(self): self.searchTextLabel.setText(u'%s:' % UiStrings().Search) @@ -151,8 +151,7 @@ class SongMediaItem(MediaManagerItem): (SongSearch.Themes, u':/slides/slide_theme.png', UiStrings().Themes, UiStrings().SearchThemes) ]) - self.searchTextEdit.setCurrentSearchType(Settings().value( - u'%s/last search type' % self.settingsSection, SongSearch.Entire)) + self.searchTextEdit.setCurrentSearchType(Settings().value(u'%s/last search type' % self.settingsSection)) self.configUpdated() def onSearchTextButtonClicked(self): @@ -470,9 +469,9 @@ class SongMediaItem(MediaManagerItem): service_item.raw_footer.append(song.title) service_item.raw_footer.append(create_separated_list(author_list)) service_item.raw_footer.append(song.copyright) - if Settings().value(u'general/ccli number', u''): + if Settings().value(u'general/ccli number'): service_item.raw_footer.append(translate('SongsPlugin.MediaItem', 'CCLI License: ') + - Settings().value(u'general/ccli number', u'')) + Settings().value(u'general/ccli number')) service_item.audit = [ song.title, author_list, song.copyright, unicode(song.ccli_number) ] diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index a067cf04a..6300db4f6 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -80,36 +80,24 @@ class SongsTab(SettingsTab): 'Import missing songs from service files')) def onSearchAsTypeCheckBoxChanged(self, check_state): - self.song_search = False - # we have a set value convert to True/False - if check_state == QtCore.Qt.Checked: - self.song_search = True + self.song_search = (check_state == QtCore.Qt.Checked) def onToolBarActiveCheckBoxChanged(self, check_state): - self.tool_bar = False - # we have a set value convert to True/False - if check_state == QtCore.Qt.Checked: - self.tool_bar = True + self.tool_bar = (check_state == QtCore.Qt.Checked) def onUpdateOnEditCheckBoxChanged(self, check_state): - self.update_edit = False - # we have a set value convert to True/False - if check_state == QtCore.Qt.Checked: - self.update_edit = True + self.update_edit = (check_state == QtCore.Qt.Checked) def onAddFromServiceCheckBoxChanged(self, check_state): - self.update_load = False - # we have a set value convert to True/False - if check_state == QtCore.Qt.Checked: - self.update_load = True + self.update_load = (check_state == QtCore.Qt.Checked) def load(self): settings = Settings() settings.beginGroup(self.settingsSection) - self.song_search = settings.value(u'search as type', False) - self.tool_bar = settings.value(u'display songbar', True) - self.update_edit = settings.value(u'update service on edit', False) - self.update_load = settings.value(u'add song from service', True) + self.song_search = settings.value(u'search as type') + self.tool_bar = settings.value(u'display songbar') + self.update_edit = settings.value(u'update service on edit') + self.update_load = settings.value(u'add song from service') self.searchAsTypeCheckBox.setChecked(self.song_search) self.toolBarActiveCheckBox.setChecked(self.tool_bar) self.updateOnEditCheckBox.setChecked(self.update_edit) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index b29291369..df157ade3 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -38,17 +38,30 @@ import sqlite3 from PyQt4 import QtCore, QtGui -from openlp.core.lib import Plugin, StringContent, build_icon, translate, Receiver +from openlp.core.lib import Plugin, StringContent, build_icon, translate, Receiver, UiStrings from openlp.core.lib.db import Manager -from openlp.core.lib.ui import UiStrings, create_action +from openlp.core.lib.ui import create_action from openlp.core.utils import get_filesystem_encoding from openlp.core.utils.actions import ActionList from openlp.plugins.songs.lib import clean_song, upgrade, SongMediaItem, SongsTab from openlp.plugins.songs.lib.db import init_schema, Song +from openlp.plugins.songs.lib.mediaitem import SongSearch from openlp.plugins.songs.lib.importer import SongFormat from openlp.plugins.songs.lib.olpimport import OpenLPSongImport log = logging.getLogger(__name__) +__default_settings__ = { + u'songs/db type': u'sqlite', + u'songs/last search type': SongSearch.Entire, + u'songs/last import type': SongFormat.OpenLyrics, + u'songs/update service on edit': False, + u'songs/search as type': False, + u'songs/add song from service': True, + u'songs/display songbar': True, + u'songs/last directory import': u'', + u'songs/last directory export': u'' + } + class SongsPlugin(Plugin): """ @@ -64,7 +77,7 @@ class SongsPlugin(Plugin): """ Create and set up the Songs plugin. """ - Plugin.__init__(self, u'songs', plugin_helpers, SongMediaItem, SongsTab) + Plugin.__init__(self, u'songs', __default_settings__, plugin_helpers, SongMediaItem, SongsTab) self.manager = Manager(u'songs', init_schema, upgrade_mod=upgrade) self.weight = -10 self.iconPath = u':/plugins/plugin_songs.png' diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index dca47f1dd..c455e079c 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -30,11 +30,10 @@ import logging import os -from PyQt4 import QtCore, QtGui +from PyQt4 import QtGui from sqlalchemy.sql import and_ -from openlp.core.lib import Receiver, Settings, SettingsManager, translate, \ - check_directory_exists +from openlp.core.lib import Receiver, Settings, translate, check_directory_exists from openlp.plugins.songusage.lib.db import SongUsageItem from songusagedetaildialog import Ui_SongUsageDetailDialog @@ -58,14 +57,11 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): """ We need to set up the screen """ - year = QtCore.QDate().currentDate().year() - if QtCore.QDate().currentDate().month() < 9: - year -= 1 - toDate = Settings().value(self.plugin.settingsSection + u'/to date', QtCore.QDate(year, 8, 31)) - fromDate = Settings().value(self.plugin.settingsSection + u'/from date', QtCore.QDate(year - 1, 9, 1)) + toDate = Settings().value(self.plugin.settingsSection + u'/to date') + fromDate = Settings().value(self.plugin.settingsSection + u'/from date') self.fromDate.setSelectedDate(fromDate) self.toDate.setSelectedDate(toDate) - self.fileLineEdit.setText(SettingsManager.get_last_dir(self.plugin.settingsSection, 1)) + self.fileLineEdit.setText(Settings().value(self.plugin.settingsSection + u'/last directory export')) def defineOutputLocation(self): """ @@ -73,10 +69,9 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): """ path = QtGui.QFileDialog.getExistingDirectory(self, translate('SongUsagePlugin.SongUsageDetailForm', 'Output File Location'), - SettingsManager.get_last_dir(self.plugin.settingsSection, 1)) - path = unicode(path) + Settings().value(self.plugin.settingsSection + u'/last directory export')) if path: - SettingsManager.set_last_dir(self.plugin.settingsSection, path, 1) + Settings().setValue(self.plugin.settingsSection + u'/last directory export', path) self.fileLineEdit.setText(path) def accept(self): diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index 980ef3190..b39d65ed9 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -42,11 +42,26 @@ from openlp.plugins.songusage.lib.db import init_schema, SongUsageItem log = logging.getLogger(__name__) + +YEAR = QtCore.QDate().currentDate().year() +if QtCore.QDate().currentDate().month() < 9: + YEAR -= 1 + + +__default_settings__ = { + u'songusage/db type': u'sqlite', + u'songusage/active': False, + u'songusage/to date': QtCore.QDate(YEAR, 8, 31), + u'songusage/from date': QtCore.QDate(YEAR - 1, 9, 1), + u'songusage/last directory export': u'' + } + + class SongUsagePlugin(Plugin): log.info(u'SongUsage Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'songusage', plugin_helpers) + Plugin.__init__(self, u'songusage', __default_settings__, plugin_helpers) self.manager = Manager(u'songusage', init_schema, upgrade_mod=upgrade) self.weight = -4 self.icon = build_icon(u':/plugins/plugin_songusage.png') @@ -112,7 +127,7 @@ class SongUsagePlugin(Plugin): self.displaySongUsage) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'print_service_started'), self.printSongUsage) - self.songUsageActive = Settings().value(self.settingsSection + u'/active', False) + self.songUsageActive = Settings().value(self.settingsSection + u'/active') # Set the button and checkbox state self.setButtonState() action_list = ActionList.get_instance() diff --git a/tests/functional/openlp_core_lib/test_lib.py b/tests/functional/openlp_core_lib/test_lib.py index 0484931cd..176197e24 100644 --- a/tests/functional/openlp_core_lib/test_lib.py +++ b/tests/functional/openlp_core_lib/test_lib.py @@ -349,7 +349,7 @@ class TestLib(TestCase): thumb_mocked_stat = MagicMock() thumb_mocked_stat.st_mtime = datetime.now() - timedelta(seconds=10) mocked_os.path.exists.return_value = True - mocked_os.stat.side_effect = [file_mocked_stat, thumb_mocked_stat] + mocked_os.stat.side_effect = lambda fname: file_mocked_stat if fname == file_path else thumb_mocked_stat # WHEN: we run the validate_thumb() function result = validate_thumb(file_path, thumb_path)