Difference between revisions of "Talk:Scripting"

From Freeplane - free mind mapping and knowledge management software
(Continue discussion of "'Execute on one selected node")
Line 3: Line 3:
 
In this section [http://sourceforge.net/users/boercher Volker Börchers], our scripting specialist, has kindly agreed to answer questions. For anyone reading this Wiki section on [[Scripting|Scripting]], please feel free to add your own questions here!  
 
In this section [http://sourceforge.net/users/boercher Volker Börchers], our scripting specialist, has kindly agreed to answer questions. For anyone reading this Wiki section on [[Scripting|Scripting]], please feel free to add your own questions here!  
  
== 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.
+
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!  
Thanks!
 
  
=== Automatic Layout Styles ===
+
=== 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!
+
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?
Thank you.
+
 
 +
I appreciate all of your work! Thank you.
 +
 
 +
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>
 +
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 <tt>node.style.name = 'Subtopic'</tt> for simpler use.
 +
 
 +
But the best option for you is to use the new ''Conditional Styles'' feature introduced in version 1.2. Under Style &gt; Manage Conditional Styles you can define Styles dependent on the node level. --[[User:Boercher|Boercher]] 07:52, 11 January 2011 (UTC)
  
 
=== Execution Modes  ===
 
=== Execution Modes  ===
Line 32: Line 39:
  
 
BTW: I really enjoyed looking over the changes you've made so far. --[[User:Boercher|Boercher]] 00:33, 12 March 2010 (UTC)  
 
BTW: I really enjoyed looking over the changes you've made so far. --[[User:Boercher|Boercher]] 00:33, 12 March 2010 (UTC)  
+
 
+
<br> 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 <tt>node</tt> variable; however, the ''user's'' point of view is most relevant here.  
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 <tt>node</tt> variable; however, the <i>user's</i> point of view is most relevant here.  
+
 
+
Specifically, when running <tt>sumNodes.groovy</tt> 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? [[User:Jayseye|Jayseye]] 09:22, 9 January 2011 (UTC)  
Specifically, when running <tt>sumNodes.groovy</tt> it definitely <i>is</i> 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? [[User:Jayseye|Jayseye]] 09:22, 9 January 2011 (UTC)
 
  
 
[[Category:Scripting]] [[Category:Developer_Documentation]] [[Category:Advanced_Users]]
 
[[Category:Scripting]] [[Category:Developer_Documentation]] [[Category:Advanced_Users]]

Revision as of 07:52, 11 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!

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.

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)