Improve preference resetting: window, brushes and preserve uuid

This commit is contained in:
Christian Kaiser 2024-12-17 17:42:22 -03:00 committed by David Capello
parent 2f2f522108
commit 039bdda695
5 changed files with 89 additions and 16 deletions

View File

@ -1551,6 +1551,9 @@ reset_installed = Remove installed themes, extensions, and palettes
reset_recents = Clear the recently opened file list (including pinned files) reset_recents = Clear the recently opened file list (including pinned files)
reset_perfile = Remove any per-file settings reset_perfile = Remove any per-file settings
reset_perfile_tooltip = These are specific to opened files and includes\nthings like grid options, background colors, etc. reset_perfile_tooltip = These are specific to opened files and includes\nthings like grid options, background colors, etc.
reset_window = Reset window sizes and placement
reset_brushes = Reset user brushes
reset_toggle = Toggle selection
reset = &Reset reset = &Reset
ok = &OK ok = &OK
apply = &Apply apply = &Apply

View File

@ -622,7 +622,11 @@
<check id="installed_reset" text="@.reset_installed" /> <check id="installed_reset" text="@.reset_installed" />
<check id="recent_reset" text="@.reset_recents" /> <check id="recent_reset" text="@.reset_recents" />
<check id="perfile_reset" text="@.reset_perfile" tooltip="@.reset_perfile_tooltip" /> <check id="perfile_reset" text="@.reset_perfile" tooltip="@.reset_perfile_tooltip" />
<check id="window_reset" text="@.reset_window" />
<check id="brushes_reset" text="@.reset_brushes" />
<separator horizontal="true" />
<hbox> <hbox>
<check id="reset_toggle" text="@.reset_toggle" />
<hbox expansive="true" /> <hbox expansive="true" />
<button id="reset_selected_button" text="@.reset" minwidth="60" /> <button id="reset_selected_button" text="@.reset" minwidth="60" />
</hbox> </hbox>

View File

@ -181,20 +181,7 @@ void save_xml_image(XMLElement* imageElem, const Image* image)
AppBrushes::AppBrushes() AppBrushes::AppBrushes()
{ {
m_standard.push_back(BrushRef(new Brush(kCircleBrushType, 7, 0))); init();
m_standard.push_back(BrushRef(new Brush(kSquareBrushType, 7, 0)));
m_standard.push_back(BrushRef(new Brush(kLineBrushType, 7, 44)));
std::string fn = userBrushesFilename();
if (base::is_file(fn)) {
try {
load(fn);
}
catch (const std::exception& ex) {
LOG(ERROR, "BRSH: Error loading user brushes from '%s': %s\n", fn.c_str(), ex.what());
}
}
m_userBrushesFilename = fn;
} }
AppBrushes::~AppBrushes() AppBrushes::~AppBrushes()
@ -213,6 +200,13 @@ AppBrushes::~AppBrushes()
} }
} }
void AppBrushes::reset()
{
m_standard.clear();
init();
ItemsChange();
}
AppBrushes::slot_id AppBrushes::addBrushSlot(const BrushSlot& brush) AppBrushes::slot_id AppBrushes::addBrushSlot(const BrushSlot& brush)
{ {
// Use an empty slot // Use an empty slot
@ -303,6 +297,25 @@ bool AppBrushes::isBrushSlotLocked(slot_id slot) const
static const int kBrushFlags = int(BrushSlot::Flags::BrushType) | int(BrushSlot::Flags::BrushSize) | static const int kBrushFlags = int(BrushSlot::Flags::BrushType) | int(BrushSlot::Flags::BrushSize) |
int(BrushSlot::Flags::BrushAngle); int(BrushSlot::Flags::BrushAngle);
void AppBrushes::init()
{
m_standard.resize(3);
m_standard[0] = BrushRef(new Brush(kCircleBrushType, 7, 0));
m_standard[1] = BrushRef(new Brush(kSquareBrushType, 7, 0));
m_standard[2] = BrushRef(new Brush(kLineBrushType, 7, 44));
const std::string fn = userBrushesFilename();
if (base::is_file(fn)) {
try {
load(fn);
}
catch (const std::exception& ex) {
LOG(ERROR, "BRSH: Error loading user brushes from '%s': %s\n", fn.c_str(), ex.what());
}
}
m_userBrushesFilename = fn;
}
void AppBrushes::load(const std::string& filename) void AppBrushes::load(const std::string& filename)
{ {
XMLDocumentRef doc = app::open_xml(filename); XMLDocumentRef doc = app::open_xml(filename);

View File

@ -27,6 +27,8 @@ public:
AppBrushes(); AppBrushes();
~AppBrushes(); ~AppBrushes();
void reset();
// Adds a new brush and returns the slot number where the brush // Adds a new brush and returns the slot number where the brush
// is now available. // is now available.
slot_id addBrushSlot(const BrushSlot& brush); slot_id addBrushSlot(const BrushSlot& brush);
@ -44,10 +46,12 @@ public:
obs::signal<void()> ItemsChange; obs::signal<void()> ItemsChange;
static std::string userBrushesFilename();
private: private:
void init();
void load(const std::string& filename); void load(const std::string& filename);
void save(const std::string& filename) const; void save(const std::string& filename) const;
static std::string userBrushesFilename();
doc::Brushes m_standard; doc::Brushes m_standard;
BrushSlots m_slots; BrushSlots m_slots;

View File

@ -459,14 +459,35 @@ public:
auto validateYesButton = [this] { auto validateYesButton = [this] {
resetSelectedButton()->setEnabled( resetSelectedButton()->setEnabled(
defaultReset()->isSelected() || installedReset()->isSelected() || defaultReset()->isSelected() || installedReset()->isSelected() ||
recentReset()->isSelected() || perfileReset()->isSelected() || toolsReset()->isSelected()); recentReset()->isSelected() || perfileReset()->isSelected() ||
windowReset()->isSelected() || toolsReset()->isSelected() || brushesReset()->isSelected());
resetToggle()->setSelected(defaultReset()->isSelected() && installedReset()->isSelected() &&
recentReset()->isSelected() && perfileReset()->isSelected() &&
windowReset()->isSelected() && toolsReset()->isSelected() &&
brushesReset()->isSelected());
}; };
defaultReset()->Click.connect(validateYesButton); defaultReset()->Click.connect(validateYesButton);
installedReset()->Click.connect(validateYesButton); installedReset()->Click.connect(validateYesButton);
recentReset()->Click.connect(validateYesButton); recentReset()->Click.connect(validateYesButton);
perfileReset()->Click.connect(validateYesButton); perfileReset()->Click.connect(validateYesButton);
toolsReset()->Click.connect(validateYesButton); toolsReset()->Click.connect(validateYesButton);
windowReset()->Click.connect(validateYesButton);
brushesReset()->Click.connect(validateYesButton);
resetSelectedButton()->Click.connect([this] { onResetDefault(); }); resetSelectedButton()->Click.connect([this] { onResetDefault(); });
resetToggle()->Click.connect([this] {
bool toggle = resetToggle()->isSelected();
defaultReset()->setSelected(toggle);
installedReset()->setSelected(toggle);
recentReset()->setSelected(toggle);
perfileReset()->setSelected(toggle);
toolsReset()->setSelected(toggle);
windowReset()->setSelected(toggle);
brushesReset()->setSelected(toggle);
brushesReset()->Click(); // Hacky way to trigger validateYesButton
brushesReset()->Click();
});
defaultReset()->setSelected(true); defaultReset()->setSelected(true);
@ -1126,6 +1147,32 @@ private:
} }
} }
if (windowReset()->isSelected()) {
static constexpr auto windowSections = {
"GfxMode", "CanvasSize", "CelProperties", "ChangePixelFormat",
"ExportSpriteSheet", "ImportSpriteSheet", "KeyboardShortcuts", "LayerProperties",
"MaskColor", "ExportFile", "SpriteProperties", "SpriteSize",
"UndoHistory", "FileSelector", "MiniEditor"
};
for (const auto* windowSection : windowSections)
del_config_section(windowSection);
}
if (brushesReset()->isSelected()) {
const auto userBrushPath = AppBrushes::userBrushesFilename();
if (base::is_file(userBrushPath)) {
try {
base::delete_file(userBrushPath);
LOG(VERBOSE, "Deleted user brushes file");
App::instance()->brushes().reset();
}
catch (const std::exception& ex) {
LOG(ERROR, "Error resetting user brushes: %s - %s", userBrushPath.c_str(), ex.what());
}
}
}
if (defaultReset()->isSelected()) { if (defaultReset()->isSelected()) {
onResetAlerts(); onResetAlerts();
onResetBg(); onResetBg();
@ -1139,6 +1186,8 @@ private:
// Resetting all things. // Resetting all things.
for (Section* section : m_pref.sectionList()) { for (Section* section : m_pref.sectionList()) {
if (strcmp(section->name(), "updater") == 0)
continue; // Ignore updater to preserve the UUID and other data.
for (OptionBase* option : section->optionList()) { for (OptionBase* option : section->optionList()) {
option->resetToDefault(); option->resetToDefault();
} }