bool GUIDropButton::_mouseEvent(const GUIMouseEvent& ev)
	{
		bool processed = GUIButtonBase::_mouseEvent(ev);

		if(ev.getType() == GUIMouseEventType::MouseDragAndDropDragged)
		{
			if (!_isDisabled())
			{
				if (DragAndDropManager::instance().isDragInProgress())
				{
					if (DragAndDropManager::instance().getDragTypeId() == mDragType)
					{
						if (!_isOn())
							_setOn(true);
					}
					else
					{
						if (_isOn())
							_setOn(false);
					}
				}
				else
				{
					if (_isOn())
						_setOn(false);
				}
			}

			processed = true;
		}
		else if(ev.getType() == GUIMouseEventType::MouseDragAndDropDropped)
		{
			if (!_isDisabled())
			{
				if (_isOn())
					_setOn(false);

				if (DragAndDropManager::instance().isDragInProgress() && DragAndDropManager::instance().getDragTypeId() == mDragType)
				{
					if (!onDataDropped.empty())
						onDataDropped(DragAndDropManager::instance().getDragData());
				}
			}

			processed = true;
		}
		else if (ev.getType() == GUIMouseEventType::MouseDragAndDropLeft)
		{
			if (!_isDisabled())
			{
				if (_isOn())
					_setOn(false);
			}

			processed = true;
		}

		return processed;
	}
	bool GUIButtonBase::_mouseEvent(const GUIMouseEvent& ev)
	{
		if(ev.getType() == GUIMouseEventType::MouseOver)
		{
			if (!_isDisabled())
			{
				_setState(_isOn() ? GUIElementState::HoverOn : GUIElementState::Hover);
				onHover();
			}

			return mBlockPointerEvents;
		}
		else if(ev.getType() == GUIMouseEventType::MouseOut)
		{
			if (!_isDisabled())
			{
				_setState(_isOn() ? GUIElementState::NormalOn : GUIElementState::Normal);
				onOut();
			}

			return mBlockPointerEvents;
		}
		else if(ev.getType() == GUIMouseEventType::MouseDown)
		{
			if (!_isDisabled())
				_setState(_isOn() ? GUIElementState::ActiveOn : GUIElementState::Active);

			return mBlockPointerEvents;
		}
		else if(ev.getType() == GUIMouseEventType::MouseUp)
		{
			if (!_isDisabled())
			{
				_setState(_isOn() ? GUIElementState::HoverOn : GUIElementState::Hover);
				onClick();
			}

			return mBlockPointerEvents;
		}
		else if (ev.getType() == GUIMouseEventType::MouseDoubleClick)
		{
			if (!_isDisabled())
				onDoubleClick();

			return mBlockPointerEvents;
		}

		return false;
	}
 void invoke()
 {
    if (_isOn())
       _invoke();
 }
 /// \name Public interface
 ///@{
 operator bool()
 {
    return _isOn();
 }