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