Interesting discussion, I guess ribbons are a bit of a red cloth for a lot of people. I must admit, not a big ribbon fan myself, stuff never seems to be where I expect it to be in MS Office at least, so more often than not I end up iterating all ribbons till I finally find what I'm looking for :D It did make we wonder though, which part of the freeplane toolbars do I actually use, and it turns out its pretty much the filtering and finding toolbar exclusively, all the other functions I either rarely...
Hi Dimitry, A good case can be made for either logic in my opinion, depending on how freeplane is used. I bumped into this behaviour before as well and assumed it to be intentional to let the user have the last word, and avoid the awkward scenario where one manually changes formatting of a node and nothing happens because it is overwritten by a conditional style the user might not even know about. (e.g. when using a template someone else provided or collaborates with others on a map or continues...
Hm, can't reproduce the problem, your script runs fine for me, we are on different Freeplane versions though. (Yours is 1.9.8, I'm still on 1.9.0) Error sounds like you are feeding the setters a long integer variable, but it expects normal integers. (can't tell for sure, your map links to images on your harddrive unfortunately ;) Try converting explicitly to integer, might help delta_x=node['dX'].toInteger() delta_y=node['dY'].toInteger() pos_x=node['pX'].toInteger() pos_y=node['pY'].toInteger()...
Hm, can't reproduce the problem, your script runs fine for me, we are on different Freeplane versions though. (Yours is 1.9.8, I'm still on 1.9.0) Error sounds like you are feeding the setters a floating point variable, but it expects integers. (can't tell for sure, your map links to images on your harddrive unfortunately ;) Try converting explicitly to integer, might help delta_x=node['dX'].toInteger() delta_y=node['dY'].toInteger() pos_x=node['pX'].toInteger() pos_y=node['pY'].toInteger() Let me...
Hi sfpcom, I don't think freeplane supports such grid layouts natively, but placing nodes freely via the scripting API is easy enough. Best method probably is to have a script copy nodes instead of messing with your original map, that way you don't have to worry about restoring the original layout afterwards, instead the whole matrix simply gets deleted once you are done with it. Algorithm wise this is straight forward too, I whipped up the prototype below, seems to do what you want. Have fun Jochen...
Hi SFPC Took me quite a while to understand what you are trying to do here... Lets take a look at it step by step. First thing is to mark nodes that have invalid references, my guess is a reference is invalid if there is no node in the map, that has the referenced Col/Row property In that case, you can just slap on a map style with a script filter condition, like this: if (node.attributes.names.contains('Row') || node.attributes.names.contains('Col')) { c.find{it['RefCol']==node['Col']}.isEmpty()...
Hi there Alexandre, you need to be a bit more specific, for people to help you, I think. Are you talking about removing clones? Or is it nodes that just happen to have the same text/details whatever, that you want to remove? Jochen
Hi lilive, yap, ON_SINGLE_NODE is correct of course, I was trying to get it done with a one liner using an ON_SELECTED_NODE trigger at first, and forgot switching it back when I changed it following the realization that it won't be possible to retain the selection that way :P