Update of "OptionsDialog"
Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Artifact ID: | b2ecfb4d8ae2fc784c3e5c6c7130a1a0336775bd |
---|---|
Page Name: | OptionsDialog |
Date: | 2020-05-24 11:02:36 |
Original User: | mario |
Mimetype: | text/x-markdown |
Parent: | 10295aee53a4cca7809b310ab9b229cb2b985522 (diff) |
Next | 03bd79e5b4815acf448c94f65e5a3a20505bfbcb |
So, what have we learned?
There's a few gotchas when integrating a config dialog. Notably the lack of examples and spotty documentation made this somewhat tedious to figure out. Hence a few notes to the existing xml data and code in this project.
Some references / archive links:
- https://wiki.openoffice.org/wiki/Documentation/DevGuide/Extensions/Checklist_for_Writing_Extensions
- https://wiki.openoffice.org/wiki/Documentation/DevGuide/Extensions/Options_Dialog
- https://web.archive.org/web/20160101020749/https://wiki.openoffice.org/wiki/Documentation/DevGuide/Extensions/Saving_and_Reading_Data_for_the_Options_Page → the .xcs must be noted in the manifest.xml too
- https://github.com/vmiklos/lo-sdk-examples/tree/master/java/OptionsPageDemo
- https://wiki.openoffice.org/wiki/Documentation/DevGuide/Extensions/Adding_a_Leaf_to_an_Existing_Node
- https://github.com/kelsa-pi/unodit
- https://github.com/p--q/OptionsDialog/tree/master/OptionsDialog/src
- https://forum.openoffice.org/en/forum/viewtopic.php?t=96509 - (Solved) OptionsDialog not showing up for Python Extension
- https://forum.openoffice.org/en/forum/viewtopic.php?p=92278 - (Solved) My addon's option dialog doesn't show up
→ Pretty much the baseline version of what we're using here. Only the
__init__(,args)
parameter was invalid - https://web.archive.org/web/20130801024954/http://wiki.openoffice.org/wiki/Documentation/DevGuide/Text/Editing_Text
OptionsDialog.xcu
The .xcu registers the dialog within one of the Configuration leaves.
Both the leaf
name=
and theId
property can be arbitrary.<node oor:name="pkg.vnd-name.OptionsPageTranslate.leaf" oor:op="fuse">
It doesn't even have to be identical, but perhaps should show some resemblence to the package name still:
<prop oor:name="Id"><value>pkg.vnd-name.OptionsPageTranslate</value></prop>
The .xdl reference in
<prop OptionsPage>
should use%origin%
and perhaps be relative to the .xcu:<prop oor:name="OptionsPage"> <value>%origin%/OptionsDialog.xdl</value> </prop>
EventHandlerService registers a callback, which is meant to populate the dialog widgets or save data changes.
<prop oor:name="EventHandlerService"> <value>pkg.vnd-name.OptionsHandlerImplId</value> </prop>
- The implementation identifier here can be arbitrary again, doesn't have to be
service:pyuno
URL, nor strictly matchId
or the node leafname=
either. Although it's perfectly fine to use the same ID for all three. It's used for the UNO handler registration:
g_ImplementationHelper.addImplementation( class, "pkg.vnd-name.OptionsHandlerImplId", () )
The service name
()
list is likely redundant, because of the absurd number of stubs likegetServiceNames()
etc.For testing, you can define this property to be empty at first:
So the dialog will at least show up in the configuration section, without actually doing anything.
- The implementation identifier here can be arbitrary again, doesn't have to be
OptionsDialog.xdl
The .xdl can be edited using LibreOffice > Tools > Manage Macros > Edit Dialogs..
The
<window
property for titlebars must be disabled however:(Not sure if that can be done in the Dialog editor.)
The
dlg:id="OptionsPageTranslate"
is arbitrary again.
OptionsScheme.xcs
The component-scheme .xcs prepares entries and defaults for the Openoffice registry. It's somewhat redundant in declaring both names and storage types for a single registry tree. (The approach probably made sense for extensions that had multiple "leaves".)
Anyway, the $nodepath
to access the registry later on would be a combination of
oor:package=
, the schema oor:name=
, Leaves
, and the <group oor:name=…
, e.g.
oor:name= group name
↓ ↓
/pkg.vnd-name.packageidentifier/OptionsSchema/Leaves/Settings
↑ ↑
package id "Leaves"
manifest.xml
Must list both the dialog .xcu and the registry schema .xcs:
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data"
manifest:full-path="./OptionsDialog.xcu"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-schema"
manifest:full-path="./OptionsSchema.xcs" />