Lista wiadomości – problemy i rozwiązania

Miałem szczerą chęć wypuścić kolejną oficjalną wersję gBlipa jeszcze w tym tygodniu, czyli przed moim kolejnym wyjazdem do UK. Niestety, napotkałem na problem wymagający dość dużo pracy programistycznej. Mowa o liście wiadomości, a konkretnie o możliwości klikania na linki w tychże wiadomościach (czy np. na ksywki użytkowników).

Problem

W obecnej wersji gBlipa lista wiadomości funkcjonuje jako widżet gtk.TreeView ze źródłem danych gtk.ListStore. Jest to bardzo wygodna kontrolka, ale (o ile się nie mylę) niewystarczająca dla gBlipa. Miałem cichą nadzieję, że jest to komponent mocno konfigurowalny, ale akurat wspomnianych wymagań nie spełnia. Okazuje się, że elementy znajdujące się w komórkach listy nie mają obsługi klikania. Po prostu są głuche na zdarzenia myszy, czy ogólnie na jakiekolwiek inne zdarzenia. Elementy te, zwane gtk.CellRendererXxxx (gdzie Xxxx oznacza typ wyświetlanej zawartości) potrafią tylko rysować zawartość. Przynajmniej tak to wygląda na dzisiejszy stan mojej wiedzy. Nie widziałem też innej aplikacji, która umiałaby jakoś sobie z tym ograniczeniem poradzić. Być może można napisać własny CellRenderer z potrzebną funkcjonalnością, ale ja nie potrafię tego zrobić. Z tego też powodu nadeszła dość poważna decyzja – trzeba przepisać listę wiadomości od nowa.

Proponowane rozwiązanie

Postanowiłem zrezygnować całkowicie z używania TreeView na rzecz mieszaniny innych widżetów. Myślę tutaj o gtk.Table z dwoma kolumnami na (1) awatar + (2) wiadomość i n-wierszami reprezentującymi kolejne wiadomości. Awatar będzie wyświetlany przez zwykły gtk.Image, natomiast samą wiadomość planuję wyświetlać za pomocą kontrolki gtk.TextView. Obawiam się jednej rzeczy związanej z tym rozwiązaniem – że będzie dość mało wydajne i pamięciożerne. Widżet gtk.TextView jest dość “ciężkim” narzędziem, więc może dość mocno obciążyć program. Czas oczywiście zweryfikuje moją tezę… Póki co nie mam innego pomysłu.

Konsekwencje

Jak pisałem na początku, chciałem wypuścić wersję 0.1.4 jeszcze w tym tygodniu. Z powodu dość drastycznych zmian w kodzie gBlipa postanowiłem wypuścić wersję 0.1.4 bez wsparcia dla klikania linków. W ten sposób każdy będzie mógł korzystać z tej w miarę stabilnej wersji, kiedy ja będę walczył z napisaniem od nowa listy wiadomości. Zatem możliwość klikania linków zostaje oficjalnie przesunięta do wersji 0.1.5, kiedy będzie napisany nowy komponent listy wiadomości. Jutro zostanie wypuszczona nieco zubożona (względem planowanej) wersja 0.1.4 programu gBlip, a prace nad kolejną wersją ruszą już w poniedziałek (jeśli dam radę).

PS. Jeśli ktoś z Was ma inny pomysł jak rozwiązać powyższy problem – walcie śmiało w komentarzach, na blipie czy po prostu emailem.

Skomentuj