Create a new Plugin
With the introduction of the gradle build system (Freeplane >= 1.4.1), the "create-plugin" ant task is deprecated because adding plugins "manually" has become very simple using gradle.
Steps
Here are the steps you need to perform:
- choose a short name for your plugin (e.g. freeplane_plugin_foo, the name freeplane_plugin_* is mandatory)
- include the plugin in settings.gradle
- create freeplane_plugin_foo/build.gradle by copying the build.gradle from any other plugin (freeplane_plugin_latex freeplane_plugin_openmaps are quite simple)
- add third-party dependencies (dependencies section) and OSGi imports (packages you need from core/other plugins) to your build.gradle
- if your third-party dependencies are not available in maven.org, uses files() and commit them to version control (freeplane_plugin_foo/lib)
- create freeplane_plugin_foo/src/main/java/org/freeplane/plugin/foo/Activator.java by copying from another plugin and then removing things you don't need
- TODO: need to adapt eclipse launcher?
- test your plugin by building and running freeplane
- when committing, make sure not to commit .project / .classpath files as they are generated by gradle
Add options to the OptionPanel
The core plugins register their options via the configuration file
freeplane/resources/xml/preferences.xml. Plugins can do it quite
similar by defining their own preferences.xml (by convention in
freeplane_plugin_
<?xml version="1.0" encoding="UTF-8"?>
<preferences_structure>
<tabbed_pane>
<tab name="plugins">
<separator name="scripting">
<boolean name="execute_scripts_without_asking" />
<boolean name="execute_scripts_without_file_restriction" />
<boolean name="execute_scripts_without_network_restriction" />
<boolean name="execute_scripts_without_exec_restriction" />
<boolean name="signed_script_are_trusted" />
<string name="script_user_key_name_for_signing" />
<string name="script_directories" />
</separator>
</tab>
</tabbed_pane>
</preferences_structure>
The option names have to be added to Resource_en.properties (excerpt):
OptionPanel.execute_scripts_without_asking = Scripts should be carried out without confirmation?
OptionPanel.execute_scripts_without_asking.tooltip = <html>Freeplane scripts are principally able...
OptionPanel.execute_scripts_without_exec_restriction = Permit to Execute other Applications (NOT recommended)
For an example of how options can be registered at the option panel see org.freeplane.plugin.script.ScriptingRegistration:
private void addPropertiesToOptionPanel() {
final URL preferences = this.getClass().getResource("preferences.xml");
if (preferences == null)
throw new RuntimeException("cannot open preferences");
modeController.getOptionPanelBuilder().load(preferences);
}
The options can be queried like this:
String executeWithoutAsking = ResourceController.getResourceController()
.getProperty("execute_scripts_without_asking");
Register Actions
Please see OpenMapsRegistration.java in the freeplane_plugin_openmaps plugin.
Register Icon Mouse click listener
Please see OpenMapsRegistration.java in the freeplane_plugin_openmaps plugin.