Program design: Difference between revisions
No edit summary |
m (Reverted edit of Yvyfyjeh, changed back to last version by DimitriPolivaev) |
||
Line 1: | Line 1: | ||
==Architecture Design== | |||
FreeMind is a Java application that uses the Java Swing library. The basic design is based on the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] model. | FreeMind is a Java application that uses the Java Swing library. The basic design is based on the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] model. | ||
It's central graphic components ( | It's central graphic components (<tt>MapView</tt> and <tt>NodeView</tt>) allow displaying of arbitrary map implementations implementing interface <tt>[[#MindMap|MindMap]]</tt> extending swing interface <tt>TreeModel</tt>. The implementations include currently | ||
* | *<tt>MindMapMapModel</tt> used for editing of mind maps, | ||
* | *<tt>BrowseMapModel</tt> used for displaying a mind map in a browser or in a so-called browse mode, | ||
* | *<tt>FileMapModel</tt> used for displaying of file directory tree as a mind map. | ||
All kinds of | All kinds of <tt>[[#MindMap|MindMap]]</tt> use <tt>[[#MindMapNode |MindMapNode ]]</tt> for representing a single node. | ||
Different modes are equipped with mode controllers implementing interface | Different modes are equipped with mode controllers implementing interface <tt>ModeController</tt>. The mode controllers are responsible for registering of Actions, Menu Items, Hot Keys and Mouse Listeners which are available for the user. The mode controller of the edit mode <tt>MindMapMode</tt> takes the required menu structure from file <tt>mindmap_menus.xml</tt>. It can also include classes registered as [[#Plug-Ins|Plug-Ins]] and loaded at the run-time using reflection. | ||
It makes possible to create a relatively compact freemindbrowser.jar that can be used in the applet viewer with a subset of the classes that makeup the whole FreeMind program. | It makes possible to create a relatively compact freemindbrowser.jar that can be used in the applet viewer with a subset of the classes that makeup the whole FreeMind program. | ||
Line 36: | Line 36: | ||
=== Controller === | === Controller === | ||
The | The <code>Controller</code> and mode controller classes set up all the <code>Action</code>s that are used to respond to user input and make changes to the model. | ||
The main | The main <code>Controller</code> class needs a <code>FreeMindFrame</code> for it's constructor. <code>FreeMindFrame</code> is an <code>Interface</code>. This gives Controller the ability to call back into the <code>FreeMind</code> class which implements <code>FreeMindMain</code>. | ||
* [[talk:Program design#Implementation of the Model View Controller pattern can be revisited|See discussion page]] for more. | * [[talk:Program design#Implementation of the Model View Controller pattern can be revisited|See discussion page]] for more. | ||
Line 52: | Line 52: | ||
=== Plug-Ins=== | === Plug-Ins=== | ||
The plug-ins allows adding of new operations capsuled in their own components without changing code of controller for registering and managing them. Such plug-ins are saved in directory | The plug-ins allows adding of new operations capsuled in their own components without changing code of controller for registering and managing them. Such plug-ins are saved in directory "accessories". Even the note is implemented as a plug-in. | ||
The plug-ins also provide additional functions that aren't needed by everyone. For instance, the SVG plug-in gives you the capability of exporting your Mind Maps to SVG format. These modules are left out of the minimum download configurations in order to save space. | The plug-ins also provide additional functions that aren't needed by everyone. For instance, the SVG plug-in gives you the capability of exporting your Mind Maps to SVG format. These modules are left out of the minimum download configurations in order to save space. | ||
Line 59: | Line 59: | ||
Freemind is started by invoking a script: | Freemind is started by invoking a script: | ||
{| class= | {| class="wikitable" border="1" cellpadding="5" | ||
|+ Starting Scripts | |+ Starting Scripts | ||
|- | |- | ||
Line 68: | Line 68: | ||
| freemind.sh | | freemind.sh | ||
|} | |} | ||
#The main class invoked by the script is: | #The main class invoked by the script is: <code>freemind.main.FreeMindStarter</code> | ||
# | #<code>FreeMindStarter</code> checks the Java version and then invokes <code>Freemind.main</code>. | ||
#The | #The <code>Freemind</code> takes care of initialization, setting the look and feel, loads maps and makes the GUI visible. | ||
#* It might make some sense to refactor this class, it's very large and complicated. - [[User:Rben13|Rben13]] | #* It might make some sense to refactor this class, it's very large and complicated. - [[User:Rben13|Rben13]] | ||
#* Currently the tabs and tab management are implemented as | #* Currently the tabs and tab management are implemented as <code>FreeMindStarter</code>inner classes. Is it good? - [[User:DimitriPolivaev|DimitriPolivaev]] | ||
#As soon as the frame is created (or the applet is displayed), its event loop takes control over. The starter threads ends at this point | #As soon as the frame is created (or the applet is displayed), its event loop takes control over. The starter threads ends at this point | ||
Revision as of 19:11, 18 November 2010
Architecture Design
FreeMind is a Java application that uses the Java Swing library. The basic design is based on the Model-View-Controller model.
It's central graphic components (MapView and NodeView) allow displaying of arbitrary map implementations implementing interface MindMap extending swing interface TreeModel. The implementations include currently
- MindMapMapModel used for editing of mind maps,
- BrowseMapModel used for displaying a mind map in a browser or in a so-called browse mode,
- FileMapModel used for displaying of file directory tree as a mind map.
All kinds of MindMap use MindMapNode for representing a single node.
Different modes are equipped with mode controllers implementing interface ModeController. The mode controllers are responsible for registering of Actions, Menu Items, Hot Keys and Mouse Listeners which are available for the user. The mode controller of the edit mode MindMapMode takes the required menu structure from file mindmap_menus.xml. It can also include classes registered as Plug-Ins and loaded at the run-time using reflection.
It makes possible to create a relatively compact freemindbrowser.jar that can be used in the applet viewer with a subset of the classes that makeup the whole FreeMind program.
Model
MindMap
MindMapNode
Filtering
Edge Models
Links
Clouds
Atributes
Attribute Registry
Model Events
View
MapView
NodeView
Edges
Filtered Nodes
Attribute Table
Clouds
Link Views
Layout Managers
Controller
The Controller
and mode controller classes set up all the Action
s that are used to respond to user input and make changes to the model.
The main Controller
class needs a FreeMindFrame
for it's constructor. FreeMindFrame
is an Interface
. This gives Controller the ability to call back into the FreeMind
class which implements FreeMindMain
.
- See discussion page for more.
Modes
Actions
Undo Implementation
XML-Serialization
Listeners
Controller Events
Filter Controller
Configuration (Preferences)
Plug-Ins
The plug-ins allows adding of new operations capsuled in their own components without changing code of controller for registering and managing them. Such plug-ins are saved in directory "accessories". Even the note is implemented as a plug-in.
The plug-ins also provide additional functions that aren't needed by everyone. For instance, the SVG plug-in gives you the capability of exporting your Mind Maps to SVG format. These modules are left out of the minimum download configurations in order to save space.
Startup
Freemind is started by invoking a script:
Windows | freemind.bat |
---|---|
Linux | freemind.sh |
- The main class invoked by the script is:
freemind.main.FreeMindStarter
FreeMindStarter
checks the Java version and then invokesFreemind.main
.- The
Freemind
takes care of initialization, setting the look and feel, loads maps and makes the GUI visible.- It might make some sense to refactor this class, it's very large and complicated. - Rben13
- Currently the tabs and tab management are implemented as
FreeMindStarter
inner classes. Is it good? - DimitriPolivaev
- As soon as the frame is created (or the applet is displayed), its event loop takes control over. The starter threads ends at this point