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));