[sdk/codevis] doc/xml-docbook: Add plugins docbook entries (Plugin documentation file)

Tarcisio Fischer null at kde.org
Thu Oct 19 14:56:09 BST 2023


Git commit 1ee9ec7350aaae847c409050805e1aa0623d4404 by Tarcisio Fischer.
Committed on 19/10/2023 at 14:21.
Pushed by tcanabrava into branch 'master'.

Add plugins docbook entries (Plugin documentation file)

Signed-off-by: Tarcisio Fischer <tarcisio.fischer at codethink.co.uk>

M  +107  -2    doc/xml-docbook/man-codevis_desktop.1.docbook

https://invent.kde.org/sdk/codevis/-/commit/1ee9ec7350aaae847c409050805e1aa0623d4404

diff --git a/doc/xml-docbook/man-codevis_desktop.1.docbook b/doc/xml-docbook/man-codevis_desktop.1.docbook
index 7d22b78..50db80c 100644
--- a/doc/xml-docbook/man-codevis_desktop.1.docbook
+++ b/doc/xml-docbook/man-codevis_desktop.1.docbook
@@ -14,6 +14,8 @@
     <title>&codevis; User's Manual</title>
     <author>&Tomaz.Canabrava; &Tomaz.Canabrava.mail;</author>
     <date>2024-00-00</date>
+    <author>&Tarcisio.Fischer; &Tarcisio.Fischer.mail;</author>
+    <date>2023-10-19</date>
     <releaseinfo>KDE Gear 24.00</releaseinfo>
     <productname>KDE Gear</productname>
 </refentryinfo>
@@ -42,7 +44,7 @@
 <para>
   Some of &codevis;'s many features includes software architecture visualization,
   manipulation, code generation from diagrams, diagrams generation from source code,
-  plugins, static analysis, visual static analysis and much more. 
+  plugins, static analysis, visual static analysis and much more.
 </para>
 
 <para>
@@ -51,7 +53,6 @@
   and experimenting. Many architectural issues were found and fixed on &codevis; itself by
   analyzing it's source code.
 </para>
-
 </refsect1>
 
 <refsect1>
@@ -65,6 +66,110 @@
     </variablelist>
 </refsect1>
 
+<refsect1>
+<title>Plugins</title>
+<para>
+Codevis application supports plugins. It is possible to create plugins in C++, Python or mix the two languages.
+</para>
+<para>
+The plugin system works as follows: There's a set of places in the application code that call user-definable functions.
+ Those functions are called "Hooks". Each hook receives a pointer to a "handler" that'll be provided by the application.
+ So a "hook" is a "place" _where_ the function will be called and the handler is _what_ can be called back to change
+ application behavior.
+</para>
+<para>
+All hooks are defined in the [hooks.py](../lvtplg/hooks.py) file. All handlers are defined in one of the handler files
+in the [handlers.py](../lvtplg/handlers.py) file. Handlers may return application data structures, such as an "Entity".
+Those are available in the [plugin data types file](../lvtplg/ct_lvtplg_plugindatatypes.h).
+</para>
+<para>
+In order for the application to recognize the plugins, they need to be in a specific place and they need to have a
+specific set of files. This is the file structure each plugin must have:
+</para>
+<para>
+$plugin_name/
++ $plugin_name.[py|so]
++ metadata.json
++ README.md
+</para>
+<para>
+Where `$plugin_name` is the plugin's name. `metadata.json` file follows the [kcoreaddons](https://api.kde.org/frameworks/kcoreaddons/html/)
+specification (There's an example below). And the `README.md` file should contain a brief description, and
+possibly examples on how to use the plugin.
+</para>
+<para>
+The `$plugin_name` folder must be copied to one of those paths, so that the application can find the plugin:
+</para>
+<para>
+- `$user_home/lks-plugins/` (Preferred for local development)
+- `$app_installation_path/lks-plugins/` (Used for plugins that are bundled with the app)
+- `$app_local_data/plugins/` (Used for downloaded plugins)
+</para>
+<para>
+There are a few working examples in the [plugins folder](../plugins/). There's also some [plugins for integration test](../lvtplg/testplugins/)
+that may be useful as simple examples. But just to give the
+reader a more step-by-step explanation, this section will show a working plugin written in Python.
+There's also a [python template plugin](../plugins/python_template_plugin/) that may be used as starting point.
+</para>
+<para>
+**Step 1**: Create the following folder structure inside `$user_home/lks-plugins/` (example: `/home/tarcisio/lks-plugins/`):
+</para>
+<para>
+```
+myfirstplugin/
++ myfirstplugin.py
++ metadata.json
++ README.md
+```
+</para>
+<para>
+**Step 2**: Populate the `metadata.json` file with the following contents:
+</para>
+<para>
+```
+ {
+  "KPlugin": {
+     "Name": "My first plugin",
+     "Description": "Example plugin",
+     "Icon": "none",
+     "Authors": [ { "Name": "YourName", "Email": "YourEmail" } ],
+     "Category": "Codevis Plugins",
+     "EnabledByDefault": true,
+     "License": "YourLicense",
+     "Id": "myfirstplugin",
+     "Version": "0.1",
+     "Website": "YourPluginWebsite"
+  }
+}
+```
+</para>
+<para>
+**Step 3**: Populate the `myfirstplugin.py` file with the actual plugin code:
+</para>
+<para>
+```python
+import pyLksPlugin as plg # Contains Codevis data structures
+
+def hookSetupPlugin(handler):
+    # This will be executed once when the application starts
+    print("Hello world from Python plugin!")
+
+
+def hookTeardownPlugin(handler):
+    # This will be executed once when the application closes
+    print("Okay then. Bye!")
+```
+</para>
+<para>
+**Step 4**: Save all files and start the Codevis application using your terminal. You should see the messages in the
+console.
+</para>
+<para>
+Codevis comes with a builtin plugin editor that can be used for editing the plugins. To access it just click on
+`View > Plugin Editor`.
+</para>
+</refsect1>
+
 <refsect1>
 <title>See Also</title>
 


More information about the kde-doc-english mailing list