mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-22 00:48:44 +00:00
Merged the gui-editor branch.
This commit is contained in:
commit
58f5047b7e
5 changed files with 554 additions and 434 deletions
|
@ -233,6 +233,9 @@ namespace NLGUI
|
||||||
|
|
||||||
virtual void setActive (bool state);
|
virtual void setActive (bool state);
|
||||||
|
|
||||||
|
void setXReal( sint32 x ){ _XReal = x; }
|
||||||
|
void setYReal( sint32 y ){ _YReal = y; }
|
||||||
|
|
||||||
void setX (sint32 x) { _X = x; }
|
void setX (sint32 x) { _X = x; }
|
||||||
void setXAndInvalidateCoords (sint32 x) { _X = x; invalidateCoords(); }
|
void setXAndInvalidateCoords (sint32 x) { _X = x; invalidateCoords(); }
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,9 @@ namespace NLGUI
|
||||||
bool delElement (const std::string &id, bool noWarning=false);
|
bool delElement (const std::string &id, bool noWarning=false);
|
||||||
bool delElement (CInterfaceElement *pIE, bool noWarning=false);
|
bool delElement (CInterfaceElement *pIE, bool noWarning=false);
|
||||||
|
|
||||||
|
// Take the element from the group, but don't delete it!
|
||||||
|
CInterfaceElement* takeElement( CInterfaceElement *e );
|
||||||
|
|
||||||
uint getNumGroup() const { return (uint)_ChildrenGroups.size(); }
|
uint getNumGroup() const { return (uint)_ChildrenGroups.size(); }
|
||||||
CInterfaceGroup *getGroup(uint index) const;
|
CInterfaceGroup *getGroup(uint index) const;
|
||||||
|
|
||||||
|
|
|
@ -333,6 +333,12 @@ namespace NLGUI
|
||||||
|
|
||||||
bool handleEvent( const CEventDescriptor &evnt );
|
bool handleEvent( const CEventDescriptor &evnt );
|
||||||
|
|
||||||
|
bool handleSystemEvent( const CEventDescriptor &evnt );
|
||||||
|
|
||||||
|
bool handleKeyboardEvent( const CEventDescriptor &evnt );
|
||||||
|
|
||||||
|
bool handleMouseEvent( const CEventDescriptor &evnt );
|
||||||
|
|
||||||
bool handleMouseMoveEvent( const CEventDescriptor &eventDesc );
|
bool handleMouseMoveEvent( const CEventDescriptor &eventDesc );
|
||||||
|
|
||||||
// Relative move of pointer
|
// Relative move of pointer
|
||||||
|
@ -526,6 +532,11 @@ namespace NLGUI
|
||||||
|
|
||||||
NLMISC::CRefPtr< CViewBase > _CapturedView;
|
NLMISC::CRefPtr< CViewBase > _CapturedView;
|
||||||
|
|
||||||
|
NLMISC::CRefPtr< CInterfaceElement > draggedElement;
|
||||||
|
|
||||||
|
bool startDragging();
|
||||||
|
void stopDragging();
|
||||||
|
|
||||||
// What is under pointer
|
// What is under pointer
|
||||||
std::vector< CViewBase* > _ViewsUnderPointer;
|
std::vector< CViewBase* > _ViewsUnderPointer;
|
||||||
std::vector< CCtrlBase* > _CtrlsUnderPointer;
|
std::vector< CCtrlBase* > _CtrlsUnderPointer;
|
||||||
|
|
|
@ -1638,6 +1638,32 @@ namespace NLGUI
|
||||||
return delView(static_cast<CViewBase*>(pIE));
|
return delView(static_cast<CViewBase*>(pIE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
CInterfaceElement* CInterfaceGroup::takeElement( CInterfaceElement *e )
|
||||||
|
{
|
||||||
|
bool ok = false;
|
||||||
|
|
||||||
|
if( e->isGroup() )
|
||||||
|
{
|
||||||
|
ok = delGroup( static_cast< CInterfaceGroup* >( e ), true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( e->isCtrl() )
|
||||||
|
{
|
||||||
|
ok = delCtrl( static_cast< CCtrlBase* >( e ), true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( e->isView() )
|
||||||
|
{
|
||||||
|
ok = delView( static_cast< CViewBase* >( e ), true );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ok )
|
||||||
|
return e;
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
bool CInterfaceGroup::isWindowUnder (sint32 x, sint32 y)
|
bool CInterfaceGroup::isWindowUnder (sint32 x, sint32 y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2039,6 +2039,12 @@ namespace NLGUI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( draggedElement != NULL )
|
||||||
|
{
|
||||||
|
CInterfaceElement *e = draggedElement;
|
||||||
|
static_cast< CViewBase* >( e )->draw();
|
||||||
|
}
|
||||||
|
|
||||||
if ( (nPriority == WIN_PRIORITY_WORLD_SPACE) && !camera.empty())
|
if ( (nPriority == WIN_PRIORITY_WORLD_SPACE) && !camera.empty())
|
||||||
{
|
{
|
||||||
driver->setMatrixMode2D11();
|
driver->setMatrixMode2D11();
|
||||||
|
@ -2096,7 +2102,30 @@ namespace NLGUI
|
||||||
if( activeAnims[i]->isDisableButtons() )
|
if( activeAnims[i]->isDisableButtons() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
bool handled = false;
|
||||||
|
|
||||||
|
CViewPointer *_Pointer = static_cast< CViewPointer* >( getPointer() );
|
||||||
|
|
||||||
if( evnt.getType() == CEventDescriptor::system )
|
if( evnt.getType() == CEventDescriptor::system )
|
||||||
|
{
|
||||||
|
handleSystemEvent( evnt );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (evnt.getType() == CEventDescriptor::key)
|
||||||
|
{
|
||||||
|
handled = handleKeyboardEvent( evnt );
|
||||||
|
}
|
||||||
|
else if (evnt.getType() == CEventDescriptor::mouse )
|
||||||
|
{
|
||||||
|
handled = handleMouseEvent( evnt );
|
||||||
|
}
|
||||||
|
|
||||||
|
CDBManager::getInstance()->flushObserverCalls();
|
||||||
|
|
||||||
|
return handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CWidgetManager::handleSystemEvent( const CEventDescriptor &evnt )
|
||||||
{
|
{
|
||||||
const CEventDescriptorSystem &systemEvent = reinterpret_cast< const CEventDescriptorSystem& >( evnt );
|
const CEventDescriptorSystem &systemEvent = reinterpret_cast< const CEventDescriptorSystem& >( evnt );
|
||||||
if( systemEvent.getEventTypeExtended() == CEventDescriptorSystem::setfocus )
|
if( systemEvent.getEventTypeExtended() == CEventDescriptorSystem::setfocus )
|
||||||
|
@ -2119,22 +2148,23 @@ namespace NLGUI
|
||||||
_CapturedView = NULL;
|
_CapturedView = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CWidgetManager::handleKeyboardEvent( const CEventDescriptor &evnt )
|
||||||
|
{
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
|
|
||||||
CViewPointer *_Pointer = static_cast< CViewPointer* >( getPointer() );
|
|
||||||
|
|
||||||
if (evnt.getType() == CEventDescriptor::key)
|
|
||||||
{
|
|
||||||
CEventDescriptorKey &eventDesc = (CEventDescriptorKey&)evnt;
|
CEventDescriptorKey &eventDesc = (CEventDescriptorKey&)evnt;
|
||||||
|
|
||||||
//_LastEventKeyDesc = eventDesc;
|
//_LastEventKeyDesc = eventDesc;
|
||||||
|
|
||||||
// Any Key event disable the ContextHelp
|
// Any Key event disable the ContextHelp
|
||||||
disableContextHelp();
|
disableContextHelp();
|
||||||
|
|
||||||
// Hide menu if the key is pushed
|
// Hide menu if the key is pushed
|
||||||
// if ((eventDesc.getKeyEventType() == CEventDescriptorKey::keydown) && !_ModalStack.empty() && !eventDesc.getKeyAlt() && !eventDesc.getKeyCtrl() && !eventDesc.getKeyShift())
|
// if ((eventDesc.getKeyEventType() == CEventDescriptorKey::keydown) && !_ModalStack.empty() && !eventDesc.getKeyAlt() && !eventDesc.getKeyCtrl() && !eventDesc.getKeyShift())
|
||||||
// Hide menu (or popup menu) is ESCAPE pressed
|
// Hide menu (or popup menu) is ESCAPE pressed
|
||||||
if( eventDesc.getKeyEventType() == CEventDescriptorKey::keychar && eventDesc.getChar() == NLMISC::KeyESCAPE )
|
if( eventDesc.getKeyEventType() == CEventDescriptorKey::keychar && eventDesc.getChar() == NLMISC::KeyESCAPE )
|
||||||
{
|
{
|
||||||
|
@ -2246,12 +2276,14 @@ namespace NLGUI
|
||||||
}
|
}
|
||||||
|
|
||||||
lastKeyEvent = eventDesc;
|
lastKeyEvent = eventDesc;
|
||||||
|
|
||||||
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////// Keyboard handling ends here ////////////////////////////////////
|
bool CWidgetManager::handleMouseEvent( const CEventDescriptor &evnt )
|
||||||
|
|
||||||
else if (evnt.getType() == CEventDescriptor::mouse )
|
|
||||||
{
|
{
|
||||||
|
bool handled = false;
|
||||||
|
|
||||||
CEventDescriptorMouse &eventDesc = (CEventDescriptorMouse&)evnt;
|
CEventDescriptorMouse &eventDesc = (CEventDescriptorMouse&)evnt;
|
||||||
|
|
||||||
if( eventDesc.getEventTypeExtended() == CEventDescriptorMouse::mouseleftdown )
|
if( eventDesc.getEventTypeExtended() == CEventDescriptorMouse::mouseleftdown )
|
||||||
|
@ -2411,10 +2443,10 @@ namespace NLGUI
|
||||||
// consider clicking on a control implies handling of the event.
|
// consider clicking on a control implies handling of the event.
|
||||||
handled= true;
|
handled= true;
|
||||||
|
|
||||||
// handle the capture
|
|
||||||
if( getCapturePointerLeft() != NULL )
|
if( getCapturePointerLeft() != NULL )
|
||||||
getCapturePointerLeft()->handleEvent(evnt);
|
_CapturedView = getCapturePointerLeft();
|
||||||
else
|
|
||||||
|
// handle the capture
|
||||||
_CapturedView->handleEvent( evnt );
|
_CapturedView->handleEvent( evnt );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2508,6 +2540,11 @@ namespace NLGUI
|
||||||
setCapturePointerLeft(NULL);
|
setCapturePointerLeft(NULL);
|
||||||
handled = true;
|
handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_CapturedView = NULL;
|
||||||
|
|
||||||
|
if( CInterfaceElement::getEditorMode() )
|
||||||
|
stopDragging();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2538,14 +2575,10 @@ namespace NLGUI
|
||||||
// If the mouse is over a window, always consider the event is taken (avoid click behind)
|
// If the mouse is over a window, always consider the event is taken (avoid click behind)
|
||||||
handled|= isMouseOverWindow();
|
handled|= isMouseOverWindow();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
CDBManager::getInstance()->flushObserverCalls();
|
|
||||||
|
|
||||||
return handled;
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CWidgetManager::handleMouseMoveEvent( const CEventDescriptor &eventDesc )
|
bool CWidgetManager::handleMouseMoveEvent( const CEventDescriptor &eventDesc )
|
||||||
{
|
{
|
||||||
if( getPointer() == NULL )
|
if( getPointer() == NULL )
|
||||||
|
@ -2580,9 +2613,53 @@ namespace NLGUI
|
||||||
ve.setY( getPointer()->getY() );
|
ve.setY( getPointer()->getY() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( CInterfaceElement::getEditorMode() )
|
||||||
|
{
|
||||||
|
if( ( _CapturedView != NULL ) && ( draggedElement == NULL ) )
|
||||||
|
{
|
||||||
|
startDragging();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( draggedElement != NULL )
|
||||||
|
{
|
||||||
|
draggedElement->setXReal( newX );
|
||||||
|
draggedElement->setYReal( newY );
|
||||||
|
draggedElement->invalidateCoords();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
bool CWidgetManager::startDragging()
|
||||||
|
{
|
||||||
|
CInterfaceElement *e = NULL;
|
||||||
|
|
||||||
|
CInterfaceGroup *g = _CapturedView->getParent();
|
||||||
|
if( g != NULL )
|
||||||
|
{
|
||||||
|
e = g->takeElement( _CapturedView );
|
||||||
|
if( e == NULL )
|
||||||
|
{
|
||||||
|
nlinfo( "Something went horribly wrong :(" );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e = _CapturedView;
|
||||||
|
|
||||||
|
e->setParent( NULL );
|
||||||
|
draggedElement = e;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CWidgetManager::stopDragging()
|
||||||
|
{
|
||||||
|
draggedElement = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void CWidgetManager::movePointer (sint32 dx, sint32 dy)
|
void CWidgetManager::movePointer (sint32 dx, sint32 dy)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue