openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #08180
[Merge] lp:~j-corwin/openlp/present into lp:openlp
Jonathan Corwin has proposed merging lp:~j-corwin/openlp/present into lp:openlp.
Requested reviews:
OpenLP Core (openlp-core)
Related bugs:
Bug #598361 in OpenLP: "AttributeError: 'NoneType' object has no attribute 'isPaused'"
https://bugs.launchpad.net/openlp/+bug/598361
Bug #608149 in OpenLP: "Presentations are not intuitive"
https://bugs.launchpad.net/openlp/+bug/608149
For more details, see:
https://code.launchpad.net/~j-corwin/openlp/present/+merge/58637
Additional fallback checks to try and locate PPTVIEW.EXE
Add the building of PPTVIEWLIB.DLL into the Windows Builds script, and so remove dll from repository
--
https://code.launchpad.net/~j-corwin/openlp/present/+merge/58637
Your team OpenLP Core is requested to review the proposed merge of lp:~j-corwin/openlp/present into lp:openlp.
=== modified file 'openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp'
--- openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp 2011-03-24 19:04:02 +0000
+++ openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp 2011-04-21 08:19:24 +0000
@@ -27,6 +27,8 @@
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
+#include <io.h>
+#include <direct.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -88,7 +90,12 @@
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 @@
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 @@
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;
}
@@ -345,15 +352,70 @@
// 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");
+ // 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)
&& (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,
@@ -373,7 +435,6 @@
}
// remove "%1" from end of key value
pptViewerPath[strlen(pptViewerPath) - 4] = '\0';
- DEBUG("GetPPTViewerPath: exit ok\n");
return TRUE;
}
=== removed file 'openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll'
Binary files openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll 2011-03-16 23:22:11 +0000 and openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll 1970-01-01 00:00:00 +0000 differ
=== modified file 'openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h'
--- openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h 2011-03-24 19:04:02 +0000
+++ openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h 2011-04-21 08:19:24 +0000
@@ -49,6 +49,7 @@
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);
=== modified file 'scripts/windows-builder.py'
--- scripts/windows-builder.py 2011-04-02 20:17:53 +0000
+++ scripts/windows-builder.py 2011-04-21 08:19:24 +0000
@@ -52,6 +52,12 @@
http://upx.sourceforge.net/, extract it into C:\%PROGRAMFILES%\UPX, and then
add that directory to your PATH environment variable.
+Sphinx
+ This is used to build the documentation
+
+HTML Help Workshop
+ This is used to create the help file
+
PyInstaller
PyInstaller should be a checkout of revision 844 of trunk, and in a
directory called, "pyinstaller" on the same level as OpenLP's Bazaar shared
@@ -81,6 +87,10 @@
shared repository directory. This means your code should be in a directory
structure like this: "openlp\branch-name".
+Visual C++ 2008 Express Edition
+ This is to build pptviewlib.dll, the library for controlling the
+ PowerPointViewer
+
windows-builder.py
This script, of course. It should be in the "scripts" directory of OpenLP.
@@ -98,6 +108,8 @@
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')
# Base paths
script_path = os.path.split(os.path.abspath(__file__))[0]
@@ -119,6 +131,8 @@
build_path = os.path.join(branch_path, u'build', u'pyi.win32', u'OpenLP')
dist_path = os.path.join(branch_path, u'dist', u'OpenLP')
enchant_path = os.path.join(site_packages, u'enchant')
+pptviewlib_path = os.path.join(source_path, u'plugins', u'presentations',
+ u'lib', u'pptviewlib')
def update_code():
os.chdir(branch_path)
@@ -264,17 +278,45 @@
if code != 0:
raise Exception(u'Error running Inno Setup')
+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'))
+ code = vcbuild.wait()
+ if code != 0:
+ raise Exception(u'Error building pptviewlib.dll')
+ copy(os.path.join(pptviewlib_path, u'Release', 'pptviewlib.dll'),
+ pptviewlib_path)
+
def main():
+ skip_update = False
import sys
- if len(sys.argv) > 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()
Follow ups