From da04465e41dbe89f88eb44e99382eec416f5eb80 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 27 Mar 2011 20:47:27 +0200 Subject: [PATCH 01/15] r1431 From 596c9288817116f2b943a8ce79753ffdbed5b718 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 16 Apr 2011 17:14:21 +0100 Subject: [PATCH 02/15] Untidy the code I tided, so it functions correctly! --- .../lib/pptviewlib/pptviewlib.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp index 93e7b17d9..fcb7c66ca 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp @@ -350,18 +350,18 @@ BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) LRESULT lResult; DEBUG("GetPPTViewerPath: start\n"); - if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, + if (RegOpenKeyEx(HKEY_CLASSES_ROOT, "PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) - && (RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) - != ERROR_SUCCESS) - && (RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey) - != ERROR_SUCCESS)) - { - return FALSE; - } + if(RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + if (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + { + return FALSE; + } dwType = REG_SZ; dwSize = (DWORD)stringSize; lResult = RegQueryValueEx(hKey, NULL, NULL, &dwType, (LPBYTE)pptViewerPath, From 91d53b7adcf6bc7ce96fe2aac80fe2e351268bdc Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 16 Apr 2011 17:15:08 +0100 Subject: [PATCH 03/15] Add the dll too --- .../lib/pptviewlib/pptviewlib.dll | Bin 78848 -> 80896 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll index 36581e00bb3bde8d7d059b50bf7b0eb51bd92a6e..000115803f98b1b2fd8f3c4e8b41703a8250d882 100644 GIT binary patch delta 139 zcmZp8!P4-9Wx@|B$^9#R8KB?+1Ct^*BPRnx5m4aNWFf{ZCQhD-io%;GGWs)eaq<8~ z6POqn_$I$%(q=T;EXK@N!3@;DS-qN9K-6P_{nj57&pR(mJ@77gzwch4LI&r_p55B) h1x2aFsd*)vtGhip!Rn7sv6{MAVHwAEMlHtwoB&~)D(V0L delta 135 zcmZqp!P4-8Wx@}s@6L_B3{dcZfk}~@k&}U;2q Date: Sat, 16 Apr 2011 22:47:54 +0100 Subject: [PATCH 04/15] Further detection efforts --- .../lib/pptviewlib/pptviewlib.cpp | 91 +++++++++++++++--- .../lib/pptviewlib/pptviewlib.dll | Bin 80896 -> 80384 bytes .../presentations/lib/pptviewlib/pptviewlib.h | 1 + 3 files changed, 77 insertions(+), 15 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp index fcb7c66ca..75242eec4 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include #include #include @@ -88,7 +90,12 @@ DllExport BOOL CheckInstalled() char cmdLine[MAX_PATH * 2]; DEBUG("CheckInstalled\n"); - return GetPPTViewerPath(cmdLine, sizeof(cmdLine)); + BOOL found = GetPPTViewerPath(cmdLine, sizeof(cmdLine)); + if(found) + { + DEBUG("Exe: %s\n", cmdLine); + } + return found; } // Open the PointPoint, count the slides and take a snapshot of each slide @@ -160,7 +167,7 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, pptView[id].rect.bottom = rect.bottom; pptView[id].rect.right = rect.right; } - strcat_s(cmdLine, MAX_PATH * 2, "/F /S \""); + strcat_s(cmdLine, MAX_PATH * 2, " /F /S \""); strcat_s(cmdLine, MAX_PATH * 2, filename); strcat_s(cmdLine, MAX_PATH * 2, "\""); memset(&si, 0, sizeof(si)); @@ -189,7 +196,7 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, Sleep(10); if (!CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi)) { - DEBUG("OpenPPT: CreateProcess failed\n"); + DEBUG("OpenPPT: CreateProcess failed: %s\n", cmdLine); ClosePPT(id); return -1; } @@ -344,24 +351,79 @@ BOOL SavePPTInfo(int id) // Get the path of the PowerPoint viewer from the registry BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) +{ + char cwd[MAX_PATH]; + + DEBUG("GetPPTViewerPath: start\n"); + if(GetPPTViewerPathFromReg(pptViewerPath, stringSize)) + { + if(_access(pptViewerPath, 0) != -1) + { + DEBUG("GetPPTViewerPath: exit registry\n"); + return TRUE; + } + } + // This is where it gets ugly. PPT2007 it seems no longer stores its + // location in the registry. So we have to use the defaults which will + // upset those who like to put things somewhere else + + // Viewer 2007 in 64bit Windows: + if(_access("C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + 0) != -1) + { + strcpy_s( + "C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 64bit 2007\n"); + return TRUE; + } + // Viewer 2007 in 32bit Windows: + if(_access("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0) + != -1) + { + strcpy_s("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 32bit 2007\n"); + return TRUE; + } + // Give them the opportunity to place it in the same folder as the app + _getcwd(cwd, MAX_PATH); + strcat_s(cwd, MAX_PATH, "\\PPTVIEW.EXE"); + if(_access(cwd, 0) != -1) + { + strcpy_s(pptViewerPath, stringSize, cwd); + DEBUG("GetPPTViewerPath: exit local\n"); + return TRUE; + } + DEBUG("GetPPTViewerPath: exit fail\n"); + return FALSE; +} +BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize) { HKEY hKey; DWORD dwType, dwSize; LRESULT lResult; - DEBUG("GetPPTViewerPath: start\n"); - if (RegOpenKeyEx(HKEY_CLASSES_ROOT, + // The following registry settings are for, respectively, (I think) + // PPT Viewer 2007 (older versions. Latest not in registry) & PPT Viewer 2010 + // PPT Viewer 2003 (recent versions) + // PPT Viewer 2003 (older versions) + // PPT Viewer 97 + if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, "PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) - if(RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) - != ERROR_SUCCESS) - if (RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey) - != ERROR_SUCCESS) - { - return FALSE; - } + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "PowerPointViewer.Show.11\\shell\\Show\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS) + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\Show\\command", 0, KEY_READ, &hKey) + != ERROR_SUCCESS)) + { + return FALSE; + } dwType = REG_SZ; dwSize = (DWORD)stringSize; lResult = RegQueryValueEx(hKey, NULL, NULL, &dwType, (LPBYTE)pptViewerPath, @@ -373,7 +435,6 @@ BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) } // remove "%1" from end of key value pptViewerPath[strlen(pptViewerPath) - 4] = '\0'; - DEBUG("GetPPTViewerPath: exit ok\n"); return TRUE; } diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll index 000115803f98b1b2fd8f3c4e8b41703a8250d882..524b30ebb1f0c70089e3faa96c771c2e5d855358 100644 GIT binary patch delta 13402 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 E4^>buV*mgE delta 12282 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 diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h index 4c98f8bb3..98b0a21ab 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h @@ -49,6 +49,7 @@ LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK CwpProc(int nCode, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam); BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize); +BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize); HBITMAP CaptureWindow(HWND hWnd); VOID SaveBitmap(CHAR* filename, HBITMAP hBmp) ; VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename); From c7843012e961d262bf48e7e957cb2a3f7cb9da6f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 18 Apr 2011 16:57:37 +0200 Subject: [PATCH 05/15] fixed bug #76330 Fixes: https://launchpad.net/bugs/7633099 --- openlp/core/ui/firsttimeform.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index dc1932015..dade26cf9 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -140,6 +140,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): return FirstTimePage.Songs elif self.currentId() == FirstTimePage.Progress: return -1 + elif self.currentId() == FirstTimePage.NoInternet: + return FirstTimePage.Progress else: return self.currentId() + 1 @@ -147,11 +149,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ Detects Page changes and updates as approprate. """ - if pageId == FirstTimePage.NoInternet: - self.finishButton.setVisible(True) - self.finishButton.setEnabled(True) - self.nextButton.setVisible(False) - elif pageId == FirstTimePage.Defaults: + if pageId == FirstTimePage.Defaults: self.themeComboBox.clear() for iter in xrange(self.themesListWidget.count()): item = self.themesListWidget.item(iter) From 3c8568443be04767f931e304506a4916f76ed688 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 18 Apr 2011 16:30:32 +0100 Subject: [PATCH 06/15] Delete the correct item Fixes: https://launchpad.net/bugs/764651 --- openlp/core/ui/settingsform.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 949d907b4..9f3d5208f 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -82,7 +82,9 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): item_name.setIcon(icon) self.settingListWidget.insertItem(location, item_name) else: - self.stackedLayout.takeAt(location) + # add then remove tab to stop th UI displaying it even if + # it is not required. + self.stackedLayout.takeAt(pos) def accept(self): """ From 133145d5c226c4eff5ccb8905fe452c9f8010c29 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 18 Apr 2011 16:31:20 +0100 Subject: [PATCH 07/15] Fix comment --- openlp/core/ui/settingsform.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 9f3d5208f..1967412f5 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -75,6 +75,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): Add a tab to the form at a specific location """ log.debug(u'Inserting %s tab' % tab.tabTitle) + # add the tab to get it to display in the correct part of the screen pos = self.stackedLayout.addWidget(tab) if is_active: item_name = QtGui.QListWidgetItem(tab.tabTitleVisible) @@ -82,7 +83,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): item_name.setIcon(icon) self.settingListWidget.insertItem(location, item_name) else: - # add then remove tab to stop th UI displaying it even if + # then remove tab to stop the UI displaying it even if # it is not required. self.stackedLayout.takeAt(pos) From c402e5c0750fa1a317756fc415728f45a8cd3307 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Wed, 20 Apr 2011 19:01:25 +0100 Subject: [PATCH 08/15] non-debug version of dll --- .../lib/pptviewlib/pptviewlib.dll | Bin 80384 -> 44032 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll index 524b30ebb1f0c70089e3faa96c771c2e5d855358..14bcf4eb8059ab0c863e3d9427b4dce76adeee57 100644 GIT binary patch literal 44032 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 Avj6}9 From f3f18361504d32084e491a3f860a97515afb2835 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 21 Apr 2011 00:21:31 +0100 Subject: [PATCH 09/15] remove pptviewlib.dll and build it via windows-builder.py --- .../lib/pptviewlib/pptviewlib.dll | Bin 44032 -> 0 bytes scripts/windows-builder.py | 60 +++++++++++++++--- 2 files changed, 51 insertions(+), 9 deletions(-) delete mode 100644 openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll deleted file mode 100644 index 14bcf4eb8059ab0c863e3d9427b4dce76adeee57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44032 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 YvmLd?Z4)-F-C$o}M}d0%Uqj%30 1 and (sys.argv[1] == u'-v' or sys.argv[1] == u'--verbose'): - print "Script path:", script_path - print "Branch path:", branch_path - print "Source path:", source_path - print "\"dist\" path:", dist_path - print "PyInstaller:", pyi_build - print "Inno Setup path:", innosetup_path - print "Windows resources:", winres_path - update_code() + for arg in sys.argv: + if arg == u'-v' or arg == u'--verbose': + print "Script path:", script_path + print "Branch path:", branch_path + print "Source path:", source_path + print "\"dist\" path:", dist_path + print "PyInstaller:", pyi_build + print "Inno Setup path:", innosetup_exe + print "Windows resources:", winres_path + print "VC++ path:", vcenv_bat + print "PPTVIEWLIB path:", pptviewlib_path + elif arg == u'--skip-update': + skip_update = True + elif arg == u'/?' or arg == u'-h' or arg == u'--help': + print u'Command options:' + print u' -v --verbose : More verbose output' + print u' --skip-update : Do not update or revert current branch' + exit() + if not skip_update: + update_code() + build_pptviewlib() run_pyinstaller() write_version_file() copy_enchant() From c0b0c1a82d390586dc6d2e9bc84b975c9f463976 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 21 Apr 2011 08:35:17 +0100 Subject: [PATCH 10/15] tabs to spaces *grr at VC++* --- .../lib/pptviewlib/pptviewlib.cpp | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp index 75242eec4..a679df582 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp @@ -91,11 +91,11 @@ DllExport BOOL CheckInstalled() DEBUG("CheckInstalled\n"); BOOL found = GetPPTViewerPath(cmdLine, sizeof(cmdLine)); - if(found) - { - DEBUG("Exe: %s\n", cmdLine); - } - return found; + if(found) + { + DEBUG("Exe: %s\n", cmdLine); + } + return found; } // Open the PointPoint, count the slides and take a snapshot of each slide @@ -196,7 +196,7 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, Sleep(10); if (!CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi)) { - DEBUG("OpenPPT: CreateProcess failed: %s\n", cmdLine); + DEBUG("OpenPPT: CreateProcess failed: %s\n", cmdLine); ClosePPT(id); return -1; } @@ -355,48 +355,48 @@ BOOL GetPPTViewerPath(char *pptViewerPath, int stringSize) char cwd[MAX_PATH]; DEBUG("GetPPTViewerPath: start\n"); - if(GetPPTViewerPathFromReg(pptViewerPath, stringSize)) - { - if(_access(pptViewerPath, 0) != -1) - { - DEBUG("GetPPTViewerPath: exit registry\n"); - return TRUE; - } - } - // This is where it gets ugly. PPT2007 it seems no longer stores its - // location in the registry. So we have to use the defaults which will - // upset those who like to put things somewhere else + if(GetPPTViewerPathFromReg(pptViewerPath, stringSize)) + { + if(_access(pptViewerPath, 0) != -1) + { + DEBUG("GetPPTViewerPath: exit registry\n"); + return TRUE; + } + } + // This is where it gets ugly. PPT2007 it seems no longer stores its + // location in the registry. So we have to use the defaults which will + // upset those who like to put things somewhere else - // Viewer 2007 in 64bit Windows: - if(_access("C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", - 0) != -1) - { - strcpy_s( - "C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", - stringSize, pptViewerPath); - DEBUG("GetPPTViewerPath: exit 64bit 2007\n"); - return TRUE; - } - // Viewer 2007 in 32bit Windows: - if(_access("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0) - != -1) - { - strcpy_s("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", - stringSize, pptViewerPath); - DEBUG("GetPPTViewerPath: exit 32bit 2007\n"); - return TRUE; - } - // Give them the opportunity to place it in the same folder as the app - _getcwd(cwd, MAX_PATH); - strcat_s(cwd, MAX_PATH, "\\PPTVIEW.EXE"); - if(_access(cwd, 0) != -1) - { - strcpy_s(pptViewerPath, stringSize, cwd); - DEBUG("GetPPTViewerPath: exit local\n"); - return TRUE; - } + // Viewer 2007 in 64bit Windows: + if(_access("C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + 0) != -1) + { + strcpy_s( + "C:\\Program Files (x86)\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 64bit 2007\n"); + return TRUE; + } + // Viewer 2007 in 32bit Windows: + if(_access("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", 0) + != -1) + { + strcpy_s("C:\\Program Files\\Microsoft Office\\Office12\\PPTVIEW.EXE", + stringSize, pptViewerPath); + DEBUG("GetPPTViewerPath: exit 32bit 2007\n"); + return TRUE; + } + // Give them the opportunity to place it in the same folder as the app + _getcwd(cwd, MAX_PATH); + strcat_s(cwd, MAX_PATH, "\\PPTVIEW.EXE"); + if(_access(cwd, 0) != -1) + { + strcpy_s(pptViewerPath, stringSize, cwd); + DEBUG("GetPPTViewerPath: exit local\n"); + return TRUE; + } DEBUG("GetPPTViewerPath: exit fail\n"); - return FALSE; + return FALSE; } BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize) { @@ -404,11 +404,11 @@ BOOL GetPPTViewerPathFromReg(char *pptViewerPath, int stringSize) DWORD dwType, dwSize; LRESULT lResult; - // The following registry settings are for, respectively, (I think) - // PPT Viewer 2007 (older versions. Latest not in registry) & PPT Viewer 2010 - // PPT Viewer 2003 (recent versions) - // PPT Viewer 2003 (older versions) - // PPT Viewer 97 + // The following registry settings are for, respectively, (I think) + // PPT Viewer 2007 (older versions. Latest not in registry) & PPT Viewer 2010 + // PPT Viewer 2003 (recent versions) + // PPT Viewer 2003 (older versions) + // PPT Viewer 97 if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, "PowerPointViewer.Show.12\\shell\\Show\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) From ba45d7e113fa9fa3a81e3644ae0b1bf81f0a37b0 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 21 Apr 2011 19:14:07 +0200 Subject: [PATCH 11/15] fixed names; hide/show menu entries when disabeling/enabeling the songs plugin --- openlp/plugins/songs/songsplugin.py | 35 ++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 0cace4977..85294dee2 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -65,10 +65,12 @@ class SongsPlugin(Plugin): def initialise(self): log.info(u'Songs Initialising') Plugin.initialise(self) + self.songImportItem.setVisible(True) + self.songExportItem.setVisible(True) self.toolsReindexItem.setVisible(True) action_list = ActionList.get_instance() - action_list.add_action(self.SongImportItem, UiStrings().Import) - action_list.add_action(self.SongExportItem, UiStrings().Export) + action_list.add_action(self.songImportItem, UiStrings().Import) + action_list.add_action(self.songExportItem, UiStrings().Export) action_list.add_action(self.toolsReindexItem, UiStrings().Tools) def addImportMenuItem(self, import_menu): @@ -81,13 +83,13 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongImportItem = base_action(import_menu, u'SongImportItem') - self.SongImportItem.setText(translate('SongsPlugin', '&Song')) - self.SongImportItem.setToolTip(translate('SongsPlugin', + self.songImportItem = base_action(import_menu, u'songImportItem') + self.songImportItem.setText(translate('SongsPlugin', '&Song')) + self.songImportItem.setToolTip(translate('SongsPlugin', 'Import songs using the import wizard.')) - import_menu.addAction(self.SongImportItem) + import_menu.addAction(self.songImportItem) # Signals and slots - QtCore.QObject.connect(self.SongImportItem, + QtCore.QObject.connect(self.songImportItem, QtCore.SIGNAL(u'triggered()'), self.onSongImportItemClicked) def addExportMenuItem(self, export_menu): @@ -100,13 +102,13 @@ class SongsPlugin(Plugin): use it as their parent. """ # Main song import menu item - will eventually be the only one - self.SongExportItem = base_action(export_menu, u'SongExportItem') - self.SongExportItem.setText(translate('SongsPlugin', '&Song')) - self.SongExportItem.setToolTip(translate('SongsPlugin', + self.songExportItem = base_action(export_menu, u'songExportItem') + self.songExportItem.setText(translate('SongsPlugin', '&Song')) + self.songExportItem.setToolTip(translate('SongsPlugin', 'Exports songs using the export wizard.')) - export_menu.addAction(self.SongExportItem) + export_menu.addAction(self.songExportItem) # Signals and slots - QtCore.QObject.connect(self.SongExportItem, + QtCore.QObject.connect(self.songExportItem, QtCore.SIGNAL(u'triggered()'), self.onSongExportItemClicked) def addToolsMenuItem(self, tools_menu): @@ -256,9 +258,12 @@ class SongsPlugin(Plugin): """ log.info(u'Songs Finalising') self.manager.finalise() + self.songImportItem.setVisible(False) + self.songExportItem.setVisible(False) self.toolsReindexItem.setVisible(False) action_list = ActionList.get_instance() - action_list.remove_action(self.SongImportItem, UiStrings().Import) - action_list.remove_action(self.SongExportItem, UiStrings().Export) + action_list.remove_action(self.songImportItem, UiStrings().Import) + action_list.remove_action(self.songExportItem, UiStrings().Export) action_list.remove_action(self.toolsReindexItem, UiStrings().Tools) - Plugin.finalise(self) \ No newline at end of file + Plugin.finalise(self) + From 65925efd253bc07f1631fd89144a96aab5391b98 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 22 Apr 2011 08:30:07 +0200 Subject: [PATCH 12/15] fixed logo pixelation --- openlp/core/ui/maindisplay.py | 2 -- openlp/core/ui/mainwindow.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 3931139d1..d5960f966 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -69,8 +69,6 @@ class MainDisplay(DisplayWidget): self.hideMode = None self.videoHide = False self.override = {} - mainIcon = build_icon(u':/icon/openlp-logo-16x16.png') - self.setWindowIcon(mainIcon) self.retranslateUi() self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;') self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 32a28d474..cb01e37a1 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -71,7 +71,7 @@ class Ui_MainWindow(object): mainWindow.setObjectName(u'MainWindow') mainWindow.resize(self.settingsmanager.width, self.settingsmanager.height) - mainWindow.setWindowIcon(build_icon(u':/icon/openlp-logo-16x16.png')) + mainWindow.setWindowIcon(build_icon(u':/icon/openlp-logo-64x64.png')) mainWindow.setDockNestingEnabled(True) # Set up the main container, which contains all the other form widgets. self.MainContent = QtGui.QWidget(mainWindow) From c66ffbd725c160018abb1bab5cc65de7e8061390 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 22 Apr 2011 09:06:38 +0200 Subject: [PATCH 13/15] removed import --- openlp/core/ui/maindisplay.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index d5960f966..c413ec8c9 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -34,7 +34,7 @@ from PyQt4 import QtCore, QtGui, QtWebKit from PyQt4.phonon import Phonon from openlp.core.lib import Receiver, build_html, ServiceItem, image_to_byte, \ - build_icon, translate + translate from openlp.core.ui import HideMode From a73012e3f6903d995ae1b82386b88704472aa040 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 22 Apr 2011 23:32:08 +0100 Subject: [PATCH 14/15] StevanP's changes, so vc variables don't need setting now --- scripts/windows-builder.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index 1046fb71e..c74da4e09 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -108,8 +108,8 @@ sphinx_exe = os.path.join(os.path.split(python_exe)[0], u'Scripts', u'sphinx-build.exe') hhc_exe = os.path.join(os.getenv(u'PROGRAMFILES'), 'HTML Help Workshop', u'hhc.exe') -vcenv_bat = os.path.join(os.getenv(u'PROGRAMFILES'), 'Microsoft Visual Studio 9.0', - u'VC', 'vcvarsall.bat') +vcbuild_exe = os.path.join(os.getenv(u'PROGRAMFILES'), + 'Microsoft Visual Studio 9.0', 'VC','vcpackages','vcbuild.exe') # Base paths script_path = os.path.split(os.path.abspath(__file__))[0] @@ -280,13 +280,8 @@ def run_innosetup(): def build_pptviewlib(): print u'Building PPTVIEWLIB.DLL...' - vcenv = Popen(vcenv_bat) - code = vcenv.wait() - if code != 0: - raise Exception(u'Error creating VC++ environment') - vcbuild = Popen((u'vcbuild', '/rebuild', - os.path.join(pptviewlib_path, u'pptviewlib.vcproj'), - u'Release|Win32')) + vcbuild = Popen((vcbuild_exe, '/rebuild', + os.path.join(pptviewlib_path, u'pptviewlib.vcproj'), u'Release|Win32')) code = vcbuild.wait() if code != 0: raise Exception(u'Error building pptviewlib.dll') @@ -305,7 +300,7 @@ def main(): print "PyInstaller:", pyi_build print "Inno Setup path:", innosetup_exe print "Windows resources:", winres_path - print "VC++ path:", vcenv_bat + print "VCBuild path:", vcbuild_exe print "PPTVIEWLIB path:", pptviewlib_path elif arg == u'--skip-update': skip_update = True From 9b1c9243195bc37c6d72f761215580dabebc7bb7 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 23 Apr 2011 11:06:47 +0100 Subject: [PATCH 15/15] u's and spaces --- scripts/windows-builder.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index c74da4e09..ef5528cd7 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -109,7 +109,7 @@ sphinx_exe = os.path.join(os.path.split(python_exe)[0], u'Scripts', hhc_exe = os.path.join(os.getenv(u'PROGRAMFILES'), 'HTML Help Workshop', u'hhc.exe') vcbuild_exe = os.path.join(os.getenv(u'PROGRAMFILES'), - 'Microsoft Visual Studio 9.0', 'VC','vcpackages','vcbuild.exe') + u'Microsoft Visual Studio 9.0', u'VC', u'vcpackages', u'vcbuild.exe') # Base paths script_path = os.path.split(os.path.abspath(__file__))[0] @@ -280,12 +280,12 @@ def run_innosetup(): def build_pptviewlib(): print u'Building PPTVIEWLIB.DLL...' - vcbuild = Popen((vcbuild_exe, '/rebuild', + vcbuild = Popen((vcbuild_exe, u'/rebuild', os.path.join(pptviewlib_path, u'pptviewlib.vcproj'), u'Release|Win32')) code = vcbuild.wait() if code != 0: raise Exception(u'Error building pptviewlib.dll') - copy(os.path.join(pptviewlib_path, u'Release', 'pptviewlib.dll'), + copy(os.path.join(pptviewlib_path, u'Release', u'pptviewlib.dll'), pptviewlib_path) def main():