mirror of
https://github.com/minetest/irrlicht.git
synced 2024-12-25 02:00:30 +01:00
GUIEditor clears now existing elements before loading new ones.
Thanks @Artem Shoobovych for the patch (#323) I changed it a bit, but basically same idea. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6210 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
parent
9417b22b86
commit
22a7280e95
@ -598,9 +598,14 @@ bool CGUIEditWorkspace::OnEvent(const SEvent &e)
|
|||||||
}
|
}
|
||||||
// load a gui file
|
// load a gui file
|
||||||
case EGET_FILE_SELECTED:
|
case EGET_FILE_SELECTED:
|
||||||
|
{
|
||||||
dialog = (IGUIFileOpenDialog*)e.GUIEvent.Caller;
|
dialog = (IGUIFileOpenDialog*)e.GUIEvent.Caller;
|
||||||
Environment->loadGUI(core::stringc(dialog->getFileName()).c_str());
|
core::stringc guiFilename(core::stringc(dialog->getFileName()).c_str());
|
||||||
|
clearParentElements();
|
||||||
|
Environment->loadGUI(guiFilename, Parent);
|
||||||
|
EditorWindow->updateTree();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case EGET_MENU_ITEM_SELECTED:
|
case EGET_MENU_ITEM_SELECTED:
|
||||||
{
|
{
|
||||||
@ -614,18 +619,7 @@ bool CGUIEditWorkspace::OnEvent(const SEvent &e)
|
|||||||
|
|
||||||
//! file commands
|
//! file commands
|
||||||
case EGUIEDMC_FILE_NEW:
|
case EGUIEDMC_FILE_NEW:
|
||||||
// clear all elements belonging to our parent
|
clearParentElements();
|
||||||
setSelectedElement(0);
|
|
||||||
MouseOverElement = 0;
|
|
||||||
el = Parent;
|
|
||||||
grab();
|
|
||||||
// remove all children
|
|
||||||
while(Children.end() != el->getChildren().begin())
|
|
||||||
el->removeChild(*(el->getChildren().begin()));
|
|
||||||
// attach to parent again
|
|
||||||
el->addChild(this);
|
|
||||||
drop();
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case EGUIEDMC_FILE_LOAD:
|
case EGUIEDMC_FILE_LOAD:
|
||||||
Environment->addFileOpenDialog(L"Please select a GUI file to open", false, this);
|
Environment->addFileOpenDialog(L"Please select a GUI file to open", false, this);
|
||||||
@ -843,10 +837,32 @@ void CGUIEditWorkspace::removeChild(IGUIElement* child)
|
|||||||
{
|
{
|
||||||
IGUIElement::removeChild(child);
|
IGUIElement::removeChild(child);
|
||||||
|
|
||||||
|
// TODO: Can anyone find out why the workspace removes itself when it has no more children
|
||||||
|
// and document it here?
|
||||||
if (Children.empty())
|
if (Children.empty())
|
||||||
remove();
|
remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CGUIEditWorkspace::clearParentElements()
|
||||||
|
{
|
||||||
|
setSelectedElement(0);
|
||||||
|
MouseOverElement = 0;
|
||||||
|
|
||||||
|
IGUIElement * el = Parent;
|
||||||
|
grab();
|
||||||
|
|
||||||
|
if ( el->isMyChild(Environment->getFocus()) )
|
||||||
|
Environment->setFocus(0);
|
||||||
|
|
||||||
|
// remove all children except first one (EditorWindow)
|
||||||
|
while (!el->getChildren().empty())
|
||||||
|
{
|
||||||
|
el->removeChild(*(el->getChildren().begin()));
|
||||||
|
}
|
||||||
|
|
||||||
|
el->addChild(this);
|
||||||
|
drop();
|
||||||
|
}
|
||||||
|
|
||||||
void CGUIEditWorkspace::updateAbsolutePosition()
|
void CGUIEditWorkspace::updateAbsolutePosition()
|
||||||
{
|
{
|
||||||
|
@ -46,6 +46,9 @@ namespace gui
|
|||||||
//! Removes a child.
|
//! Removes a child.
|
||||||
virtual void removeChild(IGUIElement* child);
|
virtual void removeChild(IGUIElement* child);
|
||||||
|
|
||||||
|
//! Remove all gui elements from parent except this one
|
||||||
|
virtual void clearParentElements();
|
||||||
|
|
||||||
//! draws the element and its children
|
//! draws the element and its children
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user