From 38615ca5c9643a8d4634f0650c0a40d096e98411 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 4 Nov 2009 01:32:13 +0000 Subject: [PATCH 01/20] Core refactoring 0 --- openlp/core/lib/renderer.py | 30 ++++++++++++++------- openlp/core/lib/rendermanager.py | 43 +++++++------------------------ openlp/core/ui/slidecontroller.py | 15 +++++++---- openlp/core/ui/thememanager.py | 27 ++++++++++++------- 4 files changed, 58 insertions(+), 57 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index bc5c09554..698e165bf 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -40,6 +40,7 @@ class Renderer(object): Initialise the renderer. """ self._rect = None + self._footer_rect = None self._debug = 0 self._right_margin = 64 # the amount of right indent self._shadow_offset = 5 @@ -215,18 +216,29 @@ class Renderer(object): split_pages.append(page) return split_pages - def set_text_rectangle(self, rect_main, rect_footer): + def build_text_rectangle(self, theme): """ - Sets the rectangle within which text should be rendered. + Builds a text block using the settings in ``theme``. + One is needed per slide - ``rect_main`` - The main text block. - - ``rect_footer`` - The footer text block. + ``theme`` + The theme to build a text block for. """ - self._rect = rect_main - self._rect_footer = rect_footer + log.debug(u'build_text_rectangle') + if theme.font_main_override == False: + self._rect = QtCore.QRect(10, 0, self.width - 1, + self.footer_start - 20) + else: + self._rect = QtCore.QRect(int(theme.font_main_x), + int(theme.font_main_y), int(theme.font_main_width)-1, + int(theme.font_main_height) - 1) + if theme.font_footer_override == False: + self._footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, + self.height-self.footer_start) + else: + self._footer_rect = QtCore.QRect(int(theme.font_footer_x), + int(theme.font_footer_y), int(theme.font_footer_width)-1, + int(theme.font_footer_height) - 1) def generate_frame_from_lines(self, lines, footer_lines=None): """ diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index 50abcfd07..ae3a5316c 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -137,49 +137,24 @@ class RenderManager(object): self.calculate_default( self.screen_list[self.current_display][u'size']) self.renderer.set_theme(self.themedata) - self.build_text_rectangle(self.themedata) + self.renderer.build_text_rectangle(self.themedata) #Replace the backgrount image from renderer with one from image if self.override_background is not None: if self.save_bg_frame is None: self.save_bg_frame = self.renderer.bg_frame if self.override_background_changed: - self.renderer.bg_frame = self.resize_image(self.override_background) + self.renderer.bg_frame = self.resize_image( + self.override_background) self.override_background_changed = False else: if self.override_background_changed: - self.renderer.bg_frame = self.resize_image(self.override_background) + self.renderer.bg_frame = self.resize_image( + self.override_background) self.override_background_changed = False if self.save_bg_frame is not None: self.renderer.bg_frame = self.save_bg_frame self.save_bg_frame = None - def build_text_rectangle(self, theme): - """ - Builds a text block using the settings in ``theme``. - One is needed per slide - - ``theme`` - The theme to build a text block for. - """ - log.debug(u'build_text_rectangle') - main_rect = None - footer_rect = None - if theme.font_main_override == False: - main_rect = QtCore.QRect(10, 0, self.width - 1, - self.footer_start - 20) - else: - main_rect = QtCore.QRect(int(theme.font_main_x), - int(theme.font_main_y), int(theme.font_main_width)-1, - int(theme.font_main_height) - 1) - if theme.font_footer_override == False: - footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, - self.height-self.footer_start) - else: - footer_rect = QtCore.QRect(int(theme.font_footer_x), - int(theme.font_footer_y), int(theme.font_footer_width)-1, - int(theme.font_footer_height) - 1) - self.renderer.set_text_rectangle(main_rect, footer_rect) - def generate_preview(self, themedata): """ Generate a preview of a theme. @@ -190,7 +165,7 @@ class RenderManager(object): log.debug(u'generate preview') self.calculate_default(QtCore.QSize(1024, 768)) self.renderer.set_theme(themedata) - self.build_text_rectangle(themedata) + self.renderer.build_text_rectangle(themedata) self.renderer.set_frame_dest(self.width, self.height, True) verse = [] verse.append(u'Amazing Grace!') @@ -212,7 +187,7 @@ class RenderManager(object): The words to go on the slides. """ log.debug(u'format slide') - self.build_text_rectangle(self.themedata) + self.renderer.build_text_rectangle(self.themedata) return self.renderer.format_slide(words, False) def generate_slide(self, main_text, footer_text): @@ -226,7 +201,7 @@ class RenderManager(object): The text for the slide footer. """ log.debug(u'generate slide') - self.build_text_rectangle(self.themedata) + self.renderer.build_text_rectangle(self.themedata) self.renderer.set_frame_dest(self.width, self.height) return self.renderer.generate_frame_from_lines(main_text, footer_text) @@ -246,7 +221,7 @@ class RenderManager(object): h = height preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - realw = preview.width(); + realw = preview.width() realh = preview.height() # and move it to the centre of the preview space newImage = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 0aefd5537..3c4c70ee2 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -448,9 +448,11 @@ class SlideController(QtGui.QWidget): if self.commandItem is not None and \ self.commandItem.service_item_type == ServiceItemType.Command: if blanked: - Receiver().send_message(u'%s_blank'% self.commandItem.name.lower()) + Receiver().send_message( + u'%s_blank' % self.commandItem.name.lower()) else: - Receiver().send_message(u'%s_unblank'% self.commandItem.name.lower()) + Receiver().send_message( + u'%s_unblank' % self.commandItem.name.lower()) else: self.parent.mainDisplay.blankDisplay() @@ -463,7 +465,8 @@ class SlideController(QtGui.QWidget): self.row = 0 if row > -1 and row < self.PreviewListWidget.rowCount(): if self.commandItem.service_item_type == ServiceItemType.Command: - Receiver().send_message(u'%s_slide'% self.commandItem.name.lower(), [row]) + Receiver().send_message( + u'%s_slide'% self.commandItem.name.lower(), [row]) if self.isLive: QtCore.QTimer.singleShot(0.5, self.grabMainDisplay) else: @@ -489,10 +492,12 @@ class SlideController(QtGui.QWidget): if not rm.screen_list[rm.current_display][u'primary']: winid = QtGui.QApplication.desktop().winId() rect = rm.screen_list[rm.current_display][u'size'] - winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), rect.y(), rect.width(), rect.height()) + winimg = QtGui.QPixmap.grabWindow( + winid, rect.x(), rect.y(), rect.width(), rect.height()) self.SlidePreview.setPixmap(winimg) else: - label = self.PreviewListWidget.cellWidget(self.PreviewListWidget.currentRow(), 0) + label = self.PreviewListWidget.cellWidget( + self.PreviewListWidget.currentRow(), 0) self.SlidePreview.setPixmap(label.pixmap()) def onSlideSelectedNext(self): diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 9956023c3..ae3cee598 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -78,17 +78,25 @@ class ThemeManager(QtGui.QWidget): self.ThemeListWidget.addAction( contextMenuAction(self.ThemeListWidget, u':/themes/theme_edit.png', self.trUtf8(u'Edit a theme'), self.onEditTheme)) - self.ThemeListWidget.addAction(contextMenuSeparator(self.ThemeListWidget)) self.ThemeListWidget.addAction( - contextMenuAction(self.ThemeListWidget, u':/themes/theme_delete.png', - self.trUtf8(u'Delete theme'), self.onDeleteTheme)) + contextMenuSeparator(self.ThemeListWidget)) self.ThemeListWidget.addAction( - contextMenuAction(self.ThemeListWidget, u':/themes/theme_export.png', - self.trUtf8(u'Make Global'), self.changeGlobalFromScreen)) + contextMenuAction(self.ThemeListWidget, + u':/themes/theme_delete.png', + self.trUtf8(u'Delete theme'), + self.onDeleteTheme)) self.ThemeListWidget.addAction( - contextMenuAction(self.ThemeListWidget, u':/themes/theme_export.png', - self.trUtf8(u'Export theme'), self.onExportTheme)) - self.ThemeListWidget.addAction(contextMenuSeparator(self.ThemeListWidget)) + contextMenuAction(self.ThemeListWidget, + u':/themes/theme_export.png', + self.trUtf8(u'Make Global'), + self.changeGlobalFromScreen)) + self.ThemeListWidget.addAction( + contextMenuAction(self.ThemeListWidget, + u':/themes/theme_export.png', + self.trUtf8(u'Export theme'), + self.onExportTheme)) + self.ThemeListWidget.addAction( + contextMenuSeparator(self.ThemeListWidget)) #Signals QtCore.QObject.connect(self.ThemeListWidget, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), @@ -151,7 +159,8 @@ class ThemeManager(QtGui.QWidget): if item is not None: self.amendThemeForm.loadTheme( unicode(item.data(QtCore.Qt.UserRole).toString())) - self.saveThemeName = unicode(item.data(QtCore.Qt.UserRole).toString()) + self.saveThemeName = unicode( + item.data(QtCore.Qt.UserRole).toString()) self.amendThemeForm.exec_() def onDeleteTheme(self): From 66339eedd6696a122d9f646ad0ad19268939ad75 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 21 Apr 2010 17:51:52 +0100 Subject: [PATCH 02/20] Back out refactor --- openlp/core/lib/renderer.py | 30 +++++++-------------- openlp/core/lib/rendermanager.py | 43 ++++++++++++++++++++++++------- openlp/core/ui/slidecontroller.py | 15 ++++------- openlp/core/ui/thememanager.py | 27 +++++++------------ 4 files changed, 57 insertions(+), 58 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 698e165bf..bc5c09554 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -40,7 +40,6 @@ class Renderer(object): Initialise the renderer. """ self._rect = None - self._footer_rect = None self._debug = 0 self._right_margin = 64 # the amount of right indent self._shadow_offset = 5 @@ -216,29 +215,18 @@ class Renderer(object): split_pages.append(page) return split_pages - def build_text_rectangle(self, theme): + def set_text_rectangle(self, rect_main, rect_footer): """ - Builds a text block using the settings in ``theme``. - One is needed per slide + Sets the rectangle within which text should be rendered. - ``theme`` - The theme to build a text block for. + ``rect_main`` + The main text block. + + ``rect_footer`` + The footer text block. """ - log.debug(u'build_text_rectangle') - if theme.font_main_override == False: - self._rect = QtCore.QRect(10, 0, self.width - 1, - self.footer_start - 20) - else: - self._rect = QtCore.QRect(int(theme.font_main_x), - int(theme.font_main_y), int(theme.font_main_width)-1, - int(theme.font_main_height) - 1) - if theme.font_footer_override == False: - self._footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, - self.height-self.footer_start) - else: - self._footer_rect = QtCore.QRect(int(theme.font_footer_x), - int(theme.font_footer_y), int(theme.font_footer_width)-1, - int(theme.font_footer_height) - 1) + self._rect = rect_main + self._rect_footer = rect_footer def generate_frame_from_lines(self, lines, footer_lines=None): """ diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index ae3a5316c..50abcfd07 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -137,24 +137,49 @@ class RenderManager(object): self.calculate_default( self.screen_list[self.current_display][u'size']) self.renderer.set_theme(self.themedata) - self.renderer.build_text_rectangle(self.themedata) + self.build_text_rectangle(self.themedata) #Replace the backgrount image from renderer with one from image if self.override_background is not None: if self.save_bg_frame is None: self.save_bg_frame = self.renderer.bg_frame if self.override_background_changed: - self.renderer.bg_frame = self.resize_image( - self.override_background) + self.renderer.bg_frame = self.resize_image(self.override_background) self.override_background_changed = False else: if self.override_background_changed: - self.renderer.bg_frame = self.resize_image( - self.override_background) + self.renderer.bg_frame = self.resize_image(self.override_background) self.override_background_changed = False if self.save_bg_frame is not None: self.renderer.bg_frame = self.save_bg_frame self.save_bg_frame = None + def build_text_rectangle(self, theme): + """ + Builds a text block using the settings in ``theme``. + One is needed per slide + + ``theme`` + The theme to build a text block for. + """ + log.debug(u'build_text_rectangle') + main_rect = None + footer_rect = None + if theme.font_main_override == False: + main_rect = QtCore.QRect(10, 0, self.width - 1, + self.footer_start - 20) + else: + main_rect = QtCore.QRect(int(theme.font_main_x), + int(theme.font_main_y), int(theme.font_main_width)-1, + int(theme.font_main_height) - 1) + if theme.font_footer_override == False: + footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, + self.height-self.footer_start) + else: + footer_rect = QtCore.QRect(int(theme.font_footer_x), + int(theme.font_footer_y), int(theme.font_footer_width)-1, + int(theme.font_footer_height) - 1) + self.renderer.set_text_rectangle(main_rect, footer_rect) + def generate_preview(self, themedata): """ Generate a preview of a theme. @@ -165,7 +190,7 @@ class RenderManager(object): log.debug(u'generate preview') self.calculate_default(QtCore.QSize(1024, 768)) self.renderer.set_theme(themedata) - self.renderer.build_text_rectangle(themedata) + self.build_text_rectangle(themedata) self.renderer.set_frame_dest(self.width, self.height, True) verse = [] verse.append(u'Amazing Grace!') @@ -187,7 +212,7 @@ class RenderManager(object): The words to go on the slides. """ log.debug(u'format slide') - self.renderer.build_text_rectangle(self.themedata) + self.build_text_rectangle(self.themedata) return self.renderer.format_slide(words, False) def generate_slide(self, main_text, footer_text): @@ -201,7 +226,7 @@ class RenderManager(object): The text for the slide footer. """ log.debug(u'generate slide') - self.renderer.build_text_rectangle(self.themedata) + self.build_text_rectangle(self.themedata) self.renderer.set_frame_dest(self.width, self.height) return self.renderer.generate_frame_from_lines(main_text, footer_text) @@ -221,7 +246,7 @@ class RenderManager(object): h = height preview = preview.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - realw = preview.width() + realw = preview.width(); realh = preview.height() # and move it to the centre of the preview space newImage = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 3c4c70ee2..0aefd5537 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -448,11 +448,9 @@ class SlideController(QtGui.QWidget): if self.commandItem is not None and \ self.commandItem.service_item_type == ServiceItemType.Command: if blanked: - Receiver().send_message( - u'%s_blank' % self.commandItem.name.lower()) + Receiver().send_message(u'%s_blank'% self.commandItem.name.lower()) else: - Receiver().send_message( - u'%s_unblank' % self.commandItem.name.lower()) + Receiver().send_message(u'%s_unblank'% self.commandItem.name.lower()) else: self.parent.mainDisplay.blankDisplay() @@ -465,8 +463,7 @@ class SlideController(QtGui.QWidget): self.row = 0 if row > -1 and row < self.PreviewListWidget.rowCount(): if self.commandItem.service_item_type == ServiceItemType.Command: - Receiver().send_message( - u'%s_slide'% self.commandItem.name.lower(), [row]) + Receiver().send_message(u'%s_slide'% self.commandItem.name.lower(), [row]) if self.isLive: QtCore.QTimer.singleShot(0.5, self.grabMainDisplay) else: @@ -492,12 +489,10 @@ class SlideController(QtGui.QWidget): if not rm.screen_list[rm.current_display][u'primary']: winid = QtGui.QApplication.desktop().winId() rect = rm.screen_list[rm.current_display][u'size'] - winimg = QtGui.QPixmap.grabWindow( - winid, rect.x(), rect.y(), rect.width(), rect.height()) + winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), rect.y(), rect.width(), rect.height()) self.SlidePreview.setPixmap(winimg) else: - label = self.PreviewListWidget.cellWidget( - self.PreviewListWidget.currentRow(), 0) + label = self.PreviewListWidget.cellWidget(self.PreviewListWidget.currentRow(), 0) self.SlidePreview.setPixmap(label.pixmap()) def onSlideSelectedNext(self): diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index ae3cee598..9956023c3 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -78,25 +78,17 @@ class ThemeManager(QtGui.QWidget): self.ThemeListWidget.addAction( contextMenuAction(self.ThemeListWidget, u':/themes/theme_edit.png', self.trUtf8(u'Edit a theme'), self.onEditTheme)) + self.ThemeListWidget.addAction(contextMenuSeparator(self.ThemeListWidget)) self.ThemeListWidget.addAction( - contextMenuSeparator(self.ThemeListWidget)) + contextMenuAction(self.ThemeListWidget, u':/themes/theme_delete.png', + self.trUtf8(u'Delete theme'), self.onDeleteTheme)) self.ThemeListWidget.addAction( - contextMenuAction(self.ThemeListWidget, - u':/themes/theme_delete.png', - self.trUtf8(u'Delete theme'), - self.onDeleteTheme)) + contextMenuAction(self.ThemeListWidget, u':/themes/theme_export.png', + self.trUtf8(u'Make Global'), self.changeGlobalFromScreen)) self.ThemeListWidget.addAction( - contextMenuAction(self.ThemeListWidget, - u':/themes/theme_export.png', - self.trUtf8(u'Make Global'), - self.changeGlobalFromScreen)) - self.ThemeListWidget.addAction( - contextMenuAction(self.ThemeListWidget, - u':/themes/theme_export.png', - self.trUtf8(u'Export theme'), - self.onExportTheme)) - self.ThemeListWidget.addAction( - contextMenuSeparator(self.ThemeListWidget)) + contextMenuAction(self.ThemeListWidget, u':/themes/theme_export.png', + self.trUtf8(u'Export theme'), self.onExportTheme)) + self.ThemeListWidget.addAction(contextMenuSeparator(self.ThemeListWidget)) #Signals QtCore.QObject.connect(self.ThemeListWidget, QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), @@ -159,8 +151,7 @@ class ThemeManager(QtGui.QWidget): if item is not None: self.amendThemeForm.loadTheme( unicode(item.data(QtCore.Qt.UserRole).toString())) - self.saveThemeName = unicode( - item.data(QtCore.Qt.UserRole).toString()) + self.saveThemeName = unicode(item.data(QtCore.Qt.UserRole).toString()) self.amendThemeForm.exec_() def onDeleteTheme(self): From 81a208654ad78d0635d239de6af5ff39225e8fef Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 23 Apr 2010 15:09:54 +0100 Subject: [PATCH 03/20] Remove redundant code --- openlp.pyw | 5 ----- 1 file changed, 5 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 528923862..9601e1582 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -110,11 +110,6 @@ class OpenLP(QtGui.QApplication): finally: if fversion: fversion.close() - #set the default string encoding - try: - sys.setappdefaultencoding(u'utf-8') - except: - pass #provide a listener for widgets to reqest a screen update. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'process_events'), self.processEvents) From 37720b9cdbebcdf4c1ed5e20029fb6080e83b282 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 23 Apr 2010 17:00:32 +0100 Subject: [PATCH 04/20] Add add_actions support function --- openlp/core/utils/__init__.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 12fc4a293..d060c8ca2 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -64,7 +64,8 @@ class AppLocation(object): else: try: from xdg import BaseDirectory - path = os.path.join(BaseDirectory.xdg_config_home, u'openlp') + path = os.path.join( + BaseDirectory.xdg_config_home, u'openlp') except ImportError: path = os.path.join(os.getenv(u'HOME'), u'.openlp') return path @@ -117,7 +118,8 @@ def check_latest_version(config, current_version): if last_test != this_test: version_string = u'' if current_version[u'build']: - req = urllib2.Request(u'http://www.openlp.org/files/dev_version.txt') + req = urllib2.Request( + u'http://www.openlp.org/files/dev_version.txt') else: req = urllib2.Request(u'http://www.openlp.org/files/version.txt') req.add_header(u'User-Agent', u'OpenLP/%s' % current_version[u'full']) @@ -149,7 +151,24 @@ def variant_to_unicode(variant): string = string_to_unicode(string) return string +def add_actions(target, actions): + """ + Adds multiple actions to a menu or toolbar in one command. + + ``target`` + The menu or toolbar to add actions to. + + ``actions`` + The actions to be added. + """ + for action in actions: + if action is None: + target.addSeparator() + else: + target.addAction(action) + from registry import Registry from confighelper import ConfigHelper -__all__ = [u'Registry', u'ConfigHelper', u'AppLocation', u'check_latest_version'] +__all__ = [u'Registry', u'ConfigHelper', u'AppLocation', + u'check_latest_version', u'add_actions'] From fbc36e3e9a28729355f190c5735e262201bf4639 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 23 Apr 2010 19:30:53 +0100 Subject: [PATCH 05/20] Add recent files functionality --- openlp.pyw | 2 + openlp/core/ui/mainwindow.py | 119 +++++++++++++++++++------------ openlp/core/ui/servicemanager.py | 21 ++++-- 3 files changed, 93 insertions(+), 49 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 9601e1582..85de9fe79 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -113,6 +113,8 @@ class OpenLP(QtGui.QApplication): #provide a listener for widgets to reqest a screen update. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'process_events'), self.processEvents) + self.setOrganizationName(u'OpenLP') + self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') self.setApplicationVersion(app_version[u'version']) if os.name == u'nt': diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 469bc6d69..99a246d69 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -28,12 +28,11 @@ import time from PyQt4 import QtCore, QtGui -from openlp.core.ui import AboutForm, SettingsForm, \ - ServiceManager, ThemeManager, SlideController, \ - PluginForm, MediaDockManager, DisplayManager +from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ + ThemeManager, SlideController, PluginForm, MediaDockManager, DisplayManager from openlp.core.lib import RenderManager, PluginConfig, build_icon, \ OpenLPDockWidget, SettingsManager, PluginManager, Receiver, str_to_bool -from openlp.core.utils import check_latest_version, AppLocation +from openlp.core.utils import check_latest_version, AppLocation, add_actions log = logging.getLogger(__name__) @@ -273,50 +272,36 @@ class Ui_MainWindow(object): self.settingsmanager.showPreviewPanel) self.ModeLiveItem = QtGui.QAction(MainWindow) self.ModeLiveItem.setObjectName(u'ModeLiveItem') - self.FileImportMenu.addAction(self.ImportThemeItem) - self.FileImportMenu.addAction(self.ImportLanguageItem) - self.FileExportMenu.addAction(self.ExportThemeItem) - self.FileExportMenu.addAction(self.ExportLanguageItem) - self.FileMenu.addAction(self.FileNewItem) - self.FileMenu.addAction(self.FileOpenItem) - self.FileMenu.addAction(self.FileSaveItem) - self.FileMenu.addAction(self.FileSaveAsItem) - self.FileMenu.addSeparator() - self.FileMenu.addAction(self.FileImportMenu.menuAction()) - self.FileMenu.addAction(self.FileExportMenu.menuAction()) - self.FileMenu.addSeparator() - self.FileMenu.addAction(self.FileExitItem) - self.ViewModeMenu.addAction(self.ModeLiveItem) - self.OptionsViewMenu.addAction(self.ViewModeMenu.menuAction()) - self.OptionsViewMenu.addSeparator() - self.OptionsViewMenu.addAction(self.ViewMediaManagerItem) - self.OptionsViewMenu.addAction(self.ViewServiceManagerItem) - self.OptionsViewMenu.addAction(self.ViewThemeManagerItem) - self.OptionsViewMenu.addSeparator() - self.OptionsViewMenu.addAction(self.action_Preview_Panel) - self.OptionsLanguageMenu.addAction(self.LanguageEnglishItem) - self.OptionsLanguageMenu.addSeparator() - self.OptionsLanguageMenu.addAction(self.LanguageTranslateItem) - self.OptionsMenu.addAction(self.OptionsLanguageMenu.menuAction()) - self.OptionsMenu.addAction(self.OptionsViewMenu.menuAction()) - self.OptionsMenu.addSeparator() - self.OptionsMenu.addAction(self.OptionsSettingsItem) - self.ToolsMenu.addAction(self.PluginItem) - self.ToolsMenu.addSeparator() - self.ToolsMenu.addAction(self.ToolsAddToolItem) - self.HelpMenu.addAction(self.HelpDocumentationItem) - self.HelpMenu.addAction(self.HelpOnlineHelpItem) - self.HelpMenu.addSeparator() - self.HelpMenu.addAction(self.HelpWebSiteItem) - self.HelpMenu.addAction(self.HelpAboutItem) - self.MenuBar.addAction(self.FileMenu.menuAction()) - self.MenuBar.addAction(self.OptionsMenu.menuAction()) - self.MenuBar.addAction(self.ToolsMenu.menuAction()) - self.MenuBar.addAction(self.HelpMenu.menuAction()) + add_actions(self.FileImportMenu, + (self.ImportThemeItem, self.ImportLanguageItem)) + add_actions(self.FileExportMenu, + (self.ExportThemeItem, self.ExportLanguageItem)) + self.FileMenuActions = (self.FileNewItem, self.FileOpenItem, + self.FileSaveItem, self.FileSaveAsItem, None, + self.FileImportMenu.menuAction(), self.FileExportMenu.menuAction(), + self.FileExitItem) + add_actions(self.ViewModeMenu, [self.ModeLiveItem]) + add_actions(self.OptionsViewMenu, (self.ViewModeMenu.menuAction(), + None, self.ViewMediaManagerItem, self.ViewServiceManagerItem, + self.ViewThemeManagerItem, None, self.action_Preview_Panel)) + add_actions(self.OptionsLanguageMenu, (self.LanguageEnglishItem, None, + self.LanguageTranslateItem)) + add_actions(self.OptionsMenu, (self.OptionsLanguageMenu.menuAction(), + self.OptionsViewMenu.menuAction(), None, self.OptionsSettingsItem)) + add_actions(self.ToolsMenu, + (self.PluginItem, None, self.ToolsAddToolItem)) + add_actions(self.HelpMenu, + (self.HelpDocumentationItem, self.HelpOnlineHelpItem, None, + self.HelpWebSiteItem, self.HelpAboutItem)) + add_actions(self.MenuBar, + (self.FileMenu.menuAction(), self.OptionsMenu.menuAction(), + self.ToolsMenu.menuAction(), self.HelpMenu.menuAction())) # Initialise the translation self.retranslateUi(MainWindow) self.MediaToolBox.setCurrentIndex(0) # Connect up some signals and slots + QtCore.QObject.connect(self.FileMenu, + QtCore.SIGNAL(u'aboutToShow()'), self.updateFileMenu) QtCore.QObject.connect(self.FileExitItem, QtCore.SIGNAL(u'triggered()'), MainWindow.close) QtCore.QObject.connect(self.ControlSplitter, @@ -445,12 +430,17 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.displayManager = DisplayManager(screens) self.aboutForm = AboutForm(self, applicationVersion) self.settingsForm = SettingsForm(self.screens, self, self) + self.recentFiles = [] # Set up the path with plugins pluginpath = AppLocation.get_directory(AppLocation.PluginsDir) self.plugin_manager = PluginManager(pluginpath) self.plugin_helpers = {} # Set up the interface self.setupUi(self) + # Load settings after setupUi so defaults UI sizes are overwritten + self.loadSettings() + # Once settings are loaded update FileMenu with recentFiles + self.updateFileMenu() self.pluginForm = PluginForm(self) # Set up signals and slots QtCore.QObject.connect(self.ImportThemeItem, @@ -666,6 +656,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Call the cleanup method to shutdown plugins. log.info(u'cleanup plugins') self.plugin_manager.finalise_plugins() + # Save settings + self.saveSettings() #Close down the displays self.displayManager.close() @@ -720,3 +712,42 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): previewBool = self.PreviewController.Panel.isVisible() self.PreviewController.Panel.setVisible(not previewBool) self.settingsmanager.togglePreviewPanel(not previewBool) + + def loadSettings(self): + log.debug(u'Loading QSettings') + settings = QtCore.QSettings() + self.recentFiles = settings.value(u'RecentFiles').toStringList() + + def saveSettings(self): + log.debug(u'Saving QSettings') + settings = QtCore.QSettings() + recentFiles = QtCore.QVariant(self.recentFiles) \ + if self.recentFiles else QtCore.QVariant() + settings.setValue(u'RecentFiles', recentFiles) + + def updateFileMenu(self): + self.FileMenu.clear() + add_actions(self.FileMenu, self.FileMenuActions[:-1]) + existingRecentFiles = [] + for file in self.recentFiles: + if QtCore.QFile.exists(file): + existingRecentFiles.append(file) + if existingRecentFiles: + self.FileMenu.addSeparator() + for fileId, filename in enumerate(existingRecentFiles): + action = QtGui.QAction(u'&%d %s' % (fileId +1, + QtCore.QFileInfo(filename).fileName()), self) + action.setData(QtCore.QVariant(filename)) + self.connect(action, QtCore.SIGNAL(u'triggered()'), + self.ServiceManagerContents.loadService) + self.FileMenu.addAction(action) + self.FileMenu.addSeparator() + self.FileMenu.addAction(self.FileMenuActions[-1]) + + def addRecentFile(self, filename): + recentFileCount = int(PluginConfig(u'General'). + get_config(u'max recent files', 4)) + if filename and not self.recentFiles.contains(filename): + self.recentFiles.prepend(QtCore.QString(filename)) + while self.recentFiles.count() > recentFileCount: + self.recentFiles.takeLast() diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 27ca95d0e..e2be00b7d 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -538,23 +538,33 @@ class ServiceManager(QtGui.QWidget): pass #if not present do not worry name = filename.split(os.path.sep) self.serviceName = name[-1] + self.parent.addRecentFile(filename) self.parent.serviceChanged(True, self.serviceName) def onQuickSaveService(self): self.onSaveService(True) def onLoadService(self, lastService=False): - """ - Load an existing service from disk and rebuild the serviceitems. All - files retrieved from the zip file are placed in a temporary directory - and will only be used for this service. - """ if lastService: filename = self.config.get_last_dir() else: filename = QtGui.QFileDialog.getOpenFileName( self, self.trUtf8('Open Service'), self.config.get_last_dir(), u'Services (*.osz)') + self.loadService(filename) + + def loadService(self, filename=None): + """ + Load an existing service from disk and rebuild the serviceitems. All + files retrieved from the zip file are placed in a temporary directory + and will only be used for this service. + """ + if filename is None: + action = self.sender() + if isinstance(action, QtGui.QAction): + filename = action.data().toString() + else: + return filename = unicode(filename) name = filename.split(os.path.sep) if filename: @@ -598,6 +608,7 @@ class ServiceManager(QtGui.QWidget): zip.close() self.isNew = False self.serviceName = name[len(name) - 1] + self.parent.addRecentFile(filename) self.parent.serviceChanged(True, self.serviceName) def validateItem(self, serviceItem): From e6400413185a5c93238ebd83139e9f9c97b223c3 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 23 Apr 2010 20:42:51 +0100 Subject: [PATCH 06/20] Document separators in add_actions --- openlp/core/utils/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index d060c8ca2..1900c554e 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -111,7 +111,7 @@ def check_latest_version(config, current_version): The current version of OpenLP. """ version_string = current_version[u'full'] - #set to prod in the distribution confif file. + #set to prod in the distribution config file. last_test = config.get_config(u'last version test', datetime.now().date()) this_test = unicode(datetime.now().date()) config.set_config(u'last version test', this_test) @@ -159,7 +159,8 @@ def add_actions(target, actions): The menu or toolbar to add actions to. ``actions`` - The actions to be added. + The actions to be added. An action consisting of the keyword 'None' + will result in a separator being inserted into the target. """ for action in actions: if action is None: From fde108d4b48143a690d23a3d04310e6a36f7587a Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 23 Apr 2010 20:55:31 +0100 Subject: [PATCH 07/20] Warn before loading over unsaved service --- openlp/core/ui/servicemanager.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index e2be00b7d..2e1d1c872 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -416,8 +416,8 @@ class ServiceManager(QtGui.QWidget): get_config(u'save prompt', u'False')): ret = QtGui.QMessageBox.question(self, self.trUtf8('Save Changes to Service?'), - self.trUtf8('Your service is unsaved, do you want to save those ' - 'changes before creating a new one ?'), + self.trUtf8('Your service is unsaved, do you want to save ' + 'those changes before creating a new one?'), QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Save), @@ -514,7 +514,8 @@ class ServiceManager(QtGui.QWidget): try: zip = zipfile.ZipFile(unicode(filename), 'w') for item in self.serviceItems: - service.append({u'serviceitem':item[u'service_item'].get_service_repr()}) + service.append({u'serviceitem':item[u'service_item'] + .get_service_repr()}) if item[u'service_item'].uses_file(): for frame in item[u'service_item'].get_frames(): path_from = unicode(os.path.join( @@ -559,6 +560,17 @@ class ServiceManager(QtGui.QWidget): files retrieved from the zip file are placed in a temporary directory and will only be used for this service. """ + if self.parent.serviceNotSaved: + ret = QtGui.QMessageBox.question(self, + self.trUtf8('Save Changes to Service?'), + self.trUtf8('Your current service is unsaved, do you want to ' + 'save the changes before opening a new one?'), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Discard | + QtGui.QMessageBox.Save), + QtGui.QMessageBox.Save) + if ret == QtGui.QMessageBox.Save: + self.onSaveService() if filename is None: action = self.sender() if isinstance(action, QtGui.QAction): From b8f940565ecb697471b5134909ddff759c278e24 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 23 Apr 2010 21:39:27 +0100 Subject: [PATCH 08/20] Import fixes --- openlp/core/lib/serviceitem.py | 2 +- openlp/plugins/alerts/alertsplugin.py | 2 +- openlp/plugins/alerts/forms/alertstab.py | 2 +- openlp/plugins/presentations/presentationplugin.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 3f3eedf5d..4374f98aa 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -30,7 +30,7 @@ import uuid from PyQt4 import QtGui -from openlp.core.lib import build_icon, Receiver, resize_image +from openlp.core.lib import build_icon, resize_image log = logging.getLogger(__name__) diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 975192da3..819e8eed6 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -27,7 +27,7 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import Plugin, build_icon, PluginStatus, Receiver +from openlp.core.lib import Plugin, build_icon, PluginStatus from openlp.plugins.alerts.lib import AlertsManager, DBManager from openlp.plugins.alerts.forms import AlertsTab, AlertForm diff --git a/openlp/plugins/alerts/forms/alertstab.py b/openlp/plugins/alerts/forms/alertstab.py index 65c1d7f33..3e4b45865 100644 --- a/openlp/plugins/alerts/forms/alertstab.py +++ b/openlp/plugins/alerts/forms/alertstab.py @@ -25,7 +25,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, str_to_bool +from openlp.core.lib import SettingsTab class AlertsTab(SettingsTab): """ diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index ddf096b07..da25dcdc3 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -26,7 +26,7 @@ import os import logging -from openlp.core.lib import Plugin, build_icon, Receiver, PluginStatus +from openlp.core.lib import Plugin, build_icon, PluginStatus from openlp.core.utils import AppLocation from openlp.plugins.presentations.lib import * From b23a699a5ab84d027f6af818741a7991a79f9ccd Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 23 Apr 2010 22:10:25 +0100 Subject: [PATCH 09/20] Save MainWindow state and geometry --- openlp/core/ui/mainwindow.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 442943ce2..ad0b17c87 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -717,6 +717,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): log.debug(u'Loading QSettings') settings = QtCore.QSettings() self.recentFiles = settings.value(u'RecentFiles').toStringList() + self.restoreGeometry( + settings.value(u'MainWindow/Geometry').toByteArray()) + self.restoreState( + settings.value(u'MainWindow/State').toByteArray()) def saveSettings(self): log.debug(u'Saving QSettings') @@ -724,6 +728,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): recentFiles = QtCore.QVariant(self.recentFiles) \ if self.recentFiles else QtCore.QVariant() settings.setValue(u'RecentFiles', recentFiles) + settings.setValue( + u'MainWindow/State', QtCore.QVariant(self.saveState())) + settings.setValue( + u'MainWindow/Geometry', QtCore.QVariant(self.saveGeometry())) def updateFileMenu(self): self.FileMenu.clear() From 471f032b6ef35abbfebe81cf029a62cb890597c9 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 23 Apr 2010 22:31:54 +0100 Subject: [PATCH 10/20] Save MainWindow position --- openlp/core/ui/mainwindow.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index ad0b17c87..8546b9d84 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -561,7 +561,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Show the main form, as well as the display form """ - self.showMaximized() + QtGui.QWidget.show(self) #screen_number = self.getMonitorNumber() self.displayManager.setup() if self.displayManager.mainDisplay.isVisible(): @@ -717,6 +717,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): log.debug(u'Loading QSettings') settings = QtCore.QSettings() self.recentFiles = settings.value(u'RecentFiles').toStringList() + self.move(settings.value(u'MainWindow/Position', + QtCore.QVariant(QtCore.QPoint(0, 0))).toPoint()) self.restoreGeometry( settings.value(u'MainWindow/Geometry').toByteArray()) self.restoreState( @@ -728,6 +730,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): recentFiles = QtCore.QVariant(self.recentFiles) \ if self.recentFiles else QtCore.QVariant() settings.setValue(u'RecentFiles', recentFiles) + settings.setValue(u'MainWindow/Position', QtCore.QVariant(self.pos())) settings.setValue( u'MainWindow/State', QtCore.QVariant(self.saveState())) settings.setValue( From f895c66eb1791f2142e3cc2d300c26ed7e27dd8c Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Mon, 26 Apr 2010 17:41:31 +0100 Subject: [PATCH 11/20] Clean up saving UI settings --- openlp/core/lib/dockwidget.py | 5 ---- openlp/core/lib/settingsmanager.py | 29 ++++---------------- openlp/core/ui/mainwindow.py | 44 ++++++++++++------------------ 3 files changed, 24 insertions(+), 54 deletions(-) diff --git a/openlp/core/lib/dockwidget.py b/openlp/core/lib/dockwidget.py index fcee02af8..083c99184 100644 --- a/openlp/core/lib/dockwidget.py +++ b/openlp/core/lib/dockwidget.py @@ -43,8 +43,3 @@ class OpenLPDockWidget(QtGui.QDockWidget): self.setObjectName(name) self.setFloating(False) log.debug(u'Init done') - - def closeEvent(self, event): - self.parent.settingsmanager.setUIItemVisibility( - self.objectName(), False) - event.accept() diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index fe2858cd0..60671ec64 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -23,8 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from openlp.core.lib import str_to_bool -from openlp.core.utils import ConfigHelper +from PyQt4 import QtCore class SettingsManager(object): """ @@ -33,6 +32,7 @@ class SettingsManager(object): individual components. """ def __init__(self, screen): + self.settings = QtCore.QSettings() self.screen = screen.current self.width = self.screen[u'size'].width() self.height = self.screen[u'size'].height() @@ -50,26 +50,9 @@ class SettingsManager(object): self.mainwindow_left + self.mainwindow_right) - 100 ) / 2 self.slidecontroller_image = self.slidecontroller - 50 - self.showMediaManager = str_to_bool(ConfigHelper.get_config( - u'user interface', u'media manager', True)) - self.showServiceManager = str_to_bool(ConfigHelper.get_config( - u'user interface', u'service manager', True)) - self.showThemeManager = str_to_bool(ConfigHelper.get_config( - u'user interface', u'theme manager', True)) - self.showPreviewPanel = str_to_bool(ConfigHelper.get_config( - u'user interface', u'preview panel', True)) - - def setUIItemVisibility(self, item=u'', isVisible=True): - if item: - if item == u'ThemeManagerDock': - ConfigHelper.set_config(u'user interface', - u'theme manager', isVisible) - elif item == u'ServiceManagerDock': - ConfigHelper.set_config(u'user interface', - u'service manager', isVisible) - elif item == u'MediaManagerDock': - ConfigHelper.set_config(u'user interface', - u'media manager', isVisible) + self.showPreviewPanel = self.settings.value( + u'user interface/preview panel', True).toBool() def togglePreviewPanel(self, isVisible): - ConfigHelper.set_config(u'user interface', u'preview panel', isVisible) + self.settings.setValue(u'user interface/preview panel', + QtCore.QVariant(isVisible)) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 8546b9d84..e519623fd 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -162,7 +162,6 @@ class Ui_MainWindow(object): self.MediaManagerDock.setWidget(self.MediaManagerContents) MainWindow.addDockWidget( QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock) - self.MediaManagerDock.setVisible(self.settingsmanager.showMediaManager) # Create the service manager self.ServiceManagerDock = OpenLPDockWidget(MainWindow) ServiceManagerIcon = build_icon(u':/system/system_servicemanager.png') @@ -174,18 +173,17 @@ class Ui_MainWindow(object): self.ServiceManagerDock.setWidget(self.ServiceManagerContents) MainWindow.addDockWidget( QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock) - self.ServiceManagerDock.setVisible( - self.settingsmanager.showServiceManager) # Create the theme manager self.ThemeManagerDock = OpenLPDockWidget(MainWindow) ThemeManagerIcon = build_icon(u':/system/system_thememanager.png') self.ThemeManagerDock.setWindowIcon(ThemeManagerIcon) self.ThemeManagerDock.setObjectName(u'ThemeManagerDock') + self.ThemeManagerDock.setMinimumWidth( + self.settingsmanager.mainwindow_right) self.ThemeManagerContents = ThemeManager(self) self.ThemeManagerDock.setWidget(self.ThemeManagerContents) MainWindow.addDockWidget( QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock) - self.ThemeManagerDock.setVisible(self.settingsmanager.showThemeManager) # Create the menu items self.FileNewItem = QtGui.QAction(MainWindow) self.FileNewItem.setIcon( @@ -224,20 +222,18 @@ class Ui_MainWindow(object): self.OptionsSettingsItem.setObjectName(u'OptionsSettingsItem') self.ViewMediaManagerItem = QtGui.QAction(MainWindow) self.ViewMediaManagerItem.setCheckable(True) - self.ViewMediaManagerItem.setChecked( - self.settingsmanager.showMediaManager) + self.ViewMediaManagerItem.setChecked(self.MediaManagerDock.isVisible()) self.ViewMediaManagerItem.setIcon(MediaManagerIcon) self.ViewMediaManagerItem.setObjectName(u'ViewMediaManagerItem') self.ViewThemeManagerItem = QtGui.QAction(MainWindow) self.ViewThemeManagerItem.setCheckable(True) - self.ViewThemeManagerItem.setChecked( - self.settingsmanager.showThemeManager) + self.ViewThemeManagerItem.setChecked(self.ThemeManagerDock.isVisible()) self.ViewThemeManagerItem.setIcon(ThemeManagerIcon) self.ViewThemeManagerItem.setObjectName(u'ViewThemeManagerItem') self.ViewServiceManagerItem = QtGui.QAction(MainWindow) self.ViewServiceManagerItem.setCheckable(True) self.ViewServiceManagerItem.setChecked( - self.settingsmanager.showServiceManager) + self.ServiceManagerDock.isVisible()) self.ViewServiceManagerItem.setIcon(ServiceManagerIcon) self.ViewServiceManagerItem.setObjectName(u'ViewServiceManagerItem') self.PluginItem = QtGui.QAction(MainWindow) @@ -693,20 +689,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def toggleMediaManager(self, visible): if self.MediaManagerDock.isVisible() != visible: self.MediaManagerDock.setVisible(visible) - self.settingsmanager.setUIItemVisibility( - self.MediaManagerDock.objectName(), visible) def toggleServiceManager(self, visible): if self.ServiceManagerDock.isVisible() != visible: self.ServiceManagerDock.setVisible(visible) - self.settingsmanager.setUIItemVisibility( - self.ServiceManagerDock.objectName(), visible) def toggleThemeManager(self, visible): if self.ThemeManagerDock.isVisible() != visible: self.ThemeManagerDock.setVisible(visible) - self.settingsmanager.setUIItemVisibility( - self.ThemeManagerDock.objectName(), visible) def togglePreviewPanel(self): previewBool = self.PreviewController.Panel.isVisible() @@ -716,25 +706,27 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def loadSettings(self): log.debug(u'Loading QSettings') settings = QtCore.QSettings() - self.recentFiles = settings.value(u'RecentFiles').toStringList() - self.move(settings.value(u'MainWindow/Position', + self.recentFiles = settings.value( + u'general/recent files').toStringList() + self.move(settings.value(u'user interface/main window position', QtCore.QVariant(QtCore.QPoint(0, 0))).toPoint()) - self.restoreGeometry( - settings.value(u'MainWindow/Geometry').toByteArray()) + self.restoreGeometry(settings.value( + u'user interface/main window geometry').toByteArray()) self.restoreState( - settings.value(u'MainWindow/State').toByteArray()) + settings.value(u'user interface/main window state').toByteArray()) def saveSettings(self): log.debug(u'Saving QSettings') settings = QtCore.QSettings() recentFiles = QtCore.QVariant(self.recentFiles) \ if self.recentFiles else QtCore.QVariant() - settings.setValue(u'RecentFiles', recentFiles) - settings.setValue(u'MainWindow/Position', QtCore.QVariant(self.pos())) - settings.setValue( - u'MainWindow/State', QtCore.QVariant(self.saveState())) - settings.setValue( - u'MainWindow/Geometry', QtCore.QVariant(self.saveGeometry())) + settings.setValue(u'general/recent files', recentFiles) + settings.setValue(u'user interface/main window position', + QtCore.QVariant(self.pos())) + settings.setValue(u'user interface/main window state', + QtCore.QVariant(self.saveState())) + settings.setValue(u'user interface/main window geometry', + QtCore.QVariant(self.saveGeometry())) def updateFileMenu(self): self.FileMenu.clear() From 96051838127aabe6b1464340af59bc0905083f2f Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 27 Apr 2010 17:27:57 +0100 Subject: [PATCH 12/20] Config file to QSettings conversion --- openlp.pyw | 8 +- openlp/core/lib/__init__.py | 1 - openlp/core/lib/mediamanageritem.py | 11 +- openlp/core/lib/plugin.py | 27 ++- openlp/core/lib/pluginconfig.py | 194 ------------------ openlp/core/lib/settingsmanager.py | 132 +++++++++++- openlp/core/lib/settingstab.py | 15 +- openlp/core/ui/generaltab.py | 84 +++++--- openlp/core/ui/mainwindow.py | 24 +-- openlp/core/ui/servicemanager.py | 44 ++-- openlp/core/ui/slidecontroller.py | 32 +-- openlp/core/ui/thememanager.py | 29 ++- openlp/core/ui/themestab.py | 18 +- openlp/core/utils/__init__.py | 32 ++- openlp/core/utils/confighelper.py | 76 ------- openlp/core/utils/registry.py | 134 ------------ openlp/plugins/alerts/alertsplugin.py | 5 +- openlp/plugins/alerts/forms/alertstab.py | 40 ++-- openlp/plugins/alerts/lib/manager.py | 20 +- openlp/plugins/bibles/bibleplugin.py | 2 +- .../plugins/bibles/forms/importwizardform.py | 29 ++- openlp/plugins/bibles/lib/biblestab.py | 48 +++-- openlp/plugins/bibles/lib/db.py | 18 +- openlp/plugins/bibles/lib/manager.py | 27 ++- openlp/plugins/bibles/lib/mediaitem.py | 9 +- openlp/plugins/bibles/lib/osis.py | 3 +- openlp/plugins/custom/customplugin.py | 2 +- openlp/plugins/custom/lib/customtab.py | 13 +- openlp/plugins/custom/lib/manager.py | 25 ++- openlp/plugins/custom/lib/mediaitem.py | 6 +- openlp/plugins/images/lib/imagetab.py | 10 +- openlp/plugins/images/lib/mediaitem.py | 15 +- openlp/plugins/media/lib/mediaitem.py | 12 +- openlp/plugins/presentations/lib/mediaitem.py | 24 ++- .../lib/presentationcontroller.py | 21 +- .../presentations/lib/presentationtab.py | 14 +- openlp/plugins/remotes/lib/remotetab.py | 12 +- openlp/plugins/remotes/remoteplugin.py | 3 +- openlp/plugins/songs/lib/manager.py | 20 +- openlp/plugins/songs/lib/mediaitem.py | 8 +- openlp/plugins/songs/lib/songstab.py | 21 +- openlp/plugins/songs/songsplugin.py | 4 +- .../songusage/forms/songusagedetailform.py | 10 +- openlp/plugins/songusage/lib/manager.py | 25 ++- openlp/plugins/songusage/songusageplugin.py | 17 +- 45 files changed, 560 insertions(+), 764 deletions(-) delete mode 100644 openlp/core/lib/pluginconfig.py delete mode 100644 openlp/core/utils/confighelper.py delete mode 100644 openlp/core/utils/registry.py diff --git a/openlp.pyw b/openlp.pyw index 61dd75d36..69e36618c 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -34,10 +34,10 @@ from PyQt4 import QtCore, QtGui log = logging.getLogger() -from openlp.core.lib import Receiver, str_to_bool +from openlp.core.lib import Receiver from openlp.core.resources import qInitResources from openlp.core.ui import MainWindow, SplashScreen, ScreenList -from openlp.core.utils import AppLocation, ConfigHelper +from openlp.core.utils import AppLocation application_stylesheet = u""" QMainWindow::separator @@ -119,8 +119,8 @@ class OpenLP(QtGui.QApplication): self.setApplicationVersion(app_version[u'version']) if os.name == u'nt': self.setStyleSheet(application_stylesheet) - show_splash = str_to_bool(ConfigHelper.get_registry().get_value( - u'general', u'show splash', True)) + show_splash = QtCore.QSettings().value( + u'general/show splash', True).toBool() if show_splash: self.splash = SplashScreen(self.applicationVersion()) self.splash.show() diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 38bcd127c..c8570a643 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -164,7 +164,6 @@ class ThemeLevel(object): from eventreceiver import Receiver from settingsmanager import SettingsManager -from pluginconfig import PluginConfig from plugin import PluginStatus, Plugin from pluginmanager import PluginManager from settingstab import SettingsTab diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 86b8e608c..bf27ed38a 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -29,7 +29,8 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib.toolbar import * -from openlp.core.lib import contextMenuAction, contextMenuSeparator +from openlp.core.lib import contextMenuAction, contextMenuSeparator, \ + SettingsManager from serviceitem import ServiceItem log = logging.getLogger(__name__) @@ -334,13 +335,15 @@ class MediaManagerItem(QtGui.QWidget): def onFileClick(self): files = QtGui.QFileDialog.getOpenFileNames( self, self.OnNewPrompt, - self.parent.config.get_last_dir(), self.OnNewFileMasks) + SettingsManager.get_last_dir(self.ConfigSection), + self.OnNewFileMasks) log.info(u'New files(s) %s', unicode(files)) if files: self.loadList(files) dir, filename = os.path.split(unicode(files[0])) - self.parent.config.set_last_dir(dir) - self.parent.config.set_list(self.ConfigSection, self.getFileList()) + SettingsManager.set_last_dir(self.ConfigSection, dir) + SettingsManager.set_list( + self.ConfigSection, self.ConfigSection, self.getFileList()) def getFileList(self): count = 0 diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 57dd984c3..f01fa0807 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -24,9 +24,10 @@ ############################################################################### import logging + from PyQt4 import QtCore -from openlp.core.lib import PluginConfig, Receiver +from openlp.core.lib import Receiver log = logging.getLogger(__name__) @@ -53,10 +54,6 @@ class Plugin(QtCore.QObject): ``icon`` An instance of QIcon, which holds an icon for this plugin. - ``config`` - An instance of PluginConfig, which allows plugins to read and write to - openlp.org's configuration. This is pre-instantiated. - ``log`` A log object used to log debugging messages. This is pre-instantiated. @@ -78,7 +75,8 @@ class Plugin(QtCore.QObject): Add an item to the Export menu. ``get_settings_tab()`` - Returns an instance of SettingsTabItem to be used in the Settings dialog. + Returns an instance of SettingsTabItem to be used in the Settings + dialog. ``add_to_menu(menubar)`` A method to add a menu item to anywhere in the menu, given the menu bar. @@ -116,7 +114,6 @@ class Plugin(QtCore.QObject): if version: self.version = version self.icon = None - self.config = PluginConfig(self.name) self.weight = 0 self.status = PluginStatus.Inactive # Set up logging @@ -125,7 +122,7 @@ class Plugin(QtCore.QObject): self.live_controller = plugin_helpers[u'live'] self.render_manager = plugin_helpers[u'render'] self.service_manager = plugin_helpers[u'service'] - self.settings = plugin_helpers[u'settings'] + self.settings_form = plugin_helpers[u'settings form'] self.mediadock = plugin_helpers[u'toolbox'] self.maindisplay = plugin_helpers[u'maindisplay'] QtCore.QObject.connect(Receiver.get_receiver(), @@ -145,15 +142,16 @@ class Plugin(QtCore.QObject): """ Sets the status of the plugin """ - self.status = int(self.config.get_config(u'status', - PluginStatus.Inactive)) + self.status = QtCore.QSettings().value( + self.name.lower() + u'/status', PluginStatus.Inactive).toInt()[0] def toggle_status(self, new_status): """ Changes the status of the plugin and remembers it """ self.status = new_status - self.config.set_config(u'status', self.status) + QtCore.QSettings().setValue( + self.name.lower() + u'/status', QtCore.QVariant(self.status)) def is_active(self): """ @@ -216,7 +214,8 @@ class Plugin(QtCore.QObject): """ Generic Drag and drop handler triggered from service_manager. """ - log.debug(u'process_add_service_event event called for plugin %s' % self.name) + log.debug(u'process_add_service_event event called for plugin %s' % + self.name) self.media_item.onAddClick() def about(self): @@ -244,7 +243,7 @@ class Plugin(QtCore.QObject): Called by the plugin to remove toolbar """ self.mediadock.remove_dock(self.name) - self.settings.removeTab(self.name) + self.settings_form.removeTab(self.name) def insert_toolbox_item(self): """ @@ -253,7 +252,7 @@ class Plugin(QtCore.QObject): if self.media_item: self.mediadock.insert_dock(self.media_item, self.icon, self.weight) if self.settings_tab: - self.settings.insertTab(self.settings_tab, self.weight) + self.settings_form.insertTab(self.settings_tab, self.weight) def can_delete_theme(self, theme): """ diff --git a/openlp/core/lib/pluginconfig.py b/openlp/core/lib/pluginconfig.py deleted file mode 100644 index e27b86669..000000000 --- a/openlp/core/lib/pluginconfig.py +++ /dev/null @@ -1,194 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin # -# Thompson, Jon Tibble, Carsten Tinggaard # -# --------------------------------------------------------------------------- # -# This program is free software; you can redistribute it and/or modify it # -# under the terms of the GNU General Public License as published by the Free # -# Software Foundation; version 2 of the License. # -# # -# This program is distributed in the hope that it will be useful, but WITHOUT # -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # -# more details. # -# # -# You should have received a copy of the GNU General Public License along # -# with this program; if not, write to the Free Software Foundation, Inc., 59 # -# Temple Place, Suite 330, Boston, MA 02111-1307 USA # -############################################################################### - -import os - -from openlp.core.utils import ConfigHelper - -class PluginConfig(object): - """ - This is a generic config helper for plugins. - """ - def __init__(self, plugin_name): - """ - Initialise the plugin config object, setting the section name to the - plugin name. - - ``plugin_name`` - The name of the plugin to use as a section name. - """ - self.section = plugin_name.lower() - - def get_config(self, key, default=None): - """ - Get a configuration value from the configuration registry. - - ``key`` - The name of configuration to load. - - ``default`` - Defaults to *None*. The default value to return if there is no - other value. - """ - return ConfigHelper.get_config(self.section, key, default) - - def delete_config(self, key): - """ - Delete a configuration value from the configuration registry. - - ``key`` - The name of the configuration to remove. - """ - return ConfigHelper.delete_config(self.section, key) - - def set_config(self, key, value): - """ - Set a configuration value in the configuration registry. - - ``key`` - The name of the configuration to save. - - ``value`` - The value of the configuration to save. - """ - return ConfigHelper.set_config(self.section, key, value) - - def get_data_path(self): - """ - Dynamically build the data file path for a plugin. - """ - #app_data = ConfigHelper.get_data_path() - app_data = ConfigHelper.get_data_path() - safe_name = self.section.replace(u' ',u'-') - plugin_data = self.get_config(u'data path', safe_name) - path = os.path.join(app_data, plugin_data) - if not os.path.exists(path): - os.makedirs(path) - return path - - def set_data_path(self, path): - """ - Set the data file path. - - ``path`` - The path to save. - """ - return self.set_config(u'data path', os.path.basename(path)) - - def get_files(self, suffix=None): - """ - Get a list of files from the data files path. - - ``suffix`` - Defaults to *None*. The extension to search for. - """ - try: - files = os.listdir(self.get_data_path()) - except: - return [] - if suffix: - return_files = [] - for file in files: - if file.find(u'.') != -1: - filename = file.split(u'.') - #bname = nme[0] - filesuffix = filename[1].lower() - filesuffix = filesuffix.lower() - # only load files with the correct suffix - if suffix.find(filesuffix) > -1 : - return_files.append(file) - return return_files - else: - # no filtering required - return files - - def load_list(self, name): - """ - Load a list from the config file. - - ``name`` - The name of the list. - """ - list_count = self.get_config(u'%s count' % name) - if list_count: - list_count = int(list_count) - else: - list_count = 0 - list = [] - if list_count > 0: - for counter in range(0, list_count): - item = self.get_config(u'%s %d' % (name, counter)) - if item: - list.append(item) - return list - - def set_list(self, name, list): - """ - Save a list to the config file. - - ``name`` - The name of the list to save. - - ``list`` - The list of values to save. - """ - old_count = int(self.get_config(u'%s count' % name, int(0))) - new_count = len(list) - self.set_config(u'%s count' % name, new_count) - for counter in range (0, new_count): - self.set_config(u'%s %d' % (name, counter), list[counter-1]) - if old_count > new_count: - # Tidy up any old list itrms if list is smaller now - for counter in range(new_count, old_count): - self.delete_config(u'%s %d' % (name, counter)) - - def get_last_dir(self, num=None): - """ - Read the last directory used for plugin. - - ``num`` - Defaults to *None*. A further qualifier. - """ - if num: - name = u'last directory %d' % num - else: - name = u'last directory' - last_dir = self.get_config(name) - if not last_dir: - last_dir = u'' - return last_dir - - def set_last_dir(self, directory, num=None): - """ - Save the last directory used for plugin. - - ``num`` - Defaults to *None*. A further qualifier. - """ - if num: - name = u'last directory %d' % num - else: - name = u'last directory' - self.set_config(name, directory) diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index 60671ec64..c86170988 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -25,14 +25,14 @@ from PyQt4 import QtCore +from openlp.core.utils import AppLocation + class SettingsManager(object): """ - Class to control the size of the UI components so they size correctly. - This class is created by the main window and then calculates the size of - individual components. + Class to control the initial settings for the UI and provide helper + functions for the loading and saving of application settings. """ def __init__(self, screen): - self.settings = QtCore.QSettings() self.screen = screen.current self.width = self.screen[u'size'].width() self.height = self.screen[u'size'].height() @@ -50,9 +50,129 @@ class SettingsManager(object): self.mainwindow_left + self.mainwindow_right) - 100 ) / 2 self.slidecontroller_image = self.slidecontroller - 50 - self.showPreviewPanel = self.settings.value( + self.showPreviewPanel = QtCore.QSettings().value( u'user interface/preview panel', True).toBool() def togglePreviewPanel(self, isVisible): - self.settings.setValue(u'user interface/preview panel', + QtCore.QSettings().setValue(u'user interface/preview panel', QtCore.QVariant(isVisible)) + + @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' + last_dir = unicode(QtCore.QSettings().value( + section + u'/' + name, u'').toString()) + return last_dir + + @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' + QtCore.QSettings().setValue( + section + u'/' + name, QtCore.QVariant(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 = QtCore.QSettings() + old_count = settings.value( + u'%s/%s count' % (section, name), 0).toInt()[0] + new_count = len(list) + settings.setValue( + u'%s/%s count' % (section, name), QtCore.QVariant(new_count)) + for counter in range (0, new_count): + settings.setValue( + u'%s/%s %d' % (section, name, counter), list[counter-1]) + if old_count > new_count: + # Tidy up any old list itrms if list is smaller now + for counter in range(new_count, old_count): + settings.remove(u'%s/%s %d' % (section, name, counter)) + + @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 = QtCore.QSettings() + list_count = settings.value( + u'%s/%s count' % (section, name), 0).toInt()[0] + list = [] + if list_count: + for counter in range(0, list_count): + item = unicode(settings.value( + u'%s/%s %d' % (section, name, counter)).toString()) + if item: + list.append(item) + return list + + @staticmethod + def get_files(suffix=None): + """ + Get a list of files from the data files path. + + ``suffix`` + Defaults to *None*. The extension to search for. + """ + try: + files = os.listdir(AppLocation.get_data_path()) + except: + return [] + if suffix: + return_files = [] + for file in files: + if file.find(u'.') != -1: + filename = file.split(u'.') + filesuffix = filename[1].lower() + filesuffix = filesuffix.lower() + # only load files with the correct suffix + if suffix.find(filesuffix) > -1 : + return_files.append(file) + return return_files + else: + # no filtering required + return files diff --git a/openlp/core/lib/settingstab.py b/openlp/core/lib/settingstab.py index 930ce6bc8..6f1aef854 100644 --- a/openlp/core/lib/settingstab.py +++ b/openlp/core/lib/settingstab.py @@ -25,24 +25,17 @@ from PyQt4 import QtGui -from openlp.core.lib import PluginConfig - class SettingsTab(QtGui.QWidget): """ SettingsTab is a helper widget for plugins to define Tabs for the settings dialog. """ - def __init__(self, title, section=None): + def __init__(self, title): """ Constructor to create the Settings tab item. ``title`` - Defaults to *None*. The title of the tab, which is usually - displayed on the tab. - - ``section`` - Defaults to *None*. This is the section in the configuration file - to write to when the ``save`` method is called. + The title of the tab, which is usually displayed on the tab. """ QtGui.QWidget.__init__(self) self.tabTitle = title @@ -50,10 +43,6 @@ class SettingsTab(QtGui.QWidget): self.setupUi() self.retranslateUi() self.initialise() - if section is None: - self.config = PluginConfig(title) - else: - self.config = PluginConfig(section) self.preLoad() self.load() diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index f7e87e879..bb35d8f2a 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -25,7 +25,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, str_to_bool, Receiver +from openlp.core.lib import SettingsTab, Receiver class GeneralTab(SettingsTab): """ @@ -41,11 +41,13 @@ class GeneralTab(SettingsTab): values. If not set before default to last screen. """ - self.MonitorNumber = int(self.config.get_config(u'monitor', - self.screens.monitor_number)) + settings = QtCore.QSettings() + self.MonitorNumber = settings.value( + u'general/monitor', self.screens.monitor_number).toInt()[0] self.screens.set_current_display(self.MonitorNumber) self.screens.monitor_number = self.MonitorNumber - self.DisplayOnMonitor = str_to_bool(self.config.get_config(u'display on monitor', u'True')) + self.DisplayOnMonitor = settings.value( + u'general/display on monitor', True).toBool() self.screens.display = self.DisplayOnMonitor def setupUi(self): @@ -151,15 +153,18 @@ class GeneralTab(SettingsTab): QtCore.QObject.connect(self.MonitorComboBox, QtCore.SIGNAL(u'activated(int)'), self.onMonitorComboBoxChanged) QtCore.QObject.connect(self.DisplayOnMonitorCheck, - QtCore.SIGNAL(u'stateChanged(int)'), self.onDisplayOnMonitorCheckChanged) + QtCore.SIGNAL(u'stateChanged(int)'), + self.onDisplayOnMonitorCheckChanged) QtCore.QObject.connect(self.WarningCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onWarningCheckBoxChanged) QtCore.QObject.connect(self.AutoOpenCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onAutoOpenCheckBoxChanged) QtCore.QObject.connect(self.ShowSplashCheckBox, - QtCore.SIGNAL(u'stateChanged(int)'), self.onShowSplashCheckBoxChanged) + QtCore.SIGNAL(u'stateChanged(int)'), + self.onShowSplashCheckBoxChanged) QtCore.QObject.connect(self.SaveCheckServiceCheckBox, - QtCore.SIGNAL(u'stateChanged(int)'), self.onSaveCheckServiceCheckBox) + QtCore.SIGNAL(u'stateChanged(int)'), + self.onSaveCheckServiceCheckBox) QtCore.QObject.connect(self.AutoPreviewCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onAutoPreviewCheckBox) QtCore.QObject.connect(self.NumberEdit, @@ -171,15 +176,20 @@ class GeneralTab(SettingsTab): def retranslateUi(self): self.MonitorGroupBox.setTitle(self.trUtf8('Monitors')) - self.MonitorLabel.setText(self.trUtf8('Select monitor for output display:')) - self.DisplayOnMonitorCheck.setText(self.trUtf8('Display if in single screen')) + self.MonitorLabel.setText( + self.trUtf8('Select monitor for output display:')) + self.DisplayOnMonitorCheck.setText( + self.trUtf8('Display if in single screen')) self.StartupGroupBox.setTitle(self.trUtf8('Application Startup')) self.WarningCheckBox.setText(self.trUtf8('Show blank screen warning')) - self.AutoOpenCheckBox.setText(self.trUtf8('Automatically open the last service')) + self.AutoOpenCheckBox.setText( + self.trUtf8('Automatically open the last service')) self.ShowSplashCheckBox.setText(self.trUtf8('Show the splash screen')) self.SettingsGroupBox.setTitle(self.trUtf8('Application Settings')) - self.SaveCheckServiceCheckBox.setText(self.trUtf8('Prompt to save Service before starting New')) - self.AutoPreviewCheckBox.setText(self.trUtf8('Preview Next Song from Service Manager')) + self.SaveCheckServiceCheckBox.setText( + self.trUtf8('Prompt to save Service before starting New')) + self.AutoPreviewCheckBox.setText( + self.trUtf8('Preview Next Song from Service Manager')) self.CCLIGroupBox.setTitle(self.trUtf8('CCLI Details')) self.NumberLabel.setText(self.trUtf8('CCLI Number:')) self.UsernameLabel.setText(self.trUtf8('SongSelect Username:')) @@ -216,20 +226,30 @@ class GeneralTab(SettingsTab): self.Password = self.PasswordEdit.displayText() def load(self): + settings = QtCore.QSettings() for screen in self.screens.screen_list: - screen_name = u'%s %d' % (self.trUtf8('Screen'), screen[u'number'] + 1) + screen_name = u'%s %d' % (self.trUtf8('Screen'), + screen[u'number'] + 1) if screen[u'primary']: screen_name = u'%s (%s)' % (screen_name, self.trUtf8('primary')) self.MonitorComboBox.addItem(screen_name) # Get the configs - self.Warning = str_to_bool(self.config.get_config(u'blank warning', u'False')) - self.AutoOpen = str_to_bool(self.config.get_config(u'auto open', u'False')) - self.ShowSplash = str_to_bool(self.config.get_config(u'show splash', u'True')) - self.PromptSaveService = str_to_bool(self.config.get_config(u'save prompt', u'False')) - self.AutoPreview = str_to_bool(self.config.get_config(u'auto preview', u'False')) - self.CCLINumber = unicode(self.config.get_config(u'ccli number', u'')) - self.Username = unicode(self.config.get_config(u'songselect username', u'')) - self.Password = unicode(self.config.get_config(u'songselect password', u'')) + self.Warning = settings.value( + u'general/blank warning', QtCore.QVariant(False)).toBool() + self.AutoOpen = settings.value( + u'general/auto open', QtCore.QVariant(False)).toBool() + self.ShowSplash = settings.value( + u'general/show splash', QtCore.QVariant(True)).toBool() + self.PromptSaveService = settings.value( + u'general/save prompt', QtCore.QVariant(False)).toBool() + self.AutoPreview = settings.value( + u'general/auto preview', QtCore.QVariant(False)).toBool() + self.CCLINumber = unicode(settings.value( + u'general/ccli number', QtCore.QVariant(u'')).toString()) + self.Username = unicode(settings.value( + u'general/songselect username', QtCore.QVariant(u'')).toString()) + self.Password = unicode(settings.value( + u'general/songselect password', QtCore.QVariant(u'')).toString()) self.SaveCheckServiceCheckBox.setChecked(self.PromptSaveService) # Set a few things up self.MonitorComboBox.setCurrentIndex(self.MonitorNumber) @@ -243,16 +263,18 @@ class GeneralTab(SettingsTab): self.PasswordEdit.setText(self.Password) def save(self): - self.config.set_config(u'monitor', self.MonitorNumber) - self.config.set_config(u'display on monitor', self.DisplayOnMonitor) - self.config.set_config(u'blank warning', self.Warning) - self.config.set_config(u'auto open', self.AutoOpen) - self.config.set_config(u'show splash', self.ShowSplash) - self.config.set_config(u'save prompt', self.PromptSaveService) - self.config.set_config(u'auto preview', self.AutoPreview) - self.config.set_config(u'ccli number', self.CCLINumber) - self.config.set_config(u'songselect username', self.Username) - self.config.set_config(u'songselect password', self.Password) + settings = QtCore.QSettings() + settings.setValue(u'general/monitor', self.MonitorNumber) + settings.setValue( + u'general/display on monitor', self.DisplayOnMonitor) + settings.setValue(u'general/blank warning', self.Warning) + settings.setValue(u'general/auto open', self.AutoOpen) + settings.setValue(u'general/show splash', self.ShowSplash) + settings.setValue(u'general/save prompt', self.PromptSaveService) + settings.setValue(u'general/auto preview', self.AutoPreview) + settings.setValue(u'general/ccli number', self.CCLINumber) + settings.setValue(u'general/songselect username', self.Username) + settings.setValue(u'general/songselect password', self.Password) self.screens.display = self.DisplayOnMonitor #Monitor Number has changed. if self.screens.monitor_number != self.MonitorNumber: diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index e519623fd..96357f83d 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -30,8 +30,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ThemeManager, SlideController, PluginForm, MediaDockManager, DisplayManager -from openlp.core.lib import RenderManager, PluginConfig, build_icon, \ - OpenLPDockWidget, SettingsManager, PluginManager, Receiver, str_to_bool +from openlp.core.lib import RenderManager, build_icon, OpenLPDockWidget, \ + SettingsManager, PluginManager, Receiver from openlp.core.utils import check_latest_version, AppLocation, add_actions log = logging.getLogger(__name__) @@ -56,11 +56,10 @@ class VersionThread(QtCore.QThread): A special Qt thread class to fetch the version of OpenLP from the website. This is threaded so that it doesn't affect the loading time of OpenLP. """ - def __init__(self, parent, app_version, generalConfig): + def __init__(self, parent, app_version): QtCore.QThread.__init__(self, parent) self.parent = parent self.app_version = app_version - self.generalConfig = generalConfig def run(self): """ @@ -68,7 +67,7 @@ class VersionThread(QtCore.QThread): """ time.sleep(1) Receiver.send_message(u'maindisplay_blank_check') - version = check_latest_version(self.generalConfig, self.app_version) + version = check_latest_version(self.app_version) #new version has arrived if version != self.app_version[u'full']: Receiver.send_message(u'openlp_version_check', u'%s' % version) @@ -422,7 +421,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.applicationVersion = applicationVersion self.serviceNotSaved = False self.settingsmanager = SettingsManager(screens) - self.generalConfig = PluginConfig(u'General') self.displayManager = DisplayManager(screens) self.aboutForm = AboutForm(self, applicationVersion) self.settingsForm = SettingsForm(self.screens, self, self) @@ -510,7 +508,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.plugin_helpers[u'live'] = self.LiveController self.plugin_helpers[u'render'] = self.RenderManager self.plugin_helpers[u'service'] = self.ServiceManagerContents - self.plugin_helpers[u'settings'] = self.settingsForm + self.plugin_helpers[u'settings form'] = self.settingsForm self.plugin_helpers[u'toolbox'] = self.mediaDockManager self.plugin_helpers[u'maindisplay'] = self.displayManager.mainDisplay self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers) @@ -563,7 +561,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.displayManager.mainDisplay.isVisible(): self.displayManager.mainDisplay.setFocus() self.activateWindow() - if str_to_bool(self.generalConfig.get_config(u'auto open', False)): + if QtCore.QSettings().value(u'general/auto open', False).toBool(): self.ServiceManagerContents.onLoadService(True) def blankCheck(self): @@ -571,8 +569,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): Check and display message if screen blank on setup. Triggered by delay thread. """ - if str_to_bool(self.generalConfig.get_config(u'screen blank', False)) \ - and str_to_bool(self.generalConfig.get_config(u'blank warning', False)): + if QtCore.QSettings().value(u'general/screen blank', False).toBool() \ + and QtCore.QSettings().value(u'general/blank warning', False).toBool(): self.LiveController.onBlankDisplay(True) QtGui.QMessageBox.question(self, self.trUtf8('OpenLP Main Display Blanked'), @@ -584,7 +582,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Start an initial setup thread to delay notifications """ - vT = VersionThread(self, self.applicationVersion, self.generalConfig) + vT = VersionThread(self, self.applicationVersion) vT.start() def onHelpAboutItemClicked(self): @@ -748,8 +746,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.FileMenu.addAction(self.FileMenuActions[-1]) def addRecentFile(self, filename): - recentFileCount = int(PluginConfig(u'General'). - get_config(u'max recent files', 4)) + recentFileCount = QtCore.QSettings().value( + u'general/max recent files', 4).toInt()[0] if filename and not self.recentFiles.contains(filename): self.recentFiles.prepend(QtCore.QString(filename)) while self.recentFiles.count() > recentFileCount: diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index e76415db5..14bb35113 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -32,9 +32,10 @@ log = logging.getLogger(__name__) from PyQt4 import QtCore, QtGui -from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \ - contextMenuAction, Receiver, str_to_bool, build_icon, ItemCapabilities +from openlp.core.lib import OpenLPToolbar, ServiceItem, contextMenuAction, \ + Receiver, build_icon, ItemCapabilities, SettingsManager from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm +from openlp.core.utils import AppLocation class ServiceManagerList(QtGui.QTreeWidget): @@ -189,10 +190,9 @@ class ServiceManager(QtGui.QWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.regenerateServiceItems) # Last little bits of setting up - self.config = PluginConfig(u'ServiceManager') - self.servicePath = self.config.get_data_path() - self.service_theme = unicode( - self.config.get_config(u'service theme', u'')) + self.service_theme = unicode(QtCore.QSettings().value( + u'service manager/service theme', u'').toString()) + self.servicePath = AppLocation.get_section_data_path(u'servicemanager') #build the context menu self.menu = QtGui.QMenu() self.editAction = self.menu.addAction(self.trUtf8('&Edit Item')) @@ -201,7 +201,8 @@ class ServiceManager(QtGui.QWidget): self.editAction.setIcon(build_icon(u':/general/general_edit.png')) self.notesAction = self.menu.addAction(self.trUtf8('&Notes')) self.notesAction.setIcon(build_icon(u':/services/service_notes.png')) - self.deleteAction = self.menu.addAction(self.trUtf8('&Delete From Service')) + self.deleteAction = self.menu.addAction( + self.trUtf8('&Delete From Service')) self.deleteAction.setIcon(build_icon(u':/general/general_delete.png')) self.sep1 = self.menu.addAction(u'') self.sep1.setSeparator(True) @@ -402,8 +403,7 @@ class ServiceManager(QtGui.QWidget): Clear the list to create a new service """ if self.parent.serviceNotSaved and \ - str_to_bool(PluginConfig(u'General'). - get_config(u'save prompt', u'False')): + QtCore.QSettings().value(u'general/save prompt', False).toBool(): ret = QtGui.QMessageBox.question(self, self.trUtf8('Save Changes to Service?'), self.trUtf8('Your service is unsaved, do you want to save ' @@ -486,17 +486,18 @@ class ServiceManager(QtGui.QWidget): log.debug(u'onSaveService') if not quick or self.isNew: filename = QtGui.QFileDialog.getSaveFileName(self, - self.trUtf8(u'Save Service'), self.config.get_last_dir(), + self.trUtf8(u'Save Service'), + SettingsManager.get_last_dir(u'servicemanager'), self.trUtf8(u'OpenLP Service Files (*.osz)')) else: - filename = self.config.get_last_dir() + filename = SettingsManager.get_last_dir(u'servicemanager') if filename: splittedFile = filename.split(u'.') if splittedFile[-1] != u'osz': filename = filename + u'.osz' filename = unicode(filename) self.isNew = False - self.config.set_last_dir(filename) + SettingsManager.set_last_dir(u'servicemanager', filename) service = [] servicefile = filename + u'.osd' zip = None @@ -537,11 +538,12 @@ class ServiceManager(QtGui.QWidget): def onLoadService(self, lastService=False): if lastService: - filename = self.config.get_last_dir() + filename = SettingsManager.get_last_dir(u'servicemanager') else: filename = QtGui.QFileDialog.getOpenFileName( self, self.trUtf8('Open Service'), - self.config.get_last_dir(), u'Services (*.osz)') + SettingsManager.get_last_dir(u'servicemanager'), + u'Services (*.osz)') self.loadService(filename) def loadService(self, filename=None): @@ -570,7 +572,7 @@ class ServiceManager(QtGui.QWidget): filename = unicode(filename) name = filename.split(os.path.sep) if filename: - self.config.set_last_dir(filename) + SettingsManager.set_last_dir(u'servicemanager', filename) zip = None f = None try: @@ -639,7 +641,8 @@ class ServiceManager(QtGui.QWidget): """ self.service_theme = unicode(self.ThemeComboBox.currentText()) self.parent.RenderManager.set_service_theme(self.service_theme) - self.config.set_config(u'service theme', self.service_theme) + QtCore.QSettings().setValue(u'service manager/service theme', + QtCore.QVariant(self.service_theme)) self.regenerateServiceItems() def regenerateServiceItems(self): @@ -651,7 +654,8 @@ class ServiceManager(QtGui.QWidget): self.serviceItems = [] self.isNew = True for item in tempServiceItems: - self.addServiceItem(item[u'service_item'], False, item[u'expanded']) + self.addServiceItem( + item[u'service_item'], False, item[u'expanded']) #Set to False as items may have changed rendering #does not impact the saved song so True may also be valid self.parent.serviceChanged(False, self.serviceName) @@ -720,11 +724,11 @@ class ServiceManager(QtGui.QWidget): item, count = self.findServiceItem() self.parent.LiveController.addServiceManagerItem( self.serviceItems[item][u'service_item'], count) - if str_to_bool(PluginConfig(u'General'). - get_config(u'auto preview', u'False')): + if QtCore.QSettings().value(u'general/auto preview', False).toBool(): item += 1 if self.serviceItems and item < len(self.serviceItems) and \ - self.serviceItems[item][u'service_item'].is_capable(ItemCapabilities.AllowsPreview): + self.serviceItems[item][u'service_item'].is_capable( + ItemCapabilities.AllowsPreview): self.parent.PreviewController.addServiceManagerItem( self.serviceItems[item][u'service_item'], 0) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 2b34a7c0d..260066fa5 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -41,8 +41,7 @@ class HideMode(object): Blank = 1 Theme = 2 -from openlp.core.lib import OpenLPToolbar, Receiver, str_to_bool, \ - PluginConfig, resize_image +from openlp.core.lib import OpenLPToolbar, Receiver, resize_image log = logging.getLogger(__name__) @@ -96,7 +95,7 @@ class SlideController(QtGui.QWidget): self.settingsmanager = settingsmanager self.isLive = isLive self.parent = parent - self.songsconfig = PluginConfig(u'Songs') + self.mainDisplay = self.parent.displayManager.mainDisplay self.loop_list = [ u'Start Loop', u'Stop Loop', @@ -394,7 +393,7 @@ class SlideController(QtGui.QWidget): self.Toolbar.makeWidgetsInvisible(self.loop_list) if item.is_text(): self.Toolbar.makeWidgetsInvisible(self.loop_list) - if str_to_bool(self.songsconfig.get_config(u'show songbar', True)) \ + if QtCore.QSettings().value(u'songs/show songbar', True) \ and len(self.slideList) > 0: self.Toolbar.makeWidgetsVisible([u'Song Menu']) if item.is_capable(ItemCapabilities.AllowsLoop) and \ @@ -403,7 +402,7 @@ class SlideController(QtGui.QWidget): if item.is_media(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) - #self.volumeSlider.setAudioOutput(self.parent.mainDisplay.videoDisplay.audio) + #self.volumeSlider.setAudioOutput(self.mainDisplay.videoDisplay.audio) def enablePreviewToolBar(self, item): """ @@ -583,8 +582,8 @@ class SlideController(QtGui.QWidget): if force: self.blankButton.setChecked(True) self.blankScreen(HideMode.Blank, self.blankButton.isChecked()) - self.parent.generalConfig.set_config(u'screen blank', - self.blankButton.isChecked()) + QtCore.QSettings().setValue(u'general/screen blank', + QtCore.QVariant(self.blankButton.isChecked())) def onThemeDisplay(self, force=False): """ @@ -603,9 +602,9 @@ class SlideController(QtGui.QWidget): if force: self.hideButton.setChecked(True) if self.hideButton.isChecked(): - self.parent.mainDisplay.hideDisplay() + self.mainDisplay.hideDisplay() else: - self.parent.mainDisplay.showDisplay() + self.mainDisplay.showDisplay() def blankScreen(self, blankType, blanked=False): """ @@ -619,9 +618,9 @@ class SlideController(QtGui.QWidget): Receiver.send_message(u'%s_unblank' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) - self.parent.mainDisplay.blankDisplay(blankType, blanked) + self.mainDisplay.blankDisplay(blankType, blanked) else: - self.parent.mainDisplay.blankDisplay(blankType, blanked) + self.mainDisplay.blankDisplay(blankType, blanked) def onSlideSelected(self): """ @@ -642,12 +641,15 @@ class SlideController(QtGui.QWidget): self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) else: if isinstance(frame[u'main'], basestring): - self.SlidePreview.setPixmap(QtGui.QPixmap(frame[u'main'])) + self.SlidePreview.setPixmap( + QtGui.QPixmap(frame[u'main'])) else: - self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame[u'main'])) - log.log(15, u'Slide Rendering took %4s' % (time.time() - before)) + self.SlidePreview.setPixmap( + QtGui.QPixmap.fromImage(frame[u'main'])) + log.log( + 15, u'Slide Rendering took %4s' % (time.time() - before)) if self.isLive: - self.parent.displayManager.mainDisplay.frameView(frame, True) + self.mainDisplay.frameView(frame, True) self.selectedRow = row def onSlideChange(self, row): diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index a651c6211..0c19c2510 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -33,10 +33,10 @@ from PyQt4 import QtCore, QtGui from openlp.core.ui import AmendThemeForm from openlp.core.theme import Theme -from openlp.core.lib import PluginConfig, OpenLPToolbar, contextMenuAction, \ +from openlp.core.lib import OpenLPToolbar, contextMenuAction, \ ThemeXML, str_to_bool, get_text_file_string, build_icon, Receiver, \ - contextMenuSeparator -from openlp.core.utils import ConfigHelper + contextMenuSeparator, SettingsManager +from openlp.core.utils import AppLocation log = logging.getLogger(__name__) @@ -105,16 +105,14 @@ class ThemeManager(QtGui.QWidget): QtCore.SIGNAL(u'theme_update_global'), self.changeGlobalFromTab) #Variables self.themelist = [] - self.path = os.path.join(ConfigHelper.get_data_path(), u'themes') + self.path = AppLocation.get_section_data_path(u'themes') self.checkThemesExists(self.path) self.thumbPath = os.path.join(self.path, u'.thumbnails') self.checkThemesExists(self.thumbPath) self.amendThemeForm.path = self.path # Last little bits of setting up - self.config = PluginConfig(u'themes') - self.servicePath = self.config.get_data_path() - self.global_theme = unicode( - self.config.get_config(u'global theme', u'')) + self.global_theme = unicode(QtCore.QSettings().value( + u'themes/global theme', u'').toString()) def changeGlobalFromTab(self, themeName): log.debug(u'changeGlobalFromTab %s', themeName) @@ -146,7 +144,8 @@ class ThemeManager(QtGui.QWidget): self.ThemeListWidget.item(count).text()) name = u'%s (%s)' % (self.global_theme, self.trUtf8('default')) self.ThemeListWidget.item(count).setText(name) - self.config.set_config(u'global theme', self.global_theme) + QtCore.QSettings().setValue(u'themes/global theme', + self.global_theme) Receiver.send_message(u'theme_update_global', self.global_theme) self.pushThemes() @@ -167,8 +166,8 @@ class ThemeManager(QtGui.QWidget): self.amendThemeForm.exec_() def onDeleteTheme(self): - self.global_theme = unicode( - self.config.get_config(u'global theme', u'')) + self.global_theme = unicode(QtCore.QSettings().value( + u'themes/global theme', u'').toString()) item = self.ThemeListWidget.currentItem() if item: theme = unicode(item.text()) @@ -221,10 +220,10 @@ class ThemeManager(QtGui.QWidget): theme = unicode(item.data(QtCore.Qt.UserRole).toString()) path = QtGui.QFileDialog.getExistingDirectory(self, unicode(self.trUtf8('Save Theme - (%s)')) % theme, - self.config.get_last_dir(1) ) + SettingsManager.get_last_dir(u'themes', 1)) path = unicode(path) if path: - self.config.set_last_dir(path, 1) + SettingsManager.set_last_dir(u'themes', path, 1) themePath = os.path.join(path, theme + u'.theme') zip = None try: @@ -243,11 +242,11 @@ class ThemeManager(QtGui.QWidget): def onImportTheme(self): files = QtGui.QFileDialog.getOpenFileNames( self, self.trUtf8('Select Theme Import File'), - self.config.get_last_dir(), u'Theme (*.*)') + SettingsManager.get_last_dir(u'themes'), u'Theme (*.*)') log.info(u'New Themes %s', unicode(files)) if files: for file in files: - self.config.set_last_dir(unicode(file)) + SettingsManager.set_last_dir(u'themes', unicode(file)) self.unzipTheme(file, self.path) self.loadThemes() diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 7bca99bf0..f3b5ec917 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -123,9 +123,11 @@ class ThemesTab(SettingsTab): 'songs.')) def load(self): - self.theme_level = int(self.config.get_config(u'theme level', - ThemeLevel.Global)) - self.global_theme = self.config.get_config(u'global theme', u'') + settings = QtCore.QSettings() + self.theme_level = settings.value( + u'themes/theme level', ThemeLevel.Global).toInt()[0] + self.global_theme = unicode(settings.value( + u'themes/global theme', u'').toString()) if self.theme_level == ThemeLevel.Global: self.GlobalLevelRadioButton.setChecked(True) elif self.theme_level == ThemeLevel.Service: @@ -134,8 +136,11 @@ class ThemesTab(SettingsTab): self.SongLevelRadioButton.setChecked(True) def save(self): - self.config.set_config(u'theme level', self.theme_level) - self.config.set_config(u'global theme',self.global_theme) + settings = QtCore.QSettings() + settings.setValue(u'themes/theme level', + QtCore.QVariant(self.theme_level)) + settings.setValue(u'themes/global theme', + QtCore.QVariant(self.global_theme)) Receiver.send_message(u'theme_update_global', self.global_theme) self.parent.RenderManager.set_global_theme( self.global_theme, self.theme_level) @@ -169,7 +174,8 @@ class ThemesTab(SettingsTab): Called from ThemeManager when the Themes have changed """ #reload as may have been triggered by the ThemeManager - self.global_theme = self.config.get_config(u'global theme', u'') + self.global_theme = unicode(QtCore.QSettings().value( + u'themes/global theme', u'').toString()) self.DefaultComboBox.clear() for theme in theme_list: self.DefaultComboBox.addItem(theme) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 1900c554e..659cb1ceb 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -98,23 +98,37 @@ class AppLocation(object): plugin_path = os.path.split(openlp.__file__)[0] return plugin_path + @staticmethod + def get_data_path(): + path = AppLocation.get_directory(AppLocation.DataDir) + if not os.path.exists(path): + os.makedirs(path) + return path -def check_latest_version(config, current_version): + @staticmethod + def get_section_data_path(section): + data_path = AppLocation.get_data_path() + path = os.path.join(data_path, section) + if not os.path.exists(path): + os.makedirs(path) + return path + + +def check_latest_version(current_version): """ Check the latest version of OpenLP against the version file on the OpenLP site. - ``config`` - The OpenLP config object. - ``current_version`` The current version of OpenLP. """ version_string = current_version[u'full'] #set to prod in the distribution config file. - last_test = config.get_config(u'last version test', datetime.now().date()) + last_test = unicode(QtCore.QSettings().value(u'general/last version test', + datetime.now().date()).toString()) this_test = unicode(datetime.now().date()) - config.set_config(u'last version test', this_test) + QtCore.QSettings().setValue( + u'general/last version test', QtCore.QVariant(this_test)) if last_test != this_test: version_string = u'' if current_version[u'build']: @@ -168,8 +182,4 @@ def add_actions(target, actions): else: target.addAction(action) -from registry import Registry -from confighelper import ConfigHelper - -__all__ = [u'Registry', u'ConfigHelper', u'AppLocation', - u'check_latest_version', u'add_actions'] +__all__ = [u'AppLocation', u'check_latest_version', u'add_actions'] diff --git a/openlp/core/utils/confighelper.py b/openlp/core/utils/confighelper.py deleted file mode 100644 index c2be4bd24..000000000 --- a/openlp/core/utils/confighelper.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin # -# Thompson, Jon Tibble, Carsten Tinggaard # -# --------------------------------------------------------------------------- # -# This program is free software; you can redistribute it and/or modify it # -# under the terms of the GNU General Public License as published by the Free # -# Software Foundation; version 2 of the License. # -# # -# This program is distributed in the hope that it will be useful, but WITHOUT # -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # -# more details. # -# # -# You should have received a copy of the GNU General Public License along # -# with this program; if not, write to the Free Software Foundation, Inc., 59 # -# Temple Place, Suite 330, Boston, MA 02111-1307 USA # -############################################################################### - -import os - -from openlp.core.utils import AppLocation -from openlp.core.utils.registry import Registry - -class ConfigHelper(object): - """ - Utility Helper to allow classes to find directories in a standard manner. - """ - __registry__ = None - - @staticmethod - def get_data_path(): - path = AppLocation.get_directory(AppLocation.DataDir) - if not os.path.exists(path): - os.makedirs(path) - return path - - @staticmethod - def get_config(section, key, default=None): - reg = ConfigHelper.get_registry() - if reg.has_value(section, key): - return reg.get_value(section, key, default) - else: - if default: - ConfigHelper.set_config(section, key, default) - return default - - @staticmethod - def set_config(section, key, value): - reg = ConfigHelper.get_registry() - if not reg.has_section(section): - reg.create_section(section) - return reg.set_value(section, key, value) - - @staticmethod - def delete_config(section, key): - reg = ConfigHelper.get_registry() - reg.delete_value(section, key) - - @staticmethod - def get_registry(): - """ - This static method loads the appropriate registry class based on the - current operating system, and returns an instantiation of that class. - """ - if ConfigHelper.__registry__ is None: - config_path = AppLocation.get_directory(AppLocation.ConfigDir) - ConfigHelper.__registry__ = Registry(config_path) - return ConfigHelper.__registry__ - diff --git a/openlp/core/utils/registry.py b/openlp/core/utils/registry.py deleted file mode 100644 index 3d7137dfd..000000000 --- a/openlp/core/utils/registry.py +++ /dev/null @@ -1,134 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2010 Raoul Snyman # -# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael # -# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin # -# Thompson, Jon Tibble, Carsten Tinggaard # -# --------------------------------------------------------------------------- # -# This program is free software; you can redistribute it and/or modify it # -# under the terms of the GNU General Public License as published by the Free # -# Software Foundation; version 2 of the License. # -# # -# This program is distributed in the hope that it will be useful, but WITHOUT # -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # -# more details. # -# # -# You should have received a copy of the GNU General Public License along # -# with this program; if not, write to the Free Software Foundation, Inc., 59 # -# Temple Place, Suite 330, Boston, MA 02111-1307 USA # -############################################################################### - -import os - -from ConfigParser import SafeConfigParser - -class Registry(object): - """ - The Registry class is a high-level class for working with a configuration - file. - """ - def __init__(self, dir): - self.config = SafeConfigParser() - self.file_name = os.path.join(dir, u'openlp.conf') - self._load() - - def has_value(self, section, key): - """ - Check if a value exists. - """ - return self.config.has_option(section.encode('utf-8'), - key.encode('utf-8')) - - def get_value(self, section, key, default=None): - """ - Get a single value from the registry. - """ - try: - if self.config.get(section.encode('utf-8'), key.encode('utf-8')): - return self.config.get(section.encode('utf-8'), - key.encode('utf-8')).decode('utf-8') - else: - return default - except: - return default - - def set_value(self, section, key, value): - """ - Set a single value in the registry. - """ - try : - self.config.set(section.encode('utf-8'), key.encode('utf-8'), - unicode(value).encode('utf-8')) - return self._save() - except: - return False - - def delete_value(self, section, key): - """ - Delete a single value from the registry. - """ - try: - self.config.remove_option(section.encode('utf-8'), - key.encode('utf-8')) - return self._save() - except: - return False - - def has_section(self, section): - """ - Check if a section exists. - """ - return self.config.has_section(section.encode('utf-8')) - - def create_section(self, section): - """ - Create a new section in the registry. - """ - try: - self.config.add_section(section.encode('utf-8')) - return self._save() - except: - return False - - def delete_section(self, section): - """ - Delete a section (including all values). - """ - try: - self.config.remove_section(section.encode('utf-8')) - return self._save() - except: - return False - - def _load(self): - if not os.path.isfile(self.file_name): - return False - file_handle = None - try: - file_handle = open(self.file_name, u'r') - self.config.readfp(file_handle) - return True - except: - return False - finally: - if file_handle: - file_handle.close() - - def _save(self): - file_handle = None - try: - if not os.path.exists(os.path.dirname(self.file_name)): - os.makedirs(os.path.dirname(self.file_name)) - file_handle = open(self.file_name, u'w') - self.config.write(file_handle) - return self._load() - except: - return False - finally: - if file_handle: - file_handle.close() diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 819e8eed6..a55523e4b 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -41,7 +41,7 @@ class alertsPlugin(Plugin): self.weight = -3 self.icon = build_icon(u':/media/media_image.png') self.alertsmanager = AlertsManager(self) - self.manager = DBManager(self.config) + self.manager = DBManager() self.alertForm = AlertForm(self.manager, self) self.status = PluginStatus.Active @@ -83,7 +83,8 @@ class alertsPlugin(Plugin): def togglealertsState(self): self.alertsActive = not self.alertsActive - self.config.set_config(u'active', self.alertsActive) + QtCore.QSettings().setValue( + u'alerts/active', QtCore.QVariant(self.alertsActive)) def onAlertsTrigger(self): self.alertForm.loadList() diff --git a/openlp/plugins/alerts/forms/alertstab.py b/openlp/plugins/alerts/forms/alertstab.py index 3e4b45865..14066f7aa 100644 --- a/openlp/plugins/alerts/forms/alertstab.py +++ b/openlp/plugins/alerts/forms/alertstab.py @@ -31,10 +31,10 @@ class AlertsTab(SettingsTab): """ AlertsTab is the alerts settings tab in the settings dialog. """ - def __init__(self, parent, section=None): + def __init__(self, parent): self.parent = parent self.manager = parent.manager - SettingsTab.__init__(self, parent.name, section) + SettingsTab.__init__(self, parent.name) def setupUi(self): self.setObjectName(u'AlertsTab') @@ -228,15 +228,16 @@ class AlertsTab(SettingsTab): self.updateDisplay() def load(self): - self.timeout = int(self.config.get_config(u'timeout', 5)) - self.font_color = unicode( - self.config.get_config(u'font color', u'#ffffff')) - self.font_size = int(self.config.get_config(u'font size', 40)) - self.bg_color = unicode( - self.config.get_config(u'background color', u'#660000')) - self.font_face = unicode( - self.config.get_config(u'font face', QtGui.QFont().family())) - self.location = int(self.config.get_config(u'location', 0)) + settings = QtCore.QSettings() + self.timeout = settings.value(u'alerts/timeout', 5).toInt()[0] + self.font_color = unicode(settings.value( + u'alerts/font color', u'#ffffff').toString()) + self.font_size = settings.value(u'alerts/font size', 40).toInt()[0] + self.bg_color = unicode(settings.value( + u'alerts/background color', u'#660000').toString()) + self.font_face = unicode(settings.value( + u'alerts/font face', QtGui.QFont().family()).toString()) + self.location = settings.value(u'alerts/location', 0).toInt()[0] self.FontSizeSpinBox.setValue(self.font_size) self.TimeoutSpinBox.setValue(self.timeout) self.FontColorButton.setStyleSheet( @@ -254,14 +255,17 @@ class AlertsTab(SettingsTab): self.DeleteButton.setEnabled(True) def save(self): + settings = QtCore.QSettings() self.font_face = self.FontComboBox.currentFont().family() - self.config.set_config(u'background color', unicode(self.bg_color)) - self.config.set_config(u'font color', unicode(self.font_color)) - self.config.set_config(u'font size', unicode(self.font_size)) - self.config.set_config(u'font face', unicode(self.font_face)) - self.config.set_config(u'timeout', unicode(self.timeout)) - self.config.set_config(u'location', - unicode(self.LocationComboBox.currentIndex())) + settings.setValue( + u'alerts/background color', QtCore.QVariant(self.bg_color)) + settings.setValue( + u'alerts/font color', QtCore.QVariant(self.font_color)) + settings.setValue(u'alerts/font size', QtCore.QVariant(self.font_size)) + settings.setValue(u'alerts/font face', QtCore.QVariant(self.font_face)) + settings.setValue(u'alerts/timeout', QtCore.QVariant(self.timeout)) + settings.setValue(u'alerts/location', + QtCore.QVariant(self.LocationComboBox.currentIndex())) def updateDisplay(self): font = QtGui.QFont() diff --git a/openlp/plugins/alerts/lib/manager.py b/openlp/plugins/alerts/lib/manager.py index ec4654807..98a3d8a43 100644 --- a/openlp/plugins/alerts/lib/manager.py +++ b/openlp/plugins/alerts/lib/manager.py @@ -25,6 +25,9 @@ import logging +from PyQt4 import QtCore + +from openlp.core.utils import AppLocation from openlp.plugins.alerts.lib.models import init_models, metadata, AlertItem log = logging.getLogger(__name__) @@ -36,24 +39,25 @@ class DBManager(): """ log.info(u'Alerts DB loaded') - def __init__(self, config): + def __init__(self): """ Creates the connection to the database, and creates the tables if they don't exist. """ - self.config = config + settings = QtCore.QSettings() log.debug(u'Alerts Initialising') self.db_url = u'' - db_type = self.config.get_config(u'db type', u'sqlite') + db_type = unicode( + settings.value(u'alerts/db type', u'sqlite').toString()) if db_type == u'sqlite': self.db_url = u'sqlite:///%s/alerts.sqlite' % \ - self.config.get_data_path() + AppLocation.get_section_data_path(u'alerts') else: self.db_url = u'%s://%s:%s@%s/%s' % \ - (db_type, self.config.get_config(u'db username'), - self.config.get_config(u'db password'), - self.config.get_config(u'db hostname'), - self.config.get_config(u'db database')) + (db_type, settings.value(u'alerts/db username'), + settings.value(u'alerts/db password'), + settings.value(u'alerts/db hostname'), + settings.value(u'alerts/db database')) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 61724ffb6..5b4070665 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -46,7 +46,7 @@ class BiblePlugin(Plugin): def initialise(self): log.info(u'bibles Initialising') if self.manager is None: - self.manager = BibleManager(self, self.config) + self.manager = BibleManager(self) Plugin.initialise(self) self.insert_toolbox_item() self.ImportBibleItem.setVisible(True) diff --git a/openlp/plugins/bibles/forms/importwizardform.py b/openlp/plugins/bibles/forms/importwizardform.py index 46bff5bb9..41df18cdc 100644 --- a/openlp/plugins/bibles/forms/importwizardform.py +++ b/openlp/plugins/bibles/forms/importwizardform.py @@ -31,7 +31,7 @@ import os.path from PyQt4 import QtCore, QtGui from bibleimportwizard import Ui_BibleImportWizard -from openlp.core.lib import Receiver +from openlp.core.lib import Receiver, SettingsManager from openlp.core.utils import AppLocation, variant_to_unicode from openlp.plugins.bibles.lib.manager import BibleFormat @@ -59,16 +59,13 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): """ log.info(u'BibleImportForm loaded') - def __init__(self, parent, config, manager, bibleplugin): + def __init__(self, parent, manager, bibleplugin): """ Instantiate the wizard, and run any extra setup we need to. ``parent`` The QWidget-derived parent of the wizard. - ``config`` - The configuration object for storing and retrieving settings. - ``manager`` The Bible manager. @@ -81,7 +78,6 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): self.finishButton = self.button(QtGui.QWizard.FinishButton) self.cancelButton = self.button(QtGui.QWizard.CancelButton) self.manager = manager - self.config = config self.bibleplugin = bibleplugin self.manager.set_process_dialog(self) self.web_bible_list = {} @@ -277,6 +273,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): u'license_permission', self.PermissionEdit) def setDefaults(self): + settings = QtCore.QSettings() self.setField(u'source_format', QtCore.QVariant(0)) self.setField(u'osis_location', QtCore.QVariant('')) self.setField(u'csv_booksfile', QtCore.QVariant('')) @@ -285,14 +282,15 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): self.setField(u'web_location', QtCore.QVariant(WebDownload.Crosswalk)) self.setField(u'web_biblename', QtCore.QVariant(self.BibleComboBox)) self.setField(u'proxy_server', - QtCore.QVariant(self.config.get_config(u'proxy address', ''))) + settings.value(u'bibles/proxy address', u'')) self.setField(u'proxy_username', - QtCore.QVariant(self.config.get_config(u'proxy username',''))) + settings.value(u'bibles/proxy username', u'')) self.setField(u'proxy_password', - QtCore.QVariant(self.config.get_config(u'proxy password',''))) + settings.value(u'proxy password', u'')) self.setField(u'license_version', QtCore.QVariant(self.VersionNameEdit)) self.setField(u'license_copyright', QtCore.QVariant(self.CopyrightEdit)) - self.setField(u'license_permission', QtCore.QVariant(self.PermissionEdit)) + self.setField(u'license_permission', + QtCore.QVariant(self.PermissionEdit)) self.onLocationComboBoxChanged(WebDownload.Crosswalk) def loadWebBibles(self): @@ -302,10 +300,10 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): #Load and store Crosswalk Bibles filepath = AppLocation.get_directory(AppLocation.PluginsDir) filepath = os.path.join(filepath, u'bibles', u'resources') - fbibles = None try: self.web_bible_list[WebDownload.Crosswalk] = {} - books_file = open(os.path.join(filepath, u'crosswalkbooks.csv'), 'r') + books_file = open( + os.path.join(filepath, u'crosswalkbooks.csv'), 'r') dialect = csv.Sniffer().sniff(books_file.read(1024)) books_file.seek(0) books_reader = csv.reader(books_file, dialect) @@ -345,10 +343,10 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): def getFileName(self, title, editbox): filename = QtGui.QFileDialog.getOpenFileName(self, title, - self.config.get_last_dir(1)) + SettingsManager.get_last_dir(bibles, 1)) if filename: editbox.setText(filename) - self.config.set_last_dir(filename, 1) + SettingsManager.set_last_dir(bibles, filename, 1) def incrementProgressBar(self, status_text): log.debug(u'IncrementBar %s', status_text) @@ -368,7 +366,8 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): bible_type = self.field(u'source_format').toInt()[0] license_version = variant_to_unicode(self.field(u'license_version')) license_copyright = variant_to_unicode(self.field(u'license_copyright')) - license_permission = variant_to_unicode(self.field(u'license_permission')) + license_permission = variant_to_unicode( + self.field(u'license_permission')) importer = None if bible_type == BibleFormat.OSIS: # Import an OSIS bible diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 103187615..3965a0933 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -27,7 +27,7 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import str_to_bool, Receiver, SettingsTab +from openlp.core.lib import Receiver, SettingsTab log = logging.getLogger(__name__) @@ -37,11 +37,11 @@ class BiblesTab(SettingsTab): """ log.info(u'Bible Tab loaded') - def __init__(self, title, section=None): + def __init__(self, title): self.paragraph_style = True self.show_new_chapters = False self.display_style = 0 - SettingsTab.__init__(self, title, section) + SettingsTab.__init__(self, title) def setupUi(self): self.setObjectName(u'BiblesTab') @@ -161,8 +161,8 @@ class BiblesTab(SettingsTab): self.DisplayStyleComboBox.setItemText(1, self.trUtf8('( and )')) self.DisplayStyleComboBox.setItemText(2, self.trUtf8('{ and }')) self.DisplayStyleComboBox.setItemText(3, self.trUtf8('[ and ]')) - self.ChangeNoteLabel.setText( - self.trUtf8('Note:\nChanges don\'t affect verses already in the service')) + self.ChangeNoteLabel.setText(self.trUtf8( + 'Note:\nChanges don\'t affect verses already in the service')) self.BibleDualCheckBox.setText(self.trUtf8('Display Dual Bible Verses')) def onBibleThemeComboBoxChanged(self): @@ -187,29 +187,33 @@ class BiblesTab(SettingsTab): self.duel_bibles = True def load(self): - self.show_new_chapters = str_to_bool( - self.config.get_config(u'display new chapter', u'False')) - self.display_style = int( - self.config.get_config(u'display brackets', u'0')) - self.layout_style = int( - self.config.get_config(u'verse layout style', u'0')) - self.bible_theme = self.config.get_config(u'bible theme', u'0') - self.duel_bibles = str_to_bool( - self.config.get_config(u'dual bibles', u'True')) + settings = QtCore.QSettings() + self.show_new_chapters = settings.value( + u'bibles/display new chapter', False).toBool() + self.display_style = settings.value( + u'bibles/display brackets', 0).toInt()[0] + self.layout_style = settings.value( + u'bibles/verse layout style', 0).toInt()[0] + self.bible_theme = unicode( + settings.value(u'bibles/bible theme', u'').toString()) + self.duel_bibles = settings.value(u'bibles/dual bibles', True).toBool() self.NewChaptersCheckBox.setChecked(self.show_new_chapters) self.DisplayStyleComboBox.setCurrentIndex(self.display_style) self.LayoutStyleComboBox.setCurrentIndex(self.layout_style) self.BibleDualCheckBox.setChecked(self.duel_bibles) def save(self): - self.config.set_config( - u'display new chapter', unicode(self.show_new_chapters)) - self.config.set_config( - u'display brackets', unicode(self.display_style)) - self.config.set_config( - u'verse layout style', unicode(self.layout_style)) - self.config.set_config(u'dual bibles', unicode(self.duel_bibles)) - self.config.set_config(u'bible theme', unicode(self.bible_theme)) + settings = QtCore.QSettings() + settings.setValue(u'bibles/display new chapter', + QtCore.QVariant(self.show_new_chapters)) + settings.setValue(u'bibles/display brackets', + QtCore.QVariant(self.display_style)) + settings.setValue(u'bibles/verse layout style', + QtCore.QVariant(self.layout_style)) + settings.setValue(u'bibles/dual bibles', + QtCore.QVariant(self.duel_bibles)) + settings.setValue(u'bibles/bible theme', + QtCore.QVariant(self.bible_theme)) def updateThemeList(self, theme_list): """ diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 66b956109..207fe4091 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -56,20 +56,14 @@ class BibleDB(QtCore.QObject): ``name`` The name of the database. This is also used as the file name for SQLite databases. - - ``config`` - The configuration object, passed in from the plugin. """ log.info(u'BibleDB loaded') QtCore.QObject.__init__(self) if u'path' not in kwargs: raise KeyError(u'Missing keyword argument "path".') - if u'config' not in kwargs: - raise KeyError(u'Missing keyword argument "config".') if u'name' not in kwargs and u'file' not in kwargs: raise KeyError(u'Missing keyword argument "name" or "file".') self.stop_import_flag = False - self.config = kwargs[u'config'] if u'name' in kwargs: self.name = kwargs[u'name'] if not isinstance(self.name, unicode): @@ -79,16 +73,18 @@ class BibleDB(QtCore.QObject): self.file = kwargs[u'file'] self.db_file = os.path.join(kwargs[u'path'], self.file) log.debug(u'Load bible %s on path %s', self.file, self.db_file) - db_type = self.config.get_config(u'db type', u'sqlite') + settings = QtCore.QSettings() + db_type = unicode( + settings.value(u'bibles/db type', u'sqlite').toString()) db_url = u'' if db_type == u'sqlite': db_url = u'sqlite:///' + self.db_file else: db_url = u'%s://%s:%s@%s/%s' % \ - (db_type, self.config.get_config(u'db username'), - self.config.get_config(u'db password'), - self.config.get_config(u'db hostname'), - self.config.get_config(u'db database')) + (db_type, unicode(settings.value(u'bibles/db username')), + unicode(settings.value(u'bibles/db password')), + unicode(settings.value(u'bibles/db hostname')), + unicode(settings.value(u'bibles/db database'))) self.metadata, self.session = init_models(db_url) self.metadata.create_all(checkfirst=True) if u'file' in kwargs: diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 8e622963d..bc96a81e5 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -25,6 +25,11 @@ import logging +from PyQt4 import QtCore + +from openlp.core.lib import SettingsManager +from openlp.core.utils import AppLocation + from common import parse_reference from opensong import OpenSongBible from osis import OSISBible @@ -94,24 +99,21 @@ class BibleManager(object): """ log.info(u'Bible manager loaded') - def __init__(self, parent, config): + def __init__(self, parent): """ Finds all the bibles defined for the system and creates an interface object for each bible containing connection information. Throws Exception if no Bibles are found. Init confirms the bible exists and stores the database path. - - ``config`` - The plugin's configuration object. """ log.debug(u'Bible Initialising') - self.config = config self.parent = parent self.web = u'Web' self.db_cache = None - self.path = self.config.get_data_path() - self.proxy_name = self.config.get_config(u'proxy name') + self.path = AppLocation.get_section_data_path(u'bibles') + self.proxy_name = unicode( + QtCore.QSettings().value(u'bibles/proxy name', u'').toString()) self.suffix = u'sqlite' self.import_wizard = None self.reload_bibles() @@ -124,12 +126,11 @@ class BibleManager(object): BibleDB class. """ log.debug(u'Reload bibles') - files = self.config.get_files(self.suffix) + files = SettingsManager.get_files(self.suffix) log.debug(u'Bible Files %s', files) self.db_cache = {} for filename in files: - bible = BibleDB(self.parent, path=self.path, file=filename, - config=self.config) + bible = BibleDB(self.parent, path=self.path, file=filename) name = bible.get_name() log.debug(u'Bible Name: "%s"', name) self.db_cache[name] = bible @@ -139,8 +140,8 @@ class BibleManager(object): download_name = self.db_cache[name].get_meta(u'download name').value meta_proxy = self.db_cache[name].get_meta(u'proxy url') web_bible = HTTPBible(self.parent, path=self.path, - file=filename, config=self.config, - download_source=source.value, download_name=download_name) + file=filename, download_source=source.value, + download_name=download_name) if meta_proxy: web_bible.set_proxy_server(meta_proxy.value) self.db_cache[name] = web_bible @@ -167,7 +168,6 @@ class BibleManager(object): """ class_ = BibleFormat.get_class(type) kwargs['path'] = self.path - kwargs['config'] = self.config importer = class_(self.parent, **kwargs) name = importer.register(self.import_wizard) self.db_cache[name] = importer @@ -260,4 +260,3 @@ class BibleManager(object): if bible == name: return True return False - diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 66d27e4d3..afdd89e3e 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -28,8 +28,8 @@ import time from PyQt4 import QtCore, QtGui -from openlp.core.lib import MediaManagerItem, Receiver, str_to_bool, \ - BaseListWithDnD, ItemCapabilities +from openlp.core.lib import MediaManagerItem, Receiver, BaseListWithDnD, \ + ItemCapabilities from openlp.plugins.bibles.forms import ImportWizardForm log = logging.getLogger(__name__) @@ -276,8 +276,7 @@ class BibleMediaItem(MediaManagerItem): self.SearchProgress.setObjectName(u'SearchProgress') def configUpdated(self): - if str_to_bool( - self.parent.config.get_config(u'dual bibles', u'False')): + if QtCore.QSettings().value(u'bibles/dual bibles', False).toBool(): self.AdvancedSecondBibleLabel.setVisible(True) self.AdvancedSecondBibleComboBox.setVisible(True) self.QuickSecondVersionLabel.setVisible(True) @@ -381,7 +380,7 @@ class BibleMediaItem(MediaManagerItem): self.AdvancedBookComboBox.itemData(item).toInt()[0]) def onImportClick(self): - self.bibleimportform = ImportWizardForm(self, self.parent.config, + self.bibleimportform = ImportWizardForm(self, self.parent.manager, self.parent) self.bibleimportform.exec_() self.reloadBibles() diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index 7c532e313..bddf04a5a 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -98,7 +98,8 @@ class OSISBible(BibleDB): Loads a Bible from file. """ log.debug(u'Starting OSIS import from "%s"' % self.filename) - self.wizard.incrementProgressBar(u'Detecting encoding (this may take a few minutes)...') + self.wizard.incrementProgressBar( + u'Detecting encoding (this may take a few minutes)...') detect_file = None try: detect_file = open(self.filename, u'r') diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index 979df411c..a59596f22 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -45,7 +45,7 @@ class CustomPlugin(Plugin): def __init__(self, plugin_helpers): Plugin.__init__(self, u'Custom', u'1.9.1', plugin_helpers) self.weight = -5 - self.custommanager = CustomManager(self.config) + self.custommanager = CustomManager() self.edit_custom_form = EditCustomForm(self.custommanager) self.icon = build_icon(u':/media/media_custom.png') self.status = PluginStatus.Active diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py index cceca1148..d99c6d9e3 100644 --- a/openlp/plugins/custom/lib/customtab.py +++ b/openlp/plugins/custom/lib/customtab.py @@ -25,14 +25,14 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, str_to_bool +from openlp.core.lib import SettingsTab class CustomTab(SettingsTab): """ CustomTab is the Custom settings tab in the settings dialog. """ - def __init__(self, title, section=None): - SettingsTab.__init__(self, title, section) + def __init__(self, title): + SettingsTab.__init__(self, title) def setupUi(self): self.setObjectName(u'CustomTab') @@ -66,9 +66,10 @@ class CustomTab(SettingsTab): self.displayFooter = True def load(self): - self.displayFooter = str_to_bool( - self.config.get_config(u'display footer', True)) + self.displayFooter = QtCore.QSettings().value( + u'custom/display footer', True).toBool() self.DisplayFooterCheckBox.setChecked(self.displayFooter) def save(self): - self.config.set_config(u'display footer', unicode(self.displayFooter)) + QtCore.QSettings().setValue( + u'custom/display footer', QtCore.QVariant(self.displayFooter)) diff --git a/openlp/plugins/custom/lib/manager.py b/openlp/plugins/custom/lib/manager.py index 2deee9ba2..54962d9b0 100644 --- a/openlp/plugins/custom/lib/manager.py +++ b/openlp/plugins/custom/lib/manager.py @@ -25,6 +25,9 @@ import logging +from PyQt4 import QtCore + +from openlp.core.utils import AppLocation from openlp.plugins.custom.lib.models import init_models, metadata, CustomSlide log = logging.getLogger(__name__) @@ -36,24 +39,25 @@ class CustomManager(): """ log.info(u'Custom manager loaded') - def __init__(self, config): + def __init__(self): """ Creates the connection to the database, and creates the tables if they don't exist. """ - self.config = config log.debug(u'Custom Initialising') + settings = QtCore.QSettings() self.db_url = u'' - db_type = self.config.get_config(u'db type', u'sqlite') + db_type = unicode( + settings.value(u'custom/db type', u'sqlite').toString()) if db_type == u'sqlite': self.db_url = u'sqlite:///%s/custom.sqlite' % \ - self.config.get_data_path() + AppLocation.get_section_data_path(u'custom') else: - self.db_url = u'%s://%s:%s@%s/%s' % \ - (db_type, self.config.get_config(u'db username'), - self.config.get_config(u'db password'), - self.config.get_config(u'db hostname'), - self.config.get_config(u'db database')) + self.db_url = u'%s://%s:%s@%s/%s' % (db_type, + unicode(settings.value(u'custom/db username')), + unicode(settings.value(u'custom/db password')), + unicode(settings.value(u'custom/db hostname')), + unicode(settings.value(u'custom/db database'))) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) @@ -107,4 +111,5 @@ class CustomManager(): return True def get_customs_for_theme(self, theme): - return self.session.query(CustomSlide).filter(CustomSlide.theme_name == theme).all() + return self.session.query( + CustomSlide).filter(CustomSlide.theme_name == theme).all() diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index c79452c20..aa82eb452 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -27,8 +27,8 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD,\ -Receiver, str_to_bool, ItemCapabilities +from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD, \ + Receiver, ItemCapabilities log = logging.getLogger(__name__) @@ -164,7 +164,7 @@ class CustomMediaItem(MediaManagerItem): service_item.title = title for slide in raw_slides: service_item.add_from_text(slide[:30], slide) - if str_to_bool(self.parent.config.get_config(u'display footer', True)) \ + if QtCore.QSettings().value(u'custom/display footer', True).toBool() \ or credit: raw_footer.append(title + u' ' + credit) else: diff --git a/openlp/plugins/images/lib/imagetab.py b/openlp/plugins/images/lib/imagetab.py index 9283dbdf3..f7bdb3106 100644 --- a/openlp/plugins/images/lib/imagetab.py +++ b/openlp/plugins/images/lib/imagetab.py @@ -31,8 +31,8 @@ class ImageTab(SettingsTab): """ ImageTab is the Image settings tab in the settings dialog. """ - def __init__(self, title, section=None): - SettingsTab.__init__(self, title, section) + def __init__(self, title): + SettingsTab.__init__(self, title) def setupUi(self): self.setObjectName(u'ImageTab') @@ -71,11 +71,13 @@ class ImageTab(SettingsTab): self.loop_delay = self.TimeoutSpinBox.value() def load(self): - self.loop_delay = int(self.config.get_config(u'loop delay', 5)) + self.loop_delay = QtCore.QSettings().value( + u'images/loop delay', 5).toInt()[0] self.TimeoutSpinBox.setValue(self.loop_delay) def save(self): - self.config.set_config(u'loop delay', self.loop_delay) + QtCore.QSettings().setValue( + u'images/loop delay', QtCore.QVariant(self.loop_delay)) Receiver.send_message(u'slidecontroller_live_spin_delay', self.loop_delay) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 914a6ce20..7b104136c 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -27,8 +27,10 @@ import logging import os from PyQt4 import QtCore, QtGui + from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \ - contextMenuAction, ItemCapabilities + contextMenuAction, ItemCapabilities, SettingsManager +from openlp.core.utils import AppLocation log = logging.getLogger(__name__) @@ -76,10 +78,12 @@ class ImageMediaItem(MediaManagerItem): QtGui.QAbstractItemView.ExtendedSelection) self.ListView.setIconSize(QtCore.QSize(88,50)) self.servicePath = os.path.join( - self.parent.config.get_data_path(), u'.thumbnails') + AppLocation.get_section_data_path(self.ConfigSection), + u'.thumbnails') if not os.path.exists(self.servicePath): os.mkdir(self.servicePath) - self.loadList(self.parent.config.load_list(self.ConfigSection)) + self.loadList(SettingsManager.load_list( + self.ConfigSection, self.ConfigSection)) def addListViewToToolBar(self): MediaManagerItem.addListViewToToolBar(self) @@ -112,12 +116,13 @@ class ImageMediaItem(MediaManagerItem): for item in items: text = self.ListView.item(item.row()) try: - os.remove(os.path.join(self.servicePath, unicode(text.text()))) + os.remove( + os.path.join(self.servicePath, unicode(text.text()))) except: #if not present do not worry pass self.ListView.takeItem(item.row()) - self.parent.config.set_list(self.ConfigSection, self.getFileList()) + SettingsManager.set_list(self.ConfigSection, self.getFileList()) def loadList(self, list): for file in list: diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index aa1a8f38a..9342708f4 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -29,7 +29,7 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \ -ItemCapabilities + ItemCapabilities, SettingsManager log = logging.getLogger(__name__) @@ -47,12 +47,12 @@ class MediaMediaItem(MediaManagerItem): def __init__(self, parent, icon, title): self.PluginNameShort = u'Media' self.IconPath = u'images/image' - self.ConfigSection = u'media' self.ConfigSection = title # this next is a class, not an instance of a class - it will # be instanced by the base MediaManagerItem self.ListViewWithDnD_class = MediaListView - self.PreviewFunction = QtGui.QPixmap(u':/media/media_video.png').toImage() + self.PreviewFunction = QtGui.QPixmap( + u':/media/media_video.png').toImage() MediaManagerItem.__init__(self, parent, icon, title) self.singleServiceItem = False self.ServiceItemIconName = u':/media/media_video.png' @@ -89,15 +89,15 @@ class MediaMediaItem(MediaManagerItem): self.ListView.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) self.ListView.setIconSize(QtCore.QSize(88,50)) - self.loadList(self.parent.config.load_list(self.ConfigSection)) + self.loadList(SettingsManager.load_list( + self.ConfigSection, self.ConfigSection)) def onDeleteClick(self): item = self.ListView.currentItem() if item: row = self.ListView.row(item) self.ListView.takeItem(row) - self.parent.config.set_list( - self.ConfigSection, self.getFileList()) + SettingsManager.set_list(self.ConfigSection, self.getFileList()) def loadList(self, list): for file in list: diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 701efc086..900af71b6 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -28,7 +28,9 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon +from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \ + SettingsManager +from openlp.core.utils import AppLocation from openlp.plugins.presentations.lib import MessageListener log = logging.getLogger(__name__) @@ -68,7 +70,8 @@ class PresentationMediaItem(MediaManagerItem): fileType = u'' for controller in self.controllers: if self.controllers[controller].enabled: - types = self.controllers[controller].supports + self.controllers[controller].alsosupports + types = self.controllers[controller].supports + \ + self.controllers[controller].alsosupports for type in types: if fileType.find(type) == -1: fileType += u'*%s ' % type @@ -104,10 +107,11 @@ class PresentationMediaItem(MediaManagerItem): def initialise(self): self.servicePath = os.path.join( - self.parent.config.get_data_path(), u'thumbnails') + AppLocation.get_section_data_path(self.ConfigSection), + u'thumbnails') if not os.path.exists(self.servicePath): os.mkdir(self.servicePath) - list = self.parent.config.load_list(u'presentations') + list = SettingsManager.load_list(self.ConfigSection, u'presentations') self.loadList(list) for item in self.controllers: #load the drop down selection @@ -134,17 +138,20 @@ class PresentationMediaItem(MediaManagerItem): else: icon = None for controller in self.controllers: - thumbPath = os.path.join(self.parent.config.get_data_path(), \ + thumbPath = os.path.join( + AppLocation.get_section_data_path(self.ConfigSection), u'thumbnails', controller, filename) thumb = os.path.join(thumbPath, u'slide1.png') - preview = os.path.join(self.parent.config.get_data_path(), \ + preview = os.path.join( + AppLocation.get_section_data_path(self.ConfigSection), controller, u'thumbnails', filename, u'slide1.png') if os.path.exists(preview): if os.path.exists(thumb): if self.validate(preview, thumb): icon = build_icon(thumb) else: - icon = build_icon(u':/general/general_delete.png') + icon = build_icon( + u':/general/general_delete.png') else: os.makedirs(thumbPath) icon = self.IconFromFile(preview, thumb) @@ -160,8 +167,7 @@ class PresentationMediaItem(MediaManagerItem): if item: row = self.ListView.row(item) self.ListView.takeItem(row) - self.parent.config.set_list( - self.ConfigSection, self.getFileList()) + SettingsManager.set_list(self.ConfigSection, self.getFileList()) filepath = unicode((item.data(QtCore.Qt.UserRole)).toString()) #not sure of this has errors #John please can you look at . diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index 760e861f8..cbb5c9c00 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -30,6 +30,7 @@ import shutil from PyQt4 import QtCore from openlp.core.lib import Receiver +from openlp.core.utils import AppLocation log = logging.getLogger(__name__) @@ -68,7 +69,8 @@ class PresentationController(object): Called at system exit to clean up any running presentations ``check_available()`` - Returns True if presentation application is installed/can run on this machine + Returns True if presentation application is installed/can run on this + machine ``presentation_deleted()`` Deletes presentation specific files, e.g. thumbnails @@ -78,13 +80,14 @@ class PresentationController(object): def __init__(self, plugin=None, name=u'PresentationController'): """ - This is the constructor for the presentationcontroller object. - This provides an easy way for descendent plugins to populate common data. + This is the constructor for the presentationcontroller object. This + provides an easy way for descendent plugins to populate common data. This method *must* be overridden, like so:: class MyPresentationController(PresentationController): def __init__(self, plugin): - PresentationController.__init(self, plugin, u'My Presenter App') + PresentationController.__init( + self, plugin, u'My Presenter App') ``plugin`` Defaults to *None*. The presentationplugin object @@ -99,11 +102,12 @@ class PresentationController(object): self.name = name self.available = self.check_available() if self.available: - self.enabled = int(plugin.config.get_config( - name, QtCore.Qt.Unchecked)) == QtCore.Qt.Checked + self.enabled = QtCore.QSettings().value( + name, QtCore.Qt.Unchecked).toInt()[0] == QtCore.Qt.Checked else: self.enabled = False - self.thumbnailroot = os.path.join(plugin.config.get_data_path(), + self.thumbnailroot = os.path.join( + AppLocation.get_section_data_path(u'presentations'), name, u'thumbnails') self.thumbnailprefix = u'slide' if not os.path.isdir(self.thumbnailroot): @@ -241,7 +245,8 @@ class PresentationDocument(object): return os.path.split(presentation)[1] def get_thumbnail_path(self, presentation): - return os.path.join(self.controller.thumbnailroot, self.get_file_name(presentation)) + return os.path.join( + self.controller.thumbnailroot, self.get_file_name(presentation)) def check_thumbnails(self): """ diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index cf18359b1..af492d2c8 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -23,7 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from PyQt4 import QtGui +from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab @@ -31,9 +31,9 @@ class PresentationTab(SettingsTab): """ PresentationsTab is the Presentations settings tab in the settings dialog. """ - def __init__(self, title, controllers, section=None): + def __init__(self, title, controllers): self.controllers = controllers - SettingsTab.__init__(self, title, section) + SettingsTab.__init__(self, title) def setupUi(self): self.setObjectName(u'PresentationTab') @@ -100,12 +100,12 @@ class PresentationTab(SettingsTab): controller = self.controllers[key] if controller.available: checkbox = self.PresenterCheckboxes[controller.name] - checkbox.setChecked( - int(self.config.get_config(controller.name, 0))) + checkbox.setChecked(QtCore.QSettings().value( + u'presentations/' + controller.name, 0).toInt()[0]) def save(self): for key in self.controllers: controller = self.controllers[key] checkbox = self.PresenterCheckboxes[controller.name] - self.config.set_config( - controller.name, unicode(checkbox.checkState())) + QtCore.QSettings().setValue(u'presentations/' + controller.name, + QtCore.QVariant(checkbox.checkState())) diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 31af42ff2..7096ee302 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -23,7 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from PyQt4 import QtGui +from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab @@ -31,8 +31,8 @@ class RemoteTab(SettingsTab): """ RemoteTab is the Remotes settings tab in the settings dialog. """ - def __init__(self, title, section=None): - SettingsTab.__init__(self, title, section) + def __init__(self, title): + SettingsTab.__init__(self, title) def setupUi(self): self.setObjectName(u'RemoteTab') @@ -57,8 +57,8 @@ class RemoteTab(SettingsTab): def load(self): self.RemotePortSpinBox.setValue( - int(self.config.get_config(u'remote port', 4316))) + QtCore.QSettings().value(u'remotes/remote port', 4316).toInt()[0]) def save(self): - self.config.set_config( - u'remote port', unicode(self.RemotePortSpinBox.value())) + QtCore.QSettings().setValue(u'remotes/remote port', + QtCore.QVariant(self.RemotePortSpinBox.value())) diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index eff9496ba..3ceb6d1f8 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -45,7 +45,8 @@ class RemotesPlugin(Plugin): Plugin.initialise(self) self.insert_toolbox_item() self.server = QtNetwork.QUdpSocket() - self.server.bind(int(self.config.get_config(u'remote port', 4316))) + self.server.bind( + QtCore.QSettings().value(u'remotes/remote port', 4316).toInt()[0]) QtCore.QObject.connect(self.server, QtCore.SIGNAL(u'readyRead()'), self.readData) diff --git a/openlp/plugins/songs/lib/manager.py b/openlp/plugins/songs/lib/manager.py index dcb49bfcd..f97b0875d 100644 --- a/openlp/plugins/songs/lib/manager.py +++ b/openlp/plugins/songs/lib/manager.py @@ -25,6 +25,9 @@ import logging +from PyQt4 import QtCore + +from openlp.core.utils import AppLocation from openlp.plugins.songs.lib.models import init_models, metadata, Song, \ Author, Topic, Book @@ -37,24 +40,25 @@ class SongManager(): """ log.info(u'Song manager loaded') - def __init__(self, config): + def __init__(self): """ Creates the connection to the database, and creates the tables if they don't exist. """ - self.config = config log.debug(u'Song Initialising') + settings = QtCore.QSettings() self.db_url = u'' - db_type = self.config.get_config(u'db type', u'sqlite') + db_type = unicode( + settings.value(u'songs/db type', u'sqlite').toString()) if db_type == u'sqlite': self.db_url = u'sqlite:///%s/songs.sqlite' % \ - self.config.get_data_path() + AppLocation.get_section_data_path(u'songs') else: self.db_url = db_type + 'u://' + \ - self.config.get_config(u'db username') + u':' + \ - self.config.get_config(u'db password') + u'@' + \ - self.config.get_config(u'db hostname') + u'/' + \ - self.config.get_config(u'db database') + unicode(settings.value(u'songs/db username', u'').toString()) + u':' + \ + unicode(settings.value(u'songs/db password', u'').toString()) + u'@' + \ + unicode(settings.value(u'songs/db hostname', u'').toString()) + u'/' + \ + unicode(settings.value(u'songs/db database', u'').toString()) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) log.debug(u'Song Initialised') diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index fb3f9c3e0..24ef71e81 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -28,7 +28,7 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, SongXMLParser, \ - BaseListWithDnD, Receiver, str_to_bool, ItemCapabilities + BaseListWithDnD, Receiver, ItemCapabilities from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm log = logging.getLogger(__name__) @@ -133,8 +133,8 @@ class SongMediaItem(MediaManagerItem): QtCore.SIGNAL(u'songs_edit_clear'), self.onRemoteEditClear) def configUpdated(self): - self.searchAsYouType = str_to_bool( - self.parent.config.get_config(u'search as type', u'False')) + self.searchAsYouType = QtCore.QSettings().value( + u'songs/search as type', u'False').toBool() def retranslateUi(self): self.SearchTextLabel.setText(self.trUtf8('Search:')) @@ -350,7 +350,7 @@ class SongMediaItem(MediaManagerItem): author_list = author_list + unicode(author.display_name) author_audit.append(unicode(author.display_name)) if song.ccli_number is None or len(song.ccli_number) == 0: - ccli = self.parent.settings.GeneralTab.CCLINumber + ccli = self.parent.settings_form.GeneralTab.CCLINumber else: ccli = unicode(song.ccli_number) raw_footer.append(song.title) diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index 392b15691..3fb41aabf 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -25,14 +25,14 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import SettingsTab, str_to_bool +from openlp.core.lib import SettingsTab class SongsTab(SettingsTab): """ SongsTab is the Songs settings tab in the settings dialog. """ - def __init__(self, title, section=None): - SettingsTab.__init__(self, title, section) + def __init__(self, title): + SettingsTab.__init__(self, title) def setupUi(self): self.setObjectName(u'SongsTab') @@ -80,13 +80,16 @@ class SongsTab(SettingsTab): self.song_bar = True def load(self): - self.song_search = str_to_bool( - self.config.get_config(u'search as type', False)) - self.song_bar = str_to_bool( - self.config.get_config(u'display songbar', True)) + settings = QtCore.QSettings() + self.song_search = settings.value( + u'songs/search as type', False).toBool() + self.song_bar = settings.value(u'songs/display songbar', True).toBool() self.SearchAsTypeCheckBox.setChecked(self.song_search) self.SongBarActiveCheckBox.setChecked(self.song_bar) def save(self): - self.config.set_config(u'search as type', unicode(self.song_search)) - self.config.set_config(u'display songbar', unicode(self.song_bar)) + settings = QtCore.QSettings() + settings.setValue( + u'songs/search as type', QtCore.QVariant(self.song_search)) + settings.setValue( + u'songs/display songbar', QtCore.QVariant(self.song_bar)) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 54ea6a352..af05b4605 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -51,7 +51,7 @@ class SongsPlugin(Plugin): """ Plugin.__init__(self, u'Songs', u'1.9.1', plugin_helpers) self.weight = -10 - self.songmanager = SongManager(self.config) + self.songmanager = SongManager() self.openlp_import_form = OpenLPImportForm() self.opensong_import_form = OpenSongImportForm() self.openlp_export_form = OpenLPExportForm() @@ -65,7 +65,7 @@ class SongsPlugin(Plugin): def initialise(self): log.info(u'Songs Initialising') #if self.songmanager is None: - # self.songmanager = SongManager(self.config) + # self.songmanager = SongManager() Plugin.initialise(self) self.insert_toolbox_item() self.ImportSongMenu.menuAction().setVisible(True) diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index 4e4f9bb55..e4ec80d58 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -23,10 +23,12 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import logging import os from PyQt4 import QtCore, QtGui -import logging + +from openlp.core.lib import SettingsManager from songusagedetaildialog import Ui_SongUsageDetailDialog @@ -53,15 +55,15 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): fromDate = QtCore.QDate(year - 1, 9, 1) self.FromDate.setSelectedDate(fromDate) self.ToDate.setSelectedDate(toDate) - self.FileLineEdit.setText(self.parent.config.get_last_dir(1)) + self.FileLineEdit.setText(SettingsManager.get_last_dir(u'songusage', 1)) def defineOutputLocation(self): path = QtGui.QFileDialog.getExistingDirectory(self, self.trUtf8('Output File Location'), - self.parent.config.get_last_dir(1) ) + SettingsManager.get_last_dir(u'songusage', 1)) path = unicode(path) if path != u'': - self.parent.config.set_last_dir(path, 1) + SettingsManager.set_last_dir(u'songusage', path, 1) self.FileLineEdit.setText(path) def accept(self): diff --git a/openlp/plugins/songusage/lib/manager.py b/openlp/plugins/songusage/lib/manager.py index 2802570ab..dddea5350 100644 --- a/openlp/plugins/songusage/lib/manager.py +++ b/openlp/plugins/songusage/lib/manager.py @@ -25,7 +25,11 @@ import logging -from openlp.plugins.songusage.lib.models import init_models, metadata, SongUsageItem +from PyQt4 import QtCore + +from openlp.core.utils import AppLocation +from openlp.plugins.songusage.lib.models import init_models, metadata, \ + SongUsageItem log = logging.getLogger(__name__) @@ -36,24 +40,25 @@ class SongUsageManager(): """ log.info(u'SongUsage manager loaded') - def __init__(self, config): + def __init__(self): """ Creates the connection to the database, and creates the tables if they don't exist. """ - self.config = config + settings = QtCore.QSettings() log.debug(u'SongUsage Initialising') self.db_url = u'' - db_type = self.config.get_config(u'db type', u'sqlite') + db_type = unicode( + settings.value(u'songusage/db type', u'sqlite').toString()) if db_type == u'sqlite': self.db_url = u'sqlite:///%s/songusage.sqlite' % \ - self.config.get_data_path() + AppLocation.get_section_data_path(u'songusage') else: - self.db_url = u'%s://%s:%s@%s/%s' % \ - (db_type, self.config.get_config(u'db username'), - self.config.get_config(u'db password'), - self.config.get_config(u'db hostname'), - self.config.get_config(u'db database')) + self.db_url = u'%s://%s:%s@%s/%s' % (db_type, + unicode(settings.value(u'songusage/db username', u'')), + unicode(settings.value(u'songusage/db password', u'')), + unicode(settings.value(u'songusage/db hostname', u'')), + unicode(settings.value(u'songusage/db database', u''))) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index 3d7f9ad45..c654477e0 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -28,9 +28,10 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import Plugin, Receiver, str_to_bool, build_icon +from openlp.core.lib import Plugin, Receiver, build_icon from openlp.plugins.songusage.lib import SongUsageManager -from openlp.plugins.songusage.forms import SongUsageDetailForm, SongUsageDeleteForm +from openlp.plugins.songusage.forms import SongUsageDetailForm, \ + SongUsageDeleteForm from openlp.plugins.songusage.lib.models import SongUsageItem log = logging.getLogger(__name__) @@ -107,12 +108,13 @@ class SongUsagePlugin(Plugin): log.info(u'SongUsage Initialising') Plugin.initialise(self) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'slidecontroller_live_started'), self.onReceiveSongUsage) - self.SongUsageActive = str_to_bool( - self.config.get_config(u'active', False)) + QtCore.SIGNAL(u'slidecontroller_live_started'), + self.onReceiveSongUsage) + self.SongUsageActive = QtCore.QSettings().value( + u'songusage/active', False).toBool() self.SongUsageStatus.setChecked(self.SongUsageActive) if self.songusagemanager is None: - self.songusagemanager = SongUsageManager(self.config) + self.songusagemanager = SongUsageManager() self.SongUsagedeleteform = SongUsageDeleteForm(self.songusagemanager) self.SongUsagedetailform = SongUsageDetailForm(self) self.SongUsageMenu.menuAction().setVisible(True) @@ -125,7 +127,8 @@ class SongUsagePlugin(Plugin): def toggleSongUsageState(self): self.SongUsageActive = not self.SongUsageActive - self.config.set_config(u'active', self.SongUsageActive) + QtCore.QSettings().setValue( + u'songusage/active', QtCore.QVariant(self.SongUsageActive)) def onReceiveSongUsage(self, items): """ From 55dd795a453d45ba8ee0d49e8be0dd370847f397 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 27 Apr 2010 22:30:04 +0100 Subject: [PATCH 13/20] Unbreak presentations slightly --- .bzrignore | 1 + openlp/plugins/presentations/lib/presentationcontroller.py | 4 ++-- openlp/plugins/presentations/presentationplugin.py | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.bzrignore b/.bzrignore index 00884055d..2314d48c5 100644 --- a/.bzrignore +++ b/.bzrignore @@ -14,3 +14,4 @@ dist OpenLP.egg-info build resources/innosetup/Output +_eric4project diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index cbb5c9c00..4b304a516 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -102,8 +102,8 @@ class PresentationController(object): self.name = name self.available = self.check_available() if self.available: - self.enabled = QtCore.QSettings().value( - name, QtCore.Qt.Unchecked).toInt()[0] == QtCore.Qt.Checked + self.enabled = QtCore.QSettings().value(u'presentations/' + name, + QtCore.Qt.Unchecked).toInt()[0] == QtCore.Qt.Checked else: self.enabled = False self.thumbnailroot = os.path.join( diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index da25dcdc3..dd1a5259b 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -96,7 +96,9 @@ class PresentationPlugin(Plugin): try: __import__(modulename, globals(), locals(), []) except ImportError, e: - log.error(u'Failed to import %s on path %s for reason %s', modulename, path, e.args[0]) + log.error( + u'Failed to import %s on path %s for reason %s', + modulename, path, e.args[0]) controller_classes = PresentationController.__subclasses__() for controller_class in controller_classes: controller = controller_class(self) From 484a76289c199a2b4f1d88c2fd35cb2a9432bb49 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 27 Apr 2010 23:36:50 +0100 Subject: [PATCH 14/20] Fix presentations a bit more --- openlp/core/ui/maindisplay.py | 12 ++++++--- openlp/core/ui/slidecontroller.py | 12 ++++++--- .../presentations/lib/messagelistener.py | 27 ++++++++++--------- .../lib/presentationcontroller.py | 10 +++---- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 5e7071449..04f60fb7d 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -254,14 +254,17 @@ class MainDisplay(DisplayWidget): if not self.displayBlank: if transition: if self.frame is not None: - self.display_text.setPixmap(QtGui.QPixmap.fromImage(self.frame)) + self.display_text.setPixmap( + QtGui.QPixmap.fromImage(self.frame)) self.repaint() self.frame = None if frame[u'trans'] is not None: - self.display_text.setPixmap(QtGui.QPixmap.fromImage(frame[u'trans'])) + self.display_text.setPixmap( + QtGui.QPixmap.fromImage(frame[u'trans'])) self.repaint() self.frame = frame[u'trans'] - self.display_text.setPixmap(QtGui.QPixmap.fromImage(frame[u'main'])) + self.display_text.setPixmap( + QtGui.QPixmap.fromImage(frame[u'main'])) self.display_frame = frame[u'main'] self.repaint() else: @@ -282,7 +285,8 @@ class MainDisplay(DisplayWidget): if blanked: self.displayBlank = True if blankType == HideMode.Blank: - self.display_text.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) + self.display_text.setPixmap( + QtGui.QPixmap.fromImage(self.blankFrame)) elif blankType == HideMode.Theme: theme = self.parent.RenderManager.renderer.bg_frame if not theme: diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 260066fa5..c1f38cf38 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -152,13 +152,15 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.horizontalHeader().setVisible(False) self.PreviewListWidget.verticalHeader().setVisible(False) self.PreviewListWidget.setColumnWidth(1, self.labelWidth) - self.PreviewListWidget.setColumnWidth(1, self.Controller.width() - self.labelWidth) + self.PreviewListWidget.setColumnWidth( + 1, self.Controller.width() - self.labelWidth) self.PreviewListWidget.isLive = self.isLive self.PreviewListWidget.setObjectName(u'PreviewListWidget') self.PreviewListWidget.setSelectionBehavior(1) self.PreviewListWidget.setEditTriggers( QtGui.QAbstractItemView.NoEditTriggers) - self.PreviewListWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.PreviewListWidget.setHorizontalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff) self.PreviewListWidget.setAlternatingRowColors(True) self.ControllerLayout.addWidget(self.PreviewListWidget) # Build the full toolbar @@ -220,7 +222,8 @@ class SlideController(QtGui.QWidget): self.Toolbar.addToolbarWidget( u'Image SpinBox', self.DelaySpinBox) self.DelaySpinBox.setSuffix(self.trUtf8('s')) - self.DelaySpinBox.setToolTip(self.trUtf8('Delay between slides in seconds')) + self.DelaySpinBox.setToolTip( + self.trUtf8('Delay between slides in seconds')) self.ControllerLayout.addWidget(self.Toolbar) #Build a Media ToolBar self.Mediabar = OpenLPToolbar(self) @@ -612,7 +615,8 @@ class SlideController(QtGui.QWidget): """ if self.serviceItem is not None: if blanked: - Receiver.send_message(u'%s_blank' % self.serviceItem.name.lower(), + Receiver.send_message( + u'%s_blank' % self.serviceItem.name.lower(), [self.serviceItem, self.isLive]) else: Receiver.send_message(u'%s_unblank' diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index 3a97cedaf..8a1ddc8c7 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -165,7 +165,8 @@ class Controller(object): if not self.isLive: return self.activate() - if self.doc.slidenumber and self.doc.slidenumber != self.doc.get_slide_number(): + if self.doc.slidenumber and \ + self.doc.slidenumber != self.doc.get_slide_number(): self.doc.goto_slide(self.doc.slidenumber) self.doc.unblank_screen() @@ -186,26 +187,27 @@ class MessageListener(object): self.liveHandler = Controller(True) # messages are sent from core.ui.slidecontroller QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_start'), self.startup) + QtCore.SIGNAL(u'presentations_start'), self.startup) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_stop'), self.shutdown) + QtCore.SIGNAL(u'presentations_stop'), self.shutdown) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_first'), self.first) + QtCore.SIGNAL(u'presentations_first'), self.first) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_previous'), self.previous) + QtCore.SIGNAL(u'presentations_previous'), self.previous) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_next'), self.next) + QtCore.SIGNAL(u'presentations_next'), self.next) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_last'), self.last) + QtCore.SIGNAL(u'presentations_last'), self.last) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_slide'), self.slide) + QtCore.SIGNAL(u'presentations_slide'), self.slide) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_blank'), self.blank) + QtCore.SIGNAL(u'presentations_blank'), self.blank) QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentation_unblank'), self.unblank) + QtCore.SIGNAL(u'presentations_unblank'), self.unblank) self.timer = QtCore.QTimer() self.timer.setInterval(500) - QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.timeout) + QtCore.QObject.connect( + self.timer, QtCore.SIGNAL("timeout()"), self.timeout) def startup(self, message): """ @@ -279,11 +281,10 @@ class MessageListener(object): if isLive: self.liveHandler.blank() - def unblank(self, message): + def unblank(self, message): isLive, item = self.decode_message(message) if isLive: self.liveHandler.unblank() def timeout(self): self.liveHandler.poll() - diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index 4b304a516..8e5d797da 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -331,11 +331,11 @@ class PresentationDocument(object): pass def next_step(self): - """ - Triggers the next effect of slide on the running presentation - This might be the next animation on the current slide, or the next slide - """ - pass + """ + Triggers the next effect of slide on the running presentation + This might be the next animation on the current slide, or the next slide + """ + pass def previous_step(self): """ From c626653092463be5c0c08224f06c928359a0fbb9 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 27 Apr 2010 23:51:16 +0100 Subject: [PATCH 15/20] Fix bible reloading --- openlp/core/lib/settingsmanager.py | 13 +++++++++++-- openlp/plugins/bibles/lib/manager.py | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index c86170988..8d4b18ecd 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -23,6 +23,8 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import os + from PyQt4 import QtCore from openlp.core.utils import AppLocation @@ -151,15 +153,22 @@ class SettingsManager(object): return list @staticmethod - def get_files(suffix=None): + def get_files(section=None, suffix=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 section directory. + ``suffix`` Defaults to *None*. The extension to search for. """ + path = AppLocation.get_data_path() + if section: + path = os.path.join(path, section) try: - files = os.listdir(AppLocation.get_data_path()) + files = os.listdir(path) except: return [] if suffix: diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index bc96a81e5..ad9d4fcc6 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -126,7 +126,7 @@ class BibleManager(object): BibleDB class. """ log.debug(u'Reload bibles') - files = SettingsManager.get_files(self.suffix) + files = SettingsManager.get_files(u'bibles', self.suffix) log.debug(u'Bible Files %s', files) self.db_cache = {} for filename in files: From 5a8cd52acf35a2bb3cfea38be2b5c1d4c5678d40 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 28 Apr 2010 00:49:21 +0100 Subject: [PATCH 16/20] File list refactor --- openlp/core/lib/settingsmanager.py | 23 ++++++++--------------- openlp/plugins/bibles/lib/manager.py | 2 +- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index 8d4b18ecd..d859ddea8 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -1,3 +1,4 @@ +import os.path # -*- coding: utf-8 -*- # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 @@ -153,16 +154,16 @@ class SettingsManager(object): return list @staticmethod - def get_files(section=None, suffix=None): + 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 section directory. + to load from a section's data subdirectory. - ``suffix`` - Defaults to *None*. The extension to search for. + ``extension`` + Defaults to *None*. The extension to search for. """ path = AppLocation.get_data_path() if section: @@ -171,17 +172,9 @@ class SettingsManager(object): files = os.listdir(path) except: return [] - if suffix: - return_files = [] - for file in files: - if file.find(u'.') != -1: - filename = file.split(u'.') - filesuffix = filename[1].lower() - filesuffix = filesuffix.lower() - # only load files with the correct suffix - if suffix.find(filesuffix) > -1 : - return_files.append(file) - return return_files + if extension: + return [file for file in files + if extension == os.path.splitext(file)[1]] else: # no filtering required return files diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index ad9d4fcc6..1f962be90 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -114,7 +114,7 @@ class BibleManager(object): self.path = AppLocation.get_section_data_path(u'bibles') self.proxy_name = unicode( QtCore.QSettings().value(u'bibles/proxy name', u'').toString()) - self.suffix = u'sqlite' + self.suffix = u'.sqlite' self.import_wizard = None self.reload_bibles() self.media = None From 2470f776cd16f9ebe1f2854400b278242af74e93 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 28 Apr 2010 01:05:56 +0100 Subject: [PATCH 17/20] Remove PluginConfig doc reference --- documentation/source/core/lib.rst | 6 ------ 1 file changed, 6 deletions(-) diff --git a/documentation/source/core/lib.rst b/documentation/source/core/lib.rst index 146d0d934..81e858c15 100644 --- a/documentation/source/core/lib.rst +++ b/documentation/source/core/lib.rst @@ -36,12 +36,6 @@ .. autoclass:: openlp.core.lib.plugin.Plugin :members: -:mod:`PluginConfig` -------------------- - -.. autoclass:: openlp.core.lib.pluginconfig.PluginConfig - :members: - :mod:`PluginManager` -------------------- From 507cd19739083ec7aaeef549b4850e7ec34c71a9 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 28 Apr 2010 02:28:37 +0100 Subject: [PATCH 18/20] Cleanups and diff reading fixes --- openlp/core/lib/settingsmanager.py | 3 +- openlp/core/ui/generaltab.py | 31 ++++++++++++------- openlp/core/ui/mainwindow.py | 2 +- openlp/core/ui/servicemanager.py | 2 +- openlp/core/ui/slidecontroller.py | 2 +- openlp/core/ui/thememanager.py | 2 +- openlp/plugins/bibles/lib/db.py | 10 +++--- openlp/plugins/custom/lib/customtab.py | 2 +- openlp/plugins/custom/lib/manager.py | 8 ++--- .../presentations/lib/presentationtab.py | 2 +- openlp/plugins/songs/lib/manager.py | 12 ++++--- openlp/plugins/songs/lib/songstab.py | 4 +-- openlp/plugins/songusage/lib/manager.py | 12 ++++--- 13 files changed, 54 insertions(+), 38 deletions(-) diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index d859ddea8..36caa38f5 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -1,4 +1,3 @@ -import os.path # -*- coding: utf-8 -*- # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 @@ -126,7 +125,7 @@ class SettingsManager(object): settings.setValue( u'%s/%s %d' % (section, name, counter), list[counter-1]) if old_count > new_count: - # Tidy up any old list itrms if list is smaller now + # Tidy up any old list items for counter in range(new_count, old_count): settings.remove(u'%s/%s %d' % (section, name, counter)) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index bb35d8f2a..357756a08 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -264,17 +264,26 @@ class GeneralTab(SettingsTab): def save(self): settings = QtCore.QSettings() - settings.setValue(u'general/monitor', self.MonitorNumber) - settings.setValue( - u'general/display on monitor', self.DisplayOnMonitor) - settings.setValue(u'general/blank warning', self.Warning) - settings.setValue(u'general/auto open', self.AutoOpen) - settings.setValue(u'general/show splash', self.ShowSplash) - settings.setValue(u'general/save prompt', self.PromptSaveService) - settings.setValue(u'general/auto preview', self.AutoPreview) - settings.setValue(u'general/ccli number', self.CCLINumber) - settings.setValue(u'general/songselect username', self.Username) - settings.setValue(u'general/songselect password', self.Password) + settings.setValue(u'general/monitor', + QtCore.QVariant(self.MonitorNumber)) + settings.setValue(u'general/display on monitor', + QtCore.QVariant(self.DisplayOnMonitor)) + settings.setValue(u'general/blank warning', + QtCore.QVariant(self.Warning)) + settings.setValue(u'general/auto open', + QtCore.QVariant(self.AutoOpen)) + settings.setValue(u'general/show splash', + QtCore.QVariant(self.ShowSplash)) + settings.setValue(u'general/save prompt', + QtCore.QVariant(self.PromptSaveService)) + settings.setValue(u'general/auto preview', + QtCore.QVariant(self.AutoPreview)) + settings.setValue(u'general/ccli number', + QtCore.QVariant(self.CCLINumber)) + settings.setValue(u'general/songselect username', + QtCore.QVariant(self.Username)) + settings.setValue(u'general/songselect password', + QtCore.QVariant(self.Password)) self.screens.display = self.DisplayOnMonitor #Monitor Number has changed. if self.screens.monitor_number != self.MonitorNumber: diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 96357f83d..d1efc79c5 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -431,7 +431,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.plugin_helpers = {} # Set up the interface self.setupUi(self) - # Load settings after setupUi so defaults UI sizes are overwritten + # Load settings after setupUi so default UI sizes are overwritten self.loadSettings() # Once settings are loaded update FileMenu with recentFiles self.updateFileMenu() diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 14bb35113..28793de71 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -641,7 +641,7 @@ class ServiceManager(QtGui.QWidget): """ self.service_theme = unicode(self.ThemeComboBox.currentText()) self.parent.RenderManager.set_service_theme(self.service_theme) - QtCore.QSettings().setValue(u'service manager/service theme', + QtCore.QSettings().setValue(u'servicemanager/service theme', QtCore.QVariant(self.service_theme)) self.regenerateServiceItems() diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index c1f38cf38..6ff739fc3 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -396,7 +396,7 @@ class SlideController(QtGui.QWidget): self.Toolbar.makeWidgetsInvisible(self.loop_list) if item.is_text(): self.Toolbar.makeWidgetsInvisible(self.loop_list) - if QtCore.QSettings().value(u'songs/show songbar', True) \ + if QtCore.QSettings().value(u'songs/show songbar', True).toBool() \ and len(self.slideList) > 0: self.Toolbar.makeWidgetsVisible([u'Song Menu']) if item.is_capable(ItemCapabilities.AllowsLoop) and \ diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 0c19c2510..a71e65210 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -145,7 +145,7 @@ class ThemeManager(QtGui.QWidget): name = u'%s (%s)' % (self.global_theme, self.trUtf8('default')) self.ThemeListWidget.item(count).setText(name) QtCore.QSettings().setValue(u'themes/global theme', - self.global_theme) + QtCore.QVariant(self.global_theme)) Receiver.send_message(u'theme_update_global', self.global_theme) self.pushThemes() diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 207fe4091..0d2422a8d 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -80,11 +80,11 @@ class BibleDB(QtCore.QObject): if db_type == u'sqlite': db_url = u'sqlite:///' + self.db_file else: - db_url = u'%s://%s:%s@%s/%s' % \ - (db_type, unicode(settings.value(u'bibles/db username')), - unicode(settings.value(u'bibles/db password')), - unicode(settings.value(u'bibles/db hostname')), - unicode(settings.value(u'bibles/db database'))) + db_url = u'%s://%s:%s@%s/%s' % (db_type, + unicode(settings.value(u'bibles/db username').toString()), + unicode(settings.value(u'bibles/db password').toString()), + unicode(settings.value(u'bibles/db hostname').toString()), + unicode(settings.value(u'bibles/db database').toString())) self.metadata, self.session = init_models(db_url) self.metadata.create_all(checkfirst=True) if u'file' in kwargs: diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py index d99c6d9e3..5470c64d0 100644 --- a/openlp/plugins/custom/lib/customtab.py +++ b/openlp/plugins/custom/lib/customtab.py @@ -57,7 +57,7 @@ class CustomTab(SettingsTab): def retranslateUi(self): self.CustomModeGroupBox.setTitle(self.trUtf8('Custom Display')) self.DisplayFooterCheckBox.setText( - self.trUtf8('Display Footer:')) + self.trUtf8('Display Footer')) def onDisplayFooterCheckBoxChanged(self, check_state): self.displayFooter = False diff --git a/openlp/plugins/custom/lib/manager.py b/openlp/plugins/custom/lib/manager.py index 54962d9b0..c9555e63a 100644 --- a/openlp/plugins/custom/lib/manager.py +++ b/openlp/plugins/custom/lib/manager.py @@ -54,10 +54,10 @@ class CustomManager(): AppLocation.get_section_data_path(u'custom') else: self.db_url = u'%s://%s:%s@%s/%s' % (db_type, - unicode(settings.value(u'custom/db username')), - unicode(settings.value(u'custom/db password')), - unicode(settings.value(u'custom/db hostname')), - unicode(settings.value(u'custom/db database'))) + unicode(settings.value(u'custom/db username').toString()), + unicode(settings.value(u'custom/db password').toString()), + unicode(settings.value(u'custom/db hostname').toString()), + unicode(settings.value(u'custom/db database').toString())) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index af492d2c8..4c1b41813 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -93,7 +93,7 @@ class PresentationTab(SettingsTab): controller = self.controllers[key] checkbox = self.PresenterCheckboxes[controller.name] checkbox.setText( - u'%s %s:' % (controller.name, self.trUtf8('available'))) + u'%s %s' % (controller.name, self.trUtf8('available'))) def load(self): for key in self.controllers: diff --git a/openlp/plugins/songs/lib/manager.py b/openlp/plugins/songs/lib/manager.py index f97b0875d..5264a58ed 100644 --- a/openlp/plugins/songs/lib/manager.py +++ b/openlp/plugins/songs/lib/manager.py @@ -55,10 +55,14 @@ class SongManager(): AppLocation.get_section_data_path(u'songs') else: self.db_url = db_type + 'u://' + \ - unicode(settings.value(u'songs/db username', u'').toString()) + u':' + \ - unicode(settings.value(u'songs/db password', u'').toString()) + u'@' + \ - unicode(settings.value(u'songs/db hostname', u'').toString()) + u'/' + \ - unicode(settings.value(u'songs/db database', u'').toString()) + unicode(settings.value( + u'songs/db username', u'').toString()) + u':' + \ + unicode(settings.value( + u'songs/db password', u'').toString()) + u'@' + \ + unicode(settings.value( + u'songs/db hostname', u'').toString()) + u'/' + \ + unicode(settings.value( + u'songs/db database', u'').toString()) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) log.debug(u'Song Initialised') diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index 3fb41aabf..8b9f6804d 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -63,9 +63,9 @@ class SongsTab(SettingsTab): def retranslateUi(self): self.SongsModeGroupBox.setTitle(self.trUtf8('Songs Mode')) self.SearchAsTypeCheckBox.setText( - self.trUtf8('Enable search as you type:')) + self.trUtf8('Enable search as you type')) self.SongBarActiveCheckBox.setText( - self.trUtf8('Display Verses on Live Tool bar:')) + self.trUtf8('Display Verses on Live Tool bar')) def onSearchAsTypeCheckBoxChanged(self, check_state): self.song_search = False diff --git a/openlp/plugins/songusage/lib/manager.py b/openlp/plugins/songusage/lib/manager.py index dddea5350..d307f9dd5 100644 --- a/openlp/plugins/songusage/lib/manager.py +++ b/openlp/plugins/songusage/lib/manager.py @@ -55,10 +55,14 @@ class SongUsageManager(): AppLocation.get_section_data_path(u'songusage') else: self.db_url = u'%s://%s:%s@%s/%s' % (db_type, - unicode(settings.value(u'songusage/db username', u'')), - unicode(settings.value(u'songusage/db password', u'')), - unicode(settings.value(u'songusage/db hostname', u'')), - unicode(settings.value(u'songusage/db database', u''))) + unicode( + settings.value(u'songusage/db username', u'').toString()), + unicode( + settings.value(u'songusage/db password', u'').toString()), + unicode( + settings.value(u'songusage/db hostname', u'').toString()), + unicode( + settings.value(u'songusage/db database', u'').toString())) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) From 97d9ab93f6283d83fe6bb90b8dc49b15b1fcdfbe Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 28 Apr 2010 04:16:49 +0100 Subject: [PATCH 19/20] Migration tools settings conversion --- openlp/migration/migratebibles.py | 8 ++++---- openlp/migration/migratefiles.py | 19 ++++++++++++------- openlp/migration/migratesongs.py | 8 ++++---- openlpcnv.pyw | 13 +++++++------ 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/openlp/migration/migratebibles.py b/openlp/migration/migratebibles.py index c0d47fdb8..cad6afc3f 100644 --- a/openlp/migration/migratebibles.py +++ b/openlp/migration/migratebibles.py @@ -31,7 +31,8 @@ from sqlalchemy import * from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker, mapper -from openlp.core.lib import PluginConfig +from openlp.core.lib import SettingsManager +from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.models import * class BaseModel(object): @@ -111,9 +112,8 @@ def init_models(url): class MigrateBibles(): def __init__(self, display): self.display = display - self.config = PluginConfig(u'Bibles') - self.data_path = self.config.get_data_path() - self.database_files = self.config.get_files(u'sqlite') + self.data_path = AppLocation.get_section_data_path(u'bibles') + self.database_files = SettingsManager.get_files(u'bibles', u'.sqlite') print self.database_files def progress(self, text): diff --git a/openlp/migration/migratefiles.py b/openlp/migration/migratefiles.py index 4fa6b5a29..ceca99718 100644 --- a/openlp/migration/migratefiles.py +++ b/openlp/migration/migratefiles.py @@ -23,7 +23,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -from openlp.core.utils import ConfigHelper +from openlp.core.utils import AppLocation class MigrateFiles(): def __init__(self, display): @@ -36,14 +36,19 @@ class MigrateFiles(): def _initial_setup(self): self.display.output(u'Initial Setup started') - ConfigHelper.get_data_path() + data_path = AppLocation.get_data_path() + print data_path self.display.sub_output(u'Config created') - ConfigHelper.get_config(u'bible', u'data path') + bibles_path = AppLocation.get_section_data_path(u'bibles') + print bibles_path self.display.sub_output(u'Config created') - ConfigHelper.get_config(u'videos', u'data path') - self.display.sub_output(u'videos created') - ConfigHelper.get_config(u'images', u'data path') + # Media doesn't use a directory like the other plugins. + #media_path = AppLocation.get_section_data_path(u'media') + #self.display.sub_output(u'videos created') + images_path = AppLocation.get_section_data_path(u'images') + print images_path self.display.sub_output(u'images created') - ConfigHelper.get_config(u'presentations', u'data path') + presentations_path = AppLocation.get_section_data_path(u'presentations') + print presentations_path self.display.sub_output(u'presentations created') self.display.output(u'Initial Setup finished') diff --git a/openlp/migration/migratesongs.py b/openlp/migration/migratesongs.py index 89b55bdee..a46f50a54 100644 --- a/openlp/migration/migratesongs.py +++ b/openlp/migration/migratesongs.py @@ -31,7 +31,8 @@ from sqlalchemy import * from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker, mapper, relation -from openlp.core.lib import PluginConfig +from openlp.core.lib import SettingsManager +from openlp.core.utils import AppLocation from openlp.plugins.songs.lib.models import metadata, songs_table, Song, \ Author, Topic, Book from openlp.plugins.songs.lib.tables import * @@ -111,9 +112,8 @@ class TSongAuthor(BaseModel): class MigrateSongs(): def __init__(self, display): self.display = display - self.config = PluginConfig(u'Songs') - self.data_path = self.config.get_data_path() - self.database_files = self.config.get_files(u'sqlite') + self.data_path = AppLocation.get_section_data_path(u'songs') + self.database_files = SettingsManager.get_files(u'songs', u'.sqlite') print self.database_files def process(self): diff --git a/openlpcnv.pyw b/openlpcnv.pyw index 5d0ff62d0..f0c2748f0 100755 --- a/openlpcnv.pyw +++ b/openlpcnv.pyw @@ -35,6 +35,7 @@ if os.name == u'nt': import win32con from win32com.client import Dispatch +from openlp.core.utils import AppLocation from openlp.migration.display import * from openlp.migration.migratefiles import * from openlp.migration.migratebibles import * @@ -103,8 +104,10 @@ class Migration(object): def convert_sqlite2_to_3(self, olddb, newdb): print u'Converting sqlite2 ' + olddb + ' to sqlite3 ' + newdb if os.name == u'nt': - # we can't make this a raw unicode string as the \U within it causes much confusion - hKey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, u'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\SQLite ODBC Driver') + # we can't make this a raw unicode string as the \U within it + # causes much confusion + hKey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, + u'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\SQLite ODBC Driver') value, type = win32api.RegQueryValueEx (hKey, u'UninstallString') sqlitepath, temp = os.path.split(value) sqliteexe = os.path.join(sqlitepath, u'sqlite.exe') @@ -133,10 +136,8 @@ class Migration(object): if __name__ == u'__main__': mig = Migration() - songconfig = PluginConfig(u'Songs') - newsongpath = songconfig.get_data_path() - bibleconfig = PluginConfig(u'Bibles') - newbiblepath = bibleconfig.get_data_path() + newsongpath = AppLocation.get_section_data_path(u'songs') + newbiblepath = AppLocation.get_section_data_path(u'bibles') if os.name == u'nt': if not os.path.isdir(newsongpath): os.makedirs(newsongpath) From bc74bc03351eb77cbc269e2d2ecec793762fe608 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Wed, 28 Apr 2010 15:17:42 +0100 Subject: [PATCH 20/20] Cleanup settings saving --- openlp.pyw | 8 +-- openlp/core/lib/mediamanageritem.py | 14 +++-- openlp/core/lib/plugin.py | 9 ++- openlp/core/lib/settingsmanager.py | 21 ++++--- openlp/core/lib/settingstab.py | 1 + openlp/core/ui/generaltab.py | 54 +++++++++--------- openlp/core/ui/mainwindow.py | 55 ++++++++++++------- openlp/core/ui/mediadockmanager.py | 5 +- openlp/core/ui/servicemanager.py | 30 ++++++---- openlp/core/ui/slidecontroller.py | 10 +++- openlp/core/ui/thememanager.py | 24 +++++--- openlp/core/ui/themestab.py | 17 ++++-- openlp/core/utils/__init__.py | 10 ++-- openlp/plugins/alerts/alertsplugin.py | 3 +- openlp/plugins/alerts/forms/alertstab.py | 32 ++++++----- openlp/plugins/alerts/lib/manager.py | 17 +++--- .../plugins/bibles/forms/importwizardform.py | 13 +++-- openlp/plugins/bibles/lib/biblestab.py | 32 ++++++----- openlp/plugins/bibles/lib/db.py | 12 ++-- openlp/plugins/bibles/lib/manager.py | 14 +++-- openlp/plugins/bibles/lib/mediaitem.py | 5 +- openlp/plugins/custom/lib/customtab.py | 7 ++- openlp/plugins/custom/lib/manager.py | 13 +++-- openlp/plugins/custom/lib/mediaitem.py | 8 +-- openlp/plugins/images/lib/imagetab.py | 7 ++- openlp/plugins/images/lib/mediaitem.py | 13 +++-- openlp/plugins/media/lib/mediaitem.py | 8 +-- openlp/plugins/presentations/lib/mediaitem.py | 12 ++-- .../lib/presentationcontroller.py | 6 +- .../presentations/lib/presentationtab.py | 6 +- openlp/plugins/remotes/lib/remotetab.py | 5 +- openlp/plugins/remotes/remoteplugin.py | 3 +- openlp/plugins/songs/lib/manager.py | 12 ++-- openlp/plugins/songs/lib/mediaitem.py | 5 +- openlp/plugins/songs/lib/songstab.py | 15 +++-- .../songusage/forms/songusagedetailform.py | 9 +-- openlp/plugins/songusage/lib/manager.py | 23 ++++---- openlp/plugins/songusage/songusageplugin.py | 7 ++- 38 files changed, 317 insertions(+), 228 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 69e36618c..0c1227b6a 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -120,7 +120,7 @@ class OpenLP(QtGui.QApplication): if os.name == u'nt': self.setStyleSheet(application_stylesheet) show_splash = QtCore.QSettings().value( - u'general/show splash', True).toBool() + u'general/show splash', QtCore.QVariant(True)).toBool() if show_splash: self.splash = SplashScreen(self.applicationVersion()) self.splash.show() @@ -130,8 +130,8 @@ class OpenLP(QtGui.QApplication): # Decide how many screens we have and their size for screen in xrange(0, self.desktop().numScreens()): screens.add_screen({u'number': screen, - u'size': self.desktop().availableGeometry(screen), - u'primary': (self.desktop().primaryScreen() == screen)}) + u'size': self.desktop().availableGeometry(screen), + u'primary': (self.desktop().primaryScreen() == screen)}) log.info(u'Screen %d found with resolution %s', screen, self.desktop().availableGeometry(screen)) # start the main app window @@ -196,4 +196,4 @@ if __name__ == u'__main__': """ Instantiate and run the application. """ - main() \ No newline at end of file + main() diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index bf27ed38a..2d16687f4 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -70,7 +70,7 @@ class MediaManagerItem(QtGui.QWidget): The user visible name for a plugin which should use a suitable translation function. - ``self.ConfigSection`` + ``self.SettingsSection`` The section in the configuration where the items in the media manager are stored. This could potentially be ``self.PluginNameShort.lower()``. @@ -335,15 +335,15 @@ class MediaManagerItem(QtGui.QWidget): def onFileClick(self): files = QtGui.QFileDialog.getOpenFileNames( self, self.OnNewPrompt, - SettingsManager.get_last_dir(self.ConfigSection), + SettingsManager.get_last_dir(self.SettingsSection), self.OnNewFileMasks) log.info(u'New files(s) %s', unicode(files)) if files: self.loadList(files) dir, filename = os.path.split(unicode(files[0])) - SettingsManager.set_last_dir(self.ConfigSection, dir) + SettingsManager.set_last_dir(self.SettingsSection, dir) SettingsManager.set_list( - self.ConfigSection, self.ConfigSection, self.getFileList()) + self.SettingsSection, self.SettingsSection, self.getFileList()) def getFileList(self): count = 0 @@ -454,7 +454,8 @@ class MediaManagerItem(QtGui.QWidget): if not service_item: QtGui.QMessageBox.information(self, self.trUtf8('No Service Item Selected'), - self.trUtf8('You must select a existing service item to add to.')) + self.trUtf8( + 'You must select an existing service item to add to.')) elif self.title.lower() == service_item.name.lower(): self.generateSlideData(service_item) self.parent.service_manager.addServiceItem(service_item, @@ -463,7 +464,8 @@ class MediaManagerItem(QtGui.QWidget): #Turn off the remote edit update message indicator QtGui.QMessageBox.information(self, self.trUtf8('Invalid Service Item'), - self.trUtf8(unicode('You must select a %s service item.' % self.title))) + self.trUtf8(unicode( + 'You must select a %s service item.' % self.title))) def buildServiceItem(self, item=None): """ diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index f01fa0807..c7a257700 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -51,6 +51,9 @@ class Plugin(QtCore.QObject): ``version`` The version number of this iteration of the plugin. + ``settings_section`` + The namespace to store settings for the plugin. + ``icon`` An instance of QIcon, which holds an icon for this plugin. @@ -113,6 +116,7 @@ class Plugin(QtCore.QObject): self.name = name if version: self.version = version + self.settings_section = self.name.lower() self.icon = None self.weight = 0 self.status = PluginStatus.Inactive @@ -143,7 +147,8 @@ class Plugin(QtCore.QObject): Sets the status of the plugin """ self.status = QtCore.QSettings().value( - self.name.lower() + u'/status', PluginStatus.Inactive).toInt()[0] + self.settings_section + u'/status', + QtCore.QVariant(PluginStatus.Inactive)).toInt()[0] def toggle_status(self, new_status): """ @@ -151,7 +156,7 @@ class Plugin(QtCore.QObject): """ self.status = new_status QtCore.QSettings().setValue( - self.name.lower() + u'/status', QtCore.QVariant(self.status)) + self.settings_section + u'/status', QtCore.QVariant(self.status)) def is_active(self): """ diff --git a/openlp/core/lib/settingsmanager.py b/openlp/core/lib/settingsmanager.py index 36caa38f5..de1401d56 100644 --- a/openlp/core/lib/settingsmanager.py +++ b/openlp/core/lib/settingsmanager.py @@ -76,7 +76,7 @@ class SettingsManager(object): else: name = u'last directory' last_dir = unicode(QtCore.QSettings().value( - section + u'/' + name, u'').toString()) + section + u'/' + name, QtCore.QVariant(u'')).toString()) return last_dir @staticmethod @@ -116,18 +116,19 @@ class SettingsManager(object): The list of values to save. """ settings = QtCore.QSettings() + settings.beginGroup(section) old_count = settings.value( - u'%s/%s count' % (section, name), 0).toInt()[0] + u'%s count' % name, QtCore.QVariant(0)).toInt()[0] new_count = len(list) - settings.setValue( - u'%s/%s count' % (section, name), QtCore.QVariant(new_count)) + settings.setValue(u'%s count' % name, QtCore.QVariant(new_count)) for counter in range (0, new_count): settings.setValue( - u'%s/%s %d' % (section, name, counter), list[counter-1]) + u'%s %d' % (name, counter), QtCore.QVariant(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/%s %d' % (section, name, counter)) + settings.remove(u'%s %d' % (name, counter)) + settings.endGroup() @staticmethod def load_list(section, name): @@ -141,15 +142,17 @@ class SettingsManager(object): The name of the list. """ settings = QtCore.QSettings() + settings.beginGroup(section) list_count = settings.value( - u'%s/%s count' % (section, name), 0).toInt()[0] + u'%s count' % name, QtCore.QVariant(0)).toInt()[0] list = [] if list_count: for counter in range(0, list_count): - item = unicode(settings.value( - u'%s/%s %d' % (section, name, counter)).toString()) + item = unicode( + settings.value(u'%s %d' % (name, counter)).toString()) if item: list.append(item) + settings.endGroup() return list @staticmethod diff --git a/openlp/core/lib/settingstab.py b/openlp/core/lib/settingstab.py index 6f1aef854..0b862d9f8 100644 --- a/openlp/core/lib/settingstab.py +++ b/openlp/core/lib/settingstab.py @@ -40,6 +40,7 @@ class SettingsTab(QtGui.QWidget): QtGui.QWidget.__init__(self) self.tabTitle = title self.tabTitleVisible = None + self.settingsSection = self.tabTitle.lower() self.setupUi() self.retranslateUi() self.initialise() diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 357756a08..005e588ac 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -42,13 +42,15 @@ class GeneralTab(SettingsTab): If not set before default to last screen. """ settings = QtCore.QSettings() - self.MonitorNumber = settings.value( - u'general/monitor', self.screens.monitor_number).toInt()[0] + settings.beginGroup(self.settingsSection) + self.MonitorNumber = settings.value(u'monitor', + QtCore.QVariant(self.screens.monitor_number)).toInt()[0] self.screens.set_current_display(self.MonitorNumber) self.screens.monitor_number = self.MonitorNumber self.DisplayOnMonitor = settings.value( - u'general/display on monitor', True).toBool() + u'display on monitor', QtCore.QVariant(True)).toBool() self.screens.display = self.DisplayOnMonitor + settings.endGroup() def setupUi(self): self.setObjectName(u'GeneralTab') @@ -227,6 +229,7 @@ class GeneralTab(SettingsTab): def load(self): settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) for screen in self.screens.screen_list: screen_name = u'%s %d' % (self.trUtf8('Screen'), screen[u'number'] + 1) @@ -235,21 +238,22 @@ class GeneralTab(SettingsTab): self.MonitorComboBox.addItem(screen_name) # Get the configs self.Warning = settings.value( - u'general/blank warning', QtCore.QVariant(False)).toBool() + u'blank warning', QtCore.QVariant(False)).toBool() self.AutoOpen = settings.value( - u'general/auto open', QtCore.QVariant(False)).toBool() + u'auto open', QtCore.QVariant(False)).toBool() self.ShowSplash = settings.value( - u'general/show splash', QtCore.QVariant(True)).toBool() + u'show splash', QtCore.QVariant(True)).toBool() self.PromptSaveService = settings.value( - u'general/save prompt', QtCore.QVariant(False)).toBool() + u'save prompt', QtCore.QVariant(False)).toBool() self.AutoPreview = settings.value( - u'general/auto preview', QtCore.QVariant(False)).toBool() + u'auto preview', QtCore.QVariant(False)).toBool() self.CCLINumber = unicode(settings.value( - u'general/ccli number', QtCore.QVariant(u'')).toString()) + u'ccli number', QtCore.QVariant(u'')).toString()) self.Username = unicode(settings.value( - u'general/songselect username', QtCore.QVariant(u'')).toString()) + u'songselect username', QtCore.QVariant(u'')).toString()) self.Password = unicode(settings.value( - u'general/songselect password', QtCore.QVariant(u'')).toString()) + u'songselect password', QtCore.QVariant(u'')).toString()) + settings.endGroup() self.SaveCheckServiceCheckBox.setChecked(self.PromptSaveService) # Set a few things up self.MonitorComboBox.setCurrentIndex(self.MonitorNumber) @@ -264,26 +268,22 @@ class GeneralTab(SettingsTab): def save(self): settings = QtCore.QSettings() - settings.setValue(u'general/monitor', - QtCore.QVariant(self.MonitorNumber)) - settings.setValue(u'general/display on monitor', + settings.beginGroup(self.settingsSection) + settings.setValue(u'monitor', QtCore.QVariant(self.MonitorNumber)) + settings.setValue(u'display on monitor', QtCore.QVariant(self.DisplayOnMonitor)) - settings.setValue(u'general/blank warning', - QtCore.QVariant(self.Warning)) - settings.setValue(u'general/auto open', - QtCore.QVariant(self.AutoOpen)) - settings.setValue(u'general/show splash', - QtCore.QVariant(self.ShowSplash)) - settings.setValue(u'general/save prompt', + settings.setValue(u'blank warning', QtCore.QVariant(self.Warning)) + settings.setValue(u'auto open', QtCore.QVariant(self.AutoOpen)) + settings.setValue(u'show splash', QtCore.QVariant(self.ShowSplash)) + settings.setValue(u'save prompt', QtCore.QVariant(self.PromptSaveService)) - settings.setValue(u'general/auto preview', - QtCore.QVariant(self.AutoPreview)) - settings.setValue(u'general/ccli number', - QtCore.QVariant(self.CCLINumber)) - settings.setValue(u'general/songselect username', + settings.setValue(u'auto preview', QtCore.QVariant(self.AutoPreview)) + settings.setValue(u'ccli number', QtCore.QVariant(self.CCLINumber)) + settings.setValue(u'songselect username', QtCore.QVariant(self.Username)) - settings.setValue(u'general/songselect password', + settings.setValue(u'songselect password', QtCore.QVariant(self.Password)) + settings.endGroup() self.screens.display = self.DisplayOnMonitor #Monitor Number has changed. if self.screens.monitor_number != self.MonitorNumber: diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index d1efc79c5..44341244d 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -362,12 +362,14 @@ class Ui_MainWindow(object): self.actionLook_Feel.setText(self.trUtf8('Look && &Feel')) self.OptionsSettingsItem.setText(self.trUtf8('&Settings')) self.ViewMediaManagerItem.setText(self.trUtf8('&Media Manager')) - self.ViewMediaManagerItem.setToolTip(self.trUtf8('Toggle Media Manager')) + self.ViewMediaManagerItem.setToolTip( + self.trUtf8('Toggle Media Manager')) self.ViewMediaManagerItem.setStatusTip( self.trUtf8('Toggle the visibility of the Media Manager')) self.ViewMediaManagerItem.setShortcut(self.trUtf8('F8')) self.ViewThemeManagerItem.setText(self.trUtf8('&Theme Manager')) - self.ViewThemeManagerItem.setToolTip(self.trUtf8('Toggle Theme Manager')) + self.ViewThemeManagerItem.setToolTip( + self.trUtf8('Toggle Theme Manager')) self.ViewThemeManagerItem.setStatusTip( self.trUtf8('Toggle the visibility of the Theme Manager')) self.ViewThemeManagerItem.setShortcut(self.trUtf8('F10')) @@ -378,7 +380,8 @@ class Ui_MainWindow(object): self.trUtf8('Toggle the visibility of the Service Manager')) self.ViewServiceManagerItem.setShortcut(self.trUtf8('F9')) self.action_Preview_Panel.setText(self.trUtf8('&Preview Panel')) - self.action_Preview_Panel.setToolTip(self.trUtf8('Toggle Preview Panel')) + self.action_Preview_Panel.setToolTip( + self.trUtf8('Toggle Preview Panel')) self.action_Preview_Panel.setStatusTip( self.trUtf8('Toggle the visibility of the Preview Panel')) self.action_Preview_Panel.setShortcut(self.trUtf8('F11')) @@ -419,6 +422,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMainWindow.__init__(self) self.screens = screens self.applicationVersion = applicationVersion + self.generalSettingsSection = u'general' + self.uiSettingsSection = u'user interface' self.serviceNotSaved = False self.settingsmanager = SettingsManager(screens) self.displayManager = DisplayManager(screens) @@ -498,8 +503,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): #warning cyclic dependency #RenderManager needs to call ThemeManager and #ThemeManager needs to call RenderManager - self.RenderManager = RenderManager(self.ThemeManagerContents, - self.screens) + self.RenderManager = RenderManager( + self.ThemeManagerContents, self.screens) #Define the media Dock Manager self.mediaDockManager = MediaDockManager(self.MediaToolBox) log.info(u'Load Plugins') @@ -561,7 +566,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.displayManager.mainDisplay.isVisible(): self.displayManager.mainDisplay.setFocus() self.activateWindow() - if QtCore.QSettings().value(u'general/auto open', False).toBool(): + if QtCore.QSettings().value(self.generalSettingsSection + u'/auto open', + QtCore.QVariant(False)).toBool(): self.ServiceManagerContents.onLoadService(True) def blankCheck(self): @@ -569,14 +575,17 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): Check and display message if screen blank on setup. Triggered by delay thread. """ - if QtCore.QSettings().value(u'general/screen blank', False).toBool() \ - and QtCore.QSettings().value(u'general/blank warning', False).toBool(): + settings = QtCore.QSettings() + settings.beginGroup(self.generalSettingsSection) + if settings.value(u'screen blank', QtCore.QVariant(False)).toBool() \ + and settings.value(u'blank warning', QtCore.QVariant(False)).toBool(): self.LiveController.onBlankDisplay(True) QtGui.QMessageBox.question(self, self.trUtf8('OpenLP Main Display Blanked'), self.trUtf8('The Main Display has been blanked out'), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok), QtGui.QMessageBox.Ok) + settings.endGroup() def versionThread(self): """ @@ -622,7 +631,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.serviceNotSaved: ret = QtGui.QMessageBox.question(self, self.trUtf8('Save Changes to Service?'), - self.trUtf8('Your service has changed, do you want to save those changes?'), + self.trUtf8('Your service has changed. ' + 'Do you want to save those changes?'), QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Discard | @@ -705,26 +715,30 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): log.debug(u'Loading QSettings') settings = QtCore.QSettings() self.recentFiles = settings.value( - u'general/recent files').toStringList() - self.move(settings.value(u'user interface/main window position', + self.generalSettingsSection + u'/recent files').toStringList() + settings.beginGroup(self.uiSettingsSection) + self.move(settings.value(u'main window position', QtCore.QVariant(QtCore.QPoint(0, 0))).toPoint()) - self.restoreGeometry(settings.value( - u'user interface/main window geometry').toByteArray()) - self.restoreState( - settings.value(u'user interface/main window state').toByteArray()) + self.restoreGeometry( + settings.value(u'main window geometry').toByteArray()) + self.restoreState(settings.value(u'main window state').toByteArray()) + settings.endGroup() def saveSettings(self): log.debug(u'Saving QSettings') settings = QtCore.QSettings() recentFiles = QtCore.QVariant(self.recentFiles) \ if self.recentFiles else QtCore.QVariant() - settings.setValue(u'general/recent files', recentFiles) - settings.setValue(u'user interface/main window position', + settings.setValue( + self.generalSettingsSection + u'/recent files', recentFiles) + settings.beginGroup(self.uiSettingsSection) + settings.setValue(u'main window position', QtCore.QVariant(self.pos())) - settings.setValue(u'user interface/main window state', + settings.setValue(u'main window state', QtCore.QVariant(self.saveState())) - settings.setValue(u'user interface/main window geometry', + settings.setValue(u'main window geometry', QtCore.QVariant(self.saveGeometry())) + settings.endGroup() def updateFileMenu(self): self.FileMenu.clear() @@ -747,7 +761,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def addRecentFile(self, filename): recentFileCount = QtCore.QSettings().value( - u'general/max recent files', 4).toInt()[0] + self.generalSettingsSection + u'/max recent files', + QtCore.QVariant(4)).toInt()[0] if filename and not self.recentFiles.contains(filename): self.recentFiles.prepend(QtCore.QString(filename)) while self.recentFiles.count() > recentFileCount: diff --git a/openlp/core/ui/mediadockmanager.py b/openlp/core/ui/mediadockmanager.py index 574b181da..ae77cc43a 100644 --- a/openlp/core/ui/mediadockmanager.py +++ b/openlp/core/ui/mediadockmanager.py @@ -45,7 +45,8 @@ class MediaDockManager(object): log.debug(u'Inserting %s dock' % media_item.title) match = False for dock_index in range(0, self.media_dock.count()): - if self.media_dock.widget(dock_index).ConfigSection == media_item.title.lower(): + if self.media_dock.widget(dock_index).SettingsSection == \ + media_item.title.lower(): match = True break if not match: @@ -56,6 +57,6 @@ class MediaDockManager(object): log.debug(u'remove %s dock' % name) for dock_index in range(0, self.media_dock.count()): if self.media_dock.widget(dock_index): - if self.media_dock.widget(dock_index).ConfigSection == name: + if self.media_dock.widget(dock_index).SettingsSection == name: self.media_dock.widget(dock_index).hide() self.media_dock.removeItem(dock_index) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 28793de71..45d007c17 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -40,7 +40,7 @@ from openlp.core.utils import AppLocation class ServiceManagerList(QtGui.QTreeWidget): def __init__(self, parent=None, name=None): - QtGui.QTreeWidget.__init__(self,parent) + QtGui.QTreeWidget.__init__(self, parent) self.parent = parent def keyPressEvent(self, event): @@ -99,6 +99,8 @@ class ServiceManager(QtGui.QWidget): """ QtGui.QWidget.__init__(self) self.parent = parent + self.settingsSection = u'servicemanager' + self.generalSettingsSection = self.parent.generalSettingsSection self.serviceItems = [] self.serviceName = u'' self.droppos = 0 @@ -191,7 +193,8 @@ class ServiceManager(QtGui.QWidget): QtCore.SIGNAL(u'config_updated'), self.regenerateServiceItems) # Last little bits of setting up self.service_theme = unicode(QtCore.QSettings().value( - u'service manager/service theme', u'').toString()) + self.settingsSection + u'/service theme', + QtCore.QVariant(u'')).toString()) self.servicePath = AppLocation.get_section_data_path(u'servicemanager') #build the context menu self.menu = QtGui.QMenu() @@ -402,8 +405,9 @@ class ServiceManager(QtGui.QWidget): """ Clear the list to create a new service """ - if self.parent.serviceNotSaved and \ - QtCore.QSettings().value(u'general/save prompt', False).toBool(): + if self.parent.serviceNotSaved and QtCore.QSettings().value( + self.generalSettingsSection + u'/save prompt', + QtCore.QVariant(False)).toBool(): ret = QtGui.QMessageBox.question(self, self.trUtf8('Save Changes to Service?'), self.trUtf8('Your service is unsaved, do you want to save ' @@ -487,17 +491,17 @@ class ServiceManager(QtGui.QWidget): if not quick or self.isNew: filename = QtGui.QFileDialog.getSaveFileName(self, self.trUtf8(u'Save Service'), - SettingsManager.get_last_dir(u'servicemanager'), + SettingsManager.get_last_dir(self.settingsSection), self.trUtf8(u'OpenLP Service Files (*.osz)')) else: - filename = SettingsManager.get_last_dir(u'servicemanager') + filename = SettingsManager.get_last_dir(self.settingsSection) if filename: splittedFile = filename.split(u'.') if splittedFile[-1] != u'osz': filename = filename + u'.osz' filename = unicode(filename) self.isNew = False - SettingsManager.set_last_dir(u'servicemanager', filename) + SettingsManager.set_last_dir(self.settingsSection, filename) service = [] servicefile = filename + u'.osd' zip = None @@ -538,11 +542,11 @@ class ServiceManager(QtGui.QWidget): def onLoadService(self, lastService=False): if lastService: - filename = SettingsManager.get_last_dir(u'servicemanager') + filename = SettingsManager.get_last_dir(self.settingsSection) else: filename = QtGui.QFileDialog.getOpenFileName( self, self.trUtf8('Open Service'), - SettingsManager.get_last_dir(u'servicemanager'), + SettingsManager.get_last_dir(self.settingsSection), u'Services (*.osz)') self.loadService(filename) @@ -572,7 +576,7 @@ class ServiceManager(QtGui.QWidget): filename = unicode(filename) name = filename.split(os.path.sep) if filename: - SettingsManager.set_last_dir(u'servicemanager', filename) + SettingsManager.set_last_dir(self.settingsSection, filename) zip = None f = None try: @@ -641,7 +645,7 @@ class ServiceManager(QtGui.QWidget): """ self.service_theme = unicode(self.ThemeComboBox.currentText()) self.parent.RenderManager.set_service_theme(self.service_theme) - QtCore.QSettings().setValue(u'servicemanager/service theme', + QtCore.QSettings().setValue(self.settingsSection + u'/service theme', QtCore.QVariant(self.service_theme)) self.regenerateServiceItems() @@ -724,7 +728,9 @@ class ServiceManager(QtGui.QWidget): item, count = self.findServiceItem() self.parent.LiveController.addServiceManagerItem( self.serviceItems[item][u'service_item'], count) - if QtCore.QSettings().value(u'general/auto preview', False).toBool(): + if QtCore.QSettings().value( + self.generalSettingsSection + u'/auto preview', + QtCore.QVariant(False)).toBool(): item += 1 if self.serviceItems and item < len(self.serviceItems) and \ self.serviceItems[item][u'service_item'].is_capable( diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 6ff739fc3..811fd51e3 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -93,6 +93,8 @@ class SlideController(QtGui.QWidget): """ QtGui.QWidget.__init__(self, parent) self.settingsmanager = settingsmanager + self.generalSettingsSection = u'general' + self.songsSettingsSection = u'songs' self.isLive = isLive self.parent = parent self.mainDisplay = self.parent.displayManager.mainDisplay @@ -396,8 +398,9 @@ class SlideController(QtGui.QWidget): self.Toolbar.makeWidgetsInvisible(self.loop_list) if item.is_text(): self.Toolbar.makeWidgetsInvisible(self.loop_list) - if QtCore.QSettings().value(u'songs/show songbar', True).toBool() \ - and len(self.slideList) > 0: + if QtCore.QSettings().value( + self.songsSettingsSection + u'/show songbar', + QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: self.Toolbar.makeWidgetsVisible([u'Song Menu']) if item.is_capable(ItemCapabilities.AllowsLoop) and \ len(item.get_frames()) > 1: @@ -585,7 +588,8 @@ class SlideController(QtGui.QWidget): if force: self.blankButton.setChecked(True) self.blankScreen(HideMode.Blank, self.blankButton.isChecked()) - QtCore.QSettings().setValue(u'general/screen blank', + QtCore.QSettings().setValue( + self.generalSettingsSection + u'/screen blank', QtCore.QVariant(self.blankButton.isChecked())) def onThemeDisplay(self, force=False): diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index a71e65210..797a6a27a 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -47,6 +47,7 @@ class ThemeManager(QtGui.QWidget): def __init__(self, parent): QtGui.QWidget.__init__(self, parent) self.parent = parent + self.settingsSection = u'themes' self.Layout = QtGui.QVBoxLayout(self) self.Layout.setSpacing(0) self.Layout.setMargin(0) @@ -105,14 +106,15 @@ class ThemeManager(QtGui.QWidget): QtCore.SIGNAL(u'theme_update_global'), self.changeGlobalFromTab) #Variables self.themelist = [] - self.path = AppLocation.get_section_data_path(u'themes') + self.path = AppLocation.get_section_data_path(self.settingsSection) self.checkThemesExists(self.path) self.thumbPath = os.path.join(self.path, u'.thumbnails') self.checkThemesExists(self.thumbPath) self.amendThemeForm.path = self.path # Last little bits of setting up self.global_theme = unicode(QtCore.QSettings().value( - u'themes/global theme', u'').toString()) + self.settingsSection + u'/global theme', + QtCore.QVariant(u'')).toString()) def changeGlobalFromTab(self, themeName): log.debug(u'changeGlobalFromTab %s', themeName) @@ -144,7 +146,8 @@ class ThemeManager(QtGui.QWidget): self.ThemeListWidget.item(count).text()) name = u'%s (%s)' % (self.global_theme, self.trUtf8('default')) self.ThemeListWidget.item(count).setText(name) - QtCore.QSettings().setValue(u'themes/global theme', + QtCore.QSettings().setValue( + self.settingsSection + u'/global theme', QtCore.QVariant(self.global_theme)) Receiver.send_message(u'theme_update_global', self.global_theme) self.pushThemes() @@ -167,7 +170,8 @@ class ThemeManager(QtGui.QWidget): def onDeleteTheme(self): self.global_theme = unicode(QtCore.QSettings().value( - u'themes/global theme', u'').toString()) + self.settingsSection + u'/global theme', + QtCore.QVariant(u'')).toString()) item = self.ThemeListWidget.currentItem() if item: theme = unicode(item.text()) @@ -220,10 +224,10 @@ class ThemeManager(QtGui.QWidget): theme = unicode(item.data(QtCore.Qt.UserRole).toString()) path = QtGui.QFileDialog.getExistingDirectory(self, unicode(self.trUtf8('Save Theme - (%s)')) % theme, - SettingsManager.get_last_dir(u'themes', 1)) + SettingsManager.get_last_dir(self.settingsSection, 1)) path = unicode(path) if path: - SettingsManager.set_last_dir(u'themes', path, 1) + SettingsManager.set_last_dir(self.settingsSection, path, 1) themePath = os.path.join(path, theme + u'.theme') zip = None try: @@ -232,7 +236,8 @@ class ThemeManager(QtGui.QWidget): for root, dirs, files in os.walk(source): for name in files: zip.write( - os.path.join(source, name), os.path.join(theme, name)) + os.path.join(source, name), + os.path.join(theme, name)) except: log.exception(u'Export Theme Failed') finally: @@ -242,11 +247,12 @@ class ThemeManager(QtGui.QWidget): def onImportTheme(self): files = QtGui.QFileDialog.getOpenFileNames( self, self.trUtf8('Select Theme Import File'), - SettingsManager.get_last_dir(u'themes'), u'Theme (*.*)') + SettingsManager.get_last_dir(self.settingsSection), u'Theme (*.*)') log.info(u'New Themes %s', unicode(files)) if files: for file in files: - SettingsManager.set_last_dir(u'themes', unicode(file)) + SettingsManager.set_last_dir( + self.settingsSection, unicode(file)) self.unzipTheme(file, self.path) self.loadThemes() diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index f3b5ec917..dba07eb6d 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -124,10 +124,12 @@ class ThemesTab(SettingsTab): def load(self): settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) self.theme_level = settings.value( - u'themes/theme level', ThemeLevel.Global).toInt()[0] + u'theme level', QtCore.QVariant(ThemeLevel.Global)).toInt()[0] self.global_theme = unicode(settings.value( - u'themes/global theme', u'').toString()) + u'global theme', QtCore.QVariant(u'')).toString()) + settings.endGroup() if self.theme_level == ThemeLevel.Global: self.GlobalLevelRadioButton.setChecked(True) elif self.theme_level == ThemeLevel.Service: @@ -137,10 +139,12 @@ class ThemesTab(SettingsTab): def save(self): settings = QtCore.QSettings() - settings.setValue(u'themes/theme level', + settings.beginGroup(self.settingsSection) + settings.setValue(u'theme level', QtCore.QVariant(self.theme_level)) - settings.setValue(u'themes/global theme', + settings.setValue(u'global theme', QtCore.QVariant(self.global_theme)) + settings.endGroup() Receiver.send_message(u'theme_update_global', self.global_theme) self.parent.RenderManager.set_global_theme( self.global_theme, self.theme_level) @@ -175,7 +179,8 @@ class ThemesTab(SettingsTab): """ #reload as may have been triggered by the ThemeManager self.global_theme = unicode(QtCore.QSettings().value( - u'themes/global theme', u'').toString()) + self.settingsSection + u'/global theme', + QtCore.QVariant(u'')).toString()) self.DefaultComboBox.clear() for theme in theme_list: self.DefaultComboBox.addItem(theme) @@ -194,4 +199,4 @@ class ThemesTab(SettingsTab): if not preview.isNull(): preview = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - self.DefaultListView.setPixmap(preview) \ No newline at end of file + self.DefaultListView.setPixmap(preview) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 659cb1ceb..0aaa31de3 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -124,11 +124,13 @@ def check_latest_version(current_version): """ version_string = current_version[u'full'] #set to prod in the distribution config file. - last_test = unicode(QtCore.QSettings().value(u'general/last version test', - datetime.now().date()).toString()) + settings = QtCore.QSettings() + settings.beginGroup(u'general') + last_test = unicode(settings.value(u'last version test', + QtCore.QVariant(datetime.now().date())).toString()) this_test = unicode(datetime.now().date()) - QtCore.QSettings().setValue( - u'general/last version test', QtCore.QVariant(this_test)) + settings.setValue(u'last version test', QtCore.QVariant(this_test)) + settings.endGroup() if last_test != this_test: version_string = u'' if current_version[u'build']: diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index a55523e4b..2ec2db506 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -84,7 +84,8 @@ class alertsPlugin(Plugin): def togglealertsState(self): self.alertsActive = not self.alertsActive QtCore.QSettings().setValue( - u'alerts/active', QtCore.QVariant(self.alertsActive)) + self.settings_section + u'/active', + QtCore.QVariant(self.alertsActive)) def onAlertsTrigger(self): self.alertForm.loadList() diff --git a/openlp/plugins/alerts/forms/alertstab.py b/openlp/plugins/alerts/forms/alertstab.py index 14066f7aa..7cda09488 100644 --- a/openlp/plugins/alerts/forms/alertstab.py +++ b/openlp/plugins/alerts/forms/alertstab.py @@ -229,15 +229,19 @@ class AlertsTab(SettingsTab): def load(self): settings = QtCore.QSettings() - self.timeout = settings.value(u'alerts/timeout', 5).toInt()[0] + settings.beginGroup(self.settingsSection) + self.timeout = settings.value(u'timeout', QtCore.QVariant(5)).toInt()[0] self.font_color = unicode(settings.value( - u'alerts/font color', u'#ffffff').toString()) - self.font_size = settings.value(u'alerts/font size', 40).toInt()[0] + u'font color', QtCore.QVariant(u'#ffffff')).toString()) + self.font_size = settings.value( + u'font size', QtCore.QVariant(40)).toInt()[0] self.bg_color = unicode(settings.value( - u'alerts/background color', u'#660000').toString()) + u'background color', QtCore.QVariant(u'#660000')).toString()) self.font_face = unicode(settings.value( - u'alerts/font face', QtGui.QFont().family()).toString()) - self.location = settings.value(u'alerts/location', 0).toInt()[0] + u'font face', QtCore.QVariant(QtGui.QFont().family())).toString()) + self.location = settings.value( + u'location', QtCore.QVariant(0)).toInt()[0] + settings.endGroup() self.FontSizeSpinBox.setValue(self.font_size) self.TimeoutSpinBox.setValue(self.timeout) self.FontColorButton.setStyleSheet( @@ -256,16 +260,16 @@ class AlertsTab(SettingsTab): def save(self): settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) self.font_face = self.FontComboBox.currentFont().family() - settings.setValue( - u'alerts/background color', QtCore.QVariant(self.bg_color)) - settings.setValue( - u'alerts/font color', QtCore.QVariant(self.font_color)) - settings.setValue(u'alerts/font size', QtCore.QVariant(self.font_size)) - settings.setValue(u'alerts/font face', QtCore.QVariant(self.font_face)) - settings.setValue(u'alerts/timeout', QtCore.QVariant(self.timeout)) - settings.setValue(u'alerts/location', + settings.setValue(u'background color', QtCore.QVariant(self.bg_color)) + settings.setValue(u'font color', QtCore.QVariant(self.font_color)) + settings.setValue(u'font size', QtCore.QVariant(self.font_size)) + settings.setValue(u'font face', QtCore.QVariant(self.font_face)) + settings.setValue(u'timeout', QtCore.QVariant(self.timeout)) + settings.setValue(u'location', QtCore.QVariant(self.LocationComboBox.currentIndex())) + settings.endGroup() def updateDisplay(self): font = QtGui.QFont() diff --git a/openlp/plugins/alerts/lib/manager.py b/openlp/plugins/alerts/lib/manager.py index 98a3d8a43..f82266f49 100644 --- a/openlp/plugins/alerts/lib/manager.py +++ b/openlp/plugins/alerts/lib/manager.py @@ -44,23 +44,24 @@ class DBManager(): Creates the connection to the database, and creates the tables if they don't exist. """ - settings = QtCore.QSettings() log.debug(u'Alerts Initialising') + settings = QtCore.QSettings() + settings.beginGroup(u'alerts') self.db_url = u'' db_type = unicode( - settings.value(u'alerts/db type', u'sqlite').toString()) + settings.value(u'db type', QtCore.QVariant(u'sqlite')).toString()) if db_type == u'sqlite': self.db_url = u'sqlite:///%s/alerts.sqlite' % \ AppLocation.get_section_data_path(u'alerts') else: - self.db_url = u'%s://%s:%s@%s/%s' % \ - (db_type, settings.value(u'alerts/db username'), - settings.value(u'alerts/db password'), - settings.value(u'alerts/db hostname'), - settings.value(u'alerts/db database')) + self.db_url = u'%s://%s:%s@%s/%s' % (db_type, + unicode(settings.value(u'db username').toString()), + unicode(settings.value(u'db password').toString()), + unicode(settings.value(u'db hostname').toString()), + unicode(settings.value(u'db database').toString())) + settings.endGroup() self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) - log.debug(u'Alerts Initialised') def get_all_alerts(self): diff --git a/openlp/plugins/bibles/forms/importwizardform.py b/openlp/plugins/bibles/forms/importwizardform.py index 41df18cdc..d3e8acd73 100644 --- a/openlp/plugins/bibles/forms/importwizardform.py +++ b/openlp/plugins/bibles/forms/importwizardform.py @@ -274,6 +274,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): def setDefaults(self): settings = QtCore.QSettings() + settings.beginGroup(self.bibleplugin.settings_section) self.setField(u'source_format', QtCore.QVariant(0)) self.setField(u'osis_location', QtCore.QVariant('')) self.setField(u'csv_booksfile', QtCore.QVariant('')) @@ -282,16 +283,17 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): self.setField(u'web_location', QtCore.QVariant(WebDownload.Crosswalk)) self.setField(u'web_biblename', QtCore.QVariant(self.BibleComboBox)) self.setField(u'proxy_server', - settings.value(u'bibles/proxy address', u'')) + settings.value(u'proxy address', QtCore.QVariant(u''))) self.setField(u'proxy_username', - settings.value(u'bibles/proxy username', u'')) + settings.value(u'proxy username', QtCore.QVariant(u''))) self.setField(u'proxy_password', - settings.value(u'proxy password', u'')) + settings.value(u'proxy password', QtCore.QVariant(u''))) self.setField(u'license_version', QtCore.QVariant(self.VersionNameEdit)) self.setField(u'license_copyright', QtCore.QVariant(self.CopyrightEdit)) self.setField(u'license_permission', QtCore.QVariant(self.PermissionEdit)) self.onLocationComboBoxChanged(WebDownload.Crosswalk) + settings.endGroup() def loadWebBibles(self): """ @@ -343,10 +345,11 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): def getFileName(self, title, editbox): filename = QtGui.QFileDialog.getOpenFileName(self, title, - SettingsManager.get_last_dir(bibles, 1)) + SettingsManager.get_last_dir(self.bibleplugin.settings_section, 1)) if filename: editbox.setText(filename) - SettingsManager.set_last_dir(bibles, filename, 1) + SettingsManager.set_last_dir( + self.bibleplugin.settings_section, filename, 1) def incrementProgressBar(self, status_text): log.debug(u'IncrementBar %s', status_text) diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 3965a0933..80e0cef5e 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -150,7 +150,8 @@ class BiblesTab(SettingsTab): def retranslateUi(self): self.VerseDisplayGroupBox.setTitle(self.trUtf8('Verse Display')) - self.NewChaptersCheckBox.setText(self.trUtf8('Only show new chapter numbers')) + self.NewChaptersCheckBox.setText( + self.trUtf8('Only show new chapter numbers')) self.LayoutStyleLabel.setText(self.trUtf8('Layout Style:')) self.DisplayStyleLabel.setText(self.trUtf8('Display Style:')) self.BibleThemeLabel.setText(self.trUtf8('Bible Theme:')) @@ -188,32 +189,35 @@ class BiblesTab(SettingsTab): def load(self): settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) self.show_new_chapters = settings.value( - u'bibles/display new chapter', False).toBool() + u'display new chapter', QtCore.QVariant(False)).toBool() self.display_style = settings.value( - u'bibles/display brackets', 0).toInt()[0] + u'display brackets', QtCore.QVariant(0)).toInt()[0] self.layout_style = settings.value( - u'bibles/verse layout style', 0).toInt()[0] + u'verse layout style', QtCore.QVariant(0)).toInt()[0] self.bible_theme = unicode( - settings.value(u'bibles/bible theme', u'').toString()) - self.duel_bibles = settings.value(u'bibles/dual bibles', True).toBool() + settings.value(u'bible theme', QtCore.QVariant(u'')).toString()) + self.duel_bibles = settings.value( + u'dual bibles', QtCore.QVariant(True)).toBool() self.NewChaptersCheckBox.setChecked(self.show_new_chapters) self.DisplayStyleComboBox.setCurrentIndex(self.display_style) self.LayoutStyleComboBox.setCurrentIndex(self.layout_style) self.BibleDualCheckBox.setChecked(self.duel_bibles) + settings.endGroup() def save(self): settings = QtCore.QSettings() - settings.setValue(u'bibles/display new chapter', + settings.beginGroup(self.settingsSection) + settings.setValue(u'display new chapter', QtCore.QVariant(self.show_new_chapters)) - settings.setValue(u'bibles/display brackets', + settings.setValue(u'display brackets', QtCore.QVariant(self.display_style)) - settings.setValue(u'bibles/verse layout style', + settings.setValue(u'verse layout style', QtCore.QVariant(self.layout_style)) - settings.setValue(u'bibles/dual bibles', - QtCore.QVariant(self.duel_bibles)) - settings.setValue(u'bibles/bible theme', - QtCore.QVariant(self.bible_theme)) + settings.setValue(u'dual bibles', QtCore.QVariant(self.duel_bibles)) + settings.setValue(u'bible theme', QtCore.QVariant(self.bible_theme)) + settings.endGroup() def updateThemeList(self, theme_list): """ @@ -229,4 +233,4 @@ class BiblesTab(SettingsTab): # Not Found id = 0 self.bible_theme = u'' - self.BibleThemeComboBox.setCurrentIndex(id) \ No newline at end of file + self.BibleThemeComboBox.setCurrentIndex(id) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 0d2422a8d..c95884693 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -74,17 +74,19 @@ class BibleDB(QtCore.QObject): self.db_file = os.path.join(kwargs[u'path'], self.file) log.debug(u'Load bible %s on path %s', self.file, self.db_file) settings = QtCore.QSettings() + settings.beginGroup(u'bibles') db_type = unicode( - settings.value(u'bibles/db type', u'sqlite').toString()) + settings.value(u'db type', QtCore.QVariant(u'sqlite')).toString()) db_url = u'' if db_type == u'sqlite': db_url = u'sqlite:///' + self.db_file else: db_url = u'%s://%s:%s@%s/%s' % (db_type, - unicode(settings.value(u'bibles/db username').toString()), - unicode(settings.value(u'bibles/db password').toString()), - unicode(settings.value(u'bibles/db hostname').toString()), - unicode(settings.value(u'bibles/db database').toString())) + unicode(settings.value(u'db username').toString()), + unicode(settings.value(u'db password').toString()), + unicode(settings.value(u'db hostname').toString()), + unicode(settings.value(u'db database').toString())) + settings.endGroup() self.metadata, self.session = init_models(db_url) self.metadata.create_all(checkfirst=True) if u'file' in kwargs: diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 1f962be90..d8fe3e156 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -109,11 +109,13 @@ class BibleManager(object): """ log.debug(u'Bible Initialising') self.parent = parent + self.settings_section = u'bibles' self.web = u'Web' self.db_cache = None - self.path = AppLocation.get_section_data_path(u'bibles') + self.path = AppLocation.get_section_data_path(self.settings_section) self.proxy_name = unicode( - QtCore.QSettings().value(u'bibles/proxy name', u'').toString()) + QtCore.QSettings().value(self.settings_section + u'/proxy name', + QtCore.QVariant(u'')).toString()) self.suffix = u'.sqlite' self.import_wizard = None self.reload_bibles() @@ -126,7 +128,7 @@ class BibleManager(object): BibleDB class. """ log.debug(u'Reload bibles') - files = SettingsManager.get_files(u'bibles', self.suffix) + files = SettingsManager.get_files(self.settings_section, self.suffix) log.debug(u'Bible Files %s', files) self.db_cache = {} for filename in files: @@ -137,7 +139,8 @@ class BibleManager(object): # look to see if lazy load bible exists and get create getter. source = self.db_cache[name].get_meta(u'download source') if source: - download_name = self.db_cache[name].get_meta(u'download name').value + download_name = \ + self.db_cache[name].get_meta(u'download name').value meta_proxy = self.db_cache[name].get_meta(u'proxy url') web_bible = HTTPBible(self.parent, path=self.path, file=filename, download_source=source.value, @@ -208,7 +211,8 @@ class BibleManager(object): Returns all the number of verses for a given book and chapterMaxBibleBookVerses """ - log.debug(u'BibleManager.get_verse_count("%s", "%s", %s)', bible, book, chapter) + log.debug(u'BibleManager.get_verse_count("%s", "%s", %s)', + bible, book, chapter) return self.db_cache[bible].get_verse_count(book, chapter) def get_verses(self, bible, versetext): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index afdd89e3e..c448e5066 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -54,7 +54,7 @@ class BibleMediaItem(MediaManagerItem): def __init__(self, parent, icon, title): self.PluginNameShort = u'Bible' - self.ConfigSection = title + self.SettingsSection = title.lower() self.IconPath = u'songs/song' self.ListViewWithDnD_class = BibleListView self.lastReference = [] @@ -276,7 +276,8 @@ class BibleMediaItem(MediaManagerItem): self.SearchProgress.setObjectName(u'SearchProgress') def configUpdated(self): - if QtCore.QSettings().value(u'bibles/dual bibles', False).toBool(): + if QtCore.QSettings().value(self.SettingsSection + u'/dual bibles', + QtCore.QVariant(False)).toBool(): self.AdvancedSecondBibleLabel.setVisible(True) self.AdvancedSecondBibleComboBox.setVisible(True) self.QuickSecondVersionLabel.setVisible(True) diff --git a/openlp/plugins/custom/lib/customtab.py b/openlp/plugins/custom/lib/customtab.py index 5470c64d0..2b6cedfbf 100644 --- a/openlp/plugins/custom/lib/customtab.py +++ b/openlp/plugins/custom/lib/customtab.py @@ -67,9 +67,10 @@ class CustomTab(SettingsTab): def load(self): self.displayFooter = QtCore.QSettings().value( - u'custom/display footer', True).toBool() + self.settingsSection + u'/display footer', + QtCore.QVariant(True)).toBool() self.DisplayFooterCheckBox.setChecked(self.displayFooter) def save(self): - QtCore.QSettings().setValue( - u'custom/display footer', QtCore.QVariant(self.displayFooter)) + QtCore.QSettings().setValue(self.settingsSection + u'/display footer', + QtCore.QVariant(self.displayFooter)) diff --git a/openlp/plugins/custom/lib/manager.py b/openlp/plugins/custom/lib/manager.py index c9555e63a..9e781f560 100644 --- a/openlp/plugins/custom/lib/manager.py +++ b/openlp/plugins/custom/lib/manager.py @@ -46,21 +46,22 @@ class CustomManager(): """ log.debug(u'Custom Initialising') settings = QtCore.QSettings() + settings.beginGroup(u'custom') self.db_url = u'' db_type = unicode( - settings.value(u'custom/db type', u'sqlite').toString()) + settings.value(u'db type', QtCore.QVariant(u'sqlite')).toString()) if db_type == u'sqlite': self.db_url = u'sqlite:///%s/custom.sqlite' % \ AppLocation.get_section_data_path(u'custom') else: self.db_url = u'%s://%s:%s@%s/%s' % (db_type, - unicode(settings.value(u'custom/db username').toString()), - unicode(settings.value(u'custom/db password').toString()), - unicode(settings.value(u'custom/db hostname').toString()), - unicode(settings.value(u'custom/db database').toString())) + unicode(settings.value(u'db username').toString()), + unicode(settings.value(u'db password').toString()), + unicode(settings.value(u'db hostname').toString()), + unicode(settings.value(u'db database').toString())) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) - + settings.endGroup() log.debug(u'Custom Initialised') def get_all_slides(self): diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index aa82eb452..c1f4ff1e6 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -45,7 +45,7 @@ class CustomMediaItem(MediaManagerItem): def __init__(self, parent, icon, title): self.PluginNameShort = u'Custom' - self.ConfigSection = title + self.SettingsSection = title.lower() self.IconPath = u'custom/custom' # this next is a class, not an instance of a class - it will # be instanced by the base MediaManagerItem @@ -133,7 +133,7 @@ class CustomMediaItem(MediaManagerItem): self.ListView.takeItem(row) def generateSlideData(self, service_item, item=None): - raw_slides =[] + raw_slides = [] raw_footer = [] slide = None theme = None @@ -164,8 +164,8 @@ class CustomMediaItem(MediaManagerItem): service_item.title = title for slide in raw_slides: service_item.add_from_text(slide[:30], slide) - if QtCore.QSettings().value(u'custom/display footer', True).toBool() \ - or credit: + if QtCore.QSettings().value(self.SettingsSection + u'/display footer', + QtCore.QVariant(True)).toBool() or credit: raw_footer.append(title + u' ' + credit) else: raw_footer.append(u'') diff --git a/openlp/plugins/images/lib/imagetab.py b/openlp/plugins/images/lib/imagetab.py index f7bdb3106..346d28b16 100644 --- a/openlp/plugins/images/lib/imagetab.py +++ b/openlp/plugins/images/lib/imagetab.py @@ -72,12 +72,13 @@ class ImageTab(SettingsTab): def load(self): self.loop_delay = QtCore.QSettings().value( - u'images/loop delay', 5).toInt()[0] + self.settingsSection + u'/loop delay', + QtCore.QVariant(5)).toInt()[0] self.TimeoutSpinBox.setValue(self.loop_delay) def save(self): - QtCore.QSettings().setValue( - u'images/loop delay', QtCore.QVariant(self.loop_delay)) + QtCore.QSettings().setValue(self.settingsSection + u'/loop delay', + QtCore.QVariant(self.loop_delay)) Receiver.send_message(u'slidecontroller_live_spin_delay', self.loop_delay) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 7b104136c..32ed5edb6 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -49,7 +49,7 @@ class ImageMediaItem(MediaManagerItem): def __init__(self, parent, icon, title): self.PluginNameShort = u'Image' - self.ConfigSection = title + self.SettingsSection = title.lower() self.IconPath = u'images/image' # this next is a class, not an instance of a class - it will # be instanced by the base MediaManagerItem @@ -61,8 +61,8 @@ class ImageMediaItem(MediaManagerItem): def retranslateUi(self): self.OnNewPrompt = self.trUtf8('Select Image(s)') - self.OnNewFileMasks = \ - self.trUtf8('Images (*.jpg *.jpeg *.gif *.png *.bmp);; All files (*)') + self.OnNewFileMasks = self.trUtf8( + 'Images (*.jpg *.jpeg *.gif *.png *.bmp);; All files (*)') def requiredIcons(self): MediaManagerItem.requiredIcons(self) @@ -78,12 +78,12 @@ class ImageMediaItem(MediaManagerItem): QtGui.QAbstractItemView.ExtendedSelection) self.ListView.setIconSize(QtCore.QSize(88,50)) self.servicePath = os.path.join( - AppLocation.get_section_data_path(self.ConfigSection), + AppLocation.get_section_data_path(self.SettingsSection), u'.thumbnails') if not os.path.exists(self.servicePath): os.mkdir(self.servicePath) self.loadList(SettingsManager.load_list( - self.ConfigSection, self.ConfigSection)) + self.SettingsSection, self.SettingsSection)) def addListViewToToolBar(self): MediaManagerItem.addListViewToToolBar(self) @@ -122,7 +122,8 @@ class ImageMediaItem(MediaManagerItem): #if not present do not worry pass self.ListView.takeItem(item.row()) - SettingsManager.set_list(self.ConfigSection, self.getFileList()) + SettingsManager.set_list( + self.SettingsSection, self.getFileList()) def loadList(self, list): for file in list: diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 9342708f4..f594fe54c 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -47,7 +47,7 @@ class MediaMediaItem(MediaManagerItem): def __init__(self, parent, icon, title): self.PluginNameShort = u'Media' self.IconPath = u'images/image' - self.ConfigSection = title + self.SettingsSection = title.lower() # this next is a class, not an instance of a class - it will # be instanced by the base MediaManagerItem self.ListViewWithDnD_class = MediaListView @@ -90,14 +90,14 @@ class MediaMediaItem(MediaManagerItem): QtGui.QAbstractItemView.ExtendedSelection) self.ListView.setIconSize(QtCore.QSize(88,50)) self.loadList(SettingsManager.load_list( - self.ConfigSection, self.ConfigSection)) + self.SettingsSection, self.SettingsSection)) def onDeleteClick(self): item = self.ListView.currentItem() if item: row = self.ListView.row(item) self.ListView.takeItem(row) - SettingsManager.set_list(self.ConfigSection, self.getFileList()) + SettingsManager.set_list(self.SettingsSection, self.getFileList()) def loadList(self, list): for file in list: @@ -106,4 +106,4 @@ class MediaMediaItem(MediaManagerItem): img = QtGui.QPixmap(u':/media/media_video.png').toImage() item_name.setIcon(build_icon(img)) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) - self.ListView.addItem(item_name) \ No newline at end of file + self.ListView.addItem(item_name) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 900af71b6..f547f0633 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -52,7 +52,7 @@ class PresentationMediaItem(MediaManagerItem): def __init__(self, parent, icon, title, controllers): self.controllers = controllers self.PluginNameShort = u'Presentation' - self.ConfigSection = title + self.SettingsSection = title.lower() self.IconPath = u'presentations/presentation' self.Automatic = u'' # this next is a class, not an instance of a class - it will @@ -107,11 +107,11 @@ class PresentationMediaItem(MediaManagerItem): def initialise(self): self.servicePath = os.path.join( - AppLocation.get_section_data_path(self.ConfigSection), + AppLocation.get_section_data_path(self.SettingsSection), u'thumbnails') if not os.path.exists(self.servicePath): os.mkdir(self.servicePath) - list = SettingsManager.load_list(self.ConfigSection, u'presentations') + list = SettingsManager.load_list(self.SettingsSection, u'presentations') self.loadList(list) for item in self.controllers: #load the drop down selection @@ -139,11 +139,11 @@ class PresentationMediaItem(MediaManagerItem): icon = None for controller in self.controllers: thumbPath = os.path.join( - AppLocation.get_section_data_path(self.ConfigSection), + AppLocation.get_section_data_path(self.SettingsSection), u'thumbnails', controller, filename) thumb = os.path.join(thumbPath, u'slide1.png') preview = os.path.join( - AppLocation.get_section_data_path(self.ConfigSection), + AppLocation.get_section_data_path(self.SettingsSection), controller, u'thumbnails', filename, u'slide1.png') if os.path.exists(preview): if os.path.exists(thumb): @@ -167,7 +167,7 @@ class PresentationMediaItem(MediaManagerItem): if item: row = self.ListView.row(item) self.ListView.takeItem(row) - SettingsManager.set_list(self.ConfigSection, self.getFileList()) + SettingsManager.set_list(self.SettingsSection, self.getFileList()) filepath = unicode((item.data(QtCore.Qt.UserRole)).toString()) #not sure of this has errors #John please can you look at . diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index 8e5d797da..fa6e9474d 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -100,14 +100,16 @@ class PresentationController(object): self.docs = [] self.plugin = plugin self.name = name + self.settings_section = self.plugin.settings_section self.available = self.check_available() if self.available: - self.enabled = QtCore.QSettings().value(u'presentations/' + name, + self.enabled = QtCore.QSettings().value( + self.settings_section + u'/' + name, QtCore.Qt.Unchecked).toInt()[0] == QtCore.Qt.Checked else: self.enabled = False self.thumbnailroot = os.path.join( - AppLocation.get_section_data_path(u'presentations'), + AppLocation.get_section_data_path(self.settings_section), name, u'thumbnails') self.thumbnailprefix = u'slide' if not os.path.isdir(self.thumbnailroot): diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index 4c1b41813..ebcbb3d7b 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -101,11 +101,13 @@ class PresentationTab(SettingsTab): if controller.available: checkbox = self.PresenterCheckboxes[controller.name] checkbox.setChecked(QtCore.QSettings().value( - u'presentations/' + controller.name, 0).toInt()[0]) + self.settingsSection + u'/' + controller.name, + QtCore.QVariant(0)).toInt()[0]) def save(self): for key in self.controllers: controller = self.controllers[key] checkbox = self.PresenterCheckboxes[controller.name] - QtCore.QSettings().setValue(u'presentations/' + controller.name, + QtCore.QSettings().setValue( + self.settingsSection + u'/' + controller.name, QtCore.QVariant(checkbox.checkState())) diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 7096ee302..abdda065f 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -57,8 +57,9 @@ class RemoteTab(SettingsTab): def load(self): self.RemotePortSpinBox.setValue( - QtCore.QSettings().value(u'remotes/remote port', 4316).toInt()[0]) + QtCore.QSettings().value(self.settingsSection + u'/remote port', + QtCore.QVariant(4316)).toInt()[0]) def save(self): - QtCore.QSettings().setValue(u'remotes/remote port', + QtCore.QSettings().setValue(self.settingsSection + u'/remote port', QtCore.QVariant(self.RemotePortSpinBox.value())) diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index 3ceb6d1f8..8bc91c824 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -46,7 +46,8 @@ class RemotesPlugin(Plugin): self.insert_toolbox_item() self.server = QtNetwork.QUdpSocket() self.server.bind( - QtCore.QSettings().value(u'remotes/remote port', 4316).toInt()[0]) + QtCore.QSettings().value(self.settings_section + u'/remote port', + QtCore.QVariant(4316)).toInt()[0]) QtCore.QObject.connect(self.server, QtCore.SIGNAL(u'readyRead()'), self.readData) diff --git a/openlp/plugins/songs/lib/manager.py b/openlp/plugins/songs/lib/manager.py index 5264a58ed..ff9231fe2 100644 --- a/openlp/plugins/songs/lib/manager.py +++ b/openlp/plugins/songs/lib/manager.py @@ -47,6 +47,7 @@ class SongManager(): """ log.debug(u'Song Initialising') settings = QtCore.QSettings() + settings.beginGroup(u'songs') self.db_url = u'' db_type = unicode( settings.value(u'songs/db type', u'sqlite').toString()) @@ -54,17 +55,18 @@ class SongManager(): self.db_url = u'sqlite:///%s/songs.sqlite' % \ AppLocation.get_section_data_path(u'songs') else: - self.db_url = db_type + 'u://' + \ + self.db_url = u'%s://%s:%s@%s/%s' % (db_type, unicode(settings.value( - u'songs/db username', u'').toString()) + u':' + \ + u'db username', QtCore.QVariant(u'')).toString()), unicode(settings.value( - u'songs/db password', u'').toString()) + u'@' + \ + u'db password', QtCore.QVariant(u'')).toString()), unicode(settings.value( - u'songs/db hostname', u'').toString()) + u'/' + \ + u'db hostname', QtCore.QVariant(u'')).toString()), unicode(settings.value( - u'songs/db database', u'').toString()) + u'db database', QtCore.QVariant(u'')).toString())) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) + settings.endGroup() log.debug(u'Song Initialised') def get_songs(self): diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 24ef71e81..84af7e6d0 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -46,7 +46,7 @@ class SongMediaItem(MediaManagerItem): def __init__(self, parent, icon, title): self.PluginNameShort = u'Song' - self.ConfigSection = title + self.SettingsSection = title.lower() self.IconPath = u'songs/song' self.ListViewWithDnD_class = SongListView MediaManagerItem.__init__(self, parent, icon, title) @@ -134,7 +134,8 @@ class SongMediaItem(MediaManagerItem): def configUpdated(self): self.searchAsYouType = QtCore.QSettings().value( - u'songs/search as type', u'False').toBool() + self.SettingsSection + u'/search as type', + QtCore.QVariant(u'False')).toBool() def retranslateUi(self): self.SearchTextLabel.setText(self.trUtf8('Search:')) diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index 8b9f6804d..38bdd791d 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -81,15 +81,18 @@ class SongsTab(SettingsTab): def load(self): settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) self.song_search = settings.value( - u'songs/search as type', False).toBool() - self.song_bar = settings.value(u'songs/display songbar', True).toBool() + u'search as type', QtCore.QVariant(False)).toBool() + self.song_bar = settings.value( + u'display songbar', QtCore.QVariant(True)).toBool() self.SearchAsTypeCheckBox.setChecked(self.song_search) self.SongBarActiveCheckBox.setChecked(self.song_bar) + settings.endGroup() def save(self): settings = QtCore.QSettings() - settings.setValue( - u'songs/search as type', QtCore.QVariant(self.song_search)) - settings.setValue( - u'songs/display songbar', QtCore.QVariant(self.song_bar)) + settings.beginGroup(self.settingsSection) + settings.setValue(u'search as type', QtCore.QVariant(self.song_search)) + settings.setValue(u'display songbar', QtCore.QVariant(self.song_bar)) + settings.endGroup() diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index e4ec80d58..97359807f 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -45,6 +45,7 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): """ QtGui.QDialog.__init__(self, None) self.parent = parent + self.settingsSection = u'songusage' self.setupUi(self) def initialise(self): @@ -55,15 +56,16 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): fromDate = QtCore.QDate(year - 1, 9, 1) self.FromDate.setSelectedDate(fromDate) self.ToDate.setSelectedDate(toDate) - self.FileLineEdit.setText(SettingsManager.get_last_dir(u'songusage', 1)) + self.FileLineEdit.setText( + SettingsManager.get_last_dir(self.settingsSection, 1)) def defineOutputLocation(self): path = QtGui.QFileDialog.getExistingDirectory(self, self.trUtf8('Output File Location'), - SettingsManager.get_last_dir(u'songusage', 1)) + SettingsManager.get_last_dir(self.settingsSection, 1)) path = unicode(path) if path != u'': - SettingsManager.set_last_dir(u'songusage', path, 1) + SettingsManager.set_last_dir(self.settingsSection, path, 1) self.FileLineEdit.setText(path) def accept(self): @@ -88,4 +90,3 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): finally: if file: file.close() - diff --git a/openlp/plugins/songusage/lib/manager.py b/openlp/plugins/songusage/lib/manager.py index d307f9dd5..e8816b552 100644 --- a/openlp/plugins/songusage/lib/manager.py +++ b/openlp/plugins/songusage/lib/manager.py @@ -45,27 +45,28 @@ class SongUsageManager(): Creates the connection to the database, and creates the tables if they don't exist. """ - settings = QtCore.QSettings() log.debug(u'SongUsage Initialising') + settings = QtCore.QSettings() + settings.beginGroup(u'songusage') self.db_url = u'' db_type = unicode( - settings.value(u'songusage/db type', u'sqlite').toString()) + settings.value(u'db type', QtCore.QVariant(u'sqlite')).toString()) if db_type == u'sqlite': self.db_url = u'sqlite:///%s/songusage.sqlite' % \ AppLocation.get_section_data_path(u'songusage') else: self.db_url = u'%s://%s:%s@%s/%s' % (db_type, - unicode( - settings.value(u'songusage/db username', u'').toString()), - unicode( - settings.value(u'songusage/db password', u'').toString()), - unicode( - settings.value(u'songusage/db hostname', u'').toString()), - unicode( - settings.value(u'songusage/db database', u'').toString())) + unicode(settings.value(u'db username', + QtCore.QVariant(u'')).toString()), + unicode(settings.value(u'db password', + QtCore.QVariant(u'')).toString()), + unicode(settings.value(u'db hostname', + QtCore.QVariant(u'')).toString()), + unicode(settings.value(u'db database', + QtCore.QVariant(u'')).toString())) self.session = init_models(self.db_url) metadata.create_all(checkfirst=True) - + settings.endGroup() log.debug(u'SongUsage Initialised') def get_all_songusage(self, start_date, end_date): diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index c654477e0..da557e81e 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -111,7 +111,8 @@ class SongUsagePlugin(Plugin): QtCore.SIGNAL(u'slidecontroller_live_started'), self.onReceiveSongUsage) self.SongUsageActive = QtCore.QSettings().value( - u'songusage/active', False).toBool() + self.settings_section + u'/active', + QtCore.QVariant(False)).toBool() self.SongUsageStatus.setChecked(self.SongUsageActive) if self.songusagemanager is None: self.songusagemanager = SongUsageManager() @@ -127,8 +128,8 @@ class SongUsagePlugin(Plugin): def toggleSongUsageState(self): self.SongUsageActive = not self.SongUsageActive - QtCore.QSettings().setValue( - u'songusage/active', QtCore.QVariant(self.SongUsageActive)) + QtCore.QSettings().setValue(self.settings_section + u'/active', + QtCore.QVariant(self.SongUsageActive)) def onReceiveSongUsage(self, items): """