Dokumentace CLua


🎨 Barvy a schémata

CLua poskytuje komplexní systém pro práci s barvami v GUI. Barevné hodnoty jsou jednoduché Lua tabulky, použitelné kdekoliv — v přímém nastavení prvků nebo ve schématech.


🏗️ Barevné konstruktory

Základní funkce pro vytvoření barevné hodnoty:

RGB(r, g, b)   -- {red, green, blue}
GRAY(v)        -- šedá: RGB(v, v, v)
BLACK()        -- RGB(0, 0, 0)
WHITE()        -- RGB(255, 255, 255)

Všechny funkce vracejí tabulku kompatibilní s jakoukoliv funkcí, která přijímá barevnou hodnotu.


🎨 Předdefinované barvy — COLOR

Globální tabulka COLOR obsahuje pojmenované barevné konstanty. Lze je použít kdekoliv místo RGB(...):

setColor(el, COLOR.PureCyan, COLOR.DarkBlue)

Barvy jsou rozděleny do skupin:

Skupina Příklady
Standard Black Red Green Yellow Blue Magenta Cyan White
Bright BrightBlack BrightRed BrightGreen BrightYellow
Dark DarkGray DarkRed DarkGreen DarkBlue DarkCyan
Pure PureRed PureGreen PureBlue PureYellow PureMagenta PureCyan
Grays Gray LightGray Silver Gainsboro
Reds & pinks Crimson Tomato Coral Salmon Pink HotPink DeepPink
Oranges & browns OrangeRed Orange Gold Chocolate SaddleBrown Brown Tan
Greens ForestGreen Olive LimeGreen Lime SpringGreen
Blues Navy RoyalBlue SteelBlue DodgerBlue SkyBlue LightBlue
Purples Indigo DarkViolet Purple MediumPurple Violet Orchid Plum
Teals & cyans Teal Turquoise Aquamarine

Skupiny Dark, Bright a Pure jsou konzistentně odvozené od základní terminálové palety:

Tmavá (~60 %) Základní (~50 %) Jasná (mix) Čistá (255)
DarkRed Red BrightRed PureRed
DarkGreen Green BrightGreen PureGreen
DarkBlue Blue BrightBlue PureBlue
DarkCyan Cyan BrightCyan PureCyan

Některé záznamy jsou aliasy (označeno komentářem v kódu): Navy = Blue, Teal = Cyan, Lime = PureGreen atd.


🖌️ Přímé nastavení barev prvku

Každý prvek dědí z ElementClass metody pro nastavení barev konkrétních stavů. Všechny přijímají fg (barva textu) a bg (barva pozadí). Nastavením přímé barvy se celý prvek vytrhne ze schématu — ostatní stavy si zachová tak, jak je měl ze schématu v tu chvíli, ale nadále na žádné změny schématu nereaguje.

Metoda Nastaví stav(y)
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
lbl:SetColor(COLOR.BrightWhite, COLOR.DarkBlue);
btn:SetColorFocus(COLOR.PureYellow, COLOR.DarkGreen);
btn:SetColorDisabled(COLOR.Gray, COLOR.DarkGray);

🗂️ Schémata

Schéma je pojmenovaná sada barev pro všechny stavy prvku najednou. Jedno schéma lze sdílet mezi více prvky — stačí ho jednou definovat a aplikovat opakovaně.

Konstruktor SchemeColors

Vytvoří barevnou tabulku schématu z pozičních argumentů. Argumenty musí být předány v kompletních skupinách:

Počet argumentů Co se nastaví
2 — normalFg, normalBg Všechny stavy = normal
4 — + focusFg, focusBg Normal + Focus; Hot* odvozeny
10 — + hotNormalFg/Bg, hotFocusFg/Bg, disabledFg/Bg + HotNormal, HotFocus, Disabled
12 — + highlightFg, highlightBg Plné schéma
SchemeColors(normalFg, normalBg
    [, focusFg, focusBg
        [, hotNormalFg, hotNormalBg, hotFocusFg, hotFocusBg,
           disabledFg,  disabledBg
            [, highlightFg, highlightBg]]])

COLOR.* konstanty a RGB() lze libovolně kombinovat:

local myColors = SchemeColors(
    COLOR.BrightWhite, COLOR.DarkBlue,    -- normalFg,    normalBg
    COLOR.PureCyan,    RGB(10, 10, 60)    -- focusFg,     focusBg
);

Funkce SetScheme

Vytvoří nebo přepíše pojmenované schéma:

SetScheme(name, schemeColors)
Parametr Typ Popis
name string Název schématu
schemeColors SchemeColors Tabulka z SchemeColors(...)
local uiColors = SchemeColors(
    COLOR.PureMagenta, COLOR.DarkRed,       -- normalFg,    normalBg
    COLOR.Magenta,     COLOR.Gray,           -- focusFg,     focusBg
    COLOR.PureBlue,    COLOR.DarkGreen,      -- hotNormalFg, hotNormalBg
    COLOR.PureCyan,    COLOR.DarkBlue,       -- hotFocusFg,  hotFocusBg
    COLOR.BrightBlack, COLOR.DarkCyan,       -- disabledFg,  disabledBg
    COLOR.Green,       COLOR.DarkRed         -- highlightFg, highlightBg
);

SetScheme("Base",   uiColors);
SetScheme("Button", uiColors);

Standardní schémata definovaná v kódu: Base, Menu, Dialog, Label, Button, ProgressBar, Checkbox, TextField, logView. Každé z nich je automaticky výchozí pro příslušný typ prvku — Button pro tlačítka, Label pro popisky atd. (Base je výchozí pro okna, rámy a scrollbary.) Přepsáním schématu přes SetScheme se změna projeví u všech prvků, které ho stále používají — včetně již vytvořených.


✅ Aplikace schématu na prvek

Metodou

el:ApplyScheme(schemeName)
btn:ApplyScheme("Button");
frame:ApplyScheme("Base");

Přes el parametr při vytvoření

Každá get* funkce přijímá v posledním parametru el volitelné pole schemeName. Pokud je přítomno, schéma se aplikuje automaticky ihned po vytvoření prvku:

local btn = getButton(win, XYWH(2, 3, 20, 1), "OK", onOk, {
    schemeName = "Button"
});

local frame = getFrame(win, XYWH(0, 0, 40, 10), "Panel", {
    schemeName = "Base"
});

✍️ Příklad: kompletní nastavení barev

-- Definice schématu
local dark = SchemeColors(
    COLOR.BrightWhite, RGB(20, 20, 40),   -- Normal
    COLOR.PureCyan,    RGB(10, 10, 60)    -- Focus
);
SetScheme("DarkTheme", dark);

-- Aplikace při vytvoření prvků
local win   = getWindow("Nástroj", true, {});
local frame = getFrame(win, XYWH(0, 0, 60, 20), "Výsledky", {
    schemeName = "DarkTheme"
});
local btn   = getButton(frame, XYWH(2, 16, 15, 1), "Spustit", runMacro, {
    schemeName = "DarkTheme"
});

-- Přímé barvy bez schématu
local lbl = getLabel(frame, XYWH(2, 1, 40, 1), "Stav:", {});
lbl:SetColor(COLOR.Gold, RGB(20, 20, 40));