MODIFIED: Preliminary support for a little cleanup when removing a widget from it's parent group ( for example when moving the widget ).

This commit is contained in:
dfighter1985 2013-03-08 06:28:52 +01:00
parent b106d18c8b
commit b2d052108f
4 changed files with 27 additions and 6 deletions

View file

@ -124,6 +124,8 @@ namespace NLGUI
REFLECT_LUA_METHOD("getViewText", luaGetViewText)
REFLECT_EXPORT_END
void onRemoved();
protected:
enum {NumTexture= 3};

View file

@ -486,6 +486,9 @@ namespace NLGUI
void setSerializable( bool b ){ serializable = b; }
bool IsSerializable() const{ return serializable; }
/// Called when the widget is removed from it's parent group
virtual void onRemoved(){}
protected:
bool editorSelected;

View file

@ -64,8 +64,8 @@ namespace NLGUI
{
if( _ViewText != NULL )
{
if( getParent() != NULL )
getParent()->delElement( _ViewText );
if( _Parent != NULL )
_Parent->delView( _ViewText );
_ViewText = NULL;
}
}
@ -967,6 +967,13 @@ namespace NLGUI
}
// ***************************************************************************
void CCtrlTextButton::onRemoved()
{
if( _ViewText != NULL )
{
if( _Parent != NULL )
_Parent->delView( _ViewText, true );
}
}
}

View file

@ -1084,9 +1084,12 @@ namespace NLGUI
{
if (_Views[i] == child)
{
if (!dontDelete) delete _Views[i];
CViewBase *v = _Views[i];
_Views.erase(_Views.begin()+i);
delEltOrder (child);
child->onRemoved();
child->setParent( NULL );
if (!dontDelete) delete v;
return true;
}
}
@ -1100,9 +1103,12 @@ namespace NLGUI
{
if (_Controls[i] == child)
{
if (!dontDelete) delete _Controls[i];
CCtrlBase *c = _Controls[i];
_Controls.erase(_Controls.begin()+i);
delEltOrder (child);
child->onRemoved();
child->setParent( NULL );
if (!dontDelete) delete c;
return true;
}
}
@ -1116,9 +1122,12 @@ namespace NLGUI
{
if (_ChildrenGroups[i] == child)
{
if (!dontDelete) delete _ChildrenGroups[i];
CInterfaceGroup *g = _ChildrenGroups[i];
_ChildrenGroups.erase(_ChildrenGroups.begin()+i);
delEltOrder (child);
child->onRemoved();
child->setParent( NULL );
if (!dontDelete) delete g;
return true;
}
}