Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/overview.dox

    r444 r302  
    1111 * Note, that to be able to understand the code most effectively, it
    1212 * is important to either use the application actively, or to read its
    13  * user documentation carefully.
     13 * user documentation carefully. 
    1414 *
    1515 * \section overview Overview
    1616 *
    17  * The application was written in
     17 * The application was written in 
    1818 * <a href="http://python.org">Python 2</a>. The Python wrapper
    1919 * <a href="http://gtk.org">Gtk+</a> toolkit was used for the graphical
     
    2323 * as the primary toolkit, while it has no reliable port for Windows
    2424 * yet. Therefore it was decided to support both Gtk+ 2 and 3
    25  * depending on the platform. For Gtk+ 2 the
     25 * depending on the platform. For Gtk+ 2 the 
    2626 * <a href="http://pygtk.org">PyGTK</a> wrapper is used, while for Gtk+
    2727 * 3 the <a href="https://live.gnome.org/PyGObject">PyGObject</a>
     
    3333 * <a href="http://www.schiratti.com/dowson.html">FSUIPC</a>
    3434 * interface. The author has created a Python mapping for it, which
    35  * has been submitted for inclusion into the SDK, so it will hopefully
     35 * has been submitted for inclusion into the SDK, so it will hopefully 
    3636 * appear in its next version. It is planned to support X-Plane in the
    3737 * near future (hopefully by the end of 2012) on both Linux and
     
    4545 * Gtk+ and Gtk+ itself. Since Python is an interpreted language,
    4646 * there is no need for any special build system.
    47  *
     47 * 
    4848 * Python and Gtk+ are readily available on most Linux distributions,
    4949 * but some links are probably useful for Windows users:
     
    5454 * \li To create install packages, you also need py2exe: <a href="http://www.py2exe.org/">http://www.py2exe.org</a>,
    5555 * \li as well as the Nullsoft Install System: http://nsis.sourceforge.net/Main_Page
    56  *
     56 * 
    5757 * The install package can be created by running the \c makeinst.bat
    5858 * file. It contains some absolute paths, so check those befure
     
    8181 *    thread. Instead, use \c gobject.idle_add to "inject" the
    8282 *    operation into the main thread.
    83  * -# To ensure the responsiveness of the GUI, only operations
     83 * -# To ensure the responsiveness of the GUI, only operations 
    8484 *    that take a short time should be executed in the GUI thread.
    8585 *
     
    9898 * simulator is to be supported, a class with the same (or at least
    9999 * sufficiently similar) public interface should be implemented.
    100  *
     100 *             
    101101 * The most important function of the program is the
    102102 * continuous monitoring of the aircraft's parameters and some other
    103103 * data. The monitoring is started using the \ref
    104104 * mlx.fsuipc.Simulator.startMonitoring "startMonitoring" function of
    105  * the simulator object. If started, it calls the \ref
     105 * the simulator object. If started, it calls the \ref 
    106106 * mlx.acft.Aircraft.handleState "handleState" function of the
    107107 * mlx.acft.Aircraft instance used. The mlx.acft module contains one
     
    114114 * smoothed values of IAS and VS, and then calls each "checker". A
    115115 * checker is an instance of a subclass of mlx.checks.StateChecker,
    116  * which checks a one or a few parameters that are important from some
     116 * which checks a one or a few parameters that are important from some 
    117117 * aspect of the correct execution of a flight. For example, a checker
    118  * may check if the \ref mlx.checks.StrobeLightsChecker
     118 * may check if the \ref mlx.checks.StrobeLightsChecker 
    119119 * "strobe lights" are switched on and off at the right stages of the
    120120 * flight. But some checkers simply log some \ref
    121121 * mlx.checks.AltimeterLogger "value" whenever it changes
    122122 * in an "interesting" way, or \ref mlx.checks.ACARSSender "send the
    123  * ACARS" periodically.
     123 * ACARS" periodically. 
    124124 *
    125125 * There is also a \ref mlx.checks.StageCheker "checker" which
    126126 * detects the changes in the stage of the flight, and calls the
    127127 * \ref mlx.acft.Aircraft.setStage "setStage" function of the
    128  * aircraft, if there is a change. It first calls the
     128 * aircraft, if there is a change. It first calls the 
    129129 * \ref mlx.flight.Flight "flight"'s \ref mlx.flight.Flight.setStage
    130130 * "setStage" function, which notifies the GUI and the \ref
     
    139139 * mlx.soundsched.SoundScheduler "sound scheduler" to check if some
    140140 * backround sound should be played. If the check list hotkey is
    141  * pressed, the \ref mlx.soundsched.ChecklistScheduler
     141 * pressed, the \ref mlx.soundsched.ChecklistScheduler 
    142142 * "checklist scheduler" is notified too.
    143143 *
    144144 * As mentioned, there is a \ref mlx.logger.Logger "logger" in the
    145145 * application, which contains the textual log lines as well as the
    146  * faults and their scores.
     146 * faults and their scores. 
    147147 *
    148148 * The business logic part contains many other components, but they
     
    151151 * modules for more information.
    152152 *
    153  * \subsection arch_gui GUI
     153 * \subsection arch_gui GUI     
    154154 *
    155155 * As mentioned, the GUI is implemented using Gtk+. This toolkit
     
    158158 * experience with Glade in an earlier project, it was decided to not
    159159 * use it. Instead, the GUI elements are created and handled by
    160  * hand-written code.
     160 * hand-written code. 
    161161 *
    162162 * The central class of the graphical user interface is
     
    165165 * connection to the simulator and creates the \ref mlx.flight.Flight
    166166 * "flight" and \ref mlx.flight.Aircraft "aircraft" objects as
    167  * needed.
     167 * needed. 
    168168 *
    169169 * To understand the operation of the GUI, one should be familiar with
    170170 * Gtk+, but otherwise it is pretty straighforward. See the
    171  * documentation of the relevant modules for more information.
    172  *
    173  * \section newtype Adding a new aircraft type
    174  *
    175  * While new aircraft types will probably not be added too often, here
    176  * is a checklist about what should be modified when such a
    177  * requirement arises.
    178  *
    179  * First, it is worth to know what data you need to add the new type:
    180  *
    181  * \li the aircraft's type name and its ICAO code
    182  * \li the following weights: DOW, MZFW, MTOW, MLW
    183  * \li the flap settings and their speed limits
    184  * \li the speed limit for extending/retracting the gear (VLE)
    185  * \li the number and types of the fuel tanks
    186  * \li the type code the MAVA website uses to identify the type
    187  * \li if the plane has reversers, what is the operating limit speed,
    188  *     if any
    189  * \li does the plane support the notion of a takeoff derate, and if
    190  *     so, what data should be given
    191  * \li what lights does the plane have
    192  *
    193  * If you have the data, you can add the type by modifying the source
    194  * files as per the checklist below:
    195  *
    196  * -# \c src/mlx/const.py: look for the constants named AIRCRAFT_xxx.
    197  *    Add the new type at the end of the list of those constants, with
    198  *    a number 1 greater than the number of the last existing
    199  *    type. The part of the constant's name after the underscore (xxx
    200  *    above) should be the ICAO code of the aircraft type.
    201  * -# \c src/mlx/const.py: below this list of constants, you can find
    202  *    an array named \c aircraftTypes. Add the type constant to it.
    203  * -# \c src/mlx/const.py: further below you can find a dictionary
    204  *    mapping te aircraft type to the corresponding ICAO codes. Add
    205  *    the new type to it.
    206  * -# \c src/mlx/acft.py: add a new subclass of \ref
    207  *    mlx.acft.Aircraft. Its name should be the ICAO code. Check an
    208  *    existing aircraft and add the same variables containing the
    209  *    weights, the flap speed limits and the gear speed limit. There
    210  *    may be some other member variables or functions that should be
    211  * -# \c src/mlx/acft.py: there is a dictionary named \c _classes
    212  *    towards the end of the file. Add the type to it.
    213  * -# \c src/mlx/web.py: the \ref mlx.web.BookedFlight class contains
    214  *    two dictionaries, the mapping between the types and the values the MAVA
    215  *    website uses to identify the type. Add the appropriate values
    216  *    here.
    217  * -# \c src/mlx/fsuipc.py: add a subclass of \ref
    218  *    mlx.fsuipc.GenericAircraftModel for the new type named the ICAO
    219  *    code of the type followed by the word \c Model. Implement its
    220  *    constructor to supply the base class with the flaps notches
    221  *    (starting with 0), the array of constants describing the fuel
    222  *    tanks the model has, and the number of engines. Also implement
    223  *    the name of the model, which should be something like
    224  *    "FSUIPC/Generic ...". If necessary implement other functions or
    225  *    set other members.
    226  * -# \c src/mlx/fsuipc.py: add the new type and model class to the
    227  *    dictionary named \c _genericModels towards the end of the file.
    228  * -# \c src/mlx/fsuipc.py: if you have a model that has some
    229  *    non-generic characteristics, create a specific class for
    230  *    it. This class should be a subclass of the generic class
    231  *    created, and it should be registered at the bottom of the file,
    232  *    as the other models are.
    233  * -# \c src/mlx/gui/common.py: this file contains a dictionary called
    234  *    \c mlx.gui.common.aircraftNames. Add the new type it it. It
    235  *    contains the mapping from the type constants to their
    236  *    language-specific names. The string ID is "aircraft_" followed by
    237  *    the lower-cased ICAO code.
    238  * -# \c locale/hu/mlx.po, locale/en/mlx.po: the beginning of this
    239  *    file contains mapping from the string ID previously used to the
    240  *    actual name of the aircraft. Add the new type as appropriate.
    241  * -# \c dcdatagen.py: this program generates some source and message
    242  *    files related to the delay codes. Currently there are two
    243  *    tables, one for old-timer types and the other for the "modern" types.
    244  *    The file contains a list of lists called \c typeGroups. Add the
    245  *    type's ICAO code the appropriate list.
    246  *
    247  * When all the changes have been made, run \c make in the root
    248  * directory to update some source files.
     171 * documentation of the relevant modules for more information.
    249172 */
     173 
Note: See TracChangeset for help on using the changeset viewer.