From 4ca4fa8f23ec394ad1fdf42cfba9b8a857ad60ed Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Wed, 23 Sep 2009 23:39:37 +0100 Subject: [PATCH] Update PptviewController as per ImpressController --- openlp/plugins/presentations/lib/__init__.py | 1 + .../presentations/lib/pptviewcontroller.py | 227 +++++++++--------- .../presentations/presentationplugin.py | 7 +- 3 files changed, 122 insertions(+), 113 deletions(-) diff --git a/openlp/plugins/presentations/lib/__init__.py b/openlp/plugins/presentations/lib/__init__.py index 2ee88aaba..de2b19ce1 100644 --- a/openlp/plugins/presentations/lib/__init__.py +++ b/openlp/plugins/presentations/lib/__init__.py @@ -24,6 +24,7 @@ from impresscontroller import ImpressController #from powerpointcontroller import PowerpointController +from pptviewcontroller import PptviewController from messagelistener import MessageListener from mediaitem import PresentationMediaItem from presentationtab import PresentationTab diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index 324119fc0..d466e28f3 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -22,128 +22,137 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import logging +import os , subprocess +import time import sys -import win32api -from PyQt4 import QtGui, QtCore -from ctypes import * -from ctypes.wintypes import RECT -pptdll = cdll.LoadLibrary(r'C:\Documents and Settings\jonathan\My Documents\Personal\openlp\openlp-2\trunk\openlp\libraries\pptviewlib\pptviewlib.dll') +if os.name == u'nt': + import win32api + from ctypes import * + from ctypes.wintypes import RECT -class BoxLayout(QtGui.QWidget): - def __init__(self, parent=None): - QtGui.QWidget.__init__(self, parent) +from PyQt4 import QtCore + +class PptviewController(object): + """ + Class to control interactions with PowerPOint Viewer Presentations + It creates the runtime Environment , Loads the and Closes the Presentation + As well as trigggering the correct activities based on the users input + """ + global log + log = logging.getLogger(u'PptviewController') + + def __init__(self): + log.debug(u'Initialising') + self.process = None + self.document = None + self.presentation = None + self.pptid = None + self.startPPTView() + + def startPPTView(self): + """ + Loads the PPTVIEWLIB library + """ + log.debug(u'start PPTView') + self.presentation = cdll.LoadLibrary(r'openlp\plugins\presentations\lib\pptviewlib\pptviewlib.dll') + + def kill(self): + """ + Called at system exit to clean up any running presentations + """ + log.debug(u'Kill') + self.closePresentation() + + def loadPresentation(self, presentation): + """ + Called when a presentation is added to the SlideController. + It builds the environment, starts communcations with the background + OpenOffice task started earlier. If OpenOffice is not present is is + started. Once the environment is available the presentation is loaded + and started. + + ``presentation`` + The file name of the presentatios to the run. + """ + log.debug(u'LoadPresentation') + if(self.pptid>=0): + self.CloseClick() + rect = RECT() + rect.left = 0 + rect.top = 0 + rect.width = 0 + rect.hight = 0 + try: + tempfolder = None #r'c:\temp\pptviewlib\' + presentation + self.pptid = self.presentation.OpenPPT(presentation, None, rect, tempfolder) + except: + log.exception(u'Failed to load presentation') + #self.slidecount = pptdll.GetSlideCount(self.pptid) + + def closePresentation(self): + """ + Close presentation and clean up objects + Triggerent by new object being added to SlideController orOpenLP + being shut down + """ + if(self.pptid<0): return + self.presentation.Close(self.pptid) self.pptid = -1 - self.setWindowTitle(u'box layout') - PPTLabel = QtGui.QLabel(u'Open PowerPoint file') - slideLabel = QtGui.QLabel(u'Go to slide #') - self.PPTEdit = QtGui.QLineEdit() - self.slideEdit = QtGui.QLineEdit() - self.total = QtGui.QLabel() - PPTBtn = QtGui.QPushButton(u'Open') - PPTDlgBtn = QtGui.QPushButton(u'...') - slideBtn = QtGui.QPushButton(u'Go') - prev = QtGui.QPushButton(u'Prev') - next = QtGui.QPushButton(u'Next') - blank = QtGui.QPushButton(u'Blank') - unblank = QtGui.QPushButton(u'Unblank') - restart = QtGui.QPushButton(u'Restart') - close = QtGui.QPushButton(u'Close') - resume = QtGui.QPushButton(u'Resume') - stop = QtGui.QPushButton(u'Stop') - pptwindow = QtGui.QWidget() + def isActive(self): + return self.pptid >= 0 - grid = QtGui.QGridLayout() - grid.addWidget(PPTLabel, 0, 0) - grid.addWidget(self.PPTEdit, 0, 1) - grid.addWidget(PPTDlgBtn, 0, 2) - grid.addWidget(PPTBtn, 0, 3) - grid.addWidget(slideLabel, 1, 0) - grid.addWidget(self.slideEdit, 1, 1) - grid.addWidget(slideBtn, 1, 3) - grid.addWidget(prev, 2, 0) - grid.addWidget(next, 2, 1) - grid.addWidget(blank, 3, 0) - grid.addWidget(unblank, 3, 1) - grid.addWidget(restart, 4, 0) - grid.addWidget(stop, 4, 1) - grid.addWidget(resume, 4, 2) - grid.addWidget(pptwindow, 5, 0, 10, 3) - self.connect(PPTBtn, QtCore.SIGNAL(u'clicked()'), self.OpenClick) - self.connect(PPTDlgBtn, QtCore.SIGNAL(u'clicked()'), self.OpenDialog) - self.connect(slideBtn, QtCore.SIGNAL(u'clicked()'), self.GotoClick) - self.connect(prev, QtCore.SIGNAL(u'clicked()'), self.PrevClick) - self.connect(next, QtCore.SIGNAL(u'clicked()'), self.NextClick) - self.connect(blank, QtCore.SIGNAL(u'clicked()'), self.BlankClick) - self.connect(unblank, QtCore.SIGNAL(u'clicked()'), self.UnblankClick) - self.connect(restart, QtCore.SIGNAL(u'clicked()'), self.RestartClick) - self.connect(close, QtCore.SIGNAL(u'clicked()'), self.CloseClick) - self.connect(stop, QtCore.SIGNAL(u'clicked()'), self.StopClick) - self.connect(resume, QtCore.SIGNAL(u'clicked()'), self.ResumeClick) + def resume(self): + if(self.pptid<0): return + self.presentation.Resume(self.pptid) - self.setLayout(grid) + def pause(self): + return - self.resize(300, 150) + def blankScreen(self): + if(self.pptid<0): return + self.presentation.Blank(self.pptid) - def PrevClick(self): + def unblankScreen(self): + if(self.pptid<0): return + self.presentation.Unblank(self.pptid) + + def stop(self): + if(self.pptid<0): return + self.presentation.Stop(self.pptid) + + def go(self): + if(self.pptid<0): return + self.presentation.RestartShow(self.pptid) + + def getSlideNumber(self): + if(self.pptid<0): return -1 + return self.presentation.GetCurrentSlide(self.pptid) + + def setSlideNumber(self, slideno): + if(self.pptid<0): return + self.presentation.GotoSlide(self.pptid, slideno) + + slideNumber = property(getSlideNumber, setSlideNumber) + + def nextStep(self): + """ + Triggers the next effect of slide on the running presentation + """ + if(self.pptid<0): return + self.presentation.NextStep(self.pptid) + + def previousStep(self): + """ + Triggers the previous slide on the running presentation + """ if self.pptid<0: return - pptdll.PrevStep(self.pptid) - self.slideEdit.setText(pptdll.GetCurrentSlide(self.pptid)) + self.presentation.PrevStep(self.pptid) def NextClick(self): if(self.pptid<0): return pptdll.NextStep(self.pptid) self.slideEdit.setText(pptdll.GetCurrentSlide(self.pptid)) - def BlankClick(self): - if(self.pptid<0): return - pptdll.Blank(self.pptid) - - def UnblankClick(self): - if(self.pptid<0): return - pptdll.Unblank(self.pptid) - - def RestartClick(self): - if(self.pptid<0): return - pptdll.RestartShow(self.pptid) - self.slideEdit.setText(pptdll.GetCurrentSlide(self.pptid)) - - def StopClick(self): - if(self.pptid<0): return - pptdll.Stop(self.pptid) - - def ResumeClick(self): - if(self.pptid<0): return - pptdll.Resume(self.pptid) - - def CloseClick(self): - if(self.pptid<0): return - pptdll.Close(self.pptid) - self.pptid = -1 - - def OpenClick(self): - if(self.pptid>=0): - self.CloseClick() - rect = RECT() - rect.left = 100 - rect.top = 100 - rect.width = 900 - rect.hight = 700 - #self.pptid = pptdll.OpenPPT(self.PPTEdit.text, None, rect, "c:\temp\slide') - self.pptid = pptdll.OpenPPT(u'C:\\test 1.ppt', None, rect, 'c:\temp\slide') - self.total.setText(pptdll.GetSlideCount(self.pptid)) - self.slideEdit.setText(unicode(pptdll.GetCurrentSlide(self.pptid))) - - def GotoClick(self): - if(self.pptid<0): return - pptdll.GotoSlide(self.pptid, self.slideEdit.text) - self.slideEdit.setText(pptdll.GetCurrentSlide(self.pptid)) - - def OpenDialog(self): - self.PPTEdit.setText(QtGui.QFileDialog.getOpenFileName(self, 'Open file')) - -app = QtGui.QApplication(sys.argv) -qb = BoxLayout() -qb.show() -sys.exit(app.exec_()) diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index d76e9a493..86aa87632 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -35,6 +35,7 @@ try: from openlp.plugins.presentations.lib import PowerpointController except: pass +from openlp.plugins.presentations.lib import PptviewController class PresentationPlugin(Plugin): @@ -105,10 +106,8 @@ class PresentationPlugin(Plugin): if int(self.config.get_config( u'Powerpoint Viewer', QtCore.Qt.Unchecked)) == QtCore.Qt.Checked: try: - #Check to see if we are Win32 - from win32com.client import Dispatch - powerpoint = PowerpointController() - self.registerControllers(u'Powerpoint Viewer', powerpoint) + pptview = PptviewController() + self.registerControllers(u'Powerpoint Viewer', pptview) except: log.exception(u'Failed to set up plugin for Powerpoint Viewer') #If we have no available controllers disable plugin