| 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 | *  \link MoleCuilder::Action Actions \endlink are Command patterns | 
|---|
| 18 | *  (http://en.wikipedia.org/wiki/Command_pattern) | 
|---|
| 19 | *  to allow for undoing and redoing. Each specific Action derives from this | 
|---|
| 20 | *  class to implement a certain functionality. There is a lot of preprocessor | 
|---|
| 21 | *  magic implemented for making this as easy as possible. In effect you only | 
|---|
| 22 | *  have to create three files of which only one actually contains more than a | 
|---|
| 23 | *  few lines, namely the code of the Action itself. | 
|---|
| 24 | * | 
|---|
| 25 | *  Each Action has thus three types of functionalty: do, undo, and redo. | 
|---|
| 26 | * | 
|---|
| 27 | *  The ActionRegistry contains a prototype of each Action under its token | 
|---|
| 28 | *  such that an instance can be retrieved by knowing this token. | 
|---|
| 29 | * | 
|---|
| 30 | *  Each Action obtains its options from a central ValueStorage such that | 
|---|
| 31 | *  they are independent of where the option originated from: a command line | 
|---|
| 32 | *  parameter, a value entered in a graphical dialog or given via the keyboard | 
|---|
| 33 | *  in a terminal. That's why each begins with a function call to | 
|---|
| 34 | *  getParametersfromValueStorage() to fill its internal Action::params | 
|---|
| 35 | *  structure. | 
|---|
| 36 | * | 
|---|
| 37 | *  Also there is a regression test (\ref regression-test) for each Action to | 
|---|
| 38 | *  check that it always behaves the same no matter how much the code | 
|---|
| 39 | *  implementing actually has changed. | 
|---|
| 40 | * | 
|---|
| 41 | * \section actions-add To add a new action ... | 
|---|
| 42 | * | 
|---|
| 43 | *  The following steps have to be done for adding a new action: | 
|---|
| 44 | *  -# Create three new files .cpp, .def, and .hpp | 
|---|
| 45 | *  -# Add the files to \b src/Actions/Makefile.am. | 
|---|
| 46 | *  -# Add the name of the Action to \b src/Actions/GlobalListOfActions.hpp | 
|---|
| 47 | *    such that the ActionRegistry knows about it and can instantiate a | 
|---|
| 48 | *    prototype. | 
|---|
| 49 | * | 
|---|
| 50 | * \section actions-undo-redo Undoing and Redoing actions ... | 
|---|
| 51 | * | 
|---|
| 52 | * The central points of Actions is that they can be undone and redone. This | 
|---|
| 53 | * has to be implemented in two more functions beside the "do". | 
|---|
| 54 | * | 
|---|
| 55 | * Note that undoing means to get every back to its original state and by whatever | 
|---|
| 56 | * means seem appropriate, e.g. just remvoing all inserted atoms. | 
|---|
| 57 | * To make this more elaborate it is usually very useful to store extra information | 
|---|
| 58 | * in the Action's state such that undo and redo can be accomplished more quickly. | 
|---|
| 59 | * E.g. if your Action creates some new atoms, store their info as \ref AtomicInfo. | 
|---|
| 60 | * Then, undo can simply delete the newly created atoms and redo can quickly re- | 
|---|
| 61 | * create them in the state they have been before. | 
|---|
| 62 | * | 
|---|
| 63 | * Have a look at \ref UndoRedoHelpers.hpp for some helper functions on this. | 
|---|
| 64 | * | 
|---|
| 65 | * \section actions-further Further information | 
|---|
| 66 | * | 
|---|
| 67 | * If you want know: | 
|---|
| 68 | * -# how the code knows about the valid tokens for actions and options and how | 
|---|
| 69 | *    they are constructed, see \ref MoleCuilder::Action . | 
|---|
| 70 | * | 
|---|
| 71 | * | 
|---|
| 72 | *  \date 2012-04-05 | 
|---|
| 73 | * | 
|---|
| 74 | */ | 
|---|