https://freemind.sourceforge.io/wiki/api.php?action=feedcontributions&user=Bpatters7&feedformat=atomFreeMind - User contributions [en]2024-03-29T11:42:34ZUser contributionsMediaWiki 1.38.7https://freemind.sourceforge.io/wiki/index.php?title=Talk:Asked_questions&diff=7320Talk:Asked questions2008-10-08T23:05:52Z<p>Bpatters7: what would it take for you to change the FreeMind license to something other tha GPL?</p>
<hr />
<div>Here are poorly consolidated, not so relevant or not yet answered questions.<br />
<br />
=== Answered ===<br />
==== How does one use the MindManager XSL transform? ====<br />
<br />
the wiki page http://freemind.sourceforge.net/wiki/index.php/Import_and_export_to_other_applications has an XSLT for converting MindManger v5 maps to freemind. That is really cool, but how do I use it?<br />
<br />
see File/Import/MindManager X5 Map! Works very well!<br />
--[[User:mailias|mailias]]<br />
<br />
==== Can you have freemind nodes on one side only? ====<br />
<br />
I am exploring the way freemind works and would like to know if you can have the mind map only grow out one side of the first node. at the moment when you add child nodes to the first one it puts them on each side of the first one. I would like to be able to have the first node at the top left of the page and then all others growing down from left ot right and top to bottom of the page. <br />
<br />
: start by grabbing a node on the left of the root (first) node, and drag it over the oval for the root node. When you have dragged it over the root node oval, notice that the root node oval is shaded either on the left half or the right half depending on which side you have your mouse pointer over. Release the node over the right half of the root node oval and the entire node is shifted to the right side of the root. Use this to get every node from the left side onto the right side. Does this help? --?? Jan 6 2005<br />
<br />
: using the '''keyboard''', you can use control arrow up or down to move a node. When you reach the top or bottom they will move to the left or right side.<br />
<br />
==== Linking trees====<br />
<br />
Is there a way to associate a whole subtree from another part in the map? For instance, I am trying to create topics of programming knowledge and find that "Patterns" would fall under "C++", "JAVA" and "General programming techniques". I just want to make sure that what gets changed under one subtree gets propagated to the other instances.<br />
<br />
: ''(the same user later)'' The answer to the above "Linking Trees" is (teaches me to read the friendly manual first) is to be found in the article. --?? 07 May 2004<br />
<br />
==== Custom CSS in HTML Export? ====<br />
<br />
Can I configure the html export so that it includes a link to a CSS? So I don't have always to change the exported html page.<br />
: No. Currently, you can't configure the html export so that it includes a link to CSS or CSS itself. --[[User:Danielpolansky|Danielpolansky]] 08:24, 2 Oct 2004 (PDT)<br />
<br />
==== Can I run FreeMind on other Mac OS than OS X?====<br />
<br />
As a Java based an hopefully crossflatform application, is it theoretically possible to run on Mac ''not'' OS X? What are the problems? --?? 19 May 2004<br />
<br />
: It's just that nobody reported running FreeMind on other OS of Mac than Mac OS X. I am ignorant on Mac's operating systems anyway. --??<br />
<br />
: The old Macs are in effect a different operating system and Apple is nolonger updating it. The old macs do not have Java 1.4+ and will never get it. Solution, old mac user upgrade to OSX and then run FreeMind, which works very well on OSX 10.3.3 Java 1.4.2 --??<br />
<br />
<br />
<br />
==== On linking nodes with OpenOffice1.1.1. under Linux2.4====<br />
<br />
Hello, under W2K, I can link nodes with external documents without any problem. Under Linux I didn't figure out a way of doing the same. A 2003 post by Daniel stated that, at this time, there was no other possiblity under Linux but launching Mozilla whatever file extension or mime type was associated in the link. Is there a way now ? --?? 07 Jun 2004<br />
<br />
: Self answer, found in a forum : Unlike Windows, Linux does not have a core facility that launches applications based on a file's MIMEtype. Such capabilities exist in various places - such as in the file managers for the desktops - but I know of no command you could reliably use in all Linux environments to launch an application from a file." One possible solution might be to launch the file in Netscape itself, with the AppletContext.showDocument() method. Netscape would presumably "show" the document in some way that makes sense for the document's MIMEtype." <br />
<br />
: ____ <br />
<br />
: Well well, if starting an application based on the mime type seems difficult in Linux, it may exist another way. Sorry for the presumable childish question : is it possible to use Mozilla for issuing a shell like commande, like "../program/swriter toto.sxw" ? Or anything else that would open the linked openoffice file from a node and letting not only view (a html save as would do it) but actually edit? Thank you for your attention. JFD <br />
<br />
: P.S.: If there is no elegant workaround, I'll copy the full text paths in the text nodes and later copy to the openOffice url locator for editing / viewing.<br />
<br />
>> What about the files:<br />
/usr/lib/mime/packages/freemind <br />
==<br />
application/x-freemind; /usr/bin/freemind '%s'; test=test -n "$DISPLAY"; description="FreeMind MindMap file"; textualnewlines; nametemplate=%s.mm<br />
==<br />
and /etc/mime.types ?<br />
==<br />
application/x-freemind mm<br />
==<br />
On debian it's handled by mime-support package.<br />
<br />
==== W2K, OpenOffice1.1.1 (upgrade), and broken file links====<br />
<br />
Since upgrading my OpenOffice from 1.1.0 to 1.1.1 a link to a spreadsheet no longer works. I've tried re-doing the link to no avail. No other problems noted with the OO or freemind; what now? --?? 09 Jun 2004<br />
<br />
: Regarding this problem of mine -- might it help to reinstall FreeMind? --?? 18 Jun 2004<br />
<br />
==== Stand alone browser====<br />
<br />
load it all in one folder with relative links and burn... tell us what happens --?? 10 Jun 2004<br />
<br />
==== Email Links from FreeMind====<br />
<br />
How do I paste in an email link? I can paste in a link to a message, but it doesn't seem to work like the example on the Documentation --?? 17 Jun 2004<br />
<br />
==== Are more languages available?====<br />
<br />
Is German or French available?<br />
<br />
: Change the language in [[user.properties]].<br />
<br />
==== To install freemind*.deb on a debian system ====<br />
<br />
Hello, how do I install freemind[bla].deb on my debian system? I did not find any answers about what to do after downloading the dot deb file on this page :( --?? 20 Jun 2004<br />
<br />
: I tried the following on Debian/sarge and it worked: <code>$ dpkg -i freemind.deb</code> --Christophe 15 Jul 2004<br />
<br />
: freemind Debian package needs j2re1.4 or java2-runtime packages that are not in Debian archives.<br />
<br />
How can I find them ? Thanks for your answer. --?? 28 Jul 2004<br />
<br />
: Go to [http://www.java.com/en/download/manual.jsp Sun's Java Site] and follow the the instructions for a manual download and installation of the JRE under Linux.<br />
<br />
: Follow instructions on the [http://www.blackdown.org/java-linux/java2-status/jdk1.4-status.html#debs Blackdown Site] - simple matter to update your /etc/apt/sources.list, then you can install from apt-get as per the instructions, or through dselect - then freemind dependencies will be taken care of. - Kurt Woodham 1/12/05<br />
<br />
==== URL nodes====<br />
<br />
Can you have nodes that are URLs? <br />
<br />
: ''(later the same user)'' I am sorry - Ctrl K does what I wanted. (great tool by the way!) --?? 25 Jun 2004<br />
<br />
==== Difference between FreeMind and Buzan mind-maps?====<br />
<br />
Why do you say that FreeMind isn't really like Buzan-style mind-maps?<br />
Simon<br />
: We have several reasons for warning users that FreeMind does not comply fully with Buzan's wishes. Firstly, the graphical possibilities are limited. The look of the main branches is basically the same as the look of secondary branches. The positioning of the main branches is not flexible, unlike in MindManager. Secondly, the support for pictures is inferior. We do not support pictures embedded directly in the mind map, i.e. the picture files are stored outside the mind maps. And when you try to edit a picture, your favorite bitmap editor is not opened. Summed up, it is possible to work with pictures, but not seamless. Our main point is to keep as many as possible of the statements we make on the web pages traceable. We don't want to create a gap between expectations created by our presentation texts and by the actual user experience. --[[User:Danielpolansky|Danielpolansky]] 05:55, 26 Sep 2004 (PDT)<br />
<br />
==== To open links in only one browser window, rather than several====<br />
<br />
: Depends on the internet browser you are using. With Mozilla Firefox with TabBrowser Extension you can customize Mozilla to work with one window only, open new links in separated Tabs. --?? 07 Jul 2004<br />
<br />
==== To set background picture====<br />
<br />
Hmm - can you specify a picture to be used as the background and not a color per se?<br />
<br />
: No, it's not possible. <br />
<br />
==== Multi-line nodes overlap others====<br />
<br />
Multi-line nodes overlap with other nodes, making the others difficult to see and access. How can I stop this happening? <br />
: This is a known error; only the children of the root suffer from this.<br />
<br />
==== Installation won't pick up j2se1.4 when installing from rpm====<br />
<br />
I'm trying to install freemind-0.7.1-2.noarch.rpm on Sun's Java Desktop 2.0 (which is essentially SuSE with some interface changes. I get the following messages:<br />
<br />
# rpm -i freemind-0.7.1-2.noarch.rpm<br />
error: failed dependencies:<br />
java_runtime >= 1.4 is needed by freemind-0.7.1-2<br />
<br />
However, as you can see, I have TWO j2re's >= 1.4:<br />
<br />
j2re-1.4.2_04-fcs<br />
j2re-1.4.2_05-fcs<br />
<br />
java is in the path:<br />
<br />
# which java<br />
/usr/java/j2re1.4.2_05/bin/java<br />
# java -fullversion<br />
java full version "1.4.2_05-b04"<br />
<br />
And just for good measure, I've set the JAVA_HOME variable:<br />
<br />
# printenv JAVA_HOME<br />
/usr/java/j2re1.4.2_05<br />
<br />
What is the secret handshake, here?!? --?? 07 Jul 2004<br />
<br />
: Whatever your problem is, the plain binary distribution of FreeMind (in contrast to RPM packaging) should work for you. --?? 29 Jul 2004<br />
<br />
: I have just installed FreeMind RPM and had the same problem. As I was sure my j2re was OK, I just made a 'rpm -i --nodeps'. Freemind is working fine.<br />
<br />
: Is there any support for import/export from MindMapper? If not are there any clever hacks to do most of the work? --?? 13 Aug 2004<br />
<br />
===== re: installation won't pick up j2se1.4=====<br />
23 Aug 2004<br />
<br />
history of install:<br />
3827 sudo rpm -i --nodeps freemind-0.7.1-2.noarch.rpm<br />
3828 ls<br />
3829 whereis freemind<br />
3830 updatedb<br />
3831 sudo updatedb<br />
3832 freemind/<br />
3833 ls<br />
3834 sudo freemind<br />
<br />
/usr/bin/freemind: line 30: java: command not found<br />
<br />
fc1<br />
<br />
===== re: installation won't pick up j2se1.4=====<br />
<br />
I'm not nearly as successful as you. I just installed the jre but it's not coming up when I run which java... How did you set your path? dgd goes looking --?? 23 Aug 2004<br />
<br />
==== Deleting Nodes====<br />
<br />
Is there a way to invoke the deletion of a node with a keyboard combination rather than the right click menus. Althought this is a personal preference anyway, as someone who suffers with RSI, I try to avoid as much mouse activity as possible.<br />
Many thanks --?? 17 Aug 2004<br />
<br />
: Press Ctrl + X to cut out (ie. delete) a node with keyboard.<br />
<br />
==== Notes====<br />
<br />
Is there a way of attaching a note to a node? For example I want to provide more information on a specific node for review purposes without having to add the contents of my note as a separate child node because it is not part of the scheme at hand. --?? 18 Aug 2004<br />
<br />
: No. --[[User:Danielpolansky|Danielpolansky]] 05:25, 26 Sep 2004 (PDT)<br />
<br />
==== Will FreeMind be part of ASQ and 3 and even 4 dimensional mapping? ====<br />
<br />
See also [http://en.wikibooks.org/wiki/ASQ ASQ].<br />
<br />
: I don't understand the question. FreeMind is an application while ASQ is a programming language. How can an application be a part of programming language? Whatever ASQ is, we at FreeMind don't make any commitment in ASQ's direction. --[[User:Danielpolansky|Danielpolansky]] 04:59, 26 Sep 2004 (PDT)<br />
<br />
==== Is FreeMind suitable as a non relational XML database? ====<br />
: In a sense, FreeMind is a personal non relational XML database. But as I don't know how the term ''non relational XML database'' is used in general, I cannot answer that question properly. I don't think that program like FreeMind without any indexing capability can properly be called a database. --[[User:Danielpolansky|Danielpolansky]] 04:59, 26 Sep 2004 (PDT)<br />
<br />
Indexes are not essential. Having worked with non-XML, non-relational databases, such as Honeywell IDS II, IDMS, HP Image, and Cincom Total, I can say that if you have a store mechanism relying on pages, hash keys, and linked lists, you have the rudiments for network style databases (a subset of which were known as CODASYL compliant). Presentation in an arbitrary order would require managing sorted linked lists or sorting on the fly. --[[User:Hrcohen|Hrcohen]] 06:09, 4 May 2007 (PDT)<br />
<br />
==== Should non-linear books and N-psi-clopidieas be stored in FMXML? ====<br />
: Now I don't know what ''non-linear books'' and ''N-psi-clopidieas'' are, and don't have time to find out. FreeMind can certainly be used to store complete books. --[[User:Danielpolansky|Danielpolansky]] 04:59, 26 Sep 2004 (PDT)<br />
<br />
==== To change fonts or more nodes at once ====<br />
<br />
Is there a simple way of changing the fonts (or color, size, etc) of all nodes at once? --?? 07 Jul 2004<br />
<br />
: Do it by selecting multiple nodes, which you can do by holding control while selecting. Also, you can select a complete subtree by selecting its root while holding alt.<br />
<br />
==== How can I include FreeMind maps in Wikka Wiki pages?====<br />
From version 1.1.6 on, you can simply copy and paste the code. Otherwise try to link the map. See http://wikka.jsnx.com/FreeMind for more deatails.<br />
<br />
<br />
==== How to enter multi line text in a node ====<br />
I can't find out the answer to this simple but essentially question :-(.<br />
<br />
Try to use Alt-Enter (on WinXP this works for me) --[[User:Bizarro|Bizarro]] 01:23, 20 Jul 2006 (PDT)<br />
<br />
==== Left Toolbar Extends Offscreen ====<br />
<br />
The left toolbar is too long to fit on a 1024x768 screen. I'm running FreeMind 0.8.0 on Ubuntu Breezy with Sun JDK 1.5.0_04. Is there any way to make the buttons at the bottom of the toolbar visible?<br />
<br />
On WindowsXP it is possible to detach the left toolbar to make it float. When it is a floating window, i can access all icons. --[[User:Bizarro|Bizarro]] 01:43, 20 Jul 2006 (PDT)<br />
<br />
==== Node with more than one parent ====<br />
<br />
Is it possible to create a node with more than parent? So maybe i want to have something like this:<br />
<br />
a<br />
/ \<br />
b c<br />
\ /<br />
d<br />
<br />
--[[User:Pintman|Pintman]] 02:32, 18 Jul 2005 (PDT)<br />
<br />
No it is not! MindMaps are hierarchical, you may want to use graphical links to connect nodes in some way even though that's not what you requested. Another option is to use Cmaps instead (see other software section...).<br />
--[[User:mailias|mailias]]<br />
<br />
<br />
==== missing "undo" ====<br />
<br />
Where is the "undo"?<br />
<br />
CTRL-Z should do it (on my german keyboard)<br />
And theres a button in the toolbar, try these blue arrows.<br />
<br />
<br />
==== How to emulate labelled edges? ====<br />
<br />
In freemind.mm -> Demonstration of some features,there is a<br />
featrue called "emulate labelled edges". But no infomation<br />
about how to do. :(<br />
<br />
--[[User:Blackfish|Blackfish]] 22:42, 9 May 2006 (PDT)<br><br />
Here is the trick:<br />
Create a node, right click -> select Physical Style -> Default F6<br />
or Create a node and just press shortcut key "F6".<br />
<br />
==== Easiest way to combine two maps?====<br />
<br />
What is the easiest way to combine two large maps into one, preferably preserving the first two? I'd like to run two separate sessions of Freemind with two different groups of people, then combine the results. --?? 27 Aug 2004<br />
<br />
: Open first map, select root node (Esc), copy (Ctrl+C), open second map, select root (Esc), insert (Ctrl+V) You might want to organize the second map by dragging the first level children to one side and insert only the children of the first map omitting the additional root.<br />
<br />
==== Exporting to text outline format? ====<br />
<br />
Is there any way to have FreeMind export to a simple text outline from the map?<br />
<br />
: Select the root of the branch you need, press Ctrl+C, open up a plaintext-editor like kwrite or notepad and insert with Ctrl+V<br />
<br />
<br />
<br />
=== Not Answered ===<br />
Hello<br />
Starting from a map. <br />
How can disable the ability to save, edit a node, delete a node or insert a new node. <br />
Practically, how can I not allow any modifications to my map?<br />
<br />
<br />
----<br />
<br />
==== Free Nodes / Multiple Maps ====<br />
Hello<br/><br />
When using mindmaps I very often reorganize them after a first brain storming. For doing that it would be helpfull if I could disconnect nodes/branches and drop them in the 'free' space (sort of a second map), temporarily. Is that feature planed?<br />
<br />
==== Number of children of a node ====<br />
Hi !<br/><br />
Is there a way to compute easily the number of children (and children's children, etc.) of a node ? Thx --[[User:Eric|Eric]] 06:25, 10 Oct 2006 (PDT)<br />
<br />
==== Suppression of a link? ====<br />
How should I proceed to suppress a link (to an external file) or a local link?<br />
Thanks for the answer...<br />
--[User:Nanou] 06 Aug 2006<br />
:Edit the local link and change it to "" (null) --[[User:Eric|Eric]] 12:24, 10 Oct 2006 (PDT)<br />
<br />
==== parent node above child node? ====<br />
I'd like to know whether theres a functionality to move the nodes around so that parent nodes can reside above child nodes (and vice versa). IMHO the MindMap structure in Freemind is somewhat limited if it does not offer to place child nodes AROUND (in every direction) the parent node...<br />
--[[User:Bizarro|Bizarro]] 01:21, 20 Jul 2006 (PDT)<br />
<br />
==== XHTML Compliant FreeMind Browser ====<br />
<br />
Hello everyone, I found out how to transform the invalid [http://freemind.sourceforge.net/wiki/index.php/Asked_Questions#Mind_maps_on_web_pages_with_FreeMind.27s_applet 'applet'] elements into something more XHTML and HTML compliant.<br />
<br />
A [http://rolandog.com/freemind/freemindbrowser.xhtml xhtml file] and a [http://rolandog.com/freemind/freemindbrowser.html html file] are available for the purpose of demonstration.<br />
<br />
I read the [http://ww2.cs.fsu.edu/~steele/XHTML/appletObject.html following site], to guide myself while converting 'applet' into 'object' tags.<br />
<br />
Here is what I came up with:<br />
&lt;!--[if !IE]&gt;--&gt;<br />
&lt;object classid="java:freemind.main.FreeMindApplet.class" type="application/x-java-applet" archive="http://rolandog.com/freemind/freemindbrowser.jar" width="450" height="300"&gt;<br />
&lt;param name="scriptable" value="false" /&gt;<br />
&lt;param name="modes" value="freemind.modes.browsemode.BrowseMode" /&gt;<br />
&lt;param name="browsemode_initial_map" value="http://rolandog.com/freemind/Textbook.mm" /&gt;<br />
&lt;param name="initial_mode" value="Browse" /&gt;<br />
&lt;param name="selection_method" value="selection_method_direct" /&gt;<br />
&lt;!-- &lt;![endif]--&gt;<br />
&lt;object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab" height="300" width="450"&gt;<br />
&lt;param name="code" value="freemind.main.FreeMindApplet" /&gt;<br />
&lt;param name="archive" value="http://rolandog.com/freemind/freemindbrowser.jar" /&gt;<br />
&lt;param name="scriptable" value="false" /&gt;<br />
&lt;param name="modes" value="freemind.modes.browsemode.BrowseMode" /&gt;<br />
&lt;param name="browsemode_initial_map" value="http://rolandog.com/freemind/Textbook.mm" /&gt;<br />
&lt;param name="initial_mode" value="Browse" /&gt;<br />
&lt;param name="selection_method" value="selection_method_direct" /&gt;<br />
&lt;strong&gt;<br />
This browser does not have a Java Plug-in.<br />
&lt;/strong&gt;<br />
&lt;br /&gt;<br />
&lt;a href="http://java.sun.com/products/plugin/downloads/index.html"&gt;<br />
Get the latest Java Plug-in here.<br />
&lt;/a&gt;<br />
&lt;/object&gt;<br />
&lt;!--[if !IE]&gt;--&gt;<br />
&lt;/object&gt;<br />
&lt;!-- &lt;![endif]--&gt;<br />
It is an example code that you would place in a webpage (replace ' />' with '>' if it's an html page... leave them for xhtml).<br />
<br />
--[[User:Rolandog|Rolandog]] 18:08, 26 Mar 2006 (PST)<br />
<br />
<br />
<br />
==== Cloud Border ====<br />
<br />
How is the color of a cloud's border set by FreeMind? Can this behaivor be altered with user.properties? Can a default color be set?<br />
<br />
==== Cloud outline color====<br />
<br />
Is it possible to change the outline color of a cloud? (not bubble or fork or background).<br />
<br />
<br />
==== Changing Default Save Director ====<br />
<br />
Is it possible to change the default directory that FreeMind points to for saving files under Windows? I prefer not to use My Documents and it would easier if FreeMind could be pointed to my preferred directory instead.<br />
<br />
==== stand alone browser====<br />
<br />
is there a way to include and use the FreeMind browser applet on a CD-ROM. I want to use it to present my mindmap in a browser with links to documents included on the cd-rom and on the internet. --?? 05 May 2004<br />
<br />
==== FreeMind doesn't work after installation ====<br />
<br />
I installed the latest Java and then FreeMind. I had a play with FreeMind and it crashed. I had to restart my WinXP machine. Since then, cannot run FreeMind. I have uninstalled FreeMind and Java. Then re-installed Java then FreeMind. If I double click or run the FreeMind exe I don't see a window appear, nothing in the taskbar or anything. Also, if I try open a page on your site, that needs Java then my IE window just closes. Shame, I was looking forward to trying FreeMind. Any ideas? --?? 16 May 2004<br><br />
---<br><br />
Other user: PC with Windows 2000, Java JRE build 1.4.1_01-b01. After having installed FreeMind, when clicking on FreeMind icon, the mouse pointer turns into the hourglass for a couple of seconds and then turns back to the regular arrow, however FreeMind does not launch. Looked in the "Asked Questions" section of FreeMind Wiki, where it is suggested to run FreeMind.bat and check for messages. Cannot find any freemind.bat file in my "c:\program files\freemind" installation directory. Run a search on the whole hard drive, no file "freemind.bat" could be found. Any clue on what prevents FreeMind to launch? (30 Nov. 2004)<br><br />
---<br><br />
Tariq: I have the same issue, I installed Freemind but it doesnt run.T his is what I got after running the freemind.bat file<br />
<br />
Exception in thread "main" java.lang.NoClassDefFoundError: java/util/logging/Log<br />
ger<br />
at freemind.main.FreeMind.getLogger(FreeMind.java:643)<br />
at freemind.main.FreeMind.<init>(FreeMind.java:109)<br />
at freemind.main.FreeMind.main(FreeMind.java:647)<br />
<br />
any idea what this would be<br />
---<br><br />
I had the same symptoms and when I ran freemind.bat the same diagnostic reported on my Windows XP SP 2 machine. SUN JRE 1.5.0.06 was installed.<br />
It turned out after a little research that an Oracle client install had installed a different version of Java. I added the new JRE 1.5 path to my path environment variable and FreeMind now starts up OK. (24 Apr 2006)<br><br />
---<br><br />
I had the very same problem and also detected a jre 1.3 installed by an oracle client, but adding the new JRE 1.5 path to the path environment variable wasn't enough since the selected javaw was still that from 1.3. I manually unistalled it so Freemind would pick the 1.5 one. Thanks for the advice. (10 may 2006)<br><br />
---<br><br />
I just found this blog entry that solved this problem for me:<br />
http://blogs.mit.edu/CS/blogs/wenyang/archive/2006/12/01/62478.aspx<br />
Basically, Freemind.exe will not work if your java installation path is after anything else surrounded by quotes.<br />
---<br><br />
OK, none of the above solved my issue, but showed me the way! I have Win XP SP2, JRE 1.5.0_06, and no quoted strings in my path. What I had to do was, add the JRE 1.5 path to the <i>beginning</i> of the path, then it starts up just fine. Oracle Enterprise Manager console came up just fine, but haven't tested any further on Oracle.<br />
<br />
==== Hosting freemind on IIS====<br />
<br />
How to Host freemind on IIS? --?? 08 Jun 2004<br />
This worked for me : <br />
<br />
1 ) copy freemindbrowser.html, freemindbrowser.jar and <yourmap>.mm to some folder<br />
<br />
2 ) go to IIS, right-click on your web site and choose properties. Go to HTTP Headers tab and click on MIME Types. Add the following MIME type :<br />
<br />
extension : mm<br />
MIME type : application/freemind<br />
<br />
[sergio giraldo][19 Jan 2005]<br />
<br />
==== Provide links between nodes or link to a specific node in a different map====<br />
<br />
Is there a way to establish a link from one node to another node, either in the same, or a different map? --?? 01 Jul 2004<br />
<br />
==== Forked background colors====<br />
<br />
How, precisely, do you change the background color - not text - of the forked (not Cloud) style of the nodes? --?? 07 Jul 2004<br />
<br />
==== Repository for easy distribution to education admins====<br />
<br />
It would be fantastic if resources were found to supply an rpm repository for the educators using apt-get or yum to maintain and update LTSP; LTSP supplies some 100,000+ students with computer services. --?? 23 Aug 2004<br />
<br />
==== Creating Links textfile and Filechooser====<br />
<br />
I am trying to create a link in one mm that links to another mm file. This works okay if the target mm is in my home directory (in my case "P:\My Documents"), but if the target is in a subdirectory of home, I get a "New Mindmap". --?? 02 Sep 2004<br />
<br />
==== Creating graphical links beyond the page borders====<br />
<br />
When creating a graphical link and it's beyond the page borders...how do you<br />
scroll the screen while holding left mouse button + cntrl + shift. I can's<br />
find a way to scroll. Is it possible? Mouse scroll button does not function<br />
and neither does the side bar. Maybe I'm missing something.Any suggestions? --?? 06 Sep 2004<br />
<br />
==== Viewing online, works in IE6 beautifully, no interation in Firefox 0.9 ====<br />
<br />
Having published a test map at<br />
http://www.kilobox.net/mindmaps/freemindbrowser.html I fid it works so well<br />
in IE6, right clicking functionality and (un)folding children, but there's<br />
no such interaction in Firefox 0.9. I've checked my java settings, but no<br />
idea, any help? -- email Wedgekin <at> gmail.com 09 Sep 2004<br />
: I can see your mind map in Firefox without any problems. --[[User:Danielpolansky|Danielpolansky]] 08:17, 2 Oct 2004 (PDT)<br />
<br />
==== Exporting icons to HTML ====<br />
<br />
I've tried to export a mindmap with icons to HTML. The icons however do not appear in the HTML-Document. Is there a way to manually copy the icon-files into an image folder on my webpage. Where are these files located?<br />
<br />
===== Export Text user.properties Options =====<br />
I would like to add that some options in user.properties would make such an export VERY useful:<br />
<br />
'''ExportText.IncludeTopNode''': Default is true, which is normal. A setting of false removes the top node from the export (would be nice if it could become the filename). This is needed for example to allow PowerPoint to import the children as slides.<br />
<br />
'''ExportText.IndentString''': Default would be four spaces as it is now, but would allow any string. This would make it easy to export to many formats.<br />
<br />
It would be '''''REALLY''''' nice if these two parameters (and perhaps others?...) could be packaged together and displayed as a droplist in the menu so one could create many variations on the basic text export and have them readily available.<br />
<br />
==== Saving Page Set-Up & Node Background Colours ====<br />
<br />
Is it possible to save a page setting to be used each print run? Currently I need to set-up the page format (margins and orientation) each time I fire-up FM.<br />
<br />
Colouring the nodes - of course - changes the text colour. Is it possible to change the background colour too - ala clouds?<br />
<br />
It's a pretty stupendous tool, by the way. In a matter of weeks I find all of my work can be organised in this way. I have been using MM's for years and this tool has made it all more formalised! Its great!!<br />
<br />
Thanks to all who made the effort - you done good!<br />
<br />
Ian<br />
<br />
==== Linking Path for FreeMind on a Web Page? ====<br />
<br />
Hi Folks<br />
<br />
How would I go about linking images to nodes on a web page - that is, what path should I use to create the links and where should I store the images in the web site?<br />
<br />
Seems like this should be obvious but there seems no way to use referential linking of paths so when its saved on a Host it can still find the graphics!<br />
<br />
Ian<br />
<br />
<br />
==== Can we treat a node as HTML using an attribute? ====<br />
Instead of the cumbersome "<html>" string required at the beginning of the text. And even worse, having to keep the MaxNodeWidth enforced with something like <body width="600">. Why not take a different approach. One that seems like it would have little impact on the code, though I have not read it as of yet...<br />
<br />
If html was treated as an attribute like bold and italic as in html="true", then process the entire node as html same as when the string "<html>" is detected at the beginning of the text. There would be a default <style>body {width:<MaxNodeWidth>}</style> in place, though the actual html in the node could override this just the way normal CSS does.<br />
<br />
This has '''MAJOR''' implications for the use of the xml file. Though I have not written any XSLT yet for FreeMind, I was APPALLED at the thought of having to strip out this "<html>" string out of every node that used it. And positively frustrated at the idea of having to test for irrelevant tags used to control width, i.e. <body width="600">. I really thought this crude and that it would slow the proceesing of files that use what is really a most beautifully clean concept.<br />
<br />
However, an html attribute does away with all of this and seems to me to be a much more elegant and cleanly way to deal with html....<br />
<br />
BTW, it would be very straight forward to write an XSLT transform to upgrade existing .MM files.<br />
<br />
==== Freemind Browser Unable to Load Map File ====<br />
I have the FreeMind browser working on my local machine from a flash drive (without a web server), so after uploading it to my website, it's unable to load the map file. You can try it at [http://curtwulf.freesuperhost.com/frmnd/ my site] to see what happens.<br />
<br />
Here is what I get in the Java Console:<br />
<br />
<pre>Warning: the font you have set as standard - null - is not available.<br />
freemind.main.XMLParseException: XML Parse Exception during parsing of a div element at line 7: Expected: ' or "<br />
java.lang.Exception<br />
at freemind.modes.browsemode.BrowseMapModel.load(BrowseMapModel.java:115)<br />
at freemind.modes.browsemode.BrowseController.load(BrowseController.java:205)<br />
at freemind.modes.browsemode.BrowseController.loadURL(BrowseController.java:181)<br />
at freemind.modes.browsemode.BrowseMode.activate(BrowseMode.java:74)<br />
at freemind.controller.Controller.changeToMode(Controller.java:325)<br />
at freemind.main.FreeMindApplet.init(FreeMindApplet.java:262)<br />
at sun.applet.AppletPanel.run(Unknown Source)<br />
at java.lang.Thread.run(Unknown Source)<br />
[Freemind-Developer-Internal-Warning (do not write a bug report, please)]: Tried to get view without being able to get map module.<br />
View is null.</pre><br />
<br />
I've tried placing <code>./PubMap.mm</code>, the full path, and simply the map filename in the <code>browsemode_initial_map</code> paramter. I get the same error everytime. That makes me wonder if it's not the web code, but the applet's. I even placed the full path in the <code>ARCHIVE</code> paramter, and nothing changed.<br />
<br />
Any help would be great. Contact info on my page [[User:curtwulf|curtwulf]] 11:34, 16 May 2006 (PDT)<br />
<br />
===== Troubleshooting =====<br />
Ok, the XML Parse Exception on the div element at line 7 is being caused by the code that my host uses for the banner they place at the beginning of all of my pages. Since I can't disable this, my only thought is it's a bug that needs to be fixed in the XMLParseException.class file... or I'm out of luck. [[User:Curtwulf|curtwulf]] 13:30, 16 May 2006 (PDT)<br />
<br />
==== Debian apt-get install freemind ====<br />
<br />
root@jabber: Desktop# apt-get install freemind<br />
Reading Package Lists... Done<br />
Building Dependency Tree... Done<br />
Some packages could not be installed. This may mean that you have<br />
requested an impossible situation or if you are using the unstable<br />
distribution that some required packages have not yet been created<br />
or been moved out of Incoming.<br />
<br />
Since you only requested a single operation it is extremely likely that<br />
the package is simply not installable and a bug report against<br />
that package should be filed.<br />
The following information may help to resolve the situation:<br />
<br />
The following packages have unmet dependencies:<br />
freemind: Depends: j2re1.4 or<br />
java2-runtime<br />
E: Broken packages<br />
<br />
<br />
why?<br />
I've java, I've and I work with NetBeans...<br />
tnx<br />
<br />
==== how to deplace branches from right to left ====<br />
<br />
Branches are created only at right and it's impossible to move them left.<br />
<br />
answer ?: if you try to move the node over the top or under the bottom it moves left, but only if you already have one on the left. With 0.8.0, if all my branches are on the right, when I create a new child off the root, it shows up on the left. Then I can move things over to the left.<br />
<br />
=== Ideas for added functionality ===<br />
==== Multiple Parents ====<br />
Any plans to make Freemind support multiple parents/siblings. It would be useful for social networking mapping among other things. Another example would be to use it to draw a computer network.<br />
This is absolutely essential for creative thinking - ideas are born from two parents connecting together! Hierarchical mind maps are great for analysis: breaking a problem down, but not so good for creating new ideas.<br />
It would also be able to put down free standing nodes and work out their relationships later.<br />
You developers are doing a terrific job and have a lot on your plate! I hope you'll prioritise this one though as it opens up a whole new way of mind mapping, much more in keeping with how our minds work! Thanks people!<br />
<br />
<br />
( I really like that Idea; was looking for a solution myself. I use Mindmaps on structuring my writen work and very often I try to visualize processes. In a process very often two different 'states' lead to a single solution.)<br />
<br />
==== various ideas ====<br />
Hi everyone, <br />
<br />
first I want to thank all developers for making FreeMind (0.8.0). It's a great tool!<br />
<br />
Working with FreeMind I still miss somethings and maybe you like the ideas and can integrate them in the 0.9 oder 1.0 release. As I did not find a "proposal" page, I'll put it in here.<br />
<br />
1.) <br />
It takes too much interaction to change the color of text, background, line color and/or icon for a node element<br />
<br />
How about presets, easily accessible with hotkey, say CTRL 1-9. For each hotkey, an interface lets you define a combination of icon and the 3 textcolors. CTRL 1 can be Icon Question + Line color red (the background and text color are not influenced, so I could use CTRL 9 setting these both too on the same node without overwriting the first CTRL 1). This would be easy and convenient.<br />
<br />
2.)<br />
I store a lot of plans/projects in FreeMind. Notes are implemented rather simple at the moment. First I miss a hotkey to add a note. Second I simply cannot find a way to remove a note. (Here is a question hidden ;) )<br />
Third, the lower part of the screen is not the best way to edit larger nodes. An (optional?) popup window would simplify both editing and reading (and could be the same hotkey as the creation of the note).<br />
<br />
3.)<br />
An optional setting that copies color/icon settings on creation of a new node from its father. And an additional hotkey to clear the setting, if it is not needed. This would be a great help in Mindmaps where one wants for example maps with nodes starting from root with different color and passing them down the whole structure.<br />
<br />
<br />
Thanks for reading, keep up the good work<br />
Markus<br />
<br />
<br />
==== Could a simple vector-graphics feature be added? ====<br />
<br />
Using Freemind to take notes, being limited to text is very frustrating. Yes, bitmap images are possible, but I simply want to draw a graph or systems map etc. Nothing too fancy, but it would be nice to be able to add a "vector graphics" node with the following features:<br />
<br />
- Cutdown, SVG-based implementation<br />
<br />
- Small, internal editor<br />
<br />
- Rectangles, circles, lines, text<br />
<br />
- Varying line widths, colours<br />
<br />
- Varying 2-colour gradients, (1D, angle)<br />
<br />
- Vector area is scalable, contents scale with border.<br />
<br />
- When editing, contents do NOT scale with border<br />
<br />
That would do me!<br />
<br />
<br />
<br />
==== Hard links ====<br />
<br />
Dear developers, please, think of the possibility of including the functionality of hard links (unixlike). Thanks.<br />
<br />
Sasha.Travov<br />
<br />
== Install FreeMind silent ==<br />
<br />
With FreeMind 0.8.0 Windows Installer Max, the Inno Setup command line switches can be used for an unattended (silent) setup:<br />
FreeMind-Windows-Installer-0_8_0-max.exe /sp- /silent /norestart<br />
<br />
I read about Inno Setup at the SourceForge ''Unattended'' project page for unattended software installation [http://unattended.sourceforge.net/installers.php]<br />
<br />
=== 0.9.0-Beta3 exports partial page ===<br />
<br />
I was using stable FreeMind version 0.8.0 on Ubuntu 6.10 Edgy Linux. <br />
apt-get install per your instructions worked great! Thank you. When <br />
I exported a map, it would "do the right thing" and export the entire<br />
map even if the entire map does not show on FreeMinds screen. For<br />
example, some of map is off the visual screen area though I could scroll<br />
to see it; when I export I want entire map to show and it works fine<br />
with 0.8.0.<br />
<br />
Now, with 0.9.0-Beta3 FreeMind only exports portion of map that is on<br />
the screen. I have to reduce map to 75% or less in FreeMind (to get<br />
entire image on FreeMind screen area) to export entire thing in single<br />
image and then resolution is getting very small. I read many FreeMind<br />
pages and forum and did not find this anywhere. I did not know how to<br />
report to Developers for what is basically a Beta testing of this fine<br />
program.<br />
<br />
Maybe there is a setting that I did not find that will make entire <br />
off-screen image export also?<br />
<br />
----<br />
<br />
=== Arrow Styles Questions ===<br />
<br />
* Is it possible to change the edge style of arrows? They always seem to operate with beziers - wondering if I can change them to linear? I'm trying to use arrows to show a connection between two nodes that appear similarly to the hierarchical relations. Would love the option to actually link two nodes to different parents rather than solely hierarchically. Thanks! Great tool!<br />
<br />
- [[User:Oddible|Oddible]] 19:17, 27 Feb 2007 (PST)<br />
<br />
== Expand all parents? ==<br />
<br />
CAn all parents of a child node be expanded, i.e., "backtracked"? I think this would be a very useful feature..kind of like a reverse wiring diagram.<br />
<br />
== Node "cloud" ==<br />
<br />
Could there be an option to autoformat the size of a node bubble based on the number of its children normalized by the number of total children..or something like that? It would be a nice visual of priorities ... more children meaning more time spent on that branch.<br />
<br />
== search notes? ==<br />
<br />
The search function is great...but would be even better if ti included the notes. Thanks!<br />
<br />
== inserting an encrypted node makes the file unusable on linux ==<br />
<br />
'''inserting an encrypted node''' in '''0.9.0 beta 9''' (tested on ubuntu 7.04) '''makes the mindmap unusable'''. you can insert an encrypted node but if you want to save your mindmap, '''the file will be smaller than the original'''. the file including the encrypted node is filled with rubbish at the end.<br />
<br />
if you open the '''damaged file''' you get a big node includig the following error message:<br />
Error while parsing file:freemind.main.XMLParseException: XML Parse Exception during parsing of a map element at line 44: Unexpected end of data reached<br />
<br />
if you use version '''0.8.0''' '''including a secured node''', you'll get a '''0 byte file'''.<br />
<br />
== Batch creating nodes and trees from text input? ==<br />
<br />
I have a large string of categories I wish to divide into nodes and sub nodes in the following format:<br />
<br />
FAQ.Products.Disks.CD.CD Creator<br />
FAQ.Products.Disks.DVD.DVD Writer <br />
FAQ.Products.Disks.DVD.DVD Writer.Compatability <br />
<br />
I would like to be able to generate a mindmap to look like the following:<br />
<br />
----<br />
<br />
FAQ > Products > Disks - CD - CD Creator<br />
- DVD - DVD Writer<br />
- DVD - DVD Writer - Compatability<br />
<br />
<br />
----<br />
<br />
<br />
So by some batch process or script it will add the sub nodes to the parent nodes without creating new nodes of the same name. Any recommendations?<br />
<br />
==== What is Freemind and what is it's purpose? ====<br />
<br />
==== Who is primarily developing Freemind and how can I help? ====<br />
<br />
==== Where do I find Freemind for downloading? ====<br />
<br />
===== What other things can I find in the Freemind area of SourceForge? =====<br />
<br />
==== How should I file bugs or documentation corrections? ====<br />
<br />
===== Why doesn't Freemind have a Help menu item for filing bugs? =====<br />
<br />
==== How is the SourceForge area and the Freemind Wiki connected? ====<br />
<br />
===== Should the FAQ in the Wiki have prominent links to the SourceForge area? =====<br />
<br />
==Plain Text Notes==<br />
Is there anyway to have plain text '''notes'''? I would like to upload my mind map to my wiki, but because the notes have HTML in them, I am blocked from uploading it. Due to the dangers in allowing HTML, disabling this check is not an option.<br />
<br />
So, does anyone know a way to allow plain text notes in FreeMind? --[[User:Vaccano|Vaccano]] 09:36, 17 Oct 2007 (PDT)<br />
<br />
: Alt+P or Format->Use plain text converts all selected nodes to plain text and changes the default settings for new nodes. [[User:DimitriPolivaev|DimitriPolivaev]]<br />
<br />
:: Sadly this works for the node, but not for the node's notes. (Though I did double check it again just to be sure :) If there is a way to have notes be plain text (rather than have HTML tags) I would love to hear of that! --[[User:Vaccano|Vaccano]] 08:47, 18 Oct 2007 (PDT)<br />
<br />
Is there a way to change default formatting (15pt top outer margin is just bad)?<br />
<br />
== No spell check? ==<br />
<br />
Is there no spell check feature?<br />
<br />
== Pasted URLs have a strange look ==<br />
<br />
When I have a URL in the clipboard and paste it in a node, I get a link that works, but the text in the created node is not correct: the slashes in the URL are substituted by ">". For example: "http://www.zmag.org/" becomes a linked node with that URL but with text "zmag.org > Zspace > Commentaries > 3470". Is this normal? Can it be changed? Thanks! --[[User:GOOgles|GOOgles]] 13:52, 4 Aug 2008 (PDT)<br />
<br />
== what would it take for you to change the FreeMind license to something other tha GPL? ==<br />
<br />
There is great interest in FreeMind. I come from the Confluence community where FreeMind is popular. A FreeMind plugin was even written which was extremely useful, but it was essentially scraped for all intensive purposes because of the perceived conflict with the GPL.<br />
<br />
Have a look: http://confluence.atlassian.com/display/CONFEXT/FreeMind+Plugin<br />
<br />
40 comments around people trying expose FreeMind to their typically large wiki communities, but the GPL prevented this exposure.<br />
<br />
So my question is: what would it take for you to change the FreeMind license to something other tha GPL?<br />
<br />
thanks!</div>Bpatters7https://freemind.sourceforge.io/wiki/index.php?title=Screenshots&diff=7102Screenshots2008-08-22T00:15:54Z<p>Bpatters7: adding image for demo video</p>
<hr />
<div><table><tr><br />
<td valign=top><br />
{{Navigation_bar}}<br />
<td>&nbsp;<br />
<td width=600> <br />
<br />
== Screenshots ==<br />
<br />
{| <br />
| [http://freemind.sourceforge.net/FreeMind-computer-knowledge.png http://freemind.sourceforge.net/FreeMind-computer-knowledge-thumb.png]<br />
| [http://freemind.sourceforge.net/FreeMind-learning-german.png http://freemind.sourceforge.net/FreeMind-learning-german-thumb.png]<br />
|-<br />
| [http://freemind.sourceforge.net/FreeMind-freemind-development.png http://freemind.sourceforge.net/FreeMind-freemind-development-thumb.png]<br />
| [http://freemind.sourceforge.net/FreeMind-my-health.png http://freemind.sourceforge.net/FreeMind-my-health-thumb.png]<br />
|}<br />
<br />
<!-- <br />
<br />
We should better not link to web screenshorts, as many people deems than inappropriate. --Dan<br />
<br />
==Web screenshots==<br />
<br />
Here is a set of directly linked screenshots, scattered through the web.<br />
<br />
no longer works: http://www.openspf.de/space/Freemind/scaled-images/scaled-640-scc.jpg<br />
<br />
http://www.hebig.org/blogs/archives/main/freemind_dragdrop_small.gif<br />
<br />
http://en.wikipedia.org/upload/7/7a/MindmapExample.png<br />
<br />
never works: http://vowe.net/images/freemind.jpeg<br />
<br />
--><br />
<br />
==Only thumbs==<br />
<br />
[[Image:FreeMindLongNodes.png]]<br />
[[Image:FreeMindLongNodes2.png]]<br />
[[Image:FreeMindLongNodes3.png]]<br />
<br />
==Video==<br />
<br />
* [http://www.artemissoftware.biz/videos/freemind-demo1.mov Brief video demo of a few basic features and uses of FreeMind]<br />
[http://www.artemissoftware.biz/videos/freemind-demo1.mov http://img.skitch.com/20080821-pc4haj2ay7yibdpha9r4bjwgc5.preview.jpg]<br />
<br />
==On the web==<br />
<br />
* [http://images.google.com/images?hl=en&q=FreeMind&btnG=Search+Images&gbv=2 Googled screenshots - "FreeMind"]<br />
* [http://commons.wikimedia.org/wiki/Category:Mind_map Category:Mind Map] — Wikimedia Commons<br />
<br />
</table></div>Bpatters7https://freemind.sourceforge.io/wiki/index.php?title=Screenshots&diff=7065Screenshots2008-08-22T00:09:23Z<p>Bpatters7: adding my demo video</p>
<hr />
<div><table><tr><br />
<td valign=top><br />
{{Navigation_bar}}<br />
<td>&nbsp;<br />
<td width=600> <br />
<br />
== Screenshots ==<br />
<br />
{| <br />
| [http://freemind.sourceforge.net/FreeMind-computer-knowledge.png http://freemind.sourceforge.net/FreeMind-computer-knowledge-thumb.png]<br />
| [http://freemind.sourceforge.net/FreeMind-learning-german.png http://freemind.sourceforge.net/FreeMind-learning-german-thumb.png]<br />
|-<br />
| [http://freemind.sourceforge.net/FreeMind-freemind-development.png http://freemind.sourceforge.net/FreeMind-freemind-development-thumb.png]<br />
| [http://freemind.sourceforge.net/FreeMind-my-health.png http://freemind.sourceforge.net/FreeMind-my-health-thumb.png]<br />
|}<br />
<br />
<!-- <br />
<br />
We should better not link to web screenshorts, as many people deems than inappropriate. --Dan<br />
<br />
==Web screenshots==<br />
<br />
Here is a set of directly linked screenshots, scattered through the web.<br />
<br />
no longer works: http://www.openspf.de/space/Freemind/scaled-images/scaled-640-scc.jpg<br />
<br />
http://www.hebig.org/blogs/archives/main/freemind_dragdrop_small.gif<br />
<br />
http://en.wikipedia.org/upload/7/7a/MindmapExample.png<br />
<br />
never works: http://vowe.net/images/freemind.jpeg<br />
<br />
--><br />
<br />
==Only thumbs==<br />
<br />
[[Image:FreeMindLongNodes.png]]<br />
[[Image:FreeMindLongNodes2.png]]<br />
[[Image:FreeMindLongNodes3.png]]<br />
<br />
==Video==<br />
<br />
* [http://www.artemissoftware.biz/videos/freemind-demo1.mov Brief video demo of a few basic features and uses of FreeMind]<br />
<br />
==On the web==<br />
<br />
* [http://images.google.com/images?hl=en&q=FreeMind&btnG=Search+Images&gbv=2 Googled screenshots - "FreeMind"]<br />
* [http://commons.wikimedia.org/wiki/Category:Mind_map Category:Mind Map] — Wikimedia Commons<br />
<br />
</table></div>Bpatters7https://freemind.sourceforge.io/wiki/index.php?title=User-contributed_example_scripts&diff=7573User-contributed example scripts2008-05-25T23:45:06Z<p>Bpatters7: /* Demo video on debugging Groovy for FreeMind */</p>
<hr />
<div>== Code Examples from the author ==<br />
Dear FreeMind users, <br />
<br />
in [http://freemind.cvs.sourceforge.net/freemind/admin/docs/features/0_9_0/Features%200.9.0.mm?view=log&pathrev=MAIN Features 0.9.0] you'll find a mindmap with the upcoming features for 0.9.0. Included, there is a section about scripts and some very useful scripts, that are recommended to be read first.<br />
<br />
== A node with the current time ==<br />
If you need a node that shows the last saving time, just add the following script and start it<br />
once each time, you are opening the map for editing.<br />
<br />
<groovy><br />
import freemind.modes.MindMapNode;<br />
import freemind.modes.mindmapmode.MindMapController;<br />
import java.util.Timer;<br />
<br />
class DateTimer extends java.util.TimerTask {<br />
MindMapNode mNode;<br />
MindMapController mC;<br />
DateTimer(node, c) {<br />
mNode = node;<br />
mC = c;<br />
}<br />
<br />
void run() {<br />
mNode.setText("Save Time: " + new java.util.Date());<br />
mC.nodeRefresh(mNode);<br />
} <br />
}<br />
<br />
t = new Timer();<br />
t.schedule(new DateTimer(node, c),2000,2000);<br />
</groovy><br />
<br />
'''WARNING! I have now played with Groovy for 30 minutes and I am unsure of the side effects to FreeMind of using these examples, as they modify children of a node. - Dave Torok'''<br />
<br />
== Prepend the modified date at the beginning of the node text == <br />
This is an example of using some more Node methods.<br />
<br />
<groovy>=(new java.text.SimpleDateFormat("M/d/yyyy")).format(node.getHistoryInformation().getLastModifiedAt()) <br />
+ " " + node.getText()</groovy><br />
<br />
== Add up all subnodes and set them into the first row, second column. ==<br />
<br />
Copy the script into subnodes if you want go more than one level. As far as I can tell you can't grab the values by attribute name, just by row / column, but I didn't spend forever looking over the source.. (Maybe someone could push some javadoc?)<br />
<br />
<br />
<groovy><br />
def i = node.childrenUnfolded(); def total=0; <br />
while (i.hasNext()) { d = i.next(); def val=d.getAttributes().getValueAt(0,1); <br />
if (val!=null) total=total+java.lang.Integer.parseInt(val); }; <br />
node.getAttributes().setValueAt(total, 0,1);</groovy><br />
<br />
The above code has a problem that it will let leaf node and its parent nodes with the script to yield 0 value. The following code would work recursively. <br />
<br />
<groovy><br />
if (!node.isLeaf()) {def i = node.childrenUnfolded(); def total=0; <br />
while (i.hasNext()) { d = i.next(); def val=d.getAttributes().getValueAt(0,1); <br />
if (val!=null) total=total+java.lang.Integer.parseInt(val); }; <br />
node.getAttributes().setValueAt(total, 0,1);};</groovy><br />
<br />
--[[User:Yubrshen|yushen]] 15:35, 15 Jan 2007 (PST)<br />
----<br />
<br />
<br />
== Set the color for all children ==<br />
This is an example of iteration over child nodes. Also, a call to c.nodeStructureChanged(node) is necessary to force a refresh to paint the new color.<br />
<br />
<groovy><br />
def i = node.childrenUnfolded(); <br />
while (i.hasNext()) { d = i.next(); d.setColor(java.awt.Color.BLUE); }; <br />
c.nodeStructureChanged();</groovy><br />
== Swap two CHILD nodes ==<br />
This works. My goal is to get a foundation for a SORT script, to sort children by alphabet, by created date, etc. until the functionality is added to the software. WARNING WARNING WARNING this is just an example to swap the 2nd and 4th child nodes.'''<br />
<br />
<groovy>def swap (a,b) {<br />
na = node.getChildAt(a);<br />
nb = node.getChildAt(b);<br />
node.remove(a); <br />
node.remove(b - 1); <br />
node.insert(nb,a);<br />
node.insert(na,b);<br />
c.nodeStructureChanged(node);<br />
};<br />
<br />
swap(1,3);</groovy><br />
<br />
== Add/Replace today ==<br />
<br />
<groovy><br />
=nt=node.toString(); pos=nt.indexOf(" / "); <br />
return ((pos>=0)?nt.substring(0,pos):nt) + " / " <br />
+ (new java.text.SimpleDateFormat("yyyy-M-d")).format(new Date())<br />
</groovy><br />
<br />
== Set up a logger ==<br />
<br />
The following code, set up at the beginning of your script, will set up a logger that you can use to follow the progress of your script while you are working on it. You can find details on how to use the Java Logger at http://java.sun.com/javase/6/docs/api/<br />
<br />
Be sure to read section 1.8 on how to set up your configuration file. If you don't get anything out of the logger, that's one of the likely sources of trouble.<br />
<br />
<groovy><br />
def logger = c.getFrame().getLogger(this.getClass().getName());<br />
logger.info(" ******* Logger set up for script");<br />
</groovy><br />
<br />
<br />
== Export to bibtex ==<br />
This is an attempt to make a script that takes a mindmap formatted in a certain way and produces a bibtex file out of each node (each node has the correct fields to be parsed as a bibtex entry). <br />
I have a problem, the script exits from the main switch(attr['Type']), after calling any print*() function. The function is executed, the file first entry is written but after the call I have a "java.lang.NullPointerException: Cannot invoke method call() on null object" error.<br />
I'm a groovy programmer with 5hours experience, so I might be missing something easy. Can somebody help to make this script work? [http://freemind.sourceforge.net/wiki/images/1/1d/IEEEBibliography.mm here] you can find a suitable mm file.<br />
<br />
<groovy><br />
import freemind.modes.MindMapNode; <br />
<br />
def attrMap = { node, f -> <br />
def attrs = [:];<br />
for(i in 0..<node.getAttributes().getRowCount()) {<br />
attrs[node.getAttributes().getName(i)] = node.getAttributes().getValue(i);<br />
};<br />
return attrs;<br />
};<br />
<br />
def printConference (f, attr, index){<br />
f << "@InProceedings{ ${index.toString()},\n";<br />
attr.each{<br />
f << "switch";<br />
if(it.key != null){<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Conference': f << "booktitle = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
}<br />
f << '}\n';<br />
};<br />
<br />
def printJournal (f, attr, index) {<br />
f << "@Article{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Journal': f << "journal = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
};<br />
<br />
def printStandard (f, attr, index){<br />
f << "@STANDARD{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Institution': f << "institution = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
<br />
};<br />
def printWeblink (f, attr, index) {<br />
f << "@online{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
};<br />
<br />
<br />
def allChildren (node, f) {<br />
def kids = [];<br />
def stack = new Stack();<br />
stack.push(node.childrenUnfolded());<br />
while(!stack.isEmpty()) {<br />
nodes = stack.pop();<br />
while(nodes.hasNext()) {<br />
k = nodes.next();<br />
kids.add(k);<br />
stack.push(k.childrenUnfolded());<br />
};<br />
};<br />
kids.each{<br />
};<br />
return kids;<br />
};<br />
<br />
<br />
<br />
f = new File("/tmp/File.txt");<br />
f.delete();<br />
index = 1;<br />
<br />
<br />
<br />
allChildren(node, f).each { kid -><br />
attr = attrMap(kid, f);<br />
switch(attr['Type']){<br />
case 'Journalpaper': <br />
printJournal(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Standard':<br />
printStandard(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Weblink':<br />
printWeblink(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Confpaper': <br />
printConference(f, attr, index);<br />
index = index + 1;<br />
break<br />
default: <br />
break<br />
}<br />
}<br />
<br />
<br />
</groovy><br />
<br />
== Sum up all subnodes recursively for a specific attribute(s) or all found attributes==<br />
<br />
A useful script which sums up values of a specified attribute(s) and performs this recursively propagating<br />
summed values over node structure.<br><br />
All that you need - just assign this source to the attribute named 'script' for a high-level node containing<br />
subnodes with numeric attribute(s), press Alt-F8 and follow onscreen instructions on the popup dialog.<br><br />
the script also supports calculation over several attributes or<br />
all found attributes containing numeric values (use wildcard *).<br><br />
If there are attributes with the same name within a node - this is handled properly.<br><br />
<br><br />
'''Important''': this script adds (and removes) new attributes with prefix "Σ" (Greek letter Sigma) which contain<br />
summed values of corresponding nodes and all their subnodes.<br><br />
So if you also use attributes with names those start from<br />
the letter Sigma, you should change the value of ATTRIBUTE_SUM_PREFIX variable within the script.<br><br />
<groovy><br />
<br />
/* sum Attributes */<br />
/**<br />
* a useful script which sums up values of a specified attribute(s) and performs this recursively propagating<br />
* summed values over node structure.<br />
* all that you need - just assign this source to the attribute named 'script' for a high-level node containing<br />
* subnodes with numeric attribute(s), press Alt-F8 and follow onscreen instructions on the popup dialog.<br />
* the script also supports calculation over several attributes or <br />
* all found attributes containing numeric values (use wildcard *).<br />
* if there are attributes with the same name within a node - this is handled properly.<br />
*<br />
* Important: this script adds (and removes) new attributes with prefix "\u03a3 " (Greek letter Sigma) which contains<br />
* summed values to corresponding nodes so if you also use attributes with names those start from<br />
* the sigma letter you should change the value of ATTRIBUTE_SUM_PREFIX below.<br />
* <br />
* @author Dmitry Romanov<br />
* coded with help of Groovy Eclipse plugin<br />
*/<br />
import freemind.modes.*;<br />
import freemind.modes.attributes.*;<br />
import freemind.view.mindmapview.attributeview.*;<br />
import freemind.view.mindmapview.*;<br />
import javax.swing.JOptionPane;<br />
/* def node = (MindMapNode) node; */<br />
<br />
ATTRIBUTE_SUM_PREFIX = "\u03a3 ";<br />
<br />
/* prepare decimal format object: */<br />
decimalFormat = java.text.NumberFormat.getNumberInstance();<br />
decimalFormat.setMinimumFractionDigits(0);<br />
def dfs = decimalFormat.getDecimalFormatSymbols();<br />
dfs.setDecimalSeparator((char)'.');<br />
decimalFormat.setDecimalFormatSymbols(dfs);<br />
<br />
def ATTRIBUTE_TO_SUM = getAttributeValues(node, "ATTRIBUTE_TO_SUM");<br />
<br />
if (ATTRIBUTE_TO_SUM.size()==0) {<br />
def uniqueAttrNames = collectUniqueAttributeNames(node, null, false);<br />
if (uniqueAttrNames.size()>0) {<br />
uniqueAttrNames << "*";<br />
String selectedAttribute = (String)JOptionPane.showInputDialog(<br />
null,<br />
"Choose the attribute to sum,\nyour selection will be saved \nin the current node in the attribute \"ATTRIBUTE_TO_SUM\" \nwhich you can change later or even specify more attributes to sum up\n by adding more attributes with the name \"ATTRIBUTE_TO_SUM\":\n\n(* is wildcard for all attributes)\n\n",<br />
"Need More Info",<br />
JOptionPane.PLAIN_MESSAGE,<br />
null,<br />
uniqueAttrNames.toArray(),<br />
null);<br />
if (selectedAttribute?.length()>0) {<br />
setAttributeValue(node, "ATTRIBUTE_TO_SUM", selectedAttribute, false);<br />
ATTRIBUTE_TO_SUM = [selectedAttribute];<br />
}<br />
} else {<br />
JOptionPane.showMessageDialog(null,<br />
"Found no attributes inside, starting from the current node.",<br />
"Error",<br />
JOptionPane.ERROR_MESSAGE);<br />
};<br />
};<br />
<br />
if (ATTRIBUTE_TO_SUM.size()>0) {<br />
collectUniqueAttributeNames(node, null, true).each() { anAttrName -><br />
if (anAttrName.startsWith(ATTRIBUTE_SUM_PREFIX) && !ATTRIBUTE_TO_SUM.contains(anAttrName)) {<br />
removeAttribute(node, anAttrName);<br />
};<br />
};<br />
ATTRIBUTE_TO_SUM.each() { anAttrToSum -><br />
if (anAttrToSum?.trim().length()>0) {<br />
ATTRIBUTE_TOTAL_NAME = ATTRIBUTE_SUM_PREFIX + anAttrToSum;<br />
def grandTotal = decimalFormat.format(countTotal(node, anAttrToSum, false));<br />
setAttributeValue(node, ATTRIBUTE_TOTAL_NAME, grandTotal, true);<br />
};<br />
};<br />
};<br />
<br />
/**<br />
* visits child nodes recursively and sums up values of found attributes<br />
* with name of "attributeToSum".<br />
*/<br />
def countTotal (MindMapNode targetNode, String attributeToSum, boolean andSetAttribute = false) {<br />
def total = 0;<br />
targetNode.childrenUnfolded().each() { aChildNode -><br />
total += countTotal(aChildNode, attributeToSum, true); /* recursive invocation */<br />
};<br />
/* currently total holds sum from all child nodes */<br />
if (andSetAttribute && total>0 && targetNode.hasChildren()) {<br />
total += countTotalForNode(targetNode, attributeToSum);<br />
setAttributeValue(targetNode, ATTRIBUTE_TOTAL_NAME, decimalFormat.format(total), true);<br />
} else {<br />
total += countTotalForNode(targetNode, attributeToSum);<br />
};<br />
total;<br />
};<br />
<br />
def countTotalForNode(MindMapNode targetNode, String attributeToSum) {<br />
def total = 0;<br />
def values = getAttributeValues(targetNode, attributeToSum);<br />
values.each() { val -><br />
if (val?.length()>0) {<br />
if (val.matches("[-+]?([0-9]*\\.[0-9]+|[0-9]+)")) {<br />
total += val.toDouble();<br />
} else if (attributeToSum != "*") {<br />
JOptionPane.showMessageDialog(null, "Invalid numeric value '"+val+"' for the node: \n\n\""+targetNode.getText()+"\"\n\nIgnored it."); <br />
};<br />
};<br />
};<br />
total;<br />
};<br />
<br />
def String getAttributeValue(MindMapNode targetNode, String attributeName) {<br />
def attribute = findAttribute(targetNode, attributeName);<br />
return attribute?.value;<br />
};<br />
<br />
def Attribute findAttribute(MindMapNode targetNode, String attributeName) {<br />
return targetNode.getAttributes()?.getAttributes()?.find() { anAttribute -><br />
anAttribute?.name == attributeName;<br />
}<br />
};<br />
<br />
def getAttributeValues(MindMapNode targetNode, String attributeName) {<br />
return targetNode.getAttributes()?.getAttributes()?.findAll() { anAttribute -><br />
(attributeName == "*" && !anAttribute?.name.startsWith(ATTRIBUTE_SUM_PREFIX)) || anAttribute?.name == attributeName;<br />
}.collect() { anAttribute -><br />
anAttribute?.value<br />
}<br />
};<br />
<br />
def int findAttributeIndex(MindMapNode targetNode, String attributeName) {<br />
def attrIndex = -1;<br />
targetNode.getAttributes().getAttributes().eachWithIndex() { anAttribute, index -><br />
if (anAttribute.name == attributeName) {<br />
attrIndex = index;<br />
return;<br />
};<br />
};<br />
return attrIndex;<br />
};<br />
<br />
<br />
def setAttributeValue(MindMapNode targetNode, String attrName, String attrValue, boolean firstOrLast) {<br />
def existingAttribute = findAttribute(targetNode, attrName);<br />
if (existingAttribute != null) {<br />
existingAttribute.setValue(attrValue);<br />
} else {<br />
if (targetNode.getAttributes()==null || targetNode.getAttributes().getRowCount()==0) {<br />
targetNode.createAttributeTableModel();<br />
};<br />
targetNode.getAttributes().insertRow(firstOrLast ? 0 : targetNode.getAttributes().getRowCount(), attrName, attrValue);<br />
};<br />
setOptimalColumnWidthsByFirstColumn(targetNode);<br />
};<br />
<br />
def void setOptimalColumnWidthsByFirstColumn(MindMapNode targetNode) {<br />
def NodeAttributeTableModel attributesModel = targetNode.getAttributes();<br />
if (attributesModel.getRowCount()==0) {<br />
return; <br />
};<br />
java.awt.Component comp = null;<br />
int cellWidth = 0;<br />
int maxCellWidth = 0;<br />
<br />
def AttributeView attrView = <br />
targetNode.getViewers().find() {it instanceof NodeView}?.getAttributeView();<br />
for (row in 0..attributesModel.getRowCount()-1) {<br />
def AttributeTable attrTable = attrView?.attributeTable;<br />
comp = attrTable?.dtcr?.getTableCellRendererComponent(<br />
attrView?.attributeTable, attributesModel.getValueAt(row, 0),<br />
false, false, row, 0);<br />
if (comp!=null) {<br />
cellWidth = comp.getPreferredSize().width;<br />
maxCellWidth = Math.max(cellWidth, maxCellWidth);<br />
}; <br />
};<br />
attributesModel.setColumnWidth(0, maxCellWidth>0 ? maxCellWidth + 1 : 100);<br />
};<br />
<br />
def void removeAttribute(MindMapNode startNode, String attrName) {<br />
def attrIndex = findAttributeIndex(startNode, attrName); <br />
if (attrIndex>-1) {<br />
startNode.getAttributes().removeRow(attrIndex); <br />
};<br />
startNode.childrenUnfolded().each() { aChildNode -><br />
removeAttribute(aChildNode, attrName); /* recursive invocation */<br />
};<br />
};<br />
<br />
def Set collectUniqueAttributeNames(MindMapNode startNode, Set result, boolean includeAttrsWithSum) {<br />
result = result!=null ? result : new LinkedHashSet();<br />
startNode.getAttributeKeyList().each() {<br />
if (it.length()>0 && it!="script" && (includeAttrsWithSum || !it.startsWith(ATTRIBUTE_SUM_PREFIX))) {<br />
result.add(it);<br />
};<br />
};<br />
startNode.childrenUnfolded().each() { aChildNode -><br />
collectUniqueAttributeNames(aChildNode, result, includeAttrsWithSum); /* recursive invocation */<br />
};<br />
return result;<br />
};<br />
<br />
</groovy><br />
--[[User:Dmitry2008|Dmitry2008]] 12:58, 5 Jan 2008 (PST)<br />
== Output A Map to CSV ==<br />
I use Freemind for estimating sometimes and when I do I want to export to a spreadsheet for inclusion in a larger project plan. The following script creates CSV output from a FreeMind map. Nodes without children are output at node depth 7 (magic number) so that the estimates column lines up (of course I could have put the estimates in attributes but I didn't).<br />
<groovy><br />
def process(thisNode, childPosition) {<br />
def nodeName = thisNode.toString()<br />
if (!thisNode.children) {<br />
print("," * (7 - thisNode.nodeLevel))<br />
}<br />
if (childPosition != 1) {<br />
print "," * thisNode.nodeLevel + nodeName<br />
} else {<br />
print "," + nodeName<br />
}<br />
def i = 0<br />
if (thisNode.children) {<br />
thisNode.children.each {<br />
i++<br />
process(it, i)<br />
}<br />
} else {<br />
println()<br />
}<br />
}<br />
<br />
process(node, 0) <br />
</groovy><br />
<br />
== Demo video on debugging Groovy for FreeMind ==<br />
<br />
This demo video shows how to do the following things:<br />
* reference a file containing Groovy script from within FreeMind<br />
* pull FreeMind into a debugger<br />
* set a break point and step through the Groovy you're debugging<br />
<br />
This also gives all the advantages of creating FreeMind Groovy in an environment with:<br />
* Groovy text highlighting<br />
* code completion<br />
* debugging<br />
* Groovy analysis<br />
* all of [http://www.jetbrains.com/idea/features/groovy_grails.html | IDEA's other great Groovy features]<br />
<br />
Here is the video: [http://www.artemissoftware.biz/site/display/art/using+Groovy+and+IDEA+to+enhance+Freemind | Debugging Groovy for FreeMind inside IDEA]<br />
<br />
[[Image:GroovyAndFreeMindDebugging.ppt.jpg]]</div>Bpatters7https://freemind.sourceforge.io/wiki/index.php?title=File:GroovyAndFreeMindDebugging.ppt.jpg&diff=11152File:GroovyAndFreeMindDebugging.ppt.jpg2008-05-25T23:43:22Z<p>Bpatters7: </p>
<hr />
<div></div>Bpatters7https://freemind.sourceforge.io/wiki/index.php?title=User-contributed_example_scripts&diff=6860User-contributed example scripts2008-05-24T02:49:44Z<p>Bpatters7: /* Demo video on debugging Groovy for FreeMind */</p>
<hr />
<div>== Code Examples from the author ==<br />
Dear FreeMind users, <br />
<br />
in [http://freemind.cvs.sourceforge.net/freemind/admin/docs/features/0_9_0/Features%200.9.0.mm?view=log&pathrev=MAIN Features 0.9.0] you'll find a mindmap with the upcoming features for 0.9.0. Included, there is a section about scripts and some very useful scripts, that are recommended to be read first.<br />
<br />
== A node with the current time ==<br />
If you need a node that shows the last saving time, just add the following script and start it<br />
once each time, you are opening the map for editing.<br />
<br />
<groovy><br />
import freemind.modes.MindMapNode;<br />
import freemind.modes.mindmapmode.MindMapController;<br />
import java.util.Timer;<br />
<br />
class DateTimer extends java.util.TimerTask {<br />
MindMapNode mNode;<br />
MindMapController mC;<br />
DateTimer(node, c) {<br />
mNode = node;<br />
mC = c;<br />
}<br />
<br />
void run() {<br />
mNode.setText("Save Time: " + new java.util.Date());<br />
mC.nodeRefresh(mNode);<br />
} <br />
}<br />
<br />
t = new Timer();<br />
t.schedule(new DateTimer(node, c),2000,2000);<br />
</groovy><br />
<br />
'''WARNING! I have now played with Groovy for 30 minutes and I am unsure of the side effects to FreeMind of using these examples, as they modify children of a node. - Dave Torok'''<br />
<br />
== Prepend the modified date at the beginning of the node text == <br />
This is an example of using some more Node methods.<br />
<br />
<groovy>=(new java.text.SimpleDateFormat("M/d/yyyy")).format(node.getHistoryInformation().getLastModifiedAt()) <br />
+ " " + node.getText()</groovy><br />
<br />
== Add up all subnodes and set them into the first row, second column. ==<br />
<br />
Copy the script into subnodes if you want go more than one level. As far as I can tell you can't grab the values by attribute name, just by row / column, but I didn't spend forever looking over the source.. (Maybe someone could push some javadoc?)<br />
<br />
<br />
<groovy><br />
def i = node.childrenUnfolded(); def total=0; <br />
while (i.hasNext()) { d = i.next(); def val=d.getAttributes().getValueAt(0,1); <br />
if (val!=null) total=total+java.lang.Integer.parseInt(val); }; <br />
node.getAttributes().setValueAt(total, 0,1);</groovy><br />
<br />
The above code has a problem that it will let leaf node and its parent nodes with the script to yield 0 value. The following code would work recursively. <br />
<br />
<groovy><br />
if (!node.isLeaf()) {def i = node.childrenUnfolded(); def total=0; <br />
while (i.hasNext()) { d = i.next(); def val=d.getAttributes().getValueAt(0,1); <br />
if (val!=null) total=total+java.lang.Integer.parseInt(val); }; <br />
node.getAttributes().setValueAt(total, 0,1);};</groovy><br />
<br />
--[[User:Yubrshen|yushen]] 15:35, 15 Jan 2007 (PST)<br />
----<br />
<br />
<br />
== Set the color for all children ==<br />
This is an example of iteration over child nodes. Also, a call to c.nodeStructureChanged(node) is necessary to force a refresh to paint the new color.<br />
<br />
<groovy><br />
def i = node.childrenUnfolded(); <br />
while (i.hasNext()) { d = i.next(); d.setColor(java.awt.Color.BLUE); }; <br />
c.nodeStructureChanged();</groovy><br />
== Swap two CHILD nodes ==<br />
This works. My goal is to get a foundation for a SORT script, to sort children by alphabet, by created date, etc. until the functionality is added to the software. WARNING WARNING WARNING this is just an example to swap the 2nd and 4th child nodes.'''<br />
<br />
<groovy>def swap (a,b) {<br />
na = node.getChildAt(a);<br />
nb = node.getChildAt(b);<br />
node.remove(a); <br />
node.remove(b - 1); <br />
node.insert(nb,a);<br />
node.insert(na,b);<br />
c.nodeStructureChanged(node);<br />
};<br />
<br />
swap(1,3);</groovy><br />
<br />
== Add/Replace today ==<br />
<br />
<groovy><br />
=nt=node.toString(); pos=nt.indexOf(" / "); <br />
return ((pos>=0)?nt.substring(0,pos):nt) + " / " <br />
+ (new java.text.SimpleDateFormat("yyyy-M-d")).format(new Date())<br />
</groovy><br />
<br />
== Set up a logger ==<br />
<br />
The following code, set up at the beginning of your script, will set up a logger that you can use to follow the progress of your script while you are working on it. You can find details on how to use the Java Logger at http://java.sun.com/javase/6/docs/api/<br />
<br />
Be sure to read section 1.8 on how to set up your configuration file. If you don't get anything out of the logger, that's one of the likely sources of trouble.<br />
<br />
<groovy><br />
def logger = c.getFrame().getLogger(this.getClass().getName());<br />
logger.info(" ******* Logger set up for script");<br />
</groovy><br />
<br />
<br />
== Export to bibtex ==<br />
This is an attempt to make a script that takes a mindmap formatted in a certain way and produces a bibtex file out of each node (each node has the correct fields to be parsed as a bibtex entry). <br />
I have a problem, the script exits from the main switch(attr['Type']), after calling any print*() function. The function is executed, the file first entry is written but after the call I have a "java.lang.NullPointerException: Cannot invoke method call() on null object" error.<br />
I'm a groovy programmer with 5hours experience, so I might be missing something easy. Can somebody help to make this script work? [http://freemind.sourceforge.net/wiki/images/1/1d/IEEEBibliography.mm here] you can find a suitable mm file.<br />
<br />
<groovy><br />
import freemind.modes.MindMapNode; <br />
<br />
def attrMap = { node, f -> <br />
def attrs = [:];<br />
for(i in 0..<node.getAttributes().getRowCount()) {<br />
attrs[node.getAttributes().getName(i)] = node.getAttributes().getValue(i);<br />
};<br />
return attrs;<br />
};<br />
<br />
def printConference (f, attr, index){<br />
f << "@InProceedings{ ${index.toString()},\n";<br />
attr.each{<br />
f << "switch";<br />
if(it.key != null){<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Conference': f << "booktitle = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
}<br />
f << '}\n';<br />
};<br />
<br />
def printJournal (f, attr, index) {<br />
f << "@Article{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Journal': f << "journal = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
};<br />
<br />
def printStandard (f, attr, index){<br />
f << "@STANDARD{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Institution': f << "institution = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
<br />
};<br />
def printWeblink (f, attr, index) {<br />
f << "@online{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
};<br />
<br />
<br />
def allChildren (node, f) {<br />
def kids = [];<br />
def stack = new Stack();<br />
stack.push(node.childrenUnfolded());<br />
while(!stack.isEmpty()) {<br />
nodes = stack.pop();<br />
while(nodes.hasNext()) {<br />
k = nodes.next();<br />
kids.add(k);<br />
stack.push(k.childrenUnfolded());<br />
};<br />
};<br />
kids.each{<br />
};<br />
return kids;<br />
};<br />
<br />
<br />
<br />
f = new File("/tmp/File.txt");<br />
f.delete();<br />
index = 1;<br />
<br />
<br />
<br />
allChildren(node, f).each { kid -><br />
attr = attrMap(kid, f);<br />
switch(attr['Type']){<br />
case 'Journalpaper': <br />
printJournal(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Standard':<br />
printStandard(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Weblink':<br />
printWeblink(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Confpaper': <br />
printConference(f, attr, index);<br />
index = index + 1;<br />
break<br />
default: <br />
break<br />
}<br />
}<br />
<br />
<br />
</groovy><br />
<br />
== Sum up all subnodes recursively for a specific attribute(s) or all found attributes==<br />
<br />
A useful script which sums up values of a specified attribute(s) and performs this recursively propagating<br />
summed values over node structure.<br><br />
All that you need - just assign this source to the attribute named 'script' for a high-level node containing<br />
subnodes with numeric attribute(s), press Alt-F8 and follow onscreen instructions on the popup dialog.<br><br />
the script also supports calculation over several attributes or<br />
all found attributes containing numeric values (use wildcard *).<br><br />
If there are attributes with the same name within a node - this is handled properly.<br><br />
<br><br />
'''Important''': this script adds (and removes) new attributes with prefix "Σ" (Greek letter Sigma) which contain<br />
summed values of corresponding nodes and all their subnodes.<br><br />
So if you also use attributes with names those start from<br />
the letter Sigma, you should change the value of ATTRIBUTE_SUM_PREFIX variable within the script.<br><br />
<groovy><br />
<br />
/* sum Attributes */<br />
/**<br />
* a useful script which sums up values of a specified attribute(s) and performs this recursively propagating<br />
* summed values over node structure.<br />
* all that you need - just assign this source to the attribute named 'script' for a high-level node containing<br />
* subnodes with numeric attribute(s), press Alt-F8 and follow onscreen instructions on the popup dialog.<br />
* the script also supports calculation over several attributes or <br />
* all found attributes containing numeric values (use wildcard *).<br />
* if there are attributes with the same name within a node - this is handled properly.<br />
*<br />
* Important: this script adds (and removes) new attributes with prefix "\u03a3 " (Greek letter Sigma) which contains<br />
* summed values to corresponding nodes so if you also use attributes with names those start from<br />
* the sigma letter you should change the value of ATTRIBUTE_SUM_PREFIX below.<br />
* <br />
* @author Dmitry Romanov<br />
* coded with help of Groovy Eclipse plugin<br />
*/<br />
import freemind.modes.*;<br />
import freemind.modes.attributes.*;<br />
import freemind.view.mindmapview.attributeview.*;<br />
import freemind.view.mindmapview.*;<br />
import javax.swing.JOptionPane;<br />
/* def node = (MindMapNode) node; */<br />
<br />
ATTRIBUTE_SUM_PREFIX = "\u03a3 ";<br />
<br />
/* prepare decimal format object: */<br />
decimalFormat = java.text.NumberFormat.getNumberInstance();<br />
decimalFormat.setMinimumFractionDigits(0);<br />
def dfs = decimalFormat.getDecimalFormatSymbols();<br />
dfs.setDecimalSeparator((char)'.');<br />
decimalFormat.setDecimalFormatSymbols(dfs);<br />
<br />
def ATTRIBUTE_TO_SUM = getAttributeValues(node, "ATTRIBUTE_TO_SUM");<br />
<br />
if (ATTRIBUTE_TO_SUM.size()==0) {<br />
def uniqueAttrNames = collectUniqueAttributeNames(node, null, false);<br />
if (uniqueAttrNames.size()>0) {<br />
uniqueAttrNames << "*";<br />
String selectedAttribute = (String)JOptionPane.showInputDialog(<br />
null,<br />
"Choose the attribute to sum,\nyour selection will be saved \nin the current node in the attribute \"ATTRIBUTE_TO_SUM\" \nwhich you can change later or even specify more attributes to sum up\n by adding more attributes with the name \"ATTRIBUTE_TO_SUM\":\n\n(* is wildcard for all attributes)\n\n",<br />
"Need More Info",<br />
JOptionPane.PLAIN_MESSAGE,<br />
null,<br />
uniqueAttrNames.toArray(),<br />
null);<br />
if (selectedAttribute?.length()>0) {<br />
setAttributeValue(node, "ATTRIBUTE_TO_SUM", selectedAttribute, false);<br />
ATTRIBUTE_TO_SUM = [selectedAttribute];<br />
}<br />
} else {<br />
JOptionPane.showMessageDialog(null,<br />
"Found no attributes inside, starting from the current node.",<br />
"Error",<br />
JOptionPane.ERROR_MESSAGE);<br />
};<br />
};<br />
<br />
if (ATTRIBUTE_TO_SUM.size()>0) {<br />
collectUniqueAttributeNames(node, null, true).each() { anAttrName -><br />
if (anAttrName.startsWith(ATTRIBUTE_SUM_PREFIX) && !ATTRIBUTE_TO_SUM.contains(anAttrName)) {<br />
removeAttribute(node, anAttrName);<br />
};<br />
};<br />
ATTRIBUTE_TO_SUM.each() { anAttrToSum -><br />
if (anAttrToSum?.trim().length()>0) {<br />
ATTRIBUTE_TOTAL_NAME = ATTRIBUTE_SUM_PREFIX + anAttrToSum;<br />
def grandTotal = decimalFormat.format(countTotal(node, anAttrToSum, false));<br />
setAttributeValue(node, ATTRIBUTE_TOTAL_NAME, grandTotal, true);<br />
};<br />
};<br />
};<br />
<br />
/**<br />
* visits child nodes recursively and sums up values of found attributes<br />
* with name of "attributeToSum".<br />
*/<br />
def countTotal (MindMapNode targetNode, String attributeToSum, boolean andSetAttribute = false) {<br />
def total = 0;<br />
targetNode.childrenUnfolded().each() { aChildNode -><br />
total += countTotal(aChildNode, attributeToSum, true); /* recursive invocation */<br />
};<br />
/* currently total holds sum from all child nodes */<br />
if (andSetAttribute && total>0 && targetNode.hasChildren()) {<br />
total += countTotalForNode(targetNode, attributeToSum);<br />
setAttributeValue(targetNode, ATTRIBUTE_TOTAL_NAME, decimalFormat.format(total), true);<br />
} else {<br />
total += countTotalForNode(targetNode, attributeToSum);<br />
};<br />
total;<br />
};<br />
<br />
def countTotalForNode(MindMapNode targetNode, String attributeToSum) {<br />
def total = 0;<br />
def values = getAttributeValues(targetNode, attributeToSum);<br />
values.each() { val -><br />
if (val?.length()>0) {<br />
if (val.matches("[-+]?([0-9]*\\.[0-9]+|[0-9]+)")) {<br />
total += val.toDouble();<br />
} else if (attributeToSum != "*") {<br />
JOptionPane.showMessageDialog(null, "Invalid numeric value '"+val+"' for the node: \n\n\""+targetNode.getText()+"\"\n\nIgnored it."); <br />
};<br />
};<br />
};<br />
total;<br />
};<br />
<br />
def String getAttributeValue(MindMapNode targetNode, String attributeName) {<br />
def attribute = findAttribute(targetNode, attributeName);<br />
return attribute?.value;<br />
};<br />
<br />
def Attribute findAttribute(MindMapNode targetNode, String attributeName) {<br />
return targetNode.getAttributes()?.getAttributes()?.find() { anAttribute -><br />
anAttribute?.name == attributeName;<br />
}<br />
};<br />
<br />
def getAttributeValues(MindMapNode targetNode, String attributeName) {<br />
return targetNode.getAttributes()?.getAttributes()?.findAll() { anAttribute -><br />
(attributeName == "*" && !anAttribute?.name.startsWith(ATTRIBUTE_SUM_PREFIX)) || anAttribute?.name == attributeName;<br />
}.collect() { anAttribute -><br />
anAttribute?.value<br />
}<br />
};<br />
<br />
def int findAttributeIndex(MindMapNode targetNode, String attributeName) {<br />
def attrIndex = -1;<br />
targetNode.getAttributes().getAttributes().eachWithIndex() { anAttribute, index -><br />
if (anAttribute.name == attributeName) {<br />
attrIndex = index;<br />
return;<br />
};<br />
};<br />
return attrIndex;<br />
};<br />
<br />
<br />
def setAttributeValue(MindMapNode targetNode, String attrName, String attrValue, boolean firstOrLast) {<br />
def existingAttribute = findAttribute(targetNode, attrName);<br />
if (existingAttribute != null) {<br />
existingAttribute.setValue(attrValue);<br />
} else {<br />
if (targetNode.getAttributes()==null || targetNode.getAttributes().getRowCount()==0) {<br />
targetNode.createAttributeTableModel();<br />
};<br />
targetNode.getAttributes().insertRow(firstOrLast ? 0 : targetNode.getAttributes().getRowCount(), attrName, attrValue);<br />
};<br />
setOptimalColumnWidthsByFirstColumn(targetNode);<br />
};<br />
<br />
def void setOptimalColumnWidthsByFirstColumn(MindMapNode targetNode) {<br />
def NodeAttributeTableModel attributesModel = targetNode.getAttributes();<br />
if (attributesModel.getRowCount()==0) {<br />
return; <br />
};<br />
java.awt.Component comp = null;<br />
int cellWidth = 0;<br />
int maxCellWidth = 0;<br />
<br />
def AttributeView attrView = <br />
targetNode.getViewers().find() {it instanceof NodeView}?.getAttributeView();<br />
for (row in 0..attributesModel.getRowCount()-1) {<br />
def AttributeTable attrTable = attrView?.attributeTable;<br />
comp = attrTable?.dtcr?.getTableCellRendererComponent(<br />
attrView?.attributeTable, attributesModel.getValueAt(row, 0),<br />
false, false, row, 0);<br />
if (comp!=null) {<br />
cellWidth = comp.getPreferredSize().width;<br />
maxCellWidth = Math.max(cellWidth, maxCellWidth);<br />
}; <br />
};<br />
attributesModel.setColumnWidth(0, maxCellWidth>0 ? maxCellWidth + 1 : 100);<br />
};<br />
<br />
def void removeAttribute(MindMapNode startNode, String attrName) {<br />
def attrIndex = findAttributeIndex(startNode, attrName); <br />
if (attrIndex>-1) {<br />
startNode.getAttributes().removeRow(attrIndex); <br />
};<br />
startNode.childrenUnfolded().each() { aChildNode -><br />
removeAttribute(aChildNode, attrName); /* recursive invocation */<br />
};<br />
};<br />
<br />
def Set collectUniqueAttributeNames(MindMapNode startNode, Set result, boolean includeAttrsWithSum) {<br />
result = result!=null ? result : new LinkedHashSet();<br />
startNode.getAttributeKeyList().each() {<br />
if (it.length()>0 && it!="script" && (includeAttrsWithSum || !it.startsWith(ATTRIBUTE_SUM_PREFIX))) {<br />
result.add(it);<br />
};<br />
};<br />
startNode.childrenUnfolded().each() { aChildNode -><br />
collectUniqueAttributeNames(aChildNode, result, includeAttrsWithSum); /* recursive invocation */<br />
};<br />
return result;<br />
};<br />
<br />
</groovy><br />
--[[User:Dmitry2008|Dmitry2008]] 12:58, 5 Jan 2008 (PST)<br />
== Output A Map to CSV ==<br />
I use Freemind for estimating sometimes and when I do I want to export to a spreadsheet for inclusion in a larger project plan. The following script creates CSV output from a FreeMind map. Nodes without children are output at node depth 7 (magic number) so that the estimates column lines up (of course I could have put the estimates in attributes but I didn't).<br />
<groovy><br />
def process(thisNode, childPosition) {<br />
def nodeName = thisNode.toString()<br />
if (!thisNode.children) {<br />
print("," * (7 - thisNode.nodeLevel))<br />
}<br />
if (childPosition != 1) {<br />
print "," * thisNode.nodeLevel + nodeName<br />
} else {<br />
print "," + nodeName<br />
}<br />
def i = 0<br />
if (thisNode.children) {<br />
thisNode.children.each {<br />
i++<br />
process(it, i)<br />
}<br />
} else {<br />
println()<br />
}<br />
}<br />
<br />
process(node, 0) <br />
</groovy><br />
<br />
== Demo video on debugging Groovy for FreeMind ==<br />
<br />
This demo video shows how to do the following things:<br />
* reference a file containing Groovy script from within FreeMind<br />
* pull FreeMind into a debugger<br />
* set a break point and step through the Groovy you're debugging<br />
<br />
This also gives all the advantages of creating FreeMind Groovy in an environment with:<br />
* Groovy text highlighting<br />
* code completion<br />
* debugging<br />
* Groovy analysis<br />
* all of [http://www.jetbrains.com/idea/features/groovy_grails.html | IDEA's other great Groovy features]<br />
<br />
Here is the video: [http://www.artemissoftware.biz/videos/freemindGroovyDebugging2.mov | Debugging Groovy for FreeMind inside IDEA]</div>Bpatters7https://freemind.sourceforge.io/wiki/index.php?title=User-contributed_example_scripts&diff=6857User-contributed example scripts2008-05-24T02:47:49Z<p>Bpatters7: /* Demo video on debugging Groovy for FreeMind */</p>
<hr />
<div>== Code Examples from the author ==<br />
Dear FreeMind users, <br />
<br />
in [http://freemind.cvs.sourceforge.net/freemind/admin/docs/features/0_9_0/Features%200.9.0.mm?view=log&pathrev=MAIN Features 0.9.0] you'll find a mindmap with the upcoming features for 0.9.0. Included, there is a section about scripts and some very useful scripts, that are recommended to be read first.<br />
<br />
== A node with the current time ==<br />
If you need a node that shows the last saving time, just add the following script and start it<br />
once each time, you are opening the map for editing.<br />
<br />
<groovy><br />
import freemind.modes.MindMapNode;<br />
import freemind.modes.mindmapmode.MindMapController;<br />
import java.util.Timer;<br />
<br />
class DateTimer extends java.util.TimerTask {<br />
MindMapNode mNode;<br />
MindMapController mC;<br />
DateTimer(node, c) {<br />
mNode = node;<br />
mC = c;<br />
}<br />
<br />
void run() {<br />
mNode.setText("Save Time: " + new java.util.Date());<br />
mC.nodeRefresh(mNode);<br />
} <br />
}<br />
<br />
t = new Timer();<br />
t.schedule(new DateTimer(node, c),2000,2000);<br />
</groovy><br />
<br />
'''WARNING! I have now played with Groovy for 30 minutes and I am unsure of the side effects to FreeMind of using these examples, as they modify children of a node. - Dave Torok'''<br />
<br />
== Prepend the modified date at the beginning of the node text == <br />
This is an example of using some more Node methods.<br />
<br />
<groovy>=(new java.text.SimpleDateFormat("M/d/yyyy")).format(node.getHistoryInformation().getLastModifiedAt()) <br />
+ " " + node.getText()</groovy><br />
<br />
== Add up all subnodes and set them into the first row, second column. ==<br />
<br />
Copy the script into subnodes if you want go more than one level. As far as I can tell you can't grab the values by attribute name, just by row / column, but I didn't spend forever looking over the source.. (Maybe someone could push some javadoc?)<br />
<br />
<br />
<groovy><br />
def i = node.childrenUnfolded(); def total=0; <br />
while (i.hasNext()) { d = i.next(); def val=d.getAttributes().getValueAt(0,1); <br />
if (val!=null) total=total+java.lang.Integer.parseInt(val); }; <br />
node.getAttributes().setValueAt(total, 0,1);</groovy><br />
<br />
The above code has a problem that it will let leaf node and its parent nodes with the script to yield 0 value. The following code would work recursively. <br />
<br />
<groovy><br />
if (!node.isLeaf()) {def i = node.childrenUnfolded(); def total=0; <br />
while (i.hasNext()) { d = i.next(); def val=d.getAttributes().getValueAt(0,1); <br />
if (val!=null) total=total+java.lang.Integer.parseInt(val); }; <br />
node.getAttributes().setValueAt(total, 0,1);};</groovy><br />
<br />
--[[User:Yubrshen|yushen]] 15:35, 15 Jan 2007 (PST)<br />
----<br />
<br />
<br />
== Set the color for all children ==<br />
This is an example of iteration over child nodes. Also, a call to c.nodeStructureChanged(node) is necessary to force a refresh to paint the new color.<br />
<br />
<groovy><br />
def i = node.childrenUnfolded(); <br />
while (i.hasNext()) { d = i.next(); d.setColor(java.awt.Color.BLUE); }; <br />
c.nodeStructureChanged();</groovy><br />
== Swap two CHILD nodes ==<br />
This works. My goal is to get a foundation for a SORT script, to sort children by alphabet, by created date, etc. until the functionality is added to the software. WARNING WARNING WARNING this is just an example to swap the 2nd and 4th child nodes.'''<br />
<br />
<groovy>def swap (a,b) {<br />
na = node.getChildAt(a);<br />
nb = node.getChildAt(b);<br />
node.remove(a); <br />
node.remove(b - 1); <br />
node.insert(nb,a);<br />
node.insert(na,b);<br />
c.nodeStructureChanged(node);<br />
};<br />
<br />
swap(1,3);</groovy><br />
<br />
== Add/Replace today ==<br />
<br />
<groovy><br />
=nt=node.toString(); pos=nt.indexOf(" / "); <br />
return ((pos>=0)?nt.substring(0,pos):nt) + " / " <br />
+ (new java.text.SimpleDateFormat("yyyy-M-d")).format(new Date())<br />
</groovy><br />
<br />
== Set up a logger ==<br />
<br />
The following code, set up at the beginning of your script, will set up a logger that you can use to follow the progress of your script while you are working on it. You can find details on how to use the Java Logger at http://java.sun.com/javase/6/docs/api/<br />
<br />
Be sure to read section 1.8 on how to set up your configuration file. If you don't get anything out of the logger, that's one of the likely sources of trouble.<br />
<br />
<groovy><br />
def logger = c.getFrame().getLogger(this.getClass().getName());<br />
logger.info(" ******* Logger set up for script");<br />
</groovy><br />
<br />
<br />
== Export to bibtex ==<br />
This is an attempt to make a script that takes a mindmap formatted in a certain way and produces a bibtex file out of each node (each node has the correct fields to be parsed as a bibtex entry). <br />
I have a problem, the script exits from the main switch(attr['Type']), after calling any print*() function. The function is executed, the file first entry is written but after the call I have a "java.lang.NullPointerException: Cannot invoke method call() on null object" error.<br />
I'm a groovy programmer with 5hours experience, so I might be missing something easy. Can somebody help to make this script work? [http://freemind.sourceforge.net/wiki/images/1/1d/IEEEBibliography.mm here] you can find a suitable mm file.<br />
<br />
<groovy><br />
import freemind.modes.MindMapNode; <br />
<br />
def attrMap = { node, f -> <br />
def attrs = [:];<br />
for(i in 0..<node.getAttributes().getRowCount()) {<br />
attrs[node.getAttributes().getName(i)] = node.getAttributes().getValue(i);<br />
};<br />
return attrs;<br />
};<br />
<br />
def printConference (f, attr, index){<br />
f << "@InProceedings{ ${index.toString()},\n";<br />
attr.each{<br />
f << "switch";<br />
if(it.key != null){<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Conference': f << "booktitle = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
}<br />
f << '}\n';<br />
};<br />
<br />
def printJournal (f, attr, index) {<br />
f << "@Article{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Journal': f << "journal = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
};<br />
<br />
def printStandard (f, attr, index){<br />
f << "@STANDARD{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Institution': f << "institution = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
<br />
};<br />
def printWeblink (f, attr, index) {<br />
f << "@online{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
};<br />
<br />
<br />
def allChildren (node, f) {<br />
def kids = [];<br />
def stack = new Stack();<br />
stack.push(node.childrenUnfolded());<br />
while(!stack.isEmpty()) {<br />
nodes = stack.pop();<br />
while(nodes.hasNext()) {<br />
k = nodes.next();<br />
kids.add(k);<br />
stack.push(k.childrenUnfolded());<br />
};<br />
};<br />
kids.each{<br />
};<br />
return kids;<br />
};<br />
<br />
<br />
<br />
f = new File("/tmp/File.txt");<br />
f.delete();<br />
index = 1;<br />
<br />
<br />
<br />
allChildren(node, f).each { kid -><br />
attr = attrMap(kid, f);<br />
switch(attr['Type']){<br />
case 'Journalpaper': <br />
printJournal(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Standard':<br />
printStandard(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Weblink':<br />
printWeblink(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Confpaper': <br />
printConference(f, attr, index);<br />
index = index + 1;<br />
break<br />
default: <br />
break<br />
}<br />
}<br />
<br />
<br />
</groovy><br />
<br />
== Sum up all subnodes recursively for a specific attribute(s) or all found attributes==<br />
<br />
A useful script which sums up values of a specified attribute(s) and performs this recursively propagating<br />
summed values over node structure.<br><br />
All that you need - just assign this source to the attribute named 'script' for a high-level node containing<br />
subnodes with numeric attribute(s), press Alt-F8 and follow onscreen instructions on the popup dialog.<br><br />
the script also supports calculation over several attributes or<br />
all found attributes containing numeric values (use wildcard *).<br><br />
If there are attributes with the same name within a node - this is handled properly.<br><br />
<br><br />
'''Important''': this script adds (and removes) new attributes with prefix "Σ" (Greek letter Sigma) which contain<br />
summed values of corresponding nodes and all their subnodes.<br><br />
So if you also use attributes with names those start from<br />
the letter Sigma, you should change the value of ATTRIBUTE_SUM_PREFIX variable within the script.<br><br />
<groovy><br />
<br />
/* sum Attributes */<br />
/**<br />
* a useful script which sums up values of a specified attribute(s) and performs this recursively propagating<br />
* summed values over node structure.<br />
* all that you need - just assign this source to the attribute named 'script' for a high-level node containing<br />
* subnodes with numeric attribute(s), press Alt-F8 and follow onscreen instructions on the popup dialog.<br />
* the script also supports calculation over several attributes or <br />
* all found attributes containing numeric values (use wildcard *).<br />
* if there are attributes with the same name within a node - this is handled properly.<br />
*<br />
* Important: this script adds (and removes) new attributes with prefix "\u03a3 " (Greek letter Sigma) which contains<br />
* summed values to corresponding nodes so if you also use attributes with names those start from<br />
* the sigma letter you should change the value of ATTRIBUTE_SUM_PREFIX below.<br />
* <br />
* @author Dmitry Romanov<br />
* coded with help of Groovy Eclipse plugin<br />
*/<br />
import freemind.modes.*;<br />
import freemind.modes.attributes.*;<br />
import freemind.view.mindmapview.attributeview.*;<br />
import freemind.view.mindmapview.*;<br />
import javax.swing.JOptionPane;<br />
/* def node = (MindMapNode) node; */<br />
<br />
ATTRIBUTE_SUM_PREFIX = "\u03a3 ";<br />
<br />
/* prepare decimal format object: */<br />
decimalFormat = java.text.NumberFormat.getNumberInstance();<br />
decimalFormat.setMinimumFractionDigits(0);<br />
def dfs = decimalFormat.getDecimalFormatSymbols();<br />
dfs.setDecimalSeparator((char)'.');<br />
decimalFormat.setDecimalFormatSymbols(dfs);<br />
<br />
def ATTRIBUTE_TO_SUM = getAttributeValues(node, "ATTRIBUTE_TO_SUM");<br />
<br />
if (ATTRIBUTE_TO_SUM.size()==0) {<br />
def uniqueAttrNames = collectUniqueAttributeNames(node, null, false);<br />
if (uniqueAttrNames.size()>0) {<br />
uniqueAttrNames << "*";<br />
String selectedAttribute = (String)JOptionPane.showInputDialog(<br />
null,<br />
"Choose the attribute to sum,\nyour selection will be saved \nin the current node in the attribute \"ATTRIBUTE_TO_SUM\" \nwhich you can change later or even specify more attributes to sum up\n by adding more attributes with the name \"ATTRIBUTE_TO_SUM\":\n\n(* is wildcard for all attributes)\n\n",<br />
"Need More Info",<br />
JOptionPane.PLAIN_MESSAGE,<br />
null,<br />
uniqueAttrNames.toArray(),<br />
null);<br />
if (selectedAttribute?.length()>0) {<br />
setAttributeValue(node, "ATTRIBUTE_TO_SUM", selectedAttribute, false);<br />
ATTRIBUTE_TO_SUM = [selectedAttribute];<br />
}<br />
} else {<br />
JOptionPane.showMessageDialog(null,<br />
"Found no attributes inside, starting from the current node.",<br />
"Error",<br />
JOptionPane.ERROR_MESSAGE);<br />
};<br />
};<br />
<br />
if (ATTRIBUTE_TO_SUM.size()>0) {<br />
collectUniqueAttributeNames(node, null, true).each() { anAttrName -><br />
if (anAttrName.startsWith(ATTRIBUTE_SUM_PREFIX) && !ATTRIBUTE_TO_SUM.contains(anAttrName)) {<br />
removeAttribute(node, anAttrName);<br />
};<br />
};<br />
ATTRIBUTE_TO_SUM.each() { anAttrToSum -><br />
if (anAttrToSum?.trim().length()>0) {<br />
ATTRIBUTE_TOTAL_NAME = ATTRIBUTE_SUM_PREFIX + anAttrToSum;<br />
def grandTotal = decimalFormat.format(countTotal(node, anAttrToSum, false));<br />
setAttributeValue(node, ATTRIBUTE_TOTAL_NAME, grandTotal, true);<br />
};<br />
};<br />
};<br />
<br />
/**<br />
* visits child nodes recursively and sums up values of found attributes<br />
* with name of "attributeToSum".<br />
*/<br />
def countTotal (MindMapNode targetNode, String attributeToSum, boolean andSetAttribute = false) {<br />
def total = 0;<br />
targetNode.childrenUnfolded().each() { aChildNode -><br />
total += countTotal(aChildNode, attributeToSum, true); /* recursive invocation */<br />
};<br />
/* currently total holds sum from all child nodes */<br />
if (andSetAttribute && total>0 && targetNode.hasChildren()) {<br />
total += countTotalForNode(targetNode, attributeToSum);<br />
setAttributeValue(targetNode, ATTRIBUTE_TOTAL_NAME, decimalFormat.format(total), true);<br />
} else {<br />
total += countTotalForNode(targetNode, attributeToSum);<br />
};<br />
total;<br />
};<br />
<br />
def countTotalForNode(MindMapNode targetNode, String attributeToSum) {<br />
def total = 0;<br />
def values = getAttributeValues(targetNode, attributeToSum);<br />
values.each() { val -><br />
if (val?.length()>0) {<br />
if (val.matches("[-+]?([0-9]*\\.[0-9]+|[0-9]+)")) {<br />
total += val.toDouble();<br />
} else if (attributeToSum != "*") {<br />
JOptionPane.showMessageDialog(null, "Invalid numeric value '"+val+"' for the node: \n\n\""+targetNode.getText()+"\"\n\nIgnored it."); <br />
};<br />
};<br />
};<br />
total;<br />
};<br />
<br />
def String getAttributeValue(MindMapNode targetNode, String attributeName) {<br />
def attribute = findAttribute(targetNode, attributeName);<br />
return attribute?.value;<br />
};<br />
<br />
def Attribute findAttribute(MindMapNode targetNode, String attributeName) {<br />
return targetNode.getAttributes()?.getAttributes()?.find() { anAttribute -><br />
anAttribute?.name == attributeName;<br />
}<br />
};<br />
<br />
def getAttributeValues(MindMapNode targetNode, String attributeName) {<br />
return targetNode.getAttributes()?.getAttributes()?.findAll() { anAttribute -><br />
(attributeName == "*" && !anAttribute?.name.startsWith(ATTRIBUTE_SUM_PREFIX)) || anAttribute?.name == attributeName;<br />
}.collect() { anAttribute -><br />
anAttribute?.value<br />
}<br />
};<br />
<br />
def int findAttributeIndex(MindMapNode targetNode, String attributeName) {<br />
def attrIndex = -1;<br />
targetNode.getAttributes().getAttributes().eachWithIndex() { anAttribute, index -><br />
if (anAttribute.name == attributeName) {<br />
attrIndex = index;<br />
return;<br />
};<br />
};<br />
return attrIndex;<br />
};<br />
<br />
<br />
def setAttributeValue(MindMapNode targetNode, String attrName, String attrValue, boolean firstOrLast) {<br />
def existingAttribute = findAttribute(targetNode, attrName);<br />
if (existingAttribute != null) {<br />
existingAttribute.setValue(attrValue);<br />
} else {<br />
if (targetNode.getAttributes()==null || targetNode.getAttributes().getRowCount()==0) {<br />
targetNode.createAttributeTableModel();<br />
};<br />
targetNode.getAttributes().insertRow(firstOrLast ? 0 : targetNode.getAttributes().getRowCount(), attrName, attrValue);<br />
};<br />
setOptimalColumnWidthsByFirstColumn(targetNode);<br />
};<br />
<br />
def void setOptimalColumnWidthsByFirstColumn(MindMapNode targetNode) {<br />
def NodeAttributeTableModel attributesModel = targetNode.getAttributes();<br />
if (attributesModel.getRowCount()==0) {<br />
return; <br />
};<br />
java.awt.Component comp = null;<br />
int cellWidth = 0;<br />
int maxCellWidth = 0;<br />
<br />
def AttributeView attrView = <br />
targetNode.getViewers().find() {it instanceof NodeView}?.getAttributeView();<br />
for (row in 0..attributesModel.getRowCount()-1) {<br />
def AttributeTable attrTable = attrView?.attributeTable;<br />
comp = attrTable?.dtcr?.getTableCellRendererComponent(<br />
attrView?.attributeTable, attributesModel.getValueAt(row, 0),<br />
false, false, row, 0);<br />
if (comp!=null) {<br />
cellWidth = comp.getPreferredSize().width;<br />
maxCellWidth = Math.max(cellWidth, maxCellWidth);<br />
}; <br />
};<br />
attributesModel.setColumnWidth(0, maxCellWidth>0 ? maxCellWidth + 1 : 100);<br />
};<br />
<br />
def void removeAttribute(MindMapNode startNode, String attrName) {<br />
def attrIndex = findAttributeIndex(startNode, attrName); <br />
if (attrIndex>-1) {<br />
startNode.getAttributes().removeRow(attrIndex); <br />
};<br />
startNode.childrenUnfolded().each() { aChildNode -><br />
removeAttribute(aChildNode, attrName); /* recursive invocation */<br />
};<br />
};<br />
<br />
def Set collectUniqueAttributeNames(MindMapNode startNode, Set result, boolean includeAttrsWithSum) {<br />
result = result!=null ? result : new LinkedHashSet();<br />
startNode.getAttributeKeyList().each() {<br />
if (it.length()>0 && it!="script" && (includeAttrsWithSum || !it.startsWith(ATTRIBUTE_SUM_PREFIX))) {<br />
result.add(it);<br />
};<br />
};<br />
startNode.childrenUnfolded().each() { aChildNode -><br />
collectUniqueAttributeNames(aChildNode, result, includeAttrsWithSum); /* recursive invocation */<br />
};<br />
return result;<br />
};<br />
<br />
</groovy><br />
--[[User:Dmitry2008|Dmitry2008]] 12:58, 5 Jan 2008 (PST)<br />
== Output A Map to CSV ==<br />
I use Freemind for estimating sometimes and when I do I want to export to a spreadsheet for inclusion in a larger project plan. The following script creates CSV output from a FreeMind map. Nodes without children are output at node depth 7 (magic number) so that the estimates column lines up (of course I could have put the estimates in attributes but I didn't).<br />
<groovy><br />
def process(thisNode, childPosition) {<br />
def nodeName = thisNode.toString()<br />
if (!thisNode.children) {<br />
print("," * (7 - thisNode.nodeLevel))<br />
}<br />
if (childPosition != 1) {<br />
print "," * thisNode.nodeLevel + nodeName<br />
} else {<br />
print "," + nodeName<br />
}<br />
def i = 0<br />
if (thisNode.children) {<br />
thisNode.children.each {<br />
i++<br />
process(it, i)<br />
}<br />
} else {<br />
println()<br />
}<br />
}<br />
<br />
process(node, 0) <br />
</groovy><br />
<br />
== Demo video on debugging Groovy for FreeMind ==<br />
<br />
This demo video shows how to do the following things:<br />
* reference a file containing Groovy script from within FreeMind<br />
* pull FreeMind into a debugger<br />
* set a break point and step through the Groovy you're debugging<br />
<br />
This also gives all the advantages of creating FreeMind Groovy in an environment with:<br />
* Groovy text highlighting<br />
* code completion<br />
* debugging<br />
* Groovy analysis<br />
* all of [http://www.jetbrains.com/idea/features/groovy_grails.html|IDEA's other great Groovy features]<br />
<br />
Here is the video: [http://www.artemissoftware.biz/videos/freemindGroovyDebugging2.mov|Debugging Groovy for FreeMind inside IDEA]</div>Bpatters7https://freemind.sourceforge.io/wiki/index.php?title=User-contributed_example_scripts&diff=6856User-contributed example scripts2008-05-23T23:49:29Z<p>Bpatters7: adding demo video of debugging Groovy for FreeMind enhancement</p>
<hr />
<div>== Code Examples from the author ==<br />
Dear FreeMind users, <br />
<br />
in [http://freemind.cvs.sourceforge.net/freemind/admin/docs/features/0_9_0/Features%200.9.0.mm?view=log&pathrev=MAIN Features 0.9.0] you'll find a mindmap with the upcoming features for 0.9.0. Included, there is a section about scripts and some very useful scripts, that are recommended to be read first.<br />
<br />
== A node with the current time ==<br />
If you need a node that shows the last saving time, just add the following script and start it<br />
once each time, you are opening the map for editing.<br />
<br />
<groovy><br />
import freemind.modes.MindMapNode;<br />
import freemind.modes.mindmapmode.MindMapController;<br />
import java.util.Timer;<br />
<br />
class DateTimer extends java.util.TimerTask {<br />
MindMapNode mNode;<br />
MindMapController mC;<br />
DateTimer(node, c) {<br />
mNode = node;<br />
mC = c;<br />
}<br />
<br />
void run() {<br />
mNode.setText("Save Time: " + new java.util.Date());<br />
mC.nodeRefresh(mNode);<br />
} <br />
}<br />
<br />
t = new Timer();<br />
t.schedule(new DateTimer(node, c),2000,2000);<br />
</groovy><br />
<br />
'''WARNING! I have now played with Groovy for 30 minutes and I am unsure of the side effects to FreeMind of using these examples, as they modify children of a node. - Dave Torok'''<br />
<br />
== Prepend the modified date at the beginning of the node text == <br />
This is an example of using some more Node methods.<br />
<br />
<groovy>=(new java.text.SimpleDateFormat("M/d/yyyy")).format(node.getHistoryInformation().getLastModifiedAt()) <br />
+ " " + node.getText()</groovy><br />
<br />
== Add up all subnodes and set them into the first row, second column. ==<br />
<br />
Copy the script into subnodes if you want go more than one level. As far as I can tell you can't grab the values by attribute name, just by row / column, but I didn't spend forever looking over the source.. (Maybe someone could push some javadoc?)<br />
<br />
<br />
<groovy><br />
def i = node.childrenUnfolded(); def total=0; <br />
while (i.hasNext()) { d = i.next(); def val=d.getAttributes().getValueAt(0,1); <br />
if (val!=null) total=total+java.lang.Integer.parseInt(val); }; <br />
node.getAttributes().setValueAt(total, 0,1);</groovy><br />
<br />
The above code has a problem that it will let leaf node and its parent nodes with the script to yield 0 value. The following code would work recursively. <br />
<br />
<groovy><br />
if (!node.isLeaf()) {def i = node.childrenUnfolded(); def total=0; <br />
while (i.hasNext()) { d = i.next(); def val=d.getAttributes().getValueAt(0,1); <br />
if (val!=null) total=total+java.lang.Integer.parseInt(val); }; <br />
node.getAttributes().setValueAt(total, 0,1);};</groovy><br />
<br />
--[[User:Yubrshen|yushen]] 15:35, 15 Jan 2007 (PST)<br />
----<br />
<br />
<br />
== Set the color for all children ==<br />
This is an example of iteration over child nodes. Also, a call to c.nodeStructureChanged(node) is necessary to force a refresh to paint the new color.<br />
<br />
<groovy><br />
def i = node.childrenUnfolded(); <br />
while (i.hasNext()) { d = i.next(); d.setColor(java.awt.Color.BLUE); }; <br />
c.nodeStructureChanged();</groovy><br />
== Swap two CHILD nodes ==<br />
This works. My goal is to get a foundation for a SORT script, to sort children by alphabet, by created date, etc. until the functionality is added to the software. WARNING WARNING WARNING this is just an example to swap the 2nd and 4th child nodes.'''<br />
<br />
<groovy>def swap (a,b) {<br />
na = node.getChildAt(a);<br />
nb = node.getChildAt(b);<br />
node.remove(a); <br />
node.remove(b - 1); <br />
node.insert(nb,a);<br />
node.insert(na,b);<br />
c.nodeStructureChanged(node);<br />
};<br />
<br />
swap(1,3);</groovy><br />
<br />
== Add/Replace today ==<br />
<br />
<groovy><br />
=nt=node.toString(); pos=nt.indexOf(" / "); <br />
return ((pos>=0)?nt.substring(0,pos):nt) + " / " <br />
+ (new java.text.SimpleDateFormat("yyyy-M-d")).format(new Date())<br />
</groovy><br />
<br />
== Set up a logger ==<br />
<br />
The following code, set up at the beginning of your script, will set up a logger that you can use to follow the progress of your script while you are working on it. You can find details on how to use the Java Logger at http://java.sun.com/javase/6/docs/api/<br />
<br />
Be sure to read section 1.8 on how to set up your configuration file. If you don't get anything out of the logger, that's one of the likely sources of trouble.<br />
<br />
<groovy><br />
def logger = c.getFrame().getLogger(this.getClass().getName());<br />
logger.info(" ******* Logger set up for script");<br />
</groovy><br />
<br />
<br />
== Export to bibtex ==<br />
This is an attempt to make a script that takes a mindmap formatted in a certain way and produces a bibtex file out of each node (each node has the correct fields to be parsed as a bibtex entry). <br />
I have a problem, the script exits from the main switch(attr['Type']), after calling any print*() function. The function is executed, the file first entry is written but after the call I have a "java.lang.NullPointerException: Cannot invoke method call() on null object" error.<br />
I'm a groovy programmer with 5hours experience, so I might be missing something easy. Can somebody help to make this script work? [http://freemind.sourceforge.net/wiki/images/1/1d/IEEEBibliography.mm here] you can find a suitable mm file.<br />
<br />
<groovy><br />
import freemind.modes.MindMapNode; <br />
<br />
def attrMap = { node, f -> <br />
def attrs = [:];<br />
for(i in 0..<node.getAttributes().getRowCount()) {<br />
attrs[node.getAttributes().getName(i)] = node.getAttributes().getValue(i);<br />
};<br />
return attrs;<br />
};<br />
<br />
def printConference (f, attr, index){<br />
f << "@InProceedings{ ${index.toString()},\n";<br />
attr.each{<br />
f << "switch";<br />
if(it.key != null){<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Conference': f << "booktitle = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
}<br />
f << '}\n';<br />
};<br />
<br />
def printJournal (f, attr, index) {<br />
f << "@Article{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Journal': f << "journal = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
};<br />
<br />
def printStandard (f, attr, index){<br />
f << "@STANDARD{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'Title': f << "title = \"${it.value}\",\n";<br />
break<br />
case 'Institution': f << "institution = \"${it.value}\",\n";<br />
break<br />
case 'Year': f << "year = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
<br />
};<br />
def printWeblink (f, attr, index) {<br />
f << "@online{ ${index.toString()},\n";<br />
attr.each{<br />
switch(it.key){<br />
case 'Authors': f << "author = \"${it.value}\",\n";<br />
break<br />
case 'URL': f << "URL = \"${it.value}\",\n";<br />
break<br />
default:<br />
break<br />
} <br />
}<br />
<br />
f << '}\n';<br />
};<br />
<br />
<br />
def allChildren (node, f) {<br />
def kids = [];<br />
def stack = new Stack();<br />
stack.push(node.childrenUnfolded());<br />
while(!stack.isEmpty()) {<br />
nodes = stack.pop();<br />
while(nodes.hasNext()) {<br />
k = nodes.next();<br />
kids.add(k);<br />
stack.push(k.childrenUnfolded());<br />
};<br />
};<br />
kids.each{<br />
};<br />
return kids;<br />
};<br />
<br />
<br />
<br />
f = new File("/tmp/File.txt");<br />
f.delete();<br />
index = 1;<br />
<br />
<br />
<br />
allChildren(node, f).each { kid -><br />
attr = attrMap(kid, f);<br />
switch(attr['Type']){<br />
case 'Journalpaper': <br />
printJournal(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Standard':<br />
printStandard(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Weblink':<br />
printWeblink(f, attr, index);<br />
index = index + 1;<br />
break<br />
case 'Confpaper': <br />
printConference(f, attr, index);<br />
index = index + 1;<br />
break<br />
default: <br />
break<br />
}<br />
}<br />
<br />
<br />
</groovy><br />
<br />
== Sum up all subnodes recursively for a specific attribute(s) or all found attributes==<br />
<br />
A useful script which sums up values of a specified attribute(s) and performs this recursively propagating<br />
summed values over node structure.<br><br />
All that you need - just assign this source to the attribute named 'script' for a high-level node containing<br />
subnodes with numeric attribute(s), press Alt-F8 and follow onscreen instructions on the popup dialog.<br><br />
the script also supports calculation over several attributes or<br />
all found attributes containing numeric values (use wildcard *).<br><br />
If there are attributes with the same name within a node - this is handled properly.<br><br />
<br><br />
'''Important''': this script adds (and removes) new attributes with prefix "Σ" (Greek letter Sigma) which contain<br />
summed values of corresponding nodes and all their subnodes.<br><br />
So if you also use attributes with names those start from<br />
the letter Sigma, you should change the value of ATTRIBUTE_SUM_PREFIX variable within the script.<br><br />
<groovy><br />
<br />
/* sum Attributes */<br />
/**<br />
* a useful script which sums up values of a specified attribute(s) and performs this recursively propagating<br />
* summed values over node structure.<br />
* all that you need - just assign this source to the attribute named 'script' for a high-level node containing<br />
* subnodes with numeric attribute(s), press Alt-F8 and follow onscreen instructions on the popup dialog.<br />
* the script also supports calculation over several attributes or <br />
* all found attributes containing numeric values (use wildcard *).<br />
* if there are attributes with the same name within a node - this is handled properly.<br />
*<br />
* Important: this script adds (and removes) new attributes with prefix "\u03a3 " (Greek letter Sigma) which contains<br />
* summed values to corresponding nodes so if you also use attributes with names those start from<br />
* the sigma letter you should change the value of ATTRIBUTE_SUM_PREFIX below.<br />
* <br />
* @author Dmitry Romanov<br />
* coded with help of Groovy Eclipse plugin<br />
*/<br />
import freemind.modes.*;<br />
import freemind.modes.attributes.*;<br />
import freemind.view.mindmapview.attributeview.*;<br />
import freemind.view.mindmapview.*;<br />
import javax.swing.JOptionPane;<br />
/* def node = (MindMapNode) node; */<br />
<br />
ATTRIBUTE_SUM_PREFIX = "\u03a3 ";<br />
<br />
/* prepare decimal format object: */<br />
decimalFormat = java.text.NumberFormat.getNumberInstance();<br />
decimalFormat.setMinimumFractionDigits(0);<br />
def dfs = decimalFormat.getDecimalFormatSymbols();<br />
dfs.setDecimalSeparator((char)'.');<br />
decimalFormat.setDecimalFormatSymbols(dfs);<br />
<br />
def ATTRIBUTE_TO_SUM = getAttributeValues(node, "ATTRIBUTE_TO_SUM");<br />
<br />
if (ATTRIBUTE_TO_SUM.size()==0) {<br />
def uniqueAttrNames = collectUniqueAttributeNames(node, null, false);<br />
if (uniqueAttrNames.size()>0) {<br />
uniqueAttrNames << "*";<br />
String selectedAttribute = (String)JOptionPane.showInputDialog(<br />
null,<br />
"Choose the attribute to sum,\nyour selection will be saved \nin the current node in the attribute \"ATTRIBUTE_TO_SUM\" \nwhich you can change later or even specify more attributes to sum up\n by adding more attributes with the name \"ATTRIBUTE_TO_SUM\":\n\n(* is wildcard for all attributes)\n\n",<br />
"Need More Info",<br />
JOptionPane.PLAIN_MESSAGE,<br />
null,<br />
uniqueAttrNames.toArray(),<br />
null);<br />
if (selectedAttribute?.length()>0) {<br />
setAttributeValue(node, "ATTRIBUTE_TO_SUM", selectedAttribute, false);<br />
ATTRIBUTE_TO_SUM = [selectedAttribute];<br />
}<br />
} else {<br />
JOptionPane.showMessageDialog(null,<br />
"Found no attributes inside, starting from the current node.",<br />
"Error",<br />
JOptionPane.ERROR_MESSAGE);<br />
};<br />
};<br />
<br />
if (ATTRIBUTE_TO_SUM.size()>0) {<br />
collectUniqueAttributeNames(node, null, true).each() { anAttrName -><br />
if (anAttrName.startsWith(ATTRIBUTE_SUM_PREFIX) && !ATTRIBUTE_TO_SUM.contains(anAttrName)) {<br />
removeAttribute(node, anAttrName);<br />
};<br />
};<br />
ATTRIBUTE_TO_SUM.each() { anAttrToSum -><br />
if (anAttrToSum?.trim().length()>0) {<br />
ATTRIBUTE_TOTAL_NAME = ATTRIBUTE_SUM_PREFIX + anAttrToSum;<br />
def grandTotal = decimalFormat.format(countTotal(node, anAttrToSum, false));<br />
setAttributeValue(node, ATTRIBUTE_TOTAL_NAME, grandTotal, true);<br />
};<br />
};<br />
};<br />
<br />
/**<br />
* visits child nodes recursively and sums up values of found attributes<br />
* with name of "attributeToSum".<br />
*/<br />
def countTotal (MindMapNode targetNode, String attributeToSum, boolean andSetAttribute = false) {<br />
def total = 0;<br />
targetNode.childrenUnfolded().each() { aChildNode -><br />
total += countTotal(aChildNode, attributeToSum, true); /* recursive invocation */<br />
};<br />
/* currently total holds sum from all child nodes */<br />
if (andSetAttribute && total>0 && targetNode.hasChildren()) {<br />
total += countTotalForNode(targetNode, attributeToSum);<br />
setAttributeValue(targetNode, ATTRIBUTE_TOTAL_NAME, decimalFormat.format(total), true);<br />
} else {<br />
total += countTotalForNode(targetNode, attributeToSum);<br />
};<br />
total;<br />
};<br />
<br />
def countTotalForNode(MindMapNode targetNode, String attributeToSum) {<br />
def total = 0;<br />
def values = getAttributeValues(targetNode, attributeToSum);<br />
values.each() { val -><br />
if (val?.length()>0) {<br />
if (val.matches("[-+]?([0-9]*\\.[0-9]+|[0-9]+)")) {<br />
total += val.toDouble();<br />
} else if (attributeToSum != "*") {<br />
JOptionPane.showMessageDialog(null, "Invalid numeric value '"+val+"' for the node: \n\n\""+targetNode.getText()+"\"\n\nIgnored it."); <br />
};<br />
};<br />
};<br />
total;<br />
};<br />
<br />
def String getAttributeValue(MindMapNode targetNode, String attributeName) {<br />
def attribute = findAttribute(targetNode, attributeName);<br />
return attribute?.value;<br />
};<br />
<br />
def Attribute findAttribute(MindMapNode targetNode, String attributeName) {<br />
return targetNode.getAttributes()?.getAttributes()?.find() { anAttribute -><br />
anAttribute?.name == attributeName;<br />
}<br />
};<br />
<br />
def getAttributeValues(MindMapNode targetNode, String attributeName) {<br />
return targetNode.getAttributes()?.getAttributes()?.findAll() { anAttribute -><br />
(attributeName == "*" && !anAttribute?.name.startsWith(ATTRIBUTE_SUM_PREFIX)) || anAttribute?.name == attributeName;<br />
}.collect() { anAttribute -><br />
anAttribute?.value<br />
}<br />
};<br />
<br />
def int findAttributeIndex(MindMapNode targetNode, String attributeName) {<br />
def attrIndex = -1;<br />
targetNode.getAttributes().getAttributes().eachWithIndex() { anAttribute, index -><br />
if (anAttribute.name == attributeName) {<br />
attrIndex = index;<br />
return;<br />
};<br />
};<br />
return attrIndex;<br />
};<br />
<br />
<br />
def setAttributeValue(MindMapNode targetNode, String attrName, String attrValue, boolean firstOrLast) {<br />
def existingAttribute = findAttribute(targetNode, attrName);<br />
if (existingAttribute != null) {<br />
existingAttribute.setValue(attrValue);<br />
} else {<br />
if (targetNode.getAttributes()==null || targetNode.getAttributes().getRowCount()==0) {<br />
targetNode.createAttributeTableModel();<br />
};<br />
targetNode.getAttributes().insertRow(firstOrLast ? 0 : targetNode.getAttributes().getRowCount(), attrName, attrValue);<br />
};<br />
setOptimalColumnWidthsByFirstColumn(targetNode);<br />
};<br />
<br />
def void setOptimalColumnWidthsByFirstColumn(MindMapNode targetNode) {<br />
def NodeAttributeTableModel attributesModel = targetNode.getAttributes();<br />
if (attributesModel.getRowCount()==0) {<br />
return; <br />
};<br />
java.awt.Component comp = null;<br />
int cellWidth = 0;<br />
int maxCellWidth = 0;<br />
<br />
def AttributeView attrView = <br />
targetNode.getViewers().find() {it instanceof NodeView}?.getAttributeView();<br />
for (row in 0..attributesModel.getRowCount()-1) {<br />
def AttributeTable attrTable = attrView?.attributeTable;<br />
comp = attrTable?.dtcr?.getTableCellRendererComponent(<br />
attrView?.attributeTable, attributesModel.getValueAt(row, 0),<br />
false, false, row, 0);<br />
if (comp!=null) {<br />
cellWidth = comp.getPreferredSize().width;<br />
maxCellWidth = Math.max(cellWidth, maxCellWidth);<br />
}; <br />
};<br />
attributesModel.setColumnWidth(0, maxCellWidth>0 ? maxCellWidth + 1 : 100);<br />
};<br />
<br />
def void removeAttribute(MindMapNode startNode, String attrName) {<br />
def attrIndex = findAttributeIndex(startNode, attrName); <br />
if (attrIndex>-1) {<br />
startNode.getAttributes().removeRow(attrIndex); <br />
};<br />
startNode.childrenUnfolded().each() { aChildNode -><br />
removeAttribute(aChildNode, attrName); /* recursive invocation */<br />
};<br />
};<br />
<br />
def Set collectUniqueAttributeNames(MindMapNode startNode, Set result, boolean includeAttrsWithSum) {<br />
result = result!=null ? result : new LinkedHashSet();<br />
startNode.getAttributeKeyList().each() {<br />
if (it.length()>0 && it!="script" && (includeAttrsWithSum || !it.startsWith(ATTRIBUTE_SUM_PREFIX))) {<br />
result.add(it);<br />
};<br />
};<br />
startNode.childrenUnfolded().each() { aChildNode -><br />
collectUniqueAttributeNames(aChildNode, result, includeAttrsWithSum); /* recursive invocation */<br />
};<br />
return result;<br />
};<br />
<br />
</groovy><br />
--[[User:Dmitry2008|Dmitry2008]] 12:58, 5 Jan 2008 (PST)<br />
== Output A Map to CSV ==<br />
I use Freemind for estimating sometimes and when I do I want to export to a spreadsheet for inclusion in a larger project plan. The following script creates CSV output from a FreeMind map. Nodes without children are output at node depth 7 (magic number) so that the estimates column lines up (of course I could have put the estimates in attributes but I didn't).<br />
<groovy><br />
def process(thisNode, childPosition) {<br />
def nodeName = thisNode.toString()<br />
if (!thisNode.children) {<br />
print("," * (7 - thisNode.nodeLevel))<br />
}<br />
if (childPosition != 1) {<br />
print "," * thisNode.nodeLevel + nodeName<br />
} else {<br />
print "," + nodeName<br />
}<br />
def i = 0<br />
if (thisNode.children) {<br />
thisNode.children.each {<br />
i++<br />
process(it, i)<br />
}<br />
} else {<br />
println()<br />
}<br />
}<br />
<br />
process(node, 0) <br />
</groovy><br />
<br />
== Demo video on debugging Groovy for FreeMind ==<br />
<br />
This demo video shows how to do the following things:<br />
* reference a file containing Groovy script from within FreeMind<br />
* pull FreeMind into a debugger<br />
* set a break point and step through the Groovy you're debugging<br />
<br />
This also gives all the advantages of creating FreeMind Groovy in an environment with:<br />
* Groovy text highlighting<br />
* code completion<br />
* debugging<br />
* Groovy analysis<br />
* all of [http://www.jetbrains.com/idea/features/groovy_grails.html|IDEA's other great Groovy features]<br />
<br />
Here is the video: [http://www.artemissoftware.biz/videos/freemindGroovyDebugging.mov|Debugging Groovy for FreeMind inside IDEA]</div>Bpatters7https://freemind.sourceforge.io/wiki/index.php?title=Asked_questions&diff=5770Asked questions2007-09-26T17:03:54Z<p>Bpatters7: /* FreeMind on Mac OS X */</p>
<hr />
<div><table><tr><br />
<td valign=top><br />
{{Navigation_bar}}<br />
<td>&nbsp;<br />
<td width=600><br />
<br />
Here we collect a list of asked questions and answers related to free mind mapping software FreeMind. Help if you can (see [[#To edit this FAQ|To edit this FAQ]]). If you're searching for an answer to your question, why don't you just press Ctrl + F in your browser?<br />
<br />
== Installation ==<br />
<br />
=== How do I download the Java Runtime Environment needed to run FreeMind. ===<br />
To download JRE for Windows, go to [http://java.sun.com/j2se/1.4.2/download.html Download on Sun],<br />
go to the section '''Download J2SE v 1.4. ...'''<br />
and now choose the column [http://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=22&amp;PartDetailId=j2re-1.4.2_03-oth-JPR&amp;SiteId=JSC&amp;TransactionId=noreg JRE], ''not SDK''. The installation file of JRE has approximately 15 MB.<br />
<br />
=== I start FreeMind but nothing happens ===<br />
First of all, we assume that you are working under Windows. Now, please start freemind.bat in the installation directory.<br />
You'll probably get:<br />
<br />
Exception in thread "main" java.lang.NoClassDefFoundError: java/util/logging/Logger <br />
<br />
at freemind.main.FreeMind.getLogger(FreeMind.java:643) <br />
at freemind.main.FreeMind.<init>(FreeMind.java:109) <br />
at freemind.main.FreeMind.main(FreeMind.java:647) <br />
<br />
The answer to this behaviour is that you've got Java1.3 or lower installed, and this version of java is found (try java -version on the commandline to verify this). <br />
Most likely, you've installed Oracle. <br />
Change JAVA_HOME and the PATH variables to point to your actual java (1.4 or 5.0). <br />
This can be done as follows: Goto Settings -> System -> search for Environment Variables and change or create the values accordingly.<br />
<br />
Another Reason Freemind won't start or will give you the effect of having the icon in the Windows taskbar but nothing else is when you install Freemind in a folder which start with a "!" (exclamation mark), just install it in a different folder. (see http://www.cogmios.nl/java-apps-like-eclipse-or-freemind-do-not-run-in-folders-starting-with-a-20070407.html<br />
)<br />
<br />
=== FreeMind cannot detect new version of Java. What can I do? ===<br />
Let us assume that you have installed a new<br />
version of Java, and still, FreeMind complains about having old version of Java. This may occur especially<br />
if you installed ''SDK'' rather than ''JRE''. ''SDK'' stands for ''standard development kit'' and contains much more<br />
than you need to run FreeMind; you only need runtime environment. It is important that the new version of<br />
java is in your ''path''. To check it out on Microsoft Windows, run command ``cmd" using Windows-key + R,<br />
followed by ``java -version". You should get something like<br />
<br />
java version "1.4.2_03"<br />
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)<br />
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)<br />
<br />
where the particular version number is not important as long as it is at least 1.4.0.<br />
<br />
Additionally, it may be helpful to start '''freemind.bat''' and see what messages come.<br />
<br />
'''NOTE:''' If you have an Oracle database product installed on your computer, check the Oracle Installer to see what version of Java was installed with the database. Versions of Oracle 8, 8i, and later install JRE 1.3.1 and modify the startup path for Windows to ensure the database can start using this JRE. This installation WILL cause FreeMind to report the older version of Java, even if you install the new version (the .ini file for Oracle points Windows to the JRE 1.3.1 directory, places that in memory, and causes the fault). You can modify the .ini file to point Oracle to the newer JRE. <br />
<br />
If you don't want to change the Oracle settings: just create a batch file in the FreeMind folder with the following entry "Path-to-your-new-java-runtimes-bin/java.exe -jar lib/freemind.jar" and use that to start freemind.<br />
<br />
=== Which Java virtual machines does FreeMind actually work with? ===<br />
<br />
FreeMind works with the virtual machines from Sun, from the version 1.4.0 and higher. FreeMind has been reported to run on the JDK 1.4.2 from Blackdown. FreeMind also works on Linux with Sun Microsystems 64bit JDK version 1.5.0.<br />
<br />
There is a known issue with official release 0.8.0 of Freemind and Java 6. Encrypted nodes will wipe out your map when trying to save it to disk. Stick to Java 5 (alias 1.5.x) [https://sourceforge.net/tracker/?func=detail&atid=107118&aid=1550792&group_id=7118 (see bug report)]<br />
<br />
=== What is a mirror? ===<br />
A mirror is one of the SourceForge sites from which you can download FreeMind. To download FreeMind, choose ''any'' mirror; you would prefer a mirror geographically closer to the place where you live. If you experience problems with one mirror, try another.<br />
<br />
=== I run 'freemind.bat' and get an error message ===<br />
If you get <br />
Exception in thraed "main" java.lang.NoClassDefFoundError: java/util/logging/Logger <br />
at freemind.main.FreeMind.getLogger<FreeMind.java:643>at<br />
freemind.main.FreeMind.<init<FreeMind.java:109> <br />
at freemind.main.FreeMind.main<FreeMind.java:647> <br />
then the Java Virtual Machine found on your system is of version 1.3 or below. Try <br />
java -version<br />
to verify this. This happens, when you install Oracle for instance. Please, make sure, that your latest Java Virtual Machine is found when you type "java -version" by deinstalling java1.3 for example.<br />
<br />
=== USB Portable FreeMind ===<br />
Just add the following Java option in the freemind.bat or freemind.sh and everything is contained on the USB stick:<br />
<br />
-Duser.home=.[\<subdirectory, if needed>]<br />
<br />
As an example see the new content of my BAT-file, which looks like:<br />
<br />
@echo off<br />
java -Duser.home=. -cp lib\freemind.jar;lib\commons-lang-2.0.jar;lib\forms-1.0.5.jar;lib\jibx\jibx-run.jar;lib\jibx\xpp3.jar;lib\bindings.jar freemind.main.FreeMindStarter<br />
<br />
This lets FM create and use the subfolder .freemind in the location of the freemind.bat.<br />
<br />
As we know, USB flash drives support only limited number of writes. It means that reliability of such device drops down as time advances. Freemind, by default, saves your open maps every minute to .freemind dir which is in this case on the flash drive. If you aren't too paranoid you can avoid this by setting autosave dir to tmp dir of your OS. Freemind will automatically delete autosaves on exit so your precious data won't be left on a host machine. Go to Tools->Preferences->Path to automatic saves and set it to 'default'. Freemind will understand this on Windows probably as c:\windows\temp, Linux - /tmp or /var/tmp.<br />
<br />
That's it and enjoy!<br />
<br />
== Using ==<br />
<br />
=== To add a new concept ===<br />
<br />
A new concept is referred to as a "node." Use the "Insert" key on PCs to add a new node. MAC users need to [[Asked Questions#To_set_a_different_key_for_new_child_node_on_Mac_computers | set a different key]]. Nodes are not limited to just concepts. They can also include sentences, paragraphs or even short articles.<br />
<br />
=== Is there an undo feature in FreeMind? ===<br />
Starting with FreeMind 0.8, there is an undo and redo feature.<br />
<br />
If you are using 0.7, then use the following tips to prevent data loss:<br />
<br />
* Use FreeMind's autosave-feature <br />
: This feature is enabled by default... auto saved files will be found in ~/.freemind/<br />
<br />
* Install a clipboard manager, which will make all elements, which you cut from FreeMind, available in its history. A freeware example of a clipboard manager for MS Windows is [http://www.yankee-clipper.net Yankee Clipper].<br />
<br />
=== How much memory do I need? === ''Keywords: RAM.''<br />
Experience shows that 64 MB is not sufficient, while 128 MB is already enough, provided that you do not run another Java application. Correct me if I'm wrong. I am using FreeMind on Windows 95 + 128 MB without any problems.<br />
<br />
Running FreeMind 0.8RC5 on Windows 95 with 64 MB and Java 1.4.0 is possible and the response time ''is'' in acceptable limits. -- [[User:Stefano|Stefano]] 02:01, 11 Jul 2005 (PDT)<br />
<br />
Running FreeMind 0.7.1 on Debian Linux and Java 1.4.2.03 (j2sdk1.4) with my Omnibook 800 laptop (78 MB RAM, P166) just fine. I haven't tried any big projects with it yet, but so far it's very responsive. --[[User:Nullman|Kyle]] 09:14, 30 Jan 2006 (PST)<br />
<br />
=== To move a node to the other side of root ===<br />
Drag the node onto root and you see one half of root getting gray. Move the node to the other half and <br />
this half gets gray. Just drop the node on the side you want to have it.<br />
As of version 0.9.0 you can also use Strg+left and Strg+right to move a node in the desired direction (not only to change the side with respect to root, try it out).<br />
<br />
=== To create a graphical link ===<br />
<br />
# Go to the source node. <br />
# Mark it with the mouse. <br />
# Press the left mouse button. <br />
# Hold this button. <br />
# Press Ctrl+Shift buttons. <br />
# Continue to hold all these buttons. <br />
# Go to the destination node. <br />
# Release the mouse button, first. <br />
# Then release the keyboard buttons. <br />
<br />
You have your link. Alternatively, drag'n drop holding right mouse button.<br />
<br />
=== To remove a graphical link ===<br />
<br />
# Right-Click on the curved arrow of the graphical link (Mac users, press Control and click to see the options menu)<br />
# Choose "Remove Arrow Link" from the pop-up menu<br />
<br />
(Left-clicking on a graphical link does nothing)<br />
<br />
=== To add user icons to FreeMind ===<br />
Currently, adding user [http://www.guiicons.com Icons] is not possible.<br />
BUT you can add an inline images to any node. Use the following code example:<br />
<nowiki><html><img src="http://www.stumbleupon.com/pics/me.jpg"></nowiki><br />
in a FreeMind node. This should also work with local files using "file://" instead of "http://".<br />
<br />
=== To open links in only one browser window, rather than several. ===<br />
To our knowledge this is not possible at the moment.<br />
<br />
'''Firefox''' allows this option. ''From the menu, select''<br />
1) Tools > '''Options''' > <br />
2) Click '''Advanced'''<br />
3) Toggle Tabbed Browsing<br />
4) Select to open links from other apps in<br />
...a new tab in the most recent window.<br />
<br />
<br />
'''A possible Work Around:''' There is a way to do this if you use the [http://www.mozilla.org/products/firefox/ Firefox browser] instead of Internet Explorer, provided you<br />
install the Firefox extension called ''Single Window'' (available from [http://update.mozilla.org/extensions/showlist.php?category=Tabbed%20Browsing here]). Using this extension, every time you click on an external web link on a mind map, it will open the relevant page in a new tab in an existing Firefox window, rather than a new browser window. I have found this to be a much easier way to navigate the pages opened. I have only tried this with mm files opened from the file system at the moment (ie not served from a web server in the browser applet).<br />
<br />
To '''open external web links in a new tabs''' in Firefox follow [http://texturizer.net/firefox/tips.html#beh_reuse this tip] (works both for Linux and Windows). You have to add a line in your user.js file and install [http://piro.sakura.ne.jp/xul/_tabextensions.html.en Tabbrowser extensions].<br />
<br />
=== Is it difficult to provide FreeMind with Java Webstart?=== Well, it's not that easy. Joerg Mueller succeeded in doing just that and has sent his source code to Daniel Polansky, who did not succeed in getting it running; he did not consider that a high priority. What is important is that Microsoft Windows users have a convenient installer, and the users of the other operating systems are already used to not so convenient methods; the installation is pretty straightforward anyway.<br />
<br />
=== To create PDF out of FreeMind's mind map ===<br />
To create pdf out of FreeMind's mind map, you've got several<br />
options.<br />
<br />
* Use File/Export/As PDF...<br />
<br />
* Create DocBook, then pdf. Use [http://hkrott.iicm.edu/docs/seminar/sem2002_mindmaps.tar.gz XSLT transformations sheets] from Christoph Rissner to convert FreeMind's mind map to Mind Manager's mind map, then to DocBook, and create pdf from that DocBook. You can read more on that on [http://hkrott.iicm.edu/veranstaltungen/seminar/abgeschlossen.html Abgeschlossene Arbeiten] &gt; Mind Maps.<br />
<br />
* Print to pdf using a pdf printer driver.<br />
** Use open source [http://sector7g.wurzel6.de/pdfcreator/index_en.htm PDFCreator]. It uses Ghostscript as its backend.<br />
<br />
* Print to pdf using Acrobat's Distiller. Provided that you have full version of Adobe Acrobat installed (not just reader), you can print to a pdf using the Distiller or Writer options in your printer list. Make sure you check the "fit to one page" option under File > Page Setup. Also, make sure you set antialias to all under edit > preferences. This will make it look crisper. The only downside to this option is that it doesn't do the icons very well.<br />
<br />
* First print to postscript, then convert to pdf.<br />
** In Linux, create postscript by printing to a file using a postscript printer, and convert the postscript file to pdf afterwards, by using the shell-command ps2pdf or using [http://www.cs.wisc.edu/~ghost/ Ghostscript].<br />
** In Windows, install any postscript color printer (Like AppleColor 600) to print to a file. When printing to that printer, choose a folder and a file that ends with .ps. Then, open that *.ps with [http://www.cs.wisc.edu/~ghost/gsview/index.htm gsview] and choose ''File/Convert to PDF'' (let the program choose it all). Then save the file with the same name, but ending with .pdf. That's all. You might need to read the help files to tune it all up (only once).<br />
<br />
* Export FreeMind's mind map to HTML, paste it into Microsoft Word, format it as you see fit, and convert it to pdf using the techniques decribed above.<br />
<br />
=== To convert mind maps between FreeMind and MindManager ===<br />
Click here: [[Import and export to other applications]]<br />
<br />
=== Who is the development team of FreeMind? ===<br />
<br />
Daniel Polansky: the director of FreeMind is Daniel Polansky, i.e. me. The<br />
label ``director" is not quite appropriate; ``parliament"<br />
would be better. I test new versions, give advice, sometimes<br />
act in the name of FreeMind, forbid versions to be released<br />
because of insufficient quality, and approve them when<br />
they're ready. Also, I set up barriers for new directions.<br />
<br />
The main actor on the scene is Christian Foltin. We use<br />
the label ``code master" to denote his role, and also<br />
``manager". He does most of the work and decides which<br />
code changes are acceptable what concerns the<br />
quality of code. He takes care of mergers. Also, he<br />
coordinates the developers.<br />
<br />
An important developer is Dimitri Polivaev.<br />
<br />
=== To have brainstorm-like mode similar to one found in MindManager.===<br />
Did you notice you can hit Enter and Shift-Enter to create sibling nodes?<br />
It is not exactly the behavior of brainstorm mode of MindManager, but still<br />
close to it.<br />
<br />
=== On what operating systems have people actually succeeded in running FreeMind?===<br />
<br />
* ''Microsoft Windows.'' Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP (SP1 & SP2), Windows 2003 Server<br />
* ''Linux.'' Mandrake 9.2 and 10, RedHat Pro WS 3, Fedora Core 2, SuSE (8.2 using the RPM for 9.0, 9.0, 9.1, 9.2, 9.3, 10.0, 10.2), Ubuntu (Warty), Debian sarge, Debian sid, Slackware 9.1, Gentoo, Mepis 3.3.1, Mepis 3.4-2.rc1.<br />
* ''BSD.'' FreeBSD (5.2.1, 5.4, 6.1), Mac OS X (10.2.8, 10.3, 10.4.4, 10.4.8)<br />
* ''Other.'' OS/2, Solaris 9 and 10.<br />
''Keywords: platforms.''<br />
<br />
=== Is there a PDA-Version, e.g. for Palm or Pocket PC? ===<br />
On PDA, you can use [[FreeMindPDA]]. It uses cross-platform [http://www.superwaba.com SuperWaba] Open Source SDK. However, it does not use mind map view, but rather plain tree view; it is not a proper FreeMind version in that sense. See also [[Stuff#PDA|FreeMind and PDA]].<br />
<br />
=== How large maps can I edit with FreeMind? ===<br />
<br />
In principle, there are no built-in limits. Practically, the maximum reported size is 11 MB at a map with 22,000 nodes; after exporting to HTML and pasting to Microsoft Word, the very same content had 15.6 MB, with 1500 pages. For a better practical estimation, experimental tests are needed, as the maximum given so far is only a lower bound on practical limits.<br />
<br />
I've been appending daily notes to a single mind-map file continually for many months on a 3 GHz Pentium 4 with 2 GB RAM running windowsXP. The file has grown to about half a megabyte, 420K, and there is a noticable difference in Freemind's responsiveness dealing with it, but it still works for me.<br />
<br />
=== How can I keep FreeMind from opening the last file from the last session? ===<br />
One way is to disable the changing of the file "auto.properties" (which is in the same folder as [[user.properties]]). Be aware that the menu "Edit -> Preferences" will not change anything any more than!<br><br />
To do that go to the file auto.properties and delete everything behind "onStartIfNotSpecified=" in that line. Now set the file "auto.properties" to read-only.<br />
<br />
===To change the fill color on bubbles.===<br />
There's an icon for it at the main toolbar. Additionally,<br />
you can find it in the popup menu at Node > Style > Cloud color.<br />
<br />
===To remove a cloud===<br />
Press Ctrl+Shift+B to toggle clouds.<br />
<br />
=== To search in FreeMind === <br />
''Keywords: find.'' Press Ctrl + F. For finding next occurrence, press Ctrl + G. Searching is<br />
restricted to the descendants of the node selected when pressing Ctrl + F. The search is<br />
a breadth-first search, first finding occurrences in the nodes closer to the starting node.<br />
<br />
===To move nodes around=== To move them up and down, use ctrl + up and down arrows. To move them wherever you want, use drag'n drop with mouse. ''Keywords: move around, reorganize.''<br />
<br />
=== What does antialias mean in FreeMind preferences? ===<br />
<br />
To antialias means to make fonts or curves look smooth by drawing additional pixels with in-between color. See also wikipedia on [http://en.wikipedia.org/wiki/Antialiasing antialiasing].<br />
<br />
By default, FreeMind antialiases edges only. FreeMind can also antialias text, but with the current state of the technology, it does not look good enough. At least, new Java RE 1.5.0 has better antialiasing of text than Java RE 1.4.x. Also, it is possible to set the whole application to antialiasing, including the menus and editing box; by using the command line option <code>-Dswing.aatext=true</code> of Java 1.5.0. Unfortunately, this is not available if you're using FreeMind.exe to launch FreeMind.<br />
<br />
=== What kind of encryption is used? ===<br />
<br />
: ''See [[Encryption]].''<br />
<br />
=== Reminders don't work when I start a map. The PDF-Export is not present. What's happening? ===<br />
There, the plugins (not only the PDF/SVG one) appear only if you start FreeMind from the directory where it has been installed. Especially if you start FreeMind by double-clicking on a FreeMind file (.mm file), this is not the case. So, use your icon and choose open to open your file.<br />
<br />
== Customizing FreeMind ==<br />
<br />
=== How do I add a new keyboard shortcut ===<br />
To add a new keyboard shortcut, say for "Change node background color", open the file<br />
mindmap_menus.xml (in freemind.jar) and search for "background", say.<br />
<br />
You'll find<br />
<pre><br />
<menu_action field="nodeColor" key_ref="keystroke_node_color"/><br />
<menu_action field="nodeColorBlend" key_ref="keystroke_node_color_blend"/><br />
<menu_action field="nodeBackgroundColor"/><br />
<menu_action field="removeNodeBackgroundColor"/><br />
</menu_category><br />
</pre><br />
Here, you add a new keyboard ref attribute like:<br />
<pre><br />
<menu_action field="nodeColor" key_ref="keystroke_node_color"/><br />
<menu_action field="nodeColorBlend" key_ref="keystroke_node_color_blend"/><br />
<menu_action field="nodeBackgroundColor" key_ref="keystroke_node_background_color"/><br />
<menu_action field="removeNodeBackgroundColor"/><br />
</menu_category><br />
</pre><br />
Open the file freemind.properties and add a line like<br />
<pre><br />
#<br />
keystroke_node_color = alt F<br />
keystroke_node_color_blend = alt B<br />
keystroke_edge_color = alt E<br />
keystroke_node_background_color=alt N<br />
</pre><br />
But you have to search for free keys...<br />
<br />
=== To set expert settings ===<br />
<br />
Most of expert settings are stored in the [[user.properties]] file.<br />
<br />
=== To use another browser ===<br />
<br />
If you want to use another browser, edit the [[user.properties]] file and change the following property according to your operation system: <br />
<br />
default_browser_command_windows_nt <br />
default_browser_command_windows_9x <br />
default_browser_command_mac <br />
default_browser_command_other_os <br />
<br />
You have to write something like<br />
<br />
default_browser_command_windows_nt = C:\Program Files\Internet Explorer\iexplore.exe "{0}"<br />
...<br />
<br />
=== To change language ===<br />
<br />
Lydia<br />
<br />
language= en<br />
<br />
language = de <br />
<br />
Don't forget to remove the # character. Restart FreeMind and you have changed the language to German. See also [[Development#To_translate_FreeMind_into_your_language|the list of available languages]].<br />
<br />
=== To set a different key for new child node on Mac computers ===<br />
<br />
NOTE: The latest version of Freemind now sets the "tab" key as the default key for inserting a new node on a mac. Unfortunately, this is not documented in an obvious place. If you right or control click on a node you see a menu that does tell you the Tab shortcut for creating a child node but this is easily missed.<br />
<br />
In a manner similar to changing the language, replace<br />
<br />
#keystroke_add_child = INSERT <br />
<br />
with<br />
<br />
keystroke_add_child = control shift ENTER<br />
<br />
in the file [[user.properties]]. Pay attention that you write the key code ENTER in capital letters. <br />
<br />
The command ("Apple") key can be referred to as "meta" in these keystroke sequences - in case you were wondering.<br />
<br />
=== There is no shortcut to insert a note. Why? ===<br />
There is no shortcut on purpose, as this action does not come with undo. <br />
<br />
If you want to have this shortcut, you can download the sources, patch NodeNote.xml such that it contains a key_stroke="alt N" in the first lines as here: <br />
<br />
<br />
<plugin_action <br />
documentation="%accessories/plugins/NodeNote.properties_documentation" <br />
name="%accessories/plugins/NodeNote.properties_name" <br />
base="freemind.extensions.NodeHookAdapter" <br />
'''key_stroke="alt N"''' <br />
icon_path="accessories/plugins/icons/knotes.png" <br />
label="accessories/plugins/NodeNote.properties" <br />
class_name="accessories.plugins.NodeNote" instanciation="Once"> <br />
<br />
<br />
compile and you are done. BUT REMEMBER: Pressing your key on a node, that already contains a note, makes this note to remove WITHOUT UNDO. <br />
<br />
At your own risk, Chris<br />
<br />
<br />
=== Using physical styles ===<br />
from C:\Program Files\FreeMind\doc\freemind.mm<br />
<br />
: To add your own physical style, given that you are a technical user, edit them in the file "patterns.xml" located at the folder ".freemind" in your home directory.<br />
<br />
in Windows, that file is<br />
<br />
: C:\Documents and Settings\YourUserName\.freemind\patterns.xml<br />
<br />
<pattern> elements contain Styles that can be applied to nodes in your diagram. add or edit as desired. the following elements can be contained in a <pattern> element.<br />
<br />
Elements describe the inside of a node. some of the allowed attributes are:<br />
<br />
* color: color of the text inside the node. the format of the value is "#RRGGBB"<br />
* background_color: background color inside the node. the format of the value is "#RRGGBB"<br />
<br />
Elements describe the edge of a node. some of the allowed attributes are:<br />
<br />
* color: color of the edge of the node. the format of the value is "#RRGGBB"<br />
* width: width of the edge of the node. <br />
<br />
Note that RR, GG, BB are the hex values of the red, green, blue components of a color. <br />
<br />
An example of a simple pattern is:<br />
<br />
<pattern name="Object Orange"><br />
<node background_color="#ffcc00" COLOR="#0000ff" /><br />
<edge color="#009999" width="4"/><br />
</pattern><br />
<br />
This information and more can be discovered by opening any .mm file in a text or XML editor. You can usually search for the text in an element to find the example of what you want to learn how to do.<br />
<br />
== Mind maps on web pages with FreeMind's applet ==<br />
<br />
=== To get FreeMind's applet working. ===<br />
If you experience problems viewing a mind map published by someone else, the most common problem is that you have to use Java >= 1.4 in your browser. Check this using the "About plugins" section of your browser (or a similar place). If you have Java >= 1.4 installed and still experiencing problems check out Internet Explorer's settings by selecting Tools > Internet Options > Advanced > Java and make sure ``Use Java2" is enabled.<br />
<br />
=== To present your mind map on the web ===<br />
Use FreeMind's browser applet. The following [http://freemind.sourceforge.net/docs/Serving%20Freemind%20maps%20in%20a%20browser/index.html document] (thanks to Bob) explains what to do to have a complete testing environment for your applet. <br />
<br />
=== Quick Java Applet instructions if you are already a code wiz ===<br />
<br />
<APPLET CODE="freemind.main.FreeMindApplet.class" ARCHIVE="freemindbrowser.jar" <br />
WIDTH="100%" HEIGHT="80%"><br />
<PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"><br />
<PARAM NAME="scriptable" VALUE="false"><br />
<PARAM NAME="toolbarVisible" VALUE="true"><br />
<\!-- ^ this has no effect on my pc --><br />
<PARAM NAME="modes" VALUE="freemind.modes.browsemode.BrowseMode"><br />
<PARAM NAME="browsemode_initial_map" VALUE="http://www.osde.info/osde.mm"><br />
<\!-- ^ Put the FULL path to your map here --><br />
<param NAME="initial_mode" VALUE="Browse"><br />
<param NAME="selection_method" VALUE="selection_method_direct"><br />
</APPLET><br />
<br />
In some cases, it may be necessary to set the '''ARCHIVE''' property to also use the '''Full Path''' to the .jar file. In the above example, the initial '''APPLET''' element would appear as:<br />
<APPLET CODE="freemind.main.FreeMindApplet.class" <br />
ARCHIVE="http://www.exmaple.com/freemindbrowser.jar" WIDTH="100%" HEIGHT="80%"><br />
<br />
The most recent version of above source and freemindbrowser.jar are contained in the freemindbrowser.zip-Archive, which you can get from [http://sourceforge.net/project/showfiles.php?group_id=7118&package_id=16120 the sourceforge-site].<br />
<br />
=== To view the toolbar automatically after the applet starts ===<br />
It is necessary to edit the html starter of the applet and change the corresponding property. That is, set<br />
toolbarVisible=true. More precisely, add a tag <br />
<PARAM NAME="toolbarVisible" VALUE="true"><br />
to freemindbrowser.html or whatever name you have changed the file to.<br />
<br />
=== Is there a list of names and values and functions of all params for the applet? ===<br />
No. Theoretically, all parameters found in user.properties can be used as parameters of the applet.<br />
<br />
<br />
=== Is it possible to change or edit the map through an applet? ===<br />
<br />
No. There is no applet for ''editing'' mind maps; only for viewing.<br />
<br />
=== My document isn't opened by the applet ===<br />
<br />
The URL of the document *must* end with .mm. If it doesn't the document opens in a new browser window. The trick I use is to append a dummy parameter like in this example:<br />
<br />
http://myserver/mypath/mydoc?e=.mm<br />
<br />
This trick is specially useful for dynamic documents. (this is an opinion only. Some people, like Garito, thinks in another way)<br />
<br />
===Java Applet for XHTML===<br />
<br />
The same Freemind Browser can be used but instead of using the 'applet' element, the 'object' element can be used instead. Using Shayne Steele's [http://ww2.cs.fsu.edu/~steele/XHTML/appletObject.html approach], the following code can be used for placing a file called Textbook.mm that is located in http://example.com/freemind/ (along with the freemindbrowser.jar file):<br />
<br />
&lt;!--[if !IE]--&gt;<br />
&lt;object classid="java:freemind.main.FreeMindApplet.class"<br />
type="application/x-java-applet"<br />
archive="http://example.com/freemind/freemindbrowser.jar"<br />
width="450" height="300"&gt;<br />
&lt;param name="scriptable" value="false" /&gt;<br />
&lt;param name="modes" value="freemind.modes.browsemode.BrowseMode" /&gt;<br />
&lt;param name="browsemode_initial_map" value="http://example.com/freemind/Textbook.mm" /&gt;<br />
&lt;param name="initial_mode" value="Browse" /&gt;<br />
&lt;param name="selection_method" value="selection_method_direct" /&gt;<br />
&lt;!-- &lt;![endif]--&gt;<br />
&lt;object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"<br />
codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"<br />
height="300" width="450"&gt;<br />
&lt;param name="code" value="freemind.main.FreeMindApplet" /&gt;<br />
&lt;param name="archive" value="http://example.com/freemind/freemindbrowser.jar" /&gt;<br />
&lt;param name="scriptable" value="false" /&gt;<br />
&lt;param name="modes" value="freemind.modes.browsemode.BrowseMode" /&gt;<br />
&lt;param name="browsemode_initial_map" value="http://example.com/freemind/Textbook.mm" /&gt;<br />
&lt;param name="initial_mode" value="Browse" /&gt;<br />
&lt;param name="selection_method" value="selection_method_direct" /&gt;<br />
&lt;strong&gt;<br />
This browser does not have a Java Plug-in.<br />
&lt;/strong&gt;<br />
&lt;br /&gt;<br />
&lt;a href="http://java.sun.com/products/plugin/downloads/index.html"&gt;<br />
Get the latest Java Plug-in here.<br />
&lt;/a&gt;<br />
&lt;/object&gt;<br />
&lt;!--[if !IE]&gt;--&gt;<br />
&lt;/object&gt;<br />
&lt;!-- &lt;![endif]--&gt;<br />
<br />
It works and it is valid markup. If placing in an HTML file, use '&gt;' instead of ' /&gt;' for the param element ending.<br />
<br />
== Workarounds in FreeMind ==<br />
<br />
===FreeMind behaves strange or crashes. What can I do?===<br />
First try reinstalling both Java (mostly the latest version is best) and Freemind. Often this solves problems. <br />
One of the problems solved in this way was:<br />
<br />
'' ''My computer crashes, or more precisely locks, when I click on a link in FreeMind, using J2RE 1.4.2_03 on Windows 98. Reinstalling helped. In retrospect, I think what broke it was that I renamed the J2RE directory to something easier to write in the bat file path statement. Broke it. ''<br />
<br />
=== When I drag files into the FreeMind window, FreeMind just works very long or I get a mind map of the file system ===<br />
This is a bug which is a least present on FreeMind 7.2 beta and lower on Windows. I only know of a workaround for this: Go to the [[user.properties]] and delete ",freemind.modes.filemode.FileMode". This disables the file mode of FreeMind.<br />
<br />
=== Changing the key bindings in user.properties does not work ===<br />
It seems that capitalization IS important in the keybindings. I wrote "enter" and it didn't work. I changed it to "ENTER" and it worked!<br />
(FreeMind 7.2 beta)<br />
<br />
=== FreeMind fails to export big maps ===<br />
When FreeMind fails to export big maps, you may do one of the following.<br />
<br />
# Assign more memory to the Java virtual machine as a workaround by editing the launching script. Edit <code>freemind.bat</code> or <code>Freemind.sh</code> and add a <code>-Xmx''MEM''</code> parameter to the <code>java</code> command line at the end of the script, like <code>java -Xmx256m ...</code> for 256 megabytes maximum memory. Believing the manual of Java, the default is 64 MB and the maximum is slightly less than 2000 on an x86 processor, which should be enough.<br />
# Download the [http://sourceforge.net/tracker/index.php?func=detail&aid=1361629&group_id=7118&atid=307118 patch with fixed Windows launcher], and replace <tt>Freemind.exe</tt> found in <tt>C:\Program Files\FreeMind</tt> with the one found in the patch, given you are in Windows. Backing up the original <tt>Freemind.exe</tt> is advisable.<br />
<br />
Beware that exporting may still take a while. For instance, it may take 11 minutes to export a mind map with 740 nodes to JPEG.<br />
<br />
== Using HTML in long nodes ==<br />
<br />
=== What HTML tags does FreeMind support? ===<br />
<br />
FreeMind supports basic HTML in its nodes. For HTML to take effect, a node must start<br />
with "&lt;html>". What HTML is supported depends on the Java virtual machine.<br />
Among others, users have reported the following uses:<br />
<br />
<nowiki><html><p style="background-color:yellow">the node text</p></nowiki><br />
<br />
=== To embed, or more precisely link, images into FreeMind. ===<br />
You can link images into FreeMind using context menu of a node, accesed using right click (on MAC OS X Panther use Control click). Or type the following:<br />
&lt;html&gt;&lt;img src=&quot;image.jpg&quot;&gt;&lt;/html&gt;<br />
where image.jpg is the reference to an image.<br />
<br />
=== To put the contents of a Microsoft Word document into FreeMind. ===<br />
<br />
* First paste the Word document into Microsoft FrontPage.<br />
* Delete the images afterwards as FreeMind does not support them.<br />
* Remove the &lt;head> ... &lt;/head> in the source text view in FrontPage.<br />
* But leave the &lt;html>! The node needs to start with that.<br />
* Replace &lt;body&gt; with &lt;body width=600&gt; or similar width specification.<br />
* Finally, paste the HTML text as a long node into FreeMind.<br />
<br />
=== To have tables in FreeMind ===<br />
If you have Microsoft Frontpage available, it is convenient to create and<br />
edit HTML content there and paste it to and from FreeMind. Beware that the html code has to start with<br />
''&lt;html&gt;''. This way, you can conveniently create tables using the drawing tools of Frontpage.<br />
You can create formatted text this way as well; in that case, beware to set ''&lt;body width=600&gt;''<br />
or similar. However, FreeMind does not interpret all HTML; especially, it does not interpret inline<br />
CSS styling so you have to use hard formatting instead.<br />
<br />
If you want the table borders to have a '''nice two dimensional look''' rather than bevelled, start<br />
the HTML as follows.<br />
<br />
<html><br />
<head><br />
<style> td { border-style: solid } table { border-style: solid } </style><br />
</head><br />
<br />
== Generating mind maps programmatically ==<br />
<br />
=== To insert a newline into a node ===<br />
<br />
Insert <code>&amp;#xa;</code> instead of plain newline. Example of a map with three newlines:<br />
<br />
<map version="0.7.1"><br />
<node TEXT="New Mindmap"><br />
<node TEXT="A&amp;#xa;B&amp;#xa;C&amp;#xa;D" POSITION="right"/><br />
</node><br />
</map><br />
<br />
=== To use unicode characters in the node text ===<br />
<br />
FreeMind understands and uses <code>&amp;#xnn;</code>, where nn is equivalent to the '''hexadecimal''' number representing the character. It '''does not''' understand <code>&amp;#nnn;</code>, where nnn is '''decimal''' number. An example of a map containing ''Areté'' follows.<br />
<br />
<map version="0.7.1"><br />
<node TEXT="Aret&amp;#xe9;"/><br />
</map><br />
<br />
== FreeMind on Microsoft Windows ==<br />
<br />
=== How do I install a test version of FreeMind? ===<br />
Just unzip the package to the folder "C:\Program Files\FreeMind". That completes the "installation".<br />
You can start it by running freemind.exe (or freemind.bat if the exe does not exist). You can find test versions [http://freemind.sourceforge.net/testversions/ here].<br />
<br />
=== FreeMind does not seem to be affected by the things I edit in the user.properties. Why? ===<br />
See [[user.properties]].<br />
<br />
=== FreeMind starts and reacts so slow. Why? How to resolve? ===<br />
This seems to be an effect of the connection between Java and MS DirectX. You can deactivate the usage of DirectX for Freemind by editing the Freemind.bat file in your FreeMind directory.<br />
<br />
Add the parameter<br />
<br />
-Dsun.java2d.noddraw=true <br />
<br />
before the final expression <tt>freemind.main.FreeMind</tt>.<br />
<br />
Of course, now you have to use Freemind.bat to start the program instead of executing Freemind.exe. Do not forget to update file associations as well: [[Windows File Associations]]<br />
<br />
=== To create a screenshot of FreeMind and paste it into Microsoft Word or Microsoft Powerpoint ===<br />
To take a screenshot of your whole windows screen into clipboard, press Ctrl + Print Screen. To take a screenshot<br />
of the active window only into clipboard, press Alt + Print Screen. Select your Word or Powerpoint document<br />
and press Ctrl + V. On German keyboard, the key PrintScreen has the label "Druck". However, such a screenshot<br />
also contains FreeMind's window frame, not just the map contents. In Microsoft Word and Microsoft Powerpoint, this<br />
can be solved by cropping the screenshot; the cropping tool can be found in Picture toolbar..<br />
<br />
===To export a map to Microsoft Powerpoint===<br />
There's no elegant way to export a map to PowerPoint. One option is to take a screenshot, and paste it into Powerpoint. PowerPoint supports graphic file insertion, so another option is upgrading to a more recent version of FreeMind that supports JPEG export.<br />
<br />
One another solution is by using a Flash plugin:<br />
* Insert a control "Shockwave Flash Object" with the Control toolbar (go to display/toolbar/customise if not available).<br />
* Activate the propeties window by double clicking on the rectangle of the object<br />
* Click on the custom "property"<br />
* On the new opened window set the "movie URL" to the full path of the plugin (i.e: c:\path\visorFreemind.swf)<br />
* Set the "base URL" to the name of your freemind file (i.e.: index.mm) <br />
* Start your diaporama and you will see the cross inside the rectangle replaced by your freemind map<br />
<br />
If not successfull with those explanation, you will find a more complete information at the following address: [http://www.flashgeek.com FlashGeek]<br />
<br />
===To export / import a map to Microsoft Project===<br />
Look at the section [http://freemind.sourceforge.net/wiki/index.php/Import_and_export_to_other_applications Import and export to other applications]<br />
<br />
== FreeMind on Mac OS X ==<br />
<br />
FreeMind is written in the Java language, which is great for development and deployment of cross-platform applications.<br />
Freemind uses the Swing graphical user interface toolkit, which can use different looks and feels in order to mimic visuals and behaviours proprietary to the target execution platforms.<br />
<br />
<br />
On Microsoft Windows OS, the application fits quite nicely with the rest of the environment, but on Apple MacOS-X, things are often not quite right. MacOS-X users usually have higher expectations when it comes to usability and UI consistency, so they might become frustrated by the lack of compliance to their user interface guidelines.<br />
<br />
<br />
Here are 2 tips to enhance the user experience when using MacOS-X:<br />
<br />
<br />
-1) Keyboard shortcuts<br />
<br />
The "Tao Of Mac" weblog posted a tip for replacing the "CTRL" key by the "COMMAND" (Apple) key:<br />
<br />
http://the.taoofmac.com/space/Applications/FreeMind<br />
<br />
<br />
-2) Look and feel<br />
<br />
"Quaqua" is a look and feel for Swing that emulates the Aqua user interface:<br />
<br />
http://www.randelshofer.ch/quaqua/download.html<br />
<br />
-3) How can I select multiple nodes?<br />
On windows using ctrl - left click lets you select multiple nodes. How to do this on OS X?<br />
'''??? Please answer ???'''<br />
<br />
== FreeMind on Linux and other UNIX-like systems ==<br />
<br />
Go to the specific page [[FreeMind on Linux]].<br />
<br />
== Misc ==<br />
<br />
=== Is FreeMind mind mapping software? ===<br />
<br />
The term '''mind mapping''' is related to british psychologist Tony Buzan. In Buzan's context, mind map is a tree with many colors, pictures and personal expression. '''FreeMind is not''' really '''mind mapping''' software '''in the sense of Tony Buzan''', nevertheless, one would say that FreeMind belongs to the class of so called '''mind mapping software'''.<br />
<br />
Some of members of that class come pretty close to Buzan. Have a look at the site of first class commercial mind mapping software [http://www.mindjet.com/ MindManager]. You may also want to see [http://www.mind-mapping.co.uk/mind-maps-examples.htm examples] of mind maps in Buzan's sense.<br />
<br />
=== To spell FreeMind correctly. === <br />
"FreeMind", with a capital M.<br />
<br />
=== Where can I find a quick reference list of default keyboard shortcuts for the Windows 0.7.1 version? ===<br />
Here is a list of shortcuts, grouped by function:<br />
<br />
File commands:<br />
New map - Ctrl+N<br />
Open map - Ctrl+O<br />
Save map - Ctrl+S<br />
Save as - Ctrl+A<br />
Print - Ctrl+P<br />
Close - Ctrl+W<br />
Quit - Ctrl+Q<br />
Previous map - Ctrl+LEFT<br />
Next Map - Ctrl+RIGHT<br />
Export file to HTML - Ctrl+E<br />
Export branch to HTML - Ctrl+H<br />
Export branch to new MM file - Alt+A<br />
Open first file in history - Ctrl+Shift+W<br />
<br />
Edit commands:<br />
Find - Ctrl+F<br />
Find next - Ctrl+G<br />
Cut - Ctrl+X<br />
Copy - Ctrl+C<br />
Copy single - Ctrl+Y<br />
Paste - Ctrl+V<br />
<br />
Mode commands:<br />
MindMap mode - Alt+1<br />
Browse mode - Alt+2 <br />
File mode - Alt+3<br />
<br />
Node formatting commands:<br />
Italicize - Ctrl+I<br />
Bold - Ctrl+B<br />
Cloud - Ctrl+Shift+B<br />
Change node color - Alt+C<br />
Blend node color - Alt+B<br />
Change node edge color - Alt+E<br />
Increase node font size - Ctrl+L<br />
decrease node font size - Ctrl+M<br />
Increase branch font size - Ctrl+Shift+L<br />
Decrease branch font size - Ctrl+Shift+M<br />
<br />
Node navigation commands:<br />
Go to root - ESCAPE<br />
Move up - UP<br />
Move down - DOWN<br />
Move left - LEFT<br />
Move right - RIGHT<br />
Follow link - Ctrl+ENTER<br />
Zoom out - Alt+UP<br />
Zoom in - Alt+DOWN<br />
<br />
New node commands:<br />
Add sibling node - ENTER<br />
Add child node - INSERT<br />
Add sibling before - Shift+ENTER<br />
<br />
Node editing commands:<br />
Edit selected node - F2<br />
Edit long node - Alt+ENTER<br />
Join nodes - Ctrl+J<br />
Toggle folded - SPACE<br />
Toggle children folded - Ctrl+SPACE<br />
Set link by filechooser - Ctrl+Shift+K<br />
Set link by text entry - Ctrl+K<br />
Set image by filechooser - Alt+K<br />
Move node up - Ctrl+UP<br />
Move node down - Ctrl+DOWN<br />
<br />
=== To suggest new enhancements of FreeMind ===<br />
''Keywords: additional features, additional functions.''<br />
At FreeMind's project page, you can [http://sourceforge.net/tracker/?group_id=7118&atid=357118 submit Requests for Enhancements (RFEs)].<br />
<br />
=== Is MindMaster a rip off of FreeMind? ===<br />
<br />
''Update: the site of MindMaster is no longer there, thanks to Rezzie.''<br />
<br />
There is a [http://www.gigastorm.com/mindmaster/ web site] offering a product called MindMaster. This program is a ripped off version of FreeMind. It is not just a clone of FreeMind; it ''is'' just FreeMind renamed, and slightly modified. They even use the presentation texts as found on the main page of FreeMind. As FreeMind is licenced under GNU GPL, so must be MindMaster. However, on the MindMaster site and after the installation, they claim that they hold copyright to MindMaster, and that you are prohibited to use MindMaster unless you conform to their licence. This is unlawful. We urge you not to use or recommend MindMaster, and to avoid linking to their site or giving any recommendation. Also, you can write an email to them complaining about abuse of GNU General Public Licence. --[[User:Danielpolansky|Danielpolansky]] 11:15, 14 May 2005 (PDT)<br />
<br />
: I have been in contact with the author of [http://www.gigastorm.com/mindmaster/ MindMaster] and he has since removed the website and all links to the download. He did in fact claim it was released under the GPL and included both the licence and source code in the package, but as I didn't want to shell out $30 I cannot verify this. --[[User:Rezzie|Rezzie]] 23:49, 18 Oct 2005 (PDT)<br />
<br />
:: Thanks a lot. --[[User:Danielpolansky|Danielpolansky]] 09:50, 26 Oct 2005 (PDT)<br />
<br />
=== Where can I make a monetary donation to FreeMind? ===<br />
<br />
Currently, we do not accept any monetary donations. --[[User:Danielpolansky|Danielpolansky]] 00:32, 21 Nov 2005 (PST)<br />
<br />
== This FAQ ==<br />
<br />
=== I have a question not listed here, what should I do? ===<br />
<br />
Post new questions either to some of our [http://sourceforge.net/forum/?group_id=7118 forums] or to the [[Talk:Asked_Questions|discussion page]] of this page. Or specifically, ask your question in FreeMind's [http://sourceforge.net/forum/forum.php?forum_id=22102 Help forum]. Unfortunately, we cannot guarantee that you will get help, still, many users get it.<br />
<br />
=== To edit this FAQ ===<br />
Edit this page like any other wiki page (click edit or press alt-E). When adding a question to the talk page, imitate the format of already existing questions.<br />
<br />
=== Where can I practice editing pages on this Wiki? ===<br />
Click on this link and just hit the edit button on the lower right: [[Sandbox]]<br />
<br />
== Questions not yet answered ==<br />
<br />
Post new questions either to some of our [http://sourceforge.net/forum/?group_id=7118 forums] or to the [[Talk:Asked_Questions|discussion page]] of this page.<br />
<br />
Is FreeMind also Working under SuSe Linux 9.3 or perhaps already a part of the package?<br />
Answer: Yes, please see the "[[FreeMind on Linux]]" page here in the wiki.<br />
<br />
[[Category:Documentation]]</div>Bpatters7