|
||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
Vala 4: grafické rozhraní GTK+>V dnešním díle se podíváme na grafické rozhraní GTK+. Jde o jednu ze dvou největších grafických knihoven v unixovém světě. Zatímco QT začíná u C++, tak doménou GTK+ je stále ANSI C. To ale neznamená, že by nemělo podporu dalších programovacích jazyků. Vedle C++, Javy nebo C# v podobě projektu Mono, je to právě rozhraní pro jazyk Vala. Ten by se dal postavit někam mezi C++ a C#.
O grafické knihovně GTK+ se nechci příliš rozepisovat, na to je k dispozici i českým čtenářům poměrně hodně zdrojů. Nicméně základní úvod a představení termínů považuji za drobnou nutnost. Celá knihovna je postavena nad GObject, resp. nad GLib knihovnou. Tedy vše co jsem psal o GObject systému platí i pro GTK+. Základním rozdílem je pak právě použití grafického rozhraní, to sice není nutné použít, ale pak použití grafické knihovny ztrácí význam. GTK+ samo o sobě nepoužívá jen GLib, ale ředu dalších důležitých knihoven, které jsou programátorům v podobě API více či méně odkryty. Mezi ty nejdůležitější, na které můžete narazit patří GLib, GIO, Pango, Cairo, GDK a ATK.
Celé GTK+ pak může běžet nad různými grafickými rozhraními. Tato knihovna je zároveň multiplatformní, díky tomu můžete najít GTK+ na Linuxu, Windows, MacOS nebo libovolném unixovém systému. GTK+ umí běžet nad Xserverem, Waylandem, Frame Bufferem nebo dokonce jako HTML aplikace. A samozřejmě její vzhled nastavit a rozšiřovat. Některé aplikace tak ani nevypadají že GTK+ používají. GTK+ pro programátoraV GTK+ se setkáte s několika druhy objektů. Nejjednodušší struktury popisují různé základní vlastnosti. Například barvu ( Celou hierarchii grafických prvků může programátor skládat ručně. Konečně v mnoha případech je to jediná možnost. GTK+ však má, stejně jako ostatní knihovny, nástroj na „malování“ aplikace. Tímto nástrojem je Glade. Ten se postupem času značně vyvinul a v poslední verzi je to „malovátko“, ve kterém si programátor poskládá aplikaci ze všech dostupných widgetů, které mu GTK+ nabízí. Výstup v podobě XML souboru pak lze snadno nahrát a používat v aplikaci. I tento způsob práce dostane v seriálu prostor. UdálostiNež se pustíme do vytouženého příkladu, zastavíme se u událostí. Na většině grafických rozhraní, které znám jsou události základním prvkem interakce rozhraní s uživatelem. Aby také ne. To uživatel často kliká na tlačítka, scrolluje v editoru, pohybuje kurzorem a očekává, že aplikace na jeho akci bude reagovat. Vedle uživatelských událostí, má však nejen GTK+ mnoho dalších interních, programových, knihovních a aplikačních událostí. Tyto události jsou generovány například při vytvoření, zobrazení, nebo v době ničení objektu. Další obdobné události jsou vyvolány při manipulaci s tzv. dětmi atd. Každá událost může vyvolat nějakou akci, může být jedna, nebo jich může být více. A právě na tyto události je Vala už připravena. V prvním díle tohoto seriálu jsem se krátce zmínil o tzv. signálech. Signály umožňují programátorovi tvořit asynchronní aplikaci, bez ohledu na to, zda používá nějakou pokročilejší techniku paralelního běhu. Tyto signály jsou programátorským ekvivalentem nějaké události. Programátor může tyto události různě používat. Přetěžovat, zastavovat, vyvolávat ale především na ně může reagovat. Než se pustíme do první grafické aplikace, rád bych využil této subkapitoly k ukázce použití signálů v konsolové aplikaci. Signály budou fungovat vždy, jsou pouštěny sériově tak, jak jsou vyvolány. Aplikaci však lze rozšířit pomocí tzv. smyčky, díky které máme další možnosti. Nejprve obyčejná verze:
Všimněte si co program udělá. Každé nastavení vlastnosti s názvem property způsobí zavolání metody debug. Poté rozšířená verze:
Druhá verze umožňuje v podstatě „paralelní“ běh. Všimněte si, že po metoda debug dvakrát načasovala volání další, tentokrát lambda metody. Tato ukázka byla jen nástin toho, co budeme v grafické aplikaci řešit. Proto, že jsou události neoddělitelnou součástí GTK+, budeme se jimi ještě mockrát zabývat. Hello gtk+ worldZačneme rovnou kódem:
GTK je obsaženo v gtk+ balíčku. Náš seriál bude popisovat již verzi 3.x, nicméně v mnoha případech bude kód přeložitelný i s verzí 2.x. Při kompilaci je tedy nutné uvést balíček.
V závislosti na verzi GTK+, Vala kompilátoru a C kompilátoru je možné, že kompilace bude generovat různé množství varování z C kompilátoru. Tyto varování jsou známé, a spočívají v nedokonalém generování zdrojového C kódu. Ten se generuje na základě vapi souborů příslušných knihoven, a ty se s knihovnami občas rozchází. Chyby jsou známé a v dalších verzích Valy jsou opraveny. Probereme si ještě co kód dělá. Veřejná třída Application zde vlastně není potřeba, je to jen hezký ~ správný zápis Vala aplikace. V dalších příkladech již ale bude tato třída používána tím typičtějším způsobem. Než začneme cokoli dělat s widgety, je nutné inicializovat samotné GTK+ metodou init. Té předáváme parametry příkazové řádky, to proto, že samotné GTK+ některým parametrům rozumí. Na unixovém systému si můžete vyzkoušet parametr V druhé fázi vytvoříme widget okna. Okno má mnoho událostí, jedna z nich se jmenuje destroy a je volaná v době, kdy uživatel zavírá okno ze správce oken. Tedy kliknutím na křížek v pravé části panelu správci oken, nebo kombinací kláves Alt + F4, či jiným způsobem, typickým pro daného správce oken. Na tuto událostí navěsíme metodu Pokračujeme vytvořením tlačítka. V příkladu používáme jeden z konstruktorů, jenž na vstupu očekává text, který bude vidět na tlačítku. A i na událost tlačítka, tentokrát s názvem clicked, navěsíme naší funkci. V jednom z minulých dílů jsme si říkali o lambda funkcích. K nim se jistě ještě mnohokrát dostaneme, pro začátek nám stačí, že je to takový inline způsob, jak pustit nějaký náš kód bez toho, aniž bychom vytvářeli další metodu. Na vstupu je volitelný parametr typu Aby se tlačítko někde objevilo, je třeba jej přidat do okna. Třída Na závěr je nutné zavolat metodu Co nás čeká příštěPříště si představíme některé z kontejnerů a probereme si jak je to s jejich používáním. Také se podíváme na některé další zajímavé Widgety které by se nám mohli hodit. Na závěr bych rád upozornil na diskuzi pod článkem, kterou bych byl rád, pokud budete využívat. Pomůžete mě se tak zaměřit se místa, která Vás trápí.
Stránky projektu GTK+
|
Search Software
Search Google
|
||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |