GUI events

1 12 2007

Popełniłem kawałek kodu za który strażnicy obiektowości od razu posłaliby mnie do karceru. Mogę jednak swoją ignorancję uzasadnić w prosty sposób: Gdybym pisał to zgodnie z zasadami OOP to użytkownik w późniejszym czasie używający tego co pięknie napisałem stwierdziłby, że używa się tego dość ciężko.

Piszę oczywiście o tej nieszczęsnej obsłudze zdarzeń pochodzących z GUI. Kilka postów wcześniej rozważałem sposoby na rozwiązanie tego problemu i doszedłem do wniosku (co zresztą doradzał mi też Tarains) że najlepiej będzie stworzyć coś a’la MS’owa procedura okna.

Po zakodzeniu tego w AGE i wypróbowaniu widzę, że jest to całkiem przyjemny sposób, nie mówiąc już o tym, że nie trzeba co klatkę sprawdzać czy coś się stało z GUI.

Muszę przyznać, że jestem całkiem zadowolony ze wstępnych testów tego rozwiązania. Spróbuję jeszcze stworzyć trochę większe GUI żeby zobaczyć jak mocno rozrośnie mi się kod.


Operacje

Informacja

5 odpowiedzi

1 12 2007
Xion

Ej, przecież są dwa uznane sposoby na obsługę zdarzeń w językach obiektowych: użycie metod wirtualnych lub delegatów. Wprawdzie żaden nie jest natywnie wspierany przez C++, ale obu ich można używać.

1 12 2007
moriturius

Jeśli chodzi o rozsyłanie eventów typu “klawisz ‘A’ wciśnięty” to jest to rozwiązane za pomocą własnie metod wirtualnych.

Wyżej pisałem o łapaniu eventów od obiektów GUI. Teraz mam tak, że lecą one wszystkie do aktywnego zadania (czyli głównego obiektu zarządzającego tym co się aktualnie dzieje) i tam można je obsługiwać podobnie do tego jak się to robiło w procedurach windowsa.

1 12 2007
Xion

Czyli dostaje się wskaźnik na kontrolkę, której dotyczy zdarzenie, oraz dane zdarzenia i robi się jednego, wielkiego, perfidnie obleśnego switcha? Dziękuje, postoję :)

1 12 2007
moriturius

Tak właśnie tak się robi :P

No jakoś trzeba te zdarzenia obsługiwać, a jak są w jednym miejscu to robi sie to łatwiej.

BTW: switch nie musi byc oblesny. Mozna pisac:
case: okBtnClicked(); break;

IMO to jest rozwiazanie lepsze niz np. subklasowanie guiButton, żeby zaimplementować co robi jeden przycisk. Nie wiem jak to jest z delegatami bo tym się nie bawiłem jeszcze. Sprawdzę jak to działa i jak będzie wygodniejsze to chętnie je wykorzystam ^^

3 12 2007
Reg

Ludzie, nie bójcie się switchów. Unikanie tego za wszelką cenę to już jest obiektowy fanatyzm a’la Banda Czworga :)

Dodaj komentarz