- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/overview.dox
r302 r444 11 11 * Note, that to be able to understand the code most effectively, it 12 12 * is important to either use the application actively, or to read its 13 * user documentation carefully. 13 * user documentation carefully. 14 14 * 15 15 * \section overview Overview 16 16 * 17 * The application was written in 17 * The application was written in 18 18 * <a href="http://python.org">Python 2</a>. The Python wrapper 19 19 * <a href="http://gtk.org">Gtk+</a> toolkit was used for the graphical … … 23 23 * as the primary toolkit, while it has no reliable port for Windows 24 24 * 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 26 26 * <a href="http://pygtk.org">PyGTK</a> wrapper is used, while for Gtk+ 27 27 * 3 the <a href="https://live.gnome.org/PyGObject">PyGObject</a> … … 33 33 * <a href="http://www.schiratti.com/dowson.html">FSUIPC</a> 34 34 * 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 36 36 * appear in its next version. It is planned to support X-Plane in the 37 37 * near future (hopefully by the end of 2012) on both Linux and … … 45 45 * Gtk+ and Gtk+ itself. Since Python is an interpreted language, 46 46 * there is no need for any special build system. 47 * 47 * 48 48 * Python and Gtk+ are readily available on most Linux distributions, 49 49 * but some links are probably useful for Windows users: … … 54 54 * \li To create install packages, you also need py2exe: <a href="http://www.py2exe.org/">http://www.py2exe.org</a>, 55 55 * \li as well as the Nullsoft Install System: http://nsis.sourceforge.net/Main_Page 56 * 56 * 57 57 * The install package can be created by running the \c makeinst.bat 58 58 * file. It contains some absolute paths, so check those befure … … 81 81 * thread. Instead, use \c gobject.idle_add to "inject" the 82 82 * 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 84 84 * that take a short time should be executed in the GUI thread. 85 85 * … … 98 98 * simulator is to be supported, a class with the same (or at least 99 99 * sufficiently similar) public interface should be implemented. 100 * 100 * 101 101 * The most important function of the program is the 102 102 * continuous monitoring of the aircraft's parameters and some other 103 103 * data. The monitoring is started using the \ref 104 104 * 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 106 106 * mlx.acft.Aircraft.handleState "handleState" function of the 107 107 * mlx.acft.Aircraft instance used. The mlx.acft module contains one … … 114 114 * smoothed values of IAS and VS, and then calls each "checker". A 115 115 * 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 117 117 * 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 119 119 * "strobe lights" are switched on and off at the right stages of the 120 120 * flight. But some checkers simply log some \ref 121 121 * mlx.checks.AltimeterLogger "value" whenever it changes 122 122 * in an "interesting" way, or \ref mlx.checks.ACARSSender "send the 123 * ACARS" periodically. 123 * ACARS" periodically. 124 124 * 125 125 * There is also a \ref mlx.checks.StageCheker "checker" which 126 126 * detects the changes in the stage of the flight, and calls the 127 127 * \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 129 129 * \ref mlx.flight.Flight "flight"'s \ref mlx.flight.Flight.setStage 130 130 * "setStage" function, which notifies the GUI and the \ref … … 139 139 * mlx.soundsched.SoundScheduler "sound scheduler" to check if some 140 140 * 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 142 142 * "checklist scheduler" is notified too. 143 143 * 144 144 * As mentioned, there is a \ref mlx.logger.Logger "logger" in the 145 145 * application, which contains the textual log lines as well as the 146 * faults and their scores. 146 * faults and their scores. 147 147 * 148 148 * The business logic part contains many other components, but they … … 151 151 * modules for more information. 152 152 * 153 * \subsection arch_gui GUI 153 * \subsection arch_gui GUI 154 154 * 155 155 * As mentioned, the GUI is implemented using Gtk+. This toolkit … … 158 158 * experience with Glade in an earlier project, it was decided to not 159 159 * use it. Instead, the GUI elements are created and handled by 160 * hand-written code. 160 * hand-written code. 161 161 * 162 162 * The central class of the graphical user interface is … … 165 165 * connection to the simulator and creates the \ref mlx.flight.Flight 166 166 * "flight" and \ref mlx.flight.Aircraft "aircraft" objects as 167 * needed. 167 * needed. 168 168 * 169 169 * To understand the operation of the GUI, one should be familiar with 170 170 * Gtk+, but otherwise it is pretty straighforward. See the 171 * documentation of the relevant modules for more information. 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. 172 249 */ 173
Note:
See TracChangeset
for help on using the changeset viewer.