openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #01109
[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)
Close down ppt/impress if no other presentations open
Automatic ppt type detection.
--
https://code.launchpad.net/~j-corwin/openlp/present/+merge/20778
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/plugins/presentations/lib/impresscontroller.py'
--- openlp/plugins/presentations/lib/impresscontroller.py 2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/impresscontroller.py 2010-03-05 19:53:14 +0000
@@ -25,6 +25,7 @@
# OOo API documentation:
# http://api.openoffice.org/docs/common/ref/com/sun/star/presentation/XSlideShowController.html
+# http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Basic/Getting_Information_about_UNO_Objects#Inspecting_interfaces_during_debugging
# http://docs.go-oo.org/sd/html/classsd_1_1SlideShow.html
# http://www.oooforum.org/forum/viewtopic.phtml?t=5252
# http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Working_with_Presentations
@@ -62,7 +63,8 @@
"""
log.debug(u'Initialising')
PresentationController.__init__(self, plugin, u'Impress')
- self.supports = [u'.odp', u'.ppt', u'.pps', u'.pptx', u'.ppsx']
+ self.supports = [u'.odp']
+ self.alsosupports = [u'.ppt', u'.pps', u'.pptx', u'.ppsx']
self.process = None
self.desktop = None
@@ -145,10 +147,17 @@
doc.close_presentation()
if os.name != u'nt':
desktop = self.get_uno_desktop()
+ else:
+ desktop = self.get_com_desktop()
+ docs = desktop.getComponents()
+ if docs.hasElements():
+ log.debug(u'OpenOffice not terminated')
+ else:
try:
desktop.terminate()
+ log.debug(u'OpenOffice killed')
except:
- pass
+ log.exception(u'Failed to terminate OpenOffice')
def add_doc(self, name):
log.debug(u'Add Doc OpenOffice')
=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py 2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py 2010-03-05 19:53:14 +0000
@@ -56,7 +56,7 @@
# be instanced by the base MediaManagerItem
self.ListViewWithDnD_class = PresentationListView
MediaManagerItem.__init__(self, parent, icon, title)
- self.message_listener = MessageListener(controllers)
+ self.message_listener = MessageListener(self)
def initPluginNameVisible(self):
self.PluginNameVisible = self.trUtf8('Presentation')
@@ -66,7 +66,8 @@
fileType = u''
for controller in self.controllers:
if self.controllers[controller].enabled:
- for type in self.controllers[controller].supports:
+ types = self.controllers[controller].supports + self.controllers[controller].alsosupports
+ for type in types:
if fileType.find(type) == -1:
fileType += u'*%s ' % type
self.OnNewFileMasks = self.trUtf8('Presentations (%s)' % fileType)
@@ -106,6 +107,9 @@
#load the drop down selection
if self.controllers[item].enabled:
self.DisplayTypeComboBox.addItem(item)
+ if self.DisplayTypeComboBox.count() > 1:
+ self.DisplayTypeComboBox.insertItem(0, u'Automatic')
+ self.DisplayTypeComboBox.setCurrentIndex(0)
def loadList(self, list):
currlist = self.getFileList()
@@ -145,10 +149,16 @@
return False
service_item.title = unicode(self.DisplayTypeComboBox.currentText())
service_item.shortname = unicode(self.DisplayTypeComboBox.currentText())
- controller = self.controllers[service_item.shortname]
+ shortname = service_item.shortname
+
for item in items:
bitem = self.ListView.item(item.row())
filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
+ if shortname==u'Automatic':
+ service_item.shortname = self.findControllerByType(filename)
+ if not service_item.shortname:
+ return False
+ controller = self.controllers[service_item.shortname]
(path, name) = os.path.split(filename)
doc = controller.add_doc(filename)
if doc.get_slide_preview_file(1) is None:
@@ -159,5 +169,19 @@
service_item.add_from_command(path, name, img)
i = i + 1
img = doc.get_slide_preview_file(i)
- controller.remove_doc(doc)
+ controller.remove_doc(doc)
return True
+
+ def findControllerByType(self, filename):
+ filetype = os.path.splitext(filename)[1]
+ if not filetype:
+ return None
+ for controller in self.controllers:
+ if self.controllers[controller].enabled:
+ if filetype in self.controllers[controller].supports:
+ return controller
+ for controller in self.controllers:
+ if self.controllers[controller].enabled:
+ if filetype in self.controllers[controller].alsosupports:
+ return controller
+ return None
=== modified file 'openlp/plugins/presentations/lib/messagelistener.py'
--- openlp/plugins/presentations/lib/messagelistener.py 2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/messagelistener.py 2010-03-05 19:53:14 +0000
@@ -154,8 +154,9 @@
"""
log.info(u'Message Listener loaded')
- def __init__(self, controllers):
- self.controllers = controllers
+ def __init__(self, mediaitem):
+ self.controllers = mediaitem.controllers
+ self.mediaitem = mediaitem
self.previewHandler = Controller(False)
self.liveHandler = Controller(True)
# messages are sent from core.ui.slidecontroller
@@ -188,6 +189,12 @@
"""
log.debug(u'Startup called with message %s' % message)
self.handler, file, isLive = self.decodeMessage(message)
+ filetype = os.path.splitext(file)[1][1:]
+ if self.handler==u'Automatic':
+ self.handler = self.mediaitem.findControllerByType(file)
+ if not self.handler:
+ return
+
if isLive:
self.liveHandler.addHandler(self.controllers[self.handler], file)
else:
=== modified file 'openlp/plugins/presentations/lib/powerpointcontroller.py'
--- openlp/plugins/presentations/lib/powerpointcontroller.py 2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/powerpointcontroller.py 2010-03-05 19:53:14 +0000
@@ -52,7 +52,7 @@
"""
log.debug(u'Initialising')
PresentationController.__init__(self, plugin, u'Powerpoint')
- self.supports = [u'.ppt', u'.pps']
+ self.supports = [u'.ppt', u'.pps', u'.pptx', u'.ppsx']
self.process = None
def check_available(self):
@@ -100,6 +100,8 @@
doc.close_presentation()
if self.process is None:
return
+ if self.process.Presentations.Count > 0:
+ return
try:
self.process.Quit()
except:
=== modified file 'openlp/plugins/presentations/lib/pptviewcontroller.py'
--- openlp/plugins/presentations/lib/pptviewcontroller.py 2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/pptviewcontroller.py 2010-03-05 19:53:14 +0000
@@ -49,7 +49,7 @@
log.debug(u'Initialising')
self.process = None
PresentationController.__init__(self, plugin, u'Powerpoint Viewer')
- self.supports = [u'.ppt', u'.pps']
+ self.supports = [u'.ppt', u'.pps', u'.pptx', u'.ppsx']
def check_available(self):
"""
=== modified file 'openlp/plugins/presentations/lib/presentationcontroller.py'
--- openlp/plugins/presentations/lib/presentationcontroller.py 2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/presentationcontroller.py 2010-03-05 19:53:14 +0000
@@ -93,6 +93,7 @@
Name of the application, to appear in the application
"""
self.supports = []
+ self.alsosupports = []
self.docs = []
self.plugin = plugin
self.name = name
Follow ups