update
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user