Interní API
Interní část Styles
_precompute_styles()
Spočítá a vrátí plně vyřešený slovník stylů aplikací aktivního presetu a následným překrytím non-None hodnot z custom_styles. Vrací deep copy výsledku.
# Called internally — returns merged styles dict
resolved = engine.styles._precompute_styles()_cache_styles()
Volá _precompute_styles() a uloží výsledek do engine.styles.cached_styles. Volá se automaticky po každém set_custom_style(), remove_custom_style() nebo změně stylu.
Interní část RenderEngine
_wrap_and_center(text, max_width)
Zalomí text tak, aby se vešel do max_width znaků a horizontálně vycentruje blok. Zpracovává explicitní nové řádky. Vrací seznam vypaddingovaných stringů, každý přesně max_width znaků široký.
| Parametr | Typ | Popis |
|---|---|---|
| text | str | Text labelu pro zalomení a centrování |
| max_width | int | Maximální šířka ve znacích (vnitřní šířka komponenty) |
_draw_choice(obj, text)
Vykreslí kompletní choice komponentu: horní okraj, oblast textu labelu, oblast tlačítek a spodní okraj. Parametr text jsou předem zalomené řádky labelu. Po renderu volá engine.input.listen(choices) pro spuštění input smyčky.
_draw_buttons(*, obj, choices, max_width, max_height)
Renderuje interaktivní oblast tlačítek uvnitř choice boxu. Tlačítka jsou horizontálně centrovaná, více tlačítek v řádku je odděleno 4 mezerami. Vybrané tlačítko je zvýrazněno ANSI kódy z cache stylů. Dlouhé názvy tlačítek se dělí pomocí visual_width().
| Parametr | Typ | Popis |
|---|---|---|
| obj | dict | Slovník komponenty |
| choices | list | Seznam choices (řádky slovníků tlačítek) |
| max_width | int | Vnitřní šířka pro oblast tlačítek |
| max_height | int | Maximální počet řádků pro tlačítka |
_handle_selection_change(key, choices)
Aktualizuje selected_row a selected_index podle směru klávesy ('up', 'down', 'left', 'right'). Omezí hodnoty do platných rozsahů. Zavolá _refresh() pro redraw.
_refresh(*, selected_row, selected_index)
Aktualizuje selection state RenderEnginu a spustí plný redraw vyčištěním obrazovky a voláním draw().
Interní část LayoutEngine
_compute_all()
Načte rozměry terminálu přes shutil.get_terminal_size() a spočítá x, y, margin_top, margin_left a rohové souřadnice pro všechny komponenty ve slovníku objects. Voláno automaticky z RenderEngine.draw().
Pro každou komponentu vypočtený layout obsahuje:
- x: int(width_modifier * terminal_cols)
- y: int(height_modifier * terminal_rows)
- margin_top: custom → int(modifier * rows), centered → (rows - y) // 2
- margin_left: custom → int(modifier * cols), centered → (cols - x) // 2
- corners.top_left: (margin_left, margin_top)
- corners.bottom_right: (margin_left + x, margin_top + y)
Interní část InputHandler
get_key()
Low-level detekce kláves specifická pro platformu. Na Windows používá msvcrt.getch() s dvoubajtovými sekvencemi šipek (prefix 0xE0). Na Unixu přepne terminál do raw režimu přes termios, čte přes select() s timeoutem 0.1 s a poté obnoví nastavení terminálu.
| Návratová hodnota | Windows kód | Unix sekvence |
|---|---|---|
| 'up' | 0xE0 + 'H' | \x1b[A |
| 'down' | 0xE0 + 'P' | \x1b[B |
| 'right' | 0xE0 + 'M' | \x1b[C |
| 'left' | 0xE0 + 'K' | \x1b[D |
| 'enter' | \r or \n | \r or \n |
| None | Nebyla stisknuta klávesa | Nebyla stisknuta klávesa |