| 1 | /* | 
|---|
| 2 | * Project: MoleCuilder | 
|---|
| 3 | * Description: creates and alters molecular systems | 
|---|
| 4 | * Copyright (C)  2010 University of Bonn. All rights reserved. | 
|---|
| 5 | * Please see the LICENSE file or "Copyright notice" in builder.cpp for details. | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | /** | 
|---|
| 9 | * \file actions.dox | 
|---|
| 10 | * | 
|---|
| 11 | * Created on: Oct 28, 2011 | 
|---|
| 12 | *    Author: heber | 
|---|
| 13 | */ | 
|---|
| 14 |  | 
|---|
| 15 | /** \page actions Actions | 
|---|
| 16 | * | 
|---|
| 17 | *  Actions are Command patterns (http://en.wikipedia.org/wiki/Command_pattern) | 
|---|
| 18 | *  to allow for undoing and redoing. Each specific Action derives from this | 
|---|
| 19 | *  class to implement a certain functionality. There is a lot of preprocessor | 
|---|
| 20 | *  magic implemented for making this as easy as possible. In effect you only | 
|---|
| 21 | *  have to create three files of which only one actually contains more than a | 
|---|
| 22 | *  few lines, namely the code of the Action itself. | 
|---|
| 23 | * | 
|---|
| 24 | *  Each Action has thus three types of functionalty: do, undo, and redo. | 
|---|
| 25 | * | 
|---|
| 26 | *  The ActionRegistry contains a prototype of each Action under its token | 
|---|
| 27 | *  such that an instance can be retrieved by knowing this token. | 
|---|
| 28 | * | 
|---|
| 29 | *  Each Action obtains its parameter from a central ValueStorage such that | 
|---|
| 30 | *  they are independent of where the parameter originated from: a command line | 
|---|
| 31 | *  parameter, a value entered in a graphical dialog or given via the keyboard | 
|---|
| 32 | *  in a terminal. That's why each begins with a function call to | 
|---|
| 33 | *  getParametersfromValueStorage() to fill its internal Action::params | 
|---|
| 34 | *  structure. | 
|---|
| 35 | * | 
|---|
| 36 | *  Also there is a regression test (\ref regression-test) for each Action to | 
|---|
| 37 | *  check that it always behaves the same no matter how much the code | 
|---|
| 38 | *  implementing actually has changed. | 
|---|
| 39 | * | 
|---|
| 40 | * \section actions-add To add a new action ... | 
|---|
| 41 | * | 
|---|
| 42 | *  The following steps have to be done for adding a new action: | 
|---|
| 43 | *  -# Create three new files .cpp, .def, and .hpp | 
|---|
| 44 | *  -# Add the files to \b src/Actions/Makefile.am. | 
|---|
| 45 | *  -# Add the name of the Action to \b src/Actions/GlobalListOfActions.hpp | 
|---|
| 46 | *    such that the ActionRegistry knows about it and can instantiate a | 
|---|
| 47 | *    prototype. | 
|---|
| 48 | * | 
|---|
| 49 | * | 
|---|
| 50 | *  \date 2011-10-31 | 
|---|
| 51 | * | 
|---|
| 52 | */ | 
|---|