Bundles several small local follow-ups since v3.3.0:
- Radar screen aircraft detail panel: long lines (model name, distance
with km/nm/mi) now scroll horizontally instead of being cut off with
"..." (up to 9 independent scrolling lines, reusing the existing
InfoMarquee pattern).
- "Setup complete" screen: small centered "Tap to skip" hint below the
countdown button, translated into all 6 languages.
- Location Presets screen: long preset names/coordinates in the list
now scroll left-aligned instead of being truncated with "...".
- Address search confirmation screen: the found place name is no
longer hard-cut at 150 characters - it's now a vertically scrollable
paragraph (same pattern as the existing Location Presets info
screen), since it's multi-line wrapped text rather than a single
overflowing line.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Five places ignored the Units setting (Menu > Units) and always showed
fixed metric values even when Imperial was selected: the radar range
button (now km/nm), the radar's ring distance labels (now km/nm), the
aircraft list's altitude/distance columns (now m+km or ft+nm), the
Location Presets screen's nearest-airport distance (now km/nm), and
the Stats screen's highest-altitude-today line (now m or ft). The
range button had already been touched previously but used "mi"
instead of "nm" - aligned to nm here for consistency with the other
distance displays, which all pair with km rather than miles.
The radar detail panel's simultaneous multi-unit display and the
climb/descent rate (always ft/min, aviation convention) are
intentionally left unchanged.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The preset-name keypad (used both when adding a preset via manual
coordinates and after an address search) only showed "Name
(optional):" with no indication of what kind of name was expected.
Adds a localized hint line with example names (e.g. "Home, Work,
Holiday home") under the title in both runPresetNameKeypad()
(location_presets_screen.cpp) and runNameKeypad()
(address_search_screen.cpp), measuring the header height dynamically
via getCursorY() the same way runAddressKeyboard() already does, so
the input field and keyboard shift down to make room regardless of
translation length.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Shortens the first-run location screen's body text in all 6 languages
and makes its buttons follow the text's actual height instead of a
fixed screen position - the longer German translation previously ran
underneath the "Enter Address"/"Skip" buttons, making it unreadable.
Adds a new info paragraph to the Location Presets "?" screen (all 6
languages) pointing to the native "Search by address" option added in
the previous commit, plus the same tip to the README's Getting Started
section.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a new AddressSearchScreen: enter an address on a dedicated
keyboard (with a special-character page for common European accented
letters), geocode it via the free OpenStreetMap Nominatim service,
confirm the found place, optionally name it, and save it as a new
location preset - no external website needed anymore.
Reachable both from Location Presets > "+" (choice between "by
address" and manual coordinates) and, for new users, from a one-time
FirstRunLocationScreen shown right after the language picker on first
boot, explaining why an exact address beats automatic IP geolocation
and letting them set it up immediately (skippable).
Removes the itilog.com link/tip added in the previous commit (Location
Presets info screen, all 6 languages, and the README) - superseded by
this native in-app flow.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a new info paragraph to the Location Presets "?" screen (all 6
languages) recommending itilog.com for getting exact address
coordinates, since automatic IP-based geolocation can easily be off by
20-30 km - enough to hear a plane while the radar stays empty. Adds
the same tip to the README's Getting Started section, with a
clickable link.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Location presets can now optionally be given a name (e.g. "Home"),
shown in the overview instead of the raw coordinates. The
nearest-airport ticker on the Location Presets screen is now
tappable (shown with a thin green border) and adds that airport
directly as a new preset with its name and coordinates, using the
existing local airport database on the SD card - no internet lookup
needed. AirportLookup::findNearest() now also returns the found
airport's own lat/lon for this purpose.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Several fixes to the "nearest airport" marquee on the Location
Presets screen, building on the size-2 enlargement from the previous
commit:
- Fix leftover dashed line above the text by clearing a background
area sized for size-2 text and by running MenuStars::update()
before drawMarquee() in the wait loop (stars could otherwise be
drawn over the freshly rendered text).
- A pixel-perfect scrolling attempt (sub-character cursor offset)
caused a stray green box to the left of the text and has been
reverted in favor of the original whole-character scrolling, with
a shorter gap (3 spaces) and a more generous clear rect.
- Slowed the scroll step from 120ms to 200ms per character for a
calmer, more readable pace.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The scrolling "nearest airport" line on the Location Presets screen
was hard to read at size 1. setupMarquee() now measures text width
at size 2 (matching what drawMarquee() actually renders), and
drawMarquee() resets back to size 1 on both return paths so it
doesn't leak into subsequently drawn UI (e.g. the Back button).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a 7-day bar-chart view of the flight logbook (Menu -> Flight
Options -> History chart), and a small built-in web server that
serves a logbook overview page plus a merged CSV export of all
logged days once the device is connected to WiFi (discoverable via
the "?" button on the Logbook files screen, which now also shows the
live device IP). Also fixes the "nearest airport" line on the
Location Presets screen, which previously used tft.setViewport() and
went completely invisible with our custom font - it now scrolls as a
proper marquee without relying on the viewport clip.
Also documents the standard release workflow in CLAUDE.md.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>