Inherit common presentationcontroller

This commit is contained in:
Jonathan Corwin 2009-09-25 23:20:34 +01:00
parent d5a3cf705b
commit 96e3f7bce6
5 changed files with 96 additions and 65 deletions

View File

@ -24,6 +24,7 @@
import os import os
from presentationcontroller import PresentationController
from impresscontroller import ImpressController from impresscontroller import ImpressController
if os.name == u'nt': if os.name == u'nt':
#from powerpointcontroller import PowerpointController #from powerpointcontroller import PowerpointController

View File

@ -73,7 +73,7 @@ class ImpressController(object):
log.debug(u'Kill') log.debug(u'Kill')
self.closePresentation() self.closePresentation()
def loadPresentation(self, presentation): def load_presentation(self, presentation):
""" """
Called when a presentation is added to the SlideController. Called when a presentation is added to the SlideController.
It builds the environment, starts communcations with the background It builds the environment, starts communcations with the background
@ -137,7 +137,7 @@ class ImpressController(object):
log.exception(u'Failed to get COM desktop') log.exception(u'Failed to get COM desktop')
return None return None
def closePresentation(self): def close_presentation(self):
""" """
Close presentation and clean up objects Close presentation and clean up objects
Triggerent by new object being added to SlideController orOpenLP Triggerent by new object being added to SlideController orOpenLP
@ -178,13 +178,13 @@ class ImpressController(object):
slideNumber = property(getSlideNumber, setSlideNumber) slideNumber = property(getSlideNumber, setSlideNumber)
def nextStep(self): def next_step(self):
""" """
Triggers the next effect of slide on the running presentation Triggers the next effect of slide on the running presentation
""" """
self.xSlideShowController.gotoNextEffect() self.xSlideShowController.gotoNextEffect()
def previousStep(self): def previous_step(self):
""" """
Triggers the previous slide on the running presentation Triggers the previous slide on the running presentation
""" """

View File

@ -56,25 +56,25 @@ class MessageListener(object):
Save the handler as any new presentations start here Save the handler as any new presentations start here
""" """
self.handler, file = self.decodeMessage(message) self.handler, file = self.decodeMessage(message)
self.controllers[self.handler].loadPresentation(file) self.controllers[self.handler].load_presentation(file)
def next(self, message): def next(self, message):
""" """
Based on the handler passed at startup triggers the next slide event Based on the handler passed at startup triggers the next slide event
""" """
self.controllers[self.handler].nextStep() self.controllers[self.handler].next_step()
def previous(self, message): def previous(self, message):
""" """
Based on the handler passed at startup triggers the previous slide event Based on the handler passed at startup triggers the previous slide event
""" """
self.controllers[self.handler].previousStep() self.controllers[self.handler].previous_step()
def shutDown(self, message): def shutDown(self, message):
""" """
Based on the handler passed at startup triggers slide show to shut down Based on the handler passed at startup triggers slide show to shut down
""" """
self.controllers[self.handler].closePresentation() self.controllers[self.handler].close_presentation()
def decodeMessage(self, message): def decodeMessage(self, message):
""" """

View File

@ -22,12 +22,15 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
import os
import logging import logging
from ctypes import * from ctypes import *
from ctypes.wintypes import RECT from ctypes.wintypes import RECT
class PptviewController(object): from presentationcontroller import PresentationController
class PptviewController(PresentationController):
""" """
Class to control interactions with PowerPOint Viewer Presentations Class to control interactions with PowerPOint Viewer Presentations
It creates the runtime Environment , Loads the and Closes the Presentation It creates the runtime Environment , Loads the and Closes the Presentation
@ -36,29 +39,34 @@ class PptviewController(object):
global log global log
log = logging.getLogger(u'PptviewController') log = logging.getLogger(u'PptviewController')
def __init__(self): def __init__(self, plugin):
log.debug(u'Initialising') """
Initialise the class
"""
log.debug(u'Initialised')
PresentationController.__init__(self, plugin, u'Powerpoint Viewer')
self.process = None self.process = None
self.document = None
self.presentation = None
self.pptid = None self.pptid = None
self.startPPTView() self.thumbnailpath = os.path.join(plugin.config.get_data_path(),
u'pptview', u'thumbnails')
self.thumbprefix = u'slide'
self.start_process()
def startPPTView(self): def start_process(self):
""" """
Loads the PPTVIEWLIB library Loads the PPTVIEWLIB library
""" """
log.debug(u'start PPTView') log.debug(u'start PPTView')
self.presentation = cdll.LoadLibrary(r'openlp\plugins\presentations\lib\pptviewlib\pptviewlib.dll') self.process = cdll.LoadLibrary(r'openlp\plugins\presentations\lib\pptviewlib\pptviewlib.dll')
def kill(self): def kill(self):
""" """
Called at system exit to clean up any running presentations Called at system exit to clean up any running presentations
""" """
log.debug(u'Kill') log.debug(u'Kill')
self.closePresentation() self.close_presentation()
def loadPresentation(self, presentation): def load_presentation(self, presentation):
""" """
Called when a presentation is added to the SlideController. Called when a presentation is added to the SlideController.
It builds the environment, starts communcations with the background It builds the environment, starts communcations with the background
@ -71,17 +79,20 @@ class PptviewController(object):
""" """
log.debug(u'LoadPresentation') log.debug(u'LoadPresentation')
if self.pptid >= 0: if self.pptid >= 0:
self.closePresentation() self.close_presentation()
rect = RECT(0, 0, 800, 600) # until such time I can get screen info rendermanager = self.plugin.render_manager
#screen = rendermanager.screen_list[rendermanager.current_display]
# x? y?
rect = RECT(0, 0, rendermanager.width, rendermanager.height)
filename = str(presentation.replace(u'/', u'\\')); filename = str(presentation.replace(u'/', u'\\'));
try: try:
tempfolder = None #r'c:\temp\pptviewlib\' + filename.split('u\\')[-1] self.pptid = self.process.OpenPPT(filename, None, rect,
self.pptid = self.presentation.OpenPPT(filename, None, rect, tempfolder) str(self.thumbnailpath))
except: except:
log.exception(u'Failed to load presentation') log.exception(u'Failed to load presentation')
#self.slidecount = pptdll.GetSlideCount(self.pptid)
def closePresentation(self):
def close_presentation(self):
""" """
Close presentation and clean up objects Close presentation and clean up objects
Triggerent by new object being added to SlideController orOpenLP Triggerent by new object being added to SlideController orOpenLP
@ -89,93 +100,110 @@ class PptviewController(object):
""" """
if self.pptid < 0: if self.pptid < 0:
return return
self.presentation.ClosePPT(self.pptid) self.process.ClosePPT(self.pptid)
self.pptid = -1 self.pptid = -1
def nextStep(self): def is_active(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
self.presentation.PrevStep(self.pptid)
def isActive(self):
""" """
Returns true if a presentation is currently active Returns true if a presentation is currently active
""" """
return self.pptid >= 0 return self.pptid >= 0
def resume(self): def resume_presentation(self):
""" """
Resumes a previously paused presentation Resumes a previously paused presentation
""" """
if self.pptid < 0: if self.pptid < 0:
return return
self.presentation.Resume(self.pptid) self.process.Resume(self.pptid)
def pause(self): def pause_presentation(self):
""" """
Not implemented (pauses a presentation) Not implemented (pauses a presentation)
""" """
return return
def blankScreen(self): def blank_screen(self):
""" """
Blanks the screen Blanks the screen
""" """
if self.pptid < 0: if self.pptid < 0:
return return
self.presentation.Blank(self.pptid) self.process.Blank(self.pptid)
def unblankScreen(self): def unblank_screen(self):
""" """
Unblanks (restores) the presentationn Unblanks (restores) the presentationn
""" """
if self.pptid < 0: if self.pptid < 0:
return return
self.presentation.Unblank(self.pptid) self.process.Unblank(self.pptid)
def stop(self): def stop_presentation(self):
""" """
Stops the current presentation and hides the output Stops the current presentation and hides the output
""" """
if self.pptid < 0: if self.pptid < 0:
return return
self.presentation.Stop(self.pptid) self.process.Stop(self.pptid)
def go(self): def start_presentation(self):
""" """
Starts a presentation from the beginning Starts a presentation from the beginning
""" """
if self.pptid < 0: if self.pptid < 0:
return return
self.presentation.RestartShow(self.pptid) self.process.RestartShow(self.pptid)
def getSlideNumber(self): def get_slide_number(self):
""" """
Returns the current slide number Returns the current slide number
""" """
if self.pptid < 0: if self.pptid < 0:
return -1 return 0
return self.presentation.GetCurrentSlide(self.pptid) return self.process.GetCurrentSlide(self.pptid)
def setSlideNumber(self, slideno): def get_slide_count(self):
"""
Returns total number of slides
"""
if self.pptid < 0:
return 0
return self.process.GetSlideCount(self.pptid)
def goto_slide(self, slideno):
""" """
Moves to a specific slide in the presentation Moves to a specific slide in the presentation
""" """
if self.pptid < 0: if self.pptid < 0:
return return
self.presentation.GotoSlide(self.pptid, slideno) self.process.GotoSlide(self.pptid, slideno)
slideNumber = property(getSlideNumber, setSlideNumber) def next_step(self):
"""
Triggers the next effect of slide on the running presentation
"""
if self.pptid < 0:
return
self.process.NextStep(self.pptid)
def previous_step(self):
"""
Triggers the previous slide on the running presentation
"""
if self.pptid < 0:
return
self.process.PrevStep(self.pptid)
def get_slide_preview_file(self, slide_no):
"""
Returns an image path containing a preview for the requested slide
``slide_no``
The slide an image is required for, starting at 1
"""
if self.pptid < 0:
return
return os.path.join(self.thumbnailpath,
self.thumbprefix + slide_no + u'.bmp')

View File

@ -68,8 +68,8 @@ class PresentationPlugin(Plugin):
self, self.icon, u'Presentations', self.controllers) self, self.icon, u'Presentations', self.controllers)
return self.media_item return self.media_item
def registerControllers(self, handle, controller): def registerControllers(self, controller):
self.controllers[handle] = controller self.controllers[controller.name] = controller
def check_pre_conditions(self): def check_pre_conditions(self):
""" """
@ -88,7 +88,8 @@ class PresentationPlugin(Plugin):
#Check to see if we have uno installed #Check to see if we have uno installed
import uno import uno
openoffice = ImpressController() openoffice = ImpressController()
self.registerControllers(u'Impress', openoffice) openoffice.name = u'Impress' # until controller updated
self.registerControllers(openoffice)
except: except:
log.exception(u'Failed to set up plugin for Impress') log.exception(u'Failed to set up plugin for Impress')
if os.name == u'nt': if os.name == u'nt':
@ -99,15 +100,16 @@ class PresentationPlugin(Plugin):
#Check to see if we are Win32 #Check to see if we are Win32
from win32com.client import Dispatch from win32com.client import Dispatch
powerpoint = PowerpointController() powerpoint = PowerpointController()
self.registerControllers(u'Powerpoint', powerpoint) powerpoint.name = u'Powerpoint' # until controller updated
self.registerControllers(powerpoint)
except: except:
log.exception(u'Failed to set up plugin for Powerpoint') log.exception(u'Failed to set up plugin for Powerpoint')
#Lets see if Powerpoint Viewer is required (Default is Not wanted) #Lets see if Powerpoint Viewer is required (Default is Not wanted)
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:
pptview = PptviewController() pptview = PptviewController(self)
self.registerControllers(u'Powerpoint Viewer', pptview) self.registerControllers(pptview)
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