Преглед на файлове

Sprite editor now resized properly

Ivan Safrin преди 12 години
родител
ревизия
4f60bb29fb

+ 2 - 0
Core/Contents/Include/PolySceneSprite.h

@@ -115,6 +115,8 @@ class _PolyExport SceneSprite : public ScenePrimitive
 		bool loadFromFile(const String& fileName);
 		bool loadFromFile(const String& fileName);
 		
 		
 		void reloadSprite();
 		void reloadSprite();
+		
+		void removeAnimation(SpriteAnimation *animation);
 	
 	
 		/**
 		/**
 		* Pauses or unpauses the current sprite animation.
 		* Pauses or unpauses the current sprite animation.

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

@@ -181,6 +181,15 @@ SceneSprite::~SceneSprite() {
 	
 	
 }
 }
 
 
+void SceneSprite::removeAnimation(SpriteAnimation *animation) {
+	for(int i=0; i < animations.size(); i++) {
+		if(animations[i] == animation) {
+			animations.erase(animations.begin()+i);
+			return;
+		}
+	}
+}
+
 void SceneSprite::recalculateSpriteDimensions() {
 void SceneSprite::recalculateSpriteDimensions() {
 	if(!texture)
 	if(!texture)
 		return;
 		return;

+ 6 - 6
IDE/Contents/Include/PolycodeProps.h

@@ -371,7 +371,8 @@ class PropSheet : public UIElement {
 		void setCollapsed(bool val);
 		void setCollapsed(bool val);
 		
 		
 		void addProp(PropProp *prop);
 		void addProp(PropProp *prop);
-		
+		void setTopPadding(Number padding);
+				
 		String caption;
 		String caption;
 		String type;
 		String type;
 		
 		
@@ -384,6 +385,7 @@ class PropSheet : public UIElement {
 		UIImageButton *expandButton;
 		UIImageButton *expandButton;
 		
 		
 		bool collapsed;
 		bool collapsed;
+		Number propTopPadding;
 		
 		
 		bool customUndoHandler;
 		bool customUndoHandler;
 		
 		
@@ -513,18 +515,16 @@ class EntityPropSheet : public PropSheet {
 		void handleEvent(Event *event);
 		void handleEvent(Event *event);
 		void Update();
 		void Update();
 		void refreshProps();
 		void refreshProps();
-
 		void applyPropActionData(PolycodeEditorPropActionData *data);
 		void applyPropActionData(PolycodeEditorPropActionData *data);
 
 
+
 		UIButton *addButton;
 		UIButton *addButton;
 		
 		
 		Entity *entity;
 		Entity *entity;
 		Entity *lastEntity;
 		Entity *lastEntity;
 		
 		
-		int lastNumProps;
-		
-		int removeIndex;		
-		
+		int lastNumProps;		
+		int removeIndex;
 };
 };
 
 
 class UILabelSheet : public PropSheet {
 class UILabelSheet : public PropSheet {

+ 66 - 32
IDE/Contents/Include/PolycodeSpriteEditor.h

@@ -28,11 +28,13 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
-class SpriteAnimationEntry : public UIElement {
+class SpriteAnimationEntry : public PropProp {
 	public:
 	public:
 		SpriteAnimationEntry(SpriteAnimation *animation);
 		SpriteAnimationEntry(SpriteAnimation *animation);
 		~SpriteAnimationEntry();
 		~SpriteAnimationEntry();
 		
 		
+		void setPropWidth(Number width);
+		
 		void handleEvent(Event *event);
 		void handleEvent(Event *event);
 		
 		
 		UITextInput *nameInput;
 		UITextInput *nameInput;
@@ -45,41 +47,73 @@ class SpriteAnimationEntry : public UIElement {
 		SpriteAnimation *animation;
 		SpriteAnimation *animation;
 };
 };
 
 
-class PolycodeSpriteEditor : public PolycodeEditor {
+
+class SpritePreviewProp : public PropProp {
 	public:
 	public:
-	PolycodeSpriteEditor();
-	virtual ~PolycodeSpriteEditor();
-	
-	void handleEvent(Event *event);
-	
-	bool openFile(OSFileEntry filePath);
-	void Resize(int x, int y);
-	
-	void saveFile();
-			
+		SpritePreviewProp();
+		void setSprite(SceneSprite *sprite);	
+		void setPropWidth(Number width);		
+		void setSpriteScale(Number scale);		
+		SceneSprite *previewSprite;
+		Number propWidth;
+};
+
+class SpritePreviewSheet : public PropSheet {
+	public:
+		SpritePreviewSheet();
+		void handleEvent(Event *event);
+		void setSprite(SceneSprite *sprite);
+		
+	protected:
+		ComboProp *zoomProp;
+		SpritePreviewProp *previewProp;
+};
+
+class SpriteAnimationsSheet : public PropSheet {
+	public:
+		SpriteAnimationsSheet();
+		void setSprite(SceneSprite *sprite);		
+		void refreshAnimationEntries();	
+		void handleEvent(Event *event);
+		void Update();
+		void Resize(Number width, Number height);
+		
 	protected:
 	protected:
 	
 	
-	void refreshAnimationEntries();
-	
-	std::vector<SpriteAnimationEntry*> animationEntries;
-	
-	UIElement *animationsAnchor;
-	
-	UIButton *addAnimationButton;
-	
-	PropList *propList;
-	
-	UIRect *headerBg;	
-	
-	UIComboBox *zoomBox;
-	
-	TextureProp *textureProp;
-	NumberProp *widthProp;
-	NumberProp *heightProp;	
-	
-	bool initialLoad;
+		int removeIndex;
+		SceneSprite *sprite;
+		int lastNumProps;
+		UILabel *animHelpLabel;
+		UIButton *addAnimationButton;
+};
+
+class PolycodeSpriteEditor : public PolycodeEditor {
+	public:
+		PolycodeSpriteEditor();
+		virtual ~PolycodeSpriteEditor();
+		
+		void handleEvent(Event *event);
+		
+		bool openFile(OSFileEntry filePath);
+		void Resize(int x, int y);
+		
+		void saveFile();
+				
+	protected:
 	
 	
-	SceneSprite *previewSprite;
+		SpriteAnimationsSheet *animationsSheet;
+			
+		PropList *propList;		
+		UIRect *headerBg;	
+		
+		TextureProp *textureProp;
+		NumberProp *widthProp;
+		NumberProp *heightProp;	
+		
+		bool initialLoad;
+		
+		SceneSprite *previewSprite;		
+		SpritePreviewSheet *previewPropSheet;
 };
 };
 
 
 class PolycodeSpriteEditorFactory : public PolycodeEditorFactory {
 class PolycodeSpriteEditorFactory : public PolycodeEditorFactory {

+ 6 - 2
IDE/Contents/Source/PolycodeProps.cpp

@@ -238,7 +238,7 @@ PropSheet::PropSheet(String caption, String type) : UIElement() {
 	expandButton->enabled = false;
 	expandButton->enabled = false;
 		
 		
 	collapsed  = false;
 	collapsed  = false;
-	
+	propTopPadding = 0;
 	propHeight = 30;
 	propHeight = 30;
 }
 }
 
 
@@ -285,13 +285,17 @@ PropSheet::~PropSheet() {
 
 
 }
 }
 
 
+void PropSheet::setTopPadding(Number padding) {
+	propTopPadding = padding;
+}
+
 void PropSheet::Resize(Number width, Number height) {
 void PropSheet::Resize(Number width, Number height) {
 	setWidth(width);
 	setWidth(width);
 	setHeight(height);
 	setHeight(height);
 	
 	
 	bg->Resize(width, 30);
 	bg->Resize(width, 30);
 	
 	
-	Number yOffset = 0;
+	Number yOffset = propTopPadding;
 	
 	
 	for(int i=0; i < props.size(); i++) {
 	for(int i=0; i < props.size(); i++) {
 		props[i]->setPosition(0, yOffset);
 		props[i]->setPosition(0, yOffset);

+ 220 - 138
IDE/Contents/Source/PolycodeSpriteEditor.cpp

@@ -28,7 +28,7 @@ extern PolycodeFrame *globalFrame;
 extern UIGlobalMenu *globalMenu;
 extern UIGlobalMenu *globalMenu;
 
 
 
 
-SpriteAnimationEntry::SpriteAnimationEntry(SpriteAnimation *animation) : UIElement() {
+SpriteAnimationEntry::SpriteAnimationEntry(SpriteAnimation *animation) : PropProp("","") {
 	
 	
 	this->animation = animation;
 	this->animation = animation;
 	
 	
@@ -60,6 +60,20 @@ SpriteAnimationEntry::SpriteAnimationEntry(SpriteAnimation *animation) : UIEleme
 	playButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	playButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	addChild(playButton);
 	addChild(playButton);
 	
 	
+	setHeight(30);
+	
+}
+
+void SpriteAnimationEntry::setPropWidth(Number width) {
+	Number fieldsWidth = width - 40 - 15 - PROP_PADDING;
+	
+	nameInput->Resize(fieldsWidth * 0.4, nameInput->getHeight());
+	framesInput->Resize(fieldsWidth * 0.4, framesInput->getHeight());
+	speedInput->Resize(fieldsWidth * 0.2, speedInput->getHeight());
+	
+	framesInput->setPositionX(nameInput->getPosition().x + nameInput->getWidth() + 5);
+	speedInput->setPositionX(framesInput->getPosition().x + framesInput->getWidth() + 5);
+	playButton->setPositionX(speedInput->getPosition().x + speedInput->getWidth() + 5);
 }
 }
 
 
 void SpriteAnimationEntry::handleEvent(Event *event) {
 void SpriteAnimationEntry::handleEvent(Event *event) {
@@ -99,6 +113,177 @@ SpriteAnimationEntry::~SpriteAnimationEntry() {
 	delete playButton;
 	delete playButton;
 }
 }
 
 
+SpritePreviewSheet::SpritePreviewSheet() : PropSheet("SPRITE PREVIEW", ""){
+	zoomProp = new ComboProp("Zoom");
+	addProp(zoomProp);
+	zoomProp->addEventListener(this, Event::CHANGE_EVENT);	
+	
+	zoomProp->comboEntry->addComboItem("No Zoom");
+	zoomProp->comboEntry->addComboItem("Zoom 2x");
+	zoomProp->comboEntry->addComboItem("Zoom 4x");
+	zoomProp->comboEntry->addComboItem("Zoom 8x");
+	zoomProp->comboEntry->addComboItem("Zoom 16x");
+
+	zoomProp->set(0);
+	
+	previewProp = new SpritePreviewProp();
+	addProp(previewProp);
+}
+
+void SpritePreviewSheet::handleEvent(Event *event) {
+	if(event->getDispatcher() == zoomProp) {
+		switch (zoomProp->get()) {
+			case 1:
+				previewProp->setSpriteScale(2.0);
+			break;
+			case 2:
+				previewProp->setSpriteScale(4.0);
+			break;
+			case 3:
+				previewProp->setSpriteScale(8.0);			
+			break;
+			case 4:
+				previewProp->setSpriteScale(16.0);			
+			break;
+			default:
+				previewProp->setSpriteScale(1.0);
+			break;
+		}
+		
+		if(previewProp->previewSprite) {
+			propHeight = (previewProp->previewSprite->getHeight() * previewProp->previewSprite->getScale().y) + zoomProp->getHeight()+ 50;						
+			dispatchEvent(new Event(), Event::COMPLETE_EVENT);
+		}
+	}
+	PropSheet::handleEvent(event);
+}
+
+void SpritePreviewSheet::setSprite(SceneSprite *sprite) {
+	previewProp->setSprite(sprite);
+	propHeight = sprite->getHeight() + zoomProp->getHeight()+ 50;	
+	dispatchEvent(new Event(), Event::COMPLETE_EVENT);
+}
+
+SpritePreviewProp::SpritePreviewProp() : PropProp("", "") {
+	previewSprite = NULL;
+}
+
+void SpritePreviewProp::setPropWidth(Number width) {
+	if(previewSprite) {
+		previewSprite->setPosition(((width-(previewSprite->getWidth()* previewSprite->getScale().x))/2.0) - propContents->getPosition().x, 0.0);
+	}
+	propWidth = width;
+}
+
+void SpritePreviewProp::setSprite(SceneSprite *sprite) {
+	previewSprite = sprite;
+	propContents->addChild(sprite);	
+}
+
+void SpritePreviewProp::setSpriteScale(Number scale) {
+	if(!previewSprite) {
+		return;
+	}
+	previewSprite->setScale(scale, scale);
+	setPropWidth(propWidth);
+}
+
+SpriteAnimationsSheet::SpriteAnimationsSheet() : PropSheet("ANIMATIONS", "") {
+	animHelpLabel = new UILabel("Comma separated frames, ranges or repeats (e.g. 1,2,3-7,8x5)", 11);
+	contents->addChild(animHelpLabel);
+
+	propHeight = 230;
+		
+	addAnimationButton = new UIButton("Add Animation", 100);
+	contents->addChild(addAnimationButton);
+	addAnimationButton->addEventListener(this, UIEvent::CLICK_EVENT);
+	
+	setTopPadding(30);
+	lastNumProps = 0;
+	sprite = NULL;
+	removeIndex = -1;
+}
+
+void SpriteAnimationsSheet::Update() {
+	if(removeIndex != -1) {
+		SpriteAnimationEntry *entryProp = (SpriteAnimationEntry*) props[removeIndex];
+		sprite->removeAnimation(entryProp->animation);
+		removeIndex = -1;
+		refreshAnimationEntries();		
+	}
+}
+
+void SpriteAnimationsSheet::Resize(Number width, Number height) {
+	addAnimationButton->Resize(width - 60, addAnimationButton->getHeight());
+	animHelpLabel->setPosition((width-animHelpLabel->getWidth())/2.0, 0.0);
+	
+	PropSheet::Resize(width, height);
+}
+
+void SpriteAnimationsSheet::handleEvent(Event *event) {
+
+	if(event->getDispatcher() == addAnimationButton) {
+		if(sprite) {
+			sprite->addAnimation("new_animation", "0", 0.1);
+			refreshAnimationEntries();
+		}
+	} else {
+		for(int i=0; i < props.size(); i++) {
+			if(event->getDispatcher() == props[i]) {
+				SpriteAnimationEntry *entryProp = (SpriteAnimationEntry*) props[i];
+				
+				if(event->getEventCode() == Event::CANCEL_EVENT) {
+					removeIndex = i;
+					break;
+				} else if(event->getEventCode() == Event::CHANGE_EVENT) {
+					sprite->playAnimation(entryProp->nameInput->getText(), 0, false);
+				}
+			}
+		}
+	}
+	
+	PropSheet::handleEvent(event);
+}
+
+void SpriteAnimationsSheet::setSprite(SceneSprite *sprite) {
+	this->sprite = sprite;
+	refreshAnimationEntries();
+}
+
+void SpriteAnimationsSheet::refreshAnimationEntries() {
+
+	if(!sprite) {
+		return;
+	}
+
+	for(int i=0; i < props.size(); i++) {
+		contents->removeChild(props[i]);
+		props[i]->removeAllHandlersForListener(this);
+		delete props[i];
+	}
+	props.clear();
+	propHeight = 30;
+	
+	for(int i=0; i < sprite->getNumAnimations(); i++) {			
+		SpriteAnimation *animation = sprite->getAnimationAtIndex(i);		
+		SpriteAnimationEntry *newEntry = new SpriteAnimationEntry(animation);
+		newEntry->addEventListener(this, Event::CHANGE_EVENT);
+		newEntry->addEventListener(this, Event::CANCEL_EVENT);
+		addProp(newEntry);
+		propHeight += 30;
+	}
+	
+	addAnimationButton->setPosition(15, propHeight);	
+	propHeight += 70;	
+	
+	if(lastNumProps != sprite->getNumAnimations()) {
+		dispatchEvent(new Event(), Event::COMPLETE_EVENT);
+	}
+	
+	lastNumProps = sprite->getNumAnimations();		
+	Resize(getWidth(), getHeight());	
+}
+
 PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 	headerBg = new UIRect(10,10);
 	headerBg = new UIRect(10,10);
 	addChild(headerBg);
 	addChild(headerBg);
@@ -110,6 +295,9 @@ PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 	propList = new PropList("SPRITE EDITOR");
 	propList = new PropList("SPRITE EDITOR");
 	addChild(propList);
 	addChild(propList);
 	propList->setPosition(0, 0);
 	propList->setPosition(0, 0);
+		
+	previewPropSheet = new SpritePreviewSheet();
+	propList->addPropSheet(previewPropSheet);
 
 
 	PropSheet *baseProps = new PropSheet("IMAGE OPTIONS", "");
 	PropSheet *baseProps = new PropSheet("IMAGE OPTIONS", "");
 	propList->addPropSheet(baseProps);
 	propList->addPropSheet(baseProps);
@@ -131,136 +319,39 @@ PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 			
 			
 	baseProps->propHeight = 180;
 	baseProps->propHeight = 180;
 	
 	
-	UILabel *label = new UILabel("PREVIEW", 18, "section", Label::ANTIALIAS_FULL);
-	label->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderFontColor"));
-	addChild(label);
-	label->setPosition(390, 36);
+	animationsSheet = new SpriteAnimationsSheet();
+	propList->addPropSheet(animationsSheet);	
 			
 			
-				
-	PropSheet *animationProps = new PropSheet("ANIMATIONS", "");
-	propList->addPropSheet(animationProps);
-
-	UILabel *animHelpLabel = new UILabel("Comma separated frames, ranges or repeats (e.g. 1,2,3-7,8x5)", 11);
-	animHelpLabel->color.a = 1.0;
-	animationProps->addChild(animHelpLabel);
-	animHelpLabel->setPosition(5, 40);
-
-
-	animationProps->propHeight = 230;
-	
-	animationsAnchor = new UIElement();
-	animationProps->contents->addChild(animationsAnchor);
-	
-	addAnimationButton = new UIButton("Add Animation", 100);
-	animationsAnchor->addChild(addAnimationButton);
-	addAnimationButton->addEventListener(this, UIEvent::CLICK_EVENT);
-	
 	propList->updateProps();
 	propList->updateProps();
 	
 	
-	zoomBox = new UIComboBox(globalMenu, 100);
-	addChild(zoomBox);
-	zoomBox->setPosition(490, 37);
-	zoomBox->addEventListener(this, UIEvent::CHANGE_EVENT);
-	
-	zoomBox->addComboItem("No Zoom");
-	zoomBox->addComboItem("Zoom 2x");
-	zoomBox->addComboItem("Zoom 4x");
-	zoomBox->addComboItem("Zoom 8x");
-	zoomBox->addComboItem("Zoom 16x");
 }
 }
 
 
-void PolycodeSpriteEditor::refreshAnimationEntries() {
-	for(int i=0; i < animationEntries.size(); i++) {
-		animationEntries[i]->setPosition(0, 30 + (30*i));
-	}
-	addAnimationButton->setPosition(0, 30 + (animationEntries.size() * 30) + 10);
-}
-
-
 void PolycodeSpriteEditor::handleEvent(Event *event) {
 void PolycodeSpriteEditor::handleEvent(Event *event) {
 
 
-	if(event->getDispatcher() == zoomBox) {
-		switch (zoomBox->getSelectedIndex()) {
-			case 1:
-				previewSprite->setScale(2.0, 2.0);			
-			break;
-			case 2:
-				previewSprite->setScale(4.0, 4.0);			
-			break;
-			case 3:
-				previewSprite->setScale(8.0, 8.0);			
-			break;
-			case 4:
-				previewSprite->setScale(16.0, 16.0);			
-			break;
-			default:
-				previewSprite->setScale(1.0, 1.0);
-			break;
+	if(!initialLoad) {	
+		if(event->getDispatcher() == textureProp) {
+			previewSprite->setTexture(textureProp->get());
+			previewSprite->recalculateSpriteDimensions();
+			previewSprite->getTexture()->reloadOnFileModify = true;
 		}
 		}
-	}
-	
-	if(!initialLoad) {
-	
-	if(event->getDispatcher() == textureProp) {
-		previewSprite->setTexture(textureProp->get());
-		previewSprite->recalculateSpriteDimensions();
-		previewSprite->getTexture()->reloadOnFileModify = true;
-	}
 
 
-	if(event->getDispatcher() == widthProp) {
-		previewSprite->setSpriteSize(widthProp->get(), heightProp->get());
-		previewSprite->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, widthProp->get(), heightProp->get());
-		previewSprite->recalculateSpriteDimensions();		
-	}
-
-	if(event->getDispatcher() == heightProp) {
-		previewSprite->setSpriteSize(widthProp->get(), heightProp->get());
-		previewSprite->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, widthProp->get(), heightProp->get());
-		previewSprite->recalculateSpriteDimensions();		
-	}
-	
-	}
+		if(event->getDispatcher() == widthProp) {
+			previewSprite->setSpriteSize(widthProp->get(), heightProp->get());
+			previewSprite->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, widthProp->get(), heightProp->get());
+			previewSprite->recalculateSpriteDimensions();		
+		}
 
 
-	if(event->getDispatcher() == addAnimationButton) {
-		SpriteAnimationEntry *newEntry = new SpriteAnimationEntry(previewSprite->addAnimation("default", "0", 0.5));
-		newEntry->addEventListener(this, Event::CHANGE_EVENT);
-		newEntry->addEventListener(this, Event::CANCEL_EVENT);		
-		animationsAnchor->addChild(newEntry);
-		animationEntries.push_back(newEntry);
-		refreshAnimationEntries();		
-	}
-	
-	bool doRefresh = false;
-	for(int i=0; i < animationEntries.size(); i++) {
-		if(event->getDispatcher() == animationEntries[i]) {
-			if(event->getEventCode() == Event::CANCEL_EVENT) {
-				animationsAnchor->removeChild(animationEntries[i]);		
-				animationEntries.erase(animationEntries.begin()+i);	
-				doRefresh = true;
-				break;
-			}
-			
-			if(event->getEventCode() == Event::CHANGE_EVENT) {
-				previewSprite->playAnimation(animationEntries[i]->nameInput->getText(), 0, false);
-			}			
+		if(event->getDispatcher() == heightProp) {
+			previewSprite->setSpriteSize(widthProp->get(), heightProp->get());
+			previewSprite->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, widthProp->get(), heightProp->get());
+			previewSprite->recalculateSpriteDimensions();		
 		}
 		}
 	}
 	}
-	
-	if(doRefresh) {
-		refreshAnimationEntries();
-	}	
 }
 }
 
 
-PolycodeSpriteEditor::~PolycodeSpriteEditor() {
-	for(int i=0; i < animationEntries.size(); i++) {
-		delete animationEntries[i];
-	}
-	
-	delete animationsAnchor;
-	delete addAnimationButton;
+PolycodeSpriteEditor::~PolycodeSpriteEditor() {	
 	delete propList;
 	delete propList;
 	delete headerBg;
 	delete headerBg;
-	delete zoomBox;
 	delete textureProp;
 	delete textureProp;
 	delete widthProp;
 	delete widthProp;
 	delete heightProp;
 	delete heightProp;
@@ -270,33 +361,23 @@ PolycodeSpriteEditor::~PolycodeSpriteEditor() {
 bool PolycodeSpriteEditor::openFile(OSFileEntry filePath) {
 bool PolycodeSpriteEditor::openFile(OSFileEntry filePath) {
 					
 					
 	initialLoad = true;
 	initialLoad = true;
-	
+		
 	previewSprite = new SceneSprite(filePath.fullPath);
 	previewSprite = new SceneSprite(filePath.fullPath);
-	addChild(previewSprite);
 	previewSprite->setAnchorPoint(-1.0, -1.0, 0.0);
 	previewSprite->setAnchorPoint(-1.0, -1.0, 0.0);
 	previewSprite->setPosition(400, 80);				
 	previewSprite->setPosition(400, 80);				
-	zoomBox->setSelectedIndex(0);
 	previewSprite->getTexture()->reloadOnFileModify = true;	
 	previewSprite->getTexture()->reloadOnFileModify = true;	
-	
-	for(int i=0;i < previewSprite->getNumAnimations(); i++) {
-		SpriteAnimation *animation = previewSprite->getAnimationAtIndex(i);
-		SpriteAnimationEntry *newEntry = new SpriteAnimationEntry(animation);
-		newEntry->addEventListener(this, Event::CHANGE_EVENT);
-		newEntry->addEventListener(this, Event::CANCEL_EVENT);		
-		animationsAnchor->addChild(newEntry);
-		animationEntries.push_back(newEntry);	
-	}
+	previewPropSheet->setSprite(previewSprite);
 	
 	
 	if(previewSprite->getNumAnimations() > 0) {
 	if(previewSprite->getNumAnimations() > 0) {
 		previewSprite->playAnimation(previewSprite->getAnimationAtIndex(0)->name, 0, false);
 		previewSprite->playAnimation(previewSprite->getAnimationAtIndex(0)->name, 0, false);
 	}
 	}
 	
 	
+	animationsSheet->setSprite(previewSprite);
+	
 	widthProp->set(previewSprite->getSpriteSize().x);
 	widthProp->set(previewSprite->getSpriteSize().x);
 	heightProp->set(previewSprite->getSpriteSize().y);
 	heightProp->set(previewSprite->getSpriteSize().y);
 		
 		
 	textureProp->set(previewSprite->getTexture());
 	textureProp->set(previewSprite->getTexture());
-	
-	refreshAnimationEntries();	
 				
 				
 	PolycodeEditor::openFile(filePath);
 	PolycodeEditor::openFile(filePath);
 	
 	
@@ -315,20 +396,21 @@ void PolycodeSpriteEditor::saveFile() {
 	image->addChild("fileName", previewSprite->getTexture()->getResourcePath());
 	image->addChild("fileName", previewSprite->getTexture()->getResourcePath());
 	
 	
 	ObjectEntry *animations = saveObject.root.addChild("animations");
 	ObjectEntry *animations = saveObject.root.addChild("animations");
-			
-	for(int i=0; i < animationEntries.size(); i++) {
-		ObjectEntry *animation = animations->addChild("animation");
-		animation->addChild("name", animationEntries[i]->nameInput->getText());
-		animation->addChild("frames", animationEntries[i]->framesInput->getText());
-		animation->addChild("speed", atof(animationEntries[i]->speedInput->getText().c_str()));	
-	}			
-			
+
+	for(int i=0; i < previewSprite->getNumAnimations(); i++) {
+		ObjectEntry *animation = animations->addChild("animation");	
+		SpriteAnimation *anim = previewSprite->getAnimationAtIndex(i);
+		
+		animation->addChild("name", anim->name);
+		animation->addChild("frames", anim->frames);
+		animation->addChild("speed", anim->speed);			
+	}
 	saveObject.saveToXML(filePath);
 	saveObject.saveToXML(filePath);
 }
 }
 
 
 void PolycodeSpriteEditor::Resize(int x, int y) {
 void PolycodeSpriteEditor::Resize(int x, int y) {
 	headerBg->Resize(x, 30);
 	headerBg->Resize(x, 30);
-	propList->Resize(370, y);
+	propList->Resize(x, y);
 	propList->updateProps();	
 	propList->updateProps();	
 	PolycodeEditor::Resize(x,y);	
 	PolycodeEditor::Resize(x,y);	
 }
 }