forked from openlp/openlp
Update PptviewController as per ImpressController
This commit is contained in:
parent
85b647e3c3
commit
4ca4fa8f23
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
from impresscontroller import ImpressController
|
from impresscontroller import ImpressController
|
||||||
#from powerpointcontroller import PowerpointController
|
#from powerpointcontroller import PowerpointController
|
||||||
|
from pptviewcontroller import PptviewController
|
||||||
from messagelistener import MessageListener
|
from messagelistener import MessageListener
|
||||||
from mediaitem import PresentationMediaItem
|
from mediaitem import PresentationMediaItem
|
||||||
from presentationtab import PresentationTab
|
from presentationtab import PresentationTab
|
||||||
|
@ -22,128 +22,137 @@
|
|||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os , subprocess
|
||||||
|
import time
|
||||||
import sys
|
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):
|
from PyQt4 import QtCore
|
||||||
def __init__(self, parent=None):
|
|
||||||
QtGui.QWidget.__init__(self, parent)
|
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.pptid = -1
|
||||||
self.setWindowTitle(u'box layout')
|
|
||||||
|
|
||||||
PPTLabel = QtGui.QLabel(u'Open PowerPoint file')
|
def isActive(self):
|
||||||
slideLabel = QtGui.QLabel(u'Go to slide #')
|
return self.pptid >= 0
|
||||||
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()
|
|
||||||
|
|
||||||
grid = QtGui.QGridLayout()
|
def resume(self):
|
||||||
grid.addWidget(PPTLabel, 0, 0)
|
if(self.pptid<0): return
|
||||||
grid.addWidget(self.PPTEdit, 0, 1)
|
self.presentation.Resume(self.pptid)
|
||||||
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)
|
|
||||||
|
|
||||||
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
|
if self.pptid<0: return
|
||||||
pptdll.PrevStep(self.pptid)
|
self.presentation.PrevStep(self.pptid)
|
||||||
self.slideEdit.setText(pptdll.GetCurrentSlide(self.pptid))
|
|
||||||
|
|
||||||
def NextClick(self):
|
def NextClick(self):
|
||||||
if(self.pptid<0): return
|
if(self.pptid<0): return
|
||||||
pptdll.NextStep(self.pptid)
|
pptdll.NextStep(self.pptid)
|
||||||
self.slideEdit.setText(pptdll.GetCurrentSlide(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_())
|
|
||||||
|
@ -35,6 +35,7 @@ try:
|
|||||||
from openlp.plugins.presentations.lib import PowerpointController
|
from openlp.plugins.presentations.lib import PowerpointController
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
from openlp.plugins.presentations.lib import PptviewController
|
||||||
|
|
||||||
|
|
||||||
class PresentationPlugin(Plugin):
|
class PresentationPlugin(Plugin):
|
||||||
@ -105,10 +106,8 @@ class PresentationPlugin(Plugin):
|
|||||||
if int(self.config.get_config(
|
if int(self.config.get_config(
|
||||||
u'Powerpoint Viewer', QtCore.Qt.Unchecked)) == QtCore.Qt.Checked:
|
u'Powerpoint Viewer', QtCore.Qt.Unchecked)) == QtCore.Qt.Checked:
|
||||||
try:
|
try:
|
||||||
#Check to see if we are Win32
|
pptview = PptviewController()
|
||||||
from win32com.client import Dispatch
|
self.registerControllers(u'Powerpoint Viewer', pptview)
|
||||||
powerpoint = PowerpointController()
|
|
||||||
self.registerControllers(u'Powerpoint Viewer', powerpoint)
|
|
||||||
except:
|
except:
|
||||||
log.exception(u'Failed to set up plugin for Powerpoint Viewer')
|
log.exception(u'Failed to set up plugin for Powerpoint Viewer')
|
||||||
#If we have no available controllers disable plugin
|
#If we have no available controllers disable plugin
|
||||||
|
Loading…
Reference in New Issue
Block a user