| [b2c302] | 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 values.dox | 
|---|
|  | 10 | * | 
|---|
|  | 11 | * Created on: Mar 16, 2012 | 
|---|
|  | 12 | *    Author: heber | 
|---|
|  | 13 | */ | 
|---|
|  | 14 |  | 
|---|
|  | 15 | /** | 
|---|
|  | 16 | * \page values Values from the user to the Action | 
|---|
|  | 17 | * | 
|---|
|  | 18 | * The way from a value to end up as a option value/parameter inside an | 
|---|
|  | 19 | * \link MoleCuilder::Action Action \endlink ist rather complex. Hence, | 
|---|
|  | 20 | * let us briefly sketch the complete path, ranging from the \link | 
|---|
|  | 21 | * userinterfaces User Interface \endlink to the Action. | 
|---|
|  | 22 | * | 
|---|
|  | 23 | * \section value-from-ui From the user interface ... | 
|---|
|  | 24 | * | 
|---|
|  | 25 | * The user may enter a value either in ... | 
|---|
|  | 26 | *  -# a command line option, e.g. ...--position "0,1,2" ... | 
|---|
|  | 27 | *  -# a text interface, e.g. "Which position:" "0,1,2" | 
|---|
|  | 28 | *  -# a GUI dialog: Placing "0,1,2" in some text box or alike. | 
|---|
|  | 29 | * | 
|---|
|  | 30 | * This is handled by a class derived from a \ref Dialog::Query and all queries | 
|---|
|  | 31 | * of a specific Action are placed into a \ref Dialog. A \ref Dialog::Query | 
|---|
|  | 32 | * may e.g. be \ref TextDialog::VectorTextQuery. This class is derived from | 
|---|
|  | 33 | * \ref Dialog::VectorQuery which is derived from Query. | 
|---|
|  | 34 | * | 
|---|
|  | 35 | * The \ref Dialog::Query instance has a member Query::tmp which eventually | 
|---|
|  | 36 | * contains the value of a specific type (here Vector) from the user. | 
|---|
|  | 37 | * TextDialog::VectorTextQuery::handle() asks the user in some way for the value, | 
|---|
|  | 38 | * Dialog::VectorQuery::setResult() places Dialog::VectorQuery::tmp into the | 
|---|
|  | 39 | * \ref ValueStorage. This is done under a specific token which the Query | 
|---|
|  | 40 | * knows via its cstor: Query::title. | 
|---|
|  | 41 | * | 
|---|
|  | 42 | * ValueStorage does not take any value but only those it knows and more | 
|---|
|  | 43 | * specifically whose type it knows. I.e. for each option it has to know | 
|---|
|  | 44 | * a token and a name. These are contained in instances of \ref OptionTrait. | 
|---|
|  | 45 | * The list of these instances is contained in \ref ActionTrait which each | 
|---|
|  | 46 | * specialized \link MoleCuilder::Action Action \endlink gets on construction. | 
|---|
|  | 47 | * In Action's cstor these Trait's are registered with the \ref ActionRegistry | 
|---|
|  | 48 | * and the \ref OptionRegistry. | 
|---|
|  | 49 | * | 
|---|
|  | 50 | * And the OptionRegistry is then the place where \ref ValueStorage checks | 
|---|
|  | 51 | * whether token and type (the value) given to it are correct. This is required | 
|---|
|  | 52 | * to ensure that only a specific type is associated with each token. If another | 
|---|
|  | 53 | * type is needed simply think of a new token. | 
|---|
|  | 54 | * | 
|---|
|  | 55 | * \section value-from-action ... into the Action | 
|---|
|  | 56 | * | 
|---|
|  | 57 | * Now the value rests inside the ValueStorage as a string with a known type. | 
|---|
|  | 58 | * Every \link MoleCuilder::Action Action \endlink in its Action::performCall() | 
|---|
|  | 59 | * call Action::getParametersFromValueStorage() which fills an internal | 
|---|
|  | 60 | * Action::params structure (that is constructed as most of the other stuff | 
|---|
|  | 61 | * in an action via boost::preprocessor magic). This is then used by the | 
|---|
|  | 62 | * Action to know that the token "position" with value "0,1,2" which the user | 
|---|
|  | 63 | * supplied are meant to place a new atom at (0,1,2) (\ref AddAtomAction). It | 
|---|
|  | 64 | * takes the value from AtomAddAction::params::position (all these information | 
|---|
|  | 65 | * is stored in \ref AddAction.def). | 
|---|
|  | 66 | * | 
|---|
|  | 67 | * | 
|---|
|  | 68 | * \date 2012-03-16 | 
|---|
|  | 69 | * | 
|---|
|  | 70 | */ | 
|---|