Files
dxfmakros/dcl/vf_linienzug_wizard.dcl
T
Yuelin WangandClaude Sonnet 5 0a1d21d8c5 fix: VF-Linienzug 100%-Wiederherstellung aus e76e24e abgeschlossen
Restauriert alles aus e76e24e, das nach dem Reset auf master fehlte oder nur
teilweise wiederhergestellt war, und mit dem Kollegen-Umbau abgeglichen:

- vf_core.lsp: Radio-Button-Dialoge fuer Anlagen-Typ/Linienzug-Modus
  (vfc-dialog-typ-waehlen/-linienzug-modus-waehlen) + Zurueck-Schleife im
  c:VarioFoerderer-Dispatcher
- Vario-Kurve/GF-Bogen-Erkennung am Kettenanfang: vfl-eingang-modus-bestimmen
  threaded durch vfl-vf-eingang-bauen/vfl-vf-einheit/vfl-vf-einheit-abschluss,
  inkl. Punkt-7-Winkel/Hoehen-Tabelle fuer reduzierten Eingang
- Modus 2: Lauf-Anfang/Lauf-Abschluss (offener Anfang/Ende, GF-Verteilung
  "alles Auslauf", Kletter-zu-kurz-Fallback) + Separator VOR/NACH bei
  GF-Geraden
- Systemischer Bug behoben: mehrere Wizard-Dialogfunktionen nutzten noch
  start_list/add_list (Dropdown) gegen laengst auf boxed_radio_column
  umgestellte DCL-Dialoge (vflw-gruppe-as/-gefaelle/-variokurve/
  -winkel-seite-impl, vflw-seg-linie-m2/-m3/-bogen-impl,
  vfl-glied-gf-bogen/-vario/-as-es-dialog)
- Zentraler Abbruch-Trigger in vfl-in-value/-value-p wiederhergestellt (ohne
  ihn wirkte der Zurueck/Abbrechen-Button in keinem Wizard-Dialog)
- vfl-frage-ist-endpunkt/-ist-kettenende als eigene Funktionen mit
  Wizard-Dialog extrahiert (vorher Konsolen-Duplikate ohne Dialog-Hookup)
- 3 vfs-vf-entry-Aufrufe mit falscher Argumentzahl gefixt (akute
  Absturz-Bugs in Modus 2/3)
- Tote Funktion vflw-gruppe-horizontal-impl entfernt (Tiles nicht mehr im
  DCL vorhanden)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 18:26:48 +02:00

1018 lines
36 KiB
Plaintext

// ============================================================
// vf_linienzug_wizard.dcl - VF Linienzug Assistent (Modus 1)
// Zwei GENERISCHE Einzel-Dialoge (vflw_zahl/vflw_wahl) fuer alle Fragen, die
// im Ablauf isoliert stehen, PLUS mehrere GRUPPEN-Dialoge weiter unten, die
// Fragen zusammenfassen, die immer unmittelbar hintereinander kommen (z.B.
// Startpunkt+Starthoehe, AS-Element Ja/Nein+Winkel+Seite). Kopfzeilen/
// Optionslisten werden zur Laufzeit befuellt, siehe vf_linienzug.lsp,
// Abschnitte "WIZARD-EINGABE" und "GRUPPEN-DIALOGE".
// Die ORIGINALEN Konsolen-Fragen (princ + getstring/getreal/getint) bleiben
// im Code stehen (de/en ueber ssg-text/lang/*.json) - Umschalten zurueck auf
// reine Konsole: (setq *vfl-wizard-mode* nil) bzw. Befehl VF_WIZARD_AUS.
// Bricht der Nutzer einen Gruppen-Dialog ab, fallen die betroffenen Fragen
// automatisch auf die Einzel-Dialoge (vflw_zahl/vflw_wahl) zurueck.
// ============================================================
// Zahlen-Eingabe (ersetzt getreal/getint). "kopf" zeigt den kompletten
// Original-Prompt-Text (inkl. Default in eckigen Klammern) als Label.
vflw_zahl : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: edit_box {
key = "wert";
label = "";
edit_width = 16;
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Mehrfachauswahl (ersetzt eine princ-Menue-Liste + getstring/getint).
// "opts" wird zur Laufzeit per start_list/add_list mit den (bereits
// lokalisierten) Optionstexten befuellt - ein einziger Dialog fuer jede
// Options-Anzahl (2-5), analog zum bestehenden Muster in
// dcl/variofoerderer.dcl und dcl/vfl_edit.dcl.
vflw_wahl : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: popup_list {
key = "opts";
label = "";
width = 50;
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// ============================================================
// GRUPPEN-DIALOGE - fassen mehrere Fragen, die im Ablauf IMMER
// unmittelbar hintereinander kommen, in EINEM Bildschirm zusammen (statt je
// einem vflw_zahl/vflw_wahl-Dialog pro Frage). Aufgerufen aus den
// vflw-gruppe-*-Funktionen in vf_linienzug.lsp (Abschnitt "GRUPPEN-DIALOGE").
// Punktwahl-Zeile (Button + Anzeige) NUR in vflw_punkt_zahl, wo tatsaechlich
// live gepickt wird: der Button schliesst den Dialog (done_dialog 2), DANACH
// laeuft (getpoint) auf der Kommandozeile - (getpoint) direkt aus einem
// action_tile-Callback heraus (Dialog bleibt offen) funktioniert in BricsCAD
// NICHT (kein Fokuswechsel zur Zeichnung, per Test bestaetigt). Die uebrigen
// Gruppen-Dialoge (Gefaelle, Ziel-Hoehe, Horizontal-Stueck) picken KEINEN
// Punkt - der Endpunkt ist an ihrer Aufrufstelle bereits ueber
// vfl-neue-linie-messen gemessen (nur X/Y, fuer die Segmentlaenge; die Hoehe
// dort ist ein unabhaengiger Zahlenwert) - sie zeigen deshalb bewusst KEINE
// Punkt-Zeile, die faelschlich eine hier moegliche Punktwahl suggerieren
// wuerde.
// ============================================================
// Punkt + EIN Zahlenfeld, mit Punktwahl-Button (siehe oben). Nur fuer
// "Kettenstart" (Startpunkt + Starthoehe, Modus 1) und Modus 2s
// Start-/Endpunkt - "kopf"/"wlabel" werden je Aufruf per set_tile passend
// beschriftet.
vflw_punkt_zahl : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: row {
: button {
key = "pick";
label = "Punkt waehlen...";
fixed_width = true;
width = 18;
}
: text {
key = "pt_anzeige";
label = "(kein Punkt gewaehlt)";
}
}
: text {
key = "wlabel";
label = "";
}
: edit_box {
key = "wert";
label = "";
edit_width = 10;
}
}
// "back" nutzt hier done_dialog 3 statt 2 - Code 2 ist bereits durch den
// "Punkt waehlen..."-Button oben belegt (siehe vflw-gruppe-punkt-hoehe-impl).
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// AS-/ES-Element (Kettenanfang bzw. -ende): Ja/Nein-Toggle + Winkel + Seite
// in einem Bildschirm - "kopf" traegt die konkrete Frage (AS oder ES),
// "setzen" bleibt bewusst generisch beschriftet, damit derselbe Dialog fuer
// beide Faelle passt. Winkel/Seite werden deaktiviert, solange der Toggle
// aus ist. Radio-Buttons statt Dropdown, Labels daher fest auf Deutsch
// (siehe Kommentar bei vfc_typ in variofoerderer.dcl).
vflw_as : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: toggle {
key = "setzen";
label = "Ja, setzen";
}
: boxed_radio_column {
label = "Winkel:";
key = "winkel";
: radio_button { key = "winkel_90"; label = "90 Grad"; value = "1"; }
: radio_button { key = "winkel_30"; label = "30 Grad"; }
}
: boxed_radio_column {
label = "Seite:";
key = "seite";
: radio_button { key = "seite_links"; label = "Links"; value = "1"; }
: radio_button { key = "seite_rechts"; label = "Rechts"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Winkel + Seite. Wiederverwendet fuer GF-Bogen (3 Winkel-Optionen: 30/60/90)
// UND ES-Element am Kettenende (2 Winkel-Optionen: 90/30 - dort wird
// "winkel_60" per mode_tile deaktiviert, siehe vflw-gruppe-winkel-seite-impl/
// vfl-glied-as-es-dialog). Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_winkel_seite : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Winkel:";
key = "winkel";
: radio_button { key = "winkel_30"; label = "30 Grad"; }
: radio_button { key = "winkel_60"; label = "60 Grad"; }
: radio_button { key = "winkel_90"; label = "90 Grad"; value = "1"; }
}
: boxed_radio_column {
label = "Seite:";
key = "seite";
: radio_button { key = "seite_links"; label = "Links"; value = "1"; }
: radio_button { key = "seite_rechts"; label = "Rechts"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Vario-Kurve: Winkel + Seite + Variante (aussen/innen) in einem Bildschirm.
// Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_variokurve : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Winkel:";
key = "winkel";
: radio_button { key = "winkel_30"; label = "30 Grad"; }
: radio_button { key = "winkel_60"; label = "60 Grad"; }
: radio_button { key = "winkel_90"; label = "90 Grad"; value = "1"; }
}
: boxed_radio_column {
label = "Seite:";
key = "seite";
: radio_button { key = "seite_links"; label = "Links"; value = "1"; }
: radio_button { key = "seite_rechts"; label = "Rechts"; }
}
: boxed_radio_column {
label = "Variante:";
key = "variante";
: radio_button { key = "variante_aussen"; label = "Aussen"; value = "1"; }
: radio_button { key = "variante_innen"; label = "Innen"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Gefaelle festlegen (Linie GF): Modus (Hoehe/Winkel) + EIN Wertfeld, dessen
// Beschriftung sich je nach Modus umschaltet (Action-Tile auf "modus", siehe
// vflw-gruppe-gefaelle-impl in vf_linienzug.lsp). Kein Punkt-Feld - siehe
// Kopfkommentar oben. Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_gefaelle : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Eingabe als:";
key = "modus";
: radio_button { key = "modus_winkel"; label = "Neigungswinkel eingeben"; value = "1"; }
: radio_button { key = "modus_hoehe"; label = "Gegebene Hoehe (Zielhoehe)"; }
}
: text {
key = "wlabel";
label = "";
}
: edit_box {
key = "wert";
label = "";
edit_width = 10;
}
// Nur befuellt/sichtbar relevant, wenn vflw-gruppe-gefaelle-impl mit
// nur-winkel=T aufgerufen wird (Zweig "Zielhoehe zuerst festlegen" bei
// "Neue Linie: GF") - zeigt dann den Hinweis, dass deltaL daraus
// berechnet wird, statt der sonst hier stehenden Hoehe-Option.
: text {
key = "hinweis";
label = "";
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// "Wie soll die Laenge dieser Gefaellestrecke bestimmt werden?" (Neue Linie:
// GF) - Endpunkt-Pick (heutiges Verhalten) ODER Zielhoehe zuerst festlegen
// (Laenge wird dann aus Zielhoehe+Winkel berechnet, siehe
// vflw-gruppe-gf-laenge-modus-impl). Nur gezeigt, wenn bereits ein Frame
// existiert (Kettenanfang braucht weiterhin zwingend den Pick fuer die
// Richtung). Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_gf_laenge_modus : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
key = "modus";
label = "";
: radio_button { key = "modus_endpunkt"; label = "Endpunkt waehlen (Laenge ergibt sich)"; value = "1"; }
: radio_button { key = "modus_hoehe"; label = "Zielhoehe festlegen (Laenge wird berechnet)"; }
: radio_button { key = "modus_steigend"; label = "Steigende GF (Sonderfall, bis 3 Grad)"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Separator VOR/NACH bei "Neue Linie: GF": beide Ja/Nein-Fragen in einem
// Bildschirm (Toggles, da echte Ja/Nein-Fragen - kein Radio-Cluster noetig).
// Siehe vflw-gruppe-sep-gf-impl in vf_linienzug.lsp.
vflw_sep_gf : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: toggle {
key = "sepvor";
label = "Separator VOR dieser Gefaellestrecke";
}
: toggle {
key = "sepnach";
label = "Separator NACH dieser Gefaellestrecke";
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Horizontales Stueck: nur noch "Foerderer-Ende?" (3 Optionen) - kein
// Separator mehr (siehe vfl-baue-horizontal-koerper). Kein Punkt-Feld -
// siehe Kopfkommentar oben. Radio-Buttons statt Dropdown, Labels daher fest
// auf Deutsch (siehe Kommentar bei vfc_typ in variofoerderer.dcl).
vflw_horizontal : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Foerderer-Ende:";
key = "istende";
: radio_button {
key = "istende_0";
label = "Ja (nur Motorstation setzen)";
value = "1";
}
: radio_button {
key = "istende_1";
label = "Nein (weiterbauen)";
}
: radio_button {
key = "istende_2";
label = "Ja (Motorstation setzen, Kettenende definieren)";
}
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// "Naechstes Element waehlen" - Hauptmenue des Linienzug-Aufbaus (Modus 1).
// IMMER alle 6 Optionen im Dialog vorhanden (stabile Keys) - "Vario-Kurve"
// wird per mode_tile deaktiviert, wenn kein echter Kettenanfang vorliegt
// (siehe vflw-gruppe-naechstes-element-impl, das dort auch die Positions-
// Nummerierung passend umrechnet). Radio-Buttons statt Dropdown, Labels fest
// deutsch, OHNE Nummern-Prefix (anders als die Konsolen-Variante - hier
// braucht es keine Zifferneingabe).
vflw_naechstes_element : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
key = "wahl";
label = "";
: radio_button { key = "wahl_gfbogen"; label = "GF-Bogen (horizontale Kurve)"; }
: radio_button { key = "wahl_variokurve"; label = "Vario-Kurve (horizontale Kurve, 30/60/90 Grad)"; }
: radio_button { key = "wahl_liniegf"; label = "Neue Linie: GF (Gefaellestrecke)"; value = "1"; }
: radio_button { key = "wahl_linievf"; label = "Neue Linie: Ab/Auf VF (VarioFoerderer-Einheit)"; }
: radio_button { key = "wahl_horizontalvf"; label = "Neue VF mit horizontalem Anfang (Horizontal-Stueck)"; }
: radio_button { key = "wahl_linieende"; label = "Neue Linie BIS Kettenende (danach Separator + ES-Element)"; }
}
}
// PROTOTYP "Zurueck"-Button (siehe Plan curious-prancing-parasol.md): ersetzt
// ok_cancel durch eine eigene 3-Button-Zeile. done_dialog-Codes: 0=Abbrechen
// (unveraendert, is_cancel -> ESC/Leertaste wirkt weiterhin), 1=Weiter
// (unveraendert, is_default), NEU 2=Zurueck (verwirft das zuletzt gebaute
// Kettenglied und fragt es neu ab, siehe vflw-gruppe-naechstes-element-impl/
// vfl-modus-abbruch-sichern).
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// "Ist das das Kettenende?" (Linie-GF-Segment-Schleife) - 3 feste Optionen.
// Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_kettenende : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
key = "wahl";
label = "";
: radio_button { key = "wahl_ja_es"; label = "Ja (ES-Element setzen)"; }
: radio_button { key = "wahl_ja_ohne_es"; label = "Ja (ohne ES-Element setzen)"; }
: radio_button { key = "wahl_nein"; label = "Nein (weiterbauen)"; value = "1"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// "Ist das Kettenende?" (2-Optionen-Variante - Ja/Nein statt der 3-Optionen-
// Variante vflw_kettenende oben). Radio-Buttons statt Dropdown, Labels fest
// deutsch.
vflw_ist_kettenende_2opt : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
key = "wahl";
label = "";
: radio_button { key = "wahl_ja"; label = "Ja (Separator + ES-Element setzen)"; }
: radio_button { key = "wahl_nein"; label = "Nein (weiterbauen)"; value = "1"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// GF-Verteilung (halbe Staustrecke am Ausgang GF2 oder alles am Einlauf
// GF1) - wiederverwendet fuer Modus 1 (vfl-vf-einheit-abschluss) UND Modus 3
// (Segment-Loop, br-gf-mode). Radio-Buttons statt Dropdown, Labels fest
// deutsch.
vflw_gf_verteilung : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
key = "wahl";
label = "";
: radio_button { key = "wahl_haelfte"; label = "Haelfte am Einlauf (GF1) + Haelfte am Ausgang (GF2)"; }
: radio_button { key = "wahl_einlauf"; label = "Alles am Einlauf (GF1), kein GF2"; value = "1"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// "Naechstes im VF" (innerhalb einer laufenden VF-Einheit weiterbauen):
// Horizontaler Foerderer / Vario-Kurve / Auf-Ab-Foerderer. Radio-Buttons
// statt Dropdown, Labels fest deutsch.
vflw_naechstes_im_vf : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
key = "wahl";
label = "";
: radio_button { key = "wahl_horizontal"; label = "Horizontaler Foerderer (Linie ohne Hoehendifferenz)"; }
: radio_button { key = "wahl_variokurve"; label = "Vario-Kurve (30/60/90 Grad)"; }
: radio_button { key = "wahl_aufab"; label = "Auf/Ab-Foerderer (Linie mit Hoehendifferenz)"; value = "1"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Punkt-7-Winkel/Hoehen-Tabelle (vfl-waehle-winkel-hoehen-tabelle): 12 feste
// Radio-Slots (einer je Standard-Winkel 3-51 Grad), nicht baubare per
// mode_tile deaktiviert. WICHTIG: die radio_button-Tiles muessen DIREKTE
// Kinder eines radio_column/radio_row/boxed_radio_column-Clusters sein - eine
// Verschachtelung ueber : row {} INNERHALB des Clusters (fruehere Version)
// hebt die gegenseitige Ausschliesslichkeit auf (per Test bestaetigt: mehrere
// Radios gleichzeitig waehlbar, keins abwaehlbar)! Die Endhoehe steht daher
// NICHT im selben row-Tile, sondern in einer PARALLELEN Text-Spalte rechts
// daneben (eigene column AUSSERHALB des Radio-Clusters, per aeusserem : row
// nebeneinandergestellt, gleiche Zeilenreihenfolge) - dynamisch befuellt via
// vflw-gruppe-winkel-hoehen-impl (zeigt auch bei nicht baubaren Winkeln den
// Grund, siehe dortige Kommentare).
vflw_winkel_hoehen : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: text { label = "Winkel waehlen:"; }
: row {
: radio_column {
key = "wahl";
: radio_button { key = "w_3"; label = "3 Grad"; }
: radio_button { key = "w_6"; label = "6 Grad"; }
: radio_button { key = "w_9"; label = "9 Grad"; }
: radio_button { key = "w_12"; label = "12 Grad"; }
: radio_button { key = "w_15"; label = "15 Grad"; }
: radio_button { key = "w_18"; label = "18 Grad"; }
: radio_button { key = "w_21"; label = "21 Grad"; }
: radio_button { key = "w_27"; label = "27 Grad"; }
: radio_button { key = "w_33"; label = "33 Grad"; }
: radio_button { key = "w_39"; label = "39 Grad"; }
: radio_button { key = "w_45"; label = "45 Grad"; }
: radio_button { key = "w_51"; label = "51 Grad"; }
}
: column {
: text { key = "h_3"; label = ""; width = 48; }
: text { key = "h_6"; label = ""; width = 48; }
: text { key = "h_9"; label = ""; width = 48; }
: text { key = "h_12"; label = ""; width = 48; }
: text { key = "h_15"; label = ""; width = 48; }
: text { key = "h_18"; label = ""; width = 48; }
: text { key = "h_21"; label = ""; width = 48; }
: text { key = "h_27"; label = ""; width = 48; }
: text { key = "h_33"; label = ""; width = 48; }
: text { key = "h_39"; label = ""; width = 48; }
: text { key = "h_45"; label = ""; width = 48; }
: text { key = "h_51"; label = ""; width = 48; }
}
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Winkel-Wahl aus berechne-alle-winkel (Zielhoehe-basierter Solve, mehrere
// gueltige Winkel): wie vflw_winkel_hoehen (radio_column direkt, Text-Spalte
// parallel daneben), aber die Text-Spalte zeigt L_GF+L_VF statt Endhoehe
// (dynamisch befuellt, siehe vflw-gruppe-winkel-wahl-impl).
vflw_winkel_wahl : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: text { label = "Winkel waehlen:"; }
: row {
: radio_column {
key = "wahl";
: radio_button { key = "w_3"; label = "3 Grad"; }
: radio_button { key = "w_6"; label = "6 Grad"; }
: radio_button { key = "w_9"; label = "9 Grad"; }
: radio_button { key = "w_12"; label = "12 Grad"; }
: radio_button { key = "w_15"; label = "15 Grad"; }
: radio_button { key = "w_18"; label = "18 Grad"; }
: radio_button { key = "w_21"; label = "21 Grad"; }
: radio_button { key = "w_27"; label = "27 Grad"; }
: radio_button { key = "w_33"; label = "33 Grad"; }
: radio_button { key = "w_39"; label = "39 Grad"; }
: radio_button { key = "w_45"; label = "45 Grad"; }
: radio_button { key = "w_51"; label = "51 Grad"; }
}
: column {
: text { key = "h_3"; label = ""; width = 48; }
: text { key = "h_6"; label = ""; width = 48; }
: text { key = "h_9"; label = ""; width = 48; }
: text { key = "h_12"; label = ""; width = 48; }
: text { key = "h_15"; label = ""; width = 48; }
: text { key = "h_18"; label = ""; width = 48; }
: text { key = "h_21"; label = ""; width = 48; }
: text { key = "h_27"; label = ""; width = 48; }
: text { key = "h_33"; label = ""; width = 48; }
: text { key = "h_39"; label = ""; width = 48; }
: text { key = "h_45"; label = ""; width = 48; }
: text { key = "h_51"; label = ""; width = 48; }
}
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Generische Ja/Nein-Rueckfrage (2 Radio-Buttons, dynamischer Kopftext) -
// wiederverwendet z.B. fuer "trotzdem mit Mindestlaenge bauen?" (Zu-kurz-
// Nachfrage in vfl-baue-horizontal-koerper). Radio-Buttons statt Dropdown,
// Labels fest deutsch (nur "kopf" wird je Aufruf per set_tile befuellt).
// Drei Groessenvarianten (1/3/6 Kopf-Zeilen) statt EINER Variante mit immer 6
// Zeilen: DCL kann Tiles nicht dynamisch ausblenden/schrumpfen - ein leeres
// text-Tile belegt trotzdem seine volle Zeilenhoehe (grosse Luecke bei kurzen
// Hinweisen wie "Zusaetzlichen Separator einfuegen?"). vflw-gruppe-ja-nein-impl
// waehlt anhand der per vflw-umbruch-zeilen ermittelten Zeilenzahl die
// passende Variante (1/3/6). Alle drei teilen dieselben Tile-Keys "kopf1".."kopfN"
// plus "wahl"/"wahl_ja"/"wahl_nein"/"back"/"accept"/"cancel" - der Aufrufer
// muss dadurch NICHT zwischen ihnen unterscheiden, ausser bei new_dialog/
// set_tile fuer die (in der kleineren Variante gar nicht vorhandenen) hoeheren
// kopfN-Tiles.
vflw_ja_nein_1 : dialog {
label = "VarioFoerderer Assistent";
: column {
: text { key = "kopf1"; label = ""; width = 70; }
: boxed_radio_column {
key = "wahl";
label = "";
: radio_button { key = "wahl_ja"; label = "Ja"; value = "1"; }
: radio_button { key = "wahl_nein"; label = "Nein"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
vflw_ja_nein_3 : dialog {
label = "VarioFoerderer Assistent";
: column {
: text { key = "kopf1"; label = ""; width = 70; }
: text { key = "kopf2"; label = ""; width = 70; }
: text { key = "kopf3"; label = ""; width = 70; }
: boxed_radio_column {
key = "wahl";
label = "";
: radio_button { key = "wahl_ja"; label = "Ja"; value = "1"; }
: radio_button { key = "wahl_nein"; label = "Nein"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
vflw_ja_nein_6 : dialog {
label = "VarioFoerderer Assistent";
: column {
: text { key = "kopf1"; label = ""; width = 70; }
: text { key = "kopf2"; label = ""; width = 70; }
: text { key = "kopf3"; label = ""; width = 70; }
: text { key = "kopf4"; label = ""; width = 70; }
: text { key = "kopf5"; label = ""; width = 70; }
: text { key = "kopf6"; label = ""; width = 70; }
: boxed_radio_column {
key = "wahl";
label = "";
: radio_button { key = "wahl_ja"; label = "Ja"; value = "1"; }
: radio_button { key = "wahl_nein"; label = "Nein"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Generische Auf/Ab-Richtungsfrage (2 Radio-Buttons, dynamischer Kopftext) -
// wiederverwendet fuer Punkt 7 (Kletter-Teilstrecke ohne Zielhoehe, sowohl
// "Naechstes im VF" als auch "Neue Linie: Ab/Auf VF" mit reduziertem
// Eingang). Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_richtung : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
key = "richtung";
label = "";
: radio_button { key = "richtung_auf"; label = "Auf"; value = "1"; }
: radio_button { key = "richtung_ab"; label = "Ab"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Startpunkt-Typ (kein eindeutiger GF-/VF-Baustein per KS_AUS-Scan erkannt,
// siehe vfl-eingang-modus-bestimmen): EINE flache 3-Optionen-Frage statt
// verschachtelter Zwei-Schritt-Abfrage - ist der Vorgaenger unklar, sind alle
// drei Ergebnisse gleichwertig direkt waehlbar. Radio-Buttons statt Dropdown,
// Labels fest deutsch (GF-Stumpf-Laenge als Default-Wert 400mm statisch im
// Label, siehe *vfl-gf-min-laenge*).
vflw_startpunkt_typ : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Eingang:";
key = "eingang";
: radio_button { key = "eingang_direkt"; label = "Direkt Umlenkstation (kein GF-Stueck)"; value = "1"; }
: radio_button { key = "eingang_stumpf"; label = "GF-Stueck (min. 400mm) + Umlenkstation"; }
: radio_button { key = "eingang_ohne"; label = "Ohne Umlenkstation (VF-Fortsetzung)"; }
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// ============================================================
// SEGMENT-GRUPPEN-DIALOGE (Modus 2 + Modus 3) - fassen die pro Segment
// aufeinanderfolgenden Fragen in EINEM Bildschirm zusammen. "kopf" zeigt
// dabei immer "Segment i/n ..." (wie die Konsolen-Frage), das jeweils
// abgefragte Segment ist zusaetzlich in der Zeichnung hervorgehoben
// (redraw-Highlight, gesetzt von vfl-seg-highlight in vf_linienzug.lsp VOR
// dem Oeffnen des Dialogs). Aufgerufen aus den vflw-seg-*-impl-Funktionen.
// ============================================================
// Modus 2, Segment "Gerade": Typ (GF/VF) + [nur bei GF aktiv] GF-Neigung.
// Das Neigungsfeld wird per action_tile auf "typ" aktiviert/deaktiviert.
// Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_seg_linie_m2 : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Typ:";
key = "typ";
: radio_button { key = "typ_gf"; label = "GF (Neigungswinkel)"; value = "1"; }
: radio_button { key = "typ_vf"; label = "VF (Bruecke)"; }
}
: text {
key = "wlabel";
label = "GF-Neigung (Grad):";
}
: edit_box {
key = "wert";
label = "";
edit_width = 10;
}
: boxed_column {
label = "Separator (nur bei GF):";
: toggle { key = "sep_vor"; label = "Separator VOR diesem GF-Stueck"; }
: toggle { key = "sep_nach"; label = "Separator NACH diesem GF-Stueck"; }
}
}
ok_cancel;
}
// Modus 3, Segment "Gerade": Typ (GF / VF-Ab / VF-Auf / VF-Horizontal) + EIN
// Wertfeld, dessen Beschriftung mit dem Typ umschaltet (GF -> Neigung,
// VF-Ab/Auf -> Vario-Winkel, VF-Horizontal -> Feld deaktiviert). Umschaltung
// per action_tile auf "typ" (siehe vflw-seg-linie-m3-impl). Radio-Buttons
// statt Dropdown, Labels fest deutsch.
vflw_seg_linie_m3 : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Typ:";
key = "typ";
: radio_button { key = "typ_gf"; label = "GF (Neigungswinkel)"; value = "1"; }
: radio_button { key = "typ_vfab"; label = "VF-Ab"; }
: radio_button { key = "typ_vfauf"; label = "VF-Auf"; }
: radio_button { key = "typ_vfhor"; label = "VF-Horizontal"; }
}
: text {
key = "wlabel";
label = "";
}
: edit_box {
key = "wert";
label = "";
edit_width = 10;
}
}
ok_cancel;
}
// Segment "Eck/Bogen" (Modus 2 + Modus 3 identisch): Typ (GF-Bogen /
// Vario-Kurve) + [nur bei Vario-Kurve aktiv] Variante (aussen/innen). Die
// Variante-Gruppe wird per action_tile auf "typ" aktiviert/deaktiviert, die
// Vario-Kurve-Option selbst ggf. ueber "vario-erlaubt" (mode_tile), siehe
// vflw-seg-bogen-impl. Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_seg_bogen : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Typ:";
key = "typ";
: radio_button { key = "typ_gfbogen"; label = "GF-Bogen"; value = "1"; }
: radio_button { key = "typ_vario"; label = "Vario-Kurve"; }
}
: boxed_radio_column {
label = "Variante:";
key = "variante";
: radio_button { key = "variante_aussen"; label = "Aussen"; value = "1"; }
: radio_button { key = "variante_innen"; label = "Innen"; }
}
}
ok_cancel;
}
// Modus 2: Lauf-Abschluss, NUR wenn der VF-Lauf das Ende des gewaehlten Pfads
// ist (kein Back-Lauf danach) - siehe vflw-m2-lauf-abschluss-impl. Radio-
// Buttons, Labels fest deutsch.
vflw_m2_lauf_abschluss : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Lauf beenden mit:";
key = "abschluss";
: radio_button { key = "abschluss_offen"; label = "Ohne Motorstation (offenes Ende, spaeter fortsetzen)"; }
: radio_button { key = "abschluss_motor"; label = "Motorstation setzen"; value = "1"; }
: radio_button { key = "abschluss_motor_es"; label = "Motorstation + ES-Element setzen (Kettenende)"; }
}
}
ok_cancel;
}
// Modus 2: Lauf-Anfang, NUR wenn der VF-Lauf der Anfang des gewaehlten Pfads
// ist (kein Front-Lauf davor) - siehe vflw-m2-lauf-anfang-impl. Radio-Buttons,
// Labels fest deutsch.
vflw_m2_lauf_anfang : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Lauf beginnen mit:";
key = "anfang";
: radio_button { key = "anfang_offen"; label = "Ohne Umlenkstation (offener Anfang, spaeter fortsetzen)"; }
: radio_button { key = "anfang_umlenk"; label = "Umlenkstation direkt (kein GF1/Separator)"; }
: radio_button { key = "anfang_umlenk_gf1"; label = "Umlenkstation mit GF1 + Separator"; value = "1"; }
}
}
ok_cancel;
}