فهرست منبع

ATTENTION: ScreenEntityInstance no longer has a root entity, it is now loaded as children of the ScreenEntityInstance itself. You can now edit the default id, tags and custom properties of the entity itself. Entity tags will now check for duplicate before adding. Fixed numerous crashes relating to entity deletion in the 2d editor. Added a hasResource method to the ResourceManager.

Ivan Safrin 12 سال پیش
والد
کامیت
20f2a4a278

+ 6 - 0
Core/Contents/Include/PolyResourceManager.h

@@ -53,6 +53,12 @@ namespace Polycode {
 			*/ 
 			void removeResource(Resource *resource);
 			
+			
+			/**
+			* Returns true if the following resource has been adde to the resource manager.
+			* @param resource Resource to check.
+			*/
+			bool hasResource(Resource *resource);
 			/**
 			* Loads resources from a directory.
 			* @param dirPath Path to directory to load resources from.

+ 3 - 4
Core/Contents/Include/PolyScreenEntityInstance.h

@@ -53,12 +53,13 @@ class ScreenEntityInstance : public ScreenEntity {
 		
 		void reloadEntityInstance();
 
+		void clearInstance();
+
 		void parseObjectIntoCurve(ObjectEntry *entry, BezierCurve *curve);
 		void applyScreenShape(ObjectEntry *entry, ScreenShape *shape);
-		ScreenEntity *loadObjectEntryIntoEntity(ObjectEntry *entry);
+		ScreenEntity *loadObjectEntryIntoEntity(ObjectEntry *entry, ScreenEntity *targetEntity = NULL);
 		bool loadFromFile(const String& fileName);
 		
-		ScreenEntity *getRootEntity();
 		
 		ScreenEntityInstanceResourceEntry *getResourceEntry();
 		
@@ -67,8 +68,6 @@ class ScreenEntityInstance : public ScreenEntity {
 		bool cloneUsingReload;
 
 		String fileName;
-
-		ScreenEntity *rootEntity;
 		
 	protected:
 		

+ 3 - 1
Core/Contents/Source/PolyEntity.cpp

@@ -785,6 +785,8 @@ void Entity::clearTags() {
 
 void Entity::addTag(String tag) {
 	if(!tags) tags = new std::vector<String>();
-	tags->push_back(tag);
+	if(!hasTag(tag)) {
+		tags->push_back(tag);
+	}
 }
 

+ 9 - 0
Core/Contents/Source/PolyResourceManager.cpp

@@ -156,6 +156,15 @@ void ResourceManager::parseCubemaps(const String& dirPath, bool recursive) {
 	}	
 }
 
+bool ResourceManager::hasResource(Resource *resource) {
+	for(int i=0; i < resources.size(); i++) {
+		if(resources[i] == resource) {
+			return true;
+		}
+	}
+	return false;
+}
+
 void ResourceManager::addResource(Resource *resource) {
 	resources.push_back(resource);
 	resource->resourceFileTime = OSBasics::getFileTime(resource->getResourcePath());

+ 4 - 2
Core/Contents/Source/PolyScreenEntity.cpp

@@ -137,8 +137,10 @@ void ScreenEntity::focusChild(ScreenEntity *child) {
 		((ScreenEntity*)CoreServices::getInstance()->focusedChild)->hasFocus = false;
 	}
 	CoreServices::getInstance()->focusedChild = child;
-	((ScreenEntity*)CoreServices::getInstance()->focusedChild)->hasFocus = true;
-	((ScreenEntity*)CoreServices::getInstance()->focusedChild)->onGainFocus();
+	if(child) {	
+		((ScreenEntity*)CoreServices::getInstance()->focusedChild)->hasFocus = true;
+		((ScreenEntity*)CoreServices::getInstance()->focusedChild)->onGainFocus();
+	}
 }
 
 void ScreenEntity::moveChildUp(ScreenEntity *child) {

+ 34 - 31
Core/Contents/Source/PolyScreenEntityInstance.cpp

@@ -49,10 +49,9 @@ ScreenEntityInstance *ScreenEntityInstance::BlankScreenEntityInstance() {
 }
 
 ScreenEntityInstance::ScreenEntityInstance(const String& fileName) : ScreenEntity() {
-	rootEntity = NULL;
 	setPositionMode(ScreenEntity::POSITION_CENTER);
+	resourceEntry = new ScreenEntityInstanceResourceEntry(this);		
 	loadFromFile(fileName);
-	resourceEntry = new ScreenEntityInstanceResourceEntry(this);	
 	resourceEntry->setResourceName(fileName);
 	resourceEntry->setResourcePath(fileName);
 	cloneUsingReload = false;
@@ -60,7 +59,6 @@ ScreenEntityInstance::ScreenEntityInstance(const String& fileName) : ScreenEntit
 }
 
 ScreenEntityInstance::ScreenEntityInstance() : ScreenEntity() {
-	rootEntity = NULL;
 	cloneUsingReload = true;
 	ownsChildren = true;
 	resourceEntry = new ScreenEntityInstanceResourceEntry(this);
@@ -72,7 +70,6 @@ ScreenEntityInstance::~ScreenEntityInstance() {
 }
 
 void ScreenEntityInstance::reloadEntityInstance() {
-	rootEntity->setOwnsChildrenRecursive(true);
 	loadFromFile(fileName);
 }
 
@@ -98,9 +95,6 @@ void ScreenEntityInstance::applyClone(Entity *clone, bool deepClone, bool ignore
 		ScreenEntity::applyClone(clone, deepClone, ignoreEditorOnly);
 		ScreenEntityInstance *_clone = (ScreenEntityInstance*) clone;
 		_clone->fileName = fileName;
-		if(_clone->getNumChildren() > 0) {
-			_clone->rootEntity = (ScreenEntity*)_clone->getChildAtIndex(0);
-		}
 	}
 }
 
@@ -166,7 +160,7 @@ void ScreenEntityInstance::parseObjectIntoCurve(ObjectEntry *entry, BezierCurve
 	
 }
 
-ScreenEntity *ScreenEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry) {
+ScreenEntity *ScreenEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, ScreenEntity *targetEntity) {
 
 	ScreenEntity *entity = NULL;
 	
@@ -284,7 +278,11 @@ ScreenEntity *ScreenEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry
 	} 
 
 	if(!entity) {
-		entity = new ScreenEntity();
+		if(targetEntity) {
+			entity = targetEntity;
+		} else {
+			entity = new ScreenEntity();
+		}
 	}
 	
 	entity->ownsChildren = true;
@@ -294,21 +292,23 @@ ScreenEntity *ScreenEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry
 	} else {
 		entity->setPositionMode(ScreenEntity::POSITION_CENTER);
 	}
-	
-	entity->color.r = (*entry)["colorR"]->NumberVal;
-	entity->color.g = (*entry)["colorG"]->NumberVal;
-	entity->color.b = (*entry)["colorB"]->NumberVal;
-	entity->color.a = (*entry)["colorA"]->NumberVal;
 
-	entity->blendingMode = (*entry)["blendMode"]->intVal;
+	if(!targetEntity) {	
+		entity->color.r = (*entry)["colorR"]->NumberVal;
+		entity->color.g = (*entry)["colorG"]->NumberVal;
+		entity->color.b = (*entry)["colorB"]->NumberVal;
+		entity->color.a = (*entry)["colorA"]->NumberVal;
+
+		entity->blendingMode = (*entry)["blendMode"]->intVal;
 
-	entity->scale.x = (*entry)["scaleX"]->NumberVal;
-	entity->scale.y = (*entry)["scaleY"]->NumberVal;
+		entity->scale.x = (*entry)["scaleX"]->NumberVal;
+		entity->scale.y = (*entry)["scaleY"]->NumberVal;
 
-	entity->position.x = (*entry)["posX"]->NumberVal;
-	entity->position.y = (*entry)["posY"]->NumberVal;
+		entity->position.x = (*entry)["posX"]->NumberVal;
+		entity->position.y = (*entry)["posY"]->NumberVal;
 
-	entity->setRotation((*entry)["rotation"]->NumberVal);
+		entity->setRotation((*entry)["rotation"]->NumberVal);
+	}
 	
 	entity->id = (*entry)["id"]->stringVal;
 	
@@ -344,21 +344,25 @@ ScreenEntity *ScreenEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry
 	return entity;
 }
 
-ScreenEntity *ScreenEntityInstance::getRootEntity() {
-	return rootEntity;
-}
-
 String ScreenEntityInstance::getFileName() const {
 	return fileName;
 }
 
+void ScreenEntityInstance::clearInstance() {
+	for(int i=0; i < children.size(); i++) {
+		removeChild(children[i]);
+		children[i]->setOwnsChildrenRecursive(true);
+		delete children[i];
+	}
+}
+
 bool ScreenEntityInstance::loadFromFile(const String& fileName) {
 
-	if(rootEntity) {
-		removeChild(rootEntity);
-		delete rootEntity;		
-	}
+	clearInstance();
+	
+	resourceEntry->resourceFileTime = OSBasics::getFileTime(fileName);
 
+	this->ownsChildren = true;
 	this->fileName = fileName;
 	Object loadObject;
 	if(!loadObject.loadFromBinary(fileName)) {
@@ -367,9 +371,8 @@ bool ScreenEntityInstance::loadFromFile(const String& fileName) {
 	ObjectEntry *root = loadObject.root["root"];
 	
 	if(root) {
-		rootEntity = loadObjectEntryIntoEntity(root);
-		rootEntity->ownsChildren = true;
-		addChild(rootEntity);		
+		loadObjectEntryIntoEntity(root, this);
 	}
+	
 	return true;
 }

BIN
Examples/Lua/Game_Demos/Platformer/Resources/entities/button.entity2d


BIN
Examples/Lua/Game_Demos/Platformer/Resources/entities/coin.entity2d


BIN
Examples/Lua/Game_Demos/Platformer/Resources/entities/fly.entity2d


BIN
Examples/Lua/Game_Demos/Platformer/Resources/entities/spaceman.entity2d


BIN
Examples/Lua/Game_Demos/Platformer/Resources/fonts/LondrinaSolid-Regular.otf


+ 7 - 2
IDE/Contents/Include/PolycodeScreenEditor.h

@@ -59,6 +59,8 @@ class EntityTreeView : public UIElement {
 		
 		void syncNodeToEntity(UITree *node, Entity *entity);
 		
+		void setRootEntity(ScreenEntity *entity);
+		
 		void Refresh();
 
 		Entity *selectedEntity;
@@ -67,10 +69,11 @@ class EntityTreeView : public UIElement {
 		UIImageButton *newLayerButton;
 		UIImageButton *targetLayerButton;
 		
-		Entity *rootEntity;
 						
 	protected:	
 	
+		Entity *rootEntity;
+			
 		bool dontSendSelectionEvent;
 	
 		UITreeContainer *treeContainer;
@@ -122,6 +125,7 @@ class PolycodeScreenEditorMain : public UIElement {
 		bool hasSelected(ScreenEntity *entity);
 	
 		void applyEditorOnly(ScreenEntity *entity);
+		void applyEditorOnlyChildren(ScreenEntity *entity);
 		void applyEditorProperties(ScreenEntity *entity);
 			
 		void processEventForEntity(ScreenEntity *childEntity, InputEvent *inputEvent);
@@ -252,7 +256,8 @@ class PolycodeScreenEditorMain : public UIElement {
 		Vector2 placingAnchor;
 		
 		ScreenShape *screenPreviewShape;
-		
+		ScreenShape *sizePreviewShape;
+				
 		Vector2 dragOffset;
 		bool isDraggingEntity;
 		bool isScalingEntity;

BIN
IDE/Contents/Resources/FileTemplates/2D/2D Entity.entity2d


+ 84 - 33
IDE/Contents/Source/PolycodeScreenEditor.cpp

@@ -87,7 +87,7 @@ EntityTreeView::EntityTreeView(Entity *rootEntity) : UIElement() {
 	addChild(label);
 	label->setPosition(10, 3);
 	
-	treeContainer = new UITreeContainer("Images/entity_icon.png", L"Root", 200, 555);
+	treeContainer = new UITreeContainer("Images/entity_icon.png", L"Entity", 200, 555);
 	treeContainer->getRootNode()->toggleCollapsed();
 	treeContainer->getRootNode()->addEventListener(this, UITreeEvent::SELECTED_EVENT);
 	treeContainer->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
@@ -95,8 +95,7 @@ EntityTreeView::EntityTreeView(Entity *rootEntity) : UIElement() {
 	
 	EntityBrowserData *data = new EntityBrowserData();
 	data->entity = rootEntity;
-	treeContainer->getRootNode()->setUserData((void*) data)	;
-	
+	treeContainer->getRootNode()->setUserData((void*) data)	;	
 	
 	addChild(treeContainer);	
 	
@@ -111,6 +110,17 @@ EntityTreeView::EntityTreeView(Entity *rootEntity) : UIElement() {
 	
 }
 
+void EntityTreeView::setRootEntity(ScreenEntity *entity) {
+	rootEntity = entity;
+	EntityBrowserData *oldData = (EntityBrowserData*)treeContainer->getRootNode()->getUserData();
+	if(oldData)
+		delete oldData;
+	
+	EntityBrowserData *data = new EntityBrowserData();
+	data->entity = rootEntity;
+	treeContainer->getRootNode()->setUserData((void*) data)	;	
+}
+
 void EntityTreeView::syncNodeToEntity(UITree *node, Entity *entity) {
 
 	// remove non existing and set proper ids, 
@@ -284,6 +294,12 @@ PolycodeScreenEditorMain::PolycodeScreenEditorMain() {
 	baseEntity->addChild(objectBaseEntity);
 	objectBaseEntity->processInputEvents = true;
 
+	sizePreviewShape = new ScreenShape(ScreenShape::SHAPE_RECT, 100, 100);
+//	baseEntity->addChild(sizePreviewShape);
+	sizePreviewShape->setColor(1.0, 1.0, 1.0, 0.0);
+	sizePreviewShape->strokeEnabled = true;
+	sizePreviewShape->strokeColor = Color(1.0, 0.3, 0.0, 0.8);
+	
 	screenPreviewShape = new ScreenShape(ScreenShape::SHAPE_RECT, 1, 1);
 	baseEntity->addChild(screenPreviewShape);
 	screenPreviewShape->setColor(1.0, 1.0, 1.0, 0.0);
@@ -342,8 +358,7 @@ PolycodeScreenEditorMain::PolycodeScreenEditorMain() {
 	previewInstance->getResourceEntry()->reloadOnFileModify = true;
 	previewInstance->getResourceEntry()->addEventListener(this, Event::RESOURCE_RELOAD_EVENT);
 	
-	CoreServices::getInstance()->getResourceManager()->addResource(previewInstance->getResourceEntry());
-	
+	CoreServices::getInstance()->getResourceManager()->addResource(previewInstance->getResourceEntry());	
 
 	grid = false;
 	setGrid(16);
@@ -1583,18 +1598,25 @@ void PolycodeScreenEditorMain::selectEntity(ScreenEntity *entity) {
 	selectedEntities.push_back(entity);
 	
 	resetSelectedEntityTransforms();
-		
-	currentLayer->focusChild(entity);
 	
-	if(entity->getEntityProp("editor_type") != "layer" && entity->getEntityProp("editor_type") != "root") {	
+	ScreenEntity *parent = NULL;
+	parent = (ScreenEntity*)entity->getParentEntity();
+	if(parent) {
+		parent->focusChild(entity);
+	}
+	
+	if(entity->getEntityProp("editor_type") != "layer" && entity != layerBaseEntity) {	
 		transform2dSheet->entity = entity;
 	}
 	
-	if(entity->getEntityProp("editor_type") != "root") {
+	if(entity != layerBaseEntity && entity->getEntityProp("editor_type") != "layer") {
 		entitySheet->entity = entity;
 		entityPropSheet->entity = entity;
 	} else {
-		entitySheet->entity = entity;	
+		entitySheet->entity = entity;
+		if(entity == layerBaseEntity) {
+			entityPropSheet->entity = entity;		
+		}
 	}
 
 	if(dynamic_cast<ScreenParticleEmitter*>(entity)) {
@@ -1621,12 +1643,12 @@ void PolycodeScreenEditorMain::selectEntity(ScreenEntity *entity) {
 		soundSheet->sound = ((ScreenSound*) entity);
 	}
 	
-	if(dynamic_cast<ScreenEntityInstance*>(entity)) {
+	if(dynamic_cast<ScreenEntityInstance*>(entity) && entity != layerBaseEntity) {
 		instanceSheet->instance = ((ScreenEntityInstance*) entity);
 	}
 			
 		
-	if(entity->getEntityProp("editor_type") != "layer" && entity->getEntityProp("editor_type") != "root") {
+	if(entity->getEntityProp("editor_type") != "layer" && entity != layerBaseEntity) {
 		screenTransform->visible = true;
 		screenTransform->enabled = true;	
 		screenTransformShape->visible = true;
@@ -1652,6 +1674,9 @@ void PolycodeScreenEditorMain::resizePreviewScreen() {
 	previewAspectRatio = aspects[aspectComboBox->getSelectedIndex()];
 	Number scaleVal = 1.0/atof(scaleInput->getText().c_str());		
 	screenPreviewShape->setShapeSize(1.0/scaleVal * previewAspectRatio * objectBaseEntity->getScale().x, 1.0/scaleVal * objectBaseEntity->getScale().x);
+	
+	sizePreviewShape->setShapeSize(16.0f * objectBaseEntity->getScale().x, 22.0f * objectBaseEntity->getScale().x);
+
 }
 
 void PolycodeScreenEditorMain::setRefVisibility(bool val) {
@@ -1675,9 +1700,9 @@ void PolycodeScreenEditorMain::handleEvent(Event *event) {
 	
 	if(event->getEventCode() == Event::RESOURCE_RELOAD_EVENT && event->getEventType() == "") {
 			ScreenEntityInstanceResourceEntry *entry = dynamic_cast<ScreenEntityInstanceResourceEntry*>(event->getDispatcher());
-			if(entry) {
-				applyEditorProperties(entry->getInstance()->getRootEntity());
-				applyEditorOnly(entry->getInstance()->getRootEntity());				
+			if(entry) {	
+				applyEditorProperties(entry->getInstance());
+				applyEditorOnlyChildren(entry->getInstance());				
 			}
 	} else if(event->getEventCode() == UIEvent::CHANGE_EVENT && event->getEventType() == "UIEvent") {
 
@@ -1758,16 +1783,33 @@ void PolycodeScreenEditorMain::handleEvent(Event *event) {
 				break;
 				case Polycode::KEY_BACKSPACE:
 				{
-					if(selectedEntity) {
-						if(selectedEntity->hasFocus) {
+					if(selectedEntity) {					
+						if(selectedEntity->hasFocus) {					
+						if(selectedEntity == layerBaseEntity) {
+							PolycodeConsole::print("You cannot delete the root entity.\n");
+						} else if(selectedEntity->getEntityProp("editor_type") == "layer" && layers.size() == 1) {
+							PolycodeConsole::print("You cannot delete the last layer.\n");						
+						} else {
 							selectedEntity->ownsChildren = true;
 							selectedEntity->getParentEntity()->removeChild(selectedEntity);
+					
+							if(selectedEntity->getEntityProp("editor_type") == "layer") {
+								for(int i=0; i < layers.size(); i++) {
+									if(layers[i] == selectedEntity) {
+										layers.erase(layers.begin()+i);
+									}
+								}
+							}
+							
 							if(selectedEntity == currentLayer) {
 								currentLayer = NULL;
+								currentLayer = layers[0];
+								treeView->targetLayer = currentLayer;
 							}							
 							delete selectedEntity;
 							selectEntity(NULL);							
-							
+							treeView->Refresh();
+						}
 						}
 					}
 				}
@@ -2181,7 +2223,6 @@ PolycodeScreenEditor::PolycodeScreenEditor() : PolycodeEditor(true){
 	propSizer = new PropertiesSizer();
 	mainSizer->addRightChild(propSizer);
 	
-	editorMain->layerBaseEntity->setEntityProp("editor_type", "root");
 	treeView = new EntityTreeView(editorMain->layerBaseEntity);
 	treeView->addEventListener(this, Event::CHANGE_EVENT);
 
@@ -2311,7 +2352,7 @@ void PolycodeScreenEditor::saveEntityToObjectEntry(ScreenEntity *entity, ObjectE
 		}
 	}
 
-	if(dynamic_cast<ScreenEntityInstance*>(entity)) {
+	if(dynamic_cast<ScreenEntityInstance*>(entity) && entity != editorMain->layerBaseEntity) {
 		if(!(*(entry))["type"])
 			entry->addChild("type", "ScreenEntityInstance");
 		ScreenEntityInstance *instance = (ScreenEntityInstance*) entity;
@@ -2477,7 +2518,7 @@ void PolycodeScreenEditor::saveFile() {
 	ObjectEntry *children = saveObject.root.addChild("root");
 	
 	saveEntityToObjectEntry(editorMain->layerBaseEntity, children);	
-//	saveObject.saveToXML(filePath);
+//	saveObject.saveToXML("/Users/ivansafrin/Desktop/test2.xml");
 	saveObject.saveToBinary(filePath);
 }
 
@@ -2521,20 +2562,27 @@ PolycodeScreenEditor::~PolycodeScreenEditor() {
 	delete editorMain;
 }
 
+void PolycodeScreenEditorMain::applyEditorOnlyChildren(ScreenEntity *entity) {
+	for(int i=0; i < entity->getNumChildren(); i++) {
+		applyEditorOnly((ScreenEntity*)entity->getChildAtIndex(i));
+	}
+}
+
 void PolycodeScreenEditorMain::applyEditorProperties(ScreenEntity *entity) {
 	
 	for(int i=0; i < entity->getNumChildren(); i++) {
 		applyEditorProperties((ScreenEntity*)entity->getChildAtIndex(i));
 	}
 
-	if(dynamic_cast<ScreenEntityInstance*>(entity)) {
+	if(dynamic_cast<ScreenEntityInstance*>(entity) && entity != layerBaseEntity) {
 		ScreenEntityInstance *instance = (((ScreenEntityInstance*)entity));
 		instance->cloneUsingReload = true;
-		applyEditorOnly(instance->getRootEntity());
-		instance->getResourceEntry()->reloadOnFileModify = true;
-		instance->getResourceEntry()->addEventListener(this, Event::RESOURCE_RELOAD_EVENT);
-		CoreServices::getInstance()->getResourceManager()->addResource(instance->getResourceEntry());
-		
+		applyEditorOnlyChildren(instance);
+		instance->getResourceEntry()->reloadOnFileModify = true;		
+		if(!CoreServices::getInstance()->getResourceManager()->hasResource(instance->getResourceEntry())) { 
+			instance->getResourceEntry()->addEventListener(this, Event::RESOURCE_RELOAD_EVENT);
+			CoreServices::getInstance()->getResourceManager()->addResource(instance->getResourceEntry());
+		}
 		entity->setWidth(50);
 		entity->setHeight(50);		
 	} else if(dynamic_cast<ScreenShape*>(entity)) {
@@ -2547,7 +2595,7 @@ void PolycodeScreenEditorMain::applyEditorProperties(ScreenEntity *entity) {
 	} else if(dynamic_cast<ScreenParticleEmitter*>(entity)) {
 		createParticleRef((ScreenParticleEmitter*)entity);		
 	} else {	
-		if(entity->getEntityProp("editor_type") != "root" && entity->getEntityProp("editor_type") != "layer") {
+		if(entity != layerBaseEntity && entity->getEntityProp("editor_type") != "layer") {
 			entity->setWidth(50);
 			entity->setHeight(50);						
 			createEntityRef(entity);
@@ -2571,12 +2619,11 @@ void PolycodeScreenEditorMain::applyEditorProperties(ScreenEntity *entity) {
 		
 bool PolycodeScreenEditor::openFile(OSFileEntry filePath) {
 	PolycodeEditor::openFile(filePath);	
-	
-	
+		
 	ScreenEntityInstance *loadedInstance = new ScreenEntityInstance(filePath.fullPath);
 	
-	editorMain->layerBaseEntity = loadedInstance->getRootEntity();
-	editorMain->objectBaseEntity->addChild(loadedInstance->getRootEntity());
+	editorMain->layerBaseEntity = loadedInstance;
+	editorMain->objectBaseEntity->addChild(loadedInstance);
 
 	editorMain->applyEditorProperties(editorMain->layerBaseEntity);
 
@@ -2585,12 +2632,16 @@ bool PolycodeScreenEditor::openFile(OSFileEntry filePath) {
 	} else {
 		editorMain->currentLayer = (ScreenEntity*)editorMain->layerBaseEntity->getChildAtIndex(0);
 		treeView->targetLayer = editorMain->currentLayer;
+		
+		for(int i=0; i < editorMain->layerBaseEntity->getNumChildren(); i++) {
+			editorMain->layers.push_back((ScreenEntity*)editorMain->layerBaseEntity->getChildAtIndex(i));
+		}
 	}
 
 	((ScreenEntity*)(editorMain->layerBaseEntity->getParentEntity()))->moveChildBottom(editorMain->layerBaseEntity);
 
 	if(treeView) {
-		treeView->rootEntity = editorMain->layerBaseEntity;
+		treeView->setRootEntity(editorMain->layerBaseEntity);
 		treeView->Refresh();
 	}
 	return true;