====== 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