Prolog
Většina lidí si pro svou činnost, ať je jakákoliv, hledá vhodný nástroj. Stejná situace je i při softwarovém vývoji. Společně s přáteli jsme se nyní u jednoho zastavili a docela se nám zalíbil. Rádi bychom vás s ním blíže seznámili a ukázali možné použití.
Příklady použití budou v jazyce C, případně C++. Bylo by dobré, aby měl čtenář jasnou představu o rozdílu mezi linkerem, compilerem apod.
Multiplatformní aplikace
Volba frameworku (programovací prostředí, knihovny, atd.) je zásadní pro každý projekt a je závislá na jeho typu. Naše rozhodnutí pro GTK+ řady 2.x mělo několik důvodů. Hledali jsme vhodný nástroj pro tvorbu uživatelského rozhraní a požadovali jsme následující:
- bezproblémové fungování ve Win32 a běžných Unixech
- dostatečná škála již hotových prvků (combo boxy, listy, stromy…)
- intuitivní ovládání (jak při programování, tak používání)
- příjemný vzhled uživatelského rozhraní
- rozumná licenční politika (nejlépe LGPL)
- bezvadná podopora různých národních prostředí (hlavně čeština, angličitna)
Tato kritéria se nám zdá, že splňuje GTK+ ve verzi 2.0 a vyšší.
GTK+ 2.x – vlastnosti
Knihovna vznikla jako toolkit pro program GIMP (odtud název Gimp ToolKit=GTK). Je založena na třech základních knihovnách:
GLib – nízkoúrovňová knihovna pro základní funkce zpracování zpráv, vlákna, dynamicky nahrávané knihovny
Pango – knihovna pro vykreslování písma, zpracování textu v mezinárodním prostředí, všechen text je zpracováván v kódování utf-8
ATK – knihovna pro zajištění alternativních vstupních zařízení
Vlastní knihovna GTK+ poskytuje rozhraní pro práci s grafickými prvky, jejich rozložením, vytváření oken a manipulaci s nimi. Ukázka rozhraní vytvořeného pomocí knihovny je na následujícím obrázku.
Základní prvky uživatelského rozhraní:
- okna, dialogová okna
- tlačítka, nástrojové lišty, menu, kontextová menu
- textové popisy, pole pro vkládání textu
- spustitelné seznamy (combo box), seznamy (list), stromy
- prvky pro zobrazování obrázku
- základní dialogy výběr souboru, písma, barvy, textová informace apod.
- další prvky, jako jsou stavový řádek, posuvníky, záložky atd.
Některé další důležité vlastnosti:
- podpora mezinárodního prostředí kódování utf-8
- podpora vícevláknových aplikací
Více informací je možno nalézt na stránkách knihovny.
GTK+ 2.x problémy, nevýhody
Shrnutí hlavních problémů, které v knihovně vidíme:
a) Chybějící podporu tisku tisk je nutno řešit na vyšší úrovni, je obtížné posoudit, zda je to dobře, či nikoliv. V rámci projektu GNOME vzniká nová tisková knihovna, zda ji bude možno použít multiplatformě, není zatím zcela jasné.
b) Starý File dialog – dialog pro otvírání a zavírání souborů se nezměnil od verze 1.x. Je silně omezen a neumožňuje filtrování souborů, implementace pro Win32 nemá samostatné políčko pro výběr disku (bylo by asi vhodnější, aby byl podobnější chování ve Win32 nebo KDE)
c) Chybějící nástoj pro rychlý obousměrný návrh dialogů – dialogy je možno vytvářet pomocí programu Glade, ten bohužel není integrován s vývojovým prostředím (např. Anjuta)
První příklad v GTK+
Po poměrně rozsáhlém úvodu je možno se konečně pustit do tvorby vlastního prvního programu. Snad nelze začít jinak nežli aplikací označovanou jako Hello World.
Program vytvoří jednoduché okno s jedním tlačítkem. Po jeho stisknutí dojde k ukončení aplikace.
Jak zkompilovat
Jednou z důležitých voleb projektu je také použitý překladač a v čem a jak vytvářet pravidla sestavení. Zde uvedeme, jak postupovat v GNU prostředí – obvykle Linux, způsob kompilace stejného kódu ve Win32 (Mingw, případně MSVC 6,7).
V případě, že je čtenář obeznámen s použitím nástrojů jako autoconf, automake, je možno přejít na další kapitolu.
Stručný úvod k automake, autoconf
Před první kompilací je nutno určit rozložení souborů v adresářích. Budeme chtít dosáhnout stavu, kdy budeme mít jeden Makefile pro všechny platformy (vyjma MSVC 6,7). Programy autoconf a automake slouží pro automatizované generování skriptu configure (umožňuje konfiguraci projektu před kompilací) a následně vytvoření souborůMakefile. Šablonou pro ně jsou soubory označené jako Makefile.am, kde je popsáno, co a jak se má kompilovat.
Každý podadresář projektu bude mít vlastní definiční soubor Makefile.am, ze kterého bude vygenerován patřičný Makefile.
Začneme vytvořením adresářů a skriptu configure.in. Komentáře se zapisují s prefixem dnl.
První dva řádky zajistí korektní inicializaci, dále následující příkazy:
AC_PROG_CC
Dále je nutno vytvořit hlavní soubor Makefile.am, který zajistí kompilaci všech podadresářů, tento soubor je tedy poměrně jednoduchý:
Nyní je již nutno vytvořit pravidla sestavení pro adresář chap4. Uvedený příklad provede kompilaci souboru example1.c
Nyní je projekt připraven pro vygenerování zbývajících chybějících souborů a spuštění kompilace.
- Zavolejte aclocal, který vygeneruje soubor aclocal.m4 s makry
- Zavolejte automake -a, dojde k vygenerování chybějících standardních souborů (textové soubory o verzi, readme apod.)
- Zavolejte autoconf, finální program vygeneruje soubor configure
Nyní je již vše připraveno pro běžnou kompilaci a další vývoj.
Kompilace ve Win32
Jestliže primární vývoj probíhá v Linuxu nebo jiném unixovém prostředí, je pro kompilaci nejlepší použít prostředí MinGW ( http://www.mingw.org ). Zde je největším úskalím správné umístění souborů .pc do systémového adresáře nebo lépe nastavení systémové proměnné PKG_CONFIG_PATH
. Velmi užitečné je také mít nainstalován Cygwin, umožňuje spouštet autoconfa automake.
Alternativně je možno kompilovat v MSVC, zde se vytvoří běžný projekt. Je nutno nastavit správně adresáře, kde se hledají hlavičkové soubory a knihovny. Obdobně nastavit správně vstupní soubory linkeru, zde je nevýhodou nutnost všechny ručně zapsat.
Závěr
Velmi se těšíme na odezvu čtenářů a podle ní budeme pokračovat v tomto seriálu. Na úplný závěr jsme přichystali dvě ukázky části aplikace, jednou v prostředí Windows a podruhé v Linuxu.
Ukázka z Windows (česky)
Ukázka z Linuxu (anglicky)