Difference between revisions of "Talk:Scripting"

From Freeplane - free mind mapping and knowledge management software
Line 5: Line 5:
 
== Vertical Spacing in Map View  ==
 
== Vertical Spacing in Map View  ==
  
Ctrl+Drag works great, but can this be scripted? Some of my children nodes/branches really run together, and automatically vertically spacing them would be great. Thanks!  
+
Ctrl+Drag works great, but can this be scripted? Some of my children nodes/branches really run together, and automatically vertically spacing them would be great. Thanks! --[[User:Nz0ptk|Nz0ptk]] 12:50, 29 May 2010 (UTC)
 +
 
 +
Currently this property is not scriptable. Please add a feature request for it in Mantis. --[[User:Boercher|Boercher]] 18:59, 15 January 2011 (UTC)
  
 
=== Automatic Layout Styles  ===
 
=== Automatic Layout Styles  ===
Line 11: Line 13:
 
Is it possible to take the automatic layout styles that I have created, and extend them to affect more levels than the default 4-5 via scripting? If so, the first thing would be to find out where they're stored?  
 
Is it possible to take the automatic layout styles that I have created, and extend them to affect more levels than the default 4-5 via scripting? If so, the first thing would be to find out where they're stored?  
  
I appreciate all of your work! Thank you.  
+
I appreciate all of your work! Thank you. --[[User:Nz0ptk|Nz0ptk]] 12:50, 29 May 2010 (UTC)
  
 
Scripting would only allow for a reformat on demand. I don't think that this would be very useful but <tt>Node.getNodeLevel(true)</tt> is the method you need for checking the level and <tt>Style.setStyle()</tt> is the method for changing the style: <groovy>
 
Scripting would only allow for a reformat on demand. I don't think that this would be very useful but <tt>Node.getNodeLevel(true)</tt> is the method you need for checking the level and <tt>Style.setStyle()</tt> is the method for changing the style: <groovy>

Revision as of 18:59, 15 January 2011

Scripting Questions and Answers

In this section Volker Börchers, our scripting specialist, has kindly agreed to answer questions. For anyone reading this Wiki section on Scripting, please feel free to add your own questions here!

Vertical Spacing in Map View

Ctrl+Drag works great, but can this be scripted? Some of my children nodes/branches really run together, and automatically vertically spacing them would be great. Thanks! --Nz0ptk 12:50, 29 May 2010 (UTC)

Currently this property is not scriptable. Please add a feature request for it in Mantis. --Boercher 18:59, 15 January 2011 (UTC)

Automatic Layout Styles

Is it possible to take the automatic layout styles that I have created, and extend them to affect more levels than the default 4-5 via scripting? If so, the first thing would be to find out where they're stored?

I appreciate all of your work! Thank you. --Nz0ptk 12:50, 29 May 2010 (UTC)

Scripting would only allow for a reformat on demand. I don't think that this would be very useful but Node.getNodeLevel(true) is the method you need for checking the level and Style.setStyle() is the method for changing the style: <groovy> if (node.getNodeLevel(true) == 4)

  node.style.style = new org.freeplane.features.common.styles.StyleString('Subtopic')

</groovy> In the next preview version 1.2.2_05 I will change that to node.style.name = 'Subtopic' for simpler use.

But the best option for you is to use the new Conditional Styles feature introduced in version 1.2. Under Style > Manage Conditional Styles you can define Styles dependent on the node level. --Boercher 07:52, 11 January 2011 (UTC)

Execution Modes

On the main Scripting page, under the heading Execution Modes, I'm confused by the phrase Execute on one selected node. From following along with the tutorial, it seems to me that a better name for this would be Execute the script once, accessing all selected nodes. Is my interpretation essentially correct? Otherwise, please set me straight!

Thanks, --Jayseye 23:18, 11 March 2010 (UTC)

Hard question, but I think a "no" is appropriate. It took a while until I had the impression I had found a proper name for this mode. It's irrelevant here that the script may access more or less nodes since every script has access to every node by using the appropriate controller methods (like currentNode, rootNode). The execution modes are only dealing with the implicit "node" variable. Selecting Execute on one selected node should mean:

  • Only execute this script once - no matter how many nodes are selected.
  • The script is not interested in the "node" variable (although node is set to some node). - Select whatever node you want before calling the script - the script doesn't care.

I considered Execute once as an alternative but I thought that Execute on one selected node would support that "node is set but it doesn't matter" aspect. (That might be wrong.)

The other modes in contrast are meant for scripts that actually refer to the "node" variable. They are executed once for every selected node (in one of these modes recursively).

I expected this to be complicated since it took me two takes to get the concepts right. I'm sure, you will find the right words to make it comprehensible.

BTW: I really enjoyed looking over the changes you've made so far. --Boercher 00:33, 12 March 2010 (UTC)


Working through the tutorial again really convinces me that we need a more descriptive menu command in place of Execute on one selected node; perhaps Execute once would be clearest. The reply above from last March describes the internals "under the hood" re the node variable; however, the user's point of view is most relevant here.

Specifically, when running sumNodes.groovy it definitely is relevant which nodes are selected in the map. In this case it misses the point to say "Select whatever node you want before calling the script - the script doesn't care." Does this example clarify the issue? Jayseye 09:22, 9 January 2011 (UTC)