From 967c819a1899b95abf514ba9e3c64725a39bb31c Mon Sep 17 00:00:00 2001 From: David Capello Date: Fri, 26 Oct 2018 10:26:11 -0300 Subject: [PATCH] Add GotoFirst/LastFrameInTag commands --- data/gui.xml | 3 ++ data/strings/en.ini | 4 +++ src/app/commands/cmd_goto_frame.cpp | 44 +++++++++++++++++++++++++++++ src/app/commands/commands_list.h | 2 ++ 4 files changed, 53 insertions(+) diff --git a/data/gui.xml b/data/gui.xml index 1ff043872..c86a8e00c 100644 --- a/data/gui.xml +++ b/data/gui.xml @@ -780,6 +780,9 @@ + + + diff --git a/data/strings/en.ini b/data/strings/en.ini index 3d1209aa7..19fc02588 100644 --- a/data/strings/en.ini +++ b/data/strings/en.ini @@ -263,8 +263,10 @@ FrameProperties = Frame Properties FrameTagProperties = Frame Tag Properties FullscreenPreview = Fullscreen Preview GotoFirstFrame = Go to First Frame +GotoFirstFrameInTag = Go to First Frame In Tag GotoFrame = Go to Frame GotoLastFrame = Go to Last Frame +GotoLastFrameInTag = Go to Last Frame In Tag GotoNextFrame = Go to Next Frame GotoNextFrameWithSameTag = Go to Next Frame with same tag GotoNextLayer = Go to Next Layer @@ -756,6 +758,8 @@ frame_jump_to_first_frame = &First Frame frame_jump_to_previous_frame = &Previous Frame frame_jump_to_next_frame = &Next Frame frame_jump_to_last_frame = &Last Frame +frame_jump_to_first_frame_in_tag = First Frame In Tag +frame_jump_to_last_frame_in_tag = Last Frame In Tag frame_go_to_frame = &Go to Frame frame_play_animation = &Play Animation frame_constant_frame_rate = Constant Frame Rate diff --git a/src/app/commands/cmd_goto_frame.cpp b/src/app/commands/cmd_goto_frame.cpp index a98609028..0e2aa1c0f 100644 --- a/src/app/commands/cmd_goto_frame.cpp +++ b/src/app/commands/cmd_goto_frame.cpp @@ -59,6 +59,23 @@ protected: } }; +class GotoFirstFrameInTagCommand : public GotoCommand { +public: + GotoFirstFrameInTagCommand() + : GotoCommand(CommandId::GotoFirstFrameInTag()) { } + Command* clone() const override { return new GotoFirstFrameInTagCommand(*this); } + +protected: + frame_t onGetFrame(Editor* editor) override { + frame_t frame = editor->frame(); + FrameTag* tag = editor + ->getCustomizationDelegate() + ->getFrameTagProvider() + ->getFrameTagByFrame(frame, false); + return (tag ? tag->fromFrame(): 0); + } +}; + class GotoPreviousFrameCommand : public GotoCommand { public: GotoPreviousFrameCommand() @@ -137,6 +154,23 @@ protected: } }; +class GotoLastFrameInTagCommand : public GotoCommand { +public: + GotoLastFrameInTagCommand() + : GotoCommand(CommandId::GotoLastFrameInTag()) { } + Command* clone() const override { return new GotoLastFrameInTagCommand(*this); } + +protected: + frame_t onGetFrame(Editor* editor) override { + frame_t frame = editor->frame(); + FrameTag* tag = editor + ->getCustomizationDelegate() + ->getFrameTagProvider() + ->getFrameTagByFrame(frame, false); + return (tag ? tag->toFrame(): editor->sprite()->lastFrame()); + } +}; + class GotoFrameCommand : public GotoCommand { public: GotoFrameCommand() : GotoCommand(CommandId::GotoFrame()) @@ -243,6 +277,11 @@ Command* CommandFactory::createGotoFirstFrameCommand() return new GotoFirstFrameCommand; } +Command* CommandFactory::createGotoFirstFrameInTagCommand() +{ + return new GotoFirstFrameInTagCommand; +} + Command* CommandFactory::createGotoPreviousFrameCommand() { return new GotoPreviousFrameCommand; @@ -258,6 +297,11 @@ Command* CommandFactory::createGotoLastFrameCommand() return new GotoLastFrameCommand; } +Command* CommandFactory::createGotoLastFrameInTagCommand() +{ + return new GotoLastFrameInTagCommand; +} + Command* CommandFactory::createGotoNextFrameWithSameTagCommand() { return new GotoNextFrameWithSameTagCommand; diff --git a/src/app/commands/commands_list.h b/src/app/commands/commands_list.h index b8dfb4b3a..249717ae3 100644 --- a/src/app/commands/commands_list.h +++ b/src/app/commands/commands_list.h @@ -60,8 +60,10 @@ FOR_EACH_COMMAND(FrameProperties) FOR_EACH_COMMAND(FrameTagProperties) FOR_EACH_COMMAND(FullscreenPreview) FOR_EACH_COMMAND(GotoFirstFrame) +FOR_EACH_COMMAND(GotoFirstFrameInTag) FOR_EACH_COMMAND(GotoFrame) FOR_EACH_COMMAND(GotoLastFrame) +FOR_EACH_COMMAND(GotoLastFrameInTag) FOR_EACH_COMMAND(GotoNextFrame) FOR_EACH_COMMAND(GotoNextFrameWithSameTag) FOR_EACH_COMMAND(GotoNextLayer)