summaryrefslogtreecommitdiffstats
path: root/wizards/com/sun/star/wizards/document/OfficeDocument.py
diff options
context:
space:
mode:
Diffstat (limited to 'wizards/com/sun/star/wizards/document/OfficeDocument.py')
-rw-r--r--wizards/com/sun/star/wizards/document/OfficeDocument.py208
1 files changed, 208 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/document/OfficeDocument.py b/wizards/com/sun/star/wizards/document/OfficeDocument.py
new file mode 100644
index 000000000..1483f902d
--- /dev/null
+++ b/wizards/com/sun/star/wizards/document/OfficeDocument.py
@@ -0,0 +1,208 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+import uno
+import traceback
+from unohelper import systemPathToFileUrl, absolutize
+from ..common.Desktop import Desktop
+from ..common.SystemDialog import SystemDialog
+
+from com.sun.star.awt import WindowDescriptor
+from com.sun.star.awt import Rectangle
+from com.sun.star.awt.WindowClass import TOP
+from com.sun.star.task import ErrorCodeIOException
+
+#Window Constants
+com_sun_star_awt_WindowAttribute_BORDER \
+ = uno.getConstantByName( "com.sun.star.awt.WindowAttribute.BORDER" )
+com_sun_star_awt_WindowAttribute_SIZEABLE \
+ = uno.getConstantByName( "com.sun.star.awt.WindowAttribute.SIZEABLE" )
+com_sun_star_awt_WindowAttribute_MOVEABLE \
+ = uno.getConstantByName( "com.sun.star.awt.WindowAttribute.MOVEABLE" )
+com_sun_star_awt_VclWindowPeerAttribute_CLIPCHILDREN \
+ = uno.getConstantByName(
+ "com.sun.star.awt.VclWindowPeerAttribute.CLIPCHILDREN" )
+
+class OfficeDocument(object):
+ '''Creates a new instance of OfficeDocument '''
+
+ def __init__(self, _xMSF):
+ self.xMSF = _xMSF
+
+ @classmethod
+ def attachEventCall(self, xComponent, EventName, EventType, EventURL):
+ try:
+ oEventProperties = list(range(2))
+ oEventProperties[0] = uno.createUnoStruct(
+ 'com.sun.star.beans.PropertyValue')
+ oEventProperties[0].Name = "EventType"
+ oEventProperties[0].Value = EventType
+ # "Service", "StarBasic"
+ oEventProperties[1] = uno.createUnoStruct(
+ 'com.sun.star.beans.PropertyValue')
+ oEventProperties[1].Name = "Script" #"URL";
+ oEventProperties[1].Value = EventURL
+ uno.invoke(xComponent.Events, "replaceByName",
+ (EventName, uno.Any("[]com.sun.star.beans.PropertyValue",
+ tuple(oEventProperties))))
+ except Exception:
+ traceback.print_exc()
+
+ def dispose(self, xMSF, xComponent):
+ try:
+ if xComponent is not None:
+ xFrame = xComponent.CurrentController.Frame
+ if xComponent.isModified():
+ xComponent.setModified(False)
+
+ Desktop.dispatchURL(xMSF, ".uno:CloseDoc", xFrame)
+
+ except Exception:
+ traceback.print_exc()
+
+ @classmethod
+ def createNewFrame(self, xMSF, listener, FrameName="_blank"):
+ xFrame = None
+ if FrameName.lower() == "WIZARD_LIVE_PREVIEW".lower():
+ xFrame = self.createNewPreviewFrame(xMSF, listener)
+ else:
+ xF = Desktop.getDesktop(xMSF)
+ xFrame = xF.findFrame(FrameName, 0)
+ if listener is not None:
+ xFF = xF.getFrames()
+ xFF.remove(xFrame)
+ xF.addTerminateListener(listener)
+
+ return xFrame
+
+ @classmethod
+ def createNewPreviewFrame(self, xMSF, listener):
+ xToolkit = None
+ try:
+ xToolkit = xMSF.createInstance("com.sun.star.awt.Toolkit")
+ except Exception:
+ # TODO Auto-generated catch block
+ traceback.print_exc()
+
+ #describe the window and its properties
+ aDescriptor = WindowDescriptor()
+ aDescriptor.Type = TOP
+ aDescriptor.WindowServiceName = "window"
+ aDescriptor.ParentIndex = -1
+ aDescriptor.Parent = None
+ aDescriptor.Bounds = Rectangle(10, 10, 640, 480)
+
+ #Set Window Attributes
+ gnDefaultWindowAttributes = \
+ com_sun_star_awt_WindowAttribute_BORDER + \
+ com_sun_star_awt_WindowAttribute_MOVEABLE + \
+ com_sun_star_awt_WindowAttribute_SIZEABLE + \
+ com_sun_star_awt_VclWindowPeerAttribute_CLIPCHILDREN
+
+ aDescriptor.WindowAttributes = gnDefaultWindowAttributes
+ #create a new blank container window
+ xPeer = None
+ try:
+ xPeer = xToolkit.createWindow(aDescriptor)
+ except Exception:
+ traceback.print_exc()
+
+ #define some further properties of the frame window
+ #if it's needed .-)
+ #xPeer->setBackground(...);
+ #create new empty frame and set window on it
+ xFrame = None
+ try:
+ xFrame = xMSF.createInstance("com.sun.star.frame.Frame")
+ except Exception:
+ traceback.print_exc()
+
+ xFrame.initialize(xPeer)
+ #from now this frame is usable ...
+ #and not part of the desktop tree.
+ #You are alone with him .-)
+ if listener is not None:
+ Desktop.getDesktop(xMSF).addTerminateListener(listener)
+
+ return xFrame
+
+ @classmethod
+ def load(self, xInterface, sURL, sFrame, xValues):
+ xComponent = None
+ try:
+ if not sURL.startswith("file://"):
+ sURL = systemPathToFileUrl(sURL)
+ xComponent = xInterface.loadComponentFromURL(
+ sURL, sFrame, 0, tuple(xValues))
+ except Exception:
+ traceback.print_exc()
+
+ return xComponent
+
+ @classmethod
+ def store(self, xMSF, xComponent, StorePath, FilterName):
+ try:
+ if len(FilterName):
+ oStoreProperties = list(range(2))
+ oStoreProperties[0] = uno.createUnoStruct(
+ 'com.sun.star.beans.PropertyValue')
+ oStoreProperties[0].Name = "FilterName"
+ oStoreProperties[0].Value = FilterName
+ oStoreProperties[1] = uno.createUnoStruct(
+ 'com.sun.star.beans.PropertyValue')
+ oStoreProperties[1].Name = "InteractionHandler"
+ oStoreProperties[1].Value = xMSF.createInstance(
+ "com.sun.star.comp.uui.UUIInteractionHandler")
+ else:
+ oStoreProperties = list(range(0))
+
+ StorePath = systemPathToFileUrl(StorePath)
+ sPath = StorePath[:(StorePath.rfind("/") + 1)]
+ sFile = StorePath[(StorePath.rfind("/") + 1):]
+ xComponent.storeToURL(
+ absolutize(sPath, sFile), tuple(oStoreProperties))
+ return True
+ except ErrorCodeIOException:
+ #Throw this exception when trying to save a file
+ #which is already opened in Libreoffice
+ #TODO: handle it properly
+ return True
+ pass
+ except Exception:
+ traceback.print_exc()
+ return False
+
+ def close(self, xComponent):
+ bState = False
+ if xComponent is not None:
+ try:
+ xComponent.close(True)
+ bState = True
+ except Exception:
+ print ("could not close doc")
+ bState = False
+
+ else:
+ bState = True
+
+ return bState
+
+ def showMessageBox(
+ self, xMSF, windowServiceName, windowAttribute, MessageText):
+
+ return SystemDialog.showMessageBox(
+ xMSF, windowServiceName, windowAttribute, MessageText)