Delegaty z GUI

Tak jak mi poradził Xion poszukałem troszkę o delegatach. Wcześniej nie chciało mi się tego uczyć bo uznawałem to za czarną magię, ale jak się okazało – nie taki diabeł straszny… 🙂

Zacząłem od zrozumienia jak to w ogóle działa. Później poszukałem informacji w jaki sposób można to zakodzić w C++. Napisałem sobie najpierw prosty program realizujący coś takiego, a potem malutką klasę która mi opakowuje to wszystko (raptem 1 metoda i operator() ). Udało mi się to wszystko nakłonić do działania.

Teraz przyszło najtrudniejsze – wcisnąć to do AGE.

Tutaj już trochę bardziej musiałem się wysilić i koncepcji było kilka. Oczywiście najprostsza, najbardziej oczywista i najwygodniejsza metoda przyszła mi do głowy na sam koniec. Ostatecznie jedyne co trzeba zrobić to napisać linijkę:

CONNECT( button, CM_CLICKED, task, gameTask::buttonClicked );

Jest to makro, które powstało – jak to makra mają w zwyczaju – dla wygody 😉 Oczywiście warto też napisać metodę buttonClicked() ^^

Dodatkową zaletą wykorzystania delegatów jest to, że dla zdarzeń dla, których nie określę żadnej metody nie są wywoływane żadne funkcje. W poprzedniej metodzie – a’la procedura okna – funkcja była wywoływana nawet dla nieobsługiwanych zdarzeń, a to zawsze jakaś strata czasu. Szczególnie dla zdarzenia typu CM_MOVE ^^

Tak więc chciałem podziękować Xionowi za jego konstruktywną krytykę mojego rozwiązania i podsunięcie czegoś bardziej cywilizowanego 😉

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s