209 lines
7.5 KiB
Java
209 lines
7.5 KiB
Java
#
|
|
# 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)
|