Opublikowano: 16-03-2017



Nie każda aplikacja musi posiadać graficzny interfejs, ale obsługa trybu tekstowego nie wszystkich wprawia w pozytywny nastrój.

Aplikacja ma być przede wszystkim użyteczna, jej wygląd jest na drugim miejscu. Podczas wyboru biblioteki odpowiedzialnej za "okienka" brałem pod uwagę jej rozmiar, szybkość i prostotę obsługi. W końcu nie potrzebuję całego QT czy GTK+, aby stworzyć proste okno.

FLTK, czyli Fast Light Toolkit spełnia wszystkie te wymagania. To szybka, mała i dość łatwa w obsłudze (z punktu widzenia programisty) biblioteka. Nawet jej kompilacja ze źródeł nie jest skomplikowana. Dodatkowo może zostać zlinkowana statycznie razem z programem o zamkniętym kodzie źródłowym (jest rozprowadzana na zasadach licencji GNU GPL 2 z wyjątkami zezwalającymi na takie użycie).

Biblioteka ta dostarcza kilka "skórek", jednak programy napisane z jej użyciem nie są zbyt piękne. Oto przykładowe okno aplikacji zawierającej pasek menu:

/images/logviewer-fltk-menu.png

A tutaj kod źródłowy potrzebny do utworzenia powyższego okna (całość dostępna na GitHubie):

W linii 2 tworzone jest okno o rozmiarze 400x300 pikseli. Wywołania funkcji begin() oraz end() definiują miejsce, w którym będziemy zezwalać na dodawanie widgetów (kontrolek) do naszego okna. Z tego powodu nie musimy wywoływać żadnej metody w stylu add(fMenuBar), aby dodać menu do okna - zostanie to zrobione za nas w momencie utworzenia obiektu (linia 14).

Szczególną uwagę przykuwają zera pojawiające się w statycznej liście elementów menu (linia 9 oraz 11). Oznaczają one odpowiednio koniec podmenu oraz koniec menu, a czym są w praktyce? Zapis ten oznacza, że wszystkie pola struktury zostaną ustawione na wartość 0, stąd FLTK będzie wiedziało, że ma zakończyć konstrukcję aktualnego podmenu czy menu. Lista ta została oznaczona jako statyczna (musi ona istnieć przez cały czas działania programu), gdyż metoda menu z linii 15 nie kopiuje jej dla siebie.

Same pola struktury są dość jasne i nie wymagają zbędnego komentarza. Pole callback_ to wskaźnik na funkcję, która zostanie wywołana po wybraniu elementu menu. Natomiast user_data_ to wskaźnik na dane, które chcemy do tej funkcji przekazać. W przykładzie (linia 8) przekazujemy wskaźnik na daną klasę, dzięki temu funkcja może zamknąć otwarte okno.

Tak właśnie wygląda pierwsze okno LogViewera jakie powstało. Poniżej załączam kilka zrzutów ekranu pochodzących z witryny FLTK.

A jaka jest Twoja ulubiona biblioteka do tworzenia GUI? Podziel się swoim zdaniem w komentarzu.

/images/fltk/fltk-widgets-std.png/images/fltk/fltk-widgets-gtk.png/images/fltk/fltk-widgets-plastic.png


Comments powered by Disqus