Inhaltsverzeichnis

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.

Guides · 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