Просмотр исходного кода

Started on undo/saving in sprite editor

Ivan Safrin 10 лет назад
Родитель
Сommit
e828cb38a6

+ 18 - 0
IDE/Contents/Include/PolycodeSpriteEditor.h

@@ -29,6 +29,19 @@
 
 using namespace Polycode;
 
+class PolycodeSpriteEditorActionData : public PolycodeEditorActionData {
+public:
+    PolycodeSpriteEditorActionData() {
+        reverse = true;
+    }
+    
+    ~PolycodeSpriteEditorActionData() {
+    }
+
+    Sprite *sprite;
+    bool reverse;
+};
+
 class SpritePreview : public UIElement {
     public:
         SpritePreview(SpriteSet *spriteSet);
@@ -139,8 +152,10 @@ class SpriteBrowser : public UIElement {
     
         Sprite *getSelectedSpriteEntry();
     
+        PolycodeEditor *editor;
     protected:
     
+    
         UIRect *headerBg;
         SpriteSet *spriteSet;
     
@@ -314,6 +329,7 @@ class PolycodeSpriteEditor : public PolycodeEditor {
 		void Resize(int x, int y);
 		void saveFile();
     
+        void doAction(String actionName, PolycodeEditorActionData *data);
         void selectAll();
 				
 	protected:
@@ -324,6 +340,8 @@ class PolycodeSpriteEditor : public PolycodeEditor {
     
         UIHSizer *bottomSizer;
     
+        PolycodeSpriteEditorActionData *beforeData;
+    
         SpriteSheetEditor *spriteSheetEditor;
         SpriteBrowser *spriteBrowser;
         SpriteStateEditor *stateEditor;

+ 1 - 1
IDE/Contents/Source/PolycodeEditor.cpp

@@ -139,7 +139,7 @@ void PolycodeEditor::handleEvent(Event *event) {
 
 void PolycodeEditor::didAction(String actionName, PolycodeEditorActionData *beforeData, PolycodeEditorActionData *afterData, bool setFileChanged) {
 
-	printf("DID ACTION (pos: %d): %s\n", currentUndoPosition, actionName.c_str());
+//	printf("DID ACTION (pos: %d): %s\n", currentUndoPosition, actionName.c_str());
 	
 	if(setFileChanged) {
 		setHasChanges(true);

+ 29 - 0
IDE/Contents/Source/PolycodeSpriteEditor.cpp

@@ -654,6 +654,7 @@ void SpriteBrowser::handleEvent(Event *event) {
     } else if(event->getDispatcher() == globalFrame->textInputPopup) {
         if(event->getEventCode() == UIEvent::OK_EVENT) {
             if(globalFrame->textInputPopup->action == "newSprite") {
+                
                 Sprite *newEntry = new Sprite(globalFrame->textInputPopup->getValue());
                 
                 SpriteState *defaultState = new SpriteState(spriteSet, "default");
@@ -662,6 +663,15 @@ void SpriteBrowser::handleEvent(Event *event) {
                 spriteSet->addSpriteEntry(newEntry);
                 selectedEntry = newEntry;
                 refreshSprites();
+
+                PolycodeSpriteEditorActionData *beforeData = new PolycodeSpriteEditorActionData();
+                beforeData->sprite = newEntry;
+                
+                PolycodeSpriteEditorActionData *data = new PolycodeSpriteEditorActionData();
+                data->sprite = newEntry;
+                data->reverse = false;
+                editor->didAction("new_sprite", beforeData, data);
+                
             } else if(globalFrame->textInputPopup->action == "renameSprite") {
                 selectedEntry->setName(globalFrame->textInputPopup->getValue());
                 refreshSprites();
@@ -1868,6 +1878,7 @@ bool PolycodeSpriteEditor::openFile(OSFileEntry filePath) {
     spriteSheetEditor->addEventListener(this, Event::CHANGE_EVENT);
     
     spriteBrowser = new SpriteBrowser(sprite);
+    spriteBrowser->editor = this;
     bottomSizer->addLeftChild(spriteBrowser);
     spriteBrowser->addEventListener(this, Event::CHANGE_EVENT);
     
@@ -1895,6 +1906,24 @@ void PolycodeSpriteEditor::selectAll() {
     spriteSheetEditor->selectAll();
 }
 
+void PolycodeSpriteEditor::doAction(String actionName, PolycodeEditorActionData *data) {
+
+    PolycodeSpriteEditorActionData *spriteData = (PolycodeSpriteEditorActionData*)data;
+    
+    if(actionName == "new_sprite") {
+        if(spriteData->reverse) {
+            sprite->removeSprite(spriteData->sprite);
+            stateEditor->setSpriteEntry(NULL);
+        } else {
+            sprite->addSpriteEntry(spriteData->sprite);
+            stateEditor->setSpriteEntry(spriteData->sprite);
+        }
+        spriteBrowser->refreshSprites();
+        stateEditor->refreshStates();
+        
+    }
+}
+
 void PolycodeSpriteEditor::saveFile() {
     Object fileObject;
     fileObject.root.name = "sprite_set";