Każdy, kto miał styczność z tworzeniem oprogramowania zna zapewne zasadę DRY (ang. Don’t Repeat Yourself). W zabawny sposób opisuję ona pewną regułę, mówiącą, iż powtarzające się fragmenty kodu, należy wyodrębniać jako funkcje. Innymi słowy – pożądane jest tworzenie aplikacji z pewnych elementarnych “klocków”. Tak jak biblioteka graficzna stanowi odzwierciedlenie tej reguły w świecie grafiki, tak idea widgetów stanowi jej przełożenie na język graficznego interfejsu użytkownika (GUI). Widgety są więc gotowymi “klockami” z których możemy poskładać interfejs, bez konieczności operowania z poziomu aplikacji jedynie na prymitywach graficznych.
Alternatywą do widgetów, często pojawiającą się w świecie embedded jest tzw. metoda owner draw. Polega ona na przeniesieniu odpowiedzialności za tworzenie zawartości na właściciela, czyli daną aplikację lub okno. Inaczej mówiąc, każdy komponent musi we własnym zakresie zadbać o narysowanie swojego interfejsu na wyświetlaczu. Każde okno również będzie posiadało własną funkcję rysującą – powitanie, menu, okno ustawień, itd.
Zadajmy więc sobie pytanie: która z metod jest bardziej dopasowana do naszych potrzeb?
Owner-draw:
Zalety:
- dowolność w tworzeniu zawartości okna,
- szybkość działania,
- wymaga jedynie biblioteki graficznej,
Wady:
- wielokrotne powielanie niezwykle podobnych fragmentów kody, np. tytuł okna, ikony, komunikat, menu,
- modyfikacja wyglądu czy struktury wymaga zmiany kodu źródłowego,
- mieszanie kodu kontrolnego z kodem interfejsu graficznego,
Widget:
Zalety:
- odseparowanie kodu interfejsu graficznego,
- możliwość delegowania rysowania GUI do innego komponentu,
- łatwa modyfikacja wyglądu okna,
- spójny wygląd interfejsu między różnymi oknami/widokami,
Wady:
- stworzenie biblioteki widgetów stanowi ogromną inwestycję czasu,
- ograniczona liczba dostępnych elementów (pole tekstowe, grafika),
- większe zużycie CPU,
Wnioski: metoda owner-draw jest odpowiednia dla prostszych interfejsów GUI, posiadających dwa-trzy różne widoki i niewymagających większej elastyczności. Widgety sprawdzą się z kolei w rozbudowanej aplikacji, gdzie łatwość tworzenia ogromnej ilości okien zrekompensuje czas poświęcony na ich stworzenie. Nie bez znaczenia jest także wydajność zastosowanego procesora – widgety będą stawiać tu znacznie większe wymagania.
W naszym przypadku widgety wydają się być znacznie bardziej optymalnym rozwiązaniem, ze względu na dużą ilość widoków czy okien jaka musi powstać. Elastyczność i łatwość projektowania interfejsu graficznego jest warta dodatkowej inwestycji czasu oraz nieco większego zużycia czasu CPU.