UI/UX pass: readability, feedback, safer actions, DRK branding
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>
This commit is contained in:
+23
-12
@@ -1,6 +1,11 @@
|
||||
# Overview – what the app does
|
||||
|
||||
The app is a single window with a status bar at the bottom and two tabs.
|
||||
The app is a single window: a **DRK-red header bar**, two tabs, and a
|
||||
**colour-coded status bar** at the bottom (grey = neutral, green = success,
|
||||
orange = warning, red = error; transient messages fade back to neutral after
|
||||
~8 s). The window title shows the total entry count, and the window remembers
|
||||
its size and position between sessions (`data/window.json`). The UI font is
|
||||
enlarged for readability (`UI_FONT_SIZE`).
|
||||
|
||||
## Tab 1 – "Neuer Eintrag" (new entry)
|
||||
|
||||
@@ -12,28 +17,34 @@ then save the whole batch at once.
|
||||
`TT.MM.JJJJ` and **validated** – an invalid date is rejected with a dialog),
|
||||
city (autocomplete combobox), postal code (optional). Pressing `Return` in any
|
||||
field, or the **+ Hinzufügen** button, adds the row to the queue.
|
||||
The PLZ field only accepts digits.
|
||||
2. **Queue table** – shows date, city, PLZ, and a live coordinate column that
|
||||
updates from `⏳ wird gesucht…` to either `lat / lon` or `⚠ nicht gefunden`
|
||||
as the background geocoder works through the queue.
|
||||
- Left-click the `✕` cell to remove a row.
|
||||
- Select a row and press <kbd>Delete</kbd>, use the **"Auswahl entfernen"**
|
||||
button, or click the `✕` cell.
|
||||
- Right-click a row for *Löschen* / *Koordinaten erneut suchen*.
|
||||
3. **Action bar**
|
||||
- **Alle speichern** – appends every queued row to `orte.csv`. If a row looks
|
||||
like a duplicate of an existing entry (same date + city + PLZ) a hint is
|
||||
shown in the status bar, but the row is **still saved**.
|
||||
- **Leeren** – discards the queue without saving.
|
||||
- **Alle speichern** – appends every queued row to `orte.csv`. If any row
|
||||
looks like a duplicate (same date + city + PLZ), a **modal** lists them and
|
||||
asks whether to save anyway.
|
||||
- **Warteschlange leeren** – discards the queue (asks for confirmation).
|
||||
- **Karte öffnen** – regenerates `karte.html` and opens it in the browser.
|
||||
|
||||
## Tab 2 – "Einträge verwalten" (manage entries)
|
||||
|
||||
A table view of everything in `orte.csv`.
|
||||
|
||||
- **Columns:** Datum, Ort, PLZ, and **Karte** – a status column showing `✓` when
|
||||
the row has coordinates or a red `fehlt` when it doesn't (the whole row is red
|
||||
too). The raw lat/lon numbers live in the edit dialog, not this table.
|
||||
- **Search box** – live filter across date, city, and PLZ (substring match).
|
||||
- **Sortable columns** – click a header to sort; clicking again reverses.
|
||||
Default sort is by date, newest first.
|
||||
- **Sortable columns** – click a header to sort; clicking again reverses. The
|
||||
active column shows a ▲/▼ arrow. Default sort is by date, newest first.
|
||||
Sorting by **Karte** groups the rows without coordinates together.
|
||||
- **"Nur ohne Koordinaten"** toggle – filters to entries that have no
|
||||
coordinates yet. Such rows are also shown in **red** in the full list, and the
|
||||
hint line reports how many there are.
|
||||
coordinates yet. The hint line always shows the total count, plus how many are
|
||||
missing coordinates.
|
||||
- **Edit** – double-click a row (or *Bearbeiten*) opens a modal dialog to change
|
||||
date (calendar picker, validated) / city / PLZ. Two ways to fix coordinates:
|
||||
a "Koordinaten automatisch neu suchen" toggle re-runs geocoding after saving,
|
||||
@@ -58,8 +69,8 @@ Generated by `generate_map()`:
|
||||
(`5 + count / max_count * 20` px), colour is DRK red (`#CC0000`).
|
||||
- Popup shows the city and the visit count; tooltip shows the city.
|
||||
- Rows with missing/blank coordinates are silently excluded.
|
||||
- If there are no usable coordinates at all, a `ValueError` is raised and shown
|
||||
in the status bar.
|
||||
- If there are no usable coordinates at all, a dialog says so (and the status
|
||||
bar shows a warning).
|
||||
|
||||
> The generated HTML pulls Leaflet, jQuery and Bootstrap from CDNs, so the map
|
||||
> needs an internet connection to render even though the data is local.
|
||||
|
||||
Reference in New Issue
Block a user