caecc60c7b
Items 1–12 of the interface review: - Larger UI font (UI_FONT_SIZE) across widgets, menus, dialogs, Treeview rows. - DRK-red header bar; window title shows entry count; runtime-drawn red-cross icon (also written to data/icon.png for the launcher). - Status bar colour-coded by severity; transient messages auto-clear after 8 s, queue-count messages stay. - Tab 1: more form spacing, digits-only PLZ, explicit "Auswahl entfernen" + Delete key for queue rows, confirm on "Warteschlange leeren", modal on duplicate save. - Tab 2: raw lat/lon columns replaced by one "Karte" column (checkmark / red "fehlt"); ▲/▼ arrow on the active sort column; hint line always shows the saved-entry count. - "Karte öffnen" with no coordinates shows a dialog, not just a status line. - Window size/position remembered between sessions (data/window.json). Verified by building and driving the window under Homebrew Python 3.12 / Tk 9; non-GUI smoke tests still pass. Docs updated (changelog, overview, improvements, data-model, setup, dev-notes). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
Changelog
Notable changes to the app. Newest first.
2026-09-07 — UI/UX pass
A round of usability improvements aimed at the non-technical user (see improvements.md).
- Larger UI font (
UI_FONT_SIZE = 11) applied to all default fonts, menus, dialogs and the Treeview (taller rows). - DRK-red header bar with the app name; window title shows the total count
("… · 142 Einsätze"); simple red-cross window icon drawn at runtime (also
written to
data/icon.pngfor the launcher). - Status bar is now colour-coded by severity (grey/green/orange/red), and transient messages auto-clear after 8 s back to a neutral state; queue-count messages stay put.
- Tab 1: more spacing in the form; PLZ field accepts digits only; "+ Hinzufügen" is a solid button; explicit "Auswahl entfernen" button and Delete key for queue rows; "Warteschlange leeren" now asks for confirmation; duplicate save shows a modal (list + "trotzdem speichern?") instead of a transient hint.
- Tab 2: the raw
lat/loncolumns are replaced by a single "Karte" column (✓/ redfehlt); active sort column shows a ▲/▼ arrow; the hint line always shows the saved-entry count. - "Karte öffnen" with no coordinates now shows a dialog, not just a status line.
- Window size & position are remembered between sessions
(
data/window.json).
2026-09-07 — data safety, robustness, easier input
Addressed the top three findings from improvements.md.
Data safety (DataStore)
- All writes (append / update / delete) now rebuild the full DataFrame and go
through
_save_csv: rotating backup todata/backups/(startup + before every change, keep 20, skip if unchanged) then atomic write (tmp+fsync+os.replace). orte.csvmissing / empty (EmptyDataError) / unreadable now falls back to an empty table or the newest backup instead of crashing.
Geocoder robustness (GeocoderWorker, geocode_city)
- Each queue item runs inside
try/except; a failing lookup or callback logs a traceback and the worker keeps going (previously an unexpected error killed the thread and silently froze all further geocoding). geocode_cityraisesGeocodingUnavailablewhen every query failed on a service/network error. After 3 in a row the app shows a one-time "Standortdienst nicht erreichbar" dialog; entries still save without coordinates.
Easier, safer input
- Date fields (entry form + edit dialog) are now
ttkbootstrap.DateEntrycalendar pickers, validated/normalized to ISO byparse_date()(also acceptsTT.MM.JJJJ). Invalid dates are rejected with a dialog. - Edit dialog has manual Breitengrad / Längengrad fields for fixing coordinates by hand.
- Tab 2: rows without coordinates shown in red, "Nur ohne Koordinaten" filter, count in the hint line, right-click Koordinaten suchen.
Housekeeping
git init+.gitignore.- Rotating log file at
data/app.log(_setup_logging). - Shared helpers
filter_locations/split_city_plz/parse_coordreplace duplicated combobox code. - Config constants:
GEOCODE_REGIONS,MAP_DEFAULT_CENTER,MAP_DEFAULT_ZOOM,MAX_BACKUPS. generate_mapfits the view to the markers.
Verification
Non-GUI smoke tests (helpers, DataStore backup/atomic/recovery, geocoder
resilience) pass. The GUI now can be built and driven on the dev Mac via a
Homebrew Python with Tk 9 — see dev-notes.md.