int RadioButton::HandleMessage( gui_message *kMsg ) { if ( !kMsg ) { Logger::WriteLine( "NULL msg in RadioButton::HandleMessage(gui_message *)", __FILE__, __LINE__, LEVEL_ERROR ); return false; } switch ( kMsg->type ) { case MESSAGE_MOUSEDOWN: if ( MouseIsOver( kMsg->mouseevent.x, kMsg->mouseevent.y ) ) { printf( "%d %d %d\n", x, y, IsChecked() ); if ( !IsChecked() ) { // Now uncheck all other radios in group: ControlList_t *list = NULL; ControlList_t::iterator iter; if ( parent == NULL ) { list = pUOGUI.GetControlList(); } else { list = parent->GetControlList(); } for ( iter = list->begin(); iter != list->end(); iter++ ) { if ( dynamic_cast<RadioButton *>( iter->second ) ) { RadioButton *kRadio = (RadioButton *)iter->second; if ( kRadio->GetGroup() == GetGroup() ) { kRadio->SetChecked( false ); } } } // I know I am repeating this instruction but it's the fastest way! SetChecked( true ); return true; } } break; default: return Checkbox::HandleMessage( kMsg ); } return false; }
inline bool MouseOver() const { return MouseIsOver( gInput->CurrentMouse() ); }
int Control::HandleMessage (gui_message * msg) { gui_message new_message; if (!msg) { Logger::WriteLine ("NULL msg in Control::HandleMessage(gui_message *)", __FILE__, __LINE__, LEVEL_ERROR); return (false); } switch (msg->type) { case MESSAGE_MOUSEDOWN: if (MouseIsOver (msg->mouseevent.x, msg->mouseevent.y)) { stack.Push (CreateCallbackMessage (CALLBACK_ONMOUSEDOWN)); if ((msg->mouseevent.button == SDL_BUTTON_LEFT) && (flags & GUMPFLAG_FOCUSABLE) && (!focus)) { new_message.type = MESSAGE_SETFOCUS; new_message.windowaction.controlid = id; stack.Push (new_message); new_message.type = MESSAGE_BRINGTOFRONT; new_message.windowaction.controlid = id; stack.Push (new_message); return true; } if ((msg->mouseevent.button == SDL_BUTTON_RIGHT) && (flags & GUMPFLAG_CLOSABLE)) { new_message.type = MESSAGE_CLOSEGUMP; new_message.windowaction.controlid = id; stack.Push (new_message); return true; } } else if (focus) { new_message.type = MESSAGE_RELEASEFOCUS; new_message.windowaction.controlid = id; stack.Push (new_message); } break; case MESSAGE_MOUSEMOTION: if ((focus) && (msg->mousemotionevent.button) && (flags & GUMPFLAG_MOVABLE)) { x += msg->mousemotionevent.relx; y += msg->mousemotionevent.rely; return true; } break; case MESSAGE_MOUSEUP: if (MouseIsOver (msg->mouseevent.x, msg->mouseevent.y)) { stack.Push (CreateCallbackMessage (CALLBACK_ONMOUSEUP)); return true; } break; } return false; }
inline bool CaughtClick() const { return MouseIsOver( gInput->LastClick() ); }