====== LyxVision — TUI-Framework ====== LyxVision ist ein Text User Interface Framework, inspiriert von Borland Turbo Vision (1990). Es bietet ein vollständiges Widget-System mit Fenstern, Dialogen, Menüs, Buttons, Eingabefeldern und Listen für terminalbasierte Anwendungen. → [[lyx_-_programmiersprache:guides|Guides]] · [[lyx_-_programmiersprache:units:lyxvision|std.lyxvision Referenz]] import std.lyxvision.main; // importiert alle Sub-Units automatisch ---- ===== Architektur ===== lyxvision/main — Haupt-Import + Init/Done/Run, direkte Zeichenfunktionen lyxvision/types — TPoint, TRect, TEvent (Basis-Typen) lyxvision/consts — sfVisible/sfFocused, mrOK/mrCancel, colorBlue/..., Flags lyxvision/drivers — Terminal-Treiber (ANSI/VT100) lyxvision/view — TView: Basisklasse aller sichtbaren Objekte lyxvision/group — TGroup: Container (besitzt Kind-Views) lyxvision/tapplication — TApplication, TMenuBar, TStatusLine, TDesktop lyxvision/window — TWindow: Fenster mit Rahmen, Titel, Zoom lyxvision/dialog — TDialog: Modaler Dialog (DialogExecute) lyxvision/menu — TMenu, TMenuBar, TMenuItem lyxvision/button — TButton: Klickbarer Knopf mit Befehl lyxvision/inputline — TInputLine: Einzeilige Texteingabe lyxvision/statictext — TStaticText: Nicht-interaktiver Text lyxvision/staticline — TStaticLine: Horizontale Trennlinie lyxvision/cluster — TCluster: Radio-Buttons / Checkboxen lyxvision/listview — TListView: Scrollbare Liste lyxvision/textdevice — TTextDevice: Text-Ausgabepuffer lyxvision/terminal — TTerminal: Eingebettetes Terminal-Widget ---- ===== Minimale Anwendung ===== import std.lyxvision.main; import std.lyxvision.tapplication; import std.lyxvision.window; import std.lyxvision.consts; fn main(): int64 { Init(); // Terminal initialisieren var app: TApplication := AppInit(0 as TApplication); // Fenster erstellen (x=5, y=3, w=40, h=15): var win: TWindow := WindowNew(5, 3, 40, 15, "Mein Fenster"c); AppInsertWindow(app, win); AppDrawMenuBar(app); AppRun(app); // Ereignisschleife AppDone(app); Done(); return 0; } ---- ===== Grundlegende Konzepte ===== ==== View-Hierarchie ==== Alle sichtbaren Elemente erben von ''TView''. Gruppen (''TGroup'') können Kind-Views besitzen: TView └─ TGroup ├─ TApplication (Wurzel) │ ├─ TDesktop │ ├─ TMenuBar │ └─ TStatusLine └─ TWindow / TDialog ├─ TButton ├─ TInputLine ├─ TListView └─ TStaticText ==== Ereignisystem ==== Ereignisse werden als ''TEvent''-Struktur durch die View-Hierarchie weitergeleitet. Wichtigste Ereigniskonstanten aus ''lyxvision/types'': import std.lyxvision.types; // TEvent enthält: // .what — Ereignistyp (evNothing, evKeyDown, evMouseDown, evCommand) // .keyCode — Tastaturcode // .command — Befehlsnummer (für evCommand) ==== Befehlsnummern (Commands) ==== Buttons und Menüs senden Befehle. Reservierte Befehle: ^ Konstante ^ Wert ^ Bedeutung ^ | ''mrOK'' | 10 | OK / Bestätigen | | ''mrCancel'' | 11 | Abbrechen | | ''mrYes'' | 12 | Ja | | ''mrNo'' | 13 | Nein | | ''mrAbort'' | 100 | Abbruch | ---- ===== Widgets ===== ==== TButton ==== import std.lyxvision.button; import std.lyxvision.consts; // Standard-Button (x=5, y=10): var btn: TButton := ButtonCreateStd(5, 10, "OK"c, mrOK); // Standard-Button mit Fokus (Default-Button): var defBtn: TButton := ButtonCreateDefault(20, 10, "Abbrechen"c, mrCancel); ==== TInputLine ==== import std.lyxvision.inputline; // Einzeilige Eingabe (x=3, y=5, maxLen=40): var input: TInputLine := InputLineCreate(3, 5, 40); // Passwort-Modus: InputLineSetInsertMode(input, ilPassword); ==== TListView ==== import std.lyxvision.listview; // Einfachauswahl-Liste (x=2, y=2, w=30, h=10): var lv: TListView := ListViewNew(2, 2, 30, 10, lvSingle); ListViewAddItem(lv, "Eintrag 1"c); ListViewAddItem(lv, "Eintrag 2"c); ListViewAddItem(lv, "Eintrag 3"c); // Ausgewählten Index holen: var selected: int64 := ListViewGetFocused(lv); ==== TDialog (Modal) ==== import std.lyxvision.dialog; import std.lyxvision.button; // Dialog zentriert (w=50, h=15): var dlg: TDialog := DialogNewCentered(50, 15, "Einstellungen"c); // Button zum Dialog hinzufügen: var okBtn: TButton := ButtonCreateDefault(18, 12, "OK"c, mrOK); // ... Widgets zu dlg hinzufügen ... // Modal ausführen — blockiert bis Button geklickt: var result: int64 := DialogExecute(dlg); if result == mrOK { // OK wurde gedrückt } ==== TMenu / TMenuBar ==== import std.lyxvision.menu; import std.lyxvision.tapplication; // Menüleiste mit zwei Menüs: var mb: TMenuBar := MenuBarAddMenu(0 as TMenuBar, "Datei"c); MenuAddItem(mb as TMenu, "Öffnen"c, 100, 0, 0); MenuAddItem(mb as TMenu, "Speichern"c, 101, 0, 0); MenuAddSeparator(mb as TMenu); MenuAddItem(mb as TMenu, "Beenden"c, 102, 0, 0); MenuBarAddMenu(mb, "Bearbeiten"c); MenuAddItem(mb as TMenu, "Kopieren"c, 200, 0, 0); ---- ===== Farben und Stile ===== Farben aus ''lyxvision/consts'': import std.lyxvision.main; import std.lyxvision.consts; // Vordergrund- und Hintergrundfarbe setzen: SetColors(colorWhite, colorBlue); FillRect(0, 0, 79, 24); // Hintergrund füllen SetColors(colorYellow, colorBlue); WriteStr(30, 12, "Hallo Welt!"c); ^ Farbe ^ Wert ^ | ''colorBlack'' | 0 | ''colorBlue'' | 1 | ''colorGreen'' | 2 | | ''colorRed'' | 4 | ''colorMagenta'' | 5 | ''colorBrown'' | 6 | | ''colorLightGray'' | 7 | ''colorDarkGray'' | 8 | ''colorWhite'' | 15 | | ''colorYellow'' | 14 | ''colorLightBlue'' | 9 | ''colorLightGreen'' | 10 | ---- ===== Direkte Zeichenfunktionen (ohne Widget-System) ===== Für einfache Terminal-Ausgaben ohne vollständiges Widget-System: import std.lyxvision.main; fn main(): int64 { Init(); ClearScreen(); SetColors(colorLightGreen, colorBlack); MoveCursor(10, 5); WriteStr(10, 5, "Status: OK"c); DrawBox(5, 3, 50, 20); // Rahmen zeichnen // ... Taste warten, dann aufräumen ... Done(); return 0; } ^ Funktion ^ Beschreibung ^ | ''Init()'' | Terminal initialisieren, Rawmode | | ''Done()'' | Terminal zurücksetzen | | ''ClearScreen()'' | Bildschirm löschen | | ''WriteStr(x, y, s)'' | Text an Position schreiben | | ''DrawBox(x1, y1, x2, y2)'' | Rahmen zeichnen | | ''FillRect(x1, y1, x2, y2)'' | Rechteck mit Hintergrundfarbe füllen | | ''MoveCursor(x, y)'' | Cursor positionieren | | ''HideCursor()'' | Cursor ausblenden | | ''SetColors(fg, bg)'' | Farben setzen | Letzte Aktualisierung: 2026-06-08