コード例 #1
0
ファイル: environment.cpp プロジェクト: binakot/caesaria-game
void Ui::deleteLater( Widget* ptrElement )
{
  try
  {
    if( !ptrElement || !isMyChild( ptrElement ) )
    {
      return;
    }

    if( ptrElement == getFocus() || ptrElement->isMyChild( getFocus() ) )
    {
      _d->focusedElement = WidgetPtr();
    }

    if( _d->hovered.current.object() == ptrElement || ptrElement->isMyChild( _d->hovered.current.object() ) )
    {
      _d->hovered.current = WidgetPtr();
      _d->hovered.noSubelement = WidgetPtr();
    }

    for( auto widget : _d->deletionQueue )
    {
      if( widget == ptrElement )
      {
        return;
      }
    }

    _d->deletionQueue.push_back( ptrElement );
  }
  catch(...)
  {}
}
コード例 #2
0
ファイル: HelperManager.cpp プロジェクト: gthgame/gth
void CHelperManager::ProcessMessage_Recall_Req_fromHelper(playerCharacter_t * pHelper)
{
	if(TRUE == IsBadWritePtr(pHelper,sizeof(playerCharacter_t)) 
		|| TRUE == IsBadReadPtr(pHelper,sizeof(playerCharacter_t)))
	{
		SetLastError(ERROR_INVALID_PARAMETER);
		ShowLogInfo("ProcessMessage_Recall_Req_fromHelper(playerCharacter_t * pHelper)");
		return;
	}

	char cTakerName[NAMESTRING+1];
	strncpy(cTakerName,MSG_ReadString(),NAMESTRING);
	cTakerName[NAMESTRING]=NULL;
	
	if(FALSE == isMyChild(pHelper,cTakerName)) return;

	for(int idx = 0; idx < pHelper->tHelper.List.count; idx++)
	{
		if( NULL == strcmp(cTakerName, pHelper->tHelper.List.Member[idx].name)) 
		{
			if( TRUE == pHelper->tHelper.List.Member[idx].bIsMatchHELPERandTACKER )
			{
				return;
			}
		}
	}

	SendMessage_RequestSummons(pHelper,cTakerName);
    	
}
コード例 #3
0
//! called if an event happened.
bool CGUIModalScreen::OnEvent(const SEvent& event)
{
    if (!isEnabled() || !isVisible() )
        return IGUIElement::OnEvent(event);

    switch(event.EventType)
	{
	case EET_GUI_EVENT:
		switch(event.GUIEvent.EventType)
		{
		case EGET_ELEMENT_FOCUSED:
			if ( !canTakeFocus(event.GUIEvent.Caller))
			{
				if ( !Children.empty() )
					Environment->setFocus(*(Children.begin()));
				else
					Environment->setFocus(this);
			}
			IGUIElement::OnEvent(event);
			return false;
		case EGET_ELEMENT_FOCUS_LOST:
			if ( !canTakeFocus(event.GUIEvent.Element))
            {
            	if ( isMyChild(event.GUIEvent.Caller) )
				{
					if ( !Children.empty() )
						Environment->setFocus(*(Children.begin()));
					else
						Environment->setFocus(this);
				}
				else
				{
					MouseDownTime = os::Timer::getTime();
				}
				return true;
			}
			else
			{
				return IGUIElement::OnEvent(event);
			}
		case EGET_ELEMENT_CLOSED:
			// do not interfere with children being removed
			return IGUIElement::OnEvent(event);
		default:
			break;
		}
		break;
	case EET_MOUSE_INPUT_EVENT:
		if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
		{
			MouseDownTime = os::Timer::getTime();
        }
	default:
		break;
	}

	IGUIElement::OnEvent(event);	// anyone knows why events are passed on here? Causes p.e. problems when this is child of a CGUIWindow.

	return true; // absorb everything else
}
コード例 #4
0
ファイル: CGUIModalScreen.cpp プロジェクト: codetiger/IrrNacl
bool CGUIModalScreen::canTakeFocus(IGUIElement* target) const
{
    return (target && ((const IGUIElement*)target == this // this element can take it
                        || isMyChild(target)    // own children also
                        || (target->getType() == EGUIET_MODAL_SCREEN )	// other modals also fine (is now on top or explicitely requested)
                        || (target->getParent() && target->getParent()->getType() == EGUIET_MODAL_SCREEN )))   // children of other modals will do
            ;
}
コード例 #5
0
ファイル: CGUIContextMenu.cpp プロジェクト: John-He-928/krkrz
//! called if an event happened.
bool CGUIContextMenu::OnEvent(const SEvent& event)
{
	if (!IsEnabled)
		return Parent ? Parent->OnEvent(event) : false;

	switch(event.EventType)
	{
	case EET_GUI_EVENT:
		switch(event.GUIEvent.EventType)
		{
		case EGET_ELEMENT_FOCUS_LOST:
			if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element) && AllowFocus)
			{
				// set event parent of submenus
				setEventParent(Parent);
				remove();
				return false;
			}
			break;
		case EGET_ELEMENT_FOCUSED:
			if (event.GUIEvent.Caller == this && !AllowFocus)
			{
				return true;
			}
			break;
		default:
 			break;
		}
		break;
	case EET_MOUSE_INPUT_EVENT:
		switch(event.MouseInput.Event)
		{
		case EMIE_LMOUSE_LEFT_UP:
			{
				// menu might be removed if it loses focus in sendClick, so grab a reference
				grab();
				const u32 t = sendClick(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y));
				if ((t==0 || t==1) && Environment->hasFocus(this))
					Environment->removeFocus(this);
				drop();
			}
			return true;
		case EMIE_LMOUSE_PRESSED_DOWN:
			return true;
		case EMIE_MOUSE_MOVED:
			if (Environment->hasFocus(this))
				highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), true);
			return true;
		default:
 			break;
		}
		break;
	default:
		break;
	}

	return Parent ? Parent->OnEvent(event) : false;
}
コード例 #6
0
ファイル: HelperManager.cpp プロジェクト: gthgame/gth
void CHelperManager::ProcessMessage_Helper_GivePoint_Req_fromHelper(playerCharacter_t* pTaker)
{
	if(TRUE == IsBadWritePtr(pTaker,sizeof(playerCharacter_t)) 
		|| TRUE == IsBadReadPtr(pTaker,sizeof(playerCharacter_t)))
	{
		SetLastError(ERROR_INVALID_PARAMETER);
		ShowLogInfo("ProcessMessage_Helper_GivePointtoHelperUser(playerCharacter_t * pTaker)");
		return;
	}
    
	int point=MSG_ReadLong();
	char cHelperName[NAMESTRING+1];
	strncpy(cHelperName,MSG_ReadString(),NAMESTRING);
	cHelperName[NAMESTRING]=NULL;
	
	
	int idx = GTH_FindPCByName( cHelperName );
	
	playerCharacter_t* pHelper=gcpTools->GetPlayerRecordPointer(idx);
	if(NULL == pHelper) return;
	
	if(FALSE == isMyChild(pTaker,pHelper->name)) return;

	if(HELPER_STANDARD_LEVEL > pHelper->level) return;
	
	if(0 > point) return;

	
	if( point > pTaker->tHelper.tPoint.iMyPoint )
	{
		
		return;
	}
	
	if( HELPER_STANDARD_LEVEL <= pTaker->level ) 
	{
		
		return;
	}

	
	pTaker->tHelper.tPoint.iMyPoint=pTaker->tHelper.tPoint.iMyPoint-point;
	pHelper->tHelper.tPoint.iHelpPoint=pHelper->tHelper.tPoint.iHelpPoint+point;
	pHelper->tHelper.tPoint.iTotalHelpPoint=pHelper->tHelper.tPoint.iTotalHelpPoint+point;

	SendMessage_Mypoint_toTaker(pTaker,pTaker->name,pHelper->name,point);

	ShowLogInfo(
		"pTaker MYPOINT: pTaker->NAME: %s, POINT: %d",pTaker->name,pTaker->tHelper.tPoint.iMyPoint);
	
	SendMessage_Helppoint_toHelper(pHelper,pTaker->name,point);

	ShowLogInfo("TARGETpPlayer HELPPOINT: TARGETpPlayer->NAME: %s, HELPPOINT: %d"
		,pHelper->name,pHelper->tHelper.tPoint.iHelpPoint);

}
コード例 #7
0
ファイル: CGUIModalScreen.cpp プロジェクト: John-He-928/krkrz
//! called if an event happened.
bool CGUIModalScreen::OnEvent(const SEvent& event)
{
    switch(event.EventType)
	{
	case EET_GUI_EVENT:
		switch(event.GUIEvent.EventType)
		{
		case EGET_ELEMENT_FOCUSED:
			// only children are allowed the focus
			if (event.GUIEvent.Caller != this && !isMyChild(event.GUIEvent.Caller))
				Environment->setFocus(this);
			return false;
		case EGET_ELEMENT_FOCUS_LOST:
			// only children are allowed the focus
			if (!(isMyChild(event.GUIEvent.Element) || event.GUIEvent.Element == this))
			{
				MouseDownTime = os::Timer::getTime();
				return true;
			}
			else
			{
				return IGUIElement::OnEvent(event);
			}
		case EGET_ELEMENT_CLOSED:
			// do not interfere with children being removed
			return IGUIElement::OnEvent(event);
		default:
			break;
		}
		break;
	case EET_MOUSE_INPUT_EVENT:
		if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
		{
			MouseDownTime = os::Timer::getTime();
        }
	default:
		break;
	}
	
	IGUIElement::OnEvent(event);

	return true; // absorb everything else
}
コード例 #8
0
ファイル: CGUIComboBox.cpp プロジェクト: vgck/irrnacht
//! draws the element and its children
void CGUIComboBox::draw()
{
	if (!IsVisible)
		return;

	IGUISkin* skin = Environment->getSkin();

	// font changed while the listbox is open?
	if ( ActiveFont != skin->getFont() && ListBox )
	{
		// close and re-open to use new font-size
		openCloseMenu();
		openCloseMenu();
	}


	IGUIElement *currentFocus = Environment->getFocus();
	if (currentFocus != LastFocus)
	{
		HasFocus = currentFocus == this || isMyChild(currentFocus);
		LastFocus = currentFocus;
	}

	// set colors each time as skin-colors can be changed
	SelectedText->setBackgroundColor(skin->getColor(EGDC_HIGH_LIGHT));
	if(isEnabled())
	{
		SelectedText->setDrawBackground(HasFocus);
		SelectedText->setOverrideColor(skin->getColor(HasFocus ? EGDC_HIGH_LIGHT_TEXT : EGDC_BUTTON_TEXT));
	}
	else
	{
		SelectedText->setDrawBackground(false);
		SelectedText->setOverrideColor(skin->getColor(EGDC_GRAY_TEXT));
	}
	ListButton->setSprite(EGBS_BUTTON_UP, skin->getIcon(EGDI_CURSOR_DOWN), skin->getColor(isEnabled() ? EGDC_WINDOW_SYMBOL : EGDC_GRAY_WINDOW_SYMBOL));
	ListButton->setSprite(EGBS_BUTTON_DOWN, skin->getIcon(EGDI_CURSOR_DOWN), skin->getColor(isEnabled() ? EGDC_WINDOW_SYMBOL : EGDC_GRAY_WINDOW_SYMBOL));


	core::rect<s32> frameRect(AbsoluteRect);

	// draw the border

	skin->draw3DSunkenPane(this, skin->getColor(EGDC_3D_HIGH_LIGHT),
		true, true, frameRect, &AbsoluteClippingRect);

	// draw children
	IGUIElement::draw();
}
コード例 #9
0
ファイル: CGUIComboBox.cpp プロジェクト: huytd/fosengine
//! draws the element and its children
void CGUIComboBox::draw()
{
	if (!IsVisible)
		return;

	IGUISkin* skin = Environment->getSkin();
	IGUIElement *currentFocus = Environment->getFocus();
	if (currentFocus != LastFocus)
	{
		HasFocus = currentFocus == this || isMyChild(currentFocus);
		LastFocus = currentFocus;
	}

	core::rect<s32> frameRect(AbsoluteRect);

	// draw the border

	skin->draw3DSunkenPane(this, skin->getColor(EGDC_3D_HIGH_LIGHT),
		true, true, frameRect, &AbsoluteClippingRect);

	// Draw text

	if (Selected != -1)
	{
		frameRect = AbsoluteRect;
		frameRect.UpperLeftCorner.X += 2;
		frameRect.UpperLeftCorner.Y += 2;
		frameRect.LowerRightCorner.X -= ListButton->getAbsolutePosition().getWidth() + 2;
		frameRect.LowerRightCorner.Y -= 2;
		if (HasFocus)
			skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), frameRect, &AbsoluteClippingRect);

		IGUIFont* font = skin->getFont();
		if (font)
			font->draw(Items[Selected].c_str(), frameRect, 
				skin->getColor(HasFocus ? EGDC_HIGH_LIGHT_TEXT : EGDC_BUTTON_TEXT),
				false, true, &AbsoluteClippingRect);
	}

	// draw buttons
	IGUIElement::draw();
}
コード例 #10
0
ファイル: CGUIComboBox.cpp プロジェクト: jivibounty/irrlicht
//! draws the element and its children
void CGUIComboBox::draw()
{
	if (!IsVisible)
		return;

	IGUISkin* skin = Environment->getSkin();
	IGUIElement *currentFocus = Environment->getFocus();
	if (currentFocus != LastFocus)
	{
		HasFocus = currentFocus == this || isMyChild(currentFocus);
		LastFocus = currentFocus;

		SelectedText->setBackgroundColor(skin->getColor(EGDC_HIGH_LIGHT));

		if(isEnabled())
		{
			SelectedText->setDrawBackground(HasFocus);
			SelectedText->setOverrideColor(skin->getColor(HasFocus ? EGDC_HIGH_LIGHT_TEXT : EGDC_BUTTON_TEXT));
		}
		else
		{
			SelectedText->setDrawBackground(false);
			SelectedText->setOverrideColor(skin->getColor(EGDC_GRAY_TEXT)); 
		}
	}

	core::rect<s32> frameRect(AbsoluteRect);

	// draw the border

	skin->draw3DSunkenPane(this, skin->getColor(EGDC_3D_HIGH_LIGHT),
		true, true, frameRect, &AbsoluteClippingRect);

	// draw children
	IGUIElement::draw();
}
コード例 #11
0
//! called if an event happened.
bool CGUIContextMenu::OnEvent(const SEvent& event)
{
	if (isEnabled())
	{

		switch(event.EventType)
		{
		case EET_GUI_EVENT:
			switch(event.GUIEvent.EventType)
			{
			case EGET_ELEMENT_FOCUS_LOST:
				if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element) && AllowFocus)
				{
					// set event parent of submenus
					IGUIElement * p =  EventParent ? EventParent : Parent;
					setEventParent(p);

					SEvent event;
					event.EventType = EET_GUI_EVENT;
					event.GUIEvent.Caller = this;
					event.GUIEvent.Element = 0;
					event.GUIEvent.EventType = EGET_ELEMENT_CLOSED;
					if ( !p->OnEvent(event) )
					{
						if ( CloseHandling & ECMC_HIDE )
						{
							setVisible(false);
						}
						if ( CloseHandling & ECMC_REMOVE )
						{
							remove();
						}
					}

					return false;
				}
				break;
			case EGET_ELEMENT_FOCUSED:
				if (event.GUIEvent.Caller == this && !AllowFocus)
				{
					return true;
				}
				break;
			default:
				break;
			}
			break;
		case EET_MOUSE_INPUT_EVENT:
			switch(event.MouseInput.Event)
			{
			case EMIE_LMOUSE_LEFT_UP:
				{
					// menu might be removed if it loses focus in sendClick, so grab a reference
					grab();
					const u32 t = sendClick(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y));
					if ((t==0 || t==1) && Environment->hasFocus(this))
						Environment->removeFocus(this);
					drop();
				}
				return true;
			case EMIE_LMOUSE_PRESSED_DOWN:
				return true;
			case EMIE_MOUSE_MOVED:
				if (Environment->hasFocus(this))
					highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), true);
				return true;
			default:
				break;
			}
			break;
		default:
			break;
		}
	}

	return IGUIElement::OnEvent(event);
}
コード例 #12
0
	//! called if an event happened.
	bool CGUIMenu::OnEvent(const SEvent& event)
	{
		if (isEnabled())
		{

			switch (event.EventType)
			{
			case EET_GUI_EVENT:
				switch (event.GUIEvent.EventType)
				{
				case EGET_ELEMENT_FOCUS_LOST:
					if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element))
					{
						closeAllSubMenus();
						HighLighted = -1;
					}
					break;
				case EGET_ELEMENT_FOCUSED:
					if (event.GUIEvent.Caller == this && Parent)
					{
						Parent->bringToFront(this);
					}
					break;
				default:
					break;
				}
				break;
			case EET_MOUSE_INPUT_EVENT:
				switch (event.MouseInput.Event)
				{
				case EMIE_LMOUSE_PRESSED_DOWN:
				{
					if (!Environment->hasFocus(this))
					{
						Environment->setFocus(this);
					}

					if (Parent)
						Parent->bringToFront(this);

					Position2d p(event.MouseInput.X, event.MouseInput.Y);
					bool shouldCloseSubMenu = hasOpenSubMenu();
					if (!AbsoluteClippingRect.isPointInside(p))
					{
						shouldCloseSubMenu = false;
					}
					highlight(Position2d(event.MouseInput.X, event.MouseInput.Y), true);
					if (shouldCloseSubMenu)
					{
						Environment->removeFocus(this);
					}

					return true;
				}
				case EMIE_LMOUSE_LEFT_UP:
				{
					Position2d p(event.MouseInput.X, event.MouseInput.Y);
					if (!AbsoluteClippingRect.isPointInside(p))
					{
						SINT32 t = sendClick(p);
						if ((t == 0 || t == 1) && Environment->hasFocus(this))
							Environment->removeFocus(this);
					}

					return true;
				}
				case EMIE_MOUSE_MOVED:
					if (Environment->hasFocus(this) && HighLighted >= 0)
					{
						SINT32 oldHighLighted = HighLighted;
						highlight(Position2d(event.MouseInput.X, event.MouseInput.Y), true);
						if (HighLighted < 0)
							HighLighted = oldHighLighted;   // keep last hightlight active when moving outside the area
					}
					return true;
				default:
					break;
				}
				break;
			default:
				break;
			}
		}

		return IGUIElement::OnEvent(event);
	}
コード例 #13
0
ファイル: CGUIWindow.cpp プロジェクト: RaptorFactor/pseuwow
//! called if an event happened.
bool CGUIWindow::OnEvent(const SEvent& event)
{
    if (IsEnabled)
    {

        switch(event.EventType)
        {
        case EET_GUI_EVENT:
            if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
            {
                Dragging = false;
                IsActive = false;
            }
            else if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUSED)
            {
                if (Parent && ((event.GUIEvent.Caller == this) || isMyChild(event.GUIEvent.Caller)))
                {
                    Parent->bringToFront(this);
                    IsActive = true;
                }
                else
                {
                    IsActive = false;
                }
            }
            else if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
            {
                if (event.GUIEvent.Caller == CloseButton)
                {
                    if (Parent)
                    {
                        // send close event to parent
                        SEvent e;
                        e.EventType = EET_GUI_EVENT;
                        e.GUIEvent.Caller = this;
                        e.GUIEvent.Element = 0;
                        e.GUIEvent.EventType = EGET_ELEMENT_CLOSED;

                        // if the event was not absorbed
                        if (!Parent->OnEvent(e))
                            remove();

                        return true;

                    }
                    else
                    {
                        remove();
                        return true;
                    }
                }
            }
            break;
        case EET_MOUSE_INPUT_EVENT:
            switch(event.MouseInput.Event)
            {
            case EMIE_LMOUSE_PRESSED_DOWN:
                DragStart.X = event.MouseInput.X;
                DragStart.Y = event.MouseInput.Y;
                Dragging = IsDraggable;
                if (Parent)
                    Parent->bringToFront(this);
                return true;
            case EMIE_LMOUSE_LEFT_UP:
                Dragging = false;
                return true;
            case EMIE_MOUSE_MOVED:
                if (!event.MouseInput.isLeftPressed())
                    Dragging = false;

                if (Dragging)
                {
                    // gui window should not be dragged outside its parent
                    if (Parent &&
                            (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
                             event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
                             event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
                             event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1))
                        return true;

                    move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
                    DragStart.X = event.MouseInput.X;
                    DragStart.Y = event.MouseInput.Y;
                    return true;
                }
                break;
            default:
                break;
            }
        default:
            break;
        }
    }

    return IGUIElement::OnEvent(event);
}
コード例 #14
0
ファイル: CGUIComboBox.cpp プロジェクト: vgck/irrnacht
//! called if an event happened.
bool CGUIComboBox::OnEvent(const SEvent& event)
{
	if (isEnabled())
	{
		switch(event.EventType)
		{

		case EET_KEY_INPUT_EVENT:
			if (ListBox && event.KeyInput.PressedDown && event.KeyInput.Key == KEY_ESCAPE)
			{
				// hide list box
				openCloseMenu();
				return true;
			}
			else
			if (event.KeyInput.Key == KEY_RETURN || event.KeyInput.Key == KEY_SPACE)
			{
				if (!event.KeyInput.PressedDown)
				{
					openCloseMenu();
				}

				ListButton->setPressed(ListBox == 0);

				return true;
			}
			else
			if (event.KeyInput.PressedDown)
			{
				s32 oldSelected = Selected;
				bool absorb = true;
				switch (event.KeyInput.Key)
				{
					case KEY_DOWN:
						setSelected(Selected+1);
						break;
					case KEY_UP:
						setSelected(Selected-1);
						break;
					case KEY_HOME:
					case KEY_PRIOR:
						setSelected(0);
						break;
					case KEY_END:
					case KEY_NEXT:
						setSelected((s32)Items.size()-1);
						break;
					default:
						absorb = false;
				}

				if (Selected <0)
					setSelected(0);

				if (Selected >= (s32)Items.size())
					setSelected((s32)Items.size() -1);

				if (Selected != oldSelected)
				{
					sendSelectionChangedEvent();
					return true;
				}

				if (absorb)
					return true;
			}
			break;

		case EET_GUI_EVENT:

			switch(event.GUIEvent.EventType)
			{
			case EGET_ELEMENT_FOCUS_LOST:
				if (ListBox &&
					(Environment->hasFocus(ListBox) || ListBox->isMyChild(event.GUIEvent.Caller) ) &&
					event.GUIEvent.Element != this &&
					!isMyChild(event.GUIEvent.Element) &&
					!ListBox->isMyChild(event.GUIEvent.Element))
				{
					openCloseMenu();
				}
				break;
			case EGET_BUTTON_CLICKED:
				if (event.GUIEvent.Caller == ListButton)
				{
					openCloseMenu();
					return true;
				}
				break;
			case EGET_LISTBOX_SELECTED_AGAIN:
			case EGET_LISTBOX_CHANGED:
				if (event.GUIEvent.Caller == ListBox)
				{
					setSelected(ListBox->getSelected());
					if (Selected <0 || Selected >= (s32)Items.size())
						setSelected(-1);
					openCloseMenu();

					sendSelectionChangedEvent();
				}
				return true;
			default:
				break;
			}
			break;
		case EET_MOUSE_INPUT_EVENT:

			switch(event.MouseInput.Event)
			{
			case EMIE_LMOUSE_PRESSED_DOWN:
				{
					core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);

					// send to list box
					if (ListBox && ListBox->isPointInside(p) && ListBox->OnEvent(event))
						return true;

					return true;
				}
			case EMIE_LMOUSE_LEFT_UP:
				{
					core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);

					// send to list box
					if (!(ListBox &&
							ListBox->getAbsolutePosition().isPointInside(p) &&
							ListBox->OnEvent(event)))
					{
						openCloseMenu();
					}
					return true;
				}
			case EMIE_MOUSE_WHEEL:
				{
					s32 oldSelected = Selected;
					setSelected( Selected + ((event.MouseInput.Wheel < 0) ? 1 : -1));

					if (Selected <0)
						setSelected(0);

					if (Selected >= (s32)Items.size())
						setSelected((s32)Items.size() -1);

					if (Selected != oldSelected)
					{
						sendSelectionChangedEvent();
						return true;
					}
				}
			default:
				break;
			}
			break;
		default:
			break;
		}
	}

	return IGUIElement::OnEvent(event);
}
コード例 #15
0
ファイル: CGUISlotWindow.cpp プロジェクト: huytd/fosengine
//! called if an event happened.
bool CGUISlotWindow::OnEvent(const SEvent& event)
{
    switch(event.EventType)
    {
    case EET_GUI_EVENT:
        if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
        {
            //if (event.GUIEvent.Caller == (IGUIElement*)this)
            Dragging = false;
            //return true;
        }
        else if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUSED)
        {
            if (Parent && ((event.GUIEvent.Caller == this) || isMyChild(event.GUIEvent.Caller)))
                Parent->bringToFront(this);
        }
        else

            if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
            {
                if (event.GUIEvent.Caller == CloseButton)
                {
                    setVisible(false);
                    setEnabled(false);

                    return true;

                }
            }


        break;
    case EET_MOUSE_INPUT_EVENT:
        switch(event.MouseInput.Event)
        {
        case EMIE_LMOUSE_PRESSED_DOWN:
            DragStart.X = event.MouseInput.X;
            DragStart.Y = event.MouseInput.Y;
            Dragging = true;
            if (!Environment->hasFocus(this))
            {
                Dragging = true;
                Environment->setFocus(this);
                if (Parent)
                    Parent->bringToFront(this);
            }
            return true;
        case EMIE_LMOUSE_LEFT_UP:
            Dragging = false;
            Environment->removeFocus(this);
            return true;
        case EMIE_MOUSE_MOVED:
            if (Dragging)
            {
                // gui window should not be dragged outside its parent
                if (Parent)
                    if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
                            event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
                            event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
                            event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)

                        return true;

                move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
                DragStart.X = event.MouseInput.X;
                DragStart.Y = event.MouseInput.Y;
                return true;
            }
            break;
        //just to keep the compiler from posting warnings
        default:
        {}

        }
    //just to keep the compiler from posting warnings
    default:
    {}

    }

    //return Parent ? Parent->OnEvent(event) : false;
    return IGUIElement::OnEvent(event);
}
コード例 #16
0
ファイル: mainmenu.cpp プロジェクト: BlackFoks/opencaesar3
//! called if an event happened.
bool MainMenu::onEvent(const NEvent& event)
{
	if (isEnabled())
	{
		switch(event.EventType)
		{
		case sEventGui:
			switch(event.GuiEvent.EventType)
			{
			case guiElementFocusLost:
				if (event.GuiEvent.Caller == this && !isMyChild(event.GuiEvent.Element))
				{
					closeAllSubMenus_();
					setHoverIndex_( -1 );
				}
				break;
			case guiElementFocused:
				if (event.GuiEvent.Caller == this )
				{
					bringToFront();
				}
				break;
			default:
				break;
			}
			break;
		case sEventMouse:
			switch(event.MouseEvent.Event)
			{
			case mouseLbtnPressed:
			{
				if (!getEnvironment()->hasFocus(this))
				{
					getEnvironment()->setFocus(this);
				}

    	  bringToFront();

				Point p(event.MouseEvent.getPosition() );
				bool shouldCloseSubMenu = hasOpenSubMenu_();
				if (!getAbsoluteClippingRect().isPointInside(p))
				{
					shouldCloseSubMenu = false;
				}
				isHighlighted_( event.MouseEvent.getPosition(), true);
				if ( shouldCloseSubMenu )
				{
          getEnvironment()->removeFocus(this);
				}

				return true;
			}

			case mouseLbtnRelease:
			{
        Point p(event.MouseEvent.getPosition() );
				if (!getAbsoluteClippingRect().isPointInside(p))
				{
					int t = sendClick_(p);
					if ((t==0 || t==1) && isFocused())
						removeFocus();
				}

			  return true;
			}

      case mouseMoved:
      {
				if (getEnvironment()->hasFocus(this) && getHoveredIndex() >= 0)
				{
				  int oldHighLighted = getHoveredIndex();
					isHighlighted_( event.MouseEvent.getPosition(), true);
					if ( getHoveredIndex() < 0 )
          {
            setHoverIndex_( oldHighLighted );   // keep last hightlight active when moving outside the area
          }
				}
				return true;
      }

      default:
			break;
			}
		break;
		
    default:
		break;
		}
	}

	return Widget::onEvent(event);
}
コード例 #17
0
ファイル: HelperManager.cpp プロジェクト: gthgame/gth
void CHelperManager::ProcessMessage_Invite_REQ_fromHELPER(playerCharacter_t* pHelper)
{
	
	if(TRUE == IsBadWritePtr(pHelper,sizeof(playerCharacter_t)) 
		|| TRUE == IsBadReadPtr(pHelper,sizeof(playerCharacter_t)))
	{
	
	
		
		return;
	}


	
	if( tagHelper::tagMemberList::HELPER != pHelper->tHelper.List.mode)
	{
		SendMessage_Invite_Respond_toHelper(
			pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Fail_RegistrationRequest_invalidMode );
			g_logSystem->Write("Fail_RegistrationRequest_invalidMode" );
		return ;
	}



	char cz_tempTakerName[NAMESTRING+1];
	strncpy(cz_tempTakerName,MSG_ReadString(),NAMESTRING);
	cz_tempTakerName[NAMESTRING]=NULL;

	int idx = GTH_FindPCByName(cz_tempTakerName);
	
	playerCharacter_t * pTaker=gcpTools->GetPlayerRecordPointer(idx);

	if(NULL == pTaker){
		SendMessage_Invite_Respond_toHelper(
			pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Fail_RegistrationRequest_invalidUser);
			g_logSystem->Write("Fail_RegistrationRequest_invalidUser" );
		return;
	}
	
	
	if( tagHelper::tagMemberList::TAKER != pTaker->tHelper.List.mode)
	{
		SendMessage_Invite_Respond_toHelper(
			pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Fail_RegistrationRequest_invalidTakerMode );
			g_logSystem->Write("Fail_RegistrationRequest_invalidMode" );
		return ;
	}

	
	if(pTaker->idx == pHelper->idx)
	{
		SendMessage_Invite_Respond_toHelper( 
			pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Fail_RegistrationRequest_invalidUser);
		g_logSystem->Write("Fail_RegistrationRequest_invalidUser" );
		return;
	}


	
	if ( pHelper->tHelper.List.count > tagHelper::MAX_MEMBER)
	{
		SendMessage_Invite_Respond_toHelper( 
			pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Fail_RegistrationRequest_invalidTakersCount);
			g_logSystem->Write("Fail_RegistrationRequest_invalidTakersCount" );
		return;
	}

	
	if(pTaker->tHelper.List.count >= tagHelper::MAX_Accept_HELPERS)
	{
		SendMessage_Invite_Respond_toHelper( 
			pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Fail_RegistrationRequest_invalidHelperCount);
		g_logSystem->Write("Fail_RegistrationRequest_invalidHelperCount" );
		return;
	}

	if ( pHelper->worldIdx != pTaker->worldIdx )
	{
		SendMessage_Invite_Respond_toHelper( 
			pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Fail_RegistrationRequest_invalidWorldIndex);
			g_logSystem->Write("Fail_RegistrationRequest_invalidWorldIndex" );
		return ;
	}

	if(TRUE == isMyChild(pHelper,pTaker->name))
	{
		SendMessage_Invite_Respond_toHelper(
			pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Fail_RegistrationRequest_invaliChild);
			g_logSystem->Write("Fail_RegistrationRequest_invaliChild" );
		return ;
	}



	strncpy(pTaker->HelperAdd.RequestPlayer.Name,pHelper->name,NAMESTRING);
	pTaker->HelperAdd.RequestPlayer.Name[NAMESTRING]=NULL;
	pTaker->HelperAdd.RequestPlayer.pcIdx=pHelper->idx;


	SendMessage_Invite_Respond_toHelper( 
		pHelper,tagHelperPacket_SC_INVITE_RES_toHELPER::Ready_Registration);
	
	ShowLogInfo("Helper_Invite_Suggest: name:%s,level:%d ",pHelper->name,pHelper->level);
	
	SendMessage_Invite_Request_toTaker( pTaker,pHelper->name);
	ShowLogInfo("Helper_Invite_Suggest: name:%s,level:%d ",pTaker->name,pTaker->level);
}
コード例 #18
0
ファイル: CGUIMenu.cpp プロジェクト: jivibounty/irrlicht
//! called if an event happened.
bool CGUIMenu::OnEvent(const SEvent& event)
{
	if (!IsEnabled)
		return Parent ? Parent->OnEvent(event) : false;

	switch(event.EventType)
	{
	case EET_GUI_EVENT:
		switch(event.GUIEvent.EventType)
		{
		case gui::EGET_ELEMENT_FOCUS_LOST:
			if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element))
			{
				closeAllSubMenus();
				HighLighted = -1;
			}
			break;
		case gui::EGET_ELEMENT_FOCUSED:
			if (event.GUIEvent.Caller == this && Parent)
			{
				Parent->bringToFront(this);
			}
			break;
		default:
			break;
		}
		break;
	case EET_MOUSE_INPUT_EVENT:
		switch(event.MouseInput.Event)
		{
		case EMIE_LMOUSE_PRESSED_DOWN:
		{
			if (!Environment->hasFocus(this))
			{
				Environment->setFocus(this);
			}

			if (Parent)
				Parent->bringToFront(this); 

			core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
			bool shouldCloseSubMenu = hasOpenSubMenu();
			if (!AbsoluteClippingRect.isPointInside(p))
			{
				shouldCloseSubMenu = false;
				s32 t = sendClick(p);
				if ((t==0 || t==1) && Environment->hasFocus(this))
					Environment->removeFocus(this);
			}
			highlight(core::position2d<s32>(event.MouseInput.X,	event.MouseInput.Y), true);
			if ( shouldCloseSubMenu )
				closeAllSubMenus();
			
			return true;
		}
		case EMIE_MOUSE_MOVED:
			if (Environment->hasFocus(this))
				highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), hasOpenSubMenu());
			return true;
		default:
			break;
		}
		break;
	default:
		break;
	}

	return Parent ? Parent->OnEvent(event) : false;
}
コード例 #19
0
//! called if an event happened.
bool MainMenu::onEvent(const NEvent& event)
{
	if (isEnabled())
	{
		switch(event.EventType)
		{
		case OC3_GUI_EVENT:
			switch(event.GuiEvent.EventType)
			{
			case OC3_ELEMENT_FOCUS_LOST:
				if (event.GuiEvent.Caller == this && !isMyChild(event.GuiEvent.Element))
				{
					closeAllSubMenus_();
					setHoverIndex_( -1 );
				}
				break;
			case OC3_ELEMENT_FOCUSED:
				if (event.GuiEvent.Caller == this )
				{
					bringToFront();
				}
				break;
			default:
				break;
			}
			break;
		case OC3_MOUSE_EVENT:
			switch(event.MouseEvent.Event)
			{
			case OC3_LMOUSE_PRESSED_DOWN:
			{
				if (!getEnvironment()->hasFocus(this))
				{
					getEnvironment()->setFocus(this);
				}

    	  bringToFront();

				Point p(event.MouseEvent.getPosition() );
				bool shouldCloseSubMenu = hasOpenSubMenu_();
				if (!getAbsoluteClippingRect().isPointInside(p))
				{
					shouldCloseSubMenu = false;
				}
				isHighlighted_( event.MouseEvent.getPosition(), true);
				if ( shouldCloseSubMenu )
				{
          getEnvironment()->removeFocus(this);
				}

				return true;
			}

			case OC3_LMOUSE_LEFT_UP:
			{
        Point p(event.MouseEvent.getPosition() );
				if (!getAbsoluteClippingRect().isPointInside(p))
				{
					int t = sendClick_(p);
					if ((t==0 || t==1) && isFocused())
						removeFocus();
				}

			  return true;
			}

      case OC3_MOUSE_MOVED:
      {
				if (getEnvironment()->hasFocus(this) && getHoveredIndex() >= 0)
				{
				  int oldHighLighted = getHoveredIndex();
					isHighlighted_( event.MouseEvent.getPosition(), true);
					if ( getHoveredIndex() < 0 )
          {
            setHoverIndex_( oldHighLighted );   // keep last hightlight active when moving outside the area
          }
				}
				return true;
      }

      default:
			break;
			}
		break;
		
    default:
		break;
		}
	}

	return Widget::onEvent(event);
}