C++ a wxWidgets (4. díl)

Protože už umíme udělat spoustu věcí rozhodl jsem se, že se ve 4. díle zkusíme udělat přehled o tom jaké existují widgety. Kvůli délce obsahu přesuneme téma dialogy na další díl.

Několik základních widgetů už známe, jsou to např. wxButton, wxPanel, wxFrame a další. Knihovna wxWidgets má definovaných několik dalších, pomocí nichž, uděláme např. jednoduše zaškrtávací políčko nebo třeba scrollovací element.

wxCheckBox
Widget wxCheckBox určitě všichni znáte, jedná se o klasické zaškrtávací políčko. Prvek nabývá dvou hodnot – true nebo false – to znamená, že je buď zaškrtnuté nebo je prázdné.
Práce s ním není nikterak složitá, konstruktor je podobný všem ostatním, povinné parametry jsou opět rodičovský prvek, ID a text, který se zobrazí vedle prvku.
Pro obsluhu prvku existují následující metody:

  • GetValue – vrátí stav checkboxu
  • IsChecked – vrací true pokud je zaškrtnutý
  • SetValue – nastaví prvku hodnotu předanou v parametru

Prvek po kliknutí(změně) generuje událost typu wxEVT_COMMAND_CHECKBOX_CLICKED.

V některých případech je třeba použít 3-stavové tlačítko. To vytvoříme pomocí makra wxCHK_3STATE nebo wxCHK_ALLOW_3RD_STATE_FOR_USER, které uvedeme jako parametr style v konstrukturu prvku. Rozdíl maker je pouze v tom, že při prvním nemá uživatel možnost naklikat 3. stav, při druhém makru může uživatel navolit i 3. stav. Pro třístavová tlačítka jsou i speciální metody, které se liší hlavně v návratových hodnotách stavu checkboxu, kde jsou použity předdefinované makra wxCHK_UNCHECKED, wxCHK_CHECKED, wxCHK_UNDETERMINED.

Pokud chcete zjistit více odkazuji na dokumentaci.

wxSlider
Toto taky zná určitě každý a většina to i použije v praxi, jedná se o tzv. scrollbar(posuvná lišta). Knihovna řeší jeho obsluhu velmi lehce, na počátku jenom nastavíme min a max hodnotu posuvníku a potom když chceme zjistit jeho umístění, tak pouze načteme z prvku jeho celočíselnou hodnotu.
Protože je deklarace povinných parametrů trochu jiná, uvedu její příklad:

wxSlider(wxWindow* rodic, wxWindowID id, int pocatek, int min, int max);

Tři přidané parametry přebírají celočiselnou hodnotu a plní nasledující funkci: pocatek nastavuje počáteční umístění jezdce, min nejmenší hodnota jezdce, max největší hodnota jezdce.
Třída definuje několik metod k práci se scrollbarem, nejpoužívanější jsou asi tyhle:

  • GetValue – vrací aktuální hodnotu jezdce
  • SetValue – nastaví pozici jezdce na hodnotu předanou v parametru
  • SetRange – přenastaví rozsah hodnot, 1. parametr min, 2. parametr max

Definováno je několik možných událostí, pro nás je podstatná hlavně wxEVT_COMMAND_SLIDER_UPDATED, která je volána při každé změně polohy jezdce.

Opět pro kompletní výpis metod a maker odkazuji na dokumentaci.

wxStaticLine
Výše uvedená třída slouží k vykreslení horizontální nebo vertikální čáry do okna. Orientaci čáry zvolíme předáním makra v konstruktoru v parametru style, pro horizontální směr je definované názvem wxLI_HORIZONTAL, pro vertikální wxLI_VERTICAL. Konstruktor nemá žádné záhadnosti, takže není třeba jej vypisovat.

Pro úplnost odkaz na manuál.

wxToggleButton
Je typ tlačítka, který má dva stavy podobně jako wxCheckBox. Po kliknutí na takové tlačítko zůstane tlačítko stisknuté dokud na něj není opět kliknuto. Využití může být jako nastavovací prvek, kde je třeba aby byl rozměrově větší a přehlednější než checkbox, např. tlačítko Start/Stop u stopek.
Funkce pro práci s tlačítkem jsou pouze 2:

  • GetValue
  • SetValue

Jejich funkce je stejná jako u třídy wxCheckBox, včetně konstruktoru, proto není třeba blíže popisovat. Event má prvek pouze jeden a to wxEVT_COMMAND_TOGGLEBUTTON_CLICKED.

wxBitmapButton
Jedná se o tlačítko, na jehož plochu je vykreslena bitmapa. Tlačítko wxBitmapButton má 5 stavů:

  • normal – v normálním stavu, zobrazená defaultní bitmapa
  • disabled – neaktivní
  • selected – zmáčknuté(při kliknutí)
  • focus – na tlačítku je nastavený focus, ale není zmáčknuté
  • hover – při najetí myši

Konstruktor je změněný pouze ve třetím parametru, kde se místo popisu zadává bitmapa, která se má vykreslit v normálním stavu. Když chceme vykreslit bitmapu ze souboru(ve formátu BMP), musíme parametr předat instanci třídy wxBitmap.

wxBitmap(wxT("cesta"), wxBITMAP_TYPE_BMP);

Takhle bude vypadat konstruktor třídy bitmapy, jejíž výsledek předáme jako třetí parametr konstruktoru tlačítka. První parametr funkce musíme nahradit skutečnou cestou ke skutečnému souboru. Druhý parametr označuje typ souboru, kompletní výpis podporovaných formátu najdete zde.
K nastavení bitmap k ostatním stavům se provádí pomocí členských funkcí SetBitmapDisabled, SetBitmapSelected, SetBitmapFocus, SetBitmapHover. Všechny vyžadujou pouze jeden parametr a to instanci, pro nás již známé třídy wxBitmap. Kdybychom někdy potřebovaly zjistit jaké bitmapy jsou pro jaké stavy nastavené voláme metody GetBitmapDisabled, GetBitmapSelected, GetBitmapFocus, GetBitmapHover, které nepřebírají parametr a vrací instanci třídy wxBitmap. Pro nastavení bitmapy pro normální stav použijeme metodu SetBitmapLabel.

Eventy jsou stejné jako u třídy wxButton, tedy wxEVT_COMMAND_BUTTON_CLICKED.

Popis třídy wxBitmapButton.

DÚ: Procvičte si práci se všemi widgety, v budoucnu to bude určitě potřeba.

Tohle je pro tento díl vše, příště si ukážeme práci s dialogy a pokud zbyde místo tak i něco o listboxu.

O Daniel Švec

Autor se věnuje vývoji aplikací v C/C++, Python. Zajímá se o robotiku, elektrotechniku, a IT.