1
0
Fork 0
libreoffice/odk/examples/python/toolpanel/toolpanel.py
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

138 lines
4.8 KiB
Python

#
# 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 .
#
# inspired by core/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent
#
import unohelper
from com.sun.star.ui import XUIElementFactory
from com.sun.star.ui import XUIElement
from com.sun.star.ui.UIElementType import TOOLPANEL as unoTOOLPANEL
from com.sun.star.ui import XToolPanel
implementation_name = "org.libreoffice.example.toolpanel.pocFactory" # as defined in Factory.xcu
implementation_services = ("org.libreoffice.example.toolpanel.pocFactory",)
xdlPath = "toolpanels/poc.xdl" # the path inside the oxt
extensionID = "org.libreoffice.example.toolpanel" # as defined in description.xml
########################################################################
########################################################################
class pocToolPanel( unohelper.Base, XToolPanel ):
def __init__ ( self, xPanelWindow, ctx ):
self.ctx = ctx
self.PanelWindow = xPanelWindow
self.Window = xPanelWindow
def createAccessible( self, i_parentAccessible ):
return self.PanelWindow
########################################################################
########################################################################
class pyPanel( unohelper.Base, XUIElement ):
def __init__ ( self, ctx, xFrame, xParentWindow, url ):
self.ctx = ctx
self.xParentWindow = xParentWindow
self.toolpanel = None
self.m_panelRootWindow = None
self.Frame = xFrame
self.ResourceURL = url
self.Type = unoTOOLPANEL
def getRealInterface( self ):
if not self.toolpanel:
rootWindow = self.getOrCreatePanelRootWindow()
self.toolpanel = pocToolPanel(rootWindow, self.ctx)
return self.toolpanel
def getOrCreatePanelRootWindow( self ):
pip = self.ctx.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider" )
s = pip.getPackageLocation(extensionID)
dialogUrl = s + "/" + xdlPath
provider = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.awt.ContainerWindowProvider",self.ctx)
self.m_panelRootWindow = provider.createContainerWindow(dialogUrl,"",self.xParentWindow, None)
return self.m_panelRootWindow
def postDisposing( self ):
super.postDisposing()
if self.m_panelRootWindow:
self.m_panelRootWindow.dispose()
self.m_panelRootWindow = None
self.toolpanel = None
return
#######################################################################
#######################################################################
class pocFactory( unohelper.Base, XUIElementFactory ):
def __init__ ( self, ctx ):
self.ctx = ctx
def createUIElement( self, url, properties ):
xParentWindow = None
xFrame = None
xUIElement = None
for arg in properties:
if arg.Name == "Frame":
xFrame = arg.Value
elif arg.Name == "ParentWindow":
xParentWindow = arg.Value
if xFrame and xParentWindow:
try:
xUIElement = pyPanel(self.ctx, xFrame, xParentWindow, url)
except Exception as e:
print(e)
return xUIElement
########################################################################
########################################################################
# pythonloader looks for a static g_ImplementationHelper variable
g_ImplementationHelper = unohelper.ImplementationHelper ()
# add the FormatFactory class to the implementation container,
# which the loader uses to register/instantiate the component.
g_ImplementationHelper.addImplementation (pocFactory,
implementation_name,
implementation_services,
)