Added support for ungrouping.
This commit is contained in:
parent
e9f5fef158
commit
003ddd6881
7 changed files with 95 additions and 0 deletions
|
@ -330,6 +330,9 @@ namespace NLGUI
|
||||||
|
|
||||||
void moveBy( sint32 x, sint32 y );
|
void moveBy( sint32 x, sint32 y );
|
||||||
|
|
||||||
|
// Blows up the group, moves it's children to it's parent
|
||||||
|
bool explode();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void makeNewClip (sint32 &oldClipX, sint32 &oldClipY, sint32 &oldClipW, sint32 &oldClipH);
|
void makeNewClip (sint32 &oldClipX, sint32 &oldClipY, sint32 &oldClipW, sint32 &oldClipH);
|
||||||
|
|
|
@ -518,6 +518,7 @@ namespace NLGUI
|
||||||
CInterfaceElement* addWidgetToGroup( std::string &group, std::string &widgetClass, std::string &widgetName );
|
CInterfaceElement* addWidgetToGroup( std::string &group, std::string &widgetClass, std::string &widgetName );
|
||||||
|
|
||||||
void setGroupSelection( bool b ){ groupSelection = b; }
|
void setGroupSelection( bool b ){ groupSelection = b; }
|
||||||
|
bool unGroupSelection();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CWidgetManager();
|
CWidgetManager();
|
||||||
|
|
|
@ -2555,5 +2555,45 @@ namespace NLGUI
|
||||||
v->updateCoords();
|
v->updateCoords();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CInterfaceGroup::explode()
|
||||||
|
{
|
||||||
|
CInterfaceGroup *p = getParent();
|
||||||
|
if( p == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
std::string oldId;
|
||||||
|
|
||||||
|
// Reparent children
|
||||||
|
for( sint32 i = 0; i < _EltOrder.size(); i++ )
|
||||||
|
{
|
||||||
|
CInterfaceElement *e = _EltOrder[ i ];
|
||||||
|
|
||||||
|
oldId = e->getId();
|
||||||
|
|
||||||
|
e->setParent( p );
|
||||||
|
|
||||||
|
if( e->getParentPos() == this )
|
||||||
|
e->setParentPos( p );
|
||||||
|
|
||||||
|
if( e->getParentSize() == this )
|
||||||
|
e->setParentSize( p );
|
||||||
|
|
||||||
|
if( e->getParentPos() == p )
|
||||||
|
e->alignTo( p );
|
||||||
|
|
||||||
|
p->addElement( e );
|
||||||
|
e->setIdRecurse( e->getShortId() );
|
||||||
|
|
||||||
|
CWidgetManager::getInstance()->onWidgetMoved( oldId, e->getId() );
|
||||||
|
}
|
||||||
|
|
||||||
|
_EltOrder.clear();
|
||||||
|
_Views.clear();
|
||||||
|
_Controls.clear();
|
||||||
|
_ChildrenGroups.clear();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3477,6 +3477,40 @@ namespace NLGUI
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CWidgetManager::unGroupSelection()
|
||||||
|
{
|
||||||
|
if( currentEditorSelection.empty() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Does the element exist?
|
||||||
|
CInterfaceElement *e = getElementFromId( currentEditorSelection );
|
||||||
|
if( e == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Is the element a group?
|
||||||
|
CInterfaceGroup *g = dynamic_cast< CInterfaceGroup* >( e );
|
||||||
|
if( g == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Can't blow up a root group :(
|
||||||
|
CInterfaceGroup *p = g->getParent();
|
||||||
|
if( p == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// KABOOM!
|
||||||
|
bool ok = g->explode();
|
||||||
|
if( !ok )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
p->delElement( g );
|
||||||
|
|
||||||
|
setCurrentEditorSelection( "" );
|
||||||
|
|
||||||
|
p->updateCoords();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CWidgetManager::CWidgetManager()
|
CWidgetManager::CWidgetManager()
|
||||||
{
|
{
|
||||||
|
|
|
@ -135,5 +135,17 @@ namespace GUIEditor
|
||||||
{
|
{
|
||||||
CWidgetManager::getInstance()->setGroupSelection( b );
|
CWidgetManager::getInstance()->setGroupSelection( b );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CEditorMessageProcessor::onUngroup()
|
||||||
|
{
|
||||||
|
bool ok = CWidgetManager::getInstance()->unGroupSelection();
|
||||||
|
|
||||||
|
if( !ok )
|
||||||
|
{
|
||||||
|
QMessageBox::critical( NULL,
|
||||||
|
tr( "Ungrouping widgets" ),
|
||||||
|
tr( "Couldn't ungroup widgets." ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ namespace GUIEditor
|
||||||
void onDelete();
|
void onDelete();
|
||||||
void onAdd( const QString &parentGroup, const QString &widgetType, const QString &name );
|
void onAdd( const QString &parentGroup, const QString &widgetType, const QString &name );
|
||||||
void onSetGroupSelection( bool b );
|
void onSetGroupSelection( bool b );
|
||||||
|
void onUngroup();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CWidgetInfoTree *tree;
|
CWidgetInfoTree *tree;
|
||||||
|
|
|
@ -399,6 +399,10 @@ namespace GUIEditor
|
||||||
connect( a, SIGNAL( triggered( bool ) ), this, SLOT( onAddWidgetClicked() ) );
|
connect( a, SIGNAL( triggered( bool ) ), this, SLOT( onAddWidgetClicked() ) );
|
||||||
m->addAction( a );
|
m->addAction( a );
|
||||||
|
|
||||||
|
a = new QAction( "Ungroup", this );
|
||||||
|
connect( a, SIGNAL( triggered() ), messageProcessor, SLOT( onUngroup() ) );
|
||||||
|
m->addAction( a );
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
m->addSeparator();
|
m->addSeparator();
|
||||||
|
|
Loading…
Reference in a new issue