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