diff --git a/data/gui.xml b/data/gui.xml index 06a9f0f01..fd5496e6a 100644 --- a/data/gui.xml +++ b/data/gui.xml @@ -1080,6 +1080,9 @@ + + + diff --git a/data/strings/en.ini b/data/strings/en.ini index 2f82ed1a3..4c6183aad 100644 --- a/data/strings/en.ini +++ b/data/strings/en.ini @@ -1318,6 +1318,7 @@ ryb_color_wheel = RYB Color Wheel normal_map_color_wheel = Normal Map Color Wheel load_palette = L&oad Palette save_palette = S&ave Palette +save_palette_as_preset = Save Palette as Preset load_default_palette = Load Default Palette save_as_default_palette = Save as Default Palette create_palette_from_current_sprite = Create Palette from Current Sprite diff --git a/src/app/commands/cmd_save_palette.cpp b/src/app/commands/cmd_save_palette.cpp index 429599162..1d05b0f4d 100644 --- a/src/app/commands/cmd_save_palette.cpp +++ b/src/app/commands/cmd_save_palette.cpp @@ -35,6 +35,7 @@ protected: private: std::string m_preset; + bool m_save_as_preset; }; SavePaletteCommand::SavePaletteCommand() @@ -45,6 +46,7 @@ SavePaletteCommand::SavePaletteCommand() void SavePaletteCommand::onLoadParams(const Params& params) { m_preset = params.get("preset"); + m_save_as_preset = params.get("save_as_preset") == "true"; } void SavePaletteCommand::onExecute(Context* context) @@ -58,8 +60,9 @@ void SavePaletteCommand::onExecute(Context* context) else { base::paths exts = get_writable_palette_extensions(); base::paths selFilename; + std::string initialPath = m_save_as_preset ? get_preset_palettes_dir() : ""; if (!app::show_file_selector( - "Save Palette", "", exts, + "Save Palette", initialPath, exts, FileSelectorType::Save, selFilename)) return; diff --git a/src/app/modules/palettes.cpp b/src/app/modules/palettes.cpp index f6d515851..cd79a3a1c 100644 --- a/src/app/modules/palettes.cpp +++ b/src/app/modules/palettes.cpp @@ -161,12 +161,7 @@ bool set_current_palette(const Palette *_palette, bool forced) std::string get_preset_palette_filename(const std::string& preset, const std::string& dot_extension) { - ResourceFinder rf; - rf.includeUserDir(base::join_path("palettes", ".").c_str()); - std::string palettesDir = rf.getFirstOrCreateDefault(); - - if (!base::is_directory(palettesDir)) - base::make_directory(palettesDir); + std::string palettesDir = get_preset_palettes_dir(); return base::join_path(palettesDir, preset + dot_extension); } @@ -176,4 +171,16 @@ std::string get_default_palette_preset_name() return "default"; } +std::string get_preset_palettes_dir() +{ + ResourceFinder rf; + rf.includeUserDir(base::join_path("palettes", ".").c_str()); + std::string palettesDir = rf.getFirstOrCreateDefault(); + + if (!base::is_directory(palettesDir)) + base::make_directory(palettesDir); + + return palettesDir; +} + } // namespace app diff --git a/src/app/modules/palettes.h b/src/app/modules/palettes.h index 551b4bedf..52f953766 100644 --- a/src/app/modules/palettes.h +++ b/src/app/modules/palettes.h @@ -33,6 +33,7 @@ namespace app { std::string get_preset_palette_filename(const std::string& preset, const std::string& dot_extension); std::string get_default_palette_preset_name(); + std::string get_preset_palettes_dir(); } // namespace app