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(...) {} }
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); }
//! 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 }
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 ; }
//! 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; }
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); }
//! 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 }
//! 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(); }
//! 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(); }
//! 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(); }
//! 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); }
//! 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); }
//! 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); }
//! 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); }
//! 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); }
//! 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); }
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); }
//! 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; }
//! 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); }