| [ce133f] | 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 | /** | 
|---|
| [19bc74] | 9 | * \file actions.dox | 
|---|
| [ce133f] | 10 | * | 
|---|
| [19bc74] | 11 | * Created on: Oct 28, 2011 | 
|---|
| [ce133f] | 12 | *    Author: heber | 
|---|
|  | 13 | */ | 
|---|
| [750cff] | 14 |  | 
|---|
|  | 15 | /** \page actions Actions | 
|---|
|  | 16 | * | 
|---|
| [b2c302] | 17 | *  \link MoleCuilder::Action Actions \endlink are Command patterns | 
|---|
|  | 18 | *  (http://en.wikipedia.org/wiki/Command_pattern) | 
|---|
| [750cff] | 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 | * | 
|---|
| [b2c302] | 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 | 
|---|
| [750cff] | 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 | * | 
|---|
| [57dd40] | 50 | * \section actions-undo-redo Undoing and Redoing actions ... | 
|---|
| [750cff] | 51 | * | 
|---|
| [57dd40] | 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 | * | 
|---|
| [b2c302] | 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 | * | 
|---|
| [57dd40] | 71 | * | 
|---|
|  | 72 | *  \date 2012-04-05 | 
|---|
| [750cff] | 73 | * | 
|---|
|  | 74 | */ | 
|---|