xime: Właściwości okienek

tech • 259 słów • 2 minuty czytania

Ta notatka jest częścią serii xime. Zapoznaj się z pozostałymi wpisami.

Dawno nic nie pisałem, a przyrzekłem sobie kiedyś, żeby nie zaśmiecać zbytnio technicznymi wpisami tego projektowego dziennika. Choć na samym początku, jednym z celów powstania tego bloga, obok przedstawiania i tworzenia na bieżąco historii projektu, było także ukazywanie różnych ciekawych sztuczek jakie zastosowałem w kodzie lub po prostu przedstawienie problemów na jakie trafiłem, licząc że ktoś będzie w stanie pomóc ;)

Zatem unikając czysto technicznych bzdur, ostatnio udało mi się zaimplementować bardzo prosty mechanizm pozwalający na zapisywanie i odczytywanie stanu poszczególnych okienek. Głównie chodzi tutaj o pozycje i rozmiar okna oraz tym podobne właściwości, co jest czymś wręcz naturalnym w większości aplikacji…

Od jakiegoś czasu wxWidgets posiada do tego celu dedykowany mechanizm, zwie się on “Persistent Objects”. Niestety zdecydowałem się z niego nie korzystać. Z najistotniejszych powodów tej decyzji było niezbyt wygodne użycie (jak dla mnie) oraz miejsce przechowywania informacji (u nas muszą lądować w XML-u konfiguracji danego profilu).

W xime wygląda to dużo prościej. Kiedyś wspominałem trochę o wnętrznościach i o systemie budowania okien w programie. Teraz wystarczy jako jeden z parametrów szablonu podać wartość boolowską, aby odpowiednio otrzymać okienko z obsługą opisywanego tutaj mechanizmu.

Przy włączonej obsłudze, zaraz po utworzeniu obiektu okna, wołana jest metoda LoadProperties, która przywraca stan okna jaki został zapisany przez SaveProperties tuż przed jego zniszczeniem. Obie te metody są wirtualne, dzięki czemu można dostarczyć własnych implementacji odczytu i zapisu, aby osiągnąć niestandardowe właściwości w różnych okienkach i dialogach. Domyślne implementacje zapisują pozycję i rozmiar okna oraz jego stan max/minimalizacji.

Proste i łatwe…

BTW Nie tak dawno minęła 1 rocznica od powstania projektu ;)

Komentarze (0)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/