From ad1c6fb4abd51924dbf18372ea4ad7c9d456ffb8 Mon Sep 17 00:00:00 2001 From: fgnm Date: Sat, 2 Apr 2022 16:07:14 +0200 Subject: [PATCH] * Add option to rename Library Actions * Improve `CommandManager` * Improve Auto Save --- hyperlap2d-common-api | 2 +- .../editor/controller/BootstrapCommand.java | 2 + .../commands/AddToLibraryCommand.java | 2 +- .../EntityModifyRevertibleCommand.java | 2 +- .../commands/HistoricRevertibleCommand.java | 8 ++++ .../commands/RenameLibraryActionCommand.java | 29 ++++++++++++ .../commands/ShowNotificationCommand.java | 6 +++ .../commands/TransactiveCommand.java | 2 +- .../resource/ChangeLibraryActionCommand.java | 45 +++++++++++++++++++ .../editor/proxy/CommandManager.java | 17 +++---- .../view/menu/HyperLap2DMenuBarMediator.java | 10 ++++- .../editor/view/ui/UIDropDownMenu.java | 1 + .../view/ui/UIDropDownMenuMediator.java | 1 + 13 files changed, 111 insertions(+), 16 deletions(-) create mode 100644 src/main/java/games/rednblack/editor/controller/commands/HistoricRevertibleCommand.java create mode 100644 src/main/java/games/rednblack/editor/controller/commands/RenameLibraryActionCommand.java create mode 100644 src/main/java/games/rednblack/editor/controller/commands/resource/ChangeLibraryActionCommand.java diff --git a/hyperlap2d-common-api b/hyperlap2d-common-api index e764fc4f..17e7125a 160000 --- a/hyperlap2d-common-api +++ b/hyperlap2d-common-api @@ -1 +1 @@ -Subproject commit e764fc4f3cab50501504a837e863ef22de1a19f5 +Subproject commit 17e7125aa95c8fdda3771b37c8af70e68e056a33 diff --git a/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java b/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java index 7437fb7a..8cb8c357 100644 --- a/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java +++ b/src/main/java/games/rednblack/editor/controller/BootstrapCommand.java @@ -69,6 +69,7 @@ public class BootstrapCommand extends SimpleCommand { facade.registerCommand(MsgAPI.ACTION_REPLACE_SPINE_ANIMATION_DATA, ReplaceSpineCommand::new); facade.registerCommand(MsgAPI.ACTION_ADD_TO_LIBRARY, AddToLibraryCommand::new); facade.registerCommand(MsgAPI.ACTION_ADD_TO_LIBRARY_ACTION, AddToLibraryAction::new); + facade.registerCommand(MsgAPI.ACTION_CHANGE_LIBRARY_ACTION, ChangeLibraryActionCommand::new); facade.registerCommand(MsgAPI.ACTION_CONVERT_TO_BUTTON, ConvertToButtonCommand::new); facade.registerCommand(MsgAPI.ACTION_GROUP_ITEMS, ConvertToCompositeCommand::new); @@ -114,6 +115,7 @@ public class BootstrapCommand extends SimpleCommand { facade.registerCommand(MsgAPI.ACTION_DUPLICATE_LIBRARY_ACTION, DuplicateLibraryAction::new); facade.registerCommand(MsgAPI.ACTION_EXPORT_LIBRARY_ITEM, ExportLibraryItemCommand::new); facade.registerCommand(MsgAPI.ACTION_EXPORT_ACTION_ITEM, ExportActionCommand::new); + facade.registerCommand(MsgAPI.ACTION_RENAME_ACTION_ITEM, RenameLibraryActionCommand::new); facade.registerCommand(MsgAPI.ACTION_DELETE_PARTICLE_EFFECT, DeleteParticleEffect::new); facade.registerCommand(MsgAPI.ACTION_DELETE_TALOS_VFX, DeleteTalosVFX::new); facade.registerCommand(MsgAPI.ACTION_DELETE_SPINE_ANIMATION_RESOURCE, DeleteSpineAnimation::new); diff --git a/src/main/java/games/rednblack/editor/controller/commands/AddToLibraryCommand.java b/src/main/java/games/rednblack/editor/controller/commands/AddToLibraryCommand.java index 3de6c23c..715a630c 100644 --- a/src/main/java/games/rednblack/editor/controller/commands/AddToLibraryCommand.java +++ b/src/main/java/games/rednblack/editor/controller/commands/AddToLibraryCommand.java @@ -31,7 +31,7 @@ import java.util.HashMap; /** * Created by azakhary on 4/28/2015. */ -public class AddToLibraryCommand extends RevertibleCommand { +public class AddToLibraryCommand extends HistoricRevertibleCommand { private String createdLibraryItemName; private CompositeItemVO overwritten; diff --git a/src/main/java/games/rednblack/editor/controller/commands/EntityModifyRevertibleCommand.java b/src/main/java/games/rednblack/editor/controller/commands/EntityModifyRevertibleCommand.java index 2c248aa4..1954060e 100644 --- a/src/main/java/games/rednblack/editor/controller/commands/EntityModifyRevertibleCommand.java +++ b/src/main/java/games/rednblack/editor/controller/commands/EntityModifyRevertibleCommand.java @@ -33,7 +33,7 @@ import java.util.HashMap; /** * Created by azakhary on 6/15/2015. */ -public abstract class EntityModifyRevertibleCommand extends RevertibleCommand { +public abstract class EntityModifyRevertibleCommand extends HistoricRevertibleCommand { @Override public void callDoAction() { diff --git a/src/main/java/games/rednblack/editor/controller/commands/HistoricRevertibleCommand.java b/src/main/java/games/rednblack/editor/controller/commands/HistoricRevertibleCommand.java new file mode 100644 index 00000000..173a9ef8 --- /dev/null +++ b/src/main/java/games/rednblack/editor/controller/commands/HistoricRevertibleCommand.java @@ -0,0 +1,8 @@ +package games.rednblack.editor.controller.commands; + +/** + * Wrapper class to {@link RevertibleCommand} to tells {@link games.rednblack.editor.proxy.CommandManager} save command + * in revertible history list. + */ +public abstract class HistoricRevertibleCommand extends RevertibleCommand { +} diff --git a/src/main/java/games/rednblack/editor/controller/commands/RenameLibraryActionCommand.java b/src/main/java/games/rednblack/editor/controller/commands/RenameLibraryActionCommand.java new file mode 100644 index 00000000..43159606 --- /dev/null +++ b/src/main/java/games/rednblack/editor/controller/commands/RenameLibraryActionCommand.java @@ -0,0 +1,29 @@ +package games.rednblack.editor.controller.commands; + +import com.kotcrab.vis.ui.util.dialog.Dialogs; +import com.kotcrab.vis.ui.util.dialog.InputDialogAdapter; +import games.rednblack.editor.controller.SandboxCommand; +import games.rednblack.h2d.common.MsgAPI; +import org.puremvc.java.interfaces.INotification; + +public class RenameLibraryActionCommand extends SandboxCommand { + private static final String CLASS_NAME = "games.rednblack.editor.controller.commands.resource.RenameActionCommand"; + public static final String DONE = CLASS_NAME + "DONE"; + + @Override + public void execute(INotification notification) { + super.execute(notification); + + String libraryActionName = notification.getBody(); + + Dialogs.showInputDialog(sandbox.getUIStage(), "Rename Action", "Name", false, new InputDialogAdapter() { + @Override + public void finished(String input) { + String[] payload = new String[2]; + payload[0] = libraryActionName; + payload[1] = input; + facade.sendNotification(MsgAPI.ACTION_CHANGE_LIBRARY_ACTION, payload); + } + }).setText(libraryActionName); + } +} diff --git a/src/main/java/games/rednblack/editor/controller/commands/ShowNotificationCommand.java b/src/main/java/games/rednblack/editor/controller/commands/ShowNotificationCommand.java index 081e5e9e..01e7e013 100644 --- a/src/main/java/games/rednblack/editor/controller/commands/ShowNotificationCommand.java +++ b/src/main/java/games/rednblack/editor/controller/commands/ShowNotificationCommand.java @@ -6,9 +6,15 @@ import games.rednblack.h2d.common.HyperLog; import org.puremvc.java.interfaces.INotification; public class ShowNotificationCommand extends SandboxCommand { + private static final String CLASS_NAME = "games.rednblack.editor.controller.commands.ShowNotificationCommand"; + public static final String TYPE_CLEAR_STACK = CLASS_NAME + ".CLEAR_STACK"; @Override public void execute(INotification notification) { + if (TYPE_CLEAR_STACK.equals(notification.getType())) { + sandbox.getToastManager().clear(); + } + String text = notification.getBody(); final MessageToast messageToast = new MessageToast(text); messageToast.pad(10); diff --git a/src/main/java/games/rednblack/editor/controller/commands/TransactiveCommand.java b/src/main/java/games/rednblack/editor/controller/commands/TransactiveCommand.java index 86d94c9a..f6ee5cb6 100644 --- a/src/main/java/games/rednblack/editor/controller/commands/TransactiveCommand.java +++ b/src/main/java/games/rednblack/editor/controller/commands/TransactiveCommand.java @@ -6,7 +6,7 @@ import org.puremvc.java.interfaces.INotification; /** * Created by CyberJoe on 7/25/2015. */ -public abstract class TransactiveCommand extends RevertibleCommand { +public abstract class TransactiveCommand extends HistoricRevertibleCommand { protected Array commands = new Array(); diff --git a/src/main/java/games/rednblack/editor/controller/commands/resource/ChangeLibraryActionCommand.java b/src/main/java/games/rednblack/editor/controller/commands/resource/ChangeLibraryActionCommand.java new file mode 100644 index 00000000..a72726f5 --- /dev/null +++ b/src/main/java/games/rednblack/editor/controller/commands/resource/ChangeLibraryActionCommand.java @@ -0,0 +1,45 @@ +package games.rednblack.editor.controller.commands.resource; + +import games.rednblack.editor.controller.commands.HistoricRevertibleCommand; +import games.rednblack.editor.proxy.ProjectManager; +import games.rednblack.editor.renderer.data.GraphVO; +import games.rednblack.h2d.common.MsgAPI; + +public class ChangeLibraryActionCommand extends HistoricRevertibleCommand { + + private final ProjectManager projectManager; + + public ChangeLibraryActionCommand() { + projectManager = facade.retrieveProxy(ProjectManager.NAME); + } + + @Override + public void doAction() { + String[] payload = notification.getBody(); + String oldName = payload[0]; + String newName = payload[1]; + + GraphVO action = projectManager.currentProjectInfoVO.libraryActions.get(oldName); + if (action != null) { + projectManager.currentProjectInfoVO.libraryActions.remove(oldName); + projectManager.currentProjectInfoVO.libraryActions.put(newName, action); + + facade.sendNotification(MsgAPI.LIBRARY_ACTIONS_UPDATED); + } + } + + @Override + public void undoAction() { + String[] payload = notification.getBody(); + String oldName = payload[0]; + String newName = payload[1]; + + GraphVO action = projectManager.currentProjectInfoVO.libraryActions.get(newName); + if (action != null) { + projectManager.currentProjectInfoVO.libraryActions.remove(newName); + projectManager.currentProjectInfoVO.libraryActions.put(oldName, action); + + facade.sendNotification(MsgAPI.LIBRARY_ACTIONS_UPDATED); + } + } +} diff --git a/src/main/java/games/rednblack/editor/proxy/CommandManager.java b/src/main/java/games/rednblack/editor/proxy/CommandManager.java index 326e7930..7169f8b1 100644 --- a/src/main/java/games/rednblack/editor/proxy/CommandManager.java +++ b/src/main/java/games/rednblack/editor/proxy/CommandManager.java @@ -19,11 +19,9 @@ package games.rednblack.editor.proxy; import games.rednblack.editor.HyperLap2DFacade; -import games.rednblack.editor.controller.commands.EntityModifyRevertibleCommand; +import games.rednblack.editor.controller.commands.HistoricRevertibleCommand; import games.rednblack.editor.controller.commands.RevertibleCommand; -import games.rednblack.editor.controller.commands.TransactiveCommand; -import games.rednblack.editor.view.menu.FileMenu; -import games.rednblack.h2d.common.MenuAPI; +import games.rednblack.h2d.common.MsgAPI; import org.puremvc.java.patterns.proxy.Proxy; import java.util.ArrayList; @@ -54,8 +52,7 @@ public class CommandManager extends Proxy { } commands.add(revertibleCommand); cursor = commands.indexOf(revertibleCommand); - if (revertibleCommand instanceof EntityModifyRevertibleCommand - || revertibleCommand instanceof TransactiveCommand) { + if (revertibleCommand instanceof HistoricRevertibleCommand) { modifiedCursor++; autoSave(); } @@ -75,8 +72,7 @@ public class CommandManager extends Proxy { } cursor--; - if (command instanceof EntityModifyRevertibleCommand - || command instanceof TransactiveCommand) { + if (command instanceof HistoricRevertibleCommand) { modifiedCursor--; autoSave(); } @@ -105,8 +101,7 @@ public class CommandManager extends Proxy { command.callDoAction(); command.setStateDone(true); - if (command instanceof EntityModifyRevertibleCommand - || command instanceof TransactiveCommand) { + if (command instanceof HistoricRevertibleCommand) { modifiedCursor++; autoSave(); } @@ -131,6 +126,6 @@ public class CommandManager extends Proxy { private void autoSave() { SettingsManager settingsManager = facade.retrieveProxy(SettingsManager.NAME); if (settingsManager.editorConfigVO.autoSave) - facade.sendNotification(FileMenu.SAVE_PROJECT, null, MenuAPI.FILE_MENU); + facade.sendNotification(MsgAPI.AUTO_SAVE_PROJECT); } } diff --git a/src/main/java/games/rednblack/editor/view/menu/HyperLap2DMenuBarMediator.java b/src/main/java/games/rednblack/editor/view/menu/HyperLap2DMenuBarMediator.java index 09f1ef4c..1c3985fd 100644 --- a/src/main/java/games/rednblack/editor/view/menu/HyperLap2DMenuBarMediator.java +++ b/src/main/java/games/rednblack/editor/view/menu/HyperLap2DMenuBarMediator.java @@ -22,6 +22,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import games.rednblack.editor.HyperLap2DApp; import games.rednblack.editor.HyperLap2DFacade; +import games.rednblack.editor.controller.commands.ShowNotificationCommand; import games.rednblack.editor.data.manager.PreferencesManager; import games.rednblack.editor.proxy.CommandManager; import games.rednblack.editor.proxy.ProjectManager; @@ -82,7 +83,8 @@ public class HyperLap2DMenuBarMediator extends Mediator { //General ProjectManager.PROJECT_OPENED, HyperLap2DMenuBar.RECENT_LIST_MODIFIED, - MsgAPI.CREATE + MsgAPI.CREATE, + MsgAPI.AUTO_SAVE_PROJECT }; } @@ -113,6 +115,7 @@ public class HyperLap2DMenuBarMediator extends Mediator { } private void handleGeneralNotification(INotification notification) { + Sandbox sandbox = Sandbox.getInstance(); switch (notification.getName()) { case ProjectManager.PROJECT_OPENED: onProjectOpened(); @@ -120,6 +123,11 @@ public class HyperLap2DMenuBarMediator extends Mediator { case MsgAPI.CREATE: viewComponent.setProjectOpen(false); break; + case MsgAPI.AUTO_SAVE_PROJECT: + SceneVO vo = sandbox.sceneVoFromItems(); + projectManager.saveCurrentProject(vo); + facade.sendNotification(MsgAPI.SHOW_NOTIFICATION, "Auto Save successfully", ShowNotificationCommand.TYPE_CLEAR_STACK); + break; } } diff --git a/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenu.java b/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenu.java index 2640c144..ba94575c 100644 --- a/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenu.java +++ b/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenu.java @@ -52,6 +52,7 @@ public class UIDropDownMenu extends H2DPopupMenu { actionNames.put(MsgAPI.ACTION_EXPORT_LIBRARY_ITEM, "Export"); actionNames.put(MsgAPI.ACTION_EXPORT_ACTION_ITEM, "Export"); + actionNames.put(MsgAPI.ACTION_RENAME_ACTION_ITEM, "Rename"); actionNames.put(MsgAPI.ACTION_DELETE_IMAGE_RESOURCE, "Delete"); actionNames.put(MsgAPI.ACTION_DELETE_LIBRARY_ITEM, "Delete"); actionNames.put(MsgAPI.ACTION_DELETE_PARTICLE_EFFECT, "Delete"); diff --git a/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenuMediator.java b/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenuMediator.java index f549c761..5a89f2ef 100644 --- a/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenuMediator.java +++ b/src/main/java/games/rednblack/editor/view/ui/UIDropDownMenuMediator.java @@ -96,6 +96,7 @@ public class UIDropDownMenuMediator extends Mediator { actionSets.get(LIBRARY_ACTION_ACTION_SET).add(MsgAPI.ACTION_DUPLICATE_LIBRARY_ACTION); actionSets.get(LIBRARY_ACTION_ACTION_SET).add(MsgAPI.ACTION_DELETE_LIBRARY_ACTION); actionSets.get(LIBRARY_ACTION_ACTION_SET).add(MsgAPI.ACTION_EXPORT_ACTION_ITEM); + actionSets.get(LIBRARY_ACTION_ACTION_SET).add(MsgAPI.ACTION_RENAME_ACTION_ITEM); actionSets.put(PARTICLE_ACTION_SET, new Array<>()); actionSets.get(PARTICLE_ACTION_SET).add(MsgAPI.ACTION_DELETE_PARTICLE_EFFECT);