Dokumentace CLua


🖥️ GUI (Uživatelské rozhraní)

Grafické rozhraní CLua je postaveno na Terminal.GUI 2.4.4 a ovládá se z Lua přes vysokoúrovňové factory funkce definované v utils/elements.lua. Ty obalují nízkoúrovňové GUI.* C# volání a vracejí objekty prvků s metodami pro další manipulaci.


📐 XYWH — Pozice a velikost

Většina factory funkcí přijímá tabulku XYWH pro pozicování:

XYWH(x, y, šířka, výška)
local pos = XYWH(5, 2, 40, 10);

🪟 Okna (Window)

Okna jsou kontejnery nejvyšší úrovně. V jednu chvíli je viditelné vždy jen jedno okno.

local win = getWindow(name, visible, el)
Parametr Typ Popis
name string Titulek okna
visible boolean Zda je okno viditelné při startu
--------- --- -----
el.shemeName string jméno schémata, který má být použít místo výchozího
local mainWin = getWindow("Hlavní menu", true, {});

Přepínání oken

setActiveWindow(win)   -- globální helper
win:SetActive()        -- metoda na objektu okna

Metody oken

Metoda Popis
el:SetVisible(bool) Zobrazí nebo skryje prvek
el:SetActive() Nastaví tohle okno viditelný a ostatní okna skryje
el:ApplyScheme(shemeName) Aplikuje schéma na prvek

🗂️ Frame (Rámeček)

Frame je ohraničený podkontejner uvnitř okna.

local frame = getFrame(parent, coors, name, el)
Parametr Typ Popis
parent element Rodičovský element (lze použít i {ID=X} kde X je ID elementu
coors XYWH Pozice a velikost
name string Titulek framu
--------- --- -----
el.shemeName string jméno schémata, který má být použít místo výchozího
local panel = getFrame(mainWin, XYWH(1, 1, 38, 8), "Nastavení", {});

📜 Scrollbox

Scrollovatelný kontejner.

local box = getScrollbox(parent, coors, el)
Parametr Typ Popis
parent element RRodičovský element
coors XYWH Pozice a velikost
name string Text tlačítka
--------- --- -----
el.shemeName string jméno schémata, který má být použít místo výchozího

🔘 Tlačítko (Button)

local btn = getButton(parent, coors, name, callback, el)
Parametr Typ Popis
parent element RRodičovský element
coors XYWH Pozice a velikost
name string Text tlačítka
callback string nebo funkce Zavoláno při kliknutí
-------- --- -----
el.params table argumenty pro callback typu funkce
el.shemeName string jméno schémata, který má být použít místo výchozího

Callback může být:

  • Funkce: zavolána přímo; el.params jsou předány jako argumenty
  • String: vyhodnocen jako Lua v globálním scope při každém kliknutí

Použij "__self" uvnitř el.params pro referenci na samotný prvek tlačítka:

local btn = getButton(mainWin, XYWH(5, 5, 20, 1), "Spustit", mojeFunkce, {
    params = { "__self", "extraArg" }
});

Metoda tlačítka

btn:SetCallback(fn, ...)   -- změna callbacku po vytvoření

🏷️ Popisek (Label)

Statický textový prvek.

local lbl = getLabel(parent, coors, text, el)
Parametr Typ Popis
parent element RRodičovský element
coors XYWH Pozice a velikost
text string Text labelu
--------- --- -----
el.shemeName string jméno schématu, který má být použít místo výchozího
local lbl = getLabel(mainWin, XYWH(2, 1, 30, 1), "Ahoj světe", {});
lbl:SetText("Aktualizovaný text");

📊 Progress Bar

local bar = getProgressBar(parent, coors, el)
Parametr Typ Popis
parent element RRodičovský element
coors XYWH Pozice a velikost
--------- --- -----
el.shemeName string jméno schématu, který má být použít místo výchozího

Pozn: z XYWH se použijí pouze x, y a width.

bar:SetProgress(0.5);   -- hodnota mezi 0.0 a 1.0

☑️ Zaškrtávací políčko (Checkbox)

local cb = getCheckbox(parent, coors, text, el)
Parametr Typ Popis
parent element RRodičovský element
coors XYWH Pozice a velikost
text string Název zaškrtávajícího políčka
--------- --- -----
el.shemeName string jméno schématu, který má být použít místo výchozího

Pozn: z XYWH se použijí pouze x a y (velikost je automatická).

cb:SetChecked(true);
local stav = cb:GetChecked();   -- vrací boolean

🔵 Radio skupina (Radio Group)

local radio = getRadio(parent, coors, items, el)
Parametr Typ Popis
parent element RRodičovský element
coors XYWH Pozice a velikost
items table nebo string Tabulka stringů nebo řetězec oddělený čárkami
-------- --- -----
el.orientation string "vertical" (výchozí) nebo "horizontal"
el.shemeName string jméno schématu, který má být použít místo výchozího
local radio = getRadio(mainWin, XYWH(2, 3, 0, 0), {"Možnost A", "Možnost B", "Možnost C"}, {});
radio:SetRadioSelected(1);         -- vyber první možnost (indexováno od 1)
local sel = radio:GetRadioSelected();

✏️ Textové pole (TextField — jeden řádek)

local field = getTextField(parent, coors, text, el)
Parametr Typ Popis
parent element RRodičovský element
coors XYWH Pozice a velikost
text string Text pole
--------- --- -----
el.secret boolean Maskovat vstup (heslo)
el.callback_keyup string nebo funkce Zavoláno při každém stisku klávesy
el.params table Extra parametry pro callback
el.shemeName string jméno schématu, který má být použít místo výchozího

callback_keyup podporuje tokeny v obou režimech:

  • String callback: tokeny se nahradí přímo v řetězci — %k (kód klávesy), %c (znak), %id (ID prvku)
  • Function callback s el.params: použij token string v poli params — nahradí se skutečnými hodnotami před zavoláním funkce:
    • "k%" → kód klávesy (číslo)
    • "c%" → znak (string)
    • "id%" → ID prvku
    • "__self" → reference na samotný prvek
-- string callback s tokeny
local field = getTextField(mainWin, XYWH(2, 5, 30, 1), "", {
    callback_keyup = "print('klávesa: %k, znak: %c')"
});

-- function callback s více tokeny v params
local field2 = getTextField(mainWin, XYWH(2, 8, 30, 1), "", {
    callback_keyup = function(key, char, self) print("klávesa:", key, "znak:", char) end,
    params = { "k%", "c%", "__self" }
});

field:GetText();
field:SetText("nová hodnota");
field:SetReadOnly(true);

📝 Textová oblast (TextBox — více řádků)

local box = getTextBox(parent, coors, text, el)
Parametr Typ Popis
parent element RRodičovský element
coors XYWH Pozice a velikost
text string Text pole
--------- --- -----
el.readOnly boolean Režim pouze pro čtení
el.callback_keyup string nebo funkce Zavoláno při každém stisku klávesy )
el.params table Extra parametry pro callback
el.shemeName string jméno schématu, který má být použít místo výchozího

callback_keyup podporuje tokeny v obou režimech: (stejné tokeny a params jako TextField)

  • String callback: tokeny se nahradí přímo v řetězci — %k (kód klávesy), %c (znak), %id (ID prvku)
  • Function callback s el.params: použij token string v poli params — nahradí se skutečnými hodnotami před zavoláním funkce:
    • "k%" → kód klávesy (číslo)
    • "c%" → znak (string)
    • "id%" → ID prvku
    • "__self" → reference na samotný prvek
local box = getTextBox(mainWin, XYWH(2, 5, 40, 10), "", { readOnly = true });
box:SetText("Nějaký obsah");

🔧 Společné metody prvků

Všechny prvky (kromě Window) dědí z ElementClass:

Metoda Popis
el:SetX(x) Nastaví pozici X
el:SetY(y) Nastaví pozici Y
el:SetW(w) Nastaví šířku
el:SetH(h) Nastaví výšku
el:SetXY(x, y) Nastaví pozici
el:SetWH(w, h) Nastaví velikost
el:SetXYWH(xywh) Nastaví pozici a velikost z XYWH objektu
el:SetVisible(bool) Zobrazí nebo skryje prvek
el:SetText(str) Nastaví text (Label, TextField, TextBox)
el:GetText() Získá text (TextField, TextBox)
------ ---------------
el:SetColor(fg, bg) Všechny stavy najednou
el:SetColorNormal(fg, bg) Normal
el:SetColorFocus(fg, bg) Focus
el:SetColorHot(fg, bg) HotNormal + HotFocus
el:SetColorHotNormal(fg, bg) HotNormal
el:SetColorHotFocus(fg, bg) HotFocus
el:SetColorDisabled(fg, bg) Disabled
el:SetColorHighlight(fg, bg) Highlight
el:ApplyScheme(shemeName) Aplikuje schéma na prvek

🗑️ Mazání prvků

Prvky lze za běhu odebrat z GUI:

GUI.DestroyElement(el.ID)       -- odstraní prvek a všechny jeho potomky
GUI.DestroyAllElements()        -- odstraní vše a vyčistí menu lištu

DestroyElement přijímá interní ID prvku (el.ID), rekurzivně odstraní všechny potomky a vyčistí zaregistrované callbacky. DestroyAllElements odstraní všechny prvky a vyčistí menu lištu, ale neresetuje Lua stav.

local lbl = getLabel(win, XYWH(2, 1, 30, 1), "Dočasné", {});
-- ... později:
GUI.DestroyElement(lbl.ID);

📋 Menu lišta

Horní menu lištu lze přizpůsobit z Lua:

GUI.AddMenuItem("_File", "_Export", "setActiveWindow(exportWin)");
GUI.UpdateMenuItem("_File", "_Export", "Nový popisek");
GUI.RemoveMenuItem("_File", "_Export");

Třetí argument je string Lua kódu, který se spustí při kliknutí na položku menu.

Pozn: AddMenuItem(...) je globální zkratka — lze volat bez prefixu GUI..


✍️ Příklad: Jednoduché okno s tlačítkem

local win = getWindow("Můj nástroj", true, {});

local lbl = getLabel(win, XYWH(2, 1, 30, 1), "Stiskni tlačítko:", {});

local btn = getButton(win, XYWH(2, 3, 20, 1), "Spustit makro", function()
    lbl:SetText("Probíhá...");
    -- práce zde
    lbl:SetText("Hotovo!");
end, {});

-- Registrace okna do menu lišty
GUI.AddMenuItem("_File", "_Můj nástroj", "setActiveWindow(win)");

-- Aktivace okna při startu
setActiveWindow(win);