Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/xs
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2017-12-19 21:51:22 +0300
committerbubnikv <bubnikv@gmail.com>2017-12-19 21:51:22 +0300
commit0b6bd3cbdedaf52e95716d34294630ff22d4356c (patch)
treec8b639b007355f3df622f30225f0f23a88699d6f /xs
parent5a768ddd7b4d72088878266b363454248ea0b32a (diff)
Implemented a "Reset user profile" on the first page of the configuration
wizard if the wizard is opened from the menu. This allows one to reinstall the bundled printer profile cleanly. Fixed a bug when loading a config bundle as a config: The config bundle should not be unpacked into the user profile directory.
Diffstat (limited to 'xs')
-rw-r--r--xs/src/slic3r/GUI/Preset.cpp23
-rw-r--r--xs/src/slic3r/GUI/Preset.hpp2
-rw-r--r--xs/src/slic3r/GUI/PresetBundle.cpp22
-rw-r--r--xs/src/slic3r/GUI/PresetBundle.hpp13
-rw-r--r--xs/xsp/GUI_Preset.xsp4
5 files changed, 56 insertions, 8 deletions
diff --git a/xs/src/slic3r/GUI/Preset.cpp b/xs/src/slic3r/GUI/Preset.cpp
index adc996030..49c999737 100644
--- a/xs/src/slic3r/GUI/Preset.cpp
+++ b/xs/src/slic3r/GUI/Preset.cpp
@@ -263,6 +263,21 @@ PresetCollection::~PresetCollection()
m_bitmap_main_frame = nullptr;
}
+void PresetCollection::reset(bool delete_files)
+{
+ if (m_presets.size() > 1) {
+ if (delete_files) {
+ // Erase the preset files.
+ for (Preset &preset : m_presets)
+ if (! preset.is_default && ! preset.is_external)
+ boost::nowide::remove(preset.file.c_str());
+ }
+ // Don't use m_presets.resize() here as it requires a default constructor for Preset.
+ m_presets.erase(m_presets.begin() + 1, m_presets.end());
+ this->select_preset(0);
+ }
+}
+
// Load all presets found in dir_path.
// Throws an exception on error.
void PresetCollection::load_presets(const std::string &dir_path, const std::string &subdir)
@@ -501,9 +516,11 @@ bool PresetCollection::update_dirty_ui(wxBitmapComboBox *ui)
std::string preset_name = Preset::remove_suffix_modified(old_label);
const Preset *preset = this->find_preset(preset_name, false);
assert(preset != nullptr);
- std::string new_label = preset->is_dirty ? preset->name + g_suffix_modified : preset->name;
- if (old_label != new_label)
- ui->SetString(ui_id, wxString::FromUTF8(new_label.c_str()));
+ if (preset != nullptr) {
+ std::string new_label = preset->is_dirty ? preset->name + g_suffix_modified : preset->name;
+ if (old_label != new_label)
+ ui->SetString(ui_id, wxString::FromUTF8(new_label.c_str()));
+ }
}
return was_dirty != is_dirty;
}
diff --git a/xs/src/slic3r/GUI/Preset.hpp b/xs/src/slic3r/GUI/Preset.hpp
index bfb7d6e20..b37982017 100644
--- a/xs/src/slic3r/GUI/Preset.hpp
+++ b/xs/src/slic3r/GUI/Preset.hpp
@@ -116,6 +116,8 @@ public:
PresetCollection(Preset::Type type, const std::vector<std::string> &keys);
~PresetCollection();
+ void reset(bool delete_files);
+
Preset::Type type() const { return m_type; }
std::string name() const;
const std::deque<Preset>& operator()() const { return m_presets; }
diff --git a/xs/src/slic3r/GUI/PresetBundle.cpp b/xs/src/slic3r/GUI/PresetBundle.cpp
index 4dc2e56ce..645477541 100644
--- a/xs/src/slic3r/GUI/PresetBundle.cpp
+++ b/xs/src/slic3r/GUI/PresetBundle.cpp
@@ -69,6 +69,16 @@ PresetBundle::~PresetBundle()
delete bitmap.second;
}
+void PresetBundle::reset(bool delete_files)
+{
+ // Clear the existing presets, delete their respective files.
+ this->prints .reset(delete_files);
+ this->filaments.reset(delete_files);
+ this->printers .reset(delete_files);
+ this->filament_presets.clear();
+ this->filament_presets.emplace_back(this->filaments.get_selected_preset().name);
+}
+
void PresetBundle::setup_directories()
{
boost::filesystem::path data_dir = boost::filesystem::path(Slic3r::data_dir());
@@ -376,7 +386,8 @@ void PresetBundle::load_config_file_config_bundle(const std::string &path, const
{
// 1) Load the config bundle into a temp data.
PresetBundle tmp_bundle;
- tmp_bundle.load_configbundle(path);
+ // Load the config bundle, don't save the loaded presets to user profile directory.
+ tmp_bundle.load_configbundle(path, 0);
std::string bundle_name = std::string(" - ") + boost::filesystem::path(path).filename().string();
// 2) Extract active configs from the config bundle, copy them and activate them in this bundle.
@@ -430,8 +441,11 @@ void PresetBundle::load_config_file_config_bundle(const std::string &path, const
// Load a config bundle file, into presets and store the loaded presets into separate files
// of the local configuration directory.
-size_t PresetBundle::load_configbundle(const std::string &path)
+size_t PresetBundle::load_configbundle(const std::string &path, unsigned int flags)
{
+ if (flags & LOAD_CFGBNDLE_RESET_USER_PROFILE)
+ this->reset(flags & LOAD_CFGBNDLE_SAVE);
+
// 1) Read the complete config file into a boost::property_tree.
namespace pt = boost::property_tree;
pt::ptree tree;
@@ -504,7 +518,9 @@ size_t PresetBundle::load_configbundle(const std::string &path)
#endif
/ presets->name() / file_name).make_preferred();
// Load the preset into the list of presets, save it to disk.
- presets->load_preset(file_path.string(), preset_name, std::move(config), false).save();
+ Preset &loaded = presets->load_preset(file_path.string(), preset_name, std::move(config), false);
+ if (flags & LOAD_CFGBNDLE_SAVE)
+ loaded.save();
++ presets_loaded;
}
}
diff --git a/xs/src/slic3r/GUI/PresetBundle.hpp b/xs/src/slic3r/GUI/PresetBundle.hpp
index 238e7c802..308785fda 100644
--- a/xs/src/slic3r/GUI/PresetBundle.hpp
+++ b/xs/src/slic3r/GUI/PresetBundle.hpp
@@ -15,6 +15,10 @@ public:
PresetBundle();
~PresetBundle();
+ // Remove all the presets but the "-- default --".
+ // Optionally remove all the files referenced by the presets from the user profile directory.
+ void reset(bool delete_files);
+
void setup_directories();
// Load ini files of all types (print, filament, printer) from Slic3r::data_dir() / presets.
@@ -51,7 +55,14 @@ public:
// Load settings into the provided settings instance.
// Activate the presets stored in the config bundle.
// Returns the number of presets loaded successfully.
- size_t load_configbundle(const std::string &path);
+ enum {
+ // Save the profiles, which have been loaded.
+ LOAD_CFGBNDLE_SAVE = 1,
+ // Delete all old config profiles before loading.
+ LOAD_CFGBNDLE_RESET_USER_PROFILE = 2
+ };
+ // Load the config bundle, store it to the user profile directory by default.
+ size_t load_configbundle(const std::string &path, unsigned int flags = LOAD_CFGBNDLE_SAVE);
// Export a config bundle file containing all the presets and the names of the active presets.
void export_configbundle(const std::string &path); // , const DynamicPrintConfig &settings);
diff --git a/xs/xsp/GUI_Preset.xsp b/xs/xsp/GUI_Preset.xsp
index 905ff4ecd..ed5db01e9 100644
--- a/xs/xsp/GUI_Preset.xsp
+++ b/xs/xsp/GUI_Preset.xsp
@@ -100,6 +100,8 @@ PresetCollection::arrayref()
PresetBundle();
~PresetBundle();
+ void reset(bool delete_files);
+
void setup_directories()
%code%{
try {
@@ -128,7 +130,7 @@ PresetCollection::arrayref()
size_t load_configbundle(const char *path)
%code%{
try {
- RETVAL = THIS->load_configbundle(path);
+ RETVAL = THIS->load_configbundle(path, PresetBundle::LOAD_CFGBNDLE_SAVE);
} catch (std::exception& e) {
croak("Loading of a config bundle %s failed:\n%s\n", path, e.what());
}