je komplexní knihovna určená pro vývoj multiplatformních aplikací v C++ nebo Pythonu. Neomezuje se jenom na uživatelské rozhraní, ale řeší i další na platformě závislé záležitosti, jako například sokety, vlákna a podobně (k podrobnějšímu popisu toho, co wxWindows umí, se ještě dostanu). wxWindows je šířena pod licencí LGPL, doplněnou o dodatek umožňující linkovat zkompilovanou knihovnu bez omezení, což je pro komerční vývojáře významný faktor. Před týdnem konečně, po více než roce, vyšla nová stabilní verze.
Vývojáři wxWindows se snažili, aby aplikace napsaná pomocí této knihovny vypadala k nerozeznání od ostatních aplikací na dané platformě (jinými slovy, zachovávala look and feel). To je velký rozdíl oproti například Javě nebo knihovnám Qt, FLTK nebo GTK+ – ty všechny mají jeden vzhled a přirozeně vypadají na jediné platformě (pokud vůbec :). Naproti tomu wxWindows je vybudována nad nativní knihovnou – Win32 API v případě Windows a GTK+ nebo Motif na Unixech. Ostatně, podívejte se sami:
Hlavní podporované platformy jsou samozřejmě Unixy a Windows, trochu v závěsu je verze pro MacOS (v tom smyslu, že je odvozena ze starších zdrojových kódů a možná nepodporuje úplně všechny funkce – můj osobní odhad je, že je tak na úrovni předposlední betaverze 2.1.15). Z Unixů podporuje prakticky všechny běžně dostupné, včetně např. FreeBSD nebo HP-UX. Stejně tak široká je podpora kompilátorů – můžete použít GCC nebo komerční kompilátor dodávaný se systémem, pod Windows pak libovolný z rozšířených kompilátorů (velmi dobře jsou podporovány MSVC, Mingw/GCC, Borland C++).
Styl programování ve wxWindows připomíná MFC nebo borlandí OWL blahé paměti. Narozdíl od MFC je však k dispozici rozsáhlá (přes 1000 stránek) a hlavně vyčerpávající dokumentace v HTML a dalších formátech a samozřejmě i e-mailová konference pro uživatele, kde vám většinu dotazů vývojáři zodpoví a poradí. A ta cena taky není k zahození :)
Co všechno wxWindows umí? Samozřejmě všechny běžné prvky GUI, včetně složitějších věcí jako komfortní logování chyb, „Tipy dne“, tabulky a la spreadsheet. Důležitou součástí jsou tzv. sizery (pokud se nemýlím, tak používané i v Qt a GTK+), které umožňují vytvářet dialogová okna bez toho, že byste zadávali souřadnice ovládacích prvků – místo toho popíšete logickou strukturu dialogu tím, že vložíte kontrolky do jakýchsi boxů a o zbytek se postará knihovna. Výhodou je, že takto vytvořený dialog bude vypadat hezky na všech platformách a programátor se nemusí starat o to, jak je který prvek velký na jaké platformě… K dalším užitečným funkcím wxWindows patří schopnost číst a zapisovat nejběžnější grafické formáty (BMP, PNG, JPEG, GIF, PCX, TIFF, XPM), drag and drop, tisk nebo běžně používané dialogy jako např. otevírání souborů. Oproti předchozí verzi 2.0.1 se výrazně zlepšila podpora fontů a různých kódování, takže už není problém s psaním česky mluvících (ehm…) programů. Abych nezapomněl, nová verze obsahuje také jednoduchý HTML widget (viz. screenshoty) – Mozilla to sice není, ale na zobrazení nápovědy je dávno dobrý.
Jak už jsem se zmínil, wxWindows zdaleka není jenom GUI knihovna, ale „cross-platform toolkit“, který se snaží poskytnout vše, co může programátor multiplatformní aplikace potřebovat. Najdete zde už zmíněné sokety včetně implementace FTP a HTTP protokolu, meziprocesovou komunikaci, spouštění procesů, vlákna, načítání sdílených knihoven či ukládání a načítání konfigurace (registry pod Windows, dotfiles pod Unixem). wxWindows plně podporují internacionalizaci pomocí vlastní implementace gettextu a navíc poskytují třídy na konverzi mezi různými znakovými sadami. Co rozhodně stojí za zmínku, je kvalitní podpora nejrůznějších SQL databází – opět máte k dispozici jednotné API na všech platformách.
Samozřejmě, nic není dokonalé (a wxWindows je přece jenom software :) a tak se i tady najde několik nevýhod. wxWindows je poměrně velká knihovna (binárka má skoro 6 MB, ale je možné při kompilaci vypnout nepoužívané funkce), HTML widget je dobrý jen pro velmi jednoduché použití (jako jeho autor o tom vím svoje :). Součástí wxWindows není použitelný editor dialogů, takže je nutné dialogy vytvářet psaním kódu. (Naštěstí existuje komerční návrhář dialogů wxDesigner, jehož autor se nechal slyšet, že OpenSource programátorům ho poskytne zdarma.)
Navíc z principu věci nemůže poskytovat všechny funkce dostupné v nativní knihovně, ale jenom jejich podmnožinu. Přesto si myslím, že je to v současnosti nejlepší volba. To se možná změní s příchodem Kylixu, ale moc tomu nevěřím – přeci jenom, bude to komerční prostředí vázané na jednu firmu a jeden kompilátor a navíc omezené pouze na Linux a Windows…