GUI events
grudzień 1, 2007 — morituriusPopeł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.
grudzień 1, 2007 @ 1:56 pm
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ć.
grudzień 1, 2007 @ 2:18 pm
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.
grudzień 1, 2007 @ 2:42 pm
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ę
grudzień 1, 2007 @ 4:04 pm
Tak właśnie tak się robi
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 ^^
grudzień 3, 2007 @ 12:33 pm
Ludzie, nie bójcie się switchów. Unikanie tego za wszelką cenę to już jest obiektowy fanatyzm a’la Banda Czworga