Changes in / [bdb143:13892b]


Ignore:
Location:
src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/CommandLineParser.hpp

    rbdb143 r13892b  
    1717#include <list>
    1818
     19/** This class is a wrapper for boost::program_options.
     20 *
     21 * <h1> CommandLine Howto </h1>
     22 * <h2> Introduction </h2>
     23 *
     24 * The UIFactory is a base class for the User Interaction. There are three UI specializations:
     25 * Text, GUI and CommandLine. Accessing functionality via the CommandLine UI is explained here.
     26 *
     27 * First, an Action has to be written for the specific functionality. This Action should
     28 * be added in Actions/...Action in the respective subdirectory of the following types:
     29 *  -# Analysis: Analysis actions like evaluating pair correlation, bonds, ...
     30 *  -# Atom: adding, removing, manipulating atoms
     31 *  -# Cmd: specifying data bases, verbosity, ...
     32 *  -# Fragmentation: fragmenting a system, performing graph analysis, ...
     33 *  -# Molecule: adding, removing, manipulating molecules
     34 *  -# Parser: Parsing files (loading, saving)
     35 *  -# Tesselation: obtaining (non)convex surface of a molecule, embedding, ...
     36 *  -# World: Setting Box dimensions, default name of new molecules, ...
     37 *
     38 *  The CommandLineUIFactory is a specialization of the UIFactory for parsing command
     39 *  line parameters, generating and executing actions there from.
     40 *
     41 *  The idea of the CommandLineFactory is explained elsewhere, here we would like to give a
     42 *  receipe for creating new actions.
     43 *
     44 * <h3>Introducing new actions</h3>
     45 *
     46 * Let us now introduce what to do if a new action is to be implemented. Here, we use the
     47 * CommandLineVersionAction as an example.
     48 * This consists if basically three parts:
     49 * 1. Create the files, write the classes and make them compilable
     50 *   - Create new source and header files in one of the above subfolders in the Actions folder,
     51 *     e.g. create VersionAction.cpp and VersionAction.hpp in Actions/Cmd/
     52 *   - Give it a sensible class name, the convention is <type><what it does>Action,
     53 *     where <type> is basically the naming (written out) of the subdirectory,
     54 *     e.g. class CommandLineVersionAction.
     55 *   - Add the source and header file to the respective variables in molecuilder/src/Makefile.am,
     56 *     e.g. if you add a Cmd action the variables are CMDACTIONSOURCE and CMDACTIONHEADER,
     57 *     such that they get compiled.
     58 * 2. Add an instance to the CommandLineUIFactory, such that they are known to the UI.
     59 *   - Add the header file as an include to UIElements/CommandLineWindow.cpp, e.g.
     60 *     #include "Actions/Cmd/VersionAction.hpp"
     61 *   - Add an instance of your class to the specific populater-function in
     62 *     UIElements/CommandLineWindow.cpp, e.g. for the above Cmd action, add to populateCmdActions()
     63 *     add new CommandLineVersionAction().
     64 *     This will automatically register in the ActionRegistry.
     65 * 3. Give them an option name, short hand an description, such that they can be referenced from
     66 *    the command line.
     67 *   - think of a new key name, e.g. "version", which is the long form of the command parameter,
     68 *     i.e. --version).
     69 *   - add this key to every map of MapofActions, i.e. to
     70 *     - MapofActions::DescriptionMap: the description which appears as help and tooltip
     71 *     - MapofActions::ShortFormMap: the short form of the command parameter (e.g. -v)
     72 *     - MapofActions::ValueMap: the value the command parameter has (do not create if it does not need one)
     73 *   - If your action requires additional parameters, these need to be added in the same manner as in
     74 *     the list item above.
     75 *
     76 *  Don't forget to write the actual code. :)
     77 *
     78 * <h3>Writing an action</h3>
     79 *
     80 *  As you write a new action you may think in terms of the command line, i.e. you want to use this
     81 *  new functionality you add by calling molecuilder as: ./molecuilder --super-action foobar.txt, where
     82 *  the key of your new action would be "super-action". While this is fine, keep in mind, that your action
     83 *  should be useable for the other UI specializations as well, i.e. from the menu and the GUI. Therefore,
     84 *  -# Don't use cin to ask the user for input: Use Query...()!
     85 *  -# Rather don't use cout/cerrs, but either give Log() or eLog() or use QueryEmpty() if you want to give
     86 *     the user specific information what you ask of him.
     87 *
     88 */
    1989class CommandLineParser : public Singleton<CommandLineParser> {
    2090  friend class Singleton<CommandLineParser>;
  • src/UIElements/CommandLineUI/CommandLineUIFactory.hpp

    rbdb143 r13892b  
    1111#include "UIFactory.hpp"
    1212
     13/** This class is a specialization of the UIFactory.
     14 *
     15 * <h2> Introduction </h2>
     16 *
     17 * The UIFactory is a base class for the User Interaction. There are three UI specializations:
     18 * Text, GUI and CommandLine.
     19 *
     20 * The idea of the command line part is as follows:
     21 *
     22 * All actions that can be called from the command line are instantiated via populater-functions.
     23 * In the constructor of an action it is automatically registered with the ActionRegistry and can
     24 * henceforth be looked up there.
     25 *
     26 * There is a CommandLineParser which parses the command line parameters and puts all found values
     27 * into a map. Then, MainWindow::Display of the CommandLineUIFactory is called, which goes through
     28 * every action (by the ActionRegistry) and looks through the parsed commands whether the action is
     29 * desired.
     30 *
     31 * In the action itself, Query's ask for user input. In the CommandLine case, we don't want direct
     32 * user interaction, but the user has to have those values already delivered along with the desired
     33 * action. Hence, the Query implementations just look up the desired values in the CommandLineParser
     34 * vaults. When they are not found, an exception is thrown. When all are found, the action is performed.
     35 *
     36 */
    1337class CommandLineUIFactory : public UIFactory
    1438{
  • src/UIElements/Dialog.hpp

    rbdb143 r13892b  
    1818class Vector;
    1919
     20
     21/** Dialog is one of the two main classes of the UIFactory base class.
     22 *
     23 * The Dialog is meant for asking the user for information needed to perform actions he
     24 * desires, such as asking for a position in space or a length.
     25 *
     26 * For this purpose there is the base class Query and numerous specializations for each
     27 * of the types to be asked. There are primitives integer, doubles and string, but also
     28 * advanced types such as element, molecule or Vector. There is also an empty query for
     29 * displaying text.
     30 */
    2031class Dialog
    2132{
  • src/UIElements/UIFactory.hpp

    rbdb143 r13892b  
    2525 * only create UIelements of that certain type, so that all UIElements match. This way different
    2626 * UIs can be handled in a concise abstract way.
     27 *
     28 * The main functionality is the MainWindow and the Dialog.
     29 *
     30 * MainWindow basically is the framework if the UI. The MainWindow has a run function which is
     31 * called MainWindow::Display(), which will listen for user input and react to it via actions for
     32 * as long as the user desires or tells the MainWindow to quit.
     33 *
     34 * Within the MainWindow Dialog classes may be instantiated which ask the user for input to
     35 * certain actions he wants to perform.
     36 *
    2737 */
    2838class UIFactory : public Singleton<UIFactory,false>
Note: See TracChangeset for help on using the changeset viewer.