2.25.0 (2025-03-09)
-----------------------------
* General
  - Show "state overriding" notification on API status bar while "enable_active_state_override" option is enabled.
  - Show "Pace Notes Playback Enabled" notification on main window while pace notes playback is enabled.
  - Replaced all "Set" buttons in "Pace Notes Playback" tab with a single "Apply" button for applying changes.
  - Fixed an error in "Spectate Mode" if player index is set lower than "-1" in "Shared Memory API" config.
  - Removed unnecessary "wheel radius info" options from Wheels Module.
  - Optimized copy access mode with Shared Memory API.

* Overlay
  - Add "VR Compatibility" toggle to Overlay & tray menu (implemented by TiberiuC39), which enables widget visibility
    as windows on taskbar in order to be used in VR via APPs such as "OpenKneeboard". Non-VR user should not enable this option.

* [New]Driver Stats (user data)
  - Add new "driver stats" user data file (driver.stats) that saves in "global user configuration" folder.

* [New]Driver Stats Viewer
  - Add "Driver stats viewer" to "Tools" menu in main window for viewing "Driver stats".
    Note, the viewer only allows limited reset or removal, stat value cannot be edited by design.
    Any changes will take immediate effect after confirmation, changes cannot be undone.
    See "Driver stats viewer" section in User Guide for complete usage.

* [New]Stats Module
  - Add "Stats Module" for recording driver stats data. Note, driver stats will not be recorded while spectate mode is enabled.
    See "Stats module" section in User Guide for configuration details.
  - Now outputs "meters driven" data for odometer display in Cruise Widget.

* [New]Consumption History (user data)
  - Add new consumption history user data file (.consumption extension) that saves in "deltabest" folder (default),
    which stores lap time and fuel consumption data per "track and vehicle class", and can be loaded in Fuel Calculator.
    Up to 100 most recent lap entries are saved per "track and vehicle class". Data recording is handled by "Fuel Module".
  - Add "Consumption History" to "Reset Data" menu.

* Fuel Calculator
  - Add "Load Live" button, which loads or updates data from live session to history table.
  - Add "Load File" button, which loads data from consumption history file to history table.
  - Show loaded data source and track and class name on status bar.
  - Add "Tank" column, which shows fuel tank capacity for specific vehicle of the same class
    and can be selected and added to calculation panel.

* [New]Brakes Preset
  - Add new "brakes.json" preset file in "settings" folder, which is used for customizing
    brake failure thickness ("LMU" only) and heatmap style that matches specific vehicle class.
  - Add default brake failure thickness and heatmap style for all vehicle classes currently found in "LMU".
  - Automatically adds missing brake styles found from all running vehicle class to "brakes.json".
  - "brakes" file name is now reserved for "brakes.json" preset.

* [New]Brake Editor
  - Add "Brake Editor" to "Tools" menu in main window, which allows customizing "brakes.json" preset.
    See User Guide "Brake Editor" section for complete usage.

* Brake temperature Widget
  - Add "enable_heatmap_auto_matching" option, which enables automatically heatmap style matching
    for specific brakes defined in "brakes.json" preset.
    This option applies matching heatmap style to front and rear brakes separately.
    While this option is enabled, "heatmap_name" option has no effect. This option is enabled by default.

* Brake wear Widget
  - Now loads brake "failure thickness" values from "brakes.json" preset for brake wear calculation.
  - Removed old "front_brake_failure_thickness" and "rear_brake_failure_thickness" options.

* Deltabest, Deltabest extended Widget
  - Add "decimal_places" option (requested by Oblit0r). Default is "3" decimal places. Minimum is limited to "1".

* Trailing Widget
  - Add "show_absolute_ffb" option, which converts force feedback value to absolute value before plotting.
    Disable this option to show force feedback plot in both positive and negative range.

* Misc
  - Moved all tools and editors guide into "Tools" section in User Guide. Added internal links for quick accessing related info.
  - Added new contributor "TiberiuC39" to contributors.md.
  - Added "rFactor 2 Community" to "Special Thanks" list in contributors.md.

2.24.0 (2025-02-06)
-----------------------------
* General
  - Add log info for showing various style presets loading status.
  - Unified preset backup file name format.
  - Add preset file validation for "classes.json" and "compounds.json".
  - Removed "tyre_compound_symbol" option from "units" config.

* [New]Compounds Preset
  - Add new "compounds.json" preset file in "settings" folder, which is used for displaying custom
    tyre compound symbol and heatmap style that matches specific tyre compounds.
  - Add default tyre compound styles for all tyres currently found in "LMU".
  - Add default tyre compound styles for some popular vehicles found in "RF2".
  - Add tyre compounds auto-detection system, which automatically adds missing tyre compounds found
    from all running vehicles to "compounds.json" and assigns closest matched compound symbols.
    A "?" symbol will be displayed if a compound name is not commonly known.
  - "compounds" file name is now reserved for "compounds.json" preset.

* [New]Tyre Compound Editor
  - Add "Tyre Compound Editor" to "Tools" menu in main window, which allows customizing "compounds.json" preset.
    See User Guide "Compounds preset" section for complete usage.

* Classes Preset
  - Extended classes preset structure to support more customization in future.
    The new structure now saves alternative "class name" under "alias" key, and "class color" under "color" key.
  - Old "classes.json" file will be auto-updated to this newer structure,
    and a "classes.json.old" backup file will be created in "settings" folder.

* Vehicle Class Editor
  - Now shows customizable classes styles in table view, including "Class name", "Alias name", "Color" columns.
  - Now supports multi-selection for deleting multiple classes.
  - Now supports classes sorting.

* Delta, Energy, Fuel Module
  - Add "minimum_delta_distance" option, which sets minimum recording distance (in meters) between each delta sample.
    Lower value may result more samples recorded and bigger file size; higher value may result less samples recorded and inaccuracy.
    Default value is "5" meters. Recommended value range in "5" to "10" meters.
  - Improved calculation and significantly reduced data fluctuation.

* Relative, Rivals, Standings Widget
  - Now shows tyre compound symbols (front and rear) that matches specific tyre compounds defined in "compounds.json" preset.

* Tyre carcass, Tyre inner layer, Tyre temperature Widget
  - Add "enable_heatmap_auto_matching" option, which enables automatically heatmap style matching
    for specific tyre compounds defined in "compounds.json" preset.
    This option applies matching heatmap style to front and rear tyre compounds separately.
    While this option is enabled, "heatmap_name" option has no effect. This option is enabled by default.
    Note, separate compounds info for tyres on the same axle is not available from game API,
    which currently it is not possible to show left and right compounds separately.
  - Now shows tyre compound symbols (front and rear) that matches specific tyre compounds defined in "compounds.json" preset.

* Misc
  - Updated User Guide info for related changes above.

2.23.0 (2025-01-15)
-----------------------------
* General
  - Add "Remember Size" option in main window Config menu, which remembers last window size.
    This option is enabled by default.
  - Apply laptime pace margin after laptime pace calculation instead of before.

* Relative Widget
  - Add "show_highlighted_nearest_time_gap" option (requested by Jonathan07),
    which highlights opponents within nearest time gap threshold.
  - Add "nearest_time_gap_threshold_*" options for customizing nearest time gap threshold (in seconds).
    Default is "1" second for front, and "2" seconds for behind.
  - Add "show_time_gap_sign" option, "-" indicates opponent's relative position is in front of player,
    "+" indicates the opposite. This option is disabled by default.
  - "show_lap_difference" option no longer applies to "time gap" column to avoid confusion with
    "show_highlighted_nearest_time_gap".

* Track map Widget
  - Add "show_pitout_prediction" option (requested by David levis & Marcelo Prestes),
    which shows estimated pit out on-track position indication for each pit stop duration.
    Note, pit out position prediction is based on "delta best" data which scaled with player's latest
    "lap time pace" for accurate real-time position prediction under various track conditions.
    Pit out prediction requires both valid "track map" and "delta best" data to display.
    At least "one valid lap" for any car and track combo is required to display pit out prediction.
    For accurate prediction, the location of "pit out line" must be found first.
    And since each track has different pit out line location,
    it is required to "pit out" at least "once per session" to mark the correct pit out line location.
    This can be easily done by driving out of pit lane.
  - Add "number_of_predication" option that sets number of pit out predication to display.
    Value range is limited in "1" to "20".
  - Add "pitstop_duration_minimum" option that sets pit stop duration (in seconds) of first predication.
  - Add "pitstop_duration_increment" option that sets each pit stop duration (in seconds) increment
    after previous predication. Default increment is "10" seconds.
    Note, each time when pit stop duration of the nearest predication exceeded current pit stop timer,
    the predication circle will be removed, and a new predication circle will be appended
    with pit stop duration increment after the last predication.
  - Add "pitout_time_offset" option that sets amount time offset (in seconds) for catching up with
    vehicle speed after pit out. Default is "3" seconds.
    Note, this value is important for accurate prediction, as initial vehicle speed is much slower after pit out,
    so extra time is needed for driver to catch up, and also affected by pit out line location.
    For most tracks, this extra time after pit out is roughly within "1" to "5" seconds,
  - Add "show_pitstop_duration" option that shows pit stop duration reading on top of each predication circle.
  - Add "show_position_in_class" option, which shows position in class while "enable_multi_class_styling"
    is also enabled, otherwise this option has no effect.
    While "enable_multi_class_styling" is enabled, disable this option to show overall standings with
    multi-class color (requested by Lazaros Filippakos).

* Misc
  - Updated "Application", "Relative", "Track map" sections in User Guide.

2.22.0 (2024-12-26)
-----------------------------
* General
  - Auto corrects duplicated "column_index" values in widget options to avoid display overlapping.
  - Various code optimization.

* Brake bias Widget
  - Add "show_baseline_bias_delta" option, which shows delta between current and baseline brake bias.
    This can be useful for keeping track of brake bias changes easier during a long race.
    Baseline brake bias is automatically set (and reset) while vehicle is stationary in pit lane.

* Fuel Widget
  - Add "show_absolute_refueling" option (requested by barrett & francescodg), which shows absolute refueling value
    instead of relative refueling when enabled.
    Note, "+" or "-" sign is not displayed with absolute refueling.
    Differences between relative and absolute refueling:
    - Relative refueling value shows total amount "additional" fuel required to finish the remaining race length,
      which matches "relative refueling" mechanism (amount to add on top of remaining fuel in tank) in "RF2".
    - Absolute refueling value shows absolute total amount fuel required to finish the remaining race length,
      which matches "absolute refueling" mechanism (amount total fuel to fill tank up to) in "LMU".
    - Also see "estimated laps" display option in "Session Widget" that can be used for "absolute refueling".
  - Add "caption_text_absolute_refuel" option that shows absolute refueling caption text if
    "show_absolute_refueling" option is enabled. This helps distinguish difference from relative refueling.
    Default caption text is "abfuel".
  - Exchanged column positions of "end" and "pits" for consistency and readability.
    "pits" column is now in the same column as "early".

* Instrument Widget
  - Add "stalling_rpm_threshold" option, which sets RPM threshold for triggering engine stalling warning.
    Default is "100" RPM.
  - Renamed "warning_color_ignition" option to "warning_color_stalling".

* Pace notes, Track notes Widget
  - Fixed notes not showing up if game was paused and unpaused again while on track.

* Relative finish order Widget
  - Add "show_absolute_refilling" option.

* Relative, Rivals, Standings Widget
  - Add "number of penalties" display in "pit stop count" column.
    When a driver accumulates one or more penalties, this column will show the number of penalties
    in negative value with purple (default) background to distinguish from number of pit stops.

* Session Widget
  - Add "show_estimated_laps" option, which shows estimated total remaining laps (from current lap position
    towards finish line) based on total remaining session time and local player's lap time pace.
    This value can be used for adjusting absolute refueling. No value will be shown if session is not time-based.
    Note, this is the same value that used for calculating estimated refueling value in Fuel Module.
    As with estimation, there may be a margin of error of one lap, and may be affected
    by other variables such as those mentioned in "Relative finish order" widget.

* [New]Slip ratio Widget
  - Show visualized slip ratio of each tyre with customizable optimal and critical range and color indication.

* Track map Widget
  - Add "enable_multi_class_styling" option (requested by AndreT990 & Marcelo Prestes), which shows vehicles in
    multi-class color styles on map along with position-in-class standings.
    Multi-class color can be customized from Vehicle Class Editor.
    Random color will be shown if vehicle class is not defined in Vehicle Class Editor.
    Note, while multi-class styling is enabled, following color styles will not be displayed:
    "vehicle_color_player", "vehicle_color_leader", "vehicle_color_same_lap", "vehicle_color_laps_ahead", "vehicle_color_laps_behind".
  - Add "font_color_player", "vehicle_outline_player_color", "vehicle_outline_player_width" options for
    customizing player vehicle style.

* Virtual Energy Widget
  - Add "show_absolute_refilling", "caption_text_absolute_refill" options.
  - Exchanged column positions of "end" and "pits".

* Misc
  - Updated User Guide info for related changes above.

2.21.0 (2024-12-10)
-----------------------------
* General
  - More optimization to all widgets & modules for further improved efficiency and less resource usage.

* RestAPI Module
  - Updated steerlock function to retrieve steerlock value from new LMGT3 vehicles in LMU.

* Brake pressure, Ride height, Suspension position, Tyre load Widget
  - Add "show_caption", "font_scale_caption", "caption_text" options for displaying and customizing
    caption text (requested by coasting&cruising). This option is disabled by default.

* Relative Widget, Standings Widget
  - Add "show_highlighted_fastest_last_laptime" option (requested by Hany Alsabti), which highlights
    the fastest last lap time within the same class if available.
  - Improved consistency and accuracy of relative time interval (requested by Hany Alsabti).
  - Renamed "show_vehicle_in_garage_for_race" option to "show_vehicle_in_garage" in Relative Widget,
    which now affects all sessions. Default is "False", which hides vehicles in garage.
    Note, local player (user) is always displayed.

* Gear Widget
  - Add "show_inverted_battery" & "show_inverted_rpm" options that invert battery or rpm bar progression.

* [New]Steering wheel
  - Show virtual steering wheel with customizable steering wheel image.
  - Show steering rotation reference line, which can be useful to see if physical steering wheel is misaligned.
  - See User Guide for details.

* [New]Tyre inner layer Widget, Tyre temperature Widget
  - Separated inner layer temperature display from "Tyre temperature Widget" into the new
    "Tyre inner layer Widget" (requested by H4dro), which can now be configured completely separately.
    Tip: set color style differently to easier distinguish the two widgets.
  - Add "horizontal_gap", "vertical_gap" options for enhanced arrangement (requested by doublebidule).

* Misc
  - Updated User Guide info for related changes above.

2.20.1 (2024-11-24)
-----------------------------
* Pace Notes Playback
  - Default "playback" option is now set on "disabled" for new presets.
    User may click "Disabled Playback" button from "Pace Notes" tab to enable playback.
  - Adjusting playback volume now takes immediate effect.

* Pace notes Widget, Track notes Widget
  - Add "enable_comments_line_break" option (requested by DanRZ) for enabling multi-line comments display.
    Note, a note comment can be broken into multiple lines by adding "\n" to any part of
    the comment in Track Notes Editor.
  - Add "maximum_display_duration" option (requested by DanRZ), which sets maximum display duration (seconds)
    of each note. Set to "-1" to always display notes. Default is "-1".

* Notes Module
  - "Global offset" option from "Pace Notes" tab no longer affects "track notes".
  - Fixed position desync issue that would occasionally trigger previous note again.

2.20.0 (2024-11-17)
-----------------------------
* General
  - [New]Implemented track & pace notes system, which allows load & save track & pace notes files.
  - Add "pace_notes_path" & "track_notes_path" options to global user config file.
  - Add new ".TPPN" (TinyPedal Pace Notes) & ".TPTN" (TinyPedal Track Notes) file formats.
  - Add support for load & save GPL pace notes ".ini" file format.
    Special thanks to "Lee Bowden" (author of GPL pace notes system & file format) and "Jim Pearson"
    for providing technical assistance.
  - Add "multimedia_plugin_on_windows" option in Compatibility dialog, which sets multimedia plugin
    for playing sound file on windows.

* [New]Pace Notes Playback Tab
  - Add "Pace Notes Playback" control panel that can be accessed from "Pace Notes" tab in main window.
    This control panel provides pace notes sound playback control and configuration.
  - Click "Enabled Playback" or "Disabled Playback" button to quickly enable or disable pace notes playback.
    Note, "Notes Module" must be enabled to allow pace notes playback.
    Disabling this option does not affect "Notes Module" or "Pace notes Widget".
  - By default, pace notes file is automatically loaded from "pace_notes_path" if a file that
    matches current track name is found.
    Enable "Manually Select Pace Notes File" check box to disable auto-file-name matching,
    and manually select a pace notes file that can be played on any track.
    This option takes immediate effect when changed.
  - "Sound file path" sets path for loading pace notes sound files that matches value from
    "pace note" column found in pace notes file. If no sound file found, sound won't be played.
    This option takes immediate effect when changed.
  - "Sound format" sets sound format for loading sound file.
    This option only takes effect after clicked any "Set" button.
  - "Global offset" adds global position offset (in meters) to current vehicle position on track,
    which affects when next pace note line will be played.
    This option only takes effect after clicked any "Set" button.
  - "Max duration" sets maximum playback duration for each sound file, which can be used to limit
    sound file maximum playing duration. Default duration is 10 seconds.
    This option only takes effect after clicked any "Set" button.
  - "Max Queue" sets maximum number of sound files in playback queues. Default is 5 sound files.
    This option only takes effect after clicked any "Set" button.
  - "Playback volume" sets output volume for sound file.
    This option takes effect when next sound file is played.

* [New]Track Notes Editor
  - Add "Track Notes Editor" to "Tools" menu in main window for creating & editing track or pace notes.
    Note, by default the editor starts in "Pace Notes" edit mode as displayed in status bar.
    The editor consists of two panel views:
      - Left panel is the track map viewer, which can be used to visualize track map and providing
        analytic info for assisting notes creation. For detailed usage, see "Track Map Viewer" section.
      - Right panel is the notes editor, which allows create, open, save track or pace notes file.
  - For complete usage, see "Track Notes Editor" section in User Guide.

* [New]Track Map Viewer
  - Add "Track Map Viewer" to "Tools" menu in main window for viewing & analyzing track map.
    Note, only track map (SVG) files that generated from TinyPedal Mapping Module are supported.
    The Track Map Viewer consists of three main areas:
    * At top area, user can "Load Map", view map file name, and "Config" map display.
    * At center area, track map image and various analytic data are displayed.
    * At bottom area, user can set map "Zoom", position slider, map nodes selection.
    Other notable features:
    * Right-Click on map display area to open a context menu to quickly toggle various
      displays & analytic options on and off.
    * Use mouse wheel to quickly zoom in and out map display.
    * Analytic data are displayed at four corners of map display, which include:
      - Map length and total nodes.
      - Curve section length, grade, radius, angle, curvature.
      - Slope grade, percent, angle, height delta.
      - Current node position and global XYZ coordinates (Z is elevation).
  - Add "track_map_viewer" options to global user config file.
  - See "Track Map Viewer" section in User Guide for details.

* Heatmap editor, Vehicle brand editor, Vehicle class editor
  - Add "Offset" button for batch offsetting or scaling temperature values in Heatmap editor.
  - Add "Copy" button for duplicate heatmap preset in Heatmap editor.
  - Keep "Rename" dialog open after renaming for easy access in Vehicle brand editor.
  - Show close confirmation if changes were not saved.
  - Show deletion info and confirmation.

* [New]Notes Module
  - Add Notes Module for processing track & pace notes data, which is used by
    Pace Notes playback control panel, Pace notes Widget, Track notes Widget.
    Note, this module requires Delta Module enabled to function correctly.

* Wheels Module
  - Add cornering radius calculation.
  - Add "cornering_radius_sampling_interval" option, which sets position sampling interval
    for cornering radius calculation.
    Value range in "5" to "100". Default sampling interval is "10", which is roughly 200ms
    interval between each recorded position. Higher value may result inaccuracy.
    Note, this option does not affect position recording interval.

* Cruise Widget
  - Add "show_distance_into_lap" option which shows distance into current lap.
  - Add "show_cornering_radius" option which shows real-time cornering radius.

* [New]Pace notes Widget
  - Show nearest pace notes, comments, debugging info behind current vehicle position,
    mainly for pace notes creation and debugging purpose.
  - Auto hides itself if pace notes data is not available for current track.

* [New]Track notes Widget
  - Show nearest track notes, comments, debugging info behind current vehicle position,
    mainly for displaying corner name or section name.
  - Auto hides itself if track notes data is not available for current track.

* Misc
  - Updated contributors info, added new contributors:
    "Lee Bowden", "Jim Pearson", "Tanizo Yashima (yashiman)".

2.19.1 (2024-10-18)
-----------------------------
* Brake wear Widget
  - Separated "front_brake_failure_thickness, rear_brake_failure_thickness" options
    for front and rear brakes.
    Front brake failure thickness threshold can be different from rear brake.
  - Some reference brake failure thickness threshold:
    Hypercar and P2 classes in LMU usually have 25mm brake failure threshold.
    GTE class in LMU usually has 30mm brake failure threshold.

* Cruise Widget
  - Add "enable_track_clock_synchronization" option, which enables auto track clock
    and time scale synchronization. RestAPI module must be enabled to synchronize
    track clock from Rest API. This option is enabled by default.
    Disable this option to manually set and use "track_clock_time_scale" option for
    track clock display.

2.19.0 (2024-10-15)
-----------------------------
* RestAPI Module
  - Read "brake wear" data from LMU Rest API.

* [New]Brake wear Widget
  - Show brake wear data in percentage or millimeter thickness.
    Important note:
    Brake wear data is currently only available on LMU.
    RF2 currently doesn't provide brake wear data.
    Depends on vehicle, brake may or may not have noticeable wear.
    Additional note:
    Brake maximum thickness (for percentage wear calculation) is retrieved at the moment
    when car leaves garage or has brake repaired or changed.
    Reloading a preset or restarting APP in the middle of a running stint could result
    wrong maximum thickness and percentage wear calculation, which should be avoided.
    "Brake failure thickness" note:
    This option manually sets millimeter thickness threshold at brake failure, which
    affects brake thickness readings and overall brake wear calculation.
    For example, if brake thickness is 40mm, and brake failure thickness is 25mm,
    then effective thickness is 40 - 25 = 15mm.
    Note, brake failure thickness threshold data is not available from game API,
    it may require testing to find out, and may vary from vehicle to vehicle.
    Thickness threshold value should not exceed brake maximum thickness, otherwise
    brake wear readings will not be displayed correctly.
  - Show total brake wear difference of previous lap.
  - Show live brake wear difference of current lap that constantly updated.
  - Show estimated brake lifespan in laps.
  - Show estimated brake lifespan in minutes.
  - Customizable wear warning threshold.

* Misc
  - Updated User Guide info for Brake wear Widget.

2.18.3 (2024-10-08)
-----------------------------
* RestAPI Module
  - Read "body aero" and "suspension damage" data from LMU Rest API.

* [Reworked]Damage Widget
  - Add "show_last_impact_cone" option that shows cone indicator towards last known impact position.
    This option can be useful to determine whether there was a collision, even if car was not damaged.
    Cone indicator display duration can be customized by "last_impact_cone_duration" option.
    Default display duration for last known impact is 15 seconds.
    Cone angle (size) can be customized by "last_impact_cone_angle" option.
  - Add "show_aero_integrity_if_available" option that shows body aero integrity reading
    (only available for LMU) instead of bodywork integrity, which better reflects
    severity of bodywork damage that would affect performance.
  - Add suspension damage color indication (only available for LMU) for each wheel, which
    better reflects severity of suspension damage that would affect handling.
    There are now 6 damage levels for each wheel:
    1. No damage to suspension or wheel (default color: green).
    2. Light suspension damage (default damage range: 2% - 15%, default color: yellow).
    3. Medium suspension damage (default damage range: 15% - 40%, default color: orange).
    4. Heavy suspension damage (default damage range: 40% - 80%, default color: purple).
    5. Totaled suspension (default damage range: 80% - 100%, default color: blue).
    6. Wheel detached (default color: black).
  - Add "suspension_damage_*_threshold" options for customizing damage level range.
  - Add a new set of "suspension_color_damage_*" options.
  - Add "wheel_width, wheel_height" options for customizing wheel display size.
    Removed body parts horizontal size restriction.
    Size of body parts and wheels can now be customized freely.
  - Adjusted default "update_interval" value from "20" to "100", as frequent refreshing is
    unnecessary for this widget. Existing setting won't be affected.

* Misc
  - Updated User Guide info for Damage Widget.

2.18.2 (2024-10-06)
-----------------------------
* Relative, Rivals, Standings Widget
  - Fixed tyre compound info not correctly updated in some cases (issue reported by MarcoSaupe).

2.18.1 (2024-10-02)
-----------------------------
* General
  - Fixed a font weight verification error that prevents user from saving any changes
    in "Gear Widget" config dialog.
  - Fixed missing combo choices (text alignment, font weight options) from
    Elevation and Gear Widget config dialog.

* Differential Widget
  - Fixed cooldown timer did not reset after changed or restarted a session.

* DRS Widget
  - Add "drs_text" option for setting custom DRS display text.
  - Optimized DRS status check.

2.18.0 (2024-09-26)
-----------------------------
* General
  - Add global user config file as "config.json", which stores global user settings
    that are independent from user presets.
    For Windows, "config.json" is stored under "username\AppData\Roaming\TinyPedal" folder.
    For Linux, "config.json" is stored under "home/username/.config/TinyPedal" folder.
  - Log files are now stored in the same folder as global user config file.
  - All "Application" and "Compatibility" settings are moved into "config.json".
  - All Config dialogs now shows preset file name on title bar.
  - Color pick dialog now shows up to 16 previously picked colors in "Custom colors" selector.
  - Smaller panel size for "Fuel Calculator".
  - Most of widgets & modules code has been rewritten and optimized for improved efficiency
    and less CPU and memory usage.
    Note, currently both "Friction Circle" & "Navigation" Widgets are known to consume more
    CPU usage for drawing complex plot and animated map, especially with "Navigation" Widget
    and a lot of vehicles on track. If there is significant increase in APP 's CPU usage,
    try disable either widgets, which should help lower CPU usage to normal level.
    The new "System performance Widget" (see below) can be used to monitor performance change.

* [New]Application dialog
  - Add "Application" to main window "Config" menu for customizing global application settings
    and saved in global user config file.
  - "grid_move_size, minimum_update_interval, maximum_saving_attempts" options from
    "compatibility" are moved to "application".
  - Add "show_confirmation_for_batch_toggle" option, which shows confirmation dialog
    for enabling or disabling all widgets or modules. This option is enabled by default.

* [New]User path dialog
  - Add "User path" to main window "Config" menu for customizing global user path settings
    and saved in global user config file.
    To change user path, double-clicking on edit box to open "Select folder" dialog;
    or manually editing path text.
    Click "Apply" or "Save" to verify and apply new paths. Invalid path will not be applied.
  - For linux, all default user config-type paths are now set according to XDG specification,
    which is located under "home/username/.config" folder. (thanks to feedback from Bernat)
    Changes include:
    * Default "user preset" path is changed to "home/username/.config/TinyPedal/settings/",
      previously this was set in "home/username/.config/TinyPedal/".
    * Default "brandlogo" path is changed to "home/username/.config/TinyPedal/brandlogo/",
      previously this was set in "home/username/.local/share/TinyPedal/brandlogo/".
    Note, if you wish to keep using old paths on linux, you can use "User path dialog"
    to set paths to the old ones as mentioned above.
  - See User Guide "User path" section for additional info.

* [New]Auto load preset system
  - Add "Auto load preset" system (implemented by naturale0) to allow auto loading user-defined
    game-specific preset depends on active game (currently supports RF2 and LMU).
    Auto loading preset is triggered when a new or different game is started & active.
    Auto loading will only trigger once per game change.
    A preset must be tagged as "primary" for specific game before it can be auto loaded.
    This option is disabled by default.
  - Add "Auto load primary preset" check box in "Preset" tab, which enables or disables
    "Auto load preset" system.
  - Add "primary preset" tagging function in "Preset" tab, user can "Right" click on a preset
    and select "Set primary for ***" to tag a preset as "primary" for specific game.
    To clear all tags from selected preset, "Right" click and select "Clear primary tag".
    Primary preset will be auto loaded when "Auto load primary preset" is enabled and
    a new or different game is started & active.
    Note, a single preset can have tags from multiple games.

* Shared Memory API
  - Improved accessing efficiency, now uses fast-restart method for same API.
  - Significantly reduced opponents vehicle position desync issue when using "direct access" mode
    (as previously was noticeable on Radar Widget sometimes).

* Vehicle Brand Editor
  - Now allows multi-selection for deleting vehicle brand entries.
  - Fixed some vehicle info that could not be imported from LMU Rest API (issue reported by DanRZ).
    Make sure to use "import" again from Vehicle Brand Editor to update missing vehicle info from LMU.

* Wheels module
  - Add differential locking calculation and output for the new Differential Widget.
  - Add "minimum_axle_rotation" option, which sets minimum axle rotation (radians per second)
    for calculating wheel radius and differential locking percent.
    Default value is "4".
  - Add "maximum_rotation_difference_*" options, which set maximum rotation difference (percentage)
    between left or right wheel and same axle for limiting wheel radius calculation.
    Setting higher difference value may result inaccurate wheel radius reading.
    Default value is "0.002".

* Brake bias Widget
  - Add "layout" option, which sets display orientation.
    Default is horizontal. Set "0" to show vertically.

* Cruise Widget
  - Add "layout" option, which sets display orientation.
    Default is horizontal. Set "0" to show vertically.
  - Add "odometer_maximum_digits" option, which sets maximum number of display digits.

* [New]Differential Widget
  - Show minimum differential locking percent between left and right wheels on the same axle
    under power (on throttle) or coasting (off throttle).
    A "100%" reading indicates two wheels on the same axle are rotating at same speed;
    while "0%" indicates that one of the wheels is completely spinning or locked.
    Each reading will reset back to "100%" if minimum locking percent hasn't changed during
    cooldown period, as defined by "reset_cooldown" option.

* Instrument Widget
  - Changed default "layout" setting value to "1" for horizontal layout for consistency.
    User may need to edit old value "0" to "1" to display horizontal layout.
  - Wheel slip warning indicator now only shows under acceleration.

* [New]Laps and position Widget
  - Show your current lap number (lap progression) & max laps if available.
  - Show your current overall position against all drivers in a session.
  - Show your current position in class against all drivers from the same class.

* P2P Widget
  - Replaced old "font_color_inactive" and "bkg_color_inactive" color settings with new cooldown
    "font_color_battery_cooldown, bkg_color_battery_cooldown" for battery charge, and
    "font_color_activation_cooldown, bkg_color_activation_cooldown" for activation timer.

* Radar Widget
  - Add "enable_radar_fade" option (feature requested by Jernej Simoncic), which enables
    gradually fade in/out effect while opponent vehicles approach or leave radar range.
  - Add "radar_fade_out_radius" option, which sets radar fade out radius relative to radar radius.
    Value range in "0.5" to "1.0". Default value is "0.98".
  - Add "radar_fade_in_radius" option, which sets radar fade in radius relative to radar radius.
    Minimum value is limited to "0.1", maximum value cannot exceed "radar_fade_out_radius".
    Default value is "0.8".
  - Renamed options "show_fade_out, fade_in_radius, fade_out_radius" to
    "show_edge_fade_out, edge_fade_in_radius, edge_fade_out_radius" to
    distinguish from new radar fade options.

* Relative, Rivals, Standings Widget
  - "show_pit_status" option now also displays garage status (as "G" sign) for driver in garage.
  - Add "garage_status_text" option, which sets custom garage status text for driver in garage.

* Session Widget
  - Removed "lap number" and "driver position" readings. Those two readings are now included in
    the new "Laps and position Widget".
  - Add "layout" option, which sets display orientation.
    Default is horizontal. Set "0" to show vertically.

* Speedometer Widget
  - Changed default "layout" setting value to "1" for horizontal layout for consistency.

* [New]System performance Widget
  - Show system's overall CPU utilization (percent) and memory usage (GB).
  - Show TinyPedal's CPU utilization (percent) and memory usage (MB).

* Tyre carcass temperature Widget
  - Now calculates temperature rate of change at an average base interval of 0.1 seconds
    which is then scaled to "rate_of_change_interval" value for more responsive estimate.
  - Add "rate_of_change_smoothing_samples" option for smoothing data and filter out fluctuation.

* Tyre wear Widget
  - Now uses laptime pace for calculating "tyre lifespan in minutes".

* [Reworked]Weather Widget
  - Add weather trend indication, which shows whether there has been an increasing or
    decreasing trend for temperature, raininess, wetness readings for a given period.
    This can be useful to determine pit stop strategy.
  - Add "temperature_trend_interval", "raininess_trend_interval", "wetness_trend_interval"
    options, which set each trend interval in seconds. Default interval is "60" seconds.
  - Add "prefix_rain", "prefix_dry", "prefix_wet", "font_color_trend_constant",
    "font_color_trend_decreasing", "font_color_trend_increasing" options.
  - Improved display formatting for temperature, raininess, wetness readings.

* Weather forecast Widget
  - The "now" column always shows current weather condition even if RestAPI Module is disabled.

* Misc
  - Updated User Guide for all changes mentioned above and additional usage info.
  - Added new contributor "Sihyung Park (naturale0)" to contributors.md.

2.17.4 (2024-08-30)
-----------------------------
* General
  - Fixed state check error while restarting API in rare case.
  - Add clickable API button on main window status bar
    that opens "Shared Memory API" config dialog for easy access.

* Fuel calculator
  - Fixed an error when calculating with Gallon unit.

* Relative finish order Widget
  - Add "show_extra_refilling" option, which shows readings of extra refilling row
    below "local player's refilling" row. Each extra refilling value equals "extra laps
    of consumption" plus "local player's refilling" value of same column.
    Those values save the trouble from manual calculation in case there will be extra laps.
    The first column of extra refilling row shows number of extra laps depends on
    "number of extra laps" setting, such as "EX+1" for 1 extra lap, or "EX+3" for 3 extra laps.
  - Add "number_of_extra_laps" option, which sets number of extra laps for extra refilling calculation.
    Default is "1" extra lap.
  - Updated usage and examples for Relative finish order Widget in User Guide.

2.17.3 (2024-08-19)
-----------------------------
* General
  - Fixed a bug (introduced in v2.17.0) in API connector that would cause TinyPedal to stop work
    when user selected "LMU API" in Shared Memory API config dialog.
    Note, LMU API option is currently only a placeholder which uses the same underlying
    RF2 API and "rF2 Shared Memory Plugin" and works exactly same as RF2.
    Updated "User Guide" info regarding API selector.
  - Optimized overlay state check to avoid unnecessary function calls.

* Command line arguments
  - Add "-h, --help" argument, which shows all available command line arguments.
  - Add "-s, --single-instance" argument for toggling single instance mode,
    which allows multiple instances of TinyPedal to be running at same time
    by adding "-s 0" or "--single-instance 0" argument.
    Default is single instance only, which only one TinyPedal may be run at a time.
  - Single instance mode now works under Linux, or running from source script.
  - Add "Single instance mode" info to log output.
  - Add "pid.log" output file in log folder when "Single instance mode" is enabled.
  - See User Guide "Command line arguments" section for details.

* Misc
  - Added new contributor (ebeninca) to contributors.md.

2.17.2 (2024-08-08)
-----------------------------
* Brake bias Widget
  - [New]Add brake migration display, which shows real-time brake migration change,
    as commonly seen in LMH and LMDh classes.
    Note, brake migration is calculated based on brake input and brake pressure
    telemetry data, and is affected by pedal force setting from car setup and
    electric braking allocation of specific vehicle.
    To get accurate brake migration reading, it is necessary for brake pedal
    to reach fully pressed state for at least once while entering track to recalibrate
    brake pressure scaling for brake migration calculation.
    It is normally not required to do manually, as game's auto-hold brake assist is on by default.
    However if auto-hold brake assist is off, or the APP was reloaded while player was already on track,
    then it is required to do a full braking for at least once to get accurate brake migration reading.
  - Add "electric_braking_allocation" option for calculating brake migration
    under different electric braking allocation from specific vehicle.
    Note, vehicle that has not electric braking, or has disabled regeneration, is not affected by this option.
    Incorrect allocation value will result wrong brake migration reading from vehicle that has electric braking activated.
    Set value to "-1" to enable auto-detection, which automatically checks whether electric braking is activated
    on either axles while braking, and sets allocation accordingly.
    This is enabled by default. Note, it may take a few brakes to detect correct allocation.
    Set value to "0" to manual override and use front allocation,
    which is commonly seen in LMH class.
    Set value to "1" to manual override and use rear allocation,
    which is commonly seen in LMDh class.
  - Add "prefix_brake_migration" and "suffix_brake_migration" options for brake migration.
  - Add "column_index" and "decimal_places" options for both brake bias and brake migration.

* Misc
  - Updated User Guide for Brake bias Widget.

2.17.1 (2024-08-04)
-----------------------------
* Fuel energy saver Widget
  - Fixed "minimum_reserve" setting not taking effect.

* Navigation Widget
  - Reworked map path drawing methods which completely eliminated high memory usage issue with this widget.
    Map drawing now uses around 1MB memory for normal tracks,
    and at most 3 or 4MB memory for very large tracks, such as Isle of Man.
    There is also a slightly increase in map display quality.

2.17.0 (2024-08-02)
-----------------------------
* [New]Fuel energy saver Widget
  - Show current stint estimated total completable laps and completed laps
    based on current consumption.
  - Show estimated target lap consumption to save (extend) one or more total
    stint laps, with customizable number of target slots (10 for more, 5 for less).
  - Show delta consumption against target lap consumption, which allows
    fuel or energy saving to be visualized and easily controlled in real-time.
  - Show consumption type in "FUEL" or "NRG" (if virtual energy available).
  - Show last lap consumption.
  - For complete customizable options, usage examples, see User Guide "Fuel energy saver" section.

* Virtual energy Widget
  - Add "delta energy consumption" display (to be in line with Fuel Widget),
    which shows "delta consumption" against last lap energy consumption.
  - Add "fuel bias" display, which shows estimated laps difference between
    fuel and virtual energy.
    Positive value means more laps can be run on fuel than energy;
    in other words, energy is drained faster than fuel.
    General speaking, it is a good idea to keep bias close to 0.0 so that
    fuel and energy drains at same pace, and slightly towards positive side
    to avoid running out of fuel before energy does.
  - Set new default low energy warning color to purple instead of red, which helps
    distinguish from Fuel Widget.
    Existing setting won't be affected, use Config "reset" to set new default.

* Misc
  - Updated User Guide info for Fuel energy saver Widget, Virtual energy Widget.

2.16.0 (2024-07-29)
-----------------------------
* Delta Module
  - Add data smoothing function to filter out unusual data noise.
  - Add "delta_smoothing_samples" option, which sets number of samples
    for delta data smoothing calculation using exponential moving average (EMA) method.
    Value range in "1" to "100". Default is "30" samples. Set to "1" to disable smoothing.
    Higher value results more smoothness, but may lose accuracy.
  - Add average laptime pace calculation and output.
  - Add "laptime_pace_samples" option, which sets number of samples
    for average laptime pace calculation (EMA).
    Value range in "1" to "20". Default is "6" samples. Set to "1" to disable averaging.
    Note, initial laptime pace is always based on player's all time personal best laptime if available.
    If a new laptime is faster than current laptime pace, it will replace
    current laptime pace without calculating average.
    Invalid lap, pit-in/out laps are always excluded from laptime pace calculation.
  - Add "laptime_pace_margin" option, which sets additional margin for current laptime
    that cannot exceed the sum of "laptime pace" and "margin".
    This option is used to minimize the impact of unusually slow laptime.
    Default value is "5" seconds. Minimum value is limited to "0.1".

* Fuel Module
  - Now uses laptime pace value from Delta Module for real-time fuel calculation
    for increased consistency and accuracy.

* Vehicles Module
  - Fixed pit timer incorrectly reset after pit out.

* Flag Widget
  - "Pit Request" indicator now shows "pit-in laps countdown" alongside
    "estimated remaining laps" reading that current fuel or energy can run.
    Note, "pit-in laps countdown" value is always calculated towards
    the finish line of current stint's final lap, and thus is always
    less than or equal to "estimated remaining laps" reading.
    If countdown drops below 1.0 (laps), it indicates the final lap of current stint,
    and driver should pit in before the end of current lap to refuel.
    If countdown reaches zero or negative, there may still be some fuel or energy left in tank,
    however it will not be enough to complete another full lap.

* Friction circle Widget
  - Add "show_trace_fade_out" option, which enables trace fade out effect.
  - Add "trace_fade_out_step" option, which sets trace fade out speed.
    Value range in "0.1" to "0.9", higher value increases trace fade out speed.
    Default value is "0.2". This option is enabled by default.

* [New]Relative finish order Widget
  - New Relative finish order Widget that displays estimated relative finish order
    between leader and local player with corresponding refilling estimate.
    This widget auto-switches display mode ("TIME" or "LAPS") depends on current session type.
  - Show both predefined and customizable "leader's pit time" and "local player's pit time",
    as well as last pit stop time from leader and local player.
  - Show "leader's final lap progress" and "local player's final lap progress"
    that depend on current session type.
  - Show "relative lap difference" between leader and local player that is calculated from
    lap time pace difference of both players, which can be used to determine whether leader
    has the chance to overtake local player on final lap.
  - Show refilling type in "FUEL" or "NRG" (if virtual energy available).
  - Show estimated "local player's refilling" that depends on current session type.
  - For complete customizable options, usage examples, see User Guide "Relative finish order" section.

* Timing Widget
  - Add "show_average_pace" option, which shows personal current average laptime pace,
    this reading is also used in real-time fuel calculation.
    Note, additional "average laptime pace" calculation setting can be found in "Delta Module" config.
    After ESC or session ended, laptime pace reading will be reset,
    and aligned to "all time personal best laptime" if available.

* Weather forecast Widget
  - Add "number_of_forecasts" option, which sets number of forecasts to display.
    Value range in "1" to "4". Default is "4" forecasts.
  - Add "column_index_*" options for customizing data display order of each forecast.

* Misc
  - Updated User Guide info for Delta Module, Flag Widget, Friction circle Widget,
    Relative finish order Widget, Timing Widget, Weather forecast Widget.

2.15.1 (2024-07-13)
-----------------------------
* General
  - Reworked preset saving system to prevent preset file corruption in rare case.
    Saving system now creates temporary backup for old preset file before saving.
    If all saving attempts failed, saving will be aborted,
    and old preset file will be restored to avoid preset file corruption.
  - Add "maximum_saving_attempts" option in Compatibility dialog,
    which sets maximum retry attempts for preset saving.
    Default value is "10". Minimum value is limited to "3" maximum attempts.
    Note, each attempt has a roughly 50ms delay.

* Radar Widget
  - Fixed an issue where radar would not auto hide under certain condition.

* Sectors Widget
  - Fixed incorrect PB sector time display if "target time" is set on "Personal".

* Weather forecast Widget
  - Add "layout" option, which sets columns display order.
    "0" = show columns from left to right.
    "1" = show columns from right to left.

* Misc
  - Updated User Guide info for Compatibility, Sectors Module, Weather forecast Widget.

2.15.0 (2024-07-11)
-----------------------------
* General
  - Added new weather icon set (by S.Victor) in "images" folder.

* Fuel Calculator
  - Add Battery charge drain & regen (%) per lap to history log.
  - History table now supports multi-selection that adds data
    from any columns at once.

* RestAPI Module
  - Read "weather forecast" data from RF2 and LMU Rest API.
  - Improved and optimized accessing methods.
  - Updated session info accessing paths that work in
    both single-player and multi-player sessions.
  - Minimum "connection_timeout" value changed to "0.5".

* Sectors Module
  - Now records both "session best" and "all time best" sectors timing data
    and saved as ".sector" file under "deltabest" folder.
  - Add "enable_all_time_best_sectors" option,
    which calculates sectors timing based on all time best sectors
    and affects "Sectors Widget" display.
    This option is enabled by default.
    Set "false" to calculate sectors timing from current session only.
    Note, both session best and all time best sectors data
    are saved no matter the setting.
  - Add reset "Sector best" option to "Reset data" menu.

* Gear Widget
  - Add "rpm_bar_bkg_color" option, which sets RPM bar background color.
    Default color is full transparent.
  - Add "battery_bar_bkg_color" option, which sets RPM bar background color.
    Default color is semi-transparent.

* Pedal Widget
  - Add "show_readings" option, which shows pedal input
    and force feedback readings.
    Note, while "show_*_filtered" option is enabled, only the highest
    reading between filtered & raw input is displayed.
    Text position can be adjusted by "readings_offset" option,
    default value is 0.5, which sets position in the middle.

* [New]Weather forecast Widget
  - Show weather forecast info from RF2 or LMU, which includes:
    * Show weather icons corresponds to 11 in-game "sky types".
    * Show estimated time reading, ambient temperature reading,
      and visualized rain chance bar for upcoming weather.
    Note:
    Weather forecast currently only support in-game weather.
    The first column (with "now" label) always shows live weather condition & temperature.
    The first column always shows live rain severity instead of rain chance.
    Estimated time reading only works in time-based race.
  - Each forecast info (except weather icon) can be individually toggled on or off.
  - Auto hide unavailable weather data column.
    Note, auto hide only works for time-based race.

* Misc
  - Updated User Guide info for Fuel Calculator, RestAPI Module, Sectors Module,
    Pedal Widget, Weather forecast Widget.

2.14.1 (2024-06-24)
-----------------------------
* Radar Widget
  - Add 3 new "auto_hide_minimum_distance" options (ahead, behind, side),
    which define an invisible rectangle area(unit meter) that auto hides radar
    if no vehicle is within the rectangle area.
    Default value is "-1", which auto scales with "radar_radius" value.
    Set to any positive value to customize radar auto-hide range.
  - Add 3 new "vehicle_maximum_visible_distance" options (ahead, behind, side),
    which define an invisible rectangle area(unit meter) that
    hides any vehicle outside the rectangle area.
    Default value is "-1", which auto scales with "radar_radius" value.
    Set to any positive value to customize vehicle visible range.
  - Add 3 additional distance circle marks (total of 5 marks)
    that can be used to determine nearby vehicle relative distance.
    Each circle's default radius value is "10" meter apart.
    Note, circle marks are only displayed if "distance_circle_*_radius" values
    are within "radar_radius" value.

* Relative, Rivals, Standings Widget
  - Now draws logo only once per unique brand and stores image in cache.

* Misc
  - Updated User Guide info for Radar Widget.

2.14.0 (2024-06-14)
-----------------------------
* General
  - Config window can now be opened by double-clicking on tray icon.

* Vehicle Brand Editor
  - Add new "import from" menu, which allows importing
    brand info directly from Rest API.
    To import from Rest API, just make sure game is running,
    then click either "RF2 Rest API" or "LMU Rest API" from menu, done.
    Note, import function uses connection setting from "RestAPI Module".

* Fuel calculator
  - Add "Virtual Energy" history data and calculation.
    All fuel calculation outputs are now aligned on the left side,
    and virtual energy outputs on the right side for easy comparison.
    See user guide "Fuel calculator" section for details.
  - Add "Fuel ratio" output, which is automatically calculated from
    fuel and virtual energy consumption values.
  - Lap time values are now automatically carried over between spin boxes
    when exceeded min or max value range.
    It is now quicker and easier to adjust lap time by
    mouse clicking or scrolling.
  - "Reload" button now only updates valid lap time data
    to lap time spin boxes.

* [New]Energy Module
  - Add Energy Module for calculating virtual energy usage in LMU.
  - Add new "energy delta" user data file that stored as "CSV" format
    (.energy extension) under "TinyPedal\deltabest" folder.
    Energy delta data can be reset by accessing "Reset" menu.

* RestAPI Module
  - Read "virtual energy" values from LMU's Rest API
    for used in Energy Module.
  - Read "steering wheel range" value from LMU's Rest API
    for used in Steering Widget.
    This value is only used when "steering wheel range" value
    cannot be read from sharedmemory API.
  - Fixed a timeout error.

* Flag Widget
  - Now shows low fuel (or low virtual energy if available) indicator
    when below certain amount value.
    Only one indicator will be displayed for low fuel (LF) or low virtual energy (LE),
    depends on which one would deplete sooner.
  - Now shows low fuel value in "liter" or "gallon" based on fuel unit setting.

* Fuel Widget
  - Add "swap_upper_caption" and "swap_lower_caption" options,
    which swap caption row position.
  - Add "column_index_*" options, which set display order for
    upper, middle, and lower rows.

* Lap time history Widget, Stint history Widget
  - Add "show_virtual_energy_if_available" option,
    which shows virtual energy consumption instead of
    fuel consumption if available.
    This option is enabled by default.

* [New]Virtual Energy Widget
  - Show Virtual Energy usage data. Most settings and functionalities
    work the same way as Fuel Widget.
  - Show "fuel ratio" between estimated fuel and energy consumption,
    which can help balance fuel and energy usage,
    as well as providing refueling reference for adjusting
    pitstop "Fuel ratio" during race.
  - Virtual Energy usage readings are displayed in percentage,
    which range from 0 to 100.

* Misc
  - Updated User Guide info for Brands preset, Fuel calculator, Energy Module,
    RestAPI Module, Flag Widget, Fuel Widget, Lap time history Widget,
    Stint history Widget, Virtual Energy Widget.

2.13.0 (2024-06-08)
-----------------------------
* General
  - Now unloads all image resources on widget close to free up RAM.

* RestAPI Module
  - Add "connection_retry" option, which sets
    number of attempts to retry connection.
    Value range in "0" to "10".
    Default is "3" retries.
  - Add "connection_retry_delay" option, which sets
    time delay in seconds to retry connection.
    Value range in "0" to "60".
    Default is "1" second.
  - Fixed a timeout error.

* [New]Elevation Widget
  - Add Elevation Widget that displays track elevation plot.
    Note: elevation plot data is recorded together with track map.
    At least one complete & valid lap is required to generate elevation plot,
  - Show elevation reading in either meters or feet,
    depends on distance unit setting.
  - Show elevation progress bar & line according player's current position.
  - Show reference lines and marks.
  - Fully customizable plot display size, margin,
    detail level, text position and alignment.
    See user guide "Elevation" section for details.

* Flag Widget
  - Add "traffic_low_speed_threshold" option,
    which sets low speed threshold for showing
    nearest incoming traffic indicator (time gap).
    Default is "8" m/s (roughly 28kph).
    Set to "0" to disable.
    This option can be useful to quickly determine
    nearby traffic situation after a spin or crash.

* Track map Widget
  - Add "display_detail_level" option,
    which sets detail level for track map.
    Default value is "1", which auto adjusts
    map detail according to display size.
    Higher value reduces map detail and RAM usage,
    and may also help reduce rough edges from large map.
    Set to "0" for full detail.

* Misc
  - Updated User Guide info for RestAPI Module,
    Elevation Widget, Flag Widget, Track map Widget.

2.12.0 (2024-05-31)
-----------------------------
* General
  - Add "power_unit" option in "Units and symbols" dialog,
    which sets power unit for Electric motor & Engine Widgets.
    Available units: "Kilowatt", "Horsepower", "Metric Horsepower".

* [New]RestAPI Module
  - Add RestAPI Module, which connects to RF2 or LMU Rest API
    for accessing data that is not available through Sharedmemory API.
    Note, the APP auto detects RF2 or LMU.
    This module is enabled by default.
  - Add "module_restapi" section in JSON preset.
  - Add "url_host" option, which sets RF2 or LMU Rest API host address.
  - Add "url_port_rf2" and "url_port_lmu" options, which set port for host address.
  - Add "connection_timeout" option, which sets connection timeout duration in seconds.

* Cruise Widget
  - Now reads session "time scale" value from Rest API
    for calculating correct in game track clock time.
    Note, if RestAPI Module is disabled or Rest API data is not available,
    "track_clock_time_scale" option value will be used instead.

* Electric motor Widget
  - Add "show_power" option, which shows motor power.
  - Renamed some old option names for better readability & consistency.

* Engine Widget
  - Add "show_torque" option, which shows engine torque.
  - Add "show_power" option, which shows engine power.

* Radar Widget
  - Add "auto_hide_in_private_qualifying" option,
    which auto hides Radar in private qualifying session.
    This option is enabled by default.
  - Now reads "private qualifying" value from Rest API
    for used in "auto_hide_in_private_qualifying".
    Note, if RestAPI Module is disabled or Rest API data is not available,
    "auto_hide_in_private_qualifying" option will not take effect.

* Misc
  - Updated User Guide info for Units and symbols, RestAPI Module,
    Cruise Widget, Electric motor Widget, Engine Widget, Radar Widget.

2.11.2 (2024-04-11)
-----------------------------
* General
  - "bar_padding" option will no longer crop text between edge and padding from
    some none "mono" type fonts.
    "bar_padding" option can now be used to further increase
    each element width in widget for some none "mono" type fonts
    that exceeds default widget width.
  - Config dialog now validates values before saving,
    and shows error prompt for incorrect values.
  - Improved color validation, fixed an issue where invalid color could be saved.
  - Add clock time format validation, improved track clock time calculation.
  - Add "minimum_update_interval" option in Compatibility config,
    which sets minimum refresh rate limit for widget and module in milliseconds.
    This option is used for preventing extremely low refresh rate
    that may cause performance issues in case user incorrectly sets
    "update_interval" and "idle_update_interval" values.
    Default value is "10", and should not be modified.

* Deltabest & Deltabest extended Widgets
  - Add "freeze_duration" option, which sets freeze duration (seconds)
    for displaying previous lap time difference against best lap time source
    after crossing finish line. Value range in "0" to "30" seconds.
    Default is "3" seconds. Set to "0" to disable.

* Flag Widget
  - Optimized flag update methods.

* Gear Widget
  - Fixed a typo in "battery_bar_color_regen" default value,
    which would not show regeneration color.

* Lap time history Widget
  - Fixed missing fuel unit conversion for gallon.
  - Optimized lap history update methods.

* Pedal Widget
  - Add "show_throttle_filtered" "show_brake_filtered" "show_clutch_filtered" options,
    which set visibility of filtered pedal input.
    For vehicle that does not provide filtered pedal API data,
    turn off those options to show raw pedal input only.

* Sectors Widget
  - Now shows laptime "time gap" on "target time" bar,
    which shows laptime difference between current laptime and target laptime.
    Target laptime source depends on new "target_laptime" option.
  - Add new "target_laptime" option,
    which sets target laptime for display target reference lap and sector time.
    Set "Theoretical" to show theoretical best sector time from session best sectors.
    Set "Personal" to show sector time from personal best lap time.
  - Removed old "target_time_mode" options.
  - Removed old "always_show_laptime_gap" options.

* Stint history Widget
  - Optimized stint history update methods.

* Shared Memory API
  - Fixed a rare issue where rapidly restarting API could freeze the APP.

* Misc
  - Updated User Guide info for General options, Compatibility, Deltabest Widget,
    Deltabest extended Widget, Pedal Widget, Sectors Widget.

2.11.1 (2024-03-28)
-----------------------------
* Trailing Widget
  - Add "draw_order_index_*" options,
    which sets draw order of plot lines.

2.11.0 (2024-03-28)
-----------------------------
* [New]Fuel calculator
  - New "Fuel Calculator" can be accessed from Tools menu in main window.
    Editable options:
      * Lap time (minute:second:millisecond), can be auto-filled by Reload.
      * Tank capacity (liter or gallon), can be auto-filled by Reload.
      * Fuel consumption (liter or gallon), can be auto-filled by Reload.
      * Race length in minutes.
      * Race length in laps.
      * Formation/Rolling.
      * Average pit stop in seconds.
      * Starting fuel (liter or gallon).
    Output values:
      * Total required race fuel (liter or gallon).
      * End stint remaining fuel (liter or gallon).
      * Total required pit stops.
      * One less pit stop fuel consumption (liter or gallon).
      * Total laps can run based on "Total fuel" value.
      * Total minutes can run based on "Total fuel" value.
      * Average refueling (liter or gallon) per pit stop.
  - "Reload" button to load fuel usage & stint data from recent sessions
    into calculator without having to manually set values.
  - "History" table which lists "lap number", "lap time", "fuel consumption",
    "remaining fuel" data from recent sessions.
    Invalid lap time or fuel consumption data is highlighted in red.
  - Select any "lap time" or "fuel consumption" values from history table,
    and click "Add selected data" to send value to calculator.
    Select multiple values of same column and click "Add selected data" button
    to calculate average reading of selected values and send to calculator,
    which can be useful for planning long race.
    See user guide "Fuel calculator" section for details.

* [New]Brake performance Widget
  - Show transient max braking rate (g) from last braking input,
    and resets after 3 seconds.
  - Show max braking rate (g), and resets after a set period of time
    that defined by "max_braking_rate_reset_delay" value in Force Module.
  - Show max braking rate difference (g) against
    transient max braking rate, and resets on the next braking.
  - Show max braking rate difference (g) in percentage (%) instead.
  - Show front and rear wheel lock duration (seconds)
    per lap under braking.
    Duration increases when tyre slip ratio has exceeded
    "wheel_lock_threshold" value, and resets on first
    braking input of a new lap.

* Gear Widget
  - Add "battery_bar_color_regen" option,
    which shows energy regeneration color indicator for battery bar.

* Instrument Widget
  - Changed "wheel_lock_threshold" default value to "0.3".

* Trailing Widget
  - Add "show_wheel_lock" option,
    which shows wheel lock (slip ratio) plot under braking
    when slip ratio has exceeded "wheel_lock_threshold" value.
    Default plot style is yellow dots.
    Default "wheel_lock_threshold" value is "0.3".
  - Add "show_wheel_slip" option,
    which shows wheel slip (slip ratio) plot under acceleration
    when slip ratio has exceeded "wheel_slip_threshold" value.
    Default plot style is purple dots.
    Default "wheel_slip_threshold" value is "0.1".
  - Fixed plot lines that kept drawing after game paused.

* Force Module
  - Add "braking rate" calculation and output.
  - Add "max_average_g_force_reset_delay" option,
    which sets time delay (in seconds) for resetting
    max average g force. Default is "30" seconds.
  - Add "max_braking_rate_reset_delay" option,
    which sets time delay (in seconds) for resetting
    max braking rate. Default is "60" seconds.
  - Renamed "max_g_force_freeze_duration" option
    to "max_g_force_reset_delay" for consistency.

* Fuel Module
  - Add fuel "consumption history" logging and output for Fuel Calculator.
    Currently fuel log is not saved to user file, which resets after APP closed.

* [New]Wheels Module
  - "Wheels Module" now calculates and outputs wheel radius
    and slip ratio data for other modules and widgets.

* Config Window
  - Add "Spectate Mode Enabled" status notification,
    which shows when spectate mode is enabled.
    Click on the notification will show Spectate tab.
  - Add "Tools" menu, moved all editors to "Tools" menu.

* Shared Memory API
  - Always use direct access for "rF2ForceFeedback" and "rF2Extended"
    which don't require synchronizing.
  - Reduced "pause" detection timeout duration from 5s to 2s.

* Misc
  - Added Fuel calculator, Brake performance Widget, Wheels Module info in User Guide.
  - Updated Trailing Widget, Force Module info in User Guide.

Thanks to @DanRZ for suggestions and testing feedback.

2.10.1 (2024-03-13)
-----------------------------
* Deltabest Widget
  - Add "deltabest_source" option,
    which sets lap time source for deltabest display.
    Available values are:
      "Best" = all time best lap time,
      "Session" = session best lap time,
      "Stint" = stint best lap time,
      "Last" = last lap time.

* Delta Module
  - Stint deltabest now only resets if
    vehicle stops in pit lane.

* Vehicle Brand Editor & Vehicle Class Editor
  - "Add" button will now add all vehicle data
    found from current active session.
    Note, existing data will not be changed.

* Misc
  - Updated Deltabest Widget, Brands preset, Classes preset
    sections in User Guide.

2.10.0 (2024-03-10)
-----------------------------
* Relative, Rivals, Standings Widget
  - [New]Added "show_brand_logo" option,
    which shows user-defined brand logo if available.
    A new "brandlogo" is added to TinyPedal folder,
    which is used for storing brand logo image.
    Note: TinyPedal does not provide brand logo image assets,
    it is up to user to prepare images.
    Maximum "PNG" file size is limited to "1MB".
    See "Brand logo" section in User Guide for customization guide.
  - Added "brand_logo_width" option,
    which sets maximum brand logo display width in pixels.
    Note, maximum brand logo display height is
    automatically adapted to "font_size".

* Fuel Widget
  - Renamed all "*_mins" options to "*_minutes"
    for better readability & consistency.

* Tyre wear Widget
  - [New]Added "show_lifespan_minutes" option,
    which shows tyre lifespan in minutes.
  - Added "warning_threshold_minutes" option,
    which sets warning threshold for
    estimated tyre lifespan in minutes.
    Default is "6" minutes.
  - Renamed "show_lifespan" option to "show_lifespan_laps".

* Instrument Widget
  - Improved wheel radius sampling and calculation.

* Vehicle Brand Editor
  - No longer overrides existing brand name
    when importing data that contains existing vehicle name.

* Misc
  - Added "Brand logo" section under "User files" in User Guide.

2.9.4 (2024-03-07)
-----------------------------
* General
  - Added "driver_name_shorten" option for
    Relative, Rivals, Standings Widgets,
    which shortens driver's first name to a single letter
    with a period separating driver's last name,
    and any middle names will not be displayed.
    Note, if a driver is using nickname that consists only a single word,
    the name will not be shortened.

* Vehicle Brand Editor
  - Removed some obsolete code.

* Misc
  - Updated Relative Widget entries in user guide.

2.9.3 (2024-03-05)
-----------------------------
* [New]Rivals Widget
  - Added new Rivals Widget, which displays standings info
    from opponent ahead and behind local player from same vehicle class.
    Most options are same as from Standings or Relative Widget.
  - Added "*_color_time_interval_ahead" & "*_color_time_interval_behind"
    color options for customize time interval display.

* Relative Module
  - Added addition calculation for finding opponent ahead and behind
    local player from same vehicle class.

* Misc
  - Added Rivals Widget entries in user guide.

2.9.2 (2024-03-05)
-----------------------------
* Vehicle Brand Editor
  - Added support for importing vehicle data from RF2.
    How to export vehicle brand data from RF2 API:
    1. Start RF2, then open following link in web browser:
    localhost:5397/rest/race/car
    2. Click "Save" button which saves vehicle data to JSON file.
    Max importing file size is limited to 5mb.
  - Replaced editor List view with Table view,
    which is more efficient when processing large data set.

* Misc
  - Updated Brands preset entries in user guide.

2.9.1 (2024-03-04)
-----------------------------
* Relative Widget
  - Added "driver_name_align_center" & "vehicle_name_align_center" options,
    which align driver or vehicle name in the center when enabled.
    Default is left alignment when disabled.

* Standings Widget
  - Added "driver_name_align_center" & "vehicle_name_align_center" options,
    same as Relative Widget.

* Misc
  - Updated Relative, Standings Widget entries in user guide.

2.9.0 (2024-03-04)
-----------------------------
* [New]Vehicle Brand Editor
  - Added a new Vehicle Brand Editor,
    which can be used for substituting vehicle names
    with custom vehicle brand names.
    The new editor supports functions including:
    import, add, sort, batch rename, reset.
    The import function allows user to import
    vehicle JSON data file that exported from game API.
    See "Brands preset" section in user guide for details.

* Flag Widget
  - [New]Added "show_pit_request" option,
    which shows pit request state.
  - [New]Added "show_finish_state" option,
    which shows finish or disqualify state.

* Relative Widget
  - [New]Added "show_vehicle_brand_as_name" option,
    which shows vehicle brand name instead of vehicle name.
    Vehicle brand names are defined in "brands.json" file in "Settings" folder.
    If brand name does not exist, vehicle name will be displayed instead.

* Standings Widget
  - [New]Added "show_best_laptime" option,
    which shows driver's session best lap time.
    This option is disabled by default.
    Note: when this option is disabled,
    the other "show_laptime" option will
    show best lap time in none-race sessions.
  - [New]Added "show_vehicle_brand_as_name" option,
    same as Relative Widget.

* Tyre carcass Widget
  - [New]Added "show_rate_of_change" option,
    which shows carcass temperature rate of change for a specific time interval.
  - Added "rate_of_change_interval" option,
    which sets time interval (in seconds) for rate of change calculation.
    Default is 5 seconds.
  - Added "layout" & "column_index_*" options.

* Shared memory API Config
  - Added "character_encoding" option,
    which sets character encoding for displaying text in correct encoding.
    Default encoding is "UTF-8", which fixed some wrong text in LMU game.
    Note, "UTF-8" may not work well for some Latin characters in RF2,
    try use "ISO-8859-1" instead.

* Misc
  - "brands" filename is now reserved for vehicle brands preset.
  - Added "Brands preset" section in user guide.
  - Updated Shared memory API, Flag, Relative, Standings,
    Tyre carcass Widget entries in user guide.
  - Updated README info for LMU.

2.8.0 (2024-02-23)
-----------------------------
* [New]Damage Widget
  - Show visualized vehicle body damage, wheel damage info.
  - Show vehicle body integrity percentage reading.

* Standings Widget
  - Added "show_time_interval_from_same_class" option,
    which shows time interval from same class instead.
    This option is enabled by default, and only takes effect
    while "enable_multi_class_split_mode" is enabled.

* Steering Widget
  - Added "manual_steering_range" option,
    which sets steering display range in degrees.
    Set to "0" to read physical steering range from API.
    This option may be useful when steering range value
    is not provided by some vehicles.

* Misc
  - Added "Hyper" class to default classes.json setting.
  - Updated "rF2 Shared Memory Map Plugin" download link in README file.
  - Added new entries in Damage, Standings, Steering Widget sections in User Guide.

2.7.0 (2024-02-05)
-----------------------------
* [New]Deltabest extended Widget
  - Added new Deltabest extended widget that shows deltabest
    against multiple lap time sources.
    Note: default layout is set on horizontal.
    Set layout value to 0 to show vertical layout.
  - Show deltabest against personal all time best lap time.
  - Show deltabest against current personal session best lap time.
    Note: session deltabest will be reset upon
    changing session, or reload preset/restart APP.
  - Show deltabest against current personal stint best lap time.
    Note: stint deltabest will be reset upon entering pit.
  - Show delta against personal last lap time (deltalast).
    Note: deltalast will be reset upon ESC.

* Session Widget
  - Added "show_session_name" option,
    which show current session name that includes
    testday, practice, qualify, warmup, race.
  - Added "session_text_*" options
    for customizing session name text.
  - Added "column_index_session_name" option.
    Default value is set to 0.
    Note, user may still need to check the new "column_index_session_name" value
    to ensure no overlapping with other column_index values.

* Timing Widget
  - Added "show_stint_best" option,
    which shows personal stint best lap time.
    Note: stint best lap time will be reset upon entering pit.

* Delta Module
  - Added session deltabest, stint deltabest, delta last data output.
  - Added new laptime validation method,
    which fixed best lap time sometimes failed to validate.
    Extended validation duration to 10s.

* User guide
  - Added new entries in Deltabest extended, Session, Timing Widget sections.

2.6.1 (2024-01-18)
-----------------------------
* General
  - Added new main window position correction function
    that fixed the issue with main window being forced
    to move to first screen.
    The new correction function will now correctly detect
    multi-screen monitors, verifying and auto-correcting
    main window position if necessary.
    Thanks to DanRZ for helping with extensive testing
    and providing valuable feedback.
  - Added "enable_window_position_correction" option in Compatibility,
    which user can enable or disable main window position correction.
    This option is enabled by default.
  - Added new command line argument "--log-level="
    that can be used to set logging output level.
    "--log-level=0" outputs only warning or error log to console.
    "--log-level=1" outputs all log to console.
    "--log-level=2" outputs all log to both console & tinypedal.log file.
    Default logging output level is set on "1" if argument is not set.
    Example usage:
    ".\tinypedal.exe --log-level=2"
    Note:
    On windows, tinypedal.log is located under APP root folder.
    On linux, tinypedal.log is located under /home/.config/TinyPedal/ folder.
  - Added "Show log" option in Help menu for easy accessing to application log.
  - "Reset data" option is now also accessible from tray menu.

* [New]Heatmap Editor
  - "Heatmap editor" can now be accessed from "Config" menu in main window,
    see User Guide "Heatmap preset" section for details.

* Linux
  - Fixed wrong "button" argument that breaks "Reset" button in config dialog.

* User guide
  - Added "Heatmap Editor" info in "Heatmap preset" section.
  - Added "Command line arguments" section guide.

2.6.0 (2024-01-06)
-----------------------------
* General
  - Optimized and improved performance of most modules and widgets,
    with roughly 50-100% less overall CPU usage than previously.
  - Significantly optimized some resource-heavy Widgets
    with 5-10 times less CPU usage than previously, notably:
    Navigation, Trailing, Track map Widgets.

* Engine Widget
  - Added "show_rpm_maximum" option,
    which shows maximum engine RPM (rev limit).

* Trailing Widget
  - Removed "show_vertical_style" option.

2.5.3 (2023-12-26)
-----------------------------
* General
  - Fixed a main APP window disappearing issue
    when using with multiple screens setup.
    Added auto position correction function to force
    main APP window stay on visible screen area.
    Thanks to @Capeta for helping with test.
  - Fixed incorrect enabled module count display on Module tab.
    Further improved module load/reload functions.
  - Fixed Reset dialog title text.

2.5.2 (2023-12-23)
-----------------------------
* General
  - Improved APP, API and modules closing speed.
  - Improved vehicle-class color selection function.
  - Improved heatmap color selection function.
  - Re-verify delta data after auto-correction.
  - Added minimum threshold for force ratio calculation.
  - Simplified module import & toggle function.
  - Ignore JSON file extension name case when loading.
  - Correctly restore minimized config window when accessing from tray menu.
  - Simplified tyre compound selection function.
  - Accessing "Restart API" will no longer trigger auto-hide while driving.

* User guide
  - Updated Navigation & Track map info.

2.5.1 (2023-12-05)
-----------------------------
* General
  - Fixed APP malfunction while switching API or reloading under rare cases.
  - Sort heatmap on load.
  - Add User guide & FAQ link to main window Help menu.
  - Reworked About window, add contributors tab.
  - Don't draw sector line on map if not available.
  - Various corrections & fixes.
  - Removed additional index check methods (introduced in 2.3.0 update)
    in API access module that may potentially cause issues.

* Fuel Module
  - Fixed several incorrect lap number reference (introduced in 2.3.0 update).

2.5.0 (2023-11-27)
-----------------------------
* General
  - Rename "Display units" config dialog to "Units and symbols",
    which is now used for unified units and symbols configuration.
  - Moved all (five) "tyre_compound_list" options to "Units and symbols"
    config dialog, and is now called "tyre_compound_symbol".
  - Adjusted & unified default value for "bkg_color_circle" options
    that used in Friction circle, Heading, Navigation, Radar Widgets.
  - "show_fade_out" option no longer crops background.
  - Add option reset confirmation to various config dialog.
    Note, option reset will still only be saved and take effect
    after clicking apply or save button.

* [New]Vehicle class editor
  - Add "Vehicle class editor" that can be accessed from "Config" menu in main window,
    which provides easy-to-use vehicle class name customization.
  - The new editor can auto-detect and fill-in "full vehicle class name"
    from current active session.
    It is recommended to join or start a session with corresponding vehicle
    before adding new class entries.
    See user guide for details.

* Force Widget
  - Add "show_front_downforce" & "show_rear_downforce" options,
    which show front & rear downforce reading in Newtons.
  - Add "warning_color_liftforce" that shows color indicator
    when generating lift force.

* Navigation Widget
  - Add "show_circle_background" & "bkg_color_circle" options (enabled by default),
    which shows circle background color below navigation map.
  - Add "circle_outline_color" & "circle_outline_width" options,
    which draw outline for circle background.

* Radar Widget
  - Add "show_circle_background" & "bkg_color_circle" options (disabled by default),
    which shows circle background color below vehicle radar.

* [New]Suspension position Widget
  - Show visualized suspension position (millimeter).

* Timing Widget
  - Add "show_session_personal_best" option (disabled by default),
    which shows personal best lap time from current session.

* [New]Tyre carcass temperature Widget (by Sasker)
  - Show carcass temperature of each tyres
    based on Tyre temperature Widget design,
    which helps analyzing and managing tyre grip
    and wear relative to carcass temperature change.
  - Many customizable options.

* Misc
  - Updated user guide.
  - Updated contributors.md with new contributor (Sasker).

2.4.0 (2023-11-19)
-----------------------------
* General
  - [New]Add "Grid move" option under overlay menu and tray menu (by Bernat),
    which enables grid-snap effect while moving widget
    for easy alignment and repositioning.
    "Grid move size" option is accessible from compatibility config dialog.
  - Add "Reset data" submenu to "Overlay" menu from main window,
    which allows user to reset data from active session only.
    Currently includes deltabest, fuel delta, trackmap data.

* Linux support
  - "enable_bypass_window_manager" option is now enabled by default
    for new preset created on Linux (by Bernat).

* [New]Heading Widget
  - Show vehicle yaw angle, slip angle, & direction of travel lines on compass bearings
    that similar to flight instrument "heading indicator".
  - Show vehicle yaw angle, slip angle readings in degrees.
  - New "icon_compass.png" compass bearings background in "images" folder.
  - Many customizable options.

* [New]Navigation Widget
  - Show navigation map and orientation centered on player's vehicle.
  - Show optional vehicle standings on navigation map.
  - Many customizable options.

* Vehicles Module
  - Add "lap_difference_ahead_threshold" & "lap_difference_behind_threshold" options,
    which sets lap difference (percentage) threshold
    for tagging opponents as ahead or behind.
    Default value is "0.9" lap.
    Those options are used by lap difference color indicator
    in Trackmap, Relative, Radar, Navigation Widgets.

* Misc
  - Updated user guide.

2.3.1 (2023-11-12) Hotfix
-----------------------------
* Trailing Widget
  - Fixed FFB plot not displaying full range (absolute value).
  - Fixed small desync issue between different pedal or FFB plots.

* General
  - Removed string format on "id" key word.
  - Fixed fuel data loading error in fuel module.

2.3.0 (2023-11-11)
-----------------------------
* General
  - Fixed error in loading a different preset
    while previous preset is in saving process.
  - Change option name "rF2_process_id" to "process_id".
  - Rename unit option "elevation_unit" to "distance_unit",
    and currently is used by elevation & yellow flag distance display.
  - Fixed text string decode setting.

* [New]Trailing Widget (designed by DanRZ)
  - Show pedal trail history plot display,
    includes throttle, brake, clutch, force feedback.
  - Customizable size, scale, style, orientation, reference lines, etc.

* Relative Module
  - Fixed index out of range when returning
    to monitor while in spectate mode.

* Shared memory API
  - Add API control & data adapter to support different sims API in the future.
  - Add API name selector in Shared memory API config dialog.
  - Show API name & version info on main window status bar.

* Misc
  - Updated user guide.
  - Updated contributors.md with new contributor (DanRZ).

2.2.0 (2023-10-27)
-----------------------------
* General
  - Add "enable_translucent_background" option in Compatibility,
    which turns off translucent background if disabled.
  - Add "global_bkg_color" option in Compatibility,
    which sets global background color for all widgets.
    Note 1, global background color will only be visible
    when "enable_translucent_background" option is disabled
    or translucent background is not supported by system.
    Note 2, some widgets with own background setting may override this option.
  - Fixed window color theme when system style is set to dark-mode.

* Linux support
  - Add customizable installation path option for installer,
    improved installer error prompt,
    removing old files before installing (by Bernat).
  - Add workaround in launcher to force X11 session type
    which fixed non-draggable issue found on Wayland (by Bernat).
  - Fixed tray menu not synced with main Config window (by Bernat).

* [New]Sectors Module
  - Separated sector time calculation from Sectors Widget to this new module.

* Friction Circle Widget
  - Add "show_circle_background" & "bkg_color_circle" options,
    which shows customized circle background color.
    Note, the "show_background" option shows background color
    that covers entire Friction Circle widget.
  - Add "show_fade_out" option,
    which fades out circle background edge.
  - Add "fade_in_radius" & "fade_out_radius" options,
    which sets fade in/out radius, value range in 0.0 to 1.0.
  - Removed "background_style" option as replaced by "show_fade_out" option.

* Radar Widget
  - Add "show_background" & "bkg_color" options,
    which shows customized radar background color.
  - Add "show_fade_out" option,
    which fades out radar edge.
  - Add "fade_in_radius" & "fade_out_radius" options,
    which sets fade in/out radius, value range in 0.0 to 1.0.

* Sectors Widget
  - Now reads sectors data from Sectors Module.
  - Moved & re-implemented speed display to Speedometer Widget.

* [New]Speedometer Widget
  - Show current vehicle speed.
  - Show minimum speed that is updated while off throttle.
  - Show maximum speed that is updated while on throttle.
  - Show fastest recorded speed.
    To reset current record, shift gear into reverse, or reload preset.
    See User Guide "Speedometer" section for details.

* Misc
  - Updated README.md with Linux usage info (by Bernat).
  - Updated customization.md.

2.1.10 (2023-10-09)
-----------------------------
* Relative Widget
  - Fixed index out of range issue when configuring display rows.

* Timing Widget
  - Removed prefix alignment padding when using horizontal layout.

2.1.9 (2023-07-14)
-----------------------------
* [New]Spectate mode
  - Add "Spectate" tab that is accessible from main window.
  - Click "Enabled" or "Disabled" button to quickly toggle spectate mode on & off.
    Note, spectate mode can also be enabled by setting
    "enable_player_index_override" option to "true"
    in "Shared Memory API" config.
  - While Spectate mode is enabled, double-click on a player name in the list
    to access telemetry data and overlay readings from selected player.
    Alternatively, select a player name and click "Spectate" button.
    Current spectating player name is displayed on top of player name list.
  - Select "Anonymous" for unspecified player,
    which is equivalent to player index "-1" in JSON file.
  - Click "Refresh" button to manually refresh player name list.

2.1.8 (2023-07-13)
-----------------------------
* [New]Shared Memory API configuration
  - Add "Restart API" option to main menu bar & tray context menu,
    which can be used to quickly restart shared memory API accessing.
  - Add "Shared Memory API" config dialog,
    which can be accessed from main menu bar "Config" menu.
  - Add "shared_memory_api" section in user config file.
  - Add "access_mode" option,
    which sets access mode for shared memory API.
    Mode value "0" uses copy access and additional data check
    to avoid data desync or interruption issues.
    Mode value "1" uses direct access, which may result
    data desync or interruption issues.
    Default mode is copy access.
  - Add "rF2_process_id" option,
    which sets rF2 process ID string for accessing API from server.
    Currently this option is a placeholder, and should be left blank.
  - Add "enable_active_state_override" option,
    which enables "active state" manual override.
  - Add "active_state" option,
    which overrides local player on-track status check,
    and updates or stops overlay & data processing accordingly.
    Set "true" to activate state.
    Set "false" to deactivate state.
    This option works only when "enable_active_state_override" enabled.
  - Add "enable_player_index_override" option,
    which enables "player index" manual override.
  - Add "player_index" option,
    which sets "player index" override for displaying data from specific player.
    Valid player index range starts from "0" to max number players minus one,
    and must not exceed "127".
    Set value to "-1" for unspecified player, which can be useful
    for display general standings and trackmap info (ex. broadcasting).
    This option works only when "enable_player_index_override" enabled.

* Vehicles Module
  - Renamed "Standings Module" to "Vehicles Module",
    which provides vehicles data.

* Force Widget
  - Fixed a display issue with very large readings.

* Track map Widget
  - Add "show_map_background" & "bkg_color_map" options,
    which shows background of the inner map area.
    This option only works for circular type tracks.

2.1.7 (2023-06-16)
-----------------------------
* Flag Widget
  - Add "pit_closed_text" option, which sets custom pit closed text.
  - Add "show_traffic" option, which shows incoming on-track
    traffic indicator (time gap) while in pitlane or after pit-out.
  - Add "traffic_maximum_time_gap" option, which sets
    maximum time gap (seconds) of incoming on-track traffic.
  - Add "traffic_pitout_duration" option, which sets
    traffic indicator extended duration (seconds) after pit-out.

* Delta & Fuel Module
  - Add additional delta data validation and error correction methods,
    which auto corrects potential data desynced & disordered issue
    between recorded laptime and corresponding distance data
    that could happen in rare cases.

* Misc
  - Updated user guide with new options for Flag Widget.

2.1.6 (2023-06-12)
-----------------------------
* Deltabest Widget
  - Add "delta_display_range" option,
    which sets max display range (gain or loss) in seconds
    for delta reading, accepts decimal place.
    Default value is "99.999" seconds.

* Fuel Widget
  - Add "*early" option, which shows estimate number of pit stop counts
    when making an early pit stop at end of current lap.
    This value can be used to determine whether an early pit stop
    is worth performing comparing to "pits" value.
    More example usage and explanation in user guide.
  - Add "show_refueling_level_mark" option,
    which shows estimated fuel level after refueling.
    If the mark is not visible on fuel level bar,
    it indicates total refueling has exceeded fuel tank capacity.
    Default mark color is green.
  - Add "decimal_places" options for each individual fuel info.
    Maximum value is limited to "3".
  - Add "bar_width" options, which sets each column width in chars.
    Default value is "5". Minimum width is limited to "3".
  - Add "caption_text" options, which sets custom caption text.
  - Renamed several fuel options for consistency.
  - Removed "*start" option and starting fuel reading.

* Fuel Module
  - Add early pit stop calculation.
  - Improved calculation accuracy under certain conditions.
  - Exclude delta fuel calculation from estimated fuel consumption reading
    while vehicle is in garage stall.

* Force Module
  - Use standard deviation for max average g force comparison.

* Misc
  - Updated user guide with new options for Fuel Widget.

2.1.5 (2023-06-04)
-----------------------------
* Fuel Widget
  - Fixed a display issue with very large number formatting.

* Pedal Widget
  - Add "enable_horizontal_style" option,
    which shows pedal bar in horizontal style.
    This option is disabled by default.
  - Add "inner_gap" option,
    which sets gap between pedal and max indicator.
    Note, to completely hide indicator & extra gap space,
    set both "inner_gap" & "max_indicator_height" value to 0.

* Rake angle Widget
  - Add "show_ride_height_difference" option,
    which shows average front & rear ride height difference in millimeters.

* Delta Module
  - Improved accuracy of delta data calculation.
  - Fixed inaccurate reading issue that could happen
    during first lap of race or garage-out lap.

* Fuel Module
  - Improved accuracy & consistency of estimated fuel usage calculation.
    First lap of race & pit-in/out laps no longer affect overall fuel calculation,
    which gives more consistent stint fuel readings.
  - Accurate estimated fuel consumption & fuel delta readings
    from race first lap & pit-in/out laps.
  - Record delta fuel data from valid lap only.
  - Fixed invalid delta fuel data readings from
    tracks that uses fast timing mechanism.

* Core
  - Various improvements to sharedmemory data access methods.

* Misc
  - Updated user guide with new options for Pedal & Rake angle Widget.

2.1.4 (2023-05-29)
-----------------------------
* Relative Widget
  - Fixed "font_color" setting not correctly applied to
    "position", "driver name", "vehicle name" options
    when "show_lap_difference" is disabled.

* Misc
  - Updated user guide with additional info for "show_lap_difference" option.

2.1.3 (2023-05-29)
-----------------------------
* General
  - Adjusted all default values of "bar_padding_horizontal" to 0.5.

* Gear Widget
  - Add "show_speed_below_gear" option,
    which shows speed reading below gear.
    This option is disabled by default.
  - Add "font_scale_speed" option,
    which sets font scale for speed reading.
    This option only takes effect when
    "show_speed_below_gear" is enabled.
    Default value is 0.5.
  - Add "inner_gap" option,
    which sets inner gap between gear & speed readings.
    Negative value reduces gap,
    while positive value increases gap.
    Default value is 0.

* Relative & Standings Widget
  - Add "show_vehicle_name" option,
    which displays vehicle name in separated column.
    This option is disabled by default.
  - Removed "driver_name_mode" option.

* Misc
  - Updated contributors.md with new contributor (Sergio Rafael Lemke).
  - Updated user guide.

2.1.2 (2023-05-26)
-----------------------------
* General
  - Add "enable_auto_font_offset" option to widgets
    that have "font_offset_vertical" option.
    Enabling this option will automatically adjust font vertical offset
    based on font geometry for better vertical alignment,
    and sould give good result in most case.
    This option is enabled by default.
  - "font_offset_vertical" option now only takes effect
    when "enable_auto_font_offset" is disabled.
  - Fixed wrong vertical alignment on Friction Circle & Gear Widget.

* Core
  - Add "Global Font Override" option to "Config menu" on main window,
    which provides options to change font setting globally for all widgets.
    Options explain:
    [Font Name]
    Select a font name to replace "font_name" setting of all widgets.
    Default selection is "no change", which no changes will be applied.
    [Font Size Addend]
    Set a value that will be added (or subtracted if negative)
    to "font_size" value of all widgets.
    Default value is "0", which no changes will be applied.
    [Font Weight]
    Set font weight to replace "font_weight" setting of all widgets.
    Default selection is "no change", which no changes will be applied.
  - Add "Reset to Default" context menu to widget & module Config dialog,
    user can now right-click on an option and select "Reset to Default"
    to reset individual option.
  - Add "compatibility" option to "Config menu" on main window for easy access.
  - Moved "show_at_startup", "minimize_to_tray", "remember_position" options
    to "Window menu" on main window.
  - Removed "thick black border" from all widgets that could be visible
    when running on certain window manager, or using certain window capture APPs.

* Misc
  - Updated user guide.

2.1.1 (2023-05-24)
-----------------------------
* Flag Widget
  - Removed countdown timer feature.

* Core
  - Add new "compatibility" section in json file for solving platform specific problem.
  - Add "enable_bypass_window_manager" option in "compatibility"
    section for linux platform (thanks to help from srlemke & Bernat).

* Misc
  - Updated customization guide.

2.1.0 (2023-05-22)
-----------------------------
* [New]Friction Circle Widget
  - Show longitudinal & lateral g force as friction circle with 2 orientation layouts.
  - Show longitudinal & lateral g force readings.
  - Show max longitudinal & lateral g force readings.
  - Show reference circle from max average lateral g force reading.
  - Show g force trace plot with customizable sample size, and line or points style.
  - Show center mark and up to 5 customizable reference circles.

* Radar Widget
  - Fixed wrong outline drawing when set "vehicle_outline_width" to 0.

* [New]Force Module
  - Provide vehicle g force and downforce data calculation for Force & Friction Circle Widget,
  - Add customizable options for g force calculation.

* Misc
  - Add "Remember position" position to main window Config menu,
    which auto saves & loads last window position.
  - Minimize main window to taskbar at startup
    if both "minimize_to_tray" & "show_at_startup" are false.
  - Fixed an issue with config value validator under
    certain system language locale setting.
  - Fixed widget windows not show on top on linux (thanks to srlemke for help & testing).

2.0.3 (2023-05-15)
-----------------------------
* Gear Widget
  - Restored "show_speed_limiter" option,
    which shows pit speed limiter indicator.

* Timing Widget
  - Left alignment is now forced on all prefix text,
    and prefix width is based on the longest prefix text of all.

* pyRfactor2SharedMemory
  - Fixed a performance issue while local player is spectating.

* Misc
  - Add information about split PySide2 Linux package. (by Bernat)
  - Fix icon location in Linux desktop file. (by Bernat)

2.0.2 (2023-05-11)
-----------------------------
* Standings Widget
  - Adjusted default setting "max_vehicles_per_split_player" value from 5 to 7.

* Steering Widget
  - Fixed scale marks not shown in correct position.

* Tyre temperature Widget
  - Fixed average temperature layout not shown correctly.

* pyRfactor2SharedMemory
  - Fixed data interruption issue in multiplayer session
    that would interrupt calculation of deltabest & a few other widgets.

* Misc
  - Add additional info in customization guide for Standings widget.

2.0.1 (2023-05-10)
-----------------------------
* pyRfactor2SharedMemory
  - Hotfix to a data freeze issue reintroduced in v2.0.0
    when trying to solve data interruption issue.
    The code has been revert back to earlier version in the meantime.

2.0.0 (2023-05-10)
-----------------------------
* Core
  - TinyPedal now uses Qt GUI for all UI & widget displaying.
  - All UI & widgets have been rewritten using Qt GUI
    and support more visual effects and better performance.
  - The APP can now be launched from any folder path name.
  - There are currently 34 overlay widgets available,
    includes 10 new widgets and many reworked widgets.
  - New application main window with more functionalities,
    includes the new Widget & Module control panels
    that provide easy access to enable & disable function.
  - Add new "Config dialog" for customizing Widget & Module directly in the APP.
  - All widgets color options now support alpha value adjustment,
    which each color's opacity can be changed.
    This can be easily edited by double-clicking on color entry box
    in "Config" dialog, then adjust alpha value.
  - The old preset panel has also been redesigned with additional
    file operation supports via Right-Click context menu,
    where user can duplicate, rename, or delete selected preset.
    And preset can be easily loaded by double-clicking.
  - Add new "Display Units" config dialog,
    which handles all units setting in one place for all widgets.
  - Add "show_at_startup" and "minimize_to_tray" options to "Config" menu in main window.
  - Add "Reload" option to "Overlay" menu in main window,
    which can reload current active preset.
  - Add new customizable "heatmap.json" preset file for displaying color
    that matches specific value range of telemetry data,
    such as brake and tyre temperature.
  - Moved all previously called "real-time" modules into separated Module section,
    with a new Module panel in main window for grouped Module control and config.
  - Reworked tray icon menu:
    Add "Reload" & "Config" options.
    Removed "Widgets" sub menu.
    Show currently loaded preset name.
  - Various fixes & improvements.

* Delta Module
  - Add "IsValidLap" condition check output info,
    which is used for last lap time validation check in other timing widgets.

* Fuel Module
  - Add "Capacity", "AmountFuelStart", "AmountFuelBeforePitstop",
    "DeltaFuelConsumption", "OneLessPitFuelConsumption" data output info.
  - Further improvements to fuel calculation and estimated refueling accuracy,
    now takes consideration of player's current on track position relative to
    amount race time left for estimating more accurate finishing position and remaining distance.

* [New]Hybrid Module
  - The previous "Battery module" is now renamed to "Hybrid module" instead,
    and provide all necessary data calculation for battery and electric motor usage.

* [New]Mapping Module
  - The new "Mapping module" is used for recording track map,
    and processing map data for used in track map widget.
  - Map files are stored as SVG vector format under "TinyPedal\trackmap" folder,
    which can also be view in web browser directly.
  - The SVG vector map file contains two coordinate paths:
    First is the global x,y position path, used for drawing track map.
    Second is the corresponding track distance & elevation path, which is recorded for future use.
  - Each sector position index is also stored in SVG file for finding sector coordinates.

* Relative Module
  - Add new standings index list generator for used by standings widget.
  - Moved all vehicles info to the new "Standings module".
  - Radar widget no longer depends on Relative module.

* [New]Standings Module
    - The new "Standings module" now handles and provides all players & vehicles info
      that is required by widgets such as relative, radar, standings, track map, etc.

* [New]Battery Widget
  - The previous "Hybrid Widget" is now split into two separate widgets,
    which are "Battery Widget" & "Electric motor Widget".
  - Show percentage available battery charge with low charge warning.
  - Show percentage battery charge drained in current lap.
  - Show percentage battery charge regenerated in current lap.
  - Show electric boost motor activation timer.

* [New]Brake bias Widget
  - Show percentage forward Brake bias.
  - Add "decimal_places" option, which sets amount decimal places to keep.
  - Add "show_front_and_rear" option, which shows both front and rear bias.
  - Add "show_percentage_sign" option, which shows percentage sign.

* [New]Brake pressure Widget
  - Show visualized percentage brake pressure of each wheel.

* Brake temperature Widget
  - Add "heatmap_name" option, which user can assign a custom heatmap preset.
  - Renamed "color_swap" option to "swap_style",
    which swaps heatmap color between font & background color.

* Deltabest Widget
  - Remove bar scale options, and replaced with "bar_length" & "bar_height" options,
    which sets delta bar length & height in pixels.
  - Add "show_animated_deltabest" option,
    which deltabest display follows delta bar progress.

* [New]Electric motor Widget
  - Show boost motor temperature.
  - Show boost motor cooler water temperature.
  - Show boost motor RPM.
  - Show boost motor torque.
  - Show overheating warning.

* Flag Widget
  - Add "P CLOSE" warning text on pit timer with customizable color,
    which shows when pit lane is closed while in pit.
  - Add distance display for yellow flag indicator,
    which shows nearest yellow flag vehicle distance to player in meters.
  - Add "yellow_flag_maximum_range" option,
    which only shows yellow flag indicator when there is yellow flag
    within the maximum range (track distance in meters).
    Default is 500 meters.
  - Fixed low fuel & flag indicators not hiding issue.

* Fuel Widget
  - Add "save" fuel display, which shows minimum fuel consumption in order to
    achieve one less pit stops than current estimated number of pit stops.
  - Add new "Start" & "End" fuel display,
    which shows amount fuel at the start of stint,
    and estimated amount fuel left at the end of stint (just before pit stop).
  - Add "show_fuel_level_bar" option,
    which shows a visualized horizontal fuel level bar in the middle.
  - Add "show_starting_fuel_level_mark" option,
    which shows starting fuel level mark of current stint on fuel level bar.

* Gear Widget
  - Add "show_speed" option, which shows speed display when enabled.
  - Add "show_battery_bar" option,
    which shows battery bar that is only visible if electric motor available.
  - Add "rpm_multiplier_critical" option,
    which sets critical RPM range for RPM color indicator.
  - Add "show_rpm_flickering_above_critical" option,
    which shows flickering effects when RPM is above critical range
    and gear is lower than max gear.
  - Add "column_index" options, which can be used to re-arrange layouts.
  - Removed old "layout" option.

* Instrument Widget
  - Add "last_vehicle_info" option,
    which saves the last driven vehicle name for matching wheel radius.
  - Significantly improved average wheel radius calculation.
  - Average radius calculation now starts with a small amount samples
    and then gradually increases to highest number of samples.
    If "last_vehicle_info" matches current vehicle,
    then average radius calculation starts from highest number of samples.

* [New]Lap time history Widget
  - Show current lap number, current estimated lap time,
    current estimated fuel consumption, current lap average tyre wear.
  - Show history lap number, history lap time,
    history lap fuel consumption, history lap average tyre wear.
  - The number of lap time history can be set with "lap_time_history_count" option.
  - Show invalid lap time indicate color (default red).
  - Add "show_empty_history" which shows empty lap time history.
    Default is False, which hides empty rows.

* P2P Widget
  - Add "activation_threshold_throttle" option,
    which sets minimum throttle input percentage threshold for P2P ready indicator.
    Default is 0.6, which is 60% of throttle.

* Pedal Widget
  - All pedal & FFB display can now be individually turned off or on.
  - Add "column_index" options, which can be used to re-arrange layouts.

* Radar Widget
  - Now show all vehicles within the radar radius,
    removed "additional_vehicles_front" & "additional_vehicles_behind" options,
  - Now shows different customizable colors for
    player, leader, opponents on same lap or lapped,
    vehicles under yellow flag or in pit lane.
  - Now reads all vehicle info from Standings module.
  - Replaced "radar_scale" with new "global_scale" option,
    which sets global scale of radar display related to screen pixel.
    Default value is "6", which is 6 times of original size.
  - Changed "radar_radius" default value from 25 to 30.
  - Add "vehicle_border_radius" option,
    which sets vehicle visual round border radius.
  - Add "vehicle_outline_width" option,
    which sets vehicle visual outline width.
  - Add "show_overlap_indicator" option,
    which shows overlap indicator when there is nearby side by side vehicle.
  - Add "overlap_detection_range_multiplier" option,
    which sets overlap detection range multiplier that scales with vehicle width.
  - Add "indicator_size_multiplier" option,
    which sets indicator visual size multiplier that scales with vehicle width.
  - Changed "center_mark_radius" default value from 25 to 30.
  - Add "center_mark_width" option,
    which sets center mark line width in pixels.
  - Add "distance_circle_1_width", "distance_circle_2_width" options,
    which sets distance circle line width in pixels.
  - Add "center_mark_style" & "distance_circle_style" options.

* [New]Rake angle Widget
  - Show rake angle in degrees.

* Relative Widget
  - Now reads all vehicle info from Standings module.
  - Now all columns can be turned on or off, and every column color can be customized.
  - No longer show lap difference color in none race session.
  - Add "show_player_highlighted" option,
    which highlights player row with customizable specific color.
  - Add "show_lap_difference" option,
    which shows different font color based on lap difference between player and opponents. 
  - Add "show_position", "show_driver_name", "show_time_gap" options,
    which can be turned on or off individually.
  - Add "driver_name_uppercase" option,
    which sets driver name to uppercase.
  - Add "show_random_color_for_unknown_class" option,
    which show random color for unknown class name that is not defined in classes.json.

* [New]Ride height Widget
  - Show visualized ride height display.
  - Add "ride_height_max_range" option,
    which sets visualized maximum ride height range (millimeter).

* [New]Standings Widget
  - Most options are inherited from relative widget, with some additions noted below.
  - Add "max_vehicles_combined_mode" option,
    which sets maximum amount vehicles to display,
    which takes effect when "enable_multi_class_split_mode" is not enabled.
    When total vehicle number is lower than this value,
    extra rows will auto-hide.
    When total vehicle number is above this value,
    the top 3 vehicles will always show,
    and rest of the vehicles will be selected from
    the nearest front and behind places related to player.
  - Add "max_vehicles_split_mode" option,
    which sets maximum amount vehicles to display,
    which takes effect when in multi-class session and
    "enable_multi_class_split_mode" is enabled.
    If total vehicle number is above this value,
    any extra vehicles will not be shown.
    Default value is "50", which is sufficient in most case. 
  - Reworked "show_time_gap" option.
    For race session, this option shows time gap between leader and all other drivers.
    For other none race sessions, this option shows the time gap
    between session's best lap time and all other drivers.
  - Add "show_time_gap_from_class_best" option, which shows time gap
    from none race session's best lap time of the same vehicle class.
  - Add "time_gap_leader_text" option, which sets text indicator for race leader.
  - Add "time_gap_decimal_places" option, which sets amount decimal places to keep.
  - Add "show_time_interval" option,
    which shows time interval between each closest driver in order.

* Sectors Widget
  - Removed "show_position_lapnumber" option.

* Session Widget
  - Add "prefix_lap_number" & "prefix_position" options.
  - Improved lap number formatting.
  - Removed unnecessary zero padding and decimal places in session timer.

* Steering Widget
  - Add "bar_width" & "bar_height" options,
    which sets steering bar width & height in pixels.
  - Add "show_steering_angle" option,
    which shows steering angle text in degree.

* Stint history Widget
  - Separated tire compound display to its own column.
  - Adjusted default color theme.
  - Add "show_empty_history" which shows empty stint history.
    Default is False, which hides empty rows.

* Timing Widget
  - Show invalid last lap time indicate color (default red).

* [New]Track map Widget
  - Show current track map, which the map is recorded & read from Mapping module.
  - Shows different customizable colors for
    player, leader, opponents on same lap or lapped,
    vehicles under yellow flag or in pit lane.
  - Add "show_background" option, which shows track map background.
  - Add "area_size" option, which sets area display size.
  - Add "area_margin" option, which sets area margin size.
  - Add "map_width" option, which track map line width.
  - Add "map_outline_width" option, which sets track map outline width.
  - Add "show_start_line" option, which shows start line mark.
  - Add "show_sector_line" option, which shows sector line mark.
  - Add "show_vehicle_standings" option, which shows vehicle standings info on map.

* [New]Tyre load Widget
  - Show visualized tyre load display.
  - Add "show_tyre_load_ratio" option,
    which shows percentage ratio of tyre load between each and total tyre load.
    Set "false" to show individual tyre load in Newtons.

* Tyre pressure Widget
  - Renamed old "Pressure widget" to "Tyre pressure Widget"

* Tyre temperature Widget
  - Add "heatmap_name" option, which user can assign a custom heatmap preset.
  - Renamed "color_swap" option to "swap_style",
    which swaps heatmap color between font & background color.
  - Renamed "ICO_mode" option to "show_inner_center_outer",
    which sets inner, center, outer temperature display mode.

* Wheel alignment Widget
  - Renamed old "Wheel widget" to "Wheel alignment Widget".

* Misc
  - Updated Customization guide.
  - Updated README.
  - Updated THIRDPARTYNOTICES and licenses.
  - Removed feature.md, feature info can be found in Customization guide.
  - Updated "icon_instrument.png" with slightly adjustments.
  - Moved icon.png & icon.ico file into "images" folder.
  - Updated executable building script.


1.12.1 (2023-04-07)
-----------------------------
* Relative Widget
  - [New]Add "hide_vehicle_in_garage_for_race" option in JSON,
    which hides vehicles that are stored in garage stall during race (for example, DNF or DQ).
    This option is enabled by default, set to false to disable.

* Hybrid Widget
  - Use plus/minus sign for regen/drain display.

* Core
  - Remove always on top on main(preset) window. (by Bernat)
  - Fixed an issue where app would fail to run if the current working directory isn't the app directory. (by Bernat)
  - Fixed deltabest being interrupted by mid-joining in multiplayer session.
  - Add "Quit" to Config menu in preset window.

* pyRfactor2SharedMemory library
  - Now always stores a separate copy of verified local-player-only data.

* Misc
  - Update README with install instruction for Linux. (by Bernat)
  - Updated customization guide for Relative Widget.

1.12.0 (2023-04-05)
-----------------------------
* [New]Hybrid Widget
  - Show percentage available battery charge.
  - Show percentage battery charge drained in current lap.
  - Show percentage battery charge regenerated in current lap.
  - Show boost motor temperature with customizable unit & overheating indicator.
  - Show boost motor cooler water temperature with customizable unit & overheating indicator.
  - Show boost motor RPM.
  - Show boost motor torque.
  - Show boost motor activation timer.

* [New]P2P Widget
  - Show percentage available battery charge.
  - Show battery drain & regen color indicator.
  - Show P2P (boost motor) activation timer.
  - Customizable P2P activation threshold options.

* Sector Widget
  - Fixed a typo that caused wrong sector index reading.

* Core
  - [New]Add installer script for Linux (by Bernat).
  - [New]Add battery module for calculating battery charge usage.

* pyRfactor2SharedMemory library
  - Add hybrid related entries.
  - Fixed ctypes data types for linux (by Bernat).

* Misc
  - Updated customization guide for Hybrid & P2P Widget.
  - Updated feature.md.

1.11.8 (2023-04-01)
-----------------------------
* Core
  - Fixed an issue where deltabest & fuel delta values would briefly jump around when crossing start/finish line.
  - Fallback to index 99 if player index not found.

1.11.7 (2023-03-22)
-----------------------------
* Gear Widget
  - Add "neutral_warning_time_threshold" additional condition check option in JSON,
    which activates color warning when both speed & time-in-neutral is higher than threshold.
    This helps avoid displaying color warning during normal shifting.
    Default value is "0.3" seconds.

* Core
  - Fixed an index out of range error that related to mSector data,
    which could cause Sector & Flag Widget to freeze.

* Misc
  - Updated customization guide for Gear Widget.

1.11.6 (2023-03-10)
-----------------------------
* Radar Widget
  - Add "auto_hide" option in JSON (default ON),
    which auto hides radar display when no nearby vehicles.
  - Add "auto_hide_time_threshold" option,
    which sets amount time(unit second) before triggering auto hide.
  - Add "minimum_auto_hide_distance" option,
    which sets minimum straight line distance(unit meter) before triggering auto hide.
    Set -1 value to auto scale with "radar_radius" value. Default value is -1.
  - Replaced "vehicle_scale" with new "radar_scale",
    which sets global scale of radar display.
  - Replaced "area_scale" with new "radar_radius",
    which sets radar display area by radius(unit meter).
  - Add "center_mark_radius" option,
    which sets center mark size by radius(unit meter).
  - Add "show_distance_circle" option,
    which shows 2 distance circles for distance reference.
  - Add "distance_circle_1_radius" & "distance_circle_2_radius" option,
    which sets distance circle size by radius(unit meter).
    Distance circle will not be displayed if radius is bigger than "radar_radius".

* Misc
  - Updated customization guide with new configurable options for Radar Widget.

1.11.5 (2023-03-08)
-----------------------------
* pyRfactor2SharedMemory library
  - Fixed a data freeze issue that caused by mismatched player's index between rF2Scoring & rF2Telemetry.
  - Now keeps two separate player's index values of the same local player, one for rF2Scoring, one for rF2Telemetry.
  - Add new mID matching method that uses rF2Scoring player's index
    to match the same mID and retrieves correct player's index in rF2Telemetry,
    which can also be used to match remote player's index in rF2Telemetry.

* Core
  - Updated relative module to use the new mID matching method.

1.11.4 (2023-03-07)
-----------------------------
* Brake Widget
  - Fixed wrong heatmap color display for Fahrenheit temperature unit.

* Relative Widget
  - [New]Add "show_pit_request" option in JSON,
    which shows pit request color indicator on pitstop count column.
  - [New]Add "show_pit_timer" option in JSON,
    which shows pit timer on last laptime column.
  - [New]Add "pit_time_highlight_duration" option in JSON,
    which sets highlight duration for total amount time spent in pit after exit pit.

* Stint Widget
  - [New]Add "stint_history_count" option in JSON,
    which sets the number of stint history display. Default is to show 2 most recent stints.
  - [New]Add "minimum_stint_threshold_minutes" option in JSON,
    which sets the minimum stint time threshold in minutes for updating stint history.
    This only affects ESC.
  - [New]Add "layout" option with 2 available layouts: vertical & reversed vertical.
  - Only update data when not in garage.

* Temperature Widget
  - Fixed wrong heatmap color display for Fahrenheit temperature unit.

* pyRfactor2SharedMemory library
  - Corrected "ctypes data types" in rF2data.py to match "C data types" in rF2State.h from Sharedmemory Plugin.
  - Reverted back to mIsPlayer finding method, removed unused code.
  - Auto set driving status to False after 3 seconds without receiving new data.

* Misc
  - Updated customization guide with new configurable options for Relative & Stint Widget.

1.11.3 (2023-02-26)
-----------------------------
* Radar Widget
  - [New]Now supports displaying up to 126 nearby vehicles! (63 front & 63 behind vehicles).
  - Significantly improved & optimized drawing methods.

* Relative Widget
  - [New]Now dynamically generates relative players list that supports
    displaying up to 126 nearby players! (63 front & 63 behind players).
  - All players on relative list are properly sorted by
    relative distance between each opponent and local player vehicle,
    which also fixed an issue that players list previously
    would jump around the moment crossing finish line.
  - Fixed an issue where sometimes lap difference & color indicator won't get updated.

* Core
  - Various small improvements.

* pyRfactor2SharedMemory library
  - Now uses player name matching for finding player index.

* Misc
  - Updated customization guide with new info for Radar & Relative Widget.
  - Updated feature.md.

1.11.1 (2023-02-20)
-----------------------------
* Core
  - Add delayed setting saving method that limits to one save operation for a given period.
  - Now verifies setting file after saving, and retries if errors found (3 attempts).

1.11.0 (2023-02-16)
-----------------------------
* General
  - Added "column_index" option for most widgets.
  - Added "text_padding" option for most widgets,
    which sets text edge padding value that multiplies & scales with "font_size".
    This option affects how compact widget looks.
    Default is "0.2" for most widgets.
  - Added individual font & background color options for most widgets.
  - Each info display can be individually disabled for most widgets.

* [New]Brake Widget
  - Separated Brake temperature info from Temperature Widget to the new Brake Widget.
  - [New]Show average brake temperature of current lap that calculated in realtime.
  - [New]Highlighting average brake temperature from previous lap after crossing start/finish line.
  - Show/hide degree sign for maximum compact looking.
  - Added "leading_zero" and more options in JSON.

* Engine Widget
  - [New]Added horizontal layout.
  - [New]Added "turbo_pressure_unit" option (bar, psi, kPa) in JSON, default is bar.
  - [New]Added Fahrenheit unit for temperature display via "temp_unit" in JSON.

* [New]Flag Widget
  - Separated flag, pit status, start lights info from Gear Widget to the new Flag Widget.
  - Show pit timer, and total amount time spent in pit after exit pit.
  - Show low fuel indicator when fuel level is below certain amount value.
  - Show speed limiter indicator.
  - Show yellow flag indicator of current & next sectors.
  - Show blue flag indicator with timer.
  - Show race start lights indicator with light frame number for standing-type start.
  - Show race start countdown timer for standing-type start.
  - Two layouts option (vertical & horizontal).

* Force Widget
  - [New]Added horizontal layout.

* Fuel Widget
  - [New]Added "low_fuel_lap_threshold" option in JSON.

* Gear Widget
  - [New]Added "neutral_warning_speed_threshold" option in JSON,
    which sets speed threshold value for color warning
    when gear is in neutral and vehicle speed is higher than the threshold.
    Speed unit in meters per second. Default value is "28", which is close to 100 kph.
    This option is helpful for situation where player mis-shifted gear into neutral at high speed.
  - Added "show_speed_limiter" option in JSON, which can be turned off.

* Instrument Widget
  - [New]Each instrument icon can be individually hide in JSON.

* Pedal Widget
  - [New]Added "show_brake_pressure" option in JSON that
    shows brake pressure changes applied on all wheels,
    which auto scales with max brake pressure and
    indicates amount brake released by ABS on all wheels.
    This option is enabled by default, which replaces
    game's filtered brake input that cannot show ABS.

* Pressure Widget
  - [New]Show percentage brake pressure of each wheel.
  - Tyre load ratio is now calculated against sum of all wheels load.
  - Reworked layouts (vertical & horizontal).
  - [New]Added "show_caption" option in JSON.

* Relative Widget
  - Removes brackets from combined driver name if name is empty.

* Sectors Widget
  - Removed unnecessary "show_best_sector_time" option,
    always shows each best sector time if available.

* Steering Widget
  - [New]Added "scale_mark_degree" option in JSON,
    which set gap between each scale mark in degree.

* Stint Widget
  - Removed "fuel_unit" option, now uses fuel unit setting from Fuel Widget instead.

* [New]Suspension Widget
  - Separated Ride height & Rake angle info from Wheel Widget to the new Suspension Widget.
  - [New]"ride_height_offset" option is now available for all wheels.
  - [New]Separated warning color options as "warning_color_bottoming" for Ride height
    and "warning_color_negative_rake" for Rake angle.
  - [New]Added "show_caption" option in JSON.

* Temperature Widget
  - [New]Added "ICO_mode" option which shows full tyre temperature display mode (inner/center/outer).
  - [New]Added "show_innerlayer" option which shows tyre inner layer temperature.
  - [New]Added "show_tyre_compound" option which shows tyre compound index letter (front/rear).
  - [New]Show/hide degree sign for maximum compact looking.
  - [New]Added "leading_zero" and more options in JSON.
  - Removed Brake temperature info.

* Timing Widget
  - [New]Show current session best laptime from all vehicle classes,
    with additional option to show laptime from same vehicle class only (default ON).
  - [New]Each info prefix text can be customized or hide in JSON.
  - Removed double lines horizontal layout.

* Wear Widget
  - Adjusted options naming in JSON.
  - [New]Added "show_caption" option in JSON.

* Weather Widget
  - Moved "Dry/Wet" label to wetness bar.
  - [New]Show/hide percentage sign for maximum compact looking.

* Core
  - Optimized GUI update methods for all widgets with over 50% less CPU usage.
  - Auto sorts all options in JSON file according to default setting template
    for better readability and consistency.
  - Add Linux instructions to README.md (by Bernat).
  - Improved various calculation.
  - Fixed setting loading errors.
  - Fixed a hanging problem if no widgets enabled while exiting APP.

* pyRfactor2SharedMemory library
  - Fallback to mID matching if mIsPlayer fails to retrieve player index.
  - Add additional auto restart condition check for sharedmemory mapping.

* Misc
  - Updated customization guide with new configurable options for each widget.
  - Updated feature.md.

1.10.3 (2023-01-31)
-----------------------------
* Relative Widget
  - [New]Implemented lazy GUI update method that reduces Relative Widget CPU usage by 80% more.
  - [New]Added pitstop count display (requested by srlemke),
    re-arranged column index order to fit pitstop count display.
  - [New]Added "driver_name_mode" customization options in JSON file,
    which can be set to display either driver name, vehicle(livery) name, or combined (requested by MMartin & srlemke).
  - Added additional customization options.

* Sectors Widget
  - Now freezes and shows current lap fastest speed (thanks to Piervit's suggestion),
    and auto resets when a new lap begins.
  - Now validates session fastest speed at beginning of a new lap,
    and auto restores valid session fastest speed for fastest speed found from invalid lap.
  - Speed value now shows an additional decimal place for more accurate reading.

* Core
  - Fixed alpha opacity issue under linux (by Bernat).

* Misc
  - Updated customization guide with new configurable options.

1.10.2 (2023-01-29)
-----------------------------
* Preset manager
  - [New]Add menu bar with same functionality as tray icon menu for all platform,
    which substitutes tray icon for none-windows platform.
  - Now handles all underlaying widget & module & APP control. 

* Sectors Widget
  - Properly saves current session fastest top speed from valid lap.

* Customization
  - Added "transparent_color" setting in JSON config file.
    This setting is meant to be used by none-Windows platform
    where transparent background color is not supported,
    and user may customize a substitute color.

* Core
  - Added initial cross platform support (by Bernat).
  - Rewritten & improved code structure to support cross platform.
  - Fixed a widget position reset issue that can occur if auto-hide is enabled
    while launching the APP or reloading a preset.

* Misc
  - Updated contributors.md with new contributor (Bernat).
  - Updated customization guide with new configurable setting.

1.10.1 (2023-01-14)
-----------------------------
* Core
  - Fixed invalid deltabest & fuel data filename that contains special characters,
    which would cause saving & loading error.
  - Improved calculation for cruise, pedal, pressure, temperature, wheel widgets.

1.10.0 (2022-12-09)
-----------------------------
* [New]Sectors Widget (created by Nibo)
  - Show accumulated target sector time, with two available options:
      * Show theoretical best sector time from best sectors of current session.
      * Show sector time from personal best laptime of current session.
  - Show accumulated current sector time.
  - Show sector/laptime gap comparing to sector time from personal best laptime of current session.
    Default is set to show for 5 seconds after done previous sector.
    Can be set to always show in config file.
  - Show theoretical best sector time of each sector on 3 separated sector bars.
  - Show sector time gap against session best sector time on sector bars.
  - Auto-freeze previous sector display for 5 seconds after done previous sector.
    Freeze duration can be customized in config file.
  - Auto save "best laptime", "best sector time","personal best sector time" of current session
    in config file when player returns to garage screen, and (re)load when player on track.
    Note: All the saved data is only valid for current session or car/track combo,
          and will be reset if current session ends or car/track combo changes,
          similar to how game handles those data.
  - Show optional current vehicle speed & session fastest speed.
  - Show optional local driver position standing & current lap number, similar to Session Widget.

* Gear Widget
  - Fixed indicators would not hide under certain condition.

* Core
  - [New]Added Sectors options in setting file.
  - Improved laptime format method for various widgets.

* pyRfactor2SharedMemory library
  - Now periodically check & compare shared memory data version.
  - Auto restart memory mapping if data version stopped updating after a period of time.
    This helps avoid data freeze issue during various situation,
    and unexpected lost connection or game crash will no longer cause auto-hide malfunction.

* Misc
  - Updated customization guide with new configurable setting for Sectors Widget.
  - Updated feature.md for Sectors Widget.
  - Updated contributors.md with new contributor (Nibo).

1.9.5 (2022-11-24)
----------------------------
* Fuel Widget
  - [New]Show "estimated fuel consumption" that is constantly updated and calculated
    against the new fuel delta consumption data from last recorded lap.
    The new estimated value replaces the old "last lap fuel usage" value and more accurately reflects
    how each fuel info changes with driver's input or engine mixture levels, etc.
  - [New]Fuel consumption & last laptime values are now stored inside new fuel delta consumption file,
    which corresponds to each matching vehicle-track combo and auto-loads while driving.
    User can quickly jump back in a previously driven combo with all fuel consumption data available right away.

* Core
  - [New]Added fuel consumption recording & delta calculation functions to Fuel module.
  - [New]Fuel delta consumption file is now saved in "TinyPedal\deltabest" folder with *.fuel extension,
    Note: For accuracy purpose, only the fuel delta consumption data from most recent complete lap
          will be recorded and used for delta consumption calculation. 
          This includes full laps that have exceeded track limits, but excludes pitin & pitout laps.
  - Fixed an error that occurred after toggle auto-hide and reload preset.
  - Improved auto-hide function.
  - Improved deltabest recording methods.
  - Removed "fuel_consumption" value from fuel section of setting file.
  - Removed "last_laptime" value from timing section of setting file.

* Misc
  - Updated documents.

* pyRfactor2SharedMemory library
  - Further improved synced methods for reading local player info.
  - Separated none-synced methods from player-synced methods to be compatible
    with apps or functions that uses none-synced methods.
    Note: TinyPedal now uses player-synced methods for reading shared memory.

1.9.4 (2022-11-20)
----------------------------
* pyRfactor2SharedMemory library
  - Fixed "players_mid" variable that could be referenced before assign.

1.9.3 (2022-11-20)
----------------------------
* Core
  - Auto-hide function is reverted back to previous method,
    which depends on player's engine ignition status.
  - Removed all previous driver status check methods,
    as new changes to pyRfactor2SharedMemory library has fixed the issue
    that associated with players joining or disconnecting from server.
  - Now also shows data while "Toggle AI control" enabled.

* pyRfactor2SharedMemory library
  - All Telemetry & Scoring info is now constantly updated in a separated thread.
  - Now uses deep copy on Telemetry & Scoring info
    and verifies mVersionUpdate values to avoid data changes or corruption.
  - Now finds player's index number against a single Scoring info piece.
    Previously this was not done on a single info piece,
    which data could be changed or corrupted while checking.
  - Now uses player's mID from the verified Scoring info
    and compares with the mID from Telemetry info to ensure
    all assigned Telemetry & Scoring info data is correctly synced to local player.

1.9.2 (2022-11-19)
----------------------------
* Preset manager
  - [New]TinyPedal now supports reload & change preset while running.
  - [New]Added "Load Preset" to tray icon menu.
  - Preset manager window no longer opened at launch. TinyPedal will always load last used preset at launch.
  - Due to limitation, active preset name no longer shows on tray icon menu.

* Wear Widget
  - [New]Added "show_lifespan" option to show estimated tyre lifespan in laps.
  - [New]Added "show_realtime_wear" option to show current lap tyre wear that constantly updated in realtime.
  - [New]Added additional "font_color" & "warning_threshold" and many more customization options.
  - Improved and more accurate tyre wear calculation.
    Properly calculates tyre wear for pit in & out lap.
  - Reduced custom layouts to 2 variations, but added new customizable column order.

* Core
  - Auto-hide function is now based on game's FFB output value for high accuracy and stability.
  - Added multiple local driver status check method to eliminate data interrupting
    when other players have joined or disconnected from server.
  - Fixed incorrect laptime validation duration for deltabest module.
    Best laptime data is now saved right after validation.
  - Significantly improved code structure.
    All threads are now properly closed before exiting.

* pyRfactor2SharedMemory library
  - Added additional code to properly close shared memory mapping before exiting.
  - Added number of vehicles difference check.
  - Increased max player index check to 128.

* Misc
  - Updated customization guide with new configurable setting for Wear Widget.

1.9.0 (2022-11-07)
----------------------------
* [New]Preset manager
  - Added new "Preset" list window when launching TinyPedal,
    where user can load exist preset, or create new preset.
    Preset files are sorted by last modified date.
  - All JSON preset files are now saved in "TinyPedal\settings" folder.
    User may manually move all old JSON files into "settings" folder.
    Note: Preset manager does not provide file delete function (to avoid accidental deletion).

* Core
  - [New]Tray icon menu now shows current preset name.
  - [Critical]Fixed an issue that could cause deltabest module to stop updating.
  - Many improvements.

* Misc
  - Updated py2exe building script to use new "freeze" (py2exe v0.12 and above).
  - Updated third-party software libraries.
  - Updated customization guide with info about the new preset manager.

1.8.1 (2022-11-01)
----------------------------
* Core
  - Improved auto-hide function & player status check.
  - Added additional player data verification for deltabest & fuel modules.

* pyRfactor2SharedMemory library
  - [New]Added an argument to pass rf2 PID to SimInfo for reading data from dedicated server.

1.8.0 (2022-10-07)
----------------------------
* Relative Widget
  - [New]Relative Widget now displays up to 6 additional players (3 front & 3 behind, total 13),
    which is customizable via new "additional_players_front" & "additional_players_behind" option in config.json.
    Default is set to show 0 additional players. See customization guide for details.

* Radar Widget
  - [New]Radar Widget now displays up to 18 additional vehicles (9 front & 9 behind, total 25),
    which is customizable via new "additional_vehicles_front" & "additional_vehicles_behind" option in config.json.
    Default is set to show 8 additional vehicles (4 front & 4 behind). See customization guide for details.

* Core
  - Updated Relative Module to support additional players/vehicles display for Relative Widget & Radar Widget.

* Misc
  - Updated customization guide with new configurable setting for Relative & Radar Widget.

1.7.0 (2022-10-03)
----------------------------
* [New]Fuel Module
  - Moved all fuel usage calculation into the new separated "Fuel Module"
    which runs in a separated thread at a much higher 1000hz refresh rate.
  - Fuel Widget as well as other Widgets now have access to fuel usage info from this module.
  - Ignores pit-in & pit-out lap for more accurate fuel usage report for endurance race. 

* Gear Widget
  - [New]Display low fuel warning beside speed gauge. Default is set to show only for race.
  - [New]Display blue flag warning with customizable text beside speed gauge. Default is set to show only for race.
  - [New]Display sector-based yellow flag warning beside speed gauge. Default is set to show only for race.
  - [New]Added "font_weight_indicator" setting for customizing indicator font weight separately.
  - [New]Added "font_color_speed_limiter" & "bkg_color_speed_limiter" for speed limiter indicator.
  - [New]Added large amount customizable options for new indicators,
    see Gear section in customization guide for details.

* Misc
  - Updated customization guide with new configurable setting for Gear Widget.
  - Updated features list.

1.6.10 (2022-09-30)
----------------------------
* Core
  - Extended laptime validation period from 2s to 8s in case of game's new cut detection being triggered.
  - Improved Relative module structure.

* pyRfactor2SharedMemory library
  - Added numeric validation for every sharedmemory data input to eliminate data reading errors during game crash, freeze or unexpected interruption.

1.6.9 (2022-09-11)
----------------------------
* Core
  - Fixed an empty list issue that can result "list index out of range" in Relative module.

1.6.8 (2022-09-03)
----------------------------
* Core
  - Fixed a "list index out of range" issue in Relative module when client lost connection from server.

1.6.7 (2022-08-15)
----------------------------
* Relative Widget
  - [New]Add tyre compound index (front/rear) column with customizable compound letter & color in config.json.
    Note: due to this addition and changes to column order, it is advised to double check for column_index values
    set in config.json to avoid column overlapping.
  - [New]Add "bar_time_gap_width" option in config.json for relative time gap, default value is 5 (char width).

* Core
  - Improved "Time Gap" calculation in Relative module.

* Misc
  - Updated customization guide with new configurable setting for Relative Widget.
  - Updated features list.

1.6.6 (2022-07-31)
----------------------------
* Instrument Widget
  - Improved wheel radius calculation.
  - Now refreshes wheel radius reading when current number of recorded samples has reached "minimum_samples" value,
    which helps make slip indicator more responsive and accurate.

* Cruise Widget
  - Removed some useless calculation.

* Core
  - Fixed a typo that could cause "list index out of range" error in Relative module.

* Misc
  - Minor changes to customization guide.

1.6.5 (2022-07-16)
----------------------------
* Cruise Widget
  - [New]Add "track_clock_time_scale" setting in config.json for time scaled session.
    Default value = 1, which matches "Time Scale: Normal" setting in-game.

* Relative Widget
  - Empty row now has default background color.

* Misc
  - Updated customization guide with new configurable setting for Cruise Widget.

1.6.4 (2022-07-08)
----------------------------
* Core
  - Fixed a rare "list index out of range" error in Relative module when player has lost connection from a server,
    which would stop relative date from updating.

1.6.3 (2022-07-03)
----------------------------
* Core
  - Deltatime module now stores last laptime value to "last_laptime" key value in "timing" section of config.json.
  - Both Fuel & Timing Widget can read this saved last laptime value from Deltatime module & config.json.
  - Estimated laps & time for a given amount fuel can now be accurately calculated & displayed
    based on existing saved last laptime without having to do any additional laps.
  - Fixed a NaN value error that can happen if game crashes.
  - Optimized data handling for Relative module, Radar Widget, Relative Widget.

* Misc
  - Updated customization guide with new configurable setting for Timing Widget.

1.6.2 (2022-06-30)
----------------------------
* Gear Widget
  - [New]Add Startlights display with 20ms(50fps) accuracy, which works the same way as how the game is designed.
  - Race Countdown timer feature is no longer enabled by default, which now requires a special code to enable it.
    See customization guide for details.
  - Fixed missing custom background settings.

* Core
  - Increased Deltatime module refresh rate from 10ms to 1ms.

* Misc
  - Updated customization guide with new configurable setting for Gear Widget.

1.6.1 (2022-06-29)
----------------------------
* Instrument Widget
  - Add new "minimum_speed" setting in config file, default value is 16.5 (m/s),
    which is the minimum speed threshold before APP can record wheel radius samples.
  - Add new "minimum_samples" setting in config file, default value is 400,
    which is the minimum number of radius samples that required for calculating average wheel radius. 
  - Both settings significantly increase accuracy of wheel radius reading.

* Gear Widget
  - [New]Add an optional Race Countdown timer for standing-type start only(includes formation/standing),
    which only shows during countdown game phase, and has a 20ms(50fps) accuracy.
  - Add "show_countdown" setting in config, set value to false to disable Race Countdown timer.
    Note:
    * Countdown timer is calculated using the formula below,
      Seconds to start = mLapStartET - mElapsedTime
    * Both mLapStartET & mElapsedTime values are part of rF2's standard API.

* Wheel Widget
  - Fixed wrong "rideheight_offset_rear" reference.

* Core
  - Various optimization.

* Misc
  - Updated customization guide with new configurable setting for Gear & Instrument Widget.

1.6.0 (2022-06-24)
----------------------------
* [New]Instrument Widget
  - Show Headlights state.
    When Headlights on, icon turns white.
  - Show Ignition & Starter state.
    When Ignition on, icon turns white.
    When Ignition on while Engine off, icon background turns green (default color).
  - Show Auto-Clutch state.
    When Auto-Clutch on, icon turns white.
    When Clutch pressed, icon background turns cyan (default color).
  - Show Wheel Lock state.
    When Brake pressed and Slip Ratio reaches threshold, icon background flashes red (default color).
  - Show Wheel Slip state.
    When Slip Ratio reaches threshold, icon background flashes yellow (default color).
  - Include many customizable options.
  - New instrument icon by Xiang.

* Cruise Widget
  - [New]Show current in-game clock time of the circuit.

* Core
  - Fixed an issue where Deltatime module would fail to record deltabest laptime
    for point to point tracks after certain amount driven distance.
  - Various optimization.
  - Updated build_py2exe.py script.

* Misc
  - Updated customization guide with new configurable setting for Instrument & Cruise Widget.
  - Updated features.md with Instrument Widget info.
  - Updated README.md.

1.5.1 (2022-06-08)
----------------------------
* Radar Widget
  - Now draw vehicle orientation relative to player vehicle.

1.5.0 (2022-06-07)
----------------------------
* [New]Radar Widget
  - Show car radar that displays relative position of player's vehicle against up 6 nearby vehicles.
  - Vehicle changes color if is laps ahead or behind player.
  - Fully customizable size & scale.
  - Default refresh rate at 50 fps.
  - Show center mark.

* Core
  - Deltatime module is now named realtime_delta, and as delta_module in config.ini file.
  - Moved all "relative list" code to new realtime_relative module, added relative_module in config.ini file.
  - Both Relative & Radar widgets now read data from realtime_relative module,
    and calculation is done in a separated thread at constant 5fps(the limit of API).

* Misc
  - Updated customization guide with new configurable setting for Radar Widget.
  - Updated features.md with Radar Widget info.

1.4.2 (2022-06-06)
----------------------------
* Core
  - Replaced mInRealtimeFC with mIgnitionStarter for player status check and auto-hide function.

1.4.1 (2022-06-05)
----------------------------
* Core
  - Removed additional player index check that freezes overlay update.
    Overlay now works correctly with Driver Swap.

1.4.0 (2022-06-01)
----------------------------
* [New]Cruise Widget
  - Show compass directions with three-figure bearings that matches game's cardinal directions.
  - Show elevation difference in game's coordinate system, with meter or feet as display unit.
  - Show odometer that displays total driven distance of local player, with km or mile as display unit.

* Fuel Widget
  - Now auto-saves & loads last lap fuel consumption.

* Core
  - Added additional player status check to make sure only valid data gets updated to overlay.
  - Further improvements to deltabest laptime validation.
  - Add new function that constantly recording meters driven by player for deltatime module.
  - Improved module import order.

* Misc
  - Updated customization guide with new configurable setting for Cruise & Fuel Widget.
  - Updated features.md with Cruise Widget info.

1.3.3 (2022-05-28)
----------------------------
* Core
  - Added additional best laptime validation condition for deltabest module
    that fixed invalid deltabest laptime being saved in some rare cases. 

1.3.2 (2022-05-24)
----------------------------
* Core
  - Add additional player index check before refreshing overlay data,
    to avoid data mismatch that could happen in a multiplayer session
    due to player index change.

1.3.0 (2022-05-16)
----------------------------
* [New]Stint Widget
  - Show realtime stint data, includes:
    * front & rear tire compound index, with customizable letter.
    * total driven laps.
    * total driven time (min:sec).
    * total used fuel in liters or gallons.
    * total average tire wear.
  - Show "last stint" data bar that displays last full stint.
  - Note:
    * All current stint data resets when player makes a full-serviced pit stop (either refueled or tire changed).
    * Current stint data will only be transfered and displayed in "last stint data" bar, if player makes a full-serviced pit stop.
    * ESC & restarting in a session or race will not have stint data transfered to "last stint data".
      This is to prevent incomplete or useless data from overriding normal last stint data.
    * Currently, stint data is not saved to external file.

* Misc
  - Updated customization guide with new configurable setting for Stint Widget.
  - Updated features.md with Stint Widget info.

1.2.0 (2022-05-06)
----------------------------
* [New]Session Widget
  - Show current system clock time, with customizable time format.
  - Show session timer, accuracy is limited by 200ms refresh rate of rF2 API.
  - Show driver's current lap number & max laps (if available), with customizable lap number description text.
  - Displays warning color if driver is about to exceed max-lap in qualify (or indicates the last lap of a lap-type race).
    Note: if warning color appears in qualify, it means you have already reached max allowed laps.
          Do not attempt to across finish line, but ESC immediately to avoid DQ.
  - Show driver's current place against all drivers in a session.

* Misc
  - Updated customization guide with new configurable setting for Session Widget.
  - Updated features.md with Session Widget info.

1.1.11 (2022-05-03)
----------------------------
* Pressure Widget
  - [New]Add option to display tyre load percentage ratio between left & right tyres of same axle (default on).

* Core
  - Added APP running status check when starts TinyPedal,
    and shows notify & closes APP to prevent multiple TinyPedal APP from running at same time.
  - Removed unnecessary method from deltatime module.

* pyRfactor2SharedMemory library
  - Now constantly updating player index number in a separated thread at 10ms refresh rate,
    which helps reduce large amount unnecessary repeated function calls.
  - Removed additional player index code that could freeze data reading in rare cases.
  - Removed duplicated calls to playersDriverNum() method.

* Misc
  - Updated customization guide with new configurable setting for Pressure Widget.
  - Add new contributor to contributors.md.

1.1.10 (2022-04-19)
----------------------------
* Core
  - Fixed shared memory access issue that freezes APP when a player leaves server in multiplayer session.
  - Improved relative calculation code.

1.1.9 (2022-04-18)
----------------------------
* Relative
  - Fixed a player index mismatch issue that happens in multiplayer session when a player leaves server,
    which interrupts Relative data calculation and halt APP.

* Core
  - Improved setting code, removed unnecessary setting groups.
  - Optimized widget code structure, removed redundant codes, easier to create new widget.
  - Simplified widget module import method, removed repetitive references.
  - Improved setting auto-sorting, moved "overlay" setting back to the top of the JSON file.

1.1.8 (2022-04-17)
----------------------------
* Relative
  - [New]Show driver's position standing in class.
  - [New]Show pit status indicator whether driver is currently in pit, with customizable pit status text.
  - [New]Customizable column info display order.
  - "bar_driver_name_width" setting now trims out range chars.
  - Removed unnecessary laptime formatting, added string length slicing

* Core
  - [New]Add new "veh_class_info_list" algorithm to calculate position in class.
  - Moved place & class info to "veh_class_info_list".
  - Various code clean up.

* Misc
  - Updated customization guide with new configurable setting.
  - Updated features list.

1.1.7 (2022-04-16)
----------------------------
* Relative
  - Fixed a variable name typo from new setting code, which causes vehicle class not shown correctly.

* Core
  - Renamed various "temp" reference to "temperature" for temperature widget.

1.1.6 (2022-04-16)
----------------------------
* Core
  - New algorithm for handling setting validating.
  - Each widget setting is now separately validated.
  - Invalid & missing setting keys are removed or added individually,
    which helps for keeping valid widget setting untouched,
    and will benefit any future updates greatly.
  - Due to this new validating method, it is now recommended to exit APP
    before manually saving changes to JSON file.

* Misc
  - Updated document files to reflect the new changes to setting validating.

1.1.5 (2022-04-02)
----------------------------
* [New]Pressure widget
  - Tyre pressure is now a separated widget that shows pressure & load.
  - Tyre load display can be turned off separately.

* Wear Widget
  - Show new Tyre wear usage from last lap.
  - No longer shows Tyre pressure. 

* Core
  - [New]Add additional unit types (by thoraxe) for Fuel, Temperature, Weather widgets.
  - Improved laptime validating function for "deltatime" module.
  - Moved most string formatting from calculation.py to individual widgets,
    which avoids repetitive string & number conversion.
  - Updated setting entries & code cleanup

* Misc
  - Updated README.md, moved Feature section to features.md file.
  - Updated customization.md with new config options (by thoraxe).
  - Updated contributors.md with new contributor (thoraxe).

1.1.3 (2022-03-22)
----------------------------
* Core
  - Add laptime validating function for "deltatime" module.
    Invalid laptime will no longer be saved as best laptime.
    Delta best now fully works under any track or condition.

* Misc
  - Fixed a few typo in README.md & previous changelog.
  - Added missing contributors.md reference to build_py2exe.py.

1.1.0 (2022-03-21)
----------------------------
* [New]Delta best widget
  - Show delta best based on personal best laptime.
  - Show delta bar with customizable range, size and color.
  - Record, save, and load player's best laptime data automatically.
  - Best laptime file is stored in "deltabest" folder, and can be
    used by other players.
  - 2 different layouts.

* Core
  - Add "deltatime" module, which runs in separated thread at 100fps.
  - Add "delta_timing" switch in config.json.
  - Add auto-backup function for config.json.
  - Restructured "readapi" module.
  - Sort all widgets and references in alphabetical order.

* Timing widget
  - Add delta estimated laptime.
  - Add 3 different layouts.
  - Now reads timing data from deltatime module.

* Temperature widget
  - Add color swap setting in config.json, which swaps heat map color
    between font & background color.

* Fuel widget
  - Now reads mLapStartET from "Telemetry" which has higher accuracy.

* Wear widget
  - Add unit "bar" for tyre pressure.

1.0.0 (2022-03-14)
----------------------------
* Initial release
