Exemple #1
0
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;
}
Exemple #2
0
 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;
}
Exemple #4
0
 inline bool CaughtClick() const
 {
     return MouseIsOver( gInput->LastClick() );
 }