Dziś jest piątek, 5 grudnia 2008 roku (z kalendarza...)

TUI w ncurses

Przyszło mi napisać niewielką aplikację działającą w trybie tekstowym i posiadającą tekstowy interfejs użytkownika (TUI). Pierwsza rzecz to oczywiście napisanie takowego interfejsu za pomocą biblioteki ncurses dostępnej w większości dystrybucji Linuksa. Szkielet oraz zasady działania miałem gotowe niemal od razu, jeszcze z dawnych czasów (5, 6 lat wstecz), gdy zabawiałem się dla ćwiczeń w pisanie klonu pascalowej biblioteki Turbo Vision, w której m.in. zrobione jest IDE do Turbo Pascala.

TUI ma interfejs obiektowy. Istnieje obiekt bazowy, który nie robi nic, a po którym wszystkie inne dziedziczą, co potrzeba. Z niego wywodzi się tc_view reprezentujący ogólny komponent mający pokazywać coś na ekranie. Jego dziećmi są np. tc_background (tło) czy tc_window (okno) oraz takie rzeczy, jak przyciski, pola tekstowe czy suwaki. Interfejs posiada też dwie dodatkowe klasy: klasę aplikacji (konfiguracja oraz inicjacja działania) i palety (obsługa kolorów). Do każdego komponentu interfejsu można przypisać inne, które mają się w nim zawierać. W ten sposób powstaje drzewo zależności uwzględniające takie powiązania, jak np. to, że przycisk X przywiązany jest do konkretnego okienka.

Interfejs posiada własną pętlę główną, która na bieżąco odbiera zdarzenia i kieruje je do właściwego komponentu. W przypadku zdarzeń myszki, której nawiasem mówiąc na początku nie będzie, wystarczy sprawdzać, czy aktualnie przetwarzany komponent posiada jakieś inne, w obrębie których nastąpiło kliknięcie. Jeśli tak, dalsza obsługa zdarzenia kierowana jest właśnie tam.

W przypadku zdarzeń klawiatury rozwiązań jest kilka, jednak ja wybrałem coś a'la Windows. Klawisz TAB przełącza między kontrolkami aktywnego okienka, natomiast kombinacja klawiszy, np. Alt+Tab zmienia aktywne okno.

Przy tej okazji warto nadmienić, że nauczyłęm się korzystać z libtoola służącego do łatwego tworzenia bibliotek współdzielonych. Całkiem przydatne, choć na początku sprawiało kilka kłopotów.

Powrót

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 1 | Serwer wirtualny zapewnia