Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


On Wed, 2011-08-17 at 09:06 +0100, Caolán McNamara wrote:
I imagine that if you basically opengrok for mailmerge.py and
mailmerge.component and follow the same pattern for your one that it'll
get you a lot closer.

Seeing as this is a bit tricky to get up and running, attached is a
rough-and-ready patch to turn wizards->letter into "hello world" in
python.

i.e.

a) add a "hello_world.component" (which gets run through the usual xslt
script via the local makefile.mk to tweak it to give the right location
where the .py will finally get installed) that describes a
hello_world.py component. The .component has the implementation name,
e.g. org.openoffice.comp.pyuno.demo.HelloWorld in it and the services it
implements, e.g. com.sun.star.task.Job

b) I added a hello_world.py that implements that, see its
g_ImplementationHelper.addImplementation for the matching implementation
name and services

c) add that hello_world.component to "postprocess" where it will be
basically added as an entry into the services.rdb in the final install
sets install/program/services.rdb (which is an xml file these days. That
should end up having "<component loader="com.sun.star.loader.Python"
uri="vnd.openoffice.pymodule:hello_world"><implementation
name="org.openoffice.comp.pyuno.demo.HelloWorld"><service
name="com.sun.star.task.Job"/></implementation></component></components>" in it).

d) change the wizards->letter line in officecfg to call it

e) modify scp2 to install it

f) I haven't a clue what the entry in instsetoo_native does anymore, I
think I used to know :-)

hope this helps.

C.
diff --git a/instsetoo_native/util/makefile.mk b/instsetoo_native/util/makefile.mk
index 8132e8c..137ea2f 100644
--- a/instsetoo_native/util/makefile.mk
+++ b/instsetoo_native/util/makefile.mk
@@ -69,6 +69,7 @@ LOCALPYFILES= \
     $(BIN)$/pythonloader.py \
     $(BIN)$/officehelper.py \
     $(BIN)$/mailmerge.py \
+    $(BIN)$/hello_world.py \
     $(BIN)$/msgbox.py
 .ENDIF
 
diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu 
b/officecfg/registry/data/org/openoffice/Office/Common.xcu
index 998ab38..305f36a 100644
--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu
@@ -386,7 +386,7 @@
     <node oor:name="Wizard">
       <node oor:name="m0" oor:op="replace" install:module="writer">
         <prop oor:name="URL"  oor:type="xs:string">
-          <value >service:com.sun.star.wizards.letter.CallWizard?start</value>
+          <value >service:org.openoffice.comp.pyuno.demo.HelloWorld?insert</value>
         </prop>
         <prop oor:name="Title">
           <value xml:lang="en-US">~Letter...</value>
diff --git a/postprocess/packcomponents/makefile.mk b/postprocess/packcomponents/makefile.mk
index bdfecb4..689792d 100644
--- a/postprocess/packcomponents/makefile.mk
+++ b/postprocess/packcomponents/makefile.mk
@@ -376,7 +376,7 @@ my_components += avmediagstreamer
 my_components += avmedia.jar
 .END
 
-my_ooo_components = mailmerge
+my_ooo_components = mailmerge hello_world
 
 .INCLUDE: target.mk
 
diff --git a/pyuno/demo/hello_world_comp.py b/pyuno/demo/hello_world_comp.py
deleted file mode 100644
index 32f4056..0000000
--- a/pyuno/demo/hello_world_comp.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-
-import uno
-import unohelper
-
-from com.sun.star.task import XJobExecutor
-
-# implement a UNO component by deriving from the standard unohelper.Base class
-# and from the interface(s) you want to implement.
-class HelloWorldJob(unohelper.Base, XJobExecutor):
-    def __init__(self, ctx):
-        # store the component context for later use
-        self.ctx = ctx
-
-    def trigger(self, args):
-        # note: args[0] == "HelloWorld", see below config settings
-
-        # retrieve the desktop object
-        desktop = self.ctx.ServiceManager.createInstanceWithContext(
-            "com.sun.star.frame.Desktop", self.ctx)
-
-        # get current document model
-        model = desktop.getCurrentComponent()
-
-        # access the document's text property
-        text = model.Text
-
-        # create a cursor
-        cursor = text.createTextCursor()
-
-        # insert the text into the document
-        text.insertString(cursor, "Hello World", 0)
-
-# pythonloader looks for a static g_ImplementationHelper variable
-g_ImplementationHelper = unohelper.ImplementationHelper()
-
-g_ImplementationHelper.addImplementation( \
-    HelloWorldJob,                               # UNO object class
-    "org.openoffice.comp.pyuno.demo.HelloWorld", # implemenation name
-    ("com.sun.star.task.Job",),)                 # list of implemented services
-                                                 # (the only service)
-
-# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp
index d48bba1..a1c0e77 100644
--- a/scp2/source/ooo/file_ooo.scp
+++ b/scp2/source/ooo/file_ooo.scp
@@ -2126,6 +2126,17 @@ File gid_File_Extension_Dictionary_Zu
 End
 #endif
 
+#ifndef AIX
+#ifndef DISABLE_PYUNO
+File gid_File_PyHelloWorld
+    TXT_FILE_BODY;
+    Dir = gid_Dir_Program;
+    Name = "hello_world.py";
+    Styles = (PACKED);
+End
+#endif
+#endif
+
 // #ifdef BUILD_SPECIAL
 // File gid_File_Extension_Oxt_Oooimprovement
 //    Name = "OOoImprovement.oxt";
diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp
index f9f29be..f700f30 100644
--- a/scp2/source/ooo/module_hidden_ooo.scp
+++ b/scp2/source/ooo/module_hidden_ooo.scp
@@ -693,6 +693,7 @@ Module gid_Module_Root_Files_6
     gid_File_Oo_Ad_Ldap_Xcd_Sample,
     gid_File_Share_Registry_Main_Xcd,
     gid_File_Share_Registry_Forcedefault_Xcd,
+       gid_File_PyHelloWorld,
        gid_File_Pymailmerge,
        gid_File_Pymailmerge_msgbox,
     gid_File_Xsl_Common_Measure_Conversion,
diff --git a/scripting/prj/d.lst b/scripting/prj/d.lst
index f1caf45..f935f29 100644
--- a/scripting/prj/d.lst
+++ b/scripting/prj/d.lst
@@ -16,6 +16,7 @@ mkdir: %_DEST%\bin\pyuno
 
 ..\%__SRC%\lib\lib*static*.dylib %_DEST%\lib\lib*static*.dylib
 ..\%__SRC%\misc\mailmerge.component %_DEST%\xml\mailmerge.component
+..\%__SRC%\misc\hello_world.component %_DEST%\xml\hello_world.component
 ..\%__SRC%\misc\ScriptFramework.component %_DEST%\xml\ScriptFramework.component
 ..\%__SRC%\misc\ScriptProviderForJava.component %_DEST%\xml\ScriptProviderForJava.component
 ..\%__SRC%\misc\basprov.component %_DEST%\xml\basprov.component
diff --git a/scripting/source/pyprov/makefile.mk b/scripting/source/pyprov/makefile.mk
index a304d97..8a90649 100755
--- a/scripting/source/pyprov/makefile.mk
+++ b/scripting/source/pyprov/makefile.mk
@@ -40,12 +40,13 @@ TARGET=pyprov
 ALL : ALLTAR \
     $(DLLDEST)$/officehelper.py        \
     $(DLLDEST)$/msgbox.py \
-    $(DLLDEST)$/mailmerge.py
+    $(DLLDEST)$/mailmerge.py \
+    $(DLLDEST)$/hello_world.py
 
 $(DLLDEST)$/%.py: %.py
     cp $? $@
 
-ALLTAR : $(MISC)/mailmerge.component
+ALLTAR : $(MISC)/mailmerge.component $(MISC)/hello_world.component
 
 $(MISC)/mailmerge.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
         mailmerge.component
@@ -53,6 +54,12 @@ $(MISC)/mailmerge.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
         '$(COMPONENTPREFIX_BASIS_PYTHON)mailmerge' -o $@ \
         $(SOLARENV)/bin/createcomponent.xslt mailmerge.component
 
+$(MISC)/hello_world.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
+        hello_world.component
+    $(XSLTPROC) --nonet --stringparam uri \
+        '$(COMPONENTPREFIX_BASIS_PYTHON)hello_world' -o $@ \
+        $(SOLARENV)/bin/createcomponent.xslt hello_world.component
+
 # scripting provider extension
 .IF "$(L10N_framework)"=="" && "$(ENABLE_SCRIPTING_PYTHON)" == "YES"
 
--- /dev/null   2011-08-03 13:24:57.102409564 +0100
+++ b/scripting/source/pyprov/hello_world.component     2011-08-17 16:21:45.755744886 +0100
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component loader="com.sun.star.loader.Python"
+    xmlns="http://openoffice.org/2010/uno-components";>
+  <implementation name="org.openoffice.comp.pyuno.demo.HelloWorld">
+    <service name="com.sun.star.task.Job"/>
+  </implementation>
+</component>
--- /dev/null   2011-08-03 13:24:57.102409564 +0100
+++ b/scripting/source/pyprov/hello_world.py    2011-08-17 16:03:13.340544116 +0100
@@ -0,0 +1,43 @@
+# -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+
+import uno
+import unohelper
+
+from com.sun.star.task import XJobExecutor
+
+# implement a UNO component by deriving from the standard unohelper.Base class
+# and from the interface(s) you want to implement.
+class HelloWorldJob(unohelper.Base, XJobExecutor):
+    def __init__(self, ctx):
+        # store the component context for later use
+        self.ctx = ctx
+
+    def trigger(self, args):
+        # note: args[0] == "HelloWorld", see below config settings
+
+        # retrieve the desktop object
+        desktop = self.ctx.ServiceManager.createInstanceWithContext(
+            "com.sun.star.frame.Desktop", self.ctx)
+
+        # get current document model
+        model = desktop.getCurrentComponent()
+
+        # access the document's text property
+        text = model.Text
+
+        # create a cursor
+        cursor = text.createTextCursor()
+
+        # insert the text into the document
+        text.insertString(cursor, "Hello World", 0)
+
+# pythonloader looks for a static g_ImplementationHelper variable
+g_ImplementationHelper = unohelper.ImplementationHelper()
+
+g_ImplementationHelper.addImplementation( \
+    HelloWorldJob,                               # UNO object class
+    "org.openoffice.comp.pyuno.demo.HelloWorld", # implemenation name
+    ("com.sun.star.task.Job",),)                 # list of implemented services
+                                                 # (the only service)
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab:

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.