/** * @brief PWidget::sendEvent zajištuje jenom rekurzivní volání subwidgetů * @param key * @param touch * @return true pokud se našel widget kterej to zpracoval */ bool PWidget::sendEvent(PKeyEvent *key, PTouchEvent *touch) { //poprvé přinde od screenu a musi to probublat dál //přepočitat souřadnice na relativní když se to bude posilat dál //prvni projet děti, když budou false pak teprve volat na sebe if (!visible() || !enabled()) return false; PWidget * t = child; while(t) { bool ok; ok = t->sendEvent(key,touch); if (ok) return true; t = t->next; } bool ok = eventForMe(key,touch); if (ok) processEvent(key,touch); return ok; }
int ECandle::handleEvent( Event& tmpEvent ) { if ( eventForMe( tmpEvent ) ) { if ( this->isEnabled ) { #ifdef DEBUG_ECANDLE Serial.println("ECandle::handleEvent(): Its my event!"); #endif switch ( this->currentState ) { case csOff: //свет полностью включен if ( tmpEvent.eventType == evTurnOn ) { setState(csFadeIn); }; return getID(); break; case csFadeIn: if ( tmpEvent.eventType == evTurnOff ) { setState( csFadeOut ); }; if ( tmpEvent.eventType == evTurnOn ) { setState( csOn ); }; return getID(); break; case csOn: if ( tmpEvent.eventType == evTurnOff ) { setState( csFadeOut ); }; return getID(); break; case csFadeOut: if ( tmpEvent.eventType == evTurnOn ) { setState( csFadeIn ); }; if ( tmpEvent.eventType == evTurnOff ) { setState( csOff ); }; return getID(); break; // case csFlickering: // ??????????????????? default: break; } } return EOutputDevice::handleEvent( tmpEvent ); } return 0; };
int EOutputDevice::handleEvent( Event& tmpEvent ) { if ( eventForMe( tmpEvent ) ) { if ( this->isEnabled ) { switch ( tmpEvent.eventType ) { case evTurnOn: on(); return this->getID(); break; case evTurnOff: off(); return this->getID(); break; default: break; } } return EDevice::handleEvent( tmpEvent ); } return 0; };