void Menubar::_moveOutsideModal( int x, int y ) { uint32_t item = _getItemAtAbsPos( x, y ); if( item && item != m_selectedItem && m_items.get(item-1)->m_bEnabled ) { _closeMenu( m_selectedItem ); _openMenu(item); } }
void Menubar::_receive( const Msg_p& pMsg ) { Widget::_receive(pMsg); switch( pMsg->type() ) { case MsgType::MouseMove: case MsgType::MousePress: { Coord pos = InputMsg::cast(pMsg)->pointerPos() - globalPos(); uint32_t item = _getItemAtAbsPos( pos.x, pos.y ); if( item && !m_items.get(item-1)->m_bEnabled ) item = 0; // Item is disabled and can't be marked. if(m_markedItem != item) { m_markedItem = item; _requestRender(); } // If a menu entry already is selected we should // switch to the new marked one. if( m_selectedItem ) { if( m_markedItem && m_selectedItem != m_markedItem ) { _closeMenu( m_selectedItem ); _openMenu( m_markedItem ); } } // If this was a press, we need to select the item and open the menu. //TODO: A click on an already open entry should close the menu. if( item && pMsg->type()== MsgType::MousePress ) { _openMenu( item ); } } case MsgType::MouseLeave: m_markedItem = 0; _requestRender(); break; } }
void WgMenubar::_onEvent( const WgEventPtr& pEvent, WgEventHandler * pHandler ) { WgWidget::_onEvent(pEvent,pHandler); switch( pEvent->Type() ) { case WG_EVENT_MOUSE_MOVE: case WG_EVENT_MOUSE_PRESS: { WgCoord pos = pEvent->PointerPos(); Uint32 item = _getItemAtAbsPos( pos.x, pos.y ); if( item && !m_items.Get(item-1)->m_bEnabled ) item = 0; // Item is disabled and can't be marked. if(m_markedItem != item) { m_markedItem = item; _requestRender(); } // If a menu entry already is selected we should // switch to the new marked one. if( m_selectedItem ) { if( m_markedItem && m_selectedItem != m_markedItem ) { _closeMenu( m_selectedItem ); _openMenu( m_markedItem ); } } // If this was a press, we need to select the item and open the menu. //TODO: A click on an already open entry should close the menu. if( item && pEvent->Type()== WG_EVENT_MOUSE_PRESS ) { _openMenu( item ); } } case WG_EVENT_MOUSE_LEAVE: m_markedItem = 0; _requestRender(); break; } }