Development: Difference between revisions

From FreeMind
Jump to navigationJump to search
No edit summary
 
(307 intermediate revisions by 57 users not shown)
Line 1: Line 1:
<table><tr>
<table><tr>
<td valign=top>
{{Navigation_bar}}
<td>&nbsp;
<td width=600>
<td width=600>


<b>The development</b> of FreeMind is coordinated using FreeMind's [http://sourceforge.net/projects/freemind/ project page] at SourceForge, and also using this wiki. At wiki, we have '''[[requests for enhancements]]''' page; there is also [http://sourceforge.net/tracker/?group_id=7118&atid=357118 requests for enhancements] (RFEs) page at SourceForge (not preferred).
The development of FreeMind is coordinated using FreeMind's [http://sourceforge.net/projects/freemind/ project page] at SourceForge, and also using this wiki. At wiki, we have '''[[requests for enhancements]]''' page; there is also [http://sourceforge.net/tracker/?group_id=7118&atid=357118 requests for enhancements] (RFEs) page at SourceForge (not preferred). You can [http://freemind.git.sourceforge.net/git/gitweb.cgi?p=freemind/freemind;a=summary browse] our new [[GIT]] repository.


We also use SourceForge for [http://sourceforge.net/tracker/?group_id=7118&atid=107118 bugs],  and [http://sourceforge.net/forum/forum.php?forum_id=22101 open discussion forum]. We do not use the documentation part there as we use this wiki instead.
We also use SourceForge for [http://sourceforge.net/tracker/?group_id=7118&atid=107118 bugs],  and [http://sourceforge.net/forum/forum.php?forum_id=22101 open discussion forum]. We do not use the documentation part there as we use this wiki instead.


<p style="border-style:solid; border-width: 1px; background: #F8F8F0;padding: 5px">
==Contributing to FreeMind==
<font color="green">'''''Call for logotype.'''''</font> We are in need of a good logotype. If you think you can make one, please attach it [[Logotype|here at wiki yourself]], or send it to [mailto:dan.polansky@seznam.cz Dan Polansky]. Together with a logotype, you should provide a short description of why the logotype represents FreeMind. There is no need for you to take into account the current icon of FreeMind; it is expected that you choose any design as you see fit. As we'll appreciate to have several logotypes to choose from, we will wait until we receive suggestions from more people. If your logotype is chosen, you'll of course get full credit for it.</p>


== Getting started as a developer or tester ==
See [[Contributing]].


=== To get the latest beta version of FreeMind ===
==Getting started as a developer==


[http://freemind.sourceforge.net/testversions/ Here]. Observe, that these versions are not official releases
See [[Getting started as a developer]].
and may admit serious errors. Please, use them only if you urgently need a feature included in such a version
or to give us feedback to our development which is highly appreciated.


=== To compile FreeMind on your own ===
==Getting started as a tester==


If you are a developer, just download the sources, unpack them,
See [[Getting started as a tester]].
find the folder with the file build.xml, and execute the command
<code>ant</code> in that folder. For more detail description
see the [http://freemind.sourceforge.net/docs/compile/windows/Quick%20guide%20to%20compiling%20Freemind%20on%20an%20XP%20system.html guide] prepared for you by Bob Alexander.


=== To use concurrent version repository (CVS) with Eclipse ===
==Reporting bugs==


Check out the [http://freemind.sourceforge.net/docs/Using%20CVS%20via%20Eclipse/index.html guide] by Bob Alexander.
See [[Reporting bugs]].


When working with CVS, remember that it is difficult to change directory and file names under CVS. Moreover, it not easy to remove files completely. Therefore, pay attention when checking files in.
==Organization of FreeMind development==


=== To become a developer ===
Initially, every active developer of the core team works on his own GIT branch. Our intermediate results are
published as our "alpha versions". We use forum [http://sourceforge.net/forum/forum.php?forum_id=22101 Open Discussion] to communicate them.


Due to project reasons, we cannot make you a developer with CVS access of FreeMind directly. You have to follow the following steps:
Further details about the FreeMind release process are described on the FreeMind [[Release process]] page.


* create a SourceForge user account.
==Experimental versions==
* start to discuss the change/feature/bug in our [http://sourceforge.net/forum/forum.php?forum_id=22101 open discussion forum].
* if the topic is discussed and hopefully accepted, start to change the actual CVS code
* at an early stage of your implementation (and testing), put a version into the patch section of sourceforge and/or send it directly to the current project manager. As this is an open project it may be the case that you have to wait a little time for the first responses, but you should get support, comments and help from the project members soon.
* After having successfully developed and integrated some items, you get the developer rights at the sourceforge page to continue our good work. But this should not change the steps described above.


=== Development resources ===
Currently, there are no experimental versions available. The latest release candidate can be downloaded from [http://sourceforge.net/project/showfiles.php?group_id=7118 Files section].


* [http://freemind.sourceforge.net/javadoc/index.html API documentation] (javadoc)
==Obtaining focus for selected node in reliable manner==
* [http://freemind.sourceforge.net/Freemind-development.html Obsolete development mind map]
* [http://freemind.sourceforge.net/Freemind-development.mm Obsolete development mind map for download]
* [http://freemind.sourceforge.net/Freemind-development-exported.html Obsolete development mind map exported to HTML with folding]
 
=== To get latest CVS branch ===
 
''Missing''. The latest branch is ''fm_041017_base_integration'' (without guarantee, 26.2.2005). The most relevant tag is ''fm_0_8_0_rc2''.
 
== Conceptual remarks ==
 
=== Modular model - view design ===
 
The architecture of FreeMind makes it possible that FreeMind becomes general tool for editing tree-structured data, that is mind maps, XML/HTML documents, folder trees etc. in future.
 
All these kinds of data would be presented to the user as a mind map. Model-View-Controller design makes it possible for you only to write so called model of the data structure, without caring for the visual representation. Currently, mind map mode and file mode are implemented.
 
=== Original vision of Joerg Mueller ===
 
Joerg Muller is the original author of FreeMind, developing it up to the version 0.4.0. Here follows what he's got to say on his original vision:
 
: What I had in mind when I began to write FreeMind, was creating a collaborative mind where people can intuitively share their ideas, knowledge and thoughts with each other. Of course FreeMind is only a first step into this direction, but I did this first step. Now a Mode must be implemented that makes collaboration over the Internet possible, maybe using the Topic-Map standard. I think linear text is a very poor way of representing knowledge, and by using trees and networks, visual representation, internet collaboration and open source we should be able to create some kind of a collaborative mind.
 
: FreeMind now has evolved from a specific Mind Map Editor to a generic editor for tree structured data. I want FreeMind to become for tree structured data what emacs is for linear data (ie. text).
 
One may think of extending FreeMind to work with networks as opposed to trees only, an example of this being Topic Maps (ISO).
 
Daniel Polansky: Joerg's vision of FreeMind becoming Emacs for tree data is intriguing, but rather far fetched at the time. You would need to provide scripting facility and at least many basic operations, like upcase, downcase, replace and many others. It is even not evident that this goal valuable compared to other goals - there many quite obvious and still missing features.
 
=== Why not use OPML for storage instead of FreeMind's native XML format ===
 
The current version of [http://www.opml.org/ OPML] is not suited for our purposes. It should be easy to create conversion XSLT between FreeMind and OPML. First, if we decided to use OPML, we would have to wait until the owner of OPML changes his standard to fit our needs. Thus, we would be dependent, not being able to act dynamically. Second, already the current version of OPML is insufficient. It does not contain most of what FreeMind already uses: colors, fonts, folded tag, edges and icons. It is not a superset of FreeMind's XML format, even not in a vague sense. Even if I renamed the elements names properly, OPML would still be a subset and not superset of FreeMind's XML. As a result, we have no benefit from using OPML right now.
 
''Summary:'' 1) we would run into dependence, and 2) OPML is insufficient, loosely speaking it is a subset.
 
=== Why may FreeMind be more relevant than some other open source applications ===
 
There are many efforts to create new text editors, text processor and the like. While this activity is not without value, it does not fill that big value gap as mind mapping application.
 
Take, for instance, text editors like JEdit. There are already well estabilished text editors like Emacs or Vim, and there are many others. It's not that these editors would be perfect, far from that, but they're still pretty useful and with some training users can become very efficient with them.
 
With text processors, the thing is that most users in companies have already Microsoft Office for free. What does that mean? That means that the individual users do not have to pay for the MS Office, and they cannot effectively decide to use other Office platform either because of the value of easy sharing. Furthermore, there are competing free Office platforms like KOffice, OpenOffice or AbiWord.
 
In mind mapping, the situation is quite different. You do not get commercial alternative granted in companies, unlike office applications. The point here is that most of MS Windows users, the mainstream, do not have a mind mapping application yet. For them, starting to use FreeMind is not a switch from Microsoft product to alternative product. It is a switch from scattered documents in incomparable and hard-to-overview formats to one document with unprecedented order and transparency - FreeMind's mind map.
 
Therefore, I am expecting a growth of interest of free developers in developing and using this application.
 
Furthermore, even though Java is quite slow and memory hungry, it solves the neverending quarrel between religious die-hard fans of different computing platforms, which I have first experienced with Atari 800 XL versus Commodore 64 battle, later IBM compatible versus Commodore Amiga battle, and nowadays Windows versus Linux battles.
 
== Misc ==
 
=== To create a new release ===
 
To succesfully complete a new release, do the following
 
* upload the release files into /incoming at ftp:upload.sourceforge.net , use the user anonymous and your e-mail address as a password
* create new release. The files you have uploaded with ftp will be offered to you. Releases have names like "0.6.1", "0.6.5".
* update the home page so that it points to the new version of installation files
* post news, listing the most important changes of the new version
* repost the news to the Announce forum, with basically the same text
* repost the news the mailing list freemind-users@lists.sourceforge.net
 
Notice that the news cannot be monitored unlike forum, and forum has no RSS
feed unlike news.
 
=== All on keyboard mappings ===
 
Currently, each function has at most one key assigned. But, it should be the other way around;
the keys should have functions assigned, rather than functions key. For instance, it would be
valuable to have both ''insert'' and ''tab'' assigned to ''new node'' function. (Actually on MS Windows it is right now not possible at all to bind anything to ''tab''.)
 
=== To translate FreeMind into your language ===
 
Take the latest revision of [http://cvs.sourceforge.net/viewcvs.py/freemind/freemind/Resources_en.properties Resources_en.properties]. Translate the labels in the text at the right side from = to your language. Save the file in UTF-8 encoding; this is possible e.g. using Microsoft Notepad. Convert the file into \uXXXX Unicode escape notation, using [http://java.sun.com/j2se/1.3/docs/tooldocs/win32/native2ascii.html native2ascii] tool included with the Java SDK. Example of use (Resources_cs.properties.txt is before conversion):
 
cd C:\j2sdk1.4.2\bin>
native2ascii.exe -encoding UTF8 Resources_cs.properties.utf8.txt Resources_cs.properties
 
Ideally, your file's name will be ''Resources_xx.properties'', where ''xx'' is the code of the language (e.g. en, de, dk etc.). [http://sourceforge.net/tracker/?group_id=7118&atid=307118 Send your translation as a patch] afterwards.
 
 
 
Currently, we have the following languages translated.
{| border="1" cellspacing="0" cellpadding="2"
! colspan="7" style="background:#fff8f0;" | Already Translated Languages
|-------------------------------------------------
! | Language || Language    || Short || If released || Translator || Reviewer || Capitalized Titles
|-----------------------------------------------------------------
| Czech    || ?esky      || cs || not released || Radek ?varz || Daniel Polansky ||No
|-----------------------------------------------------------------
| Danish  || Dansk      || dk || released    ||            ||                || 
|-----------------------------------------------------------------
| Dutch    || Nederlands  || nl || [http://sourceforge.net/tracker/index.php?func=detail&aid=1157653&group_id=7118&atid=307118 not released] || Koen Roggemans ||              ||No
|-----------------------------------------------------------------
| English  || English    || en || released    || N/A        ||                  || Yes
|-----------------------------------------------------------------
| French  || Francais    || fr || released    ||            ||                  ||
|-----------------------------------------------------------------
| German  || Deutsch    || de || released    || Christian Foltin ||                ||
|-----------------------------------------------------------------
| Hungarian ||            || ?  || not released || [http://documan.sourceforge.net/ documan] ||      ||
|-----------------------------------------------------------------
| Italian  || Italiano    || it || released    || Bob Alexander ||      ||
|-----------------------------------------------------------------
| Japanese || Nihongo    || ja || released    || Kohichi Aoki ||        ||
|-----------------------------------------------------------------
| Korean  || Hangeul      || kr || [http://sourceforge.net/tracker/index.php?func=detail&aid=1164212&group_id=7118&atid=307118 not released]    || Kim jong woo ||        ||
|-----------------------------------------------------------------
| Polish  || Polski      || pl || not released || Rafal Kraik      ||  ||
|-----------------------------------------------------------------
| Portuguese || Portugues || pt || not released || Luis Ferreira      ||  ||
|-----------------------------------------------------------------
| Russian  || Pусский    || ru || not released || Prokudin Alexander ||    ||
|-----------------------------------------------------------------
| Spanish  || Espanol    || es || released    || Hugo Gayosso      ||    ||
|}
 
=== FreeMind's xml data format (.mm) ===
 
FreeMind stores his data in own XML flavor. Up to FreeMind 0.6.5, the xml format has been unchanged. The list of entities and their attributes as of FreeMind 0.7.1 follows.
 
* '''map''' (root entity)
** version (0.7.1)
* '''node''' (parent entity: node, map)
** id  (0.7.1)
** text
** link
** folded
** color
** position (left or right, only for children of the root) (0.7.1)
* '''edge''' (parent entity: node)
** style
** color
** width
* '''font''' (parent entity: node)
** name
** size
** bold
** italic
* '''icon''' (parent entity: node) (0.6.7)
** builtin
* '''clowd''' (parent entity: node) (0.7.1)
** color
* '''arrowlink''' (parent entity: node) (0.7.1)
** color
** destination (id of the target node)
** startarrow (arrow style)
** endarrow (arrow style)
 
=== Libraries and tools used in FreeMind ===
 
* [http://nanoxml.cyberelf.be/ NanoXML]
 
== Implementation ==
 
=== Menu Label Checklist ===
{| border="1" cellspacing="0" cellpadding="2"
! colspan="1" style="background:#fff8f0;" | Menu Label Checklist  || Incorrect || Correct
|------------------------------------------------------------------------------------------------------
| In English, use capitalized labels  || Move to root            || Move to Root
|------------------------------------------------------------------------------------------------------
| Menu items leading to a dialog shall end with ... .    || Open <br> Close ...      || Open... <br> Close
|------------------------------------------------------------------------------------------------------
| Do not repeat the verb already used in the menu heading || Export > Export to PNG <br> Insert > Insert Hyperlink  || Export > As PNG <br> Insert > Hyperlink
|}
 
=== To implement embedded images ===
 
To implement embedded images, one would store binary data in a node, like &lt;node TYPE="image" BINARY="x4543edvc...45ert"/&gt;
Upon opening the node for viewing, temporary file would be created and HTML viewer would point to that file. Upon editing,
external image editor would be opened to edit the temporary file, like Gimp.
 
=== Improved HTML editing ===
 
FreeMind's long node may contain HTML. However, it needs to be edited in its source text form. We can improve upon that by
 
* providing WYSIWYG HTML editor embedded in FreeMind, like Java based [http://www.hexidec.com/ekit.php eKIT] ([http://sourceforge.net/projects/ekit/ project page] LGPL licence).
 
* enabling using external WYISWYG editor for editing HTML, like Microsoft FrontPage. This editor would be automatically opened upon clicking an HTML node, displaying it in WYSIWYG way. It is not clear how to get the changed node back to FreeMind. One option is to generate a temporary file, passing it to the external editor upon calling. However, how does the external editor tell FreeMind that the editing has ended? Futhermore, should such editing be modal? How to ensure such a modality and not get locked in it when the external editor crashes?
 
: There is already some work done on integration of the WYSIWYG HTML editor Kafenio into FreeMind. --[[User:Danielpolansky|Danielpolansky]] 10:51, 6 Mar 2005 (PST)
 
=== Rendering of HTML nodes is slow ===
 
Rendering of quite long HTML nodes is slow. If you have a HTML page corresponding to ten paper pages, then the rendering of the node upon unfolding takes several seconds. The related code is in the method <code>update</code> of the class <code>NodeView</code>. What takes so long is the statement
 
          setText(nodeText);
 
in the section
 
        if (nodeText.startsWith("<html>")) {
          // Make it possible to use relative img references in HTML using tag <base>.
          if (nodeText.indexOf("<img")>=0 && nodeText.indexOf("<base ") < 0 ) {
              try {
                nodeText = "<html><base href=\""+
                    map.getModel().getURL()+"\">"+nodeText.substring(6); }
              catch (MalformedURLException e) {} }
          setText(nodeText);
 
This result does not give us much hope of improving the speed easily, as the command just tells Java's JLabel to render the page.here done by Java's JLabel. A solution would be to find a different HTML rendering Java component. We can also wait until Sun's Java virtual machine improves the speed of JLabel's HTML rendering.
 
--
What about pre-loading nodes which are likely to be expanded, using threading?  Keep some relatively small cache of nodes in proximity to the last expanded node, and swap in the expanded node when the unexpanded one is clicked.  No?
 
=== To obtain focus for selected node in reliable manner ===


Requesting focus for NodeView using requestFocus() method is unreliable. A reliable way of doing that has been implemented in the method <code>obtainFocusForSelected()</code> of Controller. A typical call in ControllerAdaper.java is  
Requesting focus for NodeView using requestFocus() method is unreliable. A reliable way of doing that has been implemented in the method <code>obtainFocusForSelected()</code> of Controller. A typical call in ControllerAdaper.java is  
Line 263: Line 47:
== More development pages ==
== More development pages ==


=== Documentation efforts ===
To see all development pages, have a look at the category Development, by clicking on the link at the bottom of this page.
 
See [[documentation efforts]].
 
=== Short patches ===


See [[short patches]].
[[Category:Development]]

Latest revision as of 19:04, 28 May 2011

The development of FreeMind is coordinated using FreeMind's project page at SourceForge, and also using this wiki. At wiki, we have requests for enhancements page; there is also requests for enhancements (RFEs) page at SourceForge (not preferred). You can browse our new GIT repository.

We also use SourceForge for bugs, and open discussion forum. We do not use the documentation part there as we use this wiki instead.

Contributing to FreeMind

See Contributing.

Getting started as a developer

See Getting started as a developer.

Getting started as a tester

See Getting started as a tester.

Reporting bugs

See Reporting bugs.

Organization of FreeMind development

Initially, every active developer of the core team works on his own GIT branch. Our intermediate results are published as our "alpha versions". We use forum Open Discussion to communicate them.

Further details about the FreeMind release process are described on the FreeMind Release process page.

Experimental versions

Currently, there are no experimental versions available. The latest release candidate can be downloaded from Files section.

Obtaining focus for selected node in reliable manner

Requesting focus for NodeView using requestFocus() method is unreliable. A reliable way of doing that has been implemented in the method obtainFocusForSelected() of Controller. A typical call in ControllerAdaper.java is

 getController().obtainFocusForSelected();

Requesting focus using

 newSelected.requestFocus();

where newSelected is a NodeView is unreliable, though most often works.

More development pages

To see all development pages, have a look at the category Development, by clicking on the link at the bottom of this page.