diff --git a/data/gui.xml b/data/gui.xml index cca7531e7..e46b0f8ef 100644 --- a/data/gui.xml +++ b/data/gui.xml @@ -538,7 +538,7 @@ - + diff --git a/data/strings/en.ini b/data/strings/en.ini index eb8044466..048464ce4 100644 --- a/data/strings/en.ini +++ b/data/strings/en.ini @@ -279,6 +279,8 @@ Flip_Canvas = Canvas Flip_Horizontally = Horizontally Flip_Selection = Selection Flip_Vertically = Vertically +FrameProperties_All = Frame Properties of all frames +FrameProperties_Current = Frame Properties of the current range FrameProperties = Frame Properties FrameTagProperties = Tag Properties FullscreenMode = Toggle Fullscreen Mode @@ -312,6 +314,7 @@ LayerVisibility = Layer Visibility LinkCels = Links Cels LoadMask = Load Selection LoadPalette = Load Palette +LoadDefaultPalette = Load Default Palette MaskAll = Mask All MaskByColor = Mask By Color MaskContent = Mask Content @@ -403,6 +406,8 @@ SaveFileAs = Save File As SaveFileCopyAs = Export SaveMask = Save Selection SavePalette = Save Palette +SavePaletteAsDefault = Save Palette as Default +SavePaletteAsPreset = Save Palette as Preset Screenshot = Screenshot Screenshot_Open = Take & Open Screenshot Screenshot_Save = Take & Save Screenshot diff --git a/src/app/commands/cmd_change_pixel_format.cpp b/src/app/commands/cmd_change_pixel_format.cpp index 6f835c436..500013497 100644 --- a/src/app/commands/cmd_change_pixel_format.cpp +++ b/src/app/commands/cmd_change_pixel_format.cpp @@ -482,9 +482,6 @@ protected: bool onChecked(Context* context) override; void onExecute(Context* context) override; std::string onGetFriendlyName() const override; - const bool isSkipListing(const Params& params) const override { - return m_format == IMAGE_INDEXED && params.size() > 1; - } private: bool m_showDlg; diff --git a/src/app/commands/cmd_export_sprite_sheet.h b/src/app/commands/cmd_export_sprite_sheet.h index f774e156b..2e8566d55 100644 --- a/src/app/commands/cmd_export_sprite_sheet.h +++ b/src/app/commands/cmd_export_sprite_sheet.h @@ -64,8 +64,8 @@ public: protected: bool onEnabled(Context* context) override; void onExecute(Context* context) override; - const bool isSkipListing(const Params& params) const override { - return !params.empty(); + bool isListed(const Params& params, const KeyContext& context) const override { + return params.empty(); } }; diff --git a/src/app/commands/cmd_flip.h b/src/app/commands/cmd_flip.h index 46948e31d..710f9f02f 100644 --- a/src/app/commands/cmd_flip.h +++ b/src/app/commands/cmd_flip.h @@ -26,7 +26,7 @@ namespace app { bool onEnabled(Context* context) override; void onExecute(Context* context) override; std::string onGetFriendlyName() const override; - const bool isSkipListing(const Params& params) const override { + bool isListed(const Params& params, const KeyContext& context) const override { return !params.empty(); } diff --git a/src/app/commands/cmd_frame_properties.cpp b/src/app/commands/cmd_frame_properties.cpp index d7b9115d6..530092eb2 100644 --- a/src/app/commands/cmd_frame_properties.cpp +++ b/src/app/commands/cmd_frame_properties.cpp @@ -37,10 +37,7 @@ protected: void onLoadParams(const Params& params) override; bool onEnabled(Context* context) override; void onExecute(Context* context) override; - const bool isSkipListing(const Params& params) const override { - return !params.empty() && - strcmp(params.begin()->second.c_str(), "all") == 0; - } + std::string onGetFriendlyName() const override; private: enum Target { @@ -143,6 +140,17 @@ void FramePropertiesCommand::onExecute(Context* context) } } +std::string FramePropertiesCommand::onGetFriendlyName() const +{ + switch (m_target) { + case CURRENT_RANGE: + return Strings::commands_FrameProperties_Current() ; + case ALL_FRAMES: + return Strings::commands_FrameProperties_All(); + } + return Command::onGetFriendlyName(); +} + Command* CommandFactory::createFramePropertiesCommand() { return new FramePropertiesCommand; diff --git a/src/app/commands/cmd_goto_frame.cpp b/src/app/commands/cmd_goto_frame.cpp index d5c21b761..e7e4a8a1a 100644 --- a/src/app/commands/cmd_goto_frame.cpp +++ b/src/app/commands/cmd_goto_frame.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2019-2022 Igara Studio S.A. +// Copyright (C) 2019-2024 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of @@ -87,6 +87,9 @@ protected: return (frame > 0 ? frame-1: last); } + bool isListed(const Params& params, const KeyContext& context) const override { + return context == KeyContext::Normal; + } }; class GotoNextFrameCommand : public GotoCommand { @@ -100,9 +103,8 @@ protected: return (frame < last ? frame+1: 0); } - - const bool isSkipListing(const Params& params) const override { - return params.empty(); + bool isListed(const Params& params, const KeyContext& context) const override { + return context == KeyContext::Normal; } }; diff --git a/src/app/commands/cmd_keyboard_shortcuts.cpp b/src/app/commands/cmd_keyboard_shortcuts.cpp index 23d75cdc0..f47fbcef3 100644 --- a/src/app/commands/cmd_keyboard_shortcuts.cpp +++ b/src/app/commands/cmd_keyboard_shortcuts.cpp @@ -607,7 +607,7 @@ private: key->type() == KeyType::Quicktool || key->type() == KeyType::WheelAction || key->type() == KeyType::DragAction || - key->isSkipListing()) { + key->isListed()) { continue; } diff --git a/src/app/commands/cmd_launch.cpp b/src/app/commands/cmd_launch.cpp index cab094891..3217ef815 100644 --- a/src/app/commands/cmd_launch.cpp +++ b/src/app/commands/cmd_launch.cpp @@ -20,11 +20,14 @@ namespace app { class LaunchCommand : public Command { public: LaunchCommand(); - const bool isSkipListing(const Params& params) const override { return true; } protected: void onLoadParams(const Params& params) override; void onExecute(Context* context) override; + std::string onGetFriendlyName() const override; + bool isListed(const Params& params, const KeyContext& context) const override { + return params.get("path") != ""; + } private: enum Type { Url }; @@ -60,6 +63,11 @@ void LaunchCommand::onExecute(Context* context) } } +std::string LaunchCommand::onGetFriendlyName() const +{ + return Command::onGetFriendlyName() + ": " + m_path; +} + Command* CommandFactory::createLaunchCommand() { return new LaunchCommand; diff --git a/src/app/commands/cmd_layer_properties.cpp b/src/app/commands/cmd_layer_properties.cpp index d37a9341c..20a43485d 100644 --- a/src/app/commands/cmd_layer_properties.cpp +++ b/src/app/commands/cmd_layer_properties.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2020-2023 Igara Studio S.A. +// Copyright (C) 2020-2024 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of @@ -56,6 +56,9 @@ public: protected: bool onEnabled(Context* context) override; void onExecute(Context* context) override; + bool isListed(const Params& params, const KeyContext& context) const override { + return context == KeyContext::Normal; + } }; class LayerPropertiesWindow; diff --git a/src/app/commands/cmd_load_palette.cpp b/src/app/commands/cmd_load_palette.cpp index 3dfc1a12e..4c0e6c22e 100644 --- a/src/app/commands/cmd_load_palette.cpp +++ b/src/app/commands/cmd_load_palette.cpp @@ -32,9 +32,7 @@ public: protected: void onLoadParams(const Params& params) override; void onExecute(Context* context) override; - const bool isSkipListing(const Params& params) const override { - return !params.empty(); - } + std::string onGetFriendlyName() const override; private: std::string m_preset; @@ -93,6 +91,14 @@ void LoadPaletteCommand::onExecute(Context* context) context->executeCommand(cmd); } +std::string LoadPaletteCommand::onGetFriendlyName() const +{ + std::string name = Command::onGetFriendlyName(); + if (m_preset == "default") + name = Strings::commands_LoadDefaultPalette(); + return name; +} + Command* CommandFactory::createLoadPaletteCommand() { return new LoadPaletteCommand; diff --git a/src/app/commands/cmd_modify_selection.cpp b/src/app/commands/cmd_modify_selection.cpp index bf9ed12da..ec94a4e92 100644 --- a/src/app/commands/cmd_modify_selection.cpp +++ b/src/app/commands/cmd_modify_selection.cpp @@ -45,8 +45,8 @@ protected: bool onEnabled(Context* context) override; void onExecute(Context* context) override; std::string onGetFriendlyName() const override; - const bool isSkipListing(const Params& params) const override { - return m_modifier == doc::algorithm::SelectionModifier::Contract; + bool isListed(const Params& params, const KeyContext& context) const override { + return !params.empty(); } private: diff --git a/src/app/commands/cmd_open_browser.cpp b/src/app/commands/cmd_open_browser.cpp index 7163e8eb6..5e5bc4d74 100644 --- a/src/app/commands/cmd_open_browser.cpp +++ b/src/app/commands/cmd_open_browser.cpp @@ -24,7 +24,10 @@ public: protected: void onLoadParams(const Params& params) override; void onExecute(Context* context) override; - const bool isSkipListing(const Params& params) const override { return true; } + std::string onGetFriendlyName() const override; + bool isListed(const Params& params, const KeyContext& context) const override { + return !params.empty(); + } private: std::string m_filename; @@ -45,6 +48,11 @@ void OpenBrowserCommand::onExecute(Context* context) App::instance()->mainWindow()->showBrowser(m_filename); } +std::string OpenBrowserCommand::onGetFriendlyName() const +{ + return Command::onGetFriendlyName() + ": " + m_filename; +} + Command* CommandFactory::createOpenBrowserCommand() { return new OpenBrowserCommand; diff --git a/src/app/commands/cmd_open_file.cpp b/src/app/commands/cmd_open_file.cpp index 158352717..748fffd0f 100644 --- a/src/app/commands/cmd_open_file.cpp +++ b/src/app/commands/cmd_open_file.cpp @@ -272,6 +272,21 @@ void OpenFileCommand::onExecute(Context* context) } } +std::string OpenFileCommand::onGetFriendlyName() const +{ + // TO DO: would be better to show the last part of the path + // via text size hint instead of a fixed number of chars. + auto uiScale = Preferences::instance().general.uiScale(); + auto scScale = Preferences::instance().general.screenScale(); + int pos(68.0 / double(uiScale) / double(scScale)); + return Command::onGetFriendlyName().append( + (m_filename.empty() ? + "" : + (": " + (m_filename.size() >= pos ? + m_filename.substr(m_filename.size() - pos, pos) : + m_filename)))); +} + Command* CommandFactory::createOpenFileCommand() { return new OpenFileCommand; diff --git a/src/app/commands/cmd_open_file.h b/src/app/commands/cmd_open_file.h index 17e3f6a94..7994bff40 100644 --- a/src/app/commands/cmd_open_file.h +++ b/src/app/commands/cmd_open_file.h @@ -33,9 +33,7 @@ namespace app { protected: void onLoadParams(const Params& params) override; void onExecute(Context* context) override; - const bool isSkipListing(const Params& params) const override { - return !params.empty(); - } + std::string onGetFriendlyName() const override; private: std::string m_filename; diff --git a/src/app/commands/cmd_run_script.cpp b/src/app/commands/cmd_run_script.cpp index ca010d9da..85ef143d3 100644 --- a/src/app/commands/cmd_run_script.cpp +++ b/src/app/commands/cmd_run_script.cpp @@ -39,7 +39,10 @@ protected: void onLoadParams(const Params& params) override; void onExecute(Context* context) override; std::string onGetFriendlyName() const override; - const bool isSkipListing(const Params& params) const override { return params.empty(); } + bool isListed(const Params& params, const KeyContext& context) const override + { + return !params.empty(); + } private: std::string m_filename; diff --git a/src/app/commands/cmd_save_palette.cpp b/src/app/commands/cmd_save_palette.cpp index b292b5208..435f99421 100644 --- a/src/app/commands/cmd_save_palette.cpp +++ b/src/app/commands/cmd_save_palette.cpp @@ -34,7 +34,7 @@ public: protected: void onLoadParams(const Params& params) override; void onExecute(Context* context) override; - const bool isSkipListing(const Params& params) const override { return !params.empty(); } + std::string onGetFriendlyName() const override; private: std::string m_preset; @@ -102,6 +102,15 @@ void SavePaletteCommand::onExecute(Context* ctx) } } +std::string SavePaletteCommand::onGetFriendlyName() const +{ + if (m_preset == "default") + return Strings::commands_SavePaletteAsDefault(); + else if (m_saveAsPreset) + return Strings::commands_SavePaletteAsPreset(); + return Command::onGetFriendlyName(); +} + Command* CommandFactory::createSavePaletteCommand() { return new SavePaletteCommand; diff --git a/src/app/commands/cmd_select_palette.cpp b/src/app/commands/cmd_select_palette.cpp index 50576d6d0..398dc6db4 100644 --- a/src/app/commands/cmd_select_palette.cpp +++ b/src/app/commands/cmd_select_palette.cpp @@ -45,8 +45,9 @@ protected: void onLoadParams(const Params& params) override; void onExecute(Context* context) override; std::string onGetFriendlyName() const override; - const bool isSkipListing(const Params& params) const override { - return params.empty(); + bool isListed(const Params& params, const KeyContext& context) const override + { + return !params.empty(); } private: diff --git a/src/app/commands/cmd_set_loop_section.cpp b/src/app/commands/cmd_set_loop_section.cpp index cc3dfdd2d..5d84fced7 100644 --- a/src/app/commands/cmd_set_loop_section.cpp +++ b/src/app/commands/cmd_set_loop_section.cpp @@ -1,4 +1,5 @@ // Aseprite +// Copyright (C) 2024 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of @@ -33,6 +34,9 @@ protected: void onLoadParams(const Params& params) override; bool onEnabled(Context* context) override; void onExecute(Context* context) override; + bool isListed(const Params& params, const KeyContext& context) const override { + return context == KeyContext::FramesSelection; + } Action m_action; doc::frame_t m_begin, m_end; diff --git a/src/app/commands/cmd_set_palette_entry_size.cpp b/src/app/commands/cmd_set_palette_entry_size.cpp index 77e3cb86a..2d18865f2 100644 --- a/src/app/commands/cmd_set_palette_entry_size.cpp +++ b/src/app/commands/cmd_set_palette_entry_size.cpp @@ -24,7 +24,9 @@ protected: void onLoadParams(const Params& params) override; bool onChecked(Context* context) override; void onExecute(Context* context) override; - const bool isSkipListing(const Params& params) const override { + std::string onGetFriendlyName() const override; + bool isListed(const Params& params, const KeyContext& context) const override + { return !params.empty(); } @@ -54,6 +56,11 @@ void SetPaletteEntrySizeCommand::onExecute(Context* context) ColorBar::instance()->getPaletteView()->setBoxSize(m_size); } +std::string SetPaletteEntrySizeCommand::onGetFriendlyName() const +{ + return Command::onGetFriendlyName() + " " + std::to_string(m_size); +} + Command* CommandFactory::createSetPaletteEntrySizeCommand() { return new SetPaletteEntrySizeCommand; diff --git a/src/app/commands/cmd_tiled_mode.cpp b/src/app/commands/cmd_tiled_mode.cpp index ffd6e7a66..96dd856d0 100644 --- a/src/app/commands/cmd_tiled_mode.cpp +++ b/src/app/commands/cmd_tiled_mode.cpp @@ -29,8 +29,9 @@ protected: bool onChecked(Context* context) override; void onExecute(Context* context) override; std::string onGetFriendlyName() const override; - const bool isSkipListing(const Params& params) const override { - return params.empty(); + bool isListed(const Params& params, const KeyContext& context) const override + { + return !params.empty(); } filters::TiledMode m_mode; diff --git a/src/app/commands/command.h b/src/app/commands/command.h index 71d2153bb..180df6d95 100644 --- a/src/app/commands/command.h +++ b/src/app/commands/command.h @@ -11,6 +11,7 @@ #include "app/commands/command_factory.h" #include "app/commands/command_ids.h" +#include "app/ui/key_context.h" #include @@ -36,12 +37,12 @@ namespace app { void loadParams(const Params& params); bool isEnabled(Context* context); bool isChecked(Context* context); - // Not all Commands must be listed on KeyBoard Shortcut list, so // this function returns if a key command should be listed or not. // Used on 'cmd_keyboard_shorcuts.cpp'. - virtual const bool isSkipListing(const Params& params) const { - return false; + virtual bool isListed(const Params& params, const KeyContext& context) const + { + return true; } protected: diff --git a/src/app/commands/screenshot.cpp b/src/app/commands/screenshot.cpp index a0df48399..ff143501e 100644 --- a/src/app/commands/screenshot.cpp +++ b/src/app/commands/screenshot.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2019-2021 Igara Studio S.A. +// Copyright (C) 2019-2024 Igara Studio S.A. // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -54,6 +54,9 @@ public: protected: void onExecute(Context* ctx) override; std::string onGetFriendlyName() const override; + bool isListed(const Params& params, const KeyContext& context) const override { + return !params.empty(); + } }; ScreenshotCommand::ScreenshotCommand() diff --git a/src/app/commands/set_playback_speed.cpp b/src/app/commands/set_playback_speed.cpp index 870131835..e112bc1f0 100644 --- a/src/app/commands/set_playback_speed.cpp +++ b/src/app/commands/set_playback_speed.cpp @@ -26,8 +26,9 @@ protected: bool onChecked(Context* ctx) override; void onExecute(Context* ctx) override; std::string onGetFriendlyName() const override; - const bool isSkipListing(const Params& params) const override { - return params.empty(); + bool isListed(const Params& params, const KeyContext& context) const override + { + return !params.empty(); } }; diff --git a/src/app/commands/tileset_mode.cpp b/src/app/commands/tileset_mode.cpp index 1777a93a1..1b383ba6f 100644 --- a/src/app/commands/tileset_mode.cpp +++ b/src/app/commands/tileset_mode.cpp @@ -54,8 +54,8 @@ protected: return Strings::commands_TilesetMode(mode); } - const bool isSkipListing(const Params& params) const override { - return params.empty(); + bool isListed(const Params& params, const KeyContext& context) const override { + return !params.empty(); } private: diff --git a/src/app/ui/key.h b/src/app/ui/key.h index e4e44975b..d168dc436 100644 --- a/src/app/ui/key.h +++ b/src/app/ui/key.h @@ -138,7 +138,7 @@ namespace app { const KeyboardShortcuts& globalKeys) const; bool isPressed() const; bool isLooselyPressed() const; - bool isSkipListing() const; + bool isListed() const; bool hasAccel(const ui::Accelerator& accel) const; bool hasUserDefinedAccels() const; diff --git a/src/app/ui/keyboard_shortcuts.cpp b/src/app/ui/keyboard_shortcuts.cpp index f6928897d..f80fa95ef 100644 --- a/src/app/ui/keyboard_shortcuts.cpp +++ b/src/app/ui/keyboard_shortcuts.cpp @@ -494,9 +494,9 @@ bool Key::isLooselyPressed() const return false; } -bool Key::isSkipListing() const +bool Key::isListed() const { - return type() == KeyType::Command && command()->isSkipListing(params()); + return type() != KeyType::Command || !command()->isListed(params(), keycontext()); } bool Key::hasAccel(const ui::Accelerator& accel) const