App: Einrueckung haelt auch bei Umbruch, Loeschen fragt mittig

Eingerueckt wurde mit fuehrenden Leerzeichen. Die verschieben aber nur die
ERSTE Zeile: Bricht ein langer Name um ("Schublade Links Unten"), faengt die
Fortsetzung wieder ganz links an und die Hierarchie ist weg.

In einem aufklappenden Menue laesst sich das nicht loesen - dort liefert man
nur Text ab, das System ignoriert jedes Layout (auch lineLimit). Die
Lagerort- und Kategorieauswahl erscheint deshalb jetzt als Liste
(.pickerStyle(.navigationLink)). Dort ist jede Zeile eine echte Ansicht, ein
Innenabstand rueckt den ganzen Block ein - auch die zweite Zeile. Das liest
sich bei vielen Lagerorten ohnehin besser als ein langes Aufklappmenue.

Zwei enge Zeilen bleiben Menues: Mindestbestand je Ort bei Artikel und
Gruppe, wo direkt daneben das Mengenfeld steht. Dort wuerde eine
Listenauswahl die Zeile sprengen; sie behalten die Leerzeichen-Einrueckung.

Der Loeschdialog war ein confirmationDialog und fuhr als Blase von unten
herein. Jetzt ein alert: steht mittig und will gelesen werden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-15 21:12:29 +02:00
co-authored by Claude Opus 5
parent ea7a42ac22
commit d7002e2252
7 changed files with 46 additions and 13 deletions
+25 -3
View File
@@ -1,4 +1,4 @@
import Foundation
import SwiftUI
/// Eine Zeile einer flach ausgelegten Baumliste, mit ihrer Tiefe.
///
@@ -12,11 +12,33 @@ struct Baumzeile<T: TreeItem>: Identifiable {
var id: T.ID { item.id }
/// Name mit Einrueckung je Ebene. Macht die Hierarchie in einer flachen
/// Auswahl sichtbar, ohne jede Zeile mit dem vollen Pfad zu ueberladen.
/// Name mit Einrueckung aus fuehrenden Leerzeichen.
///
/// Nur fuer aufklappende Menues, wo man ausser Text nichts abliefern kann.
/// Der Nachteil bleibt dort bestehen: Bricht ein langer Name um, faengt die
/// zweite Zeile ganz links an. Wo es geht, `BaumZeile` nehmen.
var label: String { String(repeating: " ", count: tiefe) + item.name }
}
/// Auswahlzeile mit echter Einrueckung.
///
/// Fuehrende Leerzeichen verschieben nur die erste Zeile - ein langer Name
/// bricht um und die Fortsetzung steht wieder ganz links, womit die Hierarchie
/// verloren geht. Ein Innenabstand rueckt dagegen den ganzen Block ein.
///
/// Verlangt eine Auswahl, die als Liste erscheint (`.pickerStyle(.navigationLink)`):
/// In einem aufklappenden Menue zeigt das System nur den Text und ignoriert
/// jedes Layout.
struct BaumZeile<T: TreeItem>: View {
let zeile: Baumzeile<T>
var body: some View {
Text(zeile.item.name)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.leading, CGFloat(zeile.tiefe) * 16)
}
}
/// Bringt eine flache Eltern-Kind-Liste in Baumreihenfolge, mit Tiefe.
///
/// Waisen - deren Elternteil weggefiltert oder geloescht ist - gelten als