-*- mode: text; coding: utf-8; fill-column: 78; -*-

Prior changes belong to the FGo! program by Robert 'erobo' Leda and are listed
in the file 'ChangeLog.FGo'. For more details about any change listed below,
you may want to consult the Git repository log.

******************************************************************************

1.0.0
[FEATURE] Import the code from FGo! 1.5.5 onwards (Python 2 at that time)
          into a Git repository. (Florent Rougon)
[FEATURE] Port the code to Python 3. (Robert)
[FEATURE] Add the file docs/INSTALL/INSTALL_en to guide users through the
          process of installing the dependencies. (Florent Rougon)
[BUGFIX]  Fix typo in "help_it" file. (Philip Lacroix)
[FEATURE] Add conditional config based on CondConfigParser. This is
          documented for FGo! users in docs/README.conditional-config/.
          (Florent Rougon)
[BUGFIX]  Fix logic behind the Reset button. (Robert)
[FEATURE] Add keyboard shortcuts for "Run FG" (Ctrl-f), "Reset" (Ctrl-r) and
          "Save & Quit" (Ctrl-q). (Florent Rougon)
[FEATURE] Move the "FG is running..." message from the separate "info" window
          to the main window. (Florent Rougon)

    * The separate window was annoying, because when switching from a
    workspace with FlightGear on top and FGo! below, to another workspace and
    back to the initial workspace, the "FG is running..." little window
    appeared on top of FlightGear, which prevented the user from controlling
    it until he explicitely switched to FlightGear's window.

    * The "FG is running..." message is now displayed in red in FGo!'s main
    window (in a Label widget) instead of the separate InfoWindow. When
    FlightGear is not running, this message is replaced by a "Ready"
    indication in green.

    * This new behaviour allows to interact with FGo! while FlightGear is
    running, except for the things that rely on stuff started in
    App.startLoops(). Among others, it makes it possible to modify the
    configuration before the fgfs process is completely terminated. It would
    be possible to keep the loops running even after FlightGear has been
    started, but that would sacrifice a small amount of performance, for IMHO
    very little benefit. I prefer freeing the CPU as much as possible for
    FlightGear.

    * As a bonus, the new Label widget indicates the exit status of the last
    FlightGear run, or the signal number in case the fgfs process was
    terminated by a signal.

    * While FlightGear is running, the "Run FG" button is now greyed out.

[FEATURE] Add preview of FlightGear command. (Robert & Florent Rougon)
[FEATURE] Add FlightGear output window and log saving.
          (Robert & Florent Rougon)
[USABILITY] Remove everything related to running a standalone TerraSync
          program in the background. As TerraSync has been integrated into
          FlightGear several years ago, this feature was probably more
          confusing than useful to users nowadays. (Robert & Florent Rougon)
[FEATURE] Allow the command preview and FG output windows to be detached,
          reattached and hidden. Store their geometry when reattaching,
          closing them or choosing "Save & Quit" to be able to restore it when
          they are later shown again. (Florent Rougon)
[FEATURE] Improve initialization of locales and translations at application
          startup. (Florent Rougon)
[FEATURE] Change USER_DATA_DIR to ~/.ffgo on Unix, %APPDATA%/FFGo on Windows.
          (Florent Rougon)
[FEATURE] New dialogs at application startup to offer to copy FGo!'s config
          file to USER_DATA_DIR when this is safe, start with "factory
          defaults", or abort. (Florent Rougon)
[FEATURE] Rename the 'fgo' script to 'ffgo' in order to avoid confusing users
          concerning the FGo! program distributed by Robert Leda.
          (Florent Rougon)
[USABILITY] Allow closing the Preferences window with the Escape key.
          (Florent Rougon)
[USABILITY] Rename the 'Reset' button to 'Reload config', which is more
          self-explanatory in my opinion. Add a tooltip to this button that
          indicates the config file path. (Florent Rougon)
[USABILITY] Add menu entries in the File menu to reload the config file and to
          run FlightGear. These entries show the new keyboard shortcuts.
[FEATURE] Help files: update installation instructions, add description of new
          features and add a tip about config file reloading.
          (Robert & Florent Rougon)
[FEATURE] Add top-level README.rst and move first sections of
          data/help/help_en to it. (Florent Rougon)
[FEATURE] Update data/config/config_en: slightly reorder, improve wording
          (IMHO), remove reference to now-invalid URL (list of callsigns in
          use), introduce new options, give hint about
          'fgfs --help --verbose'. (Florent Rougon)
[FEATURE] New ffgo.svg icon and new thumbnail.jpg (with xcf source).
          (Florent Rougon)
[FEATURE] Add Makefiles to automate generation of many files
          (messages.pot, *.po and *.mo files, ffgo.png in all sizes from
          ffgo.svg, HTML rendering of docs/README.conditional-config.source,
          release tarball...). (Florent Rougon)
[FEATURE] Rename messages.{pot,po,mo} to FFGo.{pot,po,mo}. This will make it
          much easier for downstream distributors to create FHS-compliant
          packages with .mo files in /usr/share/locale/<locale>/LC_MESSAGES/
          (which is shared by all programs on a given system, therefore using
          such a generic name as 'messages' is unacceptable there).
          (Florent Rougon)
[FEATURE] Improve the thumbnail situation. cf. the Git log for
          6bf65f453ba28920397371d932b3b2ef491827bc for details (information
          maybe relevant to packagers but not users; in short,
          data/pics/thumbnail.ppm is replaced by
          data/pics/thumbnail-no-Pillow.gif and data/pics/thumbnail.jpg by
          data/pics/thumbnail-not-avail.png, and the two new files are both
          automatically generated from their respective sources).
          ImageMagick's convert program is now required by the Makefiles when
          installing from the Git repository. (Florent Rougon)
[BUGFIX]  Fix a bug introduced in 1.0.0b2 that would prevent FFGo from working
          properly when Pillow is not installed. (Florent Rougon)
[BUGFIX]  Include FFGo.pot in release tarballs. It is not needed by FFGo, but
          may be useful for people wanting to add new translations.
          (Florent Rougon)
[FEATURE] Add Setuptools packaging. This will make it easier (once you have
          learnt how to use pip) to install, upgrade, remove, or check when
          FFGo or one of its dependencies has a newer upstream version. Please
          read docs/INSTALL/INSTALL_en for user-level details and the Git log
          for developer-level details. This change impacts a lot of files.
          The top-level 'src' directory is renamed to 'ffgo' (necessary to be
          able to install FFGo with 'pip install --editable'). The 'data'
          top-level directory is not top-level anymore: moved under the
          top-level 'ffgo' directory. This should improve FFGo's portability
          to non-Linux platforms with a minimum of platform-specific code.
          (Florent Rougon)
[BUGFIX]  Fix missing import for a Windows-specific code path (this prevented
          FFGo from starting under Windows; I hope that is the last remaining
          problem of this kind on Windows. I definitely need testers for this
          platform. Please report on your experiences!). (Florent Rougon)
[USABILITY] Improve tooltips of the Preferences dialog. (Florent Rougon)
[USABILITY] Use CRLF line endings for the top-level README.rst file as well as
            for docs/INSTALL/INSTALL_* because the Windows Notepad program
            used not to be able to read LF line endings (ahem). Is it still
            the case in 2015? These files should be enough to get users
            started. (Florent Rougon)

1.1.0
[USABILITY] Show the FlightGear arguments and output in the default
          configuration (i.e., the Command Window and the Output Window). This
          will hopefully improve the first-time user experience.
          (Florent Rougon)
[FEATURE] Slightly better algorithm for preparing the fgfs command line.
          Mostly: order of the UI-exposed options such as airport, aircraft,
          parking, etc. as well as avoid passing empty '--fg-root=' or
          '--fg-scenery=' options unless they are written as is in the Command
          Line Options Window. In other words: an empty field in the
          Preferences dialog for FG_ROOT or FG_SCENERY will not by itself
          cause an empty '--fg-root=' or '--fg-scenery=' option to be passed
          to 'fgfs'. (Florent Rougon)
[USABILITY] Document the following new parameters in the 'presets' file:
          SHOW_FG_COMMAND, SHOW_FG_COMMAND_IN_SEPARATE_WINDOW,
          FG_COMMAND_GEOMETRY, SHOW_FG_OUTPUT,
          SHOW_FG_OUTPUT_IN_SEPARATE_WINDOW and FG_OUTPUT_GEOMETRY. These
          parameters were already present in FFGo 1.0.0 but not in FGo! 1.5.5.
          (Florent Rougon)
[“BUGFIX”] Distribute images derived from the CC0 helicopter image under the
          CC0 license too. The original intent was to distribute the images
          under the same license as the rest of FFGo for unity, i.e. WTFPL
          version 2. I think it was, and is still legal to do under most
          juridictions. However, legal matters being what they are, the safest
          course of action IMHO is to publish the derived images under the
          same license as the original image, i.e. CC0 1.0 Universal.
          (Florent Rougon)
[BUGFIX]  Improve restoring of geometry upon reset (“reload config”). Before
          this change, and contrary to the Command Window and Output Window,
          the dimensions of the main window were not restored when using the
          “Reload config” button; they were only restored at program startup.
          Of course, something can only be restored if it has been previously
          saved! (Florent Rougon)
[FEATURE] New option to save the main window position. For user convenience,
          as well as consistency with the Command Window and Output Window,
          add a new check box in the Miscellaneous tab of the Preferences
          dialog to tell FFGo to “Remember the main window position” whenever
          saving to a configuration file or using “Save & Quit”. This option
          is enabled by default in FFGo. This means that the whole geometry of
          the main window 'widthxheight+x+y' is saved as WINDOW_GEOMETRY into
          the configuration file, instead of its size only ('widthxheight').
          To revert to the previous behavior, simply uncheck “Remember the
          main window position” in the Preferences dialog. This option
          corresponds to SAVE_WINDOW_POSITION in the configuration file.
          (Florent Rougon)
[USABILITY] Mention the FG_BIN name in the tooltip for the fgfs executable
          path. This is likely to be helpful to new users, because FG_BIN is
          used in the hint displayed when fgfs can't be executed, but new
          users might not know what this refers to. (Florent Rougon)
[USABILITY] Improve installation instructions. Most notably, make the suitable
          changes now that Debian packages are available for FFGo and
          CondConfigParser. (Florent Rougon)

1.2.0
[FEATURE] New logging system. Automatically write a log file containing the
          start and end date, OS, FFGo and Python versions, and all other
          usual messages (including exceptions and FlightGear messages). The
          log file is ~/.ffgo/Logs/FFGo.log (%APPDATA%/FFGo/Logs/FFGo.log on
          Windows). It is automatically rotated at application startup,
          keeping at most ten log files (FFGo.log, FFGo_1.log,
          FFGo_2.log, ..., FFGo_9.log). (Florent Rougon)
[FEATURE] Support command line options --help and --verbose. (Florent Rougon)
[FEATURE] New command line option --log-level to choose the log level for
          terminal output (defaults to 'notice', which makes the terminal less
          verbose than the log file by default). Run 'ffgo --help' to see the
          available log levels. (Florent Rougon)
[FEATURE] Add logging calls in a few key places to help debug problems. FFGo
          logs things such as XML parking/groundnet files about to be parsed
          (among others) with level 'info' or above to make it easy to spot
          the culprit in case there is a problem. Thus, in such a case, you
          can either look into the log file or rerun FFGo in a terminal, like
          this: 'ffgo --log-level=info' or 'ffgo --log-level=debug' (also
          possible with ffgo-launcher.py, of course). (Florent Rougon)
[BUGFIX]  Exceptions raised from a Tkinter callback cause an error window to
          appear, not only a traceback on the terminal. (Florent Rougon)
[FEATURE] New command line option --test-mode for developers, useful for
          running test code from the FFGo GUI. (Florent Rougon)
[BUGFIX]  Improve parsing of XML files (parking/groundnet and scenario files).
          This should work better in a few cases and make it clear there is an
          error when one of these files is really invalid. (Florent Rougon)
[BUGFIX]  Small fixes with respect to file operations (be explicit about the
          encoding... this notably affects USER_DATA_DIR/apt, which can have a
          few non-ASCII airport names such as EDRZ = Zweibrücken; properly
          use writelines() in Config.makeInstalledAptList() too...).
          (Florent Rougon)
[BUGFIX]  Improve parsing of directory names under <scenery_dir>/Terrain for
          those using the 'Show installed airports only' option. Some custom
          scenery directories may have subdirs such as
          'Scenery/Terrain/e020n50/e020n52.old'. Ignore them instead of
          raising an exception because "52.old" is not an integer.
          (Florent Rougon)
[USABILITY] Display an explanation when building airport lists. The operation
          may be a bit long and freezes the interface. Display a window so
          that the user knows what is happening and patiently waits.
          (Florent Rougon)
[FEATURE] Update the French translation of the interface. (Florent Rougon)

1.2.1
[BUGFIX]  Fix crash at initialization when Pillow is not installed (bug
          introduced in 1.2.0). (Florent Rougon)

1.3.0
[FEATURE] Improve gathering and handling of parking data. All of the parking
          metadata is available internally through a Parking class. Errors in
          groundnet files generate warnings on the terminal and a popup window
          if particularly serious. Refactoring of this part of FFGo.
          (Florent Rougon)
[FEATURE] Better sorting of parking positions in the parking popup menu (by
          flight type first, then by name using a better algorithm than before,
          so that A9 comes before A10, which itself comes before A10a, A10b,
          A11, etc.). Here, "flight type" corresponds to the 'type' attribute
          value of Parking elements in groundnet files: ga, cargo, gate,
          mil-fighter, mil-cargo, vtol. (Florent Rougon)
[BUGFIX]  Change the default for “Airport data source” to “Scenery”.
          This reflects FlightGear's current behavior when processing
          --parkpos and should provide much better parking data for people
          using TerraSync. The old default didn't make use of the TerraSync
          data, which was a pity.

          As indicated in ffgo/data/help/help_en, it is necessary to have
          downloaded data for the desired airport in one of the FG_SCENERY
          components before parking positions can be shown for this airport
          with the new default setting.

          Actually, “Airport data source” is a misnomer. What it really means
          is “Parking data source”. But since it corresponds to the
          APT_DATA_SOURCE parameter in the config file, and has been so for
          years (in FGo!), I'll leave it as is for now and just try to
          describe the effects as clearly as possible in the associated
          tooltip. (Florent Rougon)
[BUGFIX]  When “Airport data source” is set to “Scenery”, stop at the first
          groundnet file found in FG_SCENERY for the selected airport, even if
          it doesn't declare any parking position. This is what FlightGear
          (3.7) does, therefore doing otherwise and offer, in case of
          redundant FG_SCENERY components, parking positions that FlightGear
          won't find is not a good idea IMHO. (Florent Rougon)
[BUGFIX]  For the same reason, don't attempt to read parking data from
          FG_SCENERY/Airports/I/C/A/ICAO.parking.xml. This was used when
          "Airport data source" was set to Scenery, but FlightGear doesn't
          read these files. (Florent Rougon)
[USABILITY] Change the default for “Airport database update” to “Automatic”. I
          think this is more likely to improve user experience than to degrade
          it. (Florent Rougon)
[FEATURE] Interactive dialogs proposing to change the “Airport data source”
          and “Airport database update” settings to their new defaults. Each
          question is asked only once (if applicable). Give an empty value to
          ALREADY_PROPOSED_CHANGES in the config file if you want to see the
          questions again. (Florent Rougon)
[BUGFIX]  Don't special-case FILTER_APT_LIST in Config.update(). It seems
          counter-intuitive to me that the “Reload config” button reloads
          everything from the config file, except the FILTER_APT_LIST setting
          (which corresponds to the “Show installed airports only” entry of
          the Settings menu). Remove this special case. (Florent Rougon)
[USABILITY] Enabled/disabled state for the “Update list of installed airports”
          menu entry. Since this menu entry is only applicable when “Show
          installed airports only” is selected, enable or disable it as
          appropriate. (Florent Rougon)
[BUGFIX]  Fix button size (“Reload config” & Co). In non-English translations,
          some buttons were too narrow for the text to fit. This should be
          better now. (Florent Rougon)
[FEATURE] Print the Python and CondConfigParser versions in the About dialog
          box. This should make it easier to help users or even to help them
          help themselves. :-) (Florent Rougon)
[FEATURE] Update the French translation of the interface. (Florent Rougon)

1.4.0
[BUGFIX]  Don't hardcode ':' as path list separator for FG_AIRCRAFT and
          FG_SCENERY. Use os.pathsep instead, which should work better on
          Windows a least (normally uses ';' since ':' appears in things suchs
          as 'C:\path\to\foobar'). Having received no single report from users
          using FFGo to run FlightGear under a non-Linux OS, the only way I
          can find such portability issues is via code analysis.
          (Florent Rougon)
[BUGFIX]  Support use of the FG_AIRCRAFT environment variable. Mix its
          contents with that of the 'Additional aircraft path(s)' setting from
          the Preferences dialog, which is mapped to --fg-aircraft. This
          better reflects what FlightGear does. (Florent Rougon)
[FEATURE] Detect, log and display in Help → About the FlightGear version that
          FFGo is going to run based on the FG_bin setting from the
          Preferences dialog. Nicer display of the Python version too.
          (Florent Rougon)
[BUGFIX]  Hide tooltips when the mouse pointer is moved. (Florent Rougon)
[FEATURE] Tooltip refactoring. New ListBoxToolTip allowing to have a tooltip
          that depends on the ListBox item under the mouse pointer, using a
          function of the item index. (Florent Rougon)
[FEATURE] Distinguish between identically-named aircrafts; aircraft tooltips.
          FFGo stops using only the aircraft name to identify an aircraft.
          From now on, it uses the aircraft name in combination with the
          directory containing its -set.xml file. This directory is stored in
          a new config file parameter (AIRCRAFT_DIR) to allow reliably using
          the same aircraft between sessions even if there are other aircrafts
          with the same name in the aircraft paths. The aircraft list now has
          tooltips showing the aircraft directory, i.e. the directory
          containing the -set.xml file for the aircraft under the mouse
          pointer.

          Pass the --aircraft-dir option to fgfs (FlightGear) according to the
          selected aircraft. If the FlightGear version is lower than 3.8, use
          os.path.realpath() on its value (workaround for the FlightGear bug
          fixed in commit 7198dec355144fbb0eaccb39f0c241dd07ebaee0, dated
          October 6, 2015).

          New 'aircraftDir' external variable that can be used in the
          configuration processed by CondConfigParser. This variable contains
          the selected aircraft's directory. (Florent Rougon)
[BUGFIX]  Slightly more efficient aircraft search. Make sure there is always a
          selected item in the aircraft list except when it is empty, in
          particular after doing a search (an aircraft could previously be
          selected for FFGo but not highlighted in the aircraft list).
          (Florent Rougon)
