First most basic example
This commit is contained in:
parent
2b6f687b90
commit
bfffab0b19
Binary file not shown.
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<oor:component-data xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:oor="http://openoffice.org/2001/registry" oor:name="Addons" oor:package="org.openoffice.Office">
|
||||||
|
<node oor:name="AddonUI">
|
||||||
|
<node oor:name="OfficeMenuBar">
|
||||||
|
<node oor:name="org.examples.zaz.000" oor:op="replace">
|
||||||
|
<prop oor:name="Title" oor:type="xs:string">
|
||||||
|
<value xml:lang="en">My extension</value>
|
||||||
|
<value xml:lang="es">Mi extensión</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Target" oor:type="xs:string">
|
||||||
|
<value>_self</value>
|
||||||
|
</prop>
|
||||||
|
<node oor:name="Submenu">
|
||||||
|
<node oor:name="m0" oor:op="replace">
|
||||||
|
<prop oor:name="Title" oor:type="xs:string">
|
||||||
|
<value xml:lang="en">Say hello</value>
|
||||||
|
<value xml:lang="es">Di hola</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Context" oor:type="xs:string">
|
||||||
|
<value/>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="URL" oor:type="xs:string">
|
||||||
|
<value>service:org.examples.zaz.000?argument</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Target" oor:type="xs:string">
|
||||||
|
<value>_self</value>
|
||||||
|
</prop>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</oor:component-data>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" manifest:version="1.2">
|
||||||
|
<manifest:file-entry manifest:full-path="main.py" manifest:media-type="application/vnd.sun.star.uno-component;type=Python" />
|
||||||
|
<manifest:file-entry manifest:full-path="Addons.xcu" manifest:media-type="application/vnd.sun.star.configuration-data" />
|
||||||
|
</manifest:manifest>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<description xmlns="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:d="http://openoffice.org/extensions/description/2006">
|
||||||
|
<identifier value="org.examples.zaz.000"/>
|
||||||
|
<version value="0.1.0"/>
|
||||||
|
<display-name>
|
||||||
|
<name lang="en">My first extension</name>
|
||||||
|
<name lang="es">Mi primera extension</name>
|
||||||
|
</display-name>
|
||||||
|
<publisher>
|
||||||
|
<name xlink:href="https://git.cuates.net/elmau" lang="en">El Mau</name>
|
||||||
|
</publisher>
|
||||||
|
</description>
|
|
@ -0,0 +1,49 @@
|
||||||
|
import uno
|
||||||
|
import unohelper
|
||||||
|
from com.sun.star.task import XJobExecutor
|
||||||
|
|
||||||
|
from com.sun.star.awt import MessageBoxButtons as MSG_BUTTONS
|
||||||
|
OK = MSG_BUTTONS.BUTTONS_OK
|
||||||
|
|
||||||
|
|
||||||
|
ID_EXTENSION = 'org.examples.zaz.000'
|
||||||
|
SERVICE = ('com.sun.star.task.Job',)
|
||||||
|
|
||||||
|
|
||||||
|
CTX = uno.getComponentContext()
|
||||||
|
SM = CTX.getServiceManager()
|
||||||
|
|
||||||
|
|
||||||
|
def create_instance(name, with_context=False):
|
||||||
|
if with_context:
|
||||||
|
instance = SM.createInstanceWithContext(name, CTX)
|
||||||
|
else:
|
||||||
|
instance = SM.createInstance(name)
|
||||||
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
def msgbox(message, title='ZAZ Python', buttons=OK, type_msg='infobox'):
|
||||||
|
""" Create message box
|
||||||
|
type_msg: infobox, warningbox, errorbox, querybox, messbox
|
||||||
|
http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1XMessageBoxFactory.html
|
||||||
|
"""
|
||||||
|
toolkit = create_instance('com.sun.star.awt.Toolkit')
|
||||||
|
parent = toolkit.getDesktopWindow()
|
||||||
|
box = toolkit.createMessageBox(parent, type_msg, buttons, title, str(message))
|
||||||
|
return box.execute()
|
||||||
|
|
||||||
|
|
||||||
|
class MyFirstExtension(unohelper.Base, XJobExecutor):
|
||||||
|
|
||||||
|
def __init__(self, ctx):
|
||||||
|
self.ctx = ctx
|
||||||
|
|
||||||
|
# ~ XJobExecutor
|
||||||
|
def trigger(self, event):
|
||||||
|
print(event)
|
||||||
|
msgbox('Dammed World!')
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
g_ImplementationHelper = unohelper.ImplementationHelper()
|
||||||
|
g_ImplementationHelper.addImplementation(MyFirstExtension, ID_EXTENSION, SERVICE)
|
|
@ -0,0 +1,91 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import zipfile
|
||||||
|
import os
|
||||||
|
from subprocess import call
|
||||||
|
|
||||||
|
|
||||||
|
PATH_SOFFICE = 'soffice'
|
||||||
|
APP_TEST = 'calc'
|
||||||
|
UNOPKG = ('unopkg', 'add', '-v', '-f', '-s')
|
||||||
|
|
||||||
|
|
||||||
|
PATH_SOURCE = 'source'
|
||||||
|
PATH_TARGET = 'oxt'
|
||||||
|
|
||||||
|
|
||||||
|
_join = os.path.join
|
||||||
|
_abspath = os.path.abspath
|
||||||
|
_exists = os.path.exists
|
||||||
|
|
||||||
|
|
||||||
|
def _make_oxt(name):
|
||||||
|
path_oxt = _join(PATH_TARGET, f'{name}.oxt')
|
||||||
|
path_source = _join(PATH_SOURCE, name)
|
||||||
|
|
||||||
|
if not _exists(path_source):
|
||||||
|
print(f'\tNot found: {path_source}')
|
||||||
|
return
|
||||||
|
|
||||||
|
print('\tStart compress OXT extension...')
|
||||||
|
|
||||||
|
z = zipfile.ZipFile(path_oxt, 'w', compression=zipfile.ZIP_DEFLATED)
|
||||||
|
root_len = len(_abspath(path_source))
|
||||||
|
for root, dirs, files in os.walk(path_source):
|
||||||
|
relative = _abspath(root)[root_len:]
|
||||||
|
for f in files:
|
||||||
|
fullpath = _join(root, f)
|
||||||
|
file_name = _join(relative, f)
|
||||||
|
z.write(fullpath, file_name, zipfile.ZIP_DEFLATED)
|
||||||
|
z.close()
|
||||||
|
|
||||||
|
print('\tOXT extension created successfully...')
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def _install(name):
|
||||||
|
path_oxt = _join(PATH_TARGET, f'{name}.oxt')
|
||||||
|
|
||||||
|
if not _exists(path_oxt):
|
||||||
|
print(f'\tNot found: {path_oxt}')
|
||||||
|
return
|
||||||
|
|
||||||
|
print('\tStart install extension...')
|
||||||
|
|
||||||
|
call(UNOPKG + (path_oxt,))
|
||||||
|
print('\tInstall correctly...')
|
||||||
|
print(f'\tStart LibreOffice {APP_TEST}')
|
||||||
|
call((PATH_SOFFICE, f'--{APP_TEST}'))
|
||||||
|
|
||||||
|
print('\tExtension make successfully...')
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
print(f'Extension: {args.name}')
|
||||||
|
|
||||||
|
if args.make_oxt:
|
||||||
|
_make_oxt(args.name)
|
||||||
|
|
||||||
|
if args.install:
|
||||||
|
_install(args.name)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def _process_command_line_arguments():
|
||||||
|
parser = argparse.ArgumentParser(description='Make LibreOffice extensions')
|
||||||
|
|
||||||
|
parser.add_argument('-m', '--make-oxt', action='store_true',
|
||||||
|
default=False, required=False)
|
||||||
|
parser.add_argument('-i', '--install', action='store_true',
|
||||||
|
default=False, required=False)
|
||||||
|
parser.add_argument('name')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
args = _process_command_line_arguments()
|
||||||
|
main(args)
|
Loading…
Reference in New Issue