From 68c1c86ac5acfcc571e93a5574e936b269447883 Mon Sep 17 00:00:00 2001 From: Matthias Hub Date: Wed, 13 Jul 2011 22:41:54 +0200 Subject: [PATCH 01/64] - fixed view adjustments for os x 10.6 - added compatibility with the file extension on os x - started to work on the "open with" file event on os x --- openlp.pyw | 23 +++++ resources/osx/Info.plist.master | 93 ++++++++++++++++++ .../osx/applescript-adjustview-10-5.master | 2 +- .../osx/applescript-adjustview-10-6.master | 14 ++- resources/osx/build.py | 12 ++- resources/osx/openlp-logo-with-text.icns | Bin resources/osx/openlp.spec.master | 2 +- 7 files changed, 135 insertions(+), 11 deletions(-) mode change 100755 => 100644 resources/osx/openlp-logo-with-text.icns diff --git a/openlp.pyw b/openlp.pyw index a39f6cf65..d1627a8a6 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -90,6 +90,7 @@ class OpenLP(QtGui.QApplication): """ Run the OpenLP application. """ + self.eventQueue = [] # On Windows, the args passed into the constructor are # ignored. Not very handy, so set the ones we want to use. self.args = args @@ -135,6 +136,9 @@ class OpenLP(QtGui.QApplication): VersionThread(self.mainWindow).start() Receiver.send_message(u'maindisplay_blank_check') self.mainWindow.appStartup() + # do a check for queued events + for e in self.eventQueue: + self.event(e) DelayStartThread(self.mainWindow).start() return self.exec_() @@ -180,6 +184,25 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() + def event(self, event): + """ + Enables direct file opening on OS X + """ + if event.type() == QtCore.QEvent.FileOpen: + file_name = event.file() + log.debug(u'Got open file event for %s!', file_name) + log.error(file_name) + try: + self.mainWindow.serviceManagerContents.loadFile(file_name) + return True + except AttributeError, NameError: + log.debug(u'The main window is not initialized yet,\ + will queue event!') + self.eventQueue.append(event) + return False + else: + return QtGui.QApplication.event(self, event) + def main(): """ The main function which parses command line options and then runs diff --git a/resources/osx/Info.plist.master b/resources/osx/Info.plist.master index 45aab92a5..5fc3aa48f 100755 --- a/resources/osx/Info.plist.master +++ b/resources/osx/Info.plist.master @@ -2,6 +2,99 @@ + + CFBundleDocumentTypes + + + CFBundleTypeExtension + + osz + + CFBundleTypeIconFiles + + openlp-logo-with-text.icns + + CFBundleTypeName + OpenLP Service + CFBundleTypeRole + Viewer + LSHandlerRank + Owner + LSItemContentTypes + + org.openlp.osz + + + + CFBundleTypeExtension + + otz + + CFBundleTypeIconFiles + + openlp-logo-with-text.icns + + CFBundleTypeName + OpenLP Theme + CFBundleTypeRole + Viewer + LSHandlerRank + Owner + LSItemContentTypes + + org.openlp.otz + + + + + UTExportedTypeDeclarations + + + UTTypeIdentifier + org.openlp.osz + UTTypeDescription + OpenLP Service + UTTypeConformsTo + + public.data + public.content + + UTTypeTagSpecification + + public.filename-extension + + osz + + public.mime-type + + application/x-openlp-service + + + + + UTTypeIdentifier + org.openlp.otz + UTTypeDescription + OpenLP Theme + UTTypeConformsTo + + public.data + public.content + + UTTypeTagSpecification + + public.filename-extension + + otz + + public.mime-type + + application/x-openlp-theme + + + + + CFBundleIdentifier org.openlp CFBundleShortVersionString diff --git a/resources/osx/applescript-adjustview-10-5.master b/resources/osx/applescript-adjustview-10-5.master index abc0e5a8d..19be239d0 100755 --- a/resources/osx/applescript-adjustview-10-5.master +++ b/resources/osx/applescript-adjustview-10-5.master @@ -48,7 +48,7 @@ on run set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 128 - set background picture of theViewOptions to file ".installer-background.png" + set background picture of theViewOptions to file ".background:installer-background.png" if not exists file "Applications" then make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} end if diff --git a/resources/osx/applescript-adjustview-10-6.master b/resources/osx/applescript-adjustview-10-6.master index 2b5a0c000..170842564 100755 --- a/resources/osx/applescript-adjustview-10-6.master +++ b/resources/osx/applescript-adjustview-10-6.master @@ -49,15 +49,19 @@ on run set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 128 - set background picture of theViewOptions to file ".installer-background.png" - make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} - delay 5 + set background picture of theViewOptions to file ".background:installer-background.png" + if not exists file "Applications" then + make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} + end if + delay 1 set position of item "%s" of container window to {160, 200} set position of item ".Trashes" of container window to {100, 500} - set position of item ".installer-background.png" of container window to {200, 500} + set position of item ".background" of container window to {200, 500} set position of item ".DS_Store" of container window to {400, 500} set position of item "Applications" of container window to {550, 200} - set position of item ".VolumeIcon.icns" of container window to {500, 500} + if exists file ".VolumeIcon.icns" then + set position of item ".VolumeIcon.icns" of container window to {500, 500} + end if set position of item ".fseventsd" of container window to {300, 500} if exists POSIX file ".SymAVx86QSFile" then set position of item ".SymAVx86QSFile" of container window to {600, 500} diff --git a/resources/osx/build.py b/resources/osx/build.py index ff7f6bdfd..38e56e42a 100644 --- a/resources/osx/build.py +++ b/resources/osx/build.py @@ -93,8 +93,12 @@ script_name = "build" def build_application(settings, app_name_lower, app_dir): logging.info('[%s] now building the app with pyinstaller at "%s"...', script_name, settings['pyinstaller_basedir']) - result = os.system('python %s/pyinstaller.py openlp.spec' \ - % settings['pyinstaller_basedir']) + full_python_dir = os.path.join('/opt/local/Library/Frameworks', + 'Python.framework/Versions/2.6/Resources/', + 'Python.app/Contents/MacOS/Python') + result = os.system('arch -i386 %s %s/pyinstaller.py openlp.spec' \ + % ( full_python_dir, + settings['pyinstaller_basedir']) ) if (result != 0): logging.error('[%s] The pyinstaller build reported an error, cannot \ continue!', script_name) @@ -219,10 +223,10 @@ def create_dmg(settings): sys.exit(1) logging.info('[%s] copying the background image...', script_name) - # os.mkdir(volume_basedir + '/.background') + os.mkdir(volume_basedir + '/.background') result = os.system('CpMac %s %s' % (settings['installer_backgroundimage_file'], - volume_basedir + '/.installer-background.png')) + volume_basedir + '/.background/installer-background.png')) if (result != 0): logging.error('[%s] could not copy the background image, dmg creation\ failed!', script_name) diff --git a/resources/osx/openlp-logo-with-text.icns b/resources/osx/openlp-logo-with-text.icns old mode 100755 new mode 100644 diff --git a/resources/osx/openlp.spec.master b/resources/osx/openlp.spec.master index 94aec2a60..eb743c40b 100755 --- a/resources/osx/openlp.spec.master +++ b/resources/osx/openlp.spec.master @@ -1,5 +1,5 @@ # -*- mode: python -*- -a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(HOMEPATH,'support/useUnicode.py'), '%(openlp_basedir)s/openlp.pyw'], +a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(CONFIGDIR,'support/useUnicode.py'), '%(openlp_basedir)s/openlp.pyw'], pathex=['%(pyinstaller_basedir)s'], hookspath=['%(openlp_basedir)s/resources/pyinstaller']) pyz = PYZ(a.pure) exe = EXE(pyz, From b15fd4df49ca1154717c12d1534c8eb742ee7c1f Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Fri, 22 Jul 2011 09:39:49 -0400 Subject: [PATCH 02/64] modified mainwondow.py to allow first time wizard to be re-run --- openlp/core/ui/mainwindow.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c88508672..4fce23164 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -244,6 +244,9 @@ class Ui_MainWindow(object): self.toolsOpenDataFolder = icon_action(mainWindow, u'toolsOpenDataFolder', u':/general/general_open.png', category=UiStrings().Tools) + self.toolsFirstTimeWizard = icon_action(mainWindow, + u'toolsFirstTimeWizard', u':/general/general_revert.png', + category=UiStrings().Tools) self.updateThemeImages = base_action(mainWindow, u'updateThemeImages', category=UiStrings().Tools) action_list.add_category(UiStrings().Settings, @@ -323,6 +326,7 @@ class Ui_MainWindow(object): self.settingsConfigureItem)) add_actions(self.toolsMenu, (self.toolsAddToolItem, None)) add_actions(self.toolsMenu, (self.toolsOpenDataFolder, None)) + add_actions(self.toolsMenu, (self.toolsFirstTimeWizard, None)) add_actions(self.toolsMenu, [self.updateThemeImages]) if os.name == u'nt': add_actions(self.helpMenu, (self.offlineHelpItem, @@ -469,6 +473,8 @@ class Ui_MainWindow(object): 'Add an application to the list of tools.')) self.toolsOpenDataFolder.setText( translate('OpenLP.MainWindow', 'Open &Data Folder...')) + self.toolsFirstTimeWizard.setText( + translate('OpenLP.MainWindow', 'Run First Time Wizard')) self.toolsOpenDataFolder.setStatusTip(translate('OpenLP.MainWindow', 'Open the folder where songs, bibles and other data resides.')) self.updateThemeImages.setText( @@ -546,6 +552,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'triggered()'), self.onHelpWebSiteClicked) QtCore.QObject.connect(self.toolsOpenDataFolder, QtCore.SIGNAL(u'triggered()'), self.onToolsOpenDataFolderClicked) + QtCore.QObject.connect(self.toolsFirstTimeWizard, + QtCore.SIGNAL(u'triggered()'), self.onFirstTimeWizardClicked) QtCore.QObject.connect(self.updateThemeImages, QtCore.SIGNAL(u'triggered()'), self.onUpdateThemeImages) QtCore.QObject.connect(self.displayTagItem, @@ -714,6 +722,20 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): delete_file(os.path.join(temp_dir, filename)) os.removedirs(temp_dir) + def onFirstTimeWizardClicked(self): + ret = QtGui.QMessageBox.information(self, + translate('OpenLP.MainWindow', 'Restart OpenLP'), + translate('OpenLP.MainWindow', + 'OpenLP will now restart. The First Time Wizard will run when ' + + 'OpenLP is restarted'), + QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok), + QtGui.QMessageBox.Ok) + QtCore.QSettings().setValue(u'general/has run wizard', + QtCore.QVariant(False)) + self.close() + OpenLP_exe = sys.executable + os.execl(OpenLP_exe, OpenLP_exe, * sys.argv) + def blankCheck(self): """ Check and display message if screen blank on setup. From f7a222da6c300883897db24c2b0b56adc039d49a Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Sat, 23 Jul 2011 08:52:43 -0400 Subject: [PATCH 03/64] modified mainwindow.py code to make first time wizard re-run inline code --- openlp/core/ui/firsttimeform.py | 1 + openlp/core/ui/mainwindow.py | 30 +++++++++++++++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 8ffd87bcf..e5d434180 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -129,6 +129,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): os.path.join(gettempdir(), u'openlp', screenshot))) item.setCheckState(QtCore.Qt.Unchecked) item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) + Receiver.send_message(u'cursor_normal') def nextId(self): """ diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 4fce23164..2e44f26da 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -33,7 +33,7 @@ from tempfile import gettempdir from PyQt4 import QtCore, QtGui from openlp.core.lib import Renderer, build_icon, OpenLPDockWidget, \ - PluginManager, Receiver, translate, ImageManager + PluginManager, Receiver, translate, ImageManager, PluginStatus from openlp.core.lib.ui import UiStrings, base_action, checkable_action, \ icon_action, shortcut_action from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ @@ -42,6 +42,8 @@ from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ from openlp.core.utils import AppLocation, add_actions, LanguageManager, \ get_application_version, delete_file from openlp.core.utils.actions import ActionList, CategoryOrder +from openlp.core.ui.firsttimeform import FirstTimeForm +from openlp.core.ui import ScreenList log = logging.getLogger(__name__) @@ -723,18 +725,20 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): os.removedirs(temp_dir) def onFirstTimeWizardClicked(self): - ret = QtGui.QMessageBox.information(self, - translate('OpenLP.MainWindow', 'Restart OpenLP'), - translate('OpenLP.MainWindow', - 'OpenLP will now restart. The First Time Wizard will run when ' + - 'OpenLP is restarted'), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok), - QtGui.QMessageBox.Ok) - QtCore.QSettings().setValue(u'general/has run wizard', - QtCore.QVariant(False)) - self.close() - OpenLP_exe = sys.executable - os.execl(OpenLP_exe, OpenLP_exe, * sys.argv) + Receiver.send_message(u'cursor_busy') + screens = ScreenList.get_instance() + FirstTimeForm(screens).exec_() + self.firstTime() + for plugin in self.pluginManager.plugins: + self.activePlugin = plugin + oldStatus = self.activePlugin.status + self.activePlugin.setStatus() + if oldStatus != self.activePlugin.status: + if self.activePlugin.status == PluginStatus.Active: + self.activePlugin.toggleStatus(PluginStatus.Active) + self.activePlugin.appStartup() + else: + self.activePlugin.toggleStatus(PluginStatus.Inactive) def blankCheck(self): """ From 1c1cfddce41bf6436f3f91cc190c194129e60588 Mon Sep 17 00:00:00 2001 From: Matthias Hub Date: Sat, 23 Jul 2011 19:50:25 +0200 Subject: [PATCH 04/64] provide sample configuration --- resources/osx/openlp.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/osx/openlp.cfg b/resources/osx/openlp.cfg index 954bf861d..f72a8fca1 100755 --- a/resources/osx/openlp.cfg +++ b/resources/osx/openlp.cfg @@ -1,8 +1,8 @@ [openlp] openlp_appname = OpenLP -openlp_dmgname = OpenLP-1.9.6-bzr1684 -openlp_version = 1684 -openlp_basedir = /Users/openlp/repo/osx-fixes +openlp_dmgname = OpenLP-1.9.6-bzrXXXX +openlp_version = XXXX +openlp_basedir = /Users/openlp/repo/trunk openlp_icon_file = openlp-logo-with-text.icns openlp_dmg_icon_file = openlp-logo-420x420.png installer_backgroundimage_file = installation-background.png From 8800b4174919149c24e1e771db42071acc849a6f Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Sat, 23 Jul 2011 14:09:13 -0400 Subject: [PATCH 05/64] Added confirmation message prior to re-start of FTW --- openlp/core/ui/mainwindow.py | 44 ++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 2e44f26da..c2ce381f0 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -725,20 +725,36 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): os.removedirs(temp_dir) def onFirstTimeWizardClicked(self): - Receiver.send_message(u'cursor_busy') - screens = ScreenList.get_instance() - FirstTimeForm(screens).exec_() - self.firstTime() - for plugin in self.pluginManager.plugins: - self.activePlugin = plugin - oldStatus = self.activePlugin.status - self.activePlugin.setStatus() - if oldStatus != self.activePlugin.status: - if self.activePlugin.status == PluginStatus.Active: - self.activePlugin.toggleStatus(PluginStatus.Active) - self.activePlugin.appStartup() - else: - self.activePlugin.toggleStatus(PluginStatus.Inactive) + ret = QtGui.QMessageBox.warning(self, + translate('OpenLP.MainWindow', 'Re-Run First Time Wizard?'), + translate('OpenLP.MainWindow', + 'Are you sure you want to run the First Time Wizard?\n\n' + \ + 'Re-running this wizard will make changes to your current ' + \ + 'OpenLP configuration, possibly add songs to your ' + \ + 'existing Songs list and change your Default Theme'), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No), + QtGui.QMessageBox.Yes) + if ret == QtGui.QMessageBox.Yes: + Receiver.send_message(u'cursor_busy') + screens = ScreenList.get_instance() + if FirstTimeForm(screens).exec_() == QtGui.QDialog.Accepted: + self.firstTime() + for plugin in self.pluginManager.plugins: + self.activePlugin = plugin + oldStatus = self.activePlugin.status + self.activePlugin.setStatus() + if oldStatus != self.activePlugin.status: + if self.activePlugin.status == PluginStatus.Active: + self.activePlugin.toggleStatus(PluginStatus.Active) + self.activePlugin.appStartup() + else: + self.activePlugin.toggleStatus(PluginStatus.Inactive) + self.themeManagerContents.configUpdated() + self.themeManagerContents.loadThemes(True) + Receiver.send_message(u'theme_update_global', + self.themeManagerContents.global_theme) def blankCheck(self): """ From 189d98dc397e455bace406b1285856ec060be51e Mon Sep 17 00:00:00 2001 From: Matthias Hub Date: Sun, 24 Jul 2011 00:39:37 +0200 Subject: [PATCH 06/64] using self.args way of opening a file on startup even on OS X --- .bzrignore | 1 + openlp.pyw | 20 ++++++-------------- resources/osx/openlp.cfg | 10 ---------- 3 files changed, 7 insertions(+), 24 deletions(-) delete mode 100755 resources/osx/openlp.cfg diff --git a/.bzrignore b/.bzrignore index 2620fea42..1d2bb8267 100644 --- a/.bzrignore +++ b/.bzrignore @@ -20,3 +20,4 @@ _eric4project openlp/core/resources.py.old *.qm resources/windows/warnOpenLP.txt +openlp.cfg diff --git a/openlp.pyw b/openlp.pyw index d1627a8a6..c01d29b00 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -79,6 +79,8 @@ class OpenLP(QtGui.QApplication): class in order to provide the core of the application. """ + args = [] + def exec_(self): """ Override exec method to allow the shared memory to be released on exit @@ -90,10 +92,10 @@ class OpenLP(QtGui.QApplication): """ Run the OpenLP application. """ - self.eventQueue = [] + log.debug("run()") # On Windows, the args passed into the constructor are # ignored. Not very handy, so set the ones we want to use. - self.args = args + self.args.extend(args) # provide a listener for widgets to reqest a screen update. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_process_events'), self.processEvents) @@ -136,9 +138,6 @@ class OpenLP(QtGui.QApplication): VersionThread(self.mainWindow).start() Receiver.send_message(u'maindisplay_blank_check') self.mainWindow.appStartup() - # do a check for queued events - for e in self.eventQueue: - self.event(e) DelayStartThread(self.mainWindow).start() return self.exec_() @@ -191,15 +190,8 @@ class OpenLP(QtGui.QApplication): if event.type() == QtCore.QEvent.FileOpen: file_name = event.file() log.debug(u'Got open file event for %s!', file_name) - log.error(file_name) - try: - self.mainWindow.serviceManagerContents.loadFile(file_name) - return True - except AttributeError, NameError: - log.debug(u'The main window is not initialized yet,\ - will queue event!') - self.eventQueue.append(event) - return False + self.args.insert(0, unicode(file_name)) + return True else: return QtGui.QApplication.event(self, event) diff --git a/resources/osx/openlp.cfg b/resources/osx/openlp.cfg deleted file mode 100755 index f72a8fca1..000000000 --- a/resources/osx/openlp.cfg +++ /dev/null @@ -1,10 +0,0 @@ -[openlp] -openlp_appname = OpenLP -openlp_dmgname = OpenLP-1.9.6-bzrXXXX -openlp_version = XXXX -openlp_basedir = /Users/openlp/repo/trunk -openlp_icon_file = openlp-logo-with-text.icns -openlp_dmg_icon_file = openlp-logo-420x420.png -installer_backgroundimage_file = installation-background.png -pyinstaller_basedir = /Users/openlp/pyinstaller/trunk -qt_menu_basedir = /Library/Frameworks/QtGui.framework/Versions/4/Resources/qt_menu.nib From 099b11f175793589924e685e2187300bf6b694ca Mon Sep 17 00:00:00 2001 From: Matthias Hub Date: Sun, 24 Jul 2011 00:40:40 +0200 Subject: [PATCH 07/64] added build configuration sample --- resources/osx/openlp.cfg.sample | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100755 resources/osx/openlp.cfg.sample diff --git a/resources/osx/openlp.cfg.sample b/resources/osx/openlp.cfg.sample new file mode 100755 index 000000000..f72a8fca1 --- /dev/null +++ b/resources/osx/openlp.cfg.sample @@ -0,0 +1,10 @@ +[openlp] +openlp_appname = OpenLP +openlp_dmgname = OpenLP-1.9.6-bzrXXXX +openlp_version = XXXX +openlp_basedir = /Users/openlp/repo/trunk +openlp_icon_file = openlp-logo-with-text.icns +openlp_dmg_icon_file = openlp-logo-420x420.png +installer_backgroundimage_file = installation-background.png +pyinstaller_basedir = /Users/openlp/pyinstaller/trunk +qt_menu_basedir = /Library/Frameworks/QtGui.framework/Versions/4/Resources/qt_menu.nib From 16cd20a81ad1bcfba66be84781d9cb9b1db58668 Mon Sep 17 00:00:00 2001 From: Matthias Hub Date: Sun, 24 Jul 2011 00:48:07 +0200 Subject: [PATCH 08/64] fixed indentation issue --- openlp.pyw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp.pyw b/openlp.pyw index c01d29b00..71a13de08 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -190,7 +190,7 @@ class OpenLP(QtGui.QApplication): if event.type() == QtCore.QEvent.FileOpen: file_name = event.file() log.debug(u'Got open file event for %s!', file_name) - self.args.insert(0, unicode(file_name)) + self.args.insert(0, unicode(file_name)) return True else: return QtGui.QApplication.event(self, event) From f5f95eef9a7fb3230505770b8abc329fb009f920 Mon Sep 17 00:00:00 2001 From: Matthias Hub Date: Sun, 24 Jul 2011 00:52:34 +0200 Subject: [PATCH 09/64] removed debug logging --- openlp.pyw | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp.pyw b/openlp.pyw index 71a13de08..fe96ebd23 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -92,7 +92,6 @@ class OpenLP(QtGui.QApplication): """ Run the OpenLP application. """ - log.debug("run()") # On Windows, the args passed into the constructor are # ignored. Not very handy, so set the ones we want to use. self.args.extend(args) From c84c69645efd4171d5b6031ca11090f97be88e70 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Mon, 25 Jul 2011 15:24:35 -0400 Subject: [PATCH 10/64] added docstring to FTW section. changed menu text, changed default button to No --- openlp/core/ui/mainwindow.py | 59 ++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c2ce381f0..9d7b0542c 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -476,7 +476,7 @@ class Ui_MainWindow(object): self.toolsOpenDataFolder.setText( translate('OpenLP.MainWindow', 'Open &Data Folder...')) self.toolsFirstTimeWizard.setText( - translate('OpenLP.MainWindow', 'Run First Time Wizard')) + translate('OpenLP.MainWindow', 'Re-run First Time Wizard')) self.toolsOpenDataFolder.setStatusTip(translate('OpenLP.MainWindow', 'Open the folder where songs, bibles and other data resides.')) self.updateThemeImages.setText( @@ -725,36 +725,43 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): os.removedirs(temp_dir) def onFirstTimeWizardClicked(self): - ret = QtGui.QMessageBox.warning(self, - translate('OpenLP.MainWindow', 'Re-Run First Time Wizard?'), + """ + Re-run the first time wizard. Prompts the user for run confirmation + If wizard is run, songs, bibles and themes are imported. The default + theme is changed (if necessary). The plugins in pluginmanager are + set active/in-active to match the selection in the wizard. + """ + answer = QtGui.QMessageBox.warning(self, + translate('OpenLP.MainWindow', 'Re-run First Time Wizard?'), translate('OpenLP.MainWindow', - 'Are you sure you want to run the First Time Wizard?\n\n' + \ - 'Re-running this wizard will make changes to your current ' + \ - 'OpenLP configuration, possibly add songs to your ' + \ + 'Are you sure you want to re-run the First Time Wizard?\n\n' \ + 'Re-running this wizard may make changes to your current ' \ + 'OpenLP configuration and possibly add Songs to your ' \ 'existing Songs list and change your Default Theme'), QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), - QtGui.QMessageBox.Yes) - if ret == QtGui.QMessageBox.Yes: - Receiver.send_message(u'cursor_busy') - screens = ScreenList.get_instance() - if FirstTimeForm(screens).exec_() == QtGui.QDialog.Accepted: - self.firstTime() - for plugin in self.pluginManager.plugins: - self.activePlugin = plugin - oldStatus = self.activePlugin.status - self.activePlugin.setStatus() - if oldStatus != self.activePlugin.status: - if self.activePlugin.status == PluginStatus.Active: - self.activePlugin.toggleStatus(PluginStatus.Active) - self.activePlugin.appStartup() - else: - self.activePlugin.toggleStatus(PluginStatus.Inactive) - self.themeManagerContents.configUpdated() - self.themeManagerContents.loadThemes(True) - Receiver.send_message(u'theme_update_global', - self.themeManagerContents.global_theme) + QtGui.QMessageBox.No) + if answer == QtGui.QMessageBox.No: + return + Receiver.send_message(u'cursor_busy') + screens = ScreenList.get_instance() + if FirstTimeForm(screens).exec_() == QtGui.QDialog.Accepted: + self.firstTime() + for plugin in self.pluginManager.plugins: + self.activePlugin = plugin + oldStatus = self.activePlugin.status + self.activePlugin.setStatus() + if oldStatus != self.activePlugin.status: + if self.activePlugin.status == PluginStatus.Active: + self.activePlugin.toggleStatus(PluginStatus.Active) + self.activePlugin.appStartup() + else: + self.activePlugin.toggleStatus(PluginStatus.Inactive) + self.themeManagerContents.configUpdated() + self.themeManagerContents.loadThemes(True) + Receiver.send_message(u'theme_update_global', + self.themeManagerContents.global_theme) def blankCheck(self): """ From 1ffe0e961d0348af6382d82be2bac1ce408f3b49 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Tue, 26 Jul 2011 20:30:56 -0400 Subject: [PATCH 11/64] Added status tips for FTW menu item. Removed some continuation characters --- openlp/core/ui/mainwindow.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 9d7b0542c..b24ded9c1 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -475,10 +475,12 @@ class Ui_MainWindow(object): 'Add an application to the list of tools.')) self.toolsOpenDataFolder.setText( translate('OpenLP.MainWindow', 'Open &Data Folder...')) - self.toolsFirstTimeWizard.setText( - translate('OpenLP.MainWindow', 'Re-run First Time Wizard')) self.toolsOpenDataFolder.setStatusTip(translate('OpenLP.MainWindow', 'Open the folder where songs, bibles and other data resides.')) + self.toolsFirstTimeWizard.setText( + translate('OpenLP.MainWindow', 'Re-run First Time Wizard')) + self.toolsFirstTimeWizard.setStatusTip(translate('OpenLP.MainWindow', + 'Re-run the First Time Wizard importing Songs, Bibles and Themes.')) self.updateThemeImages.setText( translate('OpenLP.MainWindow', 'Update Theme Images')) self.updateThemeImages.setStatusTip( @@ -734,9 +736,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): answer = QtGui.QMessageBox.warning(self, translate('OpenLP.MainWindow', 'Re-run First Time Wizard?'), translate('OpenLP.MainWindow', - 'Are you sure you want to re-run the First Time Wizard?\n\n' \ - 'Re-running this wizard may make changes to your current ' \ - 'OpenLP configuration and possibly add Songs to your ' \ + 'Are you sure you want to re-run the First Time Wizard?\n\n' + 'Re-running this wizard may make changes to your current ' + 'OpenLP configuration and possibly add Songs to your ' 'existing Songs list and change your Default Theme'), QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | From e40f561976721460705d857ac6c24ac1d72a8ab1 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Wed, 27 Jul 2011 13:04:31 -0400 Subject: [PATCH 12/64] minor changes to text in mainwindow.py --- openlp/core/ui/mainwindow.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index b24ded9c1..35f895e89 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -480,7 +480,7 @@ class Ui_MainWindow(object): self.toolsFirstTimeWizard.setText( translate('OpenLP.MainWindow', 'Re-run First Time Wizard')) self.toolsFirstTimeWizard.setStatusTip(translate('OpenLP.MainWindow', - 'Re-run the First Time Wizard importing Songs, Bibles and Themes.')) + 'Re-run the First Time Wizard, importing songs, Bibles and themes.')) self.updateThemeImages.setText( translate('OpenLP.MainWindow', 'Update Theme Images')) self.updateThemeImages.setStatusTip( @@ -738,8 +738,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): translate('OpenLP.MainWindow', 'Are you sure you want to re-run the First Time Wizard?\n\n' 'Re-running this wizard may make changes to your current ' - 'OpenLP configuration and possibly add Songs to your ' - 'existing Songs list and change your Default Theme'), + 'OpenLP configuration and possibly add songs to your ' + 'existing songs list and change your default theme'), QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), From f1902ade5ac3701f4f445a49bbd326468cb7e4c6 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 27 Jul 2011 19:28:35 +0100 Subject: [PATCH 13/64] Fix up drag and drop code --- openlp.pyw | 4 +- openlp/core/lib/__init__.py | 2 +- openlp/core/lib/listwidgetwithdnd.py | 41 +++++++++++ openlp/core/lib/mediamanageritem.py | 69 +++++++++++++------ openlp/core/ui/servicemanager.py | 9 ++- openlp/plugins/images/lib/mediaitem.py | 5 ++ openlp/plugins/media/lib/mediaitem.py | 23 ++++--- openlp/plugins/presentations/lib/mediaitem.py | 5 ++ 8 files changed, 126 insertions(+), 32 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index a39f6cf65..9d291bbca 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -93,7 +93,7 @@ class OpenLP(QtGui.QApplication): # On Windows, the args passed into the constructor are # ignored. Not very handy, so set the ones we want to use. self.args = args - # provide a listener for widgets to reqest a screen update. + # provide a listener for widgets to request a screen update. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_process_events'), self.processEvents) QtCore.QObject.connect(Receiver.get_receiver(), @@ -125,6 +125,8 @@ class OpenLP(QtGui.QApplication): # now kill the splashscreen self.splash.finish(self.mainWindow) log.debug(u'Splashscreen closed') + # make sure Qt really display the splash screen + self.processEvents() self.mainWindow.repaint() self.processEvents() if not has_run_wizard: diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 7fbd5243c..cc2c170e5 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -233,9 +233,9 @@ def check_directory_exists(dir): except IOError: pass +from eventreceiver import Receiver from listwidgetwithdnd import ListWidgetWithDnD from displaytags import DisplayTags -from eventreceiver import Receiver from spelltextedit import SpellTextEdit from settingsmanager import SettingsManager from plugin import PluginStatus, StringContent, Plugin diff --git a/openlp/core/lib/listwidgetwithdnd.py b/openlp/core/lib/listwidgetwithdnd.py index 48793c12e..69bd67fdd 100644 --- a/openlp/core/lib/listwidgetwithdnd.py +++ b/openlp/core/lib/listwidgetwithdnd.py @@ -27,8 +27,12 @@ """ Extend QListWidget to handle drag and drop functionality """ +import os.path + from PyQt4 import QtCore, QtGui +from openlp.core.lib import Receiver + class ListWidgetWithDnD(QtGui.QListWidget): """ Provide a list widget to store objects and handle drag and drop events @@ -41,6 +45,13 @@ class ListWidgetWithDnD(QtGui.QListWidget): self.mimeDataText = name assert(self.mimeDataText) + def activateDnD(self): + """ + Activate DnD of widget + """ + self.setAcceptDrops(True) + self.setDragDropMode(QtGui.QAbstractItemView.DragDrop) + def mouseMoveEvent(self, event): """ Drag and drop event does not care what data is selected @@ -58,3 +69,33 @@ class ListWidgetWithDnD(QtGui.QListWidget): drag.setMimeData(mimeData) mimeData.setText(self.mimeDataText) drag.start(QtCore.Qt.CopyAction) + + def dragEnterEvent(self, event): + if event.mimeData().hasUrls: + event.accept() + else: + event.ignore() + + def dragMoveEvent(self, event): + if event.mimeData().hasUrls: + event.setDropAction(QtCore.Qt.CopyAction) + event.accept() + else: + event.ignore() + + def dropEvent(self, event): + """ + Receive drop event check if it is a file and process it if it is. + + ``event`` + Handle of the event pint passed + """ + if event.mimeData().hasUrls(): + event.setDropAction(QtCore.Qt.CopyAction) + event.accept() + for url in event.mimeData().urls(): + if os.path.isfile(url.toLocalFile()): + Receiver.send_message(u'%s_dnd' % self.mimeDataText, + url.toLocalFile()) + else: + event.ignore() diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 66bf89f49..2b2e8c6e3 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -252,7 +252,6 @@ class MediaManagerItem(QtGui.QWidget): self.listView.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) self.listView.setAlternatingRowColors(True) - self.listView.setDragEnabled(True) self.listView.setObjectName(u'%sListView' % self.plugin.name) # Add to pageLayout self.pageLayout.addWidget(self.listView) @@ -339,27 +338,57 @@ class MediaManagerItem(QtGui.QWidget): log.info(u'New files(s) %s', unicode(files)) if files: Receiver.send_message(u'cursor_busy') - names = [] - for count in range(0, self.listView.count()): - names.append(self.listView.item(count).text()) - newFiles = [] - for file in files: - filename = os.path.split(unicode(file))[1] - if filename in names: - critical_error_message_box( - UiStrings().Duplicate, - unicode(translate('OpenLP.MediaManagerItem', - 'Duplicate filename %s.\nThis filename is already in ' - 'the list')) % filename) - else: - newFiles.append(file) - self.loadList(newFiles) - lastDir = os.path.split(unicode(files[0]))[0] - SettingsManager.set_last_dir(self.settingsSection, lastDir) - SettingsManager.set_list(self.settingsSection, - self.settingsSection, self.getFileList()) + self.validateAndLoad(files) Receiver.send_message(u'cursor_normal') + def loadFile(self, filename): + """ + Turn file from Drag and Drop into a array so the Validate code + can runn it. + + ``filename`` + The file to be loaded + """ + filename = unicode(filename) + type = filename.split(u'.')[-1] + if type.lower() not in self.onNewFileMasks: + critical_error_message_box( + translate('OpenLP.MediaManagerItem', + 'Invalid File Type'), + unicode(translate('OpenLP.MediaManagerItem', + 'Invalid File %s.\nSuffix not supported')) + % filename) + else: + self.validateAndLoad([filename]) + + def validateAndLoad(self, files): + """ + Process a list for files either from the File Dialog or from Drag and + Drop + + ``files`` + The files to be loaded + """ + names = [] + for count in range(0, self.listView.count()): + names.append(self.listView.item(count).text()) + newFiles = [] + for file in files: + filename = os.path.split(unicode(file))[1] + if filename in names: + critical_error_message_box( + UiStrings().Duplicate, + unicode(translate('OpenLP.MediaManagerItem', + 'Duplicate filename %s.\nThis filename is already in ' + 'the list')) % filename) + else: + newFiles.append(file) + self.loadList(newFiles) + lastDir = os.path.split(unicode(files[0]))[0] + SettingsManager.set_last_dir(self.settingsSection, lastDir) + SettingsManager.set_list(self.settingsSection, + self.settingsSection, self.getFileList()) + def contextMenu(self, point): item = self.listView.itemAt(point) # Decide if we have to show the context menu or not. diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 351e5bbc6..6d86097f2 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -1239,7 +1239,14 @@ class ServiceManager(QtGui.QWidget): Handle of the event pint passed """ link = event.mimeData() - if link.hasText(): + if event.mimeData().hasUrls(): + event.setDropAction(QtCore.Qt.CopyAction) + event.accept() + for url in event.mimeData().urls(): + filename = unicode(url.toLocalFile()) + if filename.endswith(u'.osz'): + self.loadFile(filename) + elif event.mimeData().hasText(): plugin = unicode(event.mimeData().text()) item = self.serviceManagerList.itemAt(event.pos()) # ServiceManager started the drag and drop diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 3c4489bbc..09811ead7 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -52,6 +52,10 @@ class ImageMediaItem(MediaManagerItem): self.hasSearch = True QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'live_theme_changed'), self.liveThemeChanged) + # Allow DnD from the desktop + self.listView.activateDnD() + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'images_dnd'), self.loadFile) def retranslateUi(self): self.onNewPrompt = translate('ImagePlugin.MediaItem', @@ -131,6 +135,7 @@ class ImageMediaItem(MediaManagerItem): icon = self.iconFromFile(imageFile, thumb) item_name = QtGui.QListWidgetItem(filename) item_name.setIcon(icon) + item_name.setToolTip(imageFile) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(imageFile)) self.listView.addItem(item_name) if not initialLoad: diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 77f91a529..54682dbf6 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -39,6 +39,8 @@ from PyQt4.phonon import Phonon log = logging.getLogger(__name__) +CLAPPERBOARD = QtGui.QPixmap(u':/media/media_video.png').toImage() + class MediaMediaItem(MediaManagerItem): """ This is the custom media manager item for Media Slides. @@ -48,8 +50,7 @@ class MediaMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'images/image' self.background = False - self.PreviewFunction = QtGui.QPixmap( - u':/media/media_video.png').toImage() + self.PreviewFunction = CLAPPERBOARD MediaManagerItem.__init__(self, parent, plugin, icon) self.singleServiceItem = False self.hasSearch = True @@ -60,6 +61,10 @@ class MediaMediaItem(MediaManagerItem): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_phonon_creation'), self.createPhonon) + # Allow DnD from the desktop + self.listView.activateDnD() + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'media_dnd'), self.loadFile) def retranslateUi(self): self.onNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media') @@ -201,17 +206,17 @@ class MediaMediaItem(MediaManagerItem): SettingsManager.set_list(self.settingsSection, u'media', self.getFileList()) - def loadList(self, files): + def loadList(self, media): # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! - files.sort(cmp=locale.strcoll, + media.sort(cmp=locale.strcoll, key=lambda filename: os.path.split(unicode(filename))[1].lower()) - for file in files: - filename = os.path.split(unicode(file))[1] + for track in media: + filename = os.path.split(unicode(track))[1] item_name = QtGui.QListWidgetItem(filename) - img = QtGui.QPixmap(u':/media/media_video.png').toImage() - item_name.setIcon(build_icon(img)) - item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) + item_name.setIcon(build_icon(CLAPPERBOARD)) + item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(track)) + item_name.setToolTip(track) self.listView.addItem(item_name) def createPhonon(self): diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 07b490d83..abd597c6c 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -58,6 +58,10 @@ class PresentationMediaItem(MediaManagerItem): self.hasSearch = True QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'mediaitem_presentation_rebuild'), self.rebuild) + # Allow DnD from the desktop + self.listView.activateDnD() + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'presentations_dnd'), self.loadFile) def retranslateUi(self): """ @@ -205,6 +209,7 @@ class PresentationMediaItem(MediaManagerItem): item_name = QtGui.QListWidgetItem(filename) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) item_name.setIcon(icon) + item_name.setToolTip(file) self.listView.addItem(item_name) Receiver.send_message(u'cursor_normal') if not initialLoad: From 7c13fcfaad1270f931059ad781cd7a24914faeab Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Wed, 27 Jul 2011 16:38:23 -0400 Subject: [PATCH 14/64] Minor text change to FTW message in mainwindow --- openlp/core/ui/mainwindow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 35f895e89..69626cae8 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -739,7 +739,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 'Are you sure you want to re-run the First Time Wizard?\n\n' 'Re-running this wizard may make changes to your current ' 'OpenLP configuration and possibly add songs to your ' - 'existing songs list and change your default theme'), + 'existing songs list and change your default theme.'), QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), From f0d4afaaf6fdfe56a13e82c530b91f6a607c41dc Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 30 Jul 2011 08:33:51 +0200 Subject: [PATCH 15/64] improved code readability --- openlp/core/lib/renderer.py | 60 +++++++++++++++++++---------------- openlp/core/ui/maindisplay.py | 2 +- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index e9e28bcf6..6537d0ad5 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -46,8 +46,6 @@ VERSE = u'The Lord said to {r}Noah{/r}: \n' \ 'r{/pk}{o}e{/o}{pp}n{/pp} of the Lord\n' FOOTER = [u'Arky Arky (Unknown)', u'Public Domain', u'CCLI 123456'] -HTML_END = u'' - class Renderer(object): """ Class to pull all Renderer interactions into one place. The plugins will @@ -310,12 +308,20 @@ class Renderer(object): self.web.resize(self.page_width, self.page_height) self.web_frame = self.web.page().mainFrame() # Adjust width and height to account for shadow. outline done in css - self.page_shell = u'' \ - u'
' % \ + html = u""" +
""" % \ (build_lyrics_format_css(self.theme_data, self.page_width, self.page_height), build_lyrics_outline_css(self.theme_data)) + self.web.setHtml(html) def _paginate_slide(self, lines, line_end): """ @@ -334,10 +340,8 @@ class Renderer(object): previous_raw = u'' separator = u'
' html_lines = map(expand_tags, lines) - html = self.page_shell + separator.join(html_lines) + HTML_END - self.web.setHtml(html) # Text too long so go to next page. - if self.web_frame.contentsSize().height() > self.page_height: + if self._text_fits_on_slide(separator.join(html_lines)): html_text, previous_raw = self._binary_chop(formatted, previous_html, previous_raw, html_lines, lines, separator, u'') else: @@ -368,27 +372,19 @@ class Renderer(object): for line in lines: line = line.strip() html_line = expand_tags(line) - html = self.page_shell + previous_html + html_line + HTML_END - self.web.setHtml(html) # Text too long so go to next page. - if self.web_frame.contentsSize().height() > self.page_height: + if self._text_fits_on_slide(previous_html + html_line): # Check if there was a verse before the current one and append # it, when it fits on the page. if previous_html: - html = self.page_shell + previous_html + HTML_END - self.web.setHtml(html) - if self.web_frame.contentsSize().height() <= \ - self.page_height: + if not self._text_fits_on_slide(previous_html): formatted.append(previous_raw) previous_html = u'' previous_raw = u'' - html = self.page_shell + html_line + HTML_END - self.web.setHtml(html) # Now check if the current verse will fit, if it does # not we have to start to process the verse word by # word. - if self.web_frame.contentsSize().height() <= \ - self.page_height: + if not self._text_fits_on_slide(html_line): previous_html = html_line + line_end previous_raw = line + line_end continue @@ -445,10 +441,8 @@ class Renderer(object): highest_index = len(html_list) - 1 index = int(highest_index / 2) while True: - html = self.page_shell + previous_html + \ - separator.join(html_list[:index + 1]).strip() + HTML_END - self.web.setHtml(html) - if self.web_frame.contentsSize().height() > self.page_height: + if self._text_fits_on_slide( + previous_html + separator.join(html_list[:index + 1]).strip()): # We know that it does not fit, so change/calculate the # new index and highest_index accordingly. highest_index = index @@ -470,10 +464,8 @@ class Renderer(object): else: continue # Check if the remaining elements fit on the slide. - html = self.page_shell + \ - separator.join(html_list[index + 1:]).strip() + HTML_END - self.web.setHtml(html) - if self.web_frame.contentsSize().height() <= self.page_height: + if not self._text_fits_on_slide( + separator.join(html_list[index + 1:]).strip()): previous_html = separator.join( html_list[index + 1:]).strip() + line_end previous_raw = separator.join( @@ -489,6 +481,18 @@ class Renderer(object): index = int(highest_index / 2) return previous_html, previous_raw + def _text_fits_on_slide(self, text): + """ + Checks if the given ``text`` fits on a slide. If it does, ``True`` is + returned, otherwise ``False``. + + ``text`` + The text to check. It can contain HTML tags. + """ + self.web_frame.evaluateJavaScript(u'show_text("%s")' % + text.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')) + return self.web_frame.contentsSize().height() > self.page_height + def _words_split(self, line): """ Split the slide up by word so can wrap better diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index d5603c31f..9904868ce 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -188,7 +188,7 @@ class MainDisplay(QtGui.QGraphicsView): while not self.webLoaded: Receiver.send_message(u'openlp_process_events') self.setGeometry(self.screen[u'size']) - self.frame.evaluateJavaScript(u'show_text("%s")' % \ + self.frame.evaluateJavaScript(u'show_text("%s")' % slide.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')) return self.preview() From 77f7581d22633f70421144ff4896425920643a50 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 30 Jul 2011 09:14:39 +0200 Subject: [PATCH 16/64] change 'Display Tag' strings to 'Formatting Tag' Fixes: https://launchpad.net/bugs/816382 --- openlp/core/ui/mainwindow.py | 2 +- openlp/core/ui/shortcutlistdialog.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c88508672..f3a5e2cb9 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -404,7 +404,7 @@ class Ui_MainWindow(object): self.settingsShortcutsItem.setText( translate('OpenLP.MainWindow', 'Configure &Shortcuts...')) self.displayTagItem.setText( - translate('OpenLP.MainWindow', '&Configure Display Tags')) + translate('OpenLP.MainWindow', '&Configure Formatting Tags...')) self.settingsConfigureItem.setText( translate('OpenLP.MainWindow', '&Configure OpenLP...')) self.viewMediaManagerItem.setText( diff --git a/openlp/core/ui/shortcutlistdialog.py b/openlp/core/ui/shortcutlistdialog.py index 6d877358f..a9b9b22cf 100644 --- a/openlp/core/ui/shortcutlistdialog.py +++ b/openlp/core/ui/shortcutlistdialog.py @@ -123,7 +123,7 @@ class Ui_ShortcutListDialog(object): def retranslateUi(self, shortcutListDialog): shortcutListDialog.setWindowTitle( - translate('OpenLP.ShortcutListDialog', 'Customize Shortcuts')) + translate('OpenLP.ShortcutListDialog', 'Configure Shortcuts')) self.descriptionLabel.setText(translate('OpenLP.ShortcutListDialog', 'Select an action and click one of the buttons below to start ' 'capturing a new primary or alternate shortcut, respectively.')) From 06d32e51083b34c2d9dd1289b2c39994719d4e78 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 30 Jul 2011 09:19:16 +0200 Subject: [PATCH 17/64] change 'Display Tag' strings to 'Formatting Tag' Fixes: https://launchpad.net/bugs/816382 --- openlp/core/lib/displaytags.py | 2 +- openlp/core/lib/renderer.py | 4 ++-- openlp/core/ui/displaytagdialog.py | 2 +- openlp/core/ui/displaytagform.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/openlp/core/lib/displaytags.py b/openlp/core/lib/displaytags.py index 95ce13bda..aa6f3b5a7 100644 --- a/openlp/core/lib/displaytags.py +++ b/openlp/core/lib/displaytags.py @@ -25,7 +25,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### """ -Provide Html Tag management and Display Tag access class +Provide HTML Tag management and Formatting Tag access class """ from openlp.core.lib import translate diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index e9e28bcf6..1b94e7896 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -422,7 +422,7 @@ class Renderer(object): to the list of slides. (unicode string) ``previous_raw`` - The raw text (with display tags) which is know to fit on a slide, + The raw text (with formatting tags) which is know to fit on a slide, but is not yet added to the list of slides. (unicode string) ``html_list`` @@ -431,7 +431,7 @@ class Renderer(object): ``raw_list`` The elements which do not fit on a slide and needs to be processed - using the binary chop. The elements can contain display tags. + using the binary chop. The elements can contain formatting tags. ``separator`` The separator for the elements. For lines this is ``u'
'`` and diff --git a/openlp/core/ui/displaytagdialog.py b/openlp/core/ui/displaytagdialog.py index 328fcd137..093e0c167 100644 --- a/openlp/core/ui/displaytagdialog.py +++ b/openlp/core/ui/displaytagdialog.py @@ -122,7 +122,7 @@ class Ui_DisplayTagDialog(object): def retranslateUi(self, displayTagDialog): displayTagDialog.setWindowTitle(translate('OpenLP.displayTagDialog', - 'Configure Display Tags')) + 'Configure Formatting Tags')) self.editGroupBox.setTitle( translate('OpenLP.DisplayTagDialog', 'Edit Selection')) self.savePushButton.setText( diff --git a/openlp/core/ui/displaytagform.py b/openlp/core/ui/displaytagform.py index 22ac38f06..9456f1028 100644 --- a/openlp/core/ui/displaytagform.py +++ b/openlp/core/ui/displaytagform.py @@ -177,7 +177,7 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): def _saveTable(self): """ - Saves all display tags except protected ones. + Saves all formatting tags except protected ones. """ tags = [] for tag in DisplayTags.get_html_tags(): From c0976a4690f43655548c3c6dc3ece0edc0ff5e0f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 30 Jul 2011 09:34:37 +0200 Subject: [PATCH 18/64] moved files and changed code to reflect string changes Fixes: https://launchpad.net/bugs/816382 --- openlp/core/lib/__init__.py | 6 +-- .../lib/{displaytags.py => formattingtags.py} | 44 ++++++++-------- openlp/core/lib/spelltextedit.py | 6 +-- openlp/core/ui/__init__.py | 2 +- ...laytagdialog.py => formattingtagdialog.py} | 50 +++++++++---------- ...displaytagform.py => formattingtagform.py} | 48 +++++++++--------- openlp/core/ui/mainwindow.py | 21 ++++---- 7 files changed, 88 insertions(+), 89 deletions(-) rename openlp/core/lib/{displaytags.py => formattingtags.py} (78%) rename openlp/core/ui/{displaytagdialog.py => formattingtagdialog.py} (82%) rename openlp/core/ui/{displaytagform.py => formattingtagform.py} (87%) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 7fbd5243c..620d5dafd 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -205,7 +205,7 @@ def clean_tags(text): text = text.replace(u'
', u'\n') text = text.replace(u'{br}', u'\n') text = text.replace(u' ', u' ') - for tag in DisplayTags.get_html_tags(): + for tag in FormattingTags.get_html_tags(): text = text.replace(tag[u'start tag'], u'') text = text.replace(tag[u'end tag'], u'') return text @@ -214,7 +214,7 @@ def expand_tags(text): """ Expand tags HTML for display """ - for tag in DisplayTags.get_html_tags(): + for tag in FormattingTags.get_html_tags(): text = text.replace(tag[u'start tag'], tag[u'start html']) text = text.replace(tag[u'end tag'], tag[u'end html']) return text @@ -234,7 +234,7 @@ def check_directory_exists(dir): pass from listwidgetwithdnd import ListWidgetWithDnD -from displaytags import DisplayTags +from formattingtags import FormattingTags from eventreceiver import Receiver from spelltextedit import SpellTextEdit from settingsmanager import SettingsManager diff --git a/openlp/core/lib/displaytags.py b/openlp/core/lib/formattingtags.py similarity index 78% rename from openlp/core/lib/displaytags.py rename to openlp/core/lib/formattingtags.py index aa6f3b5a7..9fd42a605 100644 --- a/openlp/core/lib/displaytags.py +++ b/openlp/core/lib/formattingtags.py @@ -30,7 +30,7 @@ Provide HTML Tag management and Formatting Tag access class from openlp.core.lib import translate -class DisplayTags(object): +class FormattingTags(object): """ Static Class to HTML Tags to be access around the code the list is managed by the Options Tab. @@ -42,89 +42,89 @@ class DisplayTags(object): """ Provide access to the html_expands list. """ - return DisplayTags.html_expands + return FormattingTags.html_expands @staticmethod def reset_html_tags(): """ Resets the html_expands list. """ - DisplayTags.html_expands = [] + FormattingTags.html_expands = [] base_tags = [] # Append the base tags. # Hex Color tags from http://www.w3schools.com/html/html_colornames.asp - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Red'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Red'), u'start tag': u'{r}', u'start html': u'', u'end tag': u'{/r}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Black'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Black'), u'start tag': u'{b}', u'start html': u'', u'end tag': u'{/b}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Blue'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Blue'), u'start tag': u'{bl}', u'start html': u'', u'end tag': u'{/bl}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Yellow'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Yellow'), u'start tag': u'{y}', u'start html': u'', u'end tag': u'{/y}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Green'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Green'), u'start tag': u'{g}', u'start html': u'', u'end tag': u'{/g}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Pink'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Pink'), u'start tag': u'{pk}', u'start html': u'', u'end tag': u'{/pk}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Orange'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Orange'), u'start tag': u'{o}', u'start html': u'', u'end tag': u'{/o}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Purple'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Purple'), u'start tag': u'{pp}', u'start html': u'', u'end tag': u'{/pp}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'White'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'White'), u'start tag': u'{w}', u'start html': u'', u'end tag': u'{/w}', u'end html': u'', u'protected': True}) base_tags.append({ - u'desc': translate('OpenLP.DisplayTags', 'Superscript'), + u'desc': translate('OpenLP.FormattingTags', 'Superscript'), u'start tag': u'{su}', u'start html': u'', u'end tag': u'{/su}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Subscript'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Subscript'), u'start tag': u'{sb}', u'start html': u'', u'end tag': u'{/sb}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Paragraph'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Paragraph'), u'start tag': u'{p}', u'start html': u'

', u'end tag': u'{/p}', u'end html': u'

', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Bold'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Bold'), u'start tag': u'{st}', u'start html': u'', u'end tag': u'{/st}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Italics'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Italics'), u'start tag': u'{it}', u'start html': u'', u'end tag': u'{/it}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Underline'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Underline'), u'start tag': u'{u}', u'start html': u'', u'end tag': u'{/u}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.DisplayTags', 'Break'), + base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Break'), u'start tag': u'{br}', u'start html': u'
', u'end tag': u'', u'end html': u'', u'protected': True}) - DisplayTags.add_html_tags(base_tags) + FormattingTags.add_html_tags(base_tags) @staticmethod def add_html_tags(tags): """ Add a list of tags to the list """ - DisplayTags.html_expands.extend(tags) + FormattingTags.html_expands.extend(tags) @staticmethod def remove_html_tag(tag_id): """ Removes an individual html_expands tag. """ - DisplayTags.html_expands.pop(tag_id) + FormattingTags.html_expands.pop(tag_id) diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index 0d277b9fe..b0bb61e92 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -39,7 +39,7 @@ except ImportError: from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate, DisplayTags +from openlp.core.lib import translate, FormattingTags from openlp.core.lib.ui import checkable_action log = logging.getLogger(__name__) @@ -114,7 +114,7 @@ class SpellTextEdit(QtGui.QPlainTextEdit): popupMenu.insertMenu(popupMenu.actions()[0], spell_menu) tagMenu = QtGui.QMenu(translate('OpenLP.SpellTextEdit', 'Formatting Tags')) - for html in DisplayTags.get_html_tags(): + for html in FormattingTags.get_html_tags(): action = SpellAction(html[u'desc'], tagMenu) action.correct.connect(self.htmlTag) tagMenu.addAction(action) @@ -148,7 +148,7 @@ class SpellTextEdit(QtGui.QPlainTextEdit): """ Replaces the selected text with word. """ - for html in DisplayTags.get_html_tags(): + for html in FormattingTags.get_html_tags(): if tag == html[u'desc']: cursor = self.textCursor() if self.textCursor().hasSelection(): diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 7aebcb1df..e754480e0 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -69,7 +69,7 @@ from advancedtab import AdvancedTab from aboutform import AboutForm from pluginform import PluginForm from settingsform import SettingsForm -from displaytagform import DisplayTagForm +from formattingtagform import FormattingTagForm from shortcutlistform import ShortcutListForm from mediadockmanager import MediaDockManager from servicemanager import ServiceManager diff --git a/openlp/core/ui/displaytagdialog.py b/openlp/core/ui/formattingtagdialog.py similarity index 82% rename from openlp/core/ui/displaytagdialog.py rename to openlp/core/ui/formattingtagdialog.py index 093e0c167..186f4739b 100644 --- a/openlp/core/ui/displaytagdialog.py +++ b/openlp/core/ui/formattingtagdialog.py @@ -30,15 +30,15 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import translate from openlp.core.lib.ui import UiStrings -class Ui_DisplayTagDialog(object): +class Ui_FormattingTagDialog(object): - def setupUi(self, displayTagDialog): - displayTagDialog.setObjectName(u'displayTagDialog') - displayTagDialog.resize(725, 548) - self.listdataGridLayout = QtGui.QGridLayout(displayTagDialog) + def setupUi(self, formattingTagDialog): + formattingTagDialog.setObjectName(u'formattingTagDialog') + formattingTagDialog.resize(725, 548) + self.listdataGridLayout = QtGui.QGridLayout(formattingTagDialog) self.listdataGridLayout.setMargin(8) self.listdataGridLayout.setObjectName(u'listdataGridLayout') - self.tagTableWidget = QtGui.QTableWidget(displayTagDialog) + self.tagTableWidget = QtGui.QTableWidget(formattingTagDialog) self.tagTableWidget.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) self.tagTableWidget.setEditTriggers( @@ -67,11 +67,11 @@ class Ui_DisplayTagDialog(object): spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) - self.deletePushButton = QtGui.QPushButton(displayTagDialog) + self.deletePushButton = QtGui.QPushButton(formattingTagDialog) self.deletePushButton.setObjectName(u'deletePushButton') self.horizontalLayout.addWidget(self.deletePushButton) self.listdataGridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1) - self.editGroupBox = QtGui.QGroupBox(displayTagDialog) + self.editGroupBox = QtGui.QGroupBox(formattingTagDialog) self.editGroupBox.setObjectName(u'editGroupBox') self.dataGridLayout = QtGui.QGridLayout(self.editGroupBox) self.dataGridLayout.setObjectName(u'dataGridLayout') @@ -112,38 +112,38 @@ class Ui_DisplayTagDialog(object): self.savePushButton.setObjectName(u'savePushButton') self.dataGridLayout.addWidget(self.savePushButton, 4, 2, 1, 1) self.listdataGridLayout.addWidget(self.editGroupBox, 2, 0, 1, 1) - self.buttonBox = QtGui.QDialogButtonBox(displayTagDialog) - self.buttonBox.setObjectName('displayTagDialogButtonBox') + self.buttonBox = QtGui.QDialogButtonBox(formattingTagDialog) + self.buttonBox.setObjectName('formattingTagDialogButtonBox') self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Close) self.listdataGridLayout.addWidget(self.buttonBox, 3, 0, 1, 1) - self.retranslateUi(displayTagDialog) - QtCore.QMetaObject.connectSlotsByName(displayTagDialog) + self.retranslateUi(formattingTagDialog) + QtCore.QMetaObject.connectSlotsByName(formattingTagDialog) - def retranslateUi(self, displayTagDialog): - displayTagDialog.setWindowTitle(translate('OpenLP.displayTagDialog', - 'Configure Formatting Tags')) + def retranslateUi(self, formattingTagDialog): + formattingTagDialog.setWindowTitle(translate( + 'OpenLP.FormattingTagDialog', 'Configure Formatting Tags')) self.editGroupBox.setTitle( - translate('OpenLP.DisplayTagDialog', 'Edit Selection')) + translate('OpenLP.FormattingTagDialog', 'Edit Selection')) self.savePushButton.setText( - translate('OpenLP.DisplayTagDialog', 'Save')) + translate('OpenLP.FormattingTagDialog', 'Save')) self.descriptionLabel.setText( - translate('OpenLP.DisplayTagDialog', 'Description')) - self.tagLabel.setText(translate('OpenLP.DisplayTagDialog', 'Tag')) + translate('OpenLP.FormattingTagDialog', 'Description')) + self.tagLabel.setText(translate('OpenLP.FormattingTagDialog', 'Tag')) self.startTagLabel.setText( - translate('OpenLP.DisplayTagDialog', 'Start tag')) + translate('OpenLP.FormattingTagDialog', 'Start tag')) self.endTagLabel.setText( - translate('OpenLP.DisplayTagDialog', 'End tag')) + translate('OpenLP.FormattingTagDialog', 'End tag')) self.deletePushButton.setText(UiStrings().Delete) self.newPushButton.setText(UiStrings().New) self.tagTableWidget.horizontalHeaderItem(0).setText( - translate('OpenLP.DisplayTagDialog', 'Description')) + translate('OpenLP.FormattingTagDialog', 'Description')) self.tagTableWidget.horizontalHeaderItem(1).setText( - translate('OpenLP.DisplayTagDialog', 'Tag Id')) + translate('OpenLP.FormattingTagDialog', 'Tag Id')) self.tagTableWidget.horizontalHeaderItem(2).setText( - translate('OpenLP.DisplayTagDialog', 'Start HTML')) + translate('OpenLP.FormattingTagDialog', 'Start HTML')) self.tagTableWidget.horizontalHeaderItem(3).setText( - translate('OpenLP.DisplayTagDialog', 'End HTML')) + translate('OpenLP.FormattingTagDialog', 'End HTML')) self.tagTableWidget.setColumnWidth(0, 120) self.tagTableWidget.setColumnWidth(1, 80) self.tagTableWidget.setColumnWidth(2, 330) diff --git a/openlp/core/ui/displaytagform.py b/openlp/core/ui/formattingtagform.py similarity index 87% rename from openlp/core/ui/displaytagform.py rename to openlp/core/ui/formattingtagform.py index 9456f1028..7312ffa7b 100644 --- a/openlp/core/ui/displaytagform.py +++ b/openlp/core/ui/formattingtagform.py @@ -25,22 +25,22 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### """ -The :mod:`DisplayTagTab` provides an Tag Edit facility. The Base set are -protected and included each time loaded. Custom tags can be defined and saved. -The Custom Tag arrays are saved in a pickle so QSettings works on them. Base +The :mod:`DisplayTagTab` provides an Tag Edit facility. The Base set are +protected and included each time loaded. Custom tags can be defined and saved. +The Custom Tag arrays are saved in a pickle so QSettings works on them. Base Tags cannot be changed. """ import cPickle from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate, DisplayTags +from openlp.core.lib import translate, FormattingTags from openlp.core.lib.ui import critical_error_message_box -from openlp.core.ui.displaytagdialog import Ui_DisplayTagDialog +from openlp.core.ui.formattingtagdialog import Ui_FormattingTagDialog -class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): +class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog): """ - The :class:`DisplayTagTab` manages the settings tab . + The :class:`FormattingTagForm` manages the settings tab . """ def __init__(self, parent): """ @@ -48,7 +48,7 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): """ QtGui.QDialog.__init__(self, parent) self.setupUi(self) - self._loadDisplayTags() + self._loadFormattingTags() QtCore.QObject.connect(self.tagTableWidget, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onRowSelected) QtCore.QObject.connect(self.newPushButton, @@ -65,19 +65,20 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): Load Display and set field state. """ # Create initial copy from master - self._loadDisplayTags() + self._loadFormattingTags() self._resetTable() self.selected = -1 return QtGui.QDialog.exec_(self) - def _loadDisplayTags(self): + def _loadFormattingTags(self): """ Load the Tags from store so can be used in the system or used to update the display. If Cancel was selected this is needed to reset the dsiplay to the correct version. """ # Initial Load of the Tags - DisplayTags.reset_html_tags() + FormattingTags.reset_html_tags() + # Formatting Tags where also known as display tags. user_expands = QtCore.QSettings().value(u'displayTags/html_tags', QtCore.QVariant(u'')).toString() # cPickle only accepts str not unicode strings @@ -85,14 +86,14 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): if user_expands_string: user_tags = cPickle.loads(user_expands_string) # If we have some user ones added them as well - DisplayTags.add_html_tags(user_tags) + FormattingTags.add_html_tags(user_tags) def onRowSelected(self): """ Table Row selected so display items and set field state. """ row = self.tagTableWidget.currentRow() - html = DisplayTags.get_html_tags()[row] + html = FormattingTags.get_html_tags()[row] self.selected = row self.descriptionLineEdit.setText(html[u'desc']) self.tagLineEdit.setText(self._strip(html[u'start tag'])) @@ -117,7 +118,7 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): """ Add a new tag to list only if it is not a duplicate. """ - for html in DisplayTags.get_html_tags(): + for html in FormattingTags.get_html_tags(): if self._strip(html[u'start tag']) == u'n': critical_error_message_box( translate('OpenLP.DisplayTagTab', 'Update Error'), @@ -133,7 +134,7 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): u'end html': translate('OpenLP.DisplayTagTab', ''), u'protected': False } - DisplayTags.add_html_tags([tag]) + FormattingTags.add_html_tags([tag]) self._resetTable() # Highlight new row self.tagTableWidget.selectRow(self.tagTableWidget.rowCount() - 1) @@ -145,7 +146,7 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): Delete selected custom tag. """ if self.selected != -1: - DisplayTags.remove_html_tag(self.selected) + FormattingTags.remove_html_tag(self.selected) self.selected = -1 self._resetTable() self._saveTable() @@ -154,7 +155,7 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): """ Update Custom Tag details if not duplicate and save the data. """ - html_expands = DisplayTags.get_html_tags() + html_expands = FormattingTags.get_html_tags() if self.selected != -1: html = html_expands[self.selected] tag = unicode(self.tagLineEdit.text()) @@ -180,15 +181,12 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): Saves all formatting tags except protected ones. """ tags = [] - for tag in DisplayTags.get_html_tags(): + for tag in FormattingTags.get_html_tags(): if not tag[u'protected']: tags.append(tag) - if tags: - QtCore.QSettings().setValue(u'displayTags/html_tags', - QtCore.QVariant(cPickle.dumps(tags))) - else: - QtCore.QSettings().setValue(u'displayTags/html_tags', - QtCore.QVariant(u'')) + # Formatting Tags where also known as display tags. + QtCore.QSettings().setValue(u'displayTags/html_tags', + QtCore.QVariant(cPickle.dumps(tags) if tags else u'')) def _resetTable(self): """ @@ -199,7 +197,7 @@ class DisplayTagForm(QtGui.QDialog, Ui_DisplayTagDialog): self.newPushButton.setEnabled(True) self.savePushButton.setEnabled(False) self.deletePushButton.setEnabled(False) - for linenumber, html in enumerate(DisplayTags.get_html_tags()): + for linenumber, html in enumerate(FormattingTags.get_html_tags()): self.tagTableWidget.setRowCount( self.tagTableWidget.rowCount() + 1) self.tagTableWidget.setItem(linenumber, 0, diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index f3a5e2cb9..16691e5a0 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -38,7 +38,7 @@ from openlp.core.lib.ui import UiStrings, base_action, checkable_action, \ icon_action, shortcut_action from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ ThemeManager, SlideController, PluginForm, MediaDockManager, \ - ShortcutListForm, DisplayTagForm + ShortcutListForm, FormattingTagForm from openlp.core.utils import AppLocation, add_actions, LanguageManager, \ get_application_version, delete_file from openlp.core.utils.actions import ActionList, CategoryOrder @@ -269,7 +269,8 @@ class Ui_MainWindow(object): u'settingsShortcutsItem', u':/system/system_configure_shortcuts.png', category=UiStrings().Settings) - self.displayTagItem = icon_action(mainWindow, + # Formatting Tags where also known as display tags. + self.formattingTagItem = icon_action(mainWindow, u'displayTagItem', u':/system/tag_editor.png', category=UiStrings().Settings) self.settingsConfigureItem = icon_action(mainWindow, @@ -315,11 +316,11 @@ class Ui_MainWindow(object): add_actions(self.settingsMenu, (self.settingsPluginListItem, self.settingsLanguageMenu.menuAction(), None, self.settingsConfigureItem, self.settingsShortcutsItem, - self.displayTagItem)) + self.formattingTagItem)) else: add_actions(self.settingsMenu, (self.settingsPluginListItem, self.settingsLanguageMenu.menuAction(), None, - self.displayTagItem, self.settingsShortcutsItem, + self.formattingTagItem, self.settingsShortcutsItem, self.settingsConfigureItem)) add_actions(self.toolsMenu, (self.toolsAddToolItem, None)) add_actions(self.toolsMenu, (self.toolsOpenDataFolder, None)) @@ -403,7 +404,7 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', '&Language')) self.settingsShortcutsItem.setText( translate('OpenLP.MainWindow', 'Configure &Shortcuts...')) - self.displayTagItem.setText( + self.formattingTagItem.setText( translate('OpenLP.MainWindow', '&Configure Formatting Tags...')) self.settingsConfigureItem.setText( translate('OpenLP.MainWindow', '&Configure OpenLP...')) @@ -511,7 +512,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.serviceNotSaved = False self.aboutForm = AboutForm(self) self.settingsForm = SettingsForm(self, self) - self.displayTagForm = DisplayTagForm(self) + self.formattingTagForm = FormattingTagForm(self) self.shortcutForm = ShortcutListForm(self) self.recentFiles = QtCore.QStringList() # Set up the path with plugins @@ -548,8 +549,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'triggered()'), self.onToolsOpenDataFolderClicked) QtCore.QObject.connect(self.updateThemeImages, QtCore.SIGNAL(u'triggered()'), self.onUpdateThemeImages) - QtCore.QObject.connect(self.displayTagItem, - QtCore.SIGNAL(u'triggered()'), self.onDisplayTagItemClicked) + QtCore.QObject.connect(self.formattingTagItem, + QtCore.SIGNAL(u'triggered()'), self.onFormattingTagItemClicked) QtCore.QObject.connect(self.settingsConfigureItem, QtCore.SIGNAL(u'triggered()'), self.onSettingsConfigureItemClicked) QtCore.QObject.connect(self.settingsShortcutsItem, @@ -788,11 +789,11 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ self.themeManagerContents.updatePreviewImages() - def onDisplayTagItemClicked(self): + def onFormattingTagItemClicked(self): """ Show the Settings dialog """ - self.displayTagForm.exec_() + self.formattingTagForm.exec_() def onSettingsConfigureItemClicked(self): """ From b3896d880bd7f222cd01557d9fd2af7d7bd0b49f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 30 Jul 2011 09:40:34 +0200 Subject: [PATCH 19/64] spelling --- openlp/core/ui/formattingtagform.py | 6 +++--- openlp/core/ui/mainwindow.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/formattingtagform.py b/openlp/core/ui/formattingtagform.py index 7312ffa7b..b3fda20ba 100644 --- a/openlp/core/ui/formattingtagform.py +++ b/openlp/core/ui/formattingtagform.py @@ -25,7 +25,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### """ -The :mod:`DisplayTagTab` provides an Tag Edit facility. The Base set are +The :mod:`formattingtagform` provides an Tag Edit facility. The Base set are protected and included each time loaded. Custom tags can be defined and saved. The Custom Tag arrays are saved in a pickle so QSettings works on them. Base Tags cannot be changed. @@ -78,7 +78,7 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog): """ # Initial Load of the Tags FormattingTags.reset_html_tags() - # Formatting Tags where also known as display tags. + # Formatting Tags were also known as display tags. user_expands = QtCore.QSettings().value(u'displayTags/html_tags', QtCore.QVariant(u'')).toString() # cPickle only accepts str not unicode strings @@ -184,7 +184,7 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog): for tag in FormattingTags.get_html_tags(): if not tag[u'protected']: tags.append(tag) - # Formatting Tags where also known as display tags. + # Formatting Tags were also known as display tags. QtCore.QSettings().setValue(u'displayTags/html_tags', QtCore.QVariant(cPickle.dumps(tags) if tags else u'')) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 16691e5a0..8beb21eac 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -269,7 +269,7 @@ class Ui_MainWindow(object): u'settingsShortcutsItem', u':/system/system_configure_shortcuts.png', category=UiStrings().Settings) - # Formatting Tags where also known as display tags. + # Formatting Tags were also known as display tags. self.formattingTagItem = icon_action(mainWindow, u'displayTagItem', u':/system/tag_editor.png', category=UiStrings().Settings) From 4f195a4721a3253f0cea101f2a26fde0d0a03797 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 30 Jul 2011 09:43:19 +0200 Subject: [PATCH 20/64] changed translate context --- openlp/core/ui/formattingtagform.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/openlp/core/ui/formattingtagform.py b/openlp/core/ui/formattingtagform.py index b3fda20ba..2a8625b1a 100644 --- a/openlp/core/ui/formattingtagform.py +++ b/openlp/core/ui/formattingtagform.py @@ -121,17 +121,17 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog): for html in FormattingTags.get_html_tags(): if self._strip(html[u'start tag']) == u'n': critical_error_message_box( - translate('OpenLP.DisplayTagTab', 'Update Error'), - translate('OpenLP.DisplayTagTab', + translate('OpenLP.FormattingTagForm', 'Update Error'), + translate('OpenLP.FormattingTagForm', 'Tag "n" already defined.')) return # Add new tag to list tag = { - u'desc': translate('OpenLP.DisplayTagTab', 'New Tag'), + u'desc': translate('OpenLP.FormattingTagForm', 'New Tag'), u'start tag': u'{n}', - u'start html': translate('OpenLP.DisplayTagTab', ''), + u'start html': translate('OpenLP.FormattingTagForm', ''), u'end tag': u'{/n}', - u'end html': translate('OpenLP.DisplayTagTab', ''), + u'end html': translate('OpenLP.FormattingTagForm', ''), u'protected': False } FormattingTags.add_html_tags([tag]) @@ -163,8 +163,8 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog): if self._strip(html1[u'start tag']) == tag and \ linenumber != self.selected: critical_error_message_box( - translate('OpenLP.DisplayTagTab', 'Update Error'), - unicode(translate('OpenLP.DisplayTagTab', + translate('OpenLP.FormattingTagForm', 'Update Error'), + unicode(translate('OpenLP.FormattingTagForm', 'Tag %s already defined.')) % tag) return html[u'desc'] = unicode(self.descriptionLineEdit.text()) From 5e91aa7aee0d7bdc7006dabfa8f0273cd6385102 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 30 Jul 2011 10:07:48 +0200 Subject: [PATCH 21/64] fixed long lines --- openlp/core/lib/formattingtags.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/openlp/core/lib/formattingtags.py b/openlp/core/lib/formattingtags.py index 9fd42a605..ae9d5c1cf 100644 --- a/openlp/core/lib/formattingtags.py +++ b/openlp/core/lib/formattingtags.py @@ -93,20 +93,24 @@ class FormattingTags(object): u'desc': translate('OpenLP.FormattingTags', 'Superscript'), u'start tag': u'{su}', u'start html': u'', u'end tag': u'{/su}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Subscript'), + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Subscript'), u'start tag': u'{sb}', u'start html': u'', u'end tag': u'{/sb}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Paragraph'), + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Paragraph'), u'start tag': u'{p}', u'start html': u'

', u'end tag': u'{/p}', u'end html': u'

', u'protected': True}) base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Bold'), u'start tag': u'{st}', u'start html': u'', u'end tag': u'{/st}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Italics'), + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Italics'), u'start tag': u'{it}', u'start html': u'', u'end tag': u'{/it}', u'end html': u'', u'protected': True}) - base_tags.append({u'desc': translate('OpenLP.FormattingTags', 'Underline'), + base_tags.append({ + u'desc': translate('OpenLP.FormattingTags', 'Underline'), u'start tag': u'{u}', u'start html': u'', u'end tag': u'{/u}', u'end html': u'', u'protected': True}) From c608a0750dad4ca1418988cd6932c8b8a752874a Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Mon, 1 Aug 2011 21:58:10 -0400 Subject: [PATCH 22/64] Modified firsttimeform to include existing themes when wizard is re-run --- openlp/core/ui/firsttimeform.py | 36 +++++++++++++++++++++++++++++---- openlp/core/ui/mainwindow.py | 2 +- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index e5d434180..71c18044e 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -157,10 +157,28 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): item = self.themesListWidget.item(iter) if item.checkState() == QtCore.Qt.Checked: self.themeComboBox.addItem(item.text()) + #Check if this is a re-run of the wizard. If so, add existing themes to list + self.has_run_wizard = QtCore.QSettings().value( + u'general/has run wizard', QtCore.QVariant(False)).toBool() + if self.has_run_wizard: + #If themes already exist, add them to the list + self.theme_list = self.parent().themeManagerContents.getThemes() + for theme in self.theme_list: + index = self.themeComboBox.findText(theme) + if index == -1: + self.themeComboBox.addItem(theme) + default_theme = unicode(QtCore.QSettings().value( + u'themes/global theme', + QtCore.QVariant(u'')).toString()) + #Pre-select the current default theme + index = self.themeComboBox.findText(default_theme) + self.themeComboBox.setCurrentIndex(index) elif pageId == FirstTimePage.Progress: + Receiver.send_message(u'cursor_busy') self._preWizard() self._performWizard() self._postWizard() + Receiver.send_message(u'cursor_normal') def updateScreenListCombo(self): """ @@ -249,11 +267,21 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ if self.max_progress: self.progressBar.setValue(self.progressBar.maximum()) - self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', - 'Download complete. Click the finish button to start OpenLP.')) + if self.has_run_wizard: + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Download complete.' + ' Click the finish button to return to OpenLP.')) + else: + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Download complete.' + ' Click the finish button to start OpenLP.')) else: - self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', - 'Click the finish button to start OpenLP.')) + if self.has_run_wizard: + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Click the finish button to return to OpenLP.')) + else: + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Click the finish button to start OpenLP.')) self.finishButton.setVisible(True) self.finishButton.setEnabled(True) self.cancelButton.setVisible(False) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 69626cae8..7de14594a 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -748,7 +748,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): return Receiver.send_message(u'cursor_busy') screens = ScreenList.get_instance() - if FirstTimeForm(screens).exec_() == QtGui.QDialog.Accepted: + if FirstTimeForm(screens, self).exec_() == QtGui.QDialog.Accepted: self.firstTime() for plugin in self.pluginManager.plugins: self.activePlugin = plugin From 644706a62a6558a76e072e2dbf4f3e0d91077337 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 2 Aug 2011 06:07:09 +0100 Subject: [PATCH 23/64] Fix review comments and cleanups --- openlp/core/lib/listwidgetwithdnd.py | 17 +++++-- openlp/core/lib/mediamanageritem.py | 50 +++++++++++-------- openlp/plugins/images/lib/mediaitem.py | 2 - openlp/plugins/media/lib/mediaitem.py | 2 - openlp/plugins/presentations/lib/mediaitem.py | 2 - 5 files changed, 42 insertions(+), 31 deletions(-) diff --git a/openlp/core/lib/listwidgetwithdnd.py b/openlp/core/lib/listwidgetwithdnd.py index 69bd67fdd..8474821a4 100644 --- a/openlp/core/lib/listwidgetwithdnd.py +++ b/openlp/core/lib/listwidgetwithdnd.py @@ -51,6 +51,9 @@ class ListWidgetWithDnD(QtGui.QListWidget): """ self.setAcceptDrops(True) self.setDragDropMode(QtGui.QAbstractItemView.DragDrop) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'%s_dnd' % self.mimeDataText), + self.parent().loadFile) def mouseMoveEvent(self, event): """ @@ -71,7 +74,7 @@ class ListWidgetWithDnD(QtGui.QListWidget): drag.start(QtCore.Qt.CopyAction) def dragEnterEvent(self, event): - if event.mimeData().hasUrls: + if event.mimeData().hasUrls(): event.accept() else: event.ignore() @@ -93,9 +96,15 @@ class ListWidgetWithDnD(QtGui.QListWidget): if event.mimeData().hasUrls(): event.setDropAction(QtCore.Qt.CopyAction) event.accept() + files = [] for url in event.mimeData().urls(): - if os.path.isfile(url.toLocalFile()): - Receiver.send_message(u'%s_dnd' % self.mimeDataText, - url.toLocalFile()) + localFile = unicode(url.toLocalFile()) + if os.path.isfile(localFile): + files.append(localFile) + elif os.path.isdir(localFile): + listing = os.listdir(localFile) + for file in listing: + files.append(os.path.join(localFile,file)) + Receiver.send_message(u'%s_dnd' % self.mimeDataText,files) else: event.ignore() diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 2b2e8c6e3..7852a0d5c 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -341,25 +341,31 @@ class MediaManagerItem(QtGui.QWidget): self.validateAndLoad(files) Receiver.send_message(u'cursor_normal') - def loadFile(self, filename): + def loadFile(self, files): """ - Turn file from Drag and Drop into a array so the Validate code - can runn it. + Turn file from Drag and Drop into an array so the Validate code + can run it. - ``filename`` - The file to be loaded + ``files`` + The list of files to be loaded """ - filename = unicode(filename) - type = filename.split(u'.')[-1] - if type.lower() not in self.onNewFileMasks: - critical_error_message_box( - translate('OpenLP.MediaManagerItem', - 'Invalid File Type'), - unicode(translate('OpenLP.MediaManagerItem', - 'Invalid File %s.\nSuffix not supported')) - % filename) - else: - self.validateAndLoad([filename]) + newFiles = [] + errorShown = False + for file in files: + type = file.split(u'.')[-1] + if type.lower() not in self.onNewFileMasks: + if not errorShown: + critical_error_message_box( + translate('OpenLP.MediaManagerItem', + 'Invalid File Type'), + unicode(translate('OpenLP.MediaManagerItem', + 'Invalid File %s.\nSuffix not supported')) + % file) + errorShown = True + else: + newFiles.append(file) + if file: + self.validateAndLoad(newFiles) def validateAndLoad(self, files): """ @@ -373,14 +379,11 @@ class MediaManagerItem(QtGui.QWidget): for count in range(0, self.listView.count()): names.append(self.listView.item(count).text()) newFiles = [] + duplicatesFound = False for file in files: filename = os.path.split(unicode(file))[1] if filename in names: - critical_error_message_box( - UiStrings().Duplicate, - unicode(translate('OpenLP.MediaManagerItem', - 'Duplicate filename %s.\nThis filename is already in ' - 'the list')) % filename) + duplicatesFound = True else: newFiles.append(file) self.loadList(newFiles) @@ -388,6 +391,11 @@ class MediaManagerItem(QtGui.QWidget): SettingsManager.set_last_dir(self.settingsSection, lastDir) SettingsManager.set_list(self.settingsSection, self.settingsSection, self.getFileList()) + if duplicatesFound: + critical_error_message_box( + UiStrings().Duplicate, + unicode(translate('OpenLP.MediaManagerItem', + 'Duplicate files found on import and ignored.'))) def contextMenu(self, point): item = self.listView.itemAt(point) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 09811ead7..acd420880 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -54,8 +54,6 @@ class ImageMediaItem(MediaManagerItem): QtCore.SIGNAL(u'live_theme_changed'), self.liveThemeChanged) # Allow DnD from the desktop self.listView.activateDnD() - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'images_dnd'), self.loadFile) def retranslateUi(self): self.onNewPrompt = translate('ImagePlugin.MediaItem', diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 54682dbf6..e3c36bd77 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -63,8 +63,6 @@ class MediaMediaItem(MediaManagerItem): self.createPhonon) # Allow DnD from the desktop self.listView.activateDnD() - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'media_dnd'), self.loadFile) def retranslateUi(self): self.onNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media') diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index abd597c6c..85721c65d 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -60,8 +60,6 @@ class PresentationMediaItem(MediaManagerItem): QtCore.SIGNAL(u'mediaitem_presentation_rebuild'), self.rebuild) # Allow DnD from the desktop self.listView.activateDnD() - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'presentations_dnd'), self.loadFile) def retranslateUi(self): """ From af8a89dfd4f1e2f87b1cea18c4514912211bec3e Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Tue, 2 Aug 2011 08:51:41 -0400 Subject: [PATCH 24/64] fixed come comments --- openlp/core/ui/firsttimeform.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 71c18044e..f5a2563e5 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -157,11 +157,11 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): item = self.themesListWidget.item(iter) if item.checkState() == QtCore.Qt.Checked: self.themeComboBox.addItem(item.text()) - #Check if this is a re-run of the wizard. If so, add existing themes to list + # Check if this is a re-run of the wizard. If so, add existing themes to list self.has_run_wizard = QtCore.QSettings().value( u'general/has run wizard', QtCore.QVariant(False)).toBool() if self.has_run_wizard: - #If themes already exist, add them to the list + # If themes already exist, add them to the list self.theme_list = self.parent().themeManagerContents.getThemes() for theme in self.theme_list: index = self.themeComboBox.findText(theme) @@ -170,7 +170,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): default_theme = unicode(QtCore.QSettings().value( u'themes/global theme', QtCore.QVariant(u'')).toString()) - #Pre-select the current default theme + # Pre-select the current default theme index = self.themeComboBox.findText(default_theme) self.themeComboBox.setCurrentIndex(index) elif pageId == FirstTimePage.Progress: From 0b4616542934b24a8a8860aebeee688716e8964f Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 2 Aug 2011 19:17:07 +0100 Subject: [PATCH 25/64] Last set of fixes --- openlp/core/lib/mediamanageritem.py | 11 ++++---- openlp/core/ui/servicemanager.py | 31 +++++++++++++++------ openlp/plugins/songusage/songusageplugin.py | 2 +- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 7852a0d5c..a721fabf6 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -386,11 +386,12 @@ class MediaManagerItem(QtGui.QWidget): duplicatesFound = True else: newFiles.append(file) - self.loadList(newFiles) - lastDir = os.path.split(unicode(files[0]))[0] - SettingsManager.set_last_dir(self.settingsSection, lastDir) - SettingsManager.set_list(self.settingsSection, - self.settingsSection, self.getFileList()) + if newFiles: + self.loadList(newFiles) + lastDir = os.path.split(unicode(files[0]))[0] + SettingsManager.set_last_dir(self.settingsSection, lastDir) + SettingsManager.set_list(self.settingsSection, + self.settingsSection, self.getFileList()) if duplicatesFound: critical_error_message_box( UiStrings().Duplicate, diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 6d86097f2..0755a0143 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -408,20 +408,33 @@ class ServiceManager(QtGui.QWidget): return False self.newFile() - def onLoadServiceClicked(self): + def onLoadServiceClicked(self, loadFile=None): + """ + Loads the service file and saves the existing one it there is one + unchanged + + ``loadFile`` + The service file to the loaded. Will be None is from menu so + selection will be required. + """ if self.isModified(): result = self.saveModifiedService() if result == QtGui.QMessageBox.Cancel: return False elif result == QtGui.QMessageBox.Save: self.saveFile() - fileName = unicode(QtGui.QFileDialog.getOpenFileName(self.mainwindow, - translate('OpenLP.ServiceManager', 'Open File'), - SettingsManager.get_last_dir( - self.mainwindow.serviceSettingsSection), - translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) - if not fileName: - return False + if not loadFile: + fileName = unicode(QtGui.QFileDialog.getOpenFileName( + self.mainwindow, + translate('OpenLP.ServiceManager', 'Open File'), + SettingsManager.get_last_dir( + self.mainwindow.serviceSettingsSection), + translate('OpenLP.ServiceManager', + 'OpenLP Service Files (*.osz)'))) + if not fileName: + return False + else: + fileName = loadFile SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, split_filename(fileName)[0]) self.loadFile(fileName) @@ -1245,7 +1258,7 @@ class ServiceManager(QtGui.QWidget): for url in event.mimeData().urls(): filename = unicode(url.toLocalFile()) if filename.endswith(u'.osz'): - self.loadFile(filename) + self.onLoadServiceClicked(filename) elif event.mimeData().hasText(): plugin = unicode(event.mimeData().text()) item = self.serviceManagerList.itemAt(event.pos()) diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index a657d700d..4ca23aeb0 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -91,8 +91,8 @@ class SongUsagePlugin(Plugin): self.toolsMenu.addAction(self.songUsageMenu.menuAction()) self.songUsageMenu.addAction(self.songUsageStatus) self.songUsageMenu.addSeparator() - self.songUsageMenu.addAction(self.songUsageDelete) self.songUsageMenu.addAction(self.songUsageReport) + self.songUsageMenu.addAction(self.songUsageDelete) self.songUsageActiveButton = QtGui.QToolButton( self.formparent.statusBar) self.songUsageActiveButton.setCheckable(True) From af7ff7c6be8e222d23b7b51abbcc272c85eb01a7 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Wed, 3 Aug 2011 09:19:43 -0400 Subject: [PATCH 26/64] changed some comments, removed a variable using functioin inline --- openlp/core/ui/firsttimeform.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index f5a2563e5..4beebfde6 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -157,20 +157,19 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): item = self.themesListWidget.item(iter) if item.checkState() == QtCore.Qt.Checked: self.themeComboBox.addItem(item.text()) - # Check if this is a re-run of the wizard. If so, add existing themes to list + # Check if this is a re-run of the wizard. self.has_run_wizard = QtCore.QSettings().value( u'general/has run wizard', QtCore.QVariant(False)).toBool() if self.has_run_wizard: - # If themes already exist, add them to the list - self.theme_list = self.parent().themeManagerContents.getThemes() - for theme in self.theme_list: + # Add any existing themes to list. + for theme in self.parent().themeManagerContents.getThemes(): index = self.themeComboBox.findText(theme) if index == -1: self.themeComboBox.addItem(theme) default_theme = unicode(QtCore.QSettings().value( u'themes/global theme', QtCore.QVariant(u'')).toString()) - # Pre-select the current default theme + # Pre-select the current default theme. index = self.themeComboBox.findText(default_theme) self.themeComboBox.setCurrentIndex(index) elif pageId == FirstTimePage.Progress: From 5ff39a7d83cd9c67295dd435bf234a72f77ef340 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 3 Aug 2011 16:52:29 +0100 Subject: [PATCH 27/64] Fix missing() --- openlp/core/lib/listwidgetwithdnd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/lib/listwidgetwithdnd.py b/openlp/core/lib/listwidgetwithdnd.py index 8474821a4..69fb23092 100644 --- a/openlp/core/lib/listwidgetwithdnd.py +++ b/openlp/core/lib/listwidgetwithdnd.py @@ -80,7 +80,7 @@ class ListWidgetWithDnD(QtGui.QListWidget): event.ignore() def dragMoveEvent(self, event): - if event.mimeData().hasUrls: + if event.mimeData().hasUrls(): event.setDropAction(QtCore.Qt.CopyAction) event.accept() else: From 7f440527f84ad96320521691ea31378f536b4dfd Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Wed, 3 Aug 2011 14:49:47 -0400 Subject: [PATCH 28/64] modified servicemanager to check for missing files during service save --- openlp/core/ui/servicemanager.py | 61 ++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 351e5bbc6..721d50d6e 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -465,10 +465,13 @@ class ServiceManager(QtGui.QWidget): service = [] write_list = [] total_size = 0 + abort_save = False Receiver.send_message(u'cursor_busy') # Number of items + 1 to zip it self.mainwindow.displayProgressBar(len(self.serviceItems) + 1) for item in self.serviceItems: + if abort_save: + continue self.mainwindow.incrementProgressBar() service.append({u'serviceitem': item[u'service_item'].get_service_repr()}) @@ -482,25 +485,45 @@ class ServiceManager(QtGui.QWidget): # Only write a file once if path_from in write_list: continue - file_size = os.path.getsize(path_from) - size_limit = 52428800 # 50MiB - #if file_size > size_limit: - # # File exeeds size_limit bytes, ask user - # message = unicode(translate('OpenLP.ServiceManager', - # 'Do you want to include \n%.1f MB file "%s"\n' - # 'into the service file?\nThis may take some time.\n\n' - # 'Please note that you need to\ntake care of that file' - # ' yourself,\nif you leave it out.')) % \ - # (file_size/1048576, os.path.split(path_from)[1]) - # ans = QtGui.QMessageBox.question(self.mainwindow, - # translate('OpenLP.ServiceManager', 'Including Large ' - # 'File'), message, QtGui.QMessageBox.StandardButtons( - # QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel), - # QtGui.QMessageBox.Ok) - # if ans == QtGui.QMessageBox.Cancel: - # continue - write_list.append(path_from) - total_size += file_size + if not os.path.isfile(path_from): + Receiver.send_message(u'cursor_normal') + title = unicode(translate('OpenLP.ServiceManager', + 'Service File Missing')) + message = unicode(translate('OpenLP.ServiceManager', + 'File missing from service\n\n %s \n\n' + 'Continue saving?' % path_from )) + ans = QtGui.QMessageBox.critical(self, title, message, + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) + if ans == QtGui.QMessageBox.No: + abort_save = True + continue + Receiver.send_message(u'cursor_busy') + else: + file_size = os.path.getsize(path_from) + size_limit = 52428800 # 50MiB + #if file_size > size_limit: + # # File exeeds size_limit bytes, ask user + # message = unicode(translate('OpenLP.ServiceManager', + # 'Do you want to include \n%.1f MB file "%s"\n' + # 'into the service file?\nThis may take some time.\n\n' + # 'Please note that you need to\ntake care of that file' + # ' yourself,\nif you leave it out.')) % \ + # (file_size/1048576, os.path.split(path_from)[1]) + # ans = QtGui.QMessageBox.question(self.mainwindow, + # translate('OpenLP.ServiceManager', 'Including Large ' + # 'File'), message, QtGui.QMessageBox.StandardButtons( + # QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel), + # QtGui.QMessageBox.Ok) + # if ans == QtGui.QMessageBox.Cancel: + # continue + write_list.append(path_from) + total_size += file_size + if abort_save: + self._fileName = u'' + self.mainwindow.finishedProgressBar() + Receiver.send_message(u'cursor_normal') + return False log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' % total_size) service_content = cPickle.dumps(service) From b4e776b92c7d96acc69fe0815fe6f0afdde4dc02 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Thu, 4 Aug 2011 09:43:05 -0400 Subject: [PATCH 29/64] removed un-needed code --- openlp/core/ui/servicemanager.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 721d50d6e..8b5d93c5e 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -485,7 +485,7 @@ class ServiceManager(QtGui.QWidget): # Only write a file once if path_from in write_list: continue - if not os.path.isfile(path_from): + if not os.path.exists(path_from): Receiver.send_message(u'cursor_normal') title = unicode(translate('OpenLP.ServiceManager', 'Service File Missing')) @@ -520,7 +520,6 @@ class ServiceManager(QtGui.QWidget): write_list.append(path_from) total_size += file_size if abort_save: - self._fileName = u'' self.mainwindow.finishedProgressBar() Receiver.send_message(u'cursor_normal') return False From 8876a12deb08f86cce1447957b892115b39ed645 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 5 Aug 2011 09:41:20 +0200 Subject: [PATCH 30/64] updated docstring --- openlp/core/lib/renderer.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index ce7f84778..b41e89c26 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -243,19 +243,17 @@ class Renderer(object): new_pages.append(page) return new_pages - def _calculate_default(self, screen): + def _calculate_default(self, size): """ Calculate the default dimentions of the screen. - ``screen`` - The screen to calculate the default of. + ``size`` + The screen's size to calculate the default of (``QtCore.QRect``). """ - log.debug(u'_calculate default %s', screen) - self.width = screen.width() - self.height = screen.height() + self.width = size.width() + self.height = size.height() self.screen_ratio = float(self.height) / float(self.width) - log.debug(u'calculate default %d, %d, %f', - self.width, self.height, self.screen_ratio) + log.debug(u'_calculate default %s, %f' % (size, self.screen_ratio)) # 90% is start of footer self.footer_start = int(self.height * 0.90) @@ -316,8 +314,8 @@ class Renderer(object): // work as expected. return document.all.main.offsetHeight; } - +
""" % \ (build_lyrics_format_css(self.theme_data, self.page_width, self.page_height), build_lyrics_outline_css(self.theme_data)) From f4eb21eb05bdd29dfad053731f243ae40a4669ee Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 5 Aug 2011 10:10:53 +0200 Subject: [PATCH 31/64] more docstrings, clean ups --- openlp/core/lib/renderer.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index b41e89c26..911891693 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -222,7 +222,7 @@ class Renderer(object): line_end = u' ' # Bibles if item.is_capable(ItemCapabilities.AllowsWordSplit): - pages = self._paginate_slide_words(text, line_end) + pages = self._paginate_slide_words(text.split(u'\n'), line_end) else: # Clean up line endings. lines = self._lines_split(text) @@ -310,9 +310,10 @@ class Renderer(object): function show_text(newtext) { var main = document.getElementById('main'); main.innerHTML = newtext; - // We have to return something, otherwise the renderer does not - // work as expected. - return document.all.main.offsetHeight; + // We need to be sure that the page is loaded, that is why we + // return the element's height (even though we do not use the + // returned value). + return main.offsetHeight; } @@ -325,6 +326,8 @@ class Renderer(object): """ Figure out how much text can appear on a slide, using the current theme settings. + **Note:** The smallest possible "unit" of text for a slide is one line. + If the line is too long it will be cut off when displayed. ``lines`` The text to be fitted on the slide split into lines. @@ -349,24 +352,25 @@ class Renderer(object): log.debug(u'_paginate_slide - End') return formatted - def _paginate_slide_words(self, text, line_end): + def _paginate_slide_words(self, lines, line_end): """ Figure out how much text can appear on a slide, using the current - theme settings. This version is to handle text which needs to be split - into words to get it to fit. + theme settings. + **Note:** The smallest possible "unit" of text for a slide is one word. + If one line is too long it will be processed word by word. This is + sometimes need for **bible** verses. - ``text`` - The words to be fitted on the slide split into lines. + ``lines`` + The text to be fitted on the slide split into lines. ``line_end`` The text added after each line. Either ``u' '`` or ``u'
``. - This is needed for bibles. + This is needed for **bibles**. """ log.debug(u'_paginate_slide_words - Start') formatted = [] previous_html = u'' previous_raw = u'' - lines = text.split(u'\n') for line in lines: line = line.strip() html_line = expand_tags(line) @@ -481,7 +485,7 @@ class Renderer(object): def _text_fits_on_slide(self, text): """ - Checks if the given ``text`` fits on a slide. If it does, ``True`` is + Checks if the given ``text`` fits on a slide. If it does ``True`` is returned, otherwise ``False``. ``text`` From d8008df9029f610f3be1f8b6c648f208ab45150c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 5 Aug 2011 10:43:32 +0200 Subject: [PATCH 32/64] do not pass instance variable as argument --- openlp/core/lib/renderer.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 911891693..3174e4df8 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -83,7 +83,7 @@ class Renderer(object): Updates the render manager's information about the current screen. """ log.debug(u'Update Display') - self._calculate_default(self.screens.current[u'size']) + self._calculate_default() if self.display: self.display.close() self.display = MainDisplay(None, self.imageManager, False) @@ -161,7 +161,7 @@ class Renderer(object): self.theme_data = override_theme else: self.theme_data = self.themeManager.getThemeData(theme) - self._calculate_default(self.screens.current[u'size']) + self._calculate_default() self._build_text_rectangle(self.theme_data) # if No file do not update cache if self.theme_data.background_filename: @@ -183,7 +183,7 @@ class Renderer(object): # save value for use in format_slide self.force_page = force_page # set the default image size for previews - self._calculate_default(self.screens.preview[u'size']) + self._calculate_default() # build a service item to generate preview serviceItem = ServiceItem() serviceItem.theme = theme_data @@ -201,7 +201,7 @@ class Renderer(object): raw_html = serviceItem.get_rendered_frame(0) preview = self.display.text(raw_html) # Reset the real screen size for subsequent render requests - self._calculate_default(self.screens.current[u'size']) + self._calculate_default() return preview self.force_page = False @@ -243,13 +243,11 @@ class Renderer(object): new_pages.append(page) return new_pages - def _calculate_default(self, size): + def _calculate_default(self): """ Calculate the default dimentions of the screen. - - ``size`` - The screen's size to calculate the default of (``QtCore.QRect``). """ + size = self.screens.current[u'size'] self.width = size.width() self.height = size.height() self.screen_ratio = float(self.height) / float(self.width) From 6ce4e7beab8b5fd4ca13db5d4109d88e0d1aaf51 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 5 Aug 2011 10:47:31 +0200 Subject: [PATCH 33/64] changed varialbe name --- openlp/core/lib/renderer.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 3174e4df8..ac7e95c4c 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -247,11 +247,12 @@ class Renderer(object): """ Calculate the default dimentions of the screen. """ - size = self.screens.current[u'size'] - self.width = size.width() - self.height = size.height() + screen_size = self.screens.current[u'size'] + self.width = screen_size.width() + self.height = screen_size.height() self.screen_ratio = float(self.height) / float(self.width) - log.debug(u'_calculate default %s, %f' % (size, self.screen_ratio)) + log.debug(u'_calculate default %s, %f' % (screen_size, + self.screen_ratio)) # 90% is start of footer self.footer_start = int(self.height * 0.90) From 6c7c27a7c9720539655c32c90cc36c2413f55b85 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 5 Aug 2011 13:21:39 +0200 Subject: [PATCH 34/64] fixed bug #816186; fixed comments; fixed list comprehension Fixes: https://launchpad.net/bugs/816186 --- openlp/plugins/songs/forms/songimportform.py | 3 +- openlp/plugins/songs/lib/olp1import.py | 37 +++++++++++++------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 4ab60d360..52524b838 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -699,7 +699,8 @@ class SongImportForm(OpenLPWizard): elif source_format == SongFormat.OpenLP1: # Import an openlp.org database importer = self.plugin.importSongs(SongFormat.OpenLP1, - filename=unicode(self.openLP1FilenameEdit.text()) + filename=unicode(self.openLP1FilenameEdit.text()), + plugin=self.plugin ) elif source_format == SongFormat.OpenLyrics: # Import OpenLyrics songs diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 423f5ece0..de7264a5b 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -57,6 +57,8 @@ class OpenLP1SongImport(SongImport): The database providing the data to import. """ SongImport.__init__(self, manager, **kwargs) + self.available_themes = \ + kwargs[u'plugin'].formparent.themeManagerContents.getThemes() def do_import(self): """ @@ -70,27 +72,34 @@ class OpenLP1SongImport(SongImport): encoding = self.get_encoding() if not encoding: return - # Connect to the database + # Connect to the database. connection = sqlite.connect(self.import_source, mode=0444, encoding=(encoding, 'replace')) cursor = connection.cursor() - # Determine if we're using a new or an old DB + # Determine if we're using a new or an old DB. cursor.execute(u'SELECT name FROM sqlite_master ' u'WHERE type = \'table\' AND name = \'tracks\'') new_db = len(cursor.fetchall()) > 0 - # "cache" our list of authors + # "cache" our list of authors. cursor.execute(u'-- types int, unicode') cursor.execute(u'SELECT authorid, authorname FROM authors') authors = cursor.fetchall() if new_db: - # "cache" our list of tracks + # "cache" our list of tracks. cursor.execute(u'-- types int, unicode') cursor.execute(u'SELECT trackid, fulltrackname FROM tracks') tracks = cursor.fetchall() - # Import the songs - cursor.execute(u'-- types int, unicode, unicode, unicode') + # "cache" our list of themes. + cursor.execute(u'-- types int, unicode') + cursor.execute(u'SELECT settingsid, settingsname FROM settings') + themes = {} + for theme_id, theme_name in cursor.fetchall(): + if theme_name in self.available_themes: + themes[theme_id] = theme_name + # Import the songs. + cursor.execute(u'-- types int, unicode, unicode, unicode, int') cursor.execute(u'SELECT songid, songtitle, lyrics || \'\' AS lyrics, ' - u'copyrightinfo FROM songs') + u'copyrightinfo, settingsid FROM songs') songs = cursor.fetchall() self.import_wizard.progressBar.setMaximum(len(songs)) for song in songs: @@ -101,8 +110,12 @@ class OpenLP1SongImport(SongImport): self.title = song[1] lyrics = song[2].replace(u'\r\n', u'\n') self.add_copyright(song[3]) + if themes.has_key(song[4]): + self.theme_name = themes[song[4]] verses = lyrics.split(u'\n\n') - [self.add_verse(verse.strip()) for verse in verses if verse.strip()] + for verse in verses: + if verse.strip(): + self.add_verse(verse.strip()) cursor.execute(u'-- types int') cursor.execute(u'SELECT authorid FROM songauthors ' u'WHERE songid = %s' % song_id) @@ -137,12 +150,12 @@ class OpenLP1SongImport(SongImport): """ Detect character encoding of an openlp.org 1.x song database. """ - # Connect to the database + # Connect to the database. connection = sqlite.connect(self.import_source, mode=0444) cursor = connection.cursor() detector = UniversalDetector() - # detect charset by authors + # Detect charset by authors. cursor.execute(u'SELECT authorname FROM authors') authors = cursor.fetchall() for author in authors: @@ -150,7 +163,7 @@ class OpenLP1SongImport(SongImport): if detector.done: detector.close() return detector.result[u'encoding'] - # detect charset by songs + # Detect charset by songs. cursor.execute(u'SELECT songtitle, copyrightinfo, ' u'lyrics || \'\' AS lyrics FROM songs') songs = cursor.fetchall() @@ -160,7 +173,7 @@ class OpenLP1SongImport(SongImport): if detector.done: detector.close() return detector.result[u'encoding'] - # detect charset by songs + # Detect charset by songs. cursor.execute(u'SELECT name FROM sqlite_master ' u'WHERE type = \'table\' AND name = \'tracks\'') if len(cursor.fetchall()) > 0: From a66f7f3365a1fa59f07441469ff8e258b4485242 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Fri, 5 Aug 2011 17:53:56 -0400 Subject: [PATCH 35/64] removed un-needed commented code. fixed dialog "no" answer --- openlp/core/ui/servicemanager.py | 31 ++++--------------------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 8b5d93c5e..6d4ae6ec0 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -465,13 +465,10 @@ class ServiceManager(QtGui.QWidget): service = [] write_list = [] total_size = 0 - abort_save = False Receiver.send_message(u'cursor_busy') # Number of items + 1 to zip it self.mainwindow.displayProgressBar(len(self.serviceItems) + 1) for item in self.serviceItems: - if abort_save: - continue self.mainwindow.incrementProgressBar() service.append({u'serviceitem': item[u'service_item'].get_service_repr()}) @@ -492,37 +489,17 @@ class ServiceManager(QtGui.QWidget): message = unicode(translate('OpenLP.ServiceManager', 'File missing from service\n\n %s \n\n' 'Continue saving?' % path_from )) - ans = QtGui.QMessageBox.critical(self, title, message, + answer = QtGui.QMessageBox.critical(self, title, message, QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) - if ans == QtGui.QMessageBox.No: - abort_save = True - continue + if answer == QtGui.QMessageBox.No: + self.mainwindow.finishedProgressBar() + return False Receiver.send_message(u'cursor_busy') else: file_size = os.path.getsize(path_from) - size_limit = 52428800 # 50MiB - #if file_size > size_limit: - # # File exeeds size_limit bytes, ask user - # message = unicode(translate('OpenLP.ServiceManager', - # 'Do you want to include \n%.1f MB file "%s"\n' - # 'into the service file?\nThis may take some time.\n\n' - # 'Please note that you need to\ntake care of that file' - # ' yourself,\nif you leave it out.')) % \ - # (file_size/1048576, os.path.split(path_from)[1]) - # ans = QtGui.QMessageBox.question(self.mainwindow, - # translate('OpenLP.ServiceManager', 'Including Large ' - # 'File'), message, QtGui.QMessageBox.StandardButtons( - # QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel), - # QtGui.QMessageBox.Ok) - # if ans == QtGui.QMessageBox.Cancel: - # continue write_list.append(path_from) total_size += file_size - if abort_save: - self.mainwindow.finishedProgressBar() - Receiver.send_message(u'cursor_normal') - return False log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' % total_size) service_content = cPickle.dumps(service) From 271e5341f88989c55eb27abf5a881ed2fe278ac0 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Fri, 5 Aug 2011 18:09:51 -0400 Subject: [PATCH 36/64] modified code to delete/move item selected, not first match in list --- openlp/core/ui/serviceitemeditform.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/serviceitemeditform.py b/openlp/core/ui/serviceitemeditform.py index f19638e43..974133c3d 100644 --- a/openlp/core/ui/serviceitemeditform.py +++ b/openlp/core/ui/serviceitemeditform.py @@ -79,7 +79,7 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): if not item: return row = self.listWidget.row(item) - self.itemList.remove(self.itemList[row]) + self.itemList.pop(row) self.loadData() if row == self.listWidget.count(): self.listWidget.setCurrentRow(row - 1) @@ -109,7 +109,7 @@ class ServiceItemEditForm(QtGui.QDialog, Ui_ServiceItemEditDialog): return row = self.listWidget.row(item) temp = self.itemList[row] - self.itemList.remove(self.itemList[row]) + self.itemList.pop(row) if direction == u'up': row -= 1 else: From 2c6d14cfc8fbd68a2b942d255c5d283584e7aeaf Mon Sep 17 00:00:00 2001 From: Chris Blake Date: Mon, 8 Aug 2011 12:59:56 -0400 Subject: [PATCH 37/64] fixed bug #817674 'Export Song - Song list appears to be random order ' Fixes: https://launchpad.net/bugs/817674 --- openlp/plugins/songs/forms/songexportform.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 3432c8846..1e86c74a1 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -249,6 +249,7 @@ class SongExportForm(OpenLPWizard): # Load the list of songs. Receiver.send_message(u'cursor_busy') songs = self.plugin.manager.get_all_objects(Song) + songs.sort(key=lambda custom: custom.title.lower()) for song in songs: authors = u', '.join([author.display_name for author in song.authors]) From e75631d7f579e2f4990f89626a310703801c238a Mon Sep 17 00:00:00 2001 From: Chris Blake Date: Mon, 8 Aug 2011 13:30:45 -0400 Subject: [PATCH 38/64] fixed bug #817674 'Export Song - Song list appears to be random order ' Fixes: https://launchpad.net/bugs/817674 --- openlp/plugins/songs/forms/songexportform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 1e86c74a1..a654db486 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -249,7 +249,7 @@ class SongExportForm(OpenLPWizard): # Load the list of songs. Receiver.send_message(u'cursor_busy') songs = self.plugin.manager.get_all_objects(Song) - songs.sort(key=lambda custom: custom.title.lower()) + songs.sort(key=lambda song: song.title.lower()) for song in songs: authors = u', '.join([author.display_name for author in song.authors]) From 95f75ce26664d501c60a89263aceca8467f08be3 Mon Sep 17 00:00:00 2001 From: Chris Blake Date: Mon, 8 Aug 2011 15:15:45 -0400 Subject: [PATCH 39/64] fixed bug #817674 'Export Song - Song list appears to be random order ' Fixes: https://launchpad.net/bugs/817674 --- openlp/plugins/songs/forms/songexportform.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index a654db486..90c3b0275 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -28,6 +28,7 @@ The :mod:`songexportform` module provides the wizard for exporting songs to the OpenLyrics format. """ +import locale import logging from PyQt4 import QtCore, QtGui @@ -249,7 +250,7 @@ class SongExportForm(OpenLPWizard): # Load the list of songs. Receiver.send_message(u'cursor_busy') songs = self.plugin.manager.get_all_objects(Song) - songs.sort(key=lambda song: song.title.lower()) + songs.sort(cmp=locale.strcoll, key=lambda song: song.title.lower()) for song in songs: authors = u', '.join([author.display_name for author in song.authors]) From c0978d8e2235b88ae950fad20416890e2b0b4766 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Wed, 10 Aug 2011 17:29:44 -0400 Subject: [PATCH 40/64] Added code to skip-all missing files during service save --- openlp/core/ui/servicemanager.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 6d4ae6ec0..bd4035d54 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -474,6 +474,7 @@ class ServiceManager(QtGui.QWidget): item[u'service_item'].get_service_repr()}) if not item[u'service_item'].uses_file(): continue + skipMissing = False for frame in item[u'service_item'].get_frames(): if item[u'service_item'].is_image(): path_from = frame[u'path'] @@ -483,19 +484,24 @@ class ServiceManager(QtGui.QWidget): if path_from in write_list: continue if not os.path.exists(path_from): - Receiver.send_message(u'cursor_normal') - title = unicode(translate('OpenLP.ServiceManager', - 'Service File Missing')) - message = unicode(translate('OpenLP.ServiceManager', - 'File missing from service\n\n %s \n\n' - 'Continue saving?' % path_from )) - answer = QtGui.QMessageBox.critical(self, title, message, - QtGui.QMessageBox.StandardButtons( - QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) - if answer == QtGui.QMessageBox.No: - self.mainwindow.finishedProgressBar() - return False - Receiver.send_message(u'cursor_busy') + if not skipMissing: + Receiver.send_message(u'cursor_normal') + title = unicode(translate('OpenLP.ServiceManager', + 'Service File Missing')) + message = unicode(translate('OpenLP.ServiceManager', + 'File missing from service\n\n %s \n\n' + 'Continue saving?' % path_from )) + answer = QtGui.QMessageBox.critical(self, title, + message, + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No | + QtGui.QMessageBox.YesToAll)) + if answer == QtGui.QMessageBox.No: + self.mainwindow.finishedProgressBar() + return False + if answer == QtGui.QMessageBox.YesToAll: + skipMissing = True + Receiver.send_message(u'cursor_busy') else: file_size = os.path.getsize(path_from) write_list.append(path_from) From ba02eb6a98a096d2895330107b465611264c934a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 11 Aug 2011 11:01:25 +0200 Subject: [PATCH 41/64] moved recent files to a menu (bug #818794) Fixes: https://launchpad.net/bugs/818794 --- openlp/core/ui/mainwindow.py | 57 +++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c7ff6c52a..510a94dfd 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -109,6 +109,8 @@ class Ui_MainWindow(object): self.menuBar.setObjectName(u'menuBar') self.fileMenu = QtGui.QMenu(self.menuBar) self.fileMenu.setObjectName(u'fileMenu') + self.recentFilesMenu = QtGui.QMenu(self.fileMenu) + self.recentFilesMenu.setObjectName(u'recentFilesMenu') self.fileImportMenu = QtGui.QMenu(self.fileMenu) self.fileImportMenu.setObjectName(u'fileImportMenu') self.fileExportMenu = QtGui.QMenu(self.fileMenu) @@ -302,10 +304,11 @@ class Ui_MainWindow(object): (self.importThemeItem, self.importLanguageItem)) add_actions(self.fileExportMenu, (self.exportThemeItem, self.exportLanguageItem)) - self.fileMenuActions = (self.fileNewItem, self.fileOpenItem, + add_actions(self.fileMenu, (self.fileNewItem, self.fileOpenItem, self.fileSaveItem, self.fileSaveAsItem, None, - self.printServiceOrderItem, None, self.fileImportMenu.menuAction(), - self.fileExportMenu.menuAction(), self.fileExitItem) + self.recentFilesMenu.menuAction(), None, self.printServiceOrderItem, + None, self.fileImportMenu.menuAction(), + self.fileExportMenu.menuAction(), self.fileExitItem)) add_actions(self.viewModeMenu, (self.modeDefaultItem, self.modeSetupItem, self.modeLiveItem)) add_actions(self.viewMenu, (self.viewModeMenu.menuAction(), @@ -346,7 +349,7 @@ class Ui_MainWindow(object): self.mediaToolBox.setCurrentIndex(0) # Connect up some signals and slots QtCore.QObject.connect(self.fileMenu, - QtCore.SIGNAL(u'aboutToShow()'), self.updateFileMenu) + QtCore.SIGNAL(u'aboutToShow()'), self.updateRecentFilesMenu) QtCore.QMetaObject.connectSlotsByName(mainWindow) # Hide the entry, as it does not have any functionality yet. self.toolsAddToolItem.setVisible(False) @@ -363,6 +366,8 @@ class Ui_MainWindow(object): self.fileMenu.setTitle(translate('OpenLP.MainWindow', '&File')) self.fileImportMenu.setTitle(translate('OpenLP.MainWindow', '&Import')) self.fileExportMenu.setTitle(translate('OpenLP.MainWindow', '&Export')) + self.recentFilesMenu.setTitle( + translate('OpenLP.MainWindow', '&Recent Files')) self.viewMenu.setTitle(translate('OpenLP.MainWindow', '&View')) self.viewModeMenu.setTitle(translate('OpenLP.MainWindow', 'M&ode')) self.toolsMenu.setTitle(translate('OpenLP.MainWindow', '&Tools')) @@ -534,8 +539,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.setupUi(self) # Load settings after setupUi so default UI sizes are overwritten self.loadSettings() - # Once settings are loaded update FileMenu with recentFiles - self.updateFileMenu() + # Once settings are loaded update the menu with the recent files. + self.updateRecentFilesMenu() self.pluginForm = PluginForm(self) # Set up signals and slots QtCore.QObject.connect(self.importThemeItem, @@ -1137,30 +1142,36 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.QVariant(self.controlSplitter.saveState())) settings.endGroup() - def updateFileMenu(self): + def updateRecentFilesMenu(self): """ - Updates the file menu with the latest list of service files accessed. + Updates the recent file menu with the latest list of service files + accessed. """ recentFileCount = QtCore.QSettings().value( u'advanced/recent file count', QtCore.QVariant(4)).toInt()[0] - self.fileMenu.clear() - add_actions(self.fileMenu, self.fileMenuActions[:-1]) existingRecentFiles = [recentFile for recentFile in self.recentFiles if QtCore.QFile.exists(recentFile)] recentFilesToDisplay = existingRecentFiles[0:recentFileCount] - if recentFilesToDisplay: - self.fileMenu.addSeparator() - for fileId, filename in enumerate(recentFilesToDisplay): - log.debug('Recent file name: %s', filename) - action = base_action(self, u'') - action.setText(u'&%d %s' % - (fileId + 1, QtCore.QFileInfo(filename).fileName())) - action.setData(QtCore.QVariant(filename)) - self.connect(action, QtCore.SIGNAL(u'triggered()'), - self.serviceManagerContents.onRecentServiceClicked) - self.fileMenu.addAction(action) - self.fileMenu.addSeparator() - self.fileMenu.addAction(self.fileMenuActions[-1]) + self.recentFilesMenu.clear() + for fileId, filename in enumerate(recentFilesToDisplay): + log.debug('Recent file name: %s', filename) + action = base_action(self, u'') + action.setText(u'&%d %s' % + (fileId + 1, QtCore.QFileInfo(filename).fileName())) + action.setData(QtCore.QVariant(filename)) + self.connect(action, QtCore.SIGNAL(u'triggered()'), + self.serviceManagerContents.onRecentServiceClicked) + self.recentFilesMenu.addAction(action) + clearRecentFilesAction = base_action(self, u'') + clearRecentFilesAction.setText( + translate('OpenLP.MainWindow', 'Clear List', + 'Clear List of recent files')) + clearRecentFilesAction.setStatusTip( + translate('OpenLP.MainWindow', 'Clear the list of recent files.')) + add_actions(self.recentFilesMenu, (None, clearRecentFilesAction)) + self.connect(clearRecentFilesAction, QtCore.SIGNAL(u'triggered()'), + self.recentFiles.clear) + clearRecentFilesAction.setEnabled(not self.recentFiles.isEmpty()) def addRecentFile(self, filename): """ From 0924bfc246393047601439b722ae47068f124ee5 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 12 Aug 2011 15:11:30 +0200 Subject: [PATCH 42/64] fixed bug #804747; clean ups Fixes: https://launchpad.net/bugs/804747 --- openlp/core/lib/eventreceiver.py | 2 +- openlp/core/ui/mainwindow.py | 7 +- .../plugins/bibles/forms/bibleupgradeform.py | 113 +++++++----------- openlp/plugins/bibles/lib/db.py | 57 ++++----- openlp/plugins/bibles/lib/manager.py | 10 +- openlp/plugins/bibles/lib/mediaitem.py | 2 +- 6 files changed, 79 insertions(+), 112 deletions(-) diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index 7c0115f89..abd57721b 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -247,7 +247,7 @@ class EventReceiver(QtCore.QObject): ``msg`` Defaults to *None*. The message to send with the event. """ - log.debug(u'Event %s passed with payload %s' % (event, msg)) + #log.debug(u'Event %s passed with payload %s' % (event, msg)) self.emit(QtCore.SIGNAL(event), msg) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c7ff6c52a..cef510a81 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -28,6 +28,7 @@ import logging import os import sys +import shutil from tempfile import gettempdir from PyQt4 import QtCore, QtGui @@ -721,11 +722,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): plugin.firstTime() Receiver.send_message(u'openlp_process_events') temp_dir = os.path.join(unicode(gettempdir()), u'openlp') - if not os.path.exists(temp_dir): - return - for filename in os.listdir(temp_dir): - delete_file(os.path.join(temp_dir, filename)) - os.removedirs(temp_dir) + shutil.rmtree(temp_dir, True) def onFirstTimeWizardClicked(self): """ diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 615d4231e..1ce938b3c 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -29,6 +29,7 @@ The bible import functions for OpenLP import logging import os import shutil +from tempfile import gettempdir from PyQt4 import QtCore, QtGui @@ -124,7 +125,7 @@ class BibleUpgradeForm(OpenLPWizard): self.preWizard() self.performWizard() self.postWizard() - elif self.page(pageId) == self.selectPage and self.maxBibles == 0: + elif self.page(pageId) == self.selectPage and not self.files: self.next() def onBackupBrowseButtonClicked(self): @@ -425,9 +426,13 @@ class BibleUpgradeForm(OpenLPWizard): return False return True elif self.currentPage() == self.selectPage: + temp_dir = os.path.join(gettempdir(), u'openlp') + check_directory_exists(temp_dir) for number, filename in enumerate(self.files): if not self.checkBox[number].checkState() == QtCore.Qt.Checked: continue + # Move bibles to temp dir. + shutil.move(os.path.join(self.path, filename[0]), temp_dir) version_name = unicode(self.versionNameEdit[number].text()) if not version_name: critical_error_message_box(UiStrings().EmptyField, @@ -435,37 +440,6 @@ class BibleUpgradeForm(OpenLPWizard): 'You need to specify a version name for your Bible.')) self.versionNameEdit[number].setFocus() return False - elif self.manager.exists(version_name): - critical_error_message_box( - translate('BiblesPlugin.UpgradeWizardForm', - 'Bible Exists'), - translate('BiblesPlugin.UpgradeWizardForm', - 'This Bible already exists. Please upgrade ' - 'a different Bible, delete the existing one or ' - 'uncheck.')) - self.versionNameEdit[number].setFocus() - return False - elif os.path.exists(os.path.join(self.path, clean_filename( - version_name))) and version_name == filename[1]: - newfilename = u'old_database_%s' % filename[0] - if not os.path.exists(os.path.join(self.path, - newfilename)): - os.rename(os.path.join(self.path, filename[0]), - os.path.join(self.path, newfilename)) - self.files[number] = [newfilename, filename[1]] - continue - else: - critical_error_message_box( - translate('BiblesPlugin.UpgradeWizardForm', - 'Bible Exists'), - translate('BiblesPlugin.UpgradeWizardForm', - 'This Bible already exists. Please upgrade ' - 'a different Bible, delete the existing one or ' - 'uncheck.')) - self.verticalWidget[number].show() - self.formWidget[number].show() - self.versionNameEdit[number].setFocus() - return False elif os.path.exists(os.path.join(self.path, clean_filename(version_name))): critical_error_message_box( @@ -495,7 +469,6 @@ class BibleUpgradeForm(OpenLPWizard): self.files = self.manager.old_bible_databases self.addScrollArea() self.retranslateUi() - self.maxBibles = len(self.files) for number, filename in enumerate(self.files): self.checkBox[number].setCheckState(QtCore.Qt.Checked) oldname = filename[1] @@ -516,9 +489,8 @@ class BibleUpgradeForm(OpenLPWizard): Prepare the UI for the upgrade. """ OpenLPWizard.preWizard(self) - self.progressLabel.setText(translate( - 'BiblesPlugin.UpgradeWizardForm', - 'Starting upgrade...')) + self.progressLabel.setText( + translate('BiblesPlugin.UpgradeWizardForm', 'Starting upgrade...')) Receiver.send_message(u'openlp_process_events') def performWizard(self): @@ -527,46 +499,47 @@ class BibleUpgradeForm(OpenLPWizard): """ self.include_webbible = False proxy_server = None - if self.maxBibles == 0: + if not self.files: self.progressLabel.setText( translate('BiblesPlugin.UpgradeWizardForm', 'There are no ' 'Bibles that need to be upgraded.')) self.progressBar.hide() return - self.maxBibles = 0 + max_bibles = 0 for number, file in enumerate(self.files): if self.checkBox[number].checkState() == QtCore.Qt.Checked: - self.maxBibles += 1 - number = 0 - for biblenumber, filename in enumerate(self.files): + max_bibles += 1 + temp_dir = os.path.join(gettempdir(), u'openlp') + for number, filename in enumerate(self.files): if self.stop_import_flag: bible_failed = True break bible_failed = False - self.success[biblenumber] = False - if not self.checkBox[biblenumber].checkState() == QtCore.Qt.Checked: + self.success[number] = False + if not self.checkBox[number].checkState() == QtCore.Qt.Checked: continue self.progressBar.reset() - oldbible = OldBibleDB(self.mediaItem, path=self.path, + oldbible = OldBibleDB(self.mediaItem, path=temp_dir, file=filename[0]) name = filename[1] if name is None: + print u'no Name!!!' + # FIXME: ? delete_file(os.path.join(self.path, filename[0])) self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % - (number + 1, self.maxBibles, name), + (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) - number += 1 continue self.progressLabel.setText(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) % - (number + 1, self.maxBibles, name)) + (number + 1, max_bibles, name)) if os.path.exists(os.path.join(self.path, filename[0])): - name = unicode(self.versionNameEdit[biblenumber].text()) + name = unicode(self.versionNameEdit[number].text()) self.newbibles[number] = BibleDB(self.mediaItem, path=self.path, - name=name) + name=name, file=filename[0]) self.newbibles[number].register(self.plugin.upgrade_wizard) metadata = oldbible.get_metadata() webbible = False @@ -595,7 +568,7 @@ class BibleUpgradeForm(OpenLPWizard): u'name: "%s" failed' % ( meta_data[u'download source'], meta_data[u'download name'])) - delete_database(self.path, clean_filename(name)) + delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] critical_error_message_box( translate('BiblesPlugin.UpgradeWizardForm', @@ -606,9 +579,8 @@ class BibleUpgradeForm(OpenLPWizard): self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % - (number + 1, self.maxBibles, name), + (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) - number += 1 continue bible = BiblesResourcesDB.get_webbible( meta_data[u'download name'], @@ -621,14 +593,13 @@ class BibleUpgradeForm(OpenLPWizard): language_id = self.newbibles[number].get_language(name) if not language_id: log.warn(u'Upgrading from "%s" failed' % filename[0]) - delete_database(self.path, clean_filename(name)) + delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % - (number + 1, self.maxBibles, name), + (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) - number += 1 continue self.progressBar.setMaximum(len(books)) for book in books: @@ -639,7 +610,7 @@ class BibleUpgradeForm(OpenLPWizard): 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\n' 'Upgrading %s ...')) % - (number + 1, self.maxBibles, name, book)) + (number + 1, max_bibles, name, book)) book_ref_id = self.newbibles[number].\ get_book_ref_id_by_name(book, len(books), language_id) if not book_ref_id: @@ -647,7 +618,7 @@ class BibleUpgradeForm(OpenLPWizard): u'name: "%s" aborted by user' % ( meta_data[u'download source'], meta_data[u'download name'])) - delete_database(self.path, clean_filename(name)) + delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] bible_failed = True break @@ -678,14 +649,13 @@ class BibleUpgradeForm(OpenLPWizard): language_id = self.newbibles[number].get_language(name) if not language_id: log.warn(u'Upgrading books from "%s" failed' % name) - delete_database(self.path, clean_filename(name)) + delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % - (number + 1, self.maxBibles, name), + (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) - number += 1 continue books = oldbible.get_books() self.progressBar.setMaximum(len(books)) @@ -697,14 +667,14 @@ class BibleUpgradeForm(OpenLPWizard): 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\n' 'Upgrading %s ...')) % - (number + 1, self.maxBibles, name, book[u'name'])) + (number + 1, max_bibles, name, book[u'name'])) book_ref_id = self.newbibles[number].\ get_book_ref_id_by_name(book[u'name'], len(books), language_id) if not book_ref_id: log.warn(u'Upgrading books from %s " '\ 'failed - aborted by user' % name) - delete_database(self.path, clean_filename(name)) + delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] bible_failed = True break @@ -729,21 +699,21 @@ class BibleUpgradeForm(OpenLPWizard): if not bible_failed: self.newbibles[number].create_meta(u'Version', name) oldbible.close_connection() - delete_file(os.path.join(self.path, filename[0])) + delete_file(os.path.join(temp_dir, filename[0])) self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\n' 'Complete')) % - (number + 1, self.maxBibles, name)) - self.success[biblenumber] = True + (number + 1, max_bibles, name)) + self.success[number] = True else: self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % - (number + 1, self.maxBibles, name), + (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) - delete_database(self.path, clean_filename(name)) - number += 1 + delete_database(temp_dir, clean_filename(name)) + shutil.rmtree(temp_dir, True) def postWizard(self): """ @@ -752,7 +722,7 @@ class BibleUpgradeForm(OpenLPWizard): successful_import = 0 failed_import = 0 for number, filename in enumerate(self.files): - if number in self.success and self.success[number] == True: + if self.success.has_key(number) and self.success[number]: successful_import += 1 elif self.checkBox[number].checkState() == QtCore.Qt.Checked: failed_import += 1 @@ -776,7 +746,6 @@ class BibleUpgradeForm(OpenLPWizard): 'Bible(s): %s successful%s')) % (successful_import, failed_import_text)) else: - self.progressLabel.setText( - translate('BiblesPlugin.UpgradeWizardForm', 'Upgrade ' - 'failed.')) + self.progressLabel.setText(translate( + 'BiblesPlugin.UpgradeWizardForm', 'Upgrade failed.')) OpenLPWizard.postWizard(self) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 5273f670c..7be2ca84a 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -169,6 +169,7 @@ class BibleDB(QtCore.QObject, Manager): self.wizard = None QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import) + print kwargs, (self.file, self.path) def stop_import(self): """ @@ -210,7 +211,7 @@ class BibleDB(QtCore.QObject, Manager): The book_reference_id from bibles_resources.sqlite of the book. ``testament`` - *Defaults to 1.* The testament_reference_id from + *Defaults to 1.* The testament_reference_id from bibles_resources.sqlite of the testament this book belongs to. """ log.debug(u'BibleDB.create_book("%s", "%s")', name, bk_ref_id) @@ -329,7 +330,7 @@ class BibleDB(QtCore.QObject, Manager): return self.get_object_filtered(Book, Book.book_reference_id.like(id)) def get_book_ref_id_by_name(self, book, maxbooks, language_id=None): - log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book, + log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book, language_id) if BiblesResourcesDB.get_book(book, True): book_temp = BiblesResourcesDB.get_book(book, True) @@ -471,7 +472,7 @@ class BibleDB(QtCore.QObject, Manager): def get_language(self, bible_name=None): """ - If no language is given it calls a dialog window where the user could + If no language is given it calls a dialog window where the user could select the bible language. Return the language id of a bible. @@ -521,9 +522,9 @@ class BiblesResourcesDB(QtCore.QObject, Manager): some resources which are used in the Bibles plugin. A wrapper class around a small SQLite database which contains the download resources, a biblelist from the different download resources, the books, - chapter counts and verse counts for the web download Bibles, a language - reference, the testament reference and some alternative book names. This - class contains a singleton "cursor" so that only one connection to the + chapter counts and verse counts for the web download Bibles, a language + reference, the testament reference and some alternative book names. This + class contains a singleton "cursor" so that only one connection to the SQLite database is ever used. """ cursor = None @@ -582,7 +583,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): ``name`` The name or abbreviation of the book. - + ``lower`` True if the comparsion should be only lowercase """ @@ -592,7 +593,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): if lower: books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' u'abbreviation, chapters FROM book_reference WHERE ' - u'LOWER(name) = ? OR LOWER(abbreviation) = ?', + u'LOWER(name) = ? OR LOWER(abbreviation) = ?', (name.lower(), name.lower())) else: books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' @@ -621,7 +622,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): if not isinstance(id, int): id = int(id) books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' - u'abbreviation, chapters FROM book_reference WHERE id = ?', + u'abbreviation, chapters FROM book_reference WHERE id = ?', (id, )) if books: return { @@ -645,12 +646,12 @@ class BiblesResourcesDB(QtCore.QObject, Manager): ``chapter`` The chapter number. """ - log.debug(u'BiblesResourcesDB.get_chapter("%s", "%s")', book_id, + log.debug(u'BiblesResourcesDB.get_chapter("%s", "%s")', book_id, chapter) if not isinstance(chapter, int): chapter = int(chapter) chapters = BiblesResourcesDB.run_sql(u'SELECT id, book_reference_id, ' - u'chapter, verse_count FROM chapters WHERE book_reference_id = ?', + u'chapter, verse_count FROM chapters WHERE book_reference_id = ?', (book_id,)) if chapters: return { @@ -687,7 +688,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): ``chapter`` The number of the chapter. """ - log.debug(u'BiblesResourcesDB.get_verse_count("%s", "%s")', book_id, + log.debug(u'BiblesResourcesDB.get_verse_count("%s", "%s")', book_id, chapter) details = BiblesResourcesDB.get_chapter(book_id, chapter) if details: @@ -715,7 +716,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): } else: return None - + @staticmethod def get_webbibles(source): """ @@ -737,7 +738,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): u'id': bible[0], u'name': bible[1], u'abbreviation': bible[2], - u'language_id': bible[3], + u'language_id': bible[3], u'download_source_id': bible[4] } for bible in bibles @@ -752,11 +753,11 @@ class BiblesResourcesDB(QtCore.QObject, Manager): ``abbreviation`` The abbreviation of the webbible. - + ``source`` The source of the webbible. """ - log.debug(u'BiblesResourcesDB.get_webbibles("%s", "%s")', abbreviation, + log.debug(u'BiblesResourcesDB.get_webbibles("%s", "%s")', abbreviation, source) if not isinstance(abbreviation, unicode): abbreviation = unicode(abbreviation) @@ -765,14 +766,14 @@ class BiblesResourcesDB(QtCore.QObject, Manager): source = BiblesResourcesDB.get_download_source(source) bible = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, ' u'language_id, download_source_id FROM webbibles WHERE ' - u'download_source_id = ? AND abbreviation = ?', (source[u'id'], + u'download_source_id = ? AND abbreviation = ?', (source[u'id'], abbreviation)) if bible: return { u'id': bible[0][0], u'name': bible[0][1], u'abbreviation': bible[0][2], - u'language_id': bible[0][3], + u'language_id': bible[0][3], u'download_source_id': bible[0][4] } else: @@ -785,11 +786,11 @@ class BiblesResourcesDB(QtCore.QObject, Manager): ``name`` The name to search the id. - + ``language_id`` The language_id for which language should be searched """ - log.debug(u'BiblesResourcesDB.get_alternative_book_name("%s", "%s")', + log.debug(u'BiblesResourcesDB.get_alternative_book_name("%s", "%s")', name, language_id) if language_id: books = BiblesResourcesDB.run_sql(u'SELECT book_reference_id, name ' @@ -806,7 +807,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): @staticmethod def get_language(name): """ - Return a dict containing the language id, name and code by name or + Return a dict containing the language id, name and code by name or abbreviation. ``name`` @@ -865,7 +866,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): class AlternativeBookNamesDB(QtCore.QObject, Manager): """ - This class represents a database-bound alternative book names system. + This class represents a database-bound alternative book names system. """ cursor = None conn = None @@ -874,7 +875,7 @@ class AlternativeBookNamesDB(QtCore.QObject, Manager): def get_cursor(): """ Return the cursor object. Instantiate one if it doesn't exist yet. - If necessary loads up the database and creates the tables if the + If necessary loads up the database and creates the tables if the database doesn't exist. """ if AlternativeBookNamesDB.cursor is None: @@ -904,7 +905,7 @@ class AlternativeBookNamesDB(QtCore.QObject, Manager): ``parameters`` Any variable parameters to add to the query - + ``commit`` If a commit statement is necessary this should be True. """ @@ -921,11 +922,11 @@ class AlternativeBookNamesDB(QtCore.QObject, Manager): ``name`` The name to search the id. - + ``language_id`` The language_id for which language should be searched """ - log.debug(u'AlternativeBookNamesDB.get_book_reference_id("%s", "%s")', + log.debug(u'AlternativeBookNamesDB.get_book_reference_id("%s", "%s")', name, language_id) if language_id: books = AlternativeBookNamesDB.run_sql(u'SELECT book_reference_id, ' @@ -962,11 +963,11 @@ class AlternativeBookNamesDB(QtCore.QObject, Manager): class OldBibleDB(QtCore.QObject, Manager): """ - This class conects to the old bible databases to reimport them to the new + This class conects to the old bible databases to reimport them to the new database scheme. """ cursor = None - + def __init__(self, parent, **kwargs): """ The constructor loads up the database and creates and initialises the diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 354332083..fcccd7bcf 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -153,7 +153,7 @@ class BibleManager(object): if name is None: delete_file(os.path.join(self.path, filename)) continue - # Find old database versions + # Find old database versions. if bible.is_old_database(): self.old_bible_databases.append([filename, name]) bible.session.close() @@ -220,7 +220,7 @@ class BibleManager(object): return [ { u'name': book.name, - u'book_reference_id': book.book_reference_id, + u'book_reference_id': book.book_reference_id, u'chapters': self.db_cache[bible].get_chapter_count(book) } for book in self.db_cache[bible].get_books() @@ -229,10 +229,10 @@ class BibleManager(object): def get_chapter_count(self, bible, book): """ Returns the number of Chapters for a given book. - + ``bible`` Unicode. The Bible to get the list of books from. - + ``book`` The book object to get the chapter count for. """ @@ -295,7 +295,7 @@ class BibleManager(object): if db_book: book_id = db_book.book_reference_id log.debug(u'Book name corrected to "%s"', db_book.name) - new_reflist.append((book_id, item[1], item[2], + new_reflist.append((book_id, item[1], item[2], item[3])) else: log.debug(u'OpenLP failed to find book %s', item[0]) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 82ee4430c..5a5f77c50 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -612,7 +612,7 @@ class BibleMediaItem(MediaManagerItem): if restore: old_text = unicode(combo.currentText()) combo.clear() - combo.addItems([unicode(i) for i in range(range_from, range_to + 1)]) + combo.addItems(map(unicode, range(range_from, range_to + 1))) if restore and combo.findText(old_text) != -1: combo.setCurrentIndex(combo.findText(old_text)) From 4831cf0a7c7970a82b46bfd893ef1774b15147c8 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 12 Aug 2011 15:16:06 +0200 Subject: [PATCH 43/64] more clean ups --- openlp/plugins/bibles/forms/bibleupgradeform.py | 14 ++------------ openlp/plugins/bibles/lib/db.py | 1 - 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 1ce938b3c..80b6ad910 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -35,10 +35,9 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, SettingsManager, translate, \ check_directory_exists -from openlp.core.lib.db import delete_database from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings -from openlp.core.utils import AppLocation, delete_file +from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \ BiblesResourcesDB, clean_filename from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract @@ -523,9 +522,6 @@ class BibleUpgradeForm(OpenLPWizard): file=filename[0]) name = filename[1] if name is None: - print u'no Name!!!' - # FIXME: ? - delete_file(os.path.join(self.path, filename[0])) self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % @@ -568,7 +564,6 @@ class BibleUpgradeForm(OpenLPWizard): u'name: "%s" failed' % ( meta_data[u'download source'], meta_data[u'download name'])) - delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] critical_error_message_box( translate('BiblesPlugin.UpgradeWizardForm', @@ -593,7 +588,6 @@ class BibleUpgradeForm(OpenLPWizard): language_id = self.newbibles[number].get_language(name) if not language_id: log.warn(u'Upgrading from "%s" failed' % filename[0]) - delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', @@ -618,7 +612,6 @@ class BibleUpgradeForm(OpenLPWizard): u'name: "%s" aborted by user' % ( meta_data[u'download source'], meta_data[u'download name'])) - delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] bible_failed = True break @@ -649,7 +642,6 @@ class BibleUpgradeForm(OpenLPWizard): language_id = self.newbibles[number].get_language(name) if not language_id: log.warn(u'Upgrading books from "%s" failed' % name) - delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', @@ -674,7 +666,6 @@ class BibleUpgradeForm(OpenLPWizard): if not book_ref_id: log.warn(u'Upgrading books from %s " '\ 'failed - aborted by user' % name) - delete_database(temp_dir, clean_filename(name)) del self.newbibles[number] bible_failed = True break @@ -699,7 +690,6 @@ class BibleUpgradeForm(OpenLPWizard): if not bible_failed: self.newbibles[number].create_meta(u'Version', name) oldbible.close_connection() - delete_file(os.path.join(temp_dir, filename[0])) self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\n' @@ -712,7 +702,7 @@ class BibleUpgradeForm(OpenLPWizard): 'Upgrading Bible %s of %s: "%s"\nFailed')) % (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) - delete_database(temp_dir, clean_filename(name)) + # Remove old bibles. shutil.rmtree(temp_dir, True) def postWizard(self): diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 7be2ca84a..f37b73ab0 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -169,7 +169,6 @@ class BibleDB(QtCore.QObject, Manager): self.wizard = None QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import) - print kwargs, (self.file, self.path) def stop_import(self): """ From 3f3ab71eeb032d5d5cca33cd62cc8aacb6746e5f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 12 Aug 2011 15:38:05 +0200 Subject: [PATCH 44/64] more clean ups --- openlp/core/lib/eventreceiver.py | 2 +- openlp/plugins/bibles/forms/bibleupgradeform.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index abd57721b..7c0115f89 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -247,7 +247,7 @@ class EventReceiver(QtCore.QObject): ``msg`` Defaults to *None*. The message to send with the event. """ - #log.debug(u'Event %s passed with payload %s' % (event, msg)) + log.debug(u'Event %s passed with payload %s' % (event, msg)) self.emit(QtCore.SIGNAL(event), msg) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 80b6ad910..a49d1a25a 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -618,7 +618,7 @@ class BibleUpgradeForm(OpenLPWizard): book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) db_book = self.newbibles[number].create_book(book, book_ref_id, book_details[u'testament_id']) - # Try to import still downloaded verses + # Try to import already downloaded verses. oldbook = oldbible.get_book(book) if oldbook: verses = oldbible.get_verses(oldbook[u'id']) From 11f3a9e13a6733e78a4282585c0c4b4ad25d27e7 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 12 Aug 2011 16:54:16 +0200 Subject: [PATCH 45/64] removed code; moved clean_filename method to utils --- openlp/core/utils/__init__.py | 13 +++++++++++- .../plugins/bibles/forms/bibleupgradeform.py | 20 +------------------ openlp/plugins/bibles/lib/db.py | 17 ++-------------- openlp/plugins/songs/lib/openlyricsexport.py | 1 + 4 files changed, 16 insertions(+), 35 deletions(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index b0a28962c..3612bb002 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -386,6 +386,17 @@ def split_filename(path): else: return os.path.split(path) +def clean_filename(filename): + """ + Removes invalid characters from the given ``filename``. + + ``filename`` + The "dirty" file name to clean. + """ + if not isinstance(filename, unicode): + filename = unicode(filename, u'utf-8') + return re.sub(r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_') + def delete_file(file_path_name): """ Deletes a file from the system. @@ -492,4 +503,4 @@ from actions import ActionList __all__ = [u'AppLocation', u'get_application_version', u'check_latest_version', u'add_actions', u'get_filesystem_encoding', u'LanguageManager', u'ActionList', u'get_web_page', u'file_is_unicode', u'get_uno_command', - u'get_uno_instance', u'delete_file'] + u'get_uno_instance', u'delete_file', u'clean_filename'] diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index a49d1a25a..669af68b3 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -39,7 +39,7 @@ from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \ - BiblesResourcesDB, clean_filename + BiblesResourcesDB from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract log = logging.getLogger(__name__) @@ -432,24 +432,6 @@ class BibleUpgradeForm(OpenLPWizard): continue # Move bibles to temp dir. shutil.move(os.path.join(self.path, filename[0]), temp_dir) - version_name = unicode(self.versionNameEdit[number].text()) - if not version_name: - critical_error_message_box(UiStrings().EmptyField, - translate('BiblesPlugin.UpgradeWizardForm', - 'You need to specify a version name for your Bible.')) - self.versionNameEdit[number].setFocus() - return False - elif os.path.exists(os.path.join(self.path, - clean_filename(version_name))): - critical_error_message_box( - translate('BiblesPlugin.UpgradeWizardForm', - 'Bible Exists'), - translate('BiblesPlugin.UpgradeWizardForm', - 'This Bible already exists. Please upgrade ' - 'a different Bible, delete the existing one or ' - 'uncheck.')) - self.versionNameEdit[number].setFocus() - return False return True if self.currentPage() == self.progressPage: return True diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index f37b73ab0..e5962664b 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -39,7 +39,7 @@ from sqlalchemy.orm.exc import UnmappedClassError from openlp.core.lib import Receiver, translate from openlp.core.lib.db import BaseModel, init_db, Manager from openlp.core.lib.ui import critical_error_message_box -from openlp.core.utils import AppLocation +from openlp.core.utils import AppLocation, clean_filename log = logging.getLogger(__name__) @@ -63,19 +63,6 @@ class Verse(BaseModel): """ pass -def clean_filename(filename): - """ - Clean up the version name of the Bible and convert it into a valid - file name. - - ``filename`` - The "dirty" file name or version name. - """ - if not isinstance(filename, unicode): - filename = unicode(filename, u'utf-8') - filename = re.sub(r'[^\w]+', u'_', filename).strip(u'_') - return filename + u'.sqlite' - def init_schema(url): """ Setup a bible database connection and initialise the database schema. @@ -158,7 +145,7 @@ class BibleDB(QtCore.QObject, Manager): self.name = kwargs[u'name'] if not isinstance(self.name, unicode): self.name = unicode(self.name, u'utf-8') - self.file = clean_filename(self.name) + self.file = clean_filename(self.name) + u'.sqlite' if u'file' in kwargs: self.file = kwargs[u'file'] Manager.__init__(self, u'bibles', init_schema, self.file) diff --git a/openlp/plugins/songs/lib/openlyricsexport.py b/openlp/plugins/songs/lib/openlyricsexport.py index 6ba1fabe7..de86e1c05 100644 --- a/openlp/plugins/songs/lib/openlyricsexport.py +++ b/openlp/plugins/songs/lib/openlyricsexport.py @@ -35,6 +35,7 @@ import re from lxml import etree from openlp.core.lib import check_directory_exists, Receiver, translate +from openlp.core.utils import clean_filename from openlp.plugins.songs.lib import OpenLyrics log = logging.getLogger(__name__) From 6c96794af183979374aa699fb00ac4c5057920e9 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 12 Aug 2011 17:31:16 +0200 Subject: [PATCH 46/64] restore not upgraded bibles; clean ups --- .../plugins/bibles/forms/bibleupgradeform.py | 46 +++++++++++-------- openlp/plugins/songs/lib/openlyricsexport.py | 3 +- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 669af68b3..f34236503 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -37,7 +37,7 @@ from openlp.core.lib import Receiver, SettingsManager, translate, \ check_directory_exists from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings -from openlp.core.utils import AppLocation +from openlp.core.utils import AppLocation, delete_file from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, OldBibleDB, \ BiblesResourcesDB from openlp.plugins.bibles.lib.http import BSExtract, BGExtract, CWExtract @@ -254,23 +254,22 @@ class BibleUpgradeForm(OpenLPWizard): for number, filename in enumerate(self.files): bible = OldBibleDB(self.mediaItem, path=self.path, file=filename[0]) self.checkBox[number] = QtGui.QCheckBox(self.scrollAreaContents) - checkBoxName = u'checkBox[%d]' % number - self.checkBox[number].setObjectName(checkBoxName) + self.checkBox[number].setObjectName(u'checkBox[%d]' % number) self.checkBox[number].setText(bible.get_name()) self.checkBox[number].setCheckState(QtCore.Qt.Checked) self.formLayout.addWidget(self.checkBox[number]) self.verticalWidget[number] = QtGui.QWidget(self.scrollAreaContents) - verticalWidgetName = u'verticalWidget[%d]' % number - self.verticalWidget[number].setObjectName(verticalWidgetName) + self.verticalWidget[number].setObjectName( + u'verticalWidget[%d]' % number) self.horizontalLayout[number] = QtGui.QHBoxLayout( self.verticalWidget[number]) self.horizontalLayout[number].setContentsMargins(25, 0, 0, 0) - horizontalLayoutName = u'horizontalLayout[%d]' % number - self.horizontalLayout[number].setObjectName(horizontalLayoutName) + self.horizontalLayout[number].setObjectName( + u'horizontalLayout[%d]' % number) self.versionInfoPixmap[number] = QtGui.QLabel( self.verticalWidget[number]) - versionInfoPixmapName = u'versionInfoPixmap[%d]' % number - self.versionInfoPixmap[number].setObjectName(versionInfoPixmapName) + self.versionInfoPixmap[number].setObjectName( + u'versionInfoPixmap[%d]' % number) self.versionInfoPixmap[number].setPixmap(QtGui.QPixmap( u':/bibles/bibles_upgrade_alert.png')) self.versionInfoPixmap[number].setAlignment(QtCore.Qt.AlignRight) @@ -278,8 +277,8 @@ class BibleUpgradeForm(OpenLPWizard): self.versionInfoPixmap[number]) self.versionInfoLabel[number] = QtGui.QLabel( self.verticalWidget[number]) - versionInfoLabelName = u'versionInfoLabel[%d]' % number - self.versionInfoLabel[number].setObjectName(versionInfoLabelName) + self.versionInfoLabel[number].setObjectName( + u'versionInfoLabel[%d]' % number) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) @@ -291,14 +290,12 @@ class BibleUpgradeForm(OpenLPWizard): self.versionInfoLabel[number]) self.formLayout.addWidget(self.verticalWidget[number]) self.formWidget[number] = QtGui.QWidget(self.scrollAreaContents) - formWidgetName = u'formWidget[%d]' % number - self.formWidget[number].setObjectName(formWidgetName) + self.formWidget[number].setObjectName(u'formWidget[%d]' % number) self.formLayoutAttention[number] = QtGui.QFormLayout( self.formWidget[number]) self.formLayoutAttention[number].setContentsMargins(25, 0, 0, 5) - formLayoutAttentionName = u'formLayoutAttention[%d]' % number self.formLayoutAttention[number].setObjectName( - formLayoutAttentionName) + u'formLayoutAttention[%d]' % number) self.versionNameLabel[number] = QtGui.QLabel( self.formWidget[number]) self.versionNameLabel[number].setObjectName(u'VersionNameLabel') @@ -431,7 +428,10 @@ class BibleUpgradeForm(OpenLPWizard): if not self.checkBox[number].checkState() == QtCore.Qt.Checked: continue # Move bibles to temp dir. - shutil.move(os.path.join(self.path, filename[0]), temp_dir) + if not os.path.exists(os.path.join(temp_dir, filename[0])): + shutil.move(os.path.join(self.path, filename[0]), temp_dir) + else: + delete_file(os.path.join(self.path, filename[0])) return True if self.currentPage() == self.progressPage: return True @@ -684,20 +684,24 @@ class BibleUpgradeForm(OpenLPWizard): 'Upgrading Bible %s of %s: "%s"\nFailed')) % (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) - # Remove old bibles. - shutil.rmtree(temp_dir, True) def postWizard(self): """ Clean up the UI after the import has finished. """ + temp_dir = os.path.join(gettempdir(), u'openlp') successful_import = 0 failed_import = 0 for number, filename in enumerate(self.files): if self.success.has_key(number) and self.success[number]: successful_import += 1 - elif self.checkBox[number].checkState() == QtCore.Qt.Checked: - failed_import += 1 + else: + # Delete upgraded (but not complete, corrupted, ...) bible. + delete_file(os.path.join(self.path, filename[0])) + # Copy not upgraded bible back. + shutil.move(os.path.join(temp_dir, filename[0]), self.path) + if self.checkBox[number].checkState() == QtCore.Qt.Checked: + failed_import += 1 if failed_import > 0: failed_import_text = unicode(translate( 'BiblesPlugin.UpgradeWizardForm', @@ -720,4 +724,6 @@ class BibleUpgradeForm(OpenLPWizard): else: self.progressLabel.setText(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrade failed.')) + # Remove old bibles. + shutil.rmtree(temp_dir, True) OpenLPWizard.postWizard(self) diff --git a/openlp/plugins/songs/lib/openlyricsexport.py b/openlp/plugins/songs/lib/openlyricsexport.py index de86e1c05..ec5677ea4 100644 --- a/openlp/plugins/songs/lib/openlyricsexport.py +++ b/openlp/plugins/songs/lib/openlyricsexport.py @@ -73,8 +73,7 @@ class OpenLyricsExport(object): tree = etree.ElementTree(etree.fromstring(xml)) filename = u'%s (%s)' % (song.title, u', '.join([author.display_name for author in song.authors])) - filename = re.sub( - r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_') + filename = clean_filename(filename) # Ensure the filename isn't too long for some filesystems filename = u'%s.xml' % filename[0:250 - len(self.save_path)] # Pass a file object, because lxml does not cope with some special From b72b53889372b8f5c96cbbc08a20a7e3b4bc913b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 13 Aug 2011 12:14:20 +0200 Subject: [PATCH 47/64] removed variable; hopefully fixed windows crahes --- .../plugins/bibles/forms/bibleupgradeform.py | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index f34236503..e0ebc46fc 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -491,16 +491,19 @@ class BibleUpgradeForm(OpenLPWizard): if self.checkBox[number].checkState() == QtCore.Qt.Checked: max_bibles += 1 temp_dir = os.path.join(gettempdir(), u'openlp') + oldBible = None for number, filename in enumerate(self.files): + # Close the previous bible's connection. + if oldBible is not None: + oldBible.close_connection() if self.stop_import_flag: - bible_failed = True + self.success[number] = False break - bible_failed = False - self.success[number] = False + self.success[number] = True if not self.checkBox[number].checkState() == QtCore.Qt.Checked: continue self.progressBar.reset() - oldbible = OldBibleDB(self.mediaItem, path=temp_dir, + oldBible = OldBibleDB(self.mediaItem, path=temp_dir, file=filename[0]) name = filename[1] if name is None: @@ -519,7 +522,7 @@ class BibleUpgradeForm(OpenLPWizard): self.newbibles[number] = BibleDB(self.mediaItem, path=self.path, name=name, file=filename[0]) self.newbibles[number].register(self.plugin.upgrade_wizard) - metadata = oldbible.get_metadata() + metadata = oldBible.get_metadata() webbible = False meta_data = {} for meta in metadata: @@ -580,7 +583,7 @@ class BibleUpgradeForm(OpenLPWizard): self.progressBar.setMaximum(len(books)) for book in books: if self.stop_import_flag: - bible_failed = True + self.success[number] = False break self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', @@ -595,22 +598,22 @@ class BibleUpgradeForm(OpenLPWizard): meta_data[u'download source'], meta_data[u'download name'])) del self.newbibles[number] - bible_failed = True + self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) db_book = self.newbibles[number].create_book(book, book_ref_id, book_details[u'testament_id']) # Try to import already downloaded verses. - oldbook = oldbible.get_book(book) + oldbook = oldBible.get_book(book) if oldbook: - verses = oldbible.get_verses(oldbook[u'id']) + verses = oldBible.get_verses(oldbook[u'id']) if not verses: log.warn(u'No verses found to import for book ' u'"%s"', book) continue for verse in verses: if self.stop_import_flag: - bible_failed = True + self.success[number] = False break self.newbibles[number].create_verse(db_book.id, int(verse[u'chapter']), @@ -631,11 +634,11 @@ class BibleUpgradeForm(OpenLPWizard): (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) continue - books = oldbible.get_books() + books = oldBible.get_books() self.progressBar.setMaximum(len(books)) for book in books: if self.stop_import_flag: - bible_failed = True + self.success[number] = False break self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', @@ -649,12 +652,12 @@ class BibleUpgradeForm(OpenLPWizard): log.warn(u'Upgrading books from %s " '\ 'failed - aborted by user' % name) del self.newbibles[number] - bible_failed = True + self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) db_book = self.newbibles[number].create_book(book[u'name'], book_ref_id, book_details[u'testament_id']) - verses = oldbible.get_verses(book[u'id']) + verses = oldBible.get_verses(book[u'id']) if not verses: log.warn(u'No verses found to import for book ' u'"%s"', book[u'name']) @@ -662,28 +665,29 @@ class BibleUpgradeForm(OpenLPWizard): continue for verse in verses: if self.stop_import_flag: - bible_failed = True + self.success[number] = False break self.newbibles[number].create_verse(db_book.id, int(verse[u'chapter']), int(verse[u'verse']), unicode(verse[u'text'])) Receiver.send_message(u'openlp_process_events') self.newbibles[number].session.commit() - if not bible_failed: + if self.success[number]: self.newbibles[number].create_meta(u'Version', name) - oldbible.close_connection() self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\n' 'Complete')) % (number + 1, max_bibles, name)) - self.success[number] = True else: self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) + # Close the last bible's connection. + if oldBible is not None: + oldBible.close_connection() def postWizard(self): """ From 259b57badde3ea7571a8b63f8c483ae9add7c7d2 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 13 Aug 2011 12:41:21 +0200 Subject: [PATCH 48/64] added try/except --- openlp/plugins/bibles/forms/bibleupgradeform.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index e0ebc46fc..d78124c6c 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -703,7 +703,12 @@ class BibleUpgradeForm(OpenLPWizard): # Delete upgraded (but not complete, corrupted, ...) bible. delete_file(os.path.join(self.path, filename[0])) # Copy not upgraded bible back. - shutil.move(os.path.join(temp_dir, filename[0]), self.path) + try: + shutil.move(os.path.join(temp_dir, filename[0]), self.path) + except shutil.Error: + # We can ignore any error, because the temp directory is + # will be deleted later. + pass if self.checkBox[number].checkState() == QtCore.Qt.Checked: failed_import += 1 if failed_import > 0: @@ -728,6 +733,6 @@ class BibleUpgradeForm(OpenLPWizard): else: self.progressLabel.setText(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrade failed.')) - # Remove old bibles. + # Remove temp directory. shutil.rmtree(temp_dir, True) OpenLPWizard.postWizard(self) From 8a926b01e1da1a27894edfcafa649662381d38e5 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 13 Aug 2011 12:49:53 +0200 Subject: [PATCH 49/64] Auto-completer does not work immediately after importing/upgrading a bible (bug #825181) Fixes: https://launchpad.net/bugs/825181 --- openlp/plugins/bibles/lib/mediaitem.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 82ee4430c..e47375298 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -395,6 +395,7 @@ class BibleMediaItem(MediaManagerItem): log.debug(u'Reloading Bibles') self.plugin.manager.reload_bibles() self.loadBibles() + self.updateAutoCompleter() def initialiseAdvancedBible(self, bible): """ From 3f489ddbaf4fb93600582789fdac572fefed1555 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 14 Aug 2011 12:56:05 +0200 Subject: [PATCH 50/64] fixed song meta data to include application name --- openlp/plugins/songs/lib/xml.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 3635fd7e7..193a823d5 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -246,8 +246,9 @@ class OpenLyrics(object): # Append the necessary meta data to the song. song_xml.set(u'xmlns', u'http://openlyrics.info/namespace/2009/song') song_xml.set(u'version', OpenLyrics.IMPLEMENTED_VERSION) - song_xml.set(u'createdIn', get_application_version()[u'version']) - song_xml.set(u'modifiedIn', get_application_version()[u'version']) + application_name = u'OpenLP ' + get_application_version()[u'version'] + song_xml.set(u'createdIn', application_name) + song_xml.set(u'modifiedIn', application_name) song_xml.set(u'modifiedDate', datetime.datetime.now().strftime(u'%Y-%m-%dT%H:%M:%S')) properties = etree.SubElement(song_xml, u'properties') From 17e397ffa8dc2269f8217c3fab753ae698dc895f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 14 Aug 2011 15:05:39 +0200 Subject: [PATCH 51/64] added spellchecker to service notes dialog (bug #825979); escape texts in various places (bug #825983) Fixes: https://launchpad.net/bugs/825983, https://launchpad.net/bugs/825979 --- openlp/core/lib/spelltextedit.py | 20 +++++++++++--------- openlp/core/ui/printservicedialog.py | 2 +- openlp/core/ui/printserviceform.py | 21 ++++++++++++--------- openlp/core/ui/servicemanager.py | 6 +++++- openlp/core/ui/servicenoteform.py | 4 ++-- 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index b0bb61e92..e9b5e64f7 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -48,9 +48,10 @@ class SpellTextEdit(QtGui.QPlainTextEdit): """ Spell checking widget based on QPlanTextEdit. """ - def __init__(self, *args): + def __init__(self, parent=None, formatting_tags_allowed=True): global ENCHANT_AVAILABLE - QtGui.QPlainTextEdit.__init__(self, *args) + QtGui.QPlainTextEdit.__init__(self, parent) + self.formattingTagsAllowed = formatting_tags_allowed # Default dictionary based on the current locale. if ENCHANT_AVAILABLE: try: @@ -110,16 +111,17 @@ class SpellTextEdit(QtGui.QPlainTextEdit): spell_menu.addAction(action) # Only add the spelling suggests to the menu if there are # suggestions. - if len(spell_menu.actions()): + if spell_menu.actions(): popupMenu.insertMenu(popupMenu.actions()[0], spell_menu) tagMenu = QtGui.QMenu(translate('OpenLP.SpellTextEdit', 'Formatting Tags')) - for html in FormattingTags.get_html_tags(): - action = SpellAction(html[u'desc'], tagMenu) - action.correct.connect(self.htmlTag) - tagMenu.addAction(action) - popupMenu.insertSeparator(popupMenu.actions()[0]) - popupMenu.insertMenu(popupMenu.actions()[0], tagMenu) + if self.formattingTagsAllowed: + for html in FormattingTags.get_html_tags(): + action = SpellAction(html[u'desc'], tagMenu) + action.correct.connect(self.htmlTag) + tagMenu.addAction(action) + popupMenu.insertSeparator(popupMenu.actions()[0]) + popupMenu.insertMenu(popupMenu.actions()[0], tagMenu) popupMenu.exec_(event.globalPos()) def setLanguage(self, action): diff --git a/openlp/core/ui/printservicedialog.py b/openlp/core/ui/printservicedialog.py index b0065df99..8287ef02a 100644 --- a/openlp/core/ui/printservicedialog.py +++ b/openlp/core/ui/printservicedialog.py @@ -108,7 +108,7 @@ class Ui_PrintServiceDialog(object): self.footerLabel = QtGui.QLabel(self.optionsWidget) self.footerLabel.setObjectName(u'footerLabel') self.optionsLayout.addWidget(self.footerLabel) - self.footerTextEdit = SpellTextEdit(self.optionsWidget) + self.footerTextEdit = SpellTextEdit(self.optionsWidget, False) self.footerTextEdit.setObjectName(u'footerTextEdit') self.optionsLayout.addWidget(self.footerTextEdit) self.optionsGroupBox = QtGui.QGroupBox() diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index f50237619..55fc6eb3c 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -24,6 +24,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import cgi import datetime import os @@ -183,7 +184,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): self._addElement(u'style', custom_css, html_data.head, attribute=(u'type', u'text/css')) self._addElement(u'body', parent=html_data) - self._addElement(u'h1', unicode(self.titleLineEdit.text()), + self._addElement(u'h1', cgi.escape(unicode(self.titleLineEdit.text())), html_data.body, classId=u'serviceTitle') for index, item in enumerate(self.serviceManager.serviceItems): self._addPreviewItem(html_data.body, item[u'service_item'], index) @@ -193,8 +194,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): classId=u'customNotes') self._addElement(u'span', translate('OpenLP.ServiceManager', 'Custom Service Notes: '), div, classId=u'customNotesTitle') - self._addElement(u'span', self.footerTextEdit.toPlainText(), div, - classId=u'customNotesText') + self._addElement(u'span', + cgi.escape(self.footerTextEdit.toPlainText()), + div, classId=u'customNotesText') self.document.setHtml(html.tostring(html_data)) self.previewWidget.updatePreview() @@ -204,8 +206,8 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): item_title = self._addElement(u'h2', parent=div, classId=u'itemTitle') self._addElement(u'img', parent=item_title, attribute=(u'src', item.icon)) - self._addElement(u'span', u' ' + item.get_display_title(), - item_title) + self._addElement(u'span', + u' ' + cgi.escape(item.get_display_title()), item_title) if self.slideTextCheckBox.isChecked(): # Add the text of the service item. if item.is_text(): @@ -230,8 +232,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): foot_text = item.foot_text foot_text = foot_text.partition(u'
')[2] if foot_text: - foot = self._addElement(u'div', foot_text, parent=div, - classId=u'itemFooter') + foot_text = cgi.escape(foot_text.replace(u'
', u'\n')) + self._addElement(u'div', foot_text.replace(u'\n', u'
'), + parent=div, classId=u'itemFooter') # Add service items' notes. if self.notesCheckBox.isChecked(): if item.notes: @@ -239,8 +242,8 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): self._addElement(u'span', translate('OpenLP.ServiceManager', 'Notes: '), p, classId=u'itemNotesTitle') - notes = self._addElement(u'span', - item.notes.replace(u'\n', u'
'), p, + self._addElement(u'span', + cgi.escape(unicode(item.notes)).replace(u'\n', u'
'), p, classId=u'itemNotesText') # Add play length of media files. if item.is_media() and self.metaDataCheckBox.isChecked(): diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 0ef45af12..3ab2e9239 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -24,6 +24,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import cgi import cPickle import logging import os @@ -719,6 +720,9 @@ class ServiceManager(QtGui.QWidget): self.setModified() def onStartTimeForm(self): + """ + Opens a dialog to type in service item notes. + """ item = self.findServiceItem()[0] self.startTimeForm.item = self.serviceItems[item] if self.startTimeForm.exec_(): @@ -957,7 +961,7 @@ class ServiceManager(QtGui.QWidget): if serviceitem.notes: tips.append(u'%s: %s' % (unicode(translate('OpenLP.ServiceManager', 'Notes')), - unicode(serviceitem.notes))) + cgi.escape(unicode(serviceitem.notes)))) if item[u'service_item'] \ .is_capable(ItemCapabilities.AllowsVariableStartTime): tips.append(item[u'service_item'].get_media_time()) diff --git a/openlp/core/ui/servicenoteform.py b/openlp/core/ui/servicenoteform.py index 3bc55e242..ddfcb3381 100644 --- a/openlp/core/ui/servicenoteform.py +++ b/openlp/core/ui/servicenoteform.py @@ -27,7 +27,7 @@ from PyQt4 import QtCore, QtGui -from openlp.core.lib import translate +from openlp.core.lib import translate, SpellTextEdit from openlp.core.lib.ui import create_accept_reject_button_box class ServiceNoteForm(QtGui.QDialog): @@ -52,7 +52,7 @@ class ServiceNoteForm(QtGui.QDialog): self.dialogLayout.setContentsMargins(8, 8, 8, 8) self.dialogLayout.setSpacing(8) self.dialogLayout.setObjectName(u'verticalLayout') - self.textEdit = QtGui.QTextEdit(self) + self.textEdit = SpellTextEdit(self, False) self.textEdit.setObjectName(u'textEdit') self.dialogLayout.addWidget(self.textEdit) self.dialogLayout.addWidget(create_accept_reject_button_box(self)) From 41b3bde91933c780be06f9b0e79bf000b2a6b9ba Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 14 Aug 2011 15:11:41 +0200 Subject: [PATCH 52/64] changed underscore varialbe to camelCase --- openlp/core/lib/spelltextedit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/spelltextedit.py b/openlp/core/lib/spelltextedit.py index e9b5e64f7..25e4e24ae 100644 --- a/openlp/core/lib/spelltextedit.py +++ b/openlp/core/lib/spelltextedit.py @@ -48,10 +48,10 @@ class SpellTextEdit(QtGui.QPlainTextEdit): """ Spell checking widget based on QPlanTextEdit. """ - def __init__(self, parent=None, formatting_tags_allowed=True): + def __init__(self, parent=None, formattingTagsAllowed=True): global ENCHANT_AVAILABLE QtGui.QPlainTextEdit.__init__(self, parent) - self.formattingTagsAllowed = formatting_tags_allowed + self.formattingTagsAllowed = formattingTagsAllowed # Default dictionary based on the current locale. if ENCHANT_AVAILABLE: try: From 924482ac517f08a994de63c6f697d9fee0208660 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 14 Aug 2011 15:49:03 +0200 Subject: [PATCH 53/64] prevent closing an already closed database --- openlp/plugins/bibles/forms/bibleupgradeform.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index d78124c6c..b5bc6ed3d 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -496,6 +496,9 @@ class BibleUpgradeForm(OpenLPWizard): # Close the previous bible's connection. if oldBible is not None: oldBible.close_connection() + # Set to None to make obvious that we have already closed the + # database. + oldBible = None if self.stop_import_flag: self.success[number] = False break From 928467847e62f890f3d0739ef0b1e9b7a2277ad6 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 14 Aug 2011 16:35:36 +0200 Subject: [PATCH 54/64] do not call postWizard twice --- openlp/plugins/bibles/forms/bibleupgradeform.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index b5bc6ed3d..ca5a16866 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -113,8 +113,6 @@ class BibleUpgradeForm(OpenLPWizard): self.stop_import_flag = True if not self.currentPage() == self.progressPage: self.done(QtGui.QDialog.Rejected) - else: - self.postWizard() def onCurrentIdChanged(self, pageId): """ From c70ac5e656ea6115e046378789f5427bc1d3db6b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 15 Aug 2011 08:31:36 +0200 Subject: [PATCH 55/64] create temp directory name in constructor --- .../plugins/bibles/forms/bibleupgradeform.py | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index ca5a16866..9f5d62d0f 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -70,6 +70,7 @@ class BibleUpgradeForm(OpenLPWizard): self.suffix = u'.sqlite' self.settingsSection = u'bibles' self.path = AppLocation.get_section_data_path(self.settingsSection) + self.temp_dir = os.path.join(gettempdir(), u'openlp') self.files = self.manager.old_bible_databases self.success = {} self.newbibles = {} @@ -420,14 +421,14 @@ class BibleUpgradeForm(OpenLPWizard): return False return True elif self.currentPage() == self.selectPage: - temp_dir = os.path.join(gettempdir(), u'openlp') - check_directory_exists(temp_dir) + check_directory_exists(self.temp_dir) for number, filename in enumerate(self.files): if not self.checkBox[number].checkState() == QtCore.Qt.Checked: continue # Move bibles to temp dir. - if not os.path.exists(os.path.join(temp_dir, filename[0])): - shutil.move(os.path.join(self.path, filename[0]), temp_dir) + if not os.path.exists(os.path.join(self.temp_dir, filename[0])): + shutil.move( + os.path.join(self.path, filename[0]), self.temp_dir) else: delete_file(os.path.join(self.path, filename[0])) return True @@ -488,7 +489,6 @@ class BibleUpgradeForm(OpenLPWizard): for number, file in enumerate(self.files): if self.checkBox[number].checkState() == QtCore.Qt.Checked: max_bibles += 1 - temp_dir = os.path.join(gettempdir(), u'openlp') oldBible = None for number, filename in enumerate(self.files): # Close the previous bible's connection. @@ -504,7 +504,7 @@ class BibleUpgradeForm(OpenLPWizard): if not self.checkBox[number].checkState() == QtCore.Qt.Checked: continue self.progressBar.reset() - oldBible = OldBibleDB(self.mediaItem, path=temp_dir, + oldBible = OldBibleDB(self.mediaItem, path=self.temp_dir, file=filename[0]) name = filename[1] if name is None: @@ -694,7 +694,6 @@ class BibleUpgradeForm(OpenLPWizard): """ Clean up the UI after the import has finished. """ - temp_dir = os.path.join(gettempdir(), u'openlp') successful_import = 0 failed_import = 0 for number, filename in enumerate(self.files): @@ -704,12 +703,7 @@ class BibleUpgradeForm(OpenLPWizard): # Delete upgraded (but not complete, corrupted, ...) bible. delete_file(os.path.join(self.path, filename[0])) # Copy not upgraded bible back. - try: - shutil.move(os.path.join(temp_dir, filename[0]), self.path) - except shutil.Error: - # We can ignore any error, because the temp directory is - # will be deleted later. - pass + shutil.move(os.path.join(self.temp_dir, filename[0]), self.path) if self.checkBox[number].checkState() == QtCore.Qt.Checked: failed_import += 1 if failed_import > 0: @@ -735,5 +729,5 @@ class BibleUpgradeForm(OpenLPWizard): self.progressLabel.setText(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrade failed.')) # Remove temp directory. - shutil.rmtree(temp_dir, True) + shutil.rmtree(self.temp_dir, True) OpenLPWizard.postWizard(self) From da1db9994dfa9ec28d0773efaefb074c0d5ada53 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 15 Aug 2011 09:35:37 +0200 Subject: [PATCH 56/64] removed not needed code --- .../plugins/bibles/forms/bibleupgradeform.py | 108 ------------------ 1 file changed, 108 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 9f5d62d0f..af046c938 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -92,20 +92,6 @@ class BibleUpgradeForm(OpenLPWizard): log.debug(u'Stopping import') self.stop_import_flag = True - def onCheckBoxIndexChanged(self, index): - """ - Show/Hide warnings if CheckBox state has changed - """ - for number, filename in enumerate(self.files): - if not self.checkBox[number].checkState() == QtCore.Qt.Checked: - self.verticalWidget[number].hide() - self.formWidget[number].hide() - else: - version_name = unicode(self.versionNameEdit[number].text()) - if self.manager.exists(version_name): - self.verticalWidget[number].show() - self.formWidget[number].show() - def reject(self): """ Stop the wizard on cancel button, close button or ESC key. @@ -242,14 +228,6 @@ class BibleUpgradeForm(OpenLPWizard): Add the content to the scrollArea. """ self.checkBox = {} - self.versionNameEdit = {} - self.versionNameLabel = {} - self.versionInfoLabel = {} - self.versionInfoPixmap = {} - self.verticalWidget = {} - self.horizontalLayout = {} - self.formWidget = {} - self.formLayoutAttention = {} for number, filename in enumerate(self.files): bible = OldBibleDB(self.mediaItem, path=self.path, file=filename[0]) self.checkBox[number] = QtGui.QCheckBox(self.scrollAreaContents) @@ -257,60 +235,6 @@ class BibleUpgradeForm(OpenLPWizard): self.checkBox[number].setText(bible.get_name()) self.checkBox[number].setCheckState(QtCore.Qt.Checked) self.formLayout.addWidget(self.checkBox[number]) - self.verticalWidget[number] = QtGui.QWidget(self.scrollAreaContents) - self.verticalWidget[number].setObjectName( - u'verticalWidget[%d]' % number) - self.horizontalLayout[number] = QtGui.QHBoxLayout( - self.verticalWidget[number]) - self.horizontalLayout[number].setContentsMargins(25, 0, 0, 0) - self.horizontalLayout[number].setObjectName( - u'horizontalLayout[%d]' % number) - self.versionInfoPixmap[number] = QtGui.QLabel( - self.verticalWidget[number]) - self.versionInfoPixmap[number].setObjectName( - u'versionInfoPixmap[%d]' % number) - self.versionInfoPixmap[number].setPixmap(QtGui.QPixmap( - u':/bibles/bibles_upgrade_alert.png')) - self.versionInfoPixmap[number].setAlignment(QtCore.Qt.AlignRight) - self.horizontalLayout[number].addWidget( - self.versionInfoPixmap[number]) - self.versionInfoLabel[number] = QtGui.QLabel( - self.verticalWidget[number]) - self.versionInfoLabel[number].setObjectName( - u'versionInfoLabel[%d]' % number) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, - QtGui.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth( - self.versionInfoLabel[number].sizePolicy().hasHeightForWidth()) - self.versionInfoLabel[number].setSizePolicy(sizePolicy) - self.horizontalLayout[number].addWidget( - self.versionInfoLabel[number]) - self.formLayout.addWidget(self.verticalWidget[number]) - self.formWidget[number] = QtGui.QWidget(self.scrollAreaContents) - self.formWidget[number].setObjectName(u'formWidget[%d]' % number) - self.formLayoutAttention[number] = QtGui.QFormLayout( - self.formWidget[number]) - self.formLayoutAttention[number].setContentsMargins(25, 0, 0, 5) - self.formLayoutAttention[number].setObjectName( - u'formLayoutAttention[%d]' % number) - self.versionNameLabel[number] = QtGui.QLabel( - self.formWidget[number]) - self.versionNameLabel[number].setObjectName(u'VersionNameLabel') - self.formLayoutAttention[number].setWidget(0, - QtGui.QFormLayout.LabelRole, self.versionNameLabel[number]) - self.versionNameEdit[number] = QtGui.QLineEdit( - self.formWidget[number]) - self.versionNameEdit[number].setObjectName(u'VersionNameEdit') - self.formLayoutAttention[number].setWidget(0, - QtGui.QFormLayout.FieldRole, self.versionNameEdit[number]) - self.versionNameEdit[number].setText(bible.get_name()) - self.formLayout.addWidget(self.formWidget[number]) - # Set up the Signal for the checkbox. - QtCore.QObject.connect(self.checkBox[number], - QtCore.SIGNAL(u'stateChanged(int)'), - self.onCheckBoxIndexChanged) self.spacerItem = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.formLayout.addItem(self.spacerItem) @@ -323,23 +247,6 @@ class BibleUpgradeForm(OpenLPWizard): for number, filename in enumerate(self.files): self.formLayout.removeWidget(self.checkBox[number]) self.checkBox[number].setParent(None) - self.horizontalLayout[number].removeWidget( - self.versionInfoPixmap[number]) - self.versionInfoPixmap[number].setParent(None) - self.horizontalLayout[number].removeWidget( - self.versionInfoLabel[number]) - self.versionInfoLabel[number].setParent(None) - self.formLayout.removeWidget(self.verticalWidget[number]) - self.verticalWidget[number].setParent(None) - self.formLayoutAttention[number].removeWidget( - self.versionNameLabel[number]) - self.versionNameLabel[number].setParent(None) - self.formLayoutAttention[number].removeWidget( - self.versionNameEdit[number]) - self.formLayoutAttention[number].deleteLater() - self.versionNameEdit[number].setParent(None) - self.formLayout.removeWidget(self.formWidget[number]) - self.formWidget[number].setParent(None) self.formLayout.removeItem(self.spacerItem) def retranslateUi(self): @@ -381,12 +288,6 @@ class BibleUpgradeForm(OpenLPWizard): self.selectPage.setSubTitle( translate('BiblesPlugin.UpgradeWizardForm', 'Please select the Bibles to upgrade')) - for number, bible in enumerate(self.files): - self.versionNameLabel[number].setText( - translate('BiblesPlugin.UpgradeWizardForm', 'Version name:')) - self.versionInfoLabel[number].setText( - translate('BiblesPlugin.UpgradeWizardForm', 'This ' - 'Bible still exists. Please change the name or uncheck it.')) self.progressPage.setTitle(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading')) self.progressPage.setSubTitle( @@ -451,13 +352,6 @@ class BibleUpgradeForm(OpenLPWizard): self.retranslateUi() for number, filename in enumerate(self.files): self.checkBox[number].setCheckState(QtCore.Qt.Checked) - oldname = filename[1] - if self.manager.exists(oldname): - self.verticalWidget[number].show() - self.formWidget[number].show() - else: - self.verticalWidget[number].hide() - self.formWidget[number].hide() self.progressBar.show() self.restart() self.finishButton.setVisible(False) @@ -518,8 +412,6 @@ class BibleUpgradeForm(OpenLPWizard): 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) % (number + 1, max_bibles, name)) - if os.path.exists(os.path.join(self.path, filename[0])): - name = unicode(self.versionNameEdit[number].text()) self.newbibles[number] = BibleDB(self.mediaItem, path=self.path, name=name, file=filename[0]) self.newbibles[number].register(self.plugin.upgrade_wizard) From 5607f025f68ce803ef20213bbac0308694c0aba3 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 15 Aug 2011 10:53:51 +0200 Subject: [PATCH 57/64] fixed bug #826483 Fixes: https://launchpad.net/bugs/826483 --- .../bibles/resources/bibles_resources.sqlite | Bin 104448 -> 104448 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/openlp/plugins/bibles/resources/bibles_resources.sqlite b/openlp/plugins/bibles/resources/bibles_resources.sqlite index 3235c95629f3d00cde01ef172cf7727e3edd4670..c0fa931d1bb88b6e6c0224feff9cbc5aa61c7312 100644 GIT binary patch delta 34 qcmZqJz}B#VZGtr8 Date: Mon, 15 Aug 2011 10:55:36 +0200 Subject: [PATCH 58/64] fix failure dectection --- .../plugins/bibles/forms/bibleupgradeform.py | 29 +++++++++++-------- openlp/plugins/bibles/forms/languageform.py | 11 ++++--- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index af046c938..67ef1aba4 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -394,8 +394,8 @@ class BibleUpgradeForm(OpenLPWizard): if self.stop_import_flag: self.success[number] = False break - self.success[number] = True if not self.checkBox[number].checkState() == QtCore.Qt.Checked: + self.success[number] = False continue self.progressBar.reset() oldBible = OldBibleDB(self.mediaItem, path=self.temp_dir, @@ -407,6 +407,7 @@ class BibleUpgradeForm(OpenLPWizard): 'Upgrading Bible %s of %s: "%s"\nFailed')) % (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) + self.success[number] = False continue self.progressLabel.setText(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', @@ -454,6 +455,7 @@ class BibleUpgradeForm(OpenLPWizard): 'Upgrading Bible %s of %s: "%s"\nFailed')) % (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) + self.success[number] = False continue bible = BiblesResourcesDB.get_webbible( meta_data[u'download name'], @@ -472,6 +474,7 @@ class BibleUpgradeForm(OpenLPWizard): 'Upgrading Bible %s of %s: "%s"\nFailed')) % (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) + self.success[number] = False continue self.progressBar.setMaximum(len(books)) for book in books: @@ -526,6 +529,7 @@ class BibleUpgradeForm(OpenLPWizard): 'Upgrading Bible %s of %s: "%s"\nFailed')) % (number + 1, max_bibles, name), self.progressBar.maximum() - self.progressBar.value()) + self.success[number] = False continue books = oldBible.get_books() self.progressBar.setMaximum(len(books)) @@ -565,20 +569,22 @@ class BibleUpgradeForm(OpenLPWizard): int(verse[u'verse']), unicode(verse[u'text'])) Receiver.send_message(u'openlp_process_events') self.newbibles[number].session.commit() - if self.success[number]: + if self.success.has_key(number) and not self.success[number]: + print u'11111' + self.incrementProgressBar(unicode(translate( + 'BiblesPlugin.UpgradeWizardForm', + 'Upgrading Bible %s of %s: "%s"\nFailed')) % + (number + 1, max_bibles, name), + self.progressBar.maximum() - self.progressBar.value()) + else: + self.success[number] = True self.newbibles[number].create_meta(u'Version', name) self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\n' 'Complete')) % (number + 1, max_bibles, name)) - else: - self.incrementProgressBar(unicode(translate( - 'BiblesPlugin.UpgradeWizardForm', - 'Upgrading Bible %s of %s: "%s"\nFailed')) % - (number + 1, max_bibles, name), - self.progressBar.maximum() - self.progressBar.value()) - # Close the last bible's connection. + # Close the last bible's connection if possible. if oldBible is not None: oldBible.close_connection() @@ -591,13 +597,12 @@ class BibleUpgradeForm(OpenLPWizard): for number, filename in enumerate(self.files): if self.success.has_key(number) and self.success[number]: successful_import += 1 - else: + elif self.checkBox[number].checkState() == QtCore.Qt.Checked: + failed_import += 1 # Delete upgraded (but not complete, corrupted, ...) bible. delete_file(os.path.join(self.path, filename[0])) # Copy not upgraded bible back. shutil.move(os.path.join(self.temp_dir, filename[0]), self.path) - if self.checkBox[number].checkState() == QtCore.Qt.Checked: - failed_import += 1 if failed_import > 0: failed_import_text = unicode(translate( 'BiblesPlugin.UpgradeWizardForm', diff --git a/openlp/plugins/bibles/forms/languageform.py b/openlp/plugins/bibles/forms/languageform.py index 477c7ee1e..c5069815b 100644 --- a/openlp/plugins/bibles/forms/languageform.py +++ b/openlp/plugins/bibles/forms/languageform.py @@ -44,8 +44,8 @@ class LanguageForm(QDialog, Ui_LanguageDialog): Class to manage a dialog which ask the user for a language. """ log.info(u'LanguageForm loaded') - - def __init__(self, parent = None): + + def __init__(self, parent=None): """ Constructor """ @@ -57,12 +57,11 @@ class LanguageForm(QDialog, Ui_LanguageDialog): if bible_name: self.bibleLabel.setText(unicode(bible_name)) items = BiblesResourcesDB.get_languages() - for item in items: - self.languageComboBox.addItem(item[u'name']) + self.languageComboBox.addItems([item[u'name'] for item in items]) return QDialog.exec_(self) - + def accept(self): - if self.languageComboBox.currentText() == u'': + if not self.languageComboBox.currentText(): critical_error_message_box( message=translate('BiblesPlugin.LanguageForm', 'You need to choose a language.')) From cdec32f706fb321a4b026fabd6f9681da4a46177 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 15 Aug 2011 11:05:28 +0200 Subject: [PATCH 59/64] remove print --- openlp/plugins/bibles/forms/bibleupgradeform.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 67ef1aba4..373aa64a3 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -570,7 +570,6 @@ class BibleUpgradeForm(OpenLPWizard): Receiver.send_message(u'openlp_process_events') self.newbibles[number].session.commit() if self.success.has_key(number) and not self.success[number]: - print u'11111' self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % From ca5c8d9a0b5359d619ca589119c1ba0a52c8ffb6 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 16 Aug 2011 23:19:57 +0200 Subject: [PATCH 60/64] Fixed bug #802146: Couldn't import some SongShowPlus files. Rearranged the file menu as well to be in a more logical order, and to look a little nicer. Fixes: https://launchpad.net/bugs/802146 --- openlp/core/ui/mainwindow.py | 8 ++++---- openlp/plugins/songs/lib/songshowplusimport.py | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 510a94dfd..d9c8111bb 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -305,10 +305,10 @@ class Ui_MainWindow(object): add_actions(self.fileExportMenu, (self.exportThemeItem, self.exportLanguageItem)) add_actions(self.fileMenu, (self.fileNewItem, self.fileOpenItem, - self.fileSaveItem, self.fileSaveAsItem, None, - self.recentFilesMenu.menuAction(), None, self.printServiceOrderItem, - None, self.fileImportMenu.menuAction(), - self.fileExportMenu.menuAction(), self.fileExitItem)) + self.fileSaveItem, self.fileSaveAsItem, + self.recentFilesMenu.menuAction(), None, + self.fileImportMenu.menuAction(), self.fileExportMenu.menuAction(), + None, self.printServiceOrderItem, self.fileExitItem)) add_actions(self.viewModeMenu, (self.modeDefaultItem, self.modeSetupItem, self.modeLiveItem)) add_actions(self.viewMenu, (self.viewModeMenu.menuAction(), diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index 7f7527c6d..c50df8752 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -102,7 +102,6 @@ class SongShowPlusImport(SongImport): if not isinstance(self.import_source, list): return self.import_wizard.progressBar.setMaximum(len(self.import_source)) - for file in self.import_source: self.sspVerseOrderList = [] otherCount = 0 @@ -111,7 +110,6 @@ class SongShowPlusImport(SongImport): self.import_wizard.incrementProgressBar( WizardStrings.ImportingType % file_name, 0) songData = open(file, 'rb') - while True: blockKey, = struct.unpack("I", songData.read(4)) # The file ends with 4 NUL's @@ -126,8 +124,9 @@ class SongShowPlusImport(SongImport): songData.read(2)) verseName = songData.read(verseNameLength) lengthDescriptorSize, = struct.unpack("B", songData.read(1)) + log.debug(lengthDescriptorSize) # Detect if/how long the length descriptor is - if lengthDescriptorSize == 12: + if lengthDescriptorSize == 12 or lengthDescriptorSize == 20: lengthDescriptor, = struct.unpack("I", songData.read(4)) elif lengthDescriptorSize == 2: lengthDescriptor = 1 @@ -135,6 +134,7 @@ class SongShowPlusImport(SongImport): lengthDescriptor = 0 else: lengthDescriptor, = struct.unpack("B", songData.read(1)) + log.debug(lengthDescriptorSize) data = songData.read(lengthDescriptor) if blockKey == TITLE: self.title = unicode(data, u'cp1252') From 29b67efed63fcacf74958e56b5369d5c988ed38b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 17 Aug 2011 12:47:01 +0200 Subject: [PATCH 61/64] close connection to database when the upgrade failed, to prevent errors on windows --- openlp/plugins/bibles/forms/bibleupgradeform.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 373aa64a3..3286c6f88 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -443,6 +443,7 @@ class BibleUpgradeForm(OpenLPWizard): u'name: "%s" failed' % ( meta_data[u'download source'], meta_data[u'download name'])) + self.newbibles[number].session.close() del self.newbibles[number] critical_error_message_box( translate('BiblesPlugin.UpgradeWizardForm', @@ -468,6 +469,7 @@ class BibleUpgradeForm(OpenLPWizard): language_id = self.newbibles[number].get_language(name) if not language_id: log.warn(u'Upgrading from "%s" failed' % filename[0]) + self.newbibles[number].session.close() del self.newbibles[number] self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', @@ -493,6 +495,7 @@ class BibleUpgradeForm(OpenLPWizard): u'name: "%s" aborted by user' % ( meta_data[u'download source'], meta_data[u'download name'])) + self.newbibles[number].session.close() del self.newbibles[number] self.success[number] = False break @@ -523,6 +526,7 @@ class BibleUpgradeForm(OpenLPWizard): language_id = self.newbibles[number].get_language(name) if not language_id: log.warn(u'Upgrading books from "%s" failed' % name) + self.newbibles[number].session.close() del self.newbibles[number] self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', @@ -548,6 +552,7 @@ class BibleUpgradeForm(OpenLPWizard): if not book_ref_id: log.warn(u'Upgrading books from %s " '\ 'failed - aborted by user' % name) + self.newbibles[number].session.close() del self.newbibles[number] self.success[number] = False break @@ -583,6 +588,8 @@ class BibleUpgradeForm(OpenLPWizard): 'Upgrading Bible %s of %s: "%s"\n' 'Complete')) % (number + 1, max_bibles, name)) + if self.newbibles.has_key(number): + self.newbibles[number].session.close() # Close the last bible's connection if possible. if oldBible is not None: oldBible.close_connection() From 7159559eaaec2f445820c38b3200ccff3481cbc1 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 17 Aug 2011 13:08:32 +0200 Subject: [PATCH 62/64] removed not needed code (this case should never occur and if it does, the manager instance should delete the file) --- openlp/plugins/bibles/forms/bibleupgradeform.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 3286c6f88..322e3219a 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -401,14 +401,6 @@ class BibleUpgradeForm(OpenLPWizard): oldBible = OldBibleDB(self.mediaItem, path=self.temp_dir, file=filename[0]) name = filename[1] - if name is None: - self.incrementProgressBar(unicode(translate( - 'BiblesPlugin.UpgradeWizardForm', - 'Upgrading Bible %s of %s: "%s"\nFailed')) % - (number + 1, max_bibles, name), - self.progressBar.maximum() - self.progressBar.value()) - self.success[number] = False - continue self.progressLabel.setText(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading ...')) % From d7ae55f733178904e71ce14c32ffc5ae3261cc20 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 17 Aug 2011 14:08:33 +0200 Subject: [PATCH 63/64] improved deletion of corrupted files on windows (bug #824129) Fixes: https://launchpad.net/bugs/824129 --- openlp/plugins/bibles/lib/manager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index fcccd7bcf..934aa2d90 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -151,6 +151,7 @@ class BibleManager(object): name = bible.get_name() # Remove corrupted files. if name is None: + bible.session.close() delete_file(os.path.join(self.path, filename)) continue # Find old database versions. From 9baa1374b6ff62bebd2d06408cab75392fbc9271 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 17 Aug 2011 18:16:43 +0200 Subject: [PATCH 64/64] changed instance varaibles to camelCase --- openlp/plugins/alerts/lib/alertstab.py | 132 ++++++++++++------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/openlp/plugins/alerts/lib/alertstab.py b/openlp/plugins/alerts/lib/alertstab.py index 0a1eb3e75..15577fd0e 100644 --- a/openlp/plugins/alerts/lib/alertstab.py +++ b/openlp/plugins/alerts/lib/alertstab.py @@ -44,85 +44,85 @@ class AlertsTab(SettingsTab): self.fontGroupBox.setObjectName(u'fontGroupBox') self.fontLayout = QtGui.QFormLayout(self.fontGroupBox) self.fontLayout.setObjectName(u'fontLayout') - self.FontLabel = QtGui.QLabel(self.fontGroupBox) - self.FontLabel.setObjectName(u'FontLabel') - self.FontComboBox = QtGui.QFontComboBox(self.fontGroupBox) - self.FontComboBox.setObjectName(u'FontComboBox') - self.fontLayout.addRow(self.FontLabel, self.FontComboBox) - self.FontColorLabel = QtGui.QLabel(self.fontGroupBox) - self.FontColorLabel.setObjectName(u'FontColorLabel') - self.ColorLayout = QtGui.QHBoxLayout() - self.ColorLayout.setObjectName(u'ColorLayout') - self.FontColorButton = QtGui.QPushButton(self.fontGroupBox) - self.FontColorButton.setObjectName(u'FontColorButton') - self.ColorLayout.addWidget(self.FontColorButton) - self.ColorLayout.addSpacing(20) - self.BackgroundColorLabel = QtGui.QLabel(self.fontGroupBox) - self.BackgroundColorLabel.setObjectName(u'BackgroundColorLabel') - self.ColorLayout.addWidget(self.BackgroundColorLabel) - self.BackgroundColorButton = QtGui.QPushButton(self.fontGroupBox) - self.BackgroundColorButton.setObjectName(u'BackgroundColorButton') - self.ColorLayout.addWidget(self.BackgroundColorButton) - self.fontLayout.addRow(self.FontColorLabel, self.ColorLayout) - self.FontSizeLabel = QtGui.QLabel(self.fontGroupBox) - self.FontSizeLabel.setObjectName(u'FontSizeLabel') - self.FontSizeSpinBox = QtGui.QSpinBox(self.fontGroupBox) - self.FontSizeSpinBox.setObjectName(u'FontSizeSpinBox') - self.fontLayout.addRow(self.FontSizeLabel, self.FontSizeSpinBox) - self.TimeoutLabel = QtGui.QLabel(self.fontGroupBox) - self.TimeoutLabel.setObjectName(u'TimeoutLabel') - self.TimeoutSpinBox = QtGui.QSpinBox(self.fontGroupBox) - self.TimeoutSpinBox.setMaximum(180) - self.TimeoutSpinBox.setObjectName(u'TimeoutSpinBox') - self.fontLayout.addRow(self.TimeoutLabel, self.TimeoutSpinBox) + self.fontLabel = QtGui.QLabel(self.fontGroupBox) + self.fontLabel.setObjectName(u'fontLabel') + self.fontComboBox = QtGui.QFontComboBox(self.fontGroupBox) + self.fontComboBox.setObjectName(u'fontComboBox') + self.fontLayout.addRow(self.fontLabel, self.fontComboBox) + self.fontColorLabel = QtGui.QLabel(self.fontGroupBox) + self.fontColorLabel.setObjectName(u'fontColorLabel') + self.colorLayout = QtGui.QHBoxLayout() + self.colorLayout.setObjectName(u'colorLayout') + self.fontColorButton = QtGui.QPushButton(self.fontGroupBox) + self.fontColorButton.setObjectName(u'fontColorButton') + self.colorLayout.addWidget(self.fontColorButton) + self.colorLayout.addSpacing(20) + self.backgroundColorLabel = QtGui.QLabel(self.fontGroupBox) + self.backgroundColorLabel.setObjectName(u'backgroundColorLabel') + self.colorLayout.addWidget(self.backgroundColorLabel) + self.backgroundColorButton = QtGui.QPushButton(self.fontGroupBox) + self.backgroundColorButton.setObjectName(u'backgroundColorButton') + self.colorLayout.addWidget(self.backgroundColorButton) + self.fontLayout.addRow(self.fontColorLabel, self.colorLayout) + self.fontSizeLabel = QtGui.QLabel(self.fontGroupBox) + self.fontSizeLabel.setObjectName(u'fontSizeLabel') + self.fontSizeSpinBox = QtGui.QSpinBox(self.fontGroupBox) + self.fontSizeSpinBox.setObjectName(u'fontSizeSpinBox') + self.fontLayout.addRow(self.fontSizeLabel, self.fontSizeSpinBox) + self.timeoutLabel = QtGui.QLabel(self.fontGroupBox) + self.timeoutLabel.setObjectName(u'timeoutLabel') + self.timeoutSpinBox = QtGui.QSpinBox(self.fontGroupBox) + self.timeoutSpinBox.setMaximum(180) + self.timeoutSpinBox.setObjectName(u'timeoutSpinBox') + self.fontLayout.addRow(self.timeoutLabel, self.timeoutSpinBox) create_valign_combo(self, self.fontGroupBox, self.fontLayout) self.leftLayout.addWidget(self.fontGroupBox) self.leftLayout.addStretch() - self.PreviewGroupBox = QtGui.QGroupBox(self.rightColumn) - self.PreviewGroupBox.setObjectName(u'PreviewGroupBox') - self.PreviewLayout = QtGui.QVBoxLayout(self.PreviewGroupBox) - self.PreviewLayout.setObjectName(u'PreviewLayout') - self.FontPreview = QtGui.QLineEdit(self.PreviewGroupBox) - self.FontPreview.setObjectName(u'FontPreview') - self.PreviewLayout.addWidget(self.FontPreview) - self.rightLayout.addWidget(self.PreviewGroupBox) + self.previewGroupBox = QtGui.QGroupBox(self.rightColumn) + self.previewGroupBox.setObjectName(u'previewGroupBox') + self.previewLayout = QtGui.QVBoxLayout(self.previewGroupBox) + self.previewLayout.setObjectName(u'previewLayout') + self.fontPreview = QtGui.QLineEdit(self.previewGroupBox) + self.fontPreview.setObjectName(u'fontPreview') + self.previewLayout.addWidget(self.fontPreview) + self.rightLayout.addWidget(self.previewGroupBox) self.rightLayout.addStretch() # Signals and slots - QtCore.QObject.connect(self.BackgroundColorButton, + QtCore.QObject.connect(self.backgroundColorButton, QtCore.SIGNAL(u'pressed()'), self.onBackgroundColorButtonClicked) - QtCore.QObject.connect(self.FontColorButton, + QtCore.QObject.connect(self.fontColorButton, QtCore.SIGNAL(u'pressed()'), self.onFontColorButtonClicked) - QtCore.QObject.connect(self.FontComboBox, + QtCore.QObject.connect(self.fontComboBox, QtCore.SIGNAL(u'activated(int)'), self.onFontComboBoxClicked) - QtCore.QObject.connect(self.TimeoutSpinBox, + QtCore.QObject.connect(self.timeoutSpinBox, QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged) - QtCore.QObject.connect(self.FontSizeSpinBox, + QtCore.QObject.connect(self.fontSizeSpinBox, QtCore.SIGNAL(u'valueChanged(int)'), self.onFontSizeSpinBoxChanged) def retranslateUi(self): self.fontGroupBox.setTitle( translate('AlertsPlugin.AlertsTab', 'Font')) - self.FontLabel.setText( + self.fontLabel.setText( translate('AlertsPlugin.AlertsTab', 'Font name:')) - self.FontColorLabel.setText( + self.fontColorLabel.setText( translate('AlertsPlugin.AlertsTab', 'Font color:')) - self.BackgroundColorLabel.setText( + self.backgroundColorLabel.setText( translate('AlertsPlugin.AlertsTab', 'Background color:')) - self.FontSizeLabel.setText( + self.fontSizeLabel.setText( translate('AlertsPlugin.AlertsTab', 'Font size:')) - self.FontSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) - self.TimeoutLabel.setText( + self.fontSizeSpinBox.setSuffix(UiStrings().FontSizePtUnit) + self.timeoutLabel.setText( translate('AlertsPlugin.AlertsTab', 'Alert timeout:')) - self.TimeoutSpinBox.setSuffix(UiStrings().Seconds) - self.PreviewGroupBox.setTitle(UiStrings().Preview) - self.FontPreview.setText(UiStrings().OLPV2) + self.timeoutSpinBox.setSuffix(UiStrings().Seconds) + self.previewGroupBox.setTitle(UiStrings().Preview) + self.fontPreview.setText(UiStrings().OLPV2) def onBackgroundColorButtonClicked(self): new_color = QtGui.QColorDialog.getColor( QtGui.QColor(self.bg_color), self) if new_color.isValid(): self.bg_color = new_color.name() - self.BackgroundColorButton.setStyleSheet( + self.backgroundColorButton.setStyleSheet( u'background-color: %s' % self.bg_color) self.updateDisplay() @@ -134,15 +134,15 @@ class AlertsTab(SettingsTab): QtGui.QColor(self.font_color), self) if new_color.isValid(): self.font_color = new_color.name() - self.FontColorButton.setStyleSheet( + self.fontColorButton.setStyleSheet( u'background-color: %s' % self.font_color) self.updateDisplay() def onTimeoutSpinBoxChanged(self): - self.timeout = self.TimeoutSpinBox.value() + self.timeout = self.timeoutSpinBox.value() def onFontSizeSpinBoxChanged(self): - self.font_size = self.FontSizeSpinBox.value() + self.font_size = self.fontSizeSpinBox.value() self.updateDisplay() def load(self): @@ -160,16 +160,16 @@ class AlertsTab(SettingsTab): self.location = settings.value( u'location', QtCore.QVariant(1)).toInt()[0] settings.endGroup() - self.FontSizeSpinBox.setValue(self.font_size) - self.TimeoutSpinBox.setValue(self.timeout) - self.FontColorButton.setStyleSheet( + self.fontSizeSpinBox.setValue(self.font_size) + self.timeoutSpinBox.setValue(self.timeout) + self.fontColorButton.setStyleSheet( u'background-color: %s' % self.font_color) - self.BackgroundColorButton.setStyleSheet( + self.backgroundColorButton.setStyleSheet( u'background-color: %s' % self.bg_color) self.verticalComboBox.setCurrentIndex(self.location) font = QtGui.QFont() font.setFamily(self.font_face) - self.FontComboBox.setCurrentFont(font) + self.fontComboBox.setCurrentFont(font) self.updateDisplay() def save(self): @@ -178,7 +178,7 @@ class AlertsTab(SettingsTab): 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)) - self.font_face = self.FontComboBox.currentFont().family() + self.font_face = self.fontComboBox.currentFont().family() settings.setValue(u'font face', QtCore.QVariant(self.font_face)) settings.setValue(u'timeout', QtCore.QVariant(self.timeout)) self.location = self.verticalComboBox.currentIndex() @@ -187,10 +187,10 @@ class AlertsTab(SettingsTab): def updateDisplay(self): font = QtGui.QFont() - font.setFamily(self.FontComboBox.currentFont().family()) + font.setFamily(self.fontComboBox.currentFont().family()) font.setBold(True) font.setPointSize(self.font_size) - self.FontPreview.setFont(font) - self.FontPreview.setStyleSheet(u'background-color: %s; color: %s' % + self.fontPreview.setFont(font) + self.fontPreview.setStyleSheet(u'background-color: %s; color: %s' % (self.bg_color, self.font_color))