Merge branch 'stable' (no conflicts fixed)

This commit is contained in:
Lukas Matena 2022-04-27 22:24:07 +02:00
commit 09fe421fe8
32 changed files with 7409 additions and 5368 deletions

View file

@ -8412,7 +8412,7 @@ msgstr "Überlauf"
#: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:320 #: src/slic3r/GUI/GUI_Preview.cpp:241 src/libslic3r/ExtrusionEntity.cpp:320
#: src/libslic3r/ExtrusionEntity.cpp:344 #: src/libslic3r/ExtrusionEntity.cpp:344
msgid "Overhang perimeter" msgid "Overhang perimeter"
msgstr "Überhängende Außenkontur" msgstr "Überhängende Kontur"
#: src/libslic3r/PrintConfig.cpp:2767 #: src/libslic3r/PrintConfig.cpp:2767
msgid "Overhang threshold" msgid "Overhang threshold"
@ -8731,7 +8731,7 @@ msgstr ""
#: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:318 #: src/slic3r/GUI/GUI_Preview.cpp:239 src/libslic3r/ExtrusionEntity.cpp:318
#: src/libslic3r/ExtrusionEntity.cpp:340 #: src/libslic3r/ExtrusionEntity.cpp:340
msgid "Perimeter" msgid "Perimeter"
msgstr "Außenkontur" msgstr "Kontur"
#: src/libslic3r/PrintConfig.cpp:1946 #: src/libslic3r/PrintConfig.cpp:1946
msgid "Perimeter extruder" msgid "Perimeter extruder"
@ -10848,8 +10848,8 @@ msgstr ""
"Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite " "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite "
"zuzulassen. Falls auf null belassen, wird PrusaSlicer die Extrusionsbreiten " "zuzulassen. Falls auf null belassen, wird PrusaSlicer die Extrusionsbreiten "
"vom Durchmesser der Druckdüse ableiten (siehe die Hilfstexte für die " "vom Durchmesser der Druckdüse ableiten (siehe die Hilfstexte für die "
"Extrusionsbreite für Außenkonturen, Infill usw.). Falls als Prozentwert (z." "Extrusionsbreite für Konturen, Infill usw.). Falls als Prozentwert (z.B. "
"B. 230%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet." "230%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
#: src/libslic3r/PrintConfig.cpp:729 #: src/libslic3r/PrintConfig.cpp:729
msgid "" msgid ""
@ -10859,10 +10859,10 @@ msgid ""
"(for example 200%), it will be computed over layer height." "(for example 200%), it will be computed over layer height."
msgstr "" msgstr ""
"Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite " "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite "
"für externe Außenkonturen anzugeben. Falls auf null belassen, wird die " "für Außenkonturen anzugeben. Falls auf null belassen, wird die Standard-"
"Standard-Extrusionsbreite verwendet (falls angeben), ansonsten wird der " "Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser "
"Durchmesser der Druckdüse x 1,125 verwendet. Falls als Prozentwert (z.B. " "der Druckdüse x 1,125 verwendet. Falls als Prozentwert (z.B. 200%) "
"200%) angegeben, wird dieser ausgehend von der Schichthöhe berechnet." "angegeben, wird dieser ausgehend von der Schichthöhe berechnet."
#: src/libslic3r/PrintConfig.cpp:1196 #: src/libslic3r/PrintConfig.cpp:1196
msgid "" msgid ""
@ -10931,7 +10931,7 @@ msgid ""
"it will be computed over layer height." "it will be computed over layer height."
msgstr "" msgstr ""
"Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite " "Setzen Sie dies auf einen Nicht-Nullwert, um eine manuelle Extrusionsbreite "
"für Außenkonturen anzugeben. Dünnere Extrusionsbreiten sind vorteilhaft, um " "für Konturen anzugeben. Dünnere Extrusionsbreiten sind vorteilhaft, um "
"genauere Oberflächen zu erhalten. Falls auf null belassen, wird die Standard-" "genauere Oberflächen zu erhalten. Falls auf null belassen, wird die Standard-"
"Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser " "Extrusionsbreite verwendet (falls angeben), ansonsten wird der Durchmesser "
"der Druckdüse x 1,125 verwendet. Falls als Prozentwert (z.B. 200%) " "der Druckdüse x 1,125 verwendet. Falls als Prozentwert (z.B. 200%) "
@ -11797,7 +11797,7 @@ msgid ""
"for auto." "for auto."
msgstr "" msgstr ""
"Druckgeschwindigkeit für die oberen massiven Schichten (betrifft nur die " "Druckgeschwindigkeit für die oberen massiven Schichten (betrifft nur die "
"obersten Außenkonturen und nicht deren innenliegende massiven Schichten). " "obersten Außenschichten und nicht deren innenliegende massiven Schichten). "
"Wir empfehlen, diesen Wert zu reduzieren, um eine schönere Oberfläche zu " "Wir empfehlen, diesen Wert zu reduzieren, um eine schönere Oberfläche zu "
"erhalten. Dies kann als Prozentwert (z.B. 80%) der oben eingegebenen " "erhalten. Dies kann als Prozentwert (z.B. 80%) der oben eingegebenen "
"Geschwindigkeit für massives Infill angegeben werden. Für Automatik auf null " "Geschwindigkeit für massives Infill angegeben werden. Für Automatik auf null "
@ -12613,8 +12613,8 @@ msgid ""
msgstr "" msgstr ""
"Der Extruder, der verwendet werden soll, falls keine sonstigen " "Der Extruder, der verwendet werden soll, falls keine sonstigen "
"Extrudereinstellungen angegeben wurden. Dies übersteuert die Angaben für die " "Extrudereinstellungen angegeben wurden. Dies übersteuert die Angaben für die "
"Außenkontur- und Infill-Extruder, aber nicht die Angabe des Extruders für " "Kontur- und Infill-Extruder, aber nicht die Angabe des Extruders für die "
"die Stützen." "Stützen."
#: src/libslic3r/PrintConfig.cpp:1448 #: src/libslic3r/PrintConfig.cpp:1448
msgid "The extruder to use when printing infill." msgid "The extruder to use when printing infill."
@ -13554,8 +13554,8 @@ msgid ""
"prevent resetting acceleration at all." "prevent resetting acceleration at all."
msgstr "" msgstr ""
"Dies ist der Beschleunigungswert, auf den Ihr Drucker zurückgesetzt wird, " "Dies ist der Beschleunigungswert, auf den Ihr Drucker zurückgesetzt wird, "
"nachdem aufgabenspezifische Beschleunigungswerte (Außenkonturen/Infill) " "nachdem aufgabenspezifische Beschleunigungswerte (Konturen/Infill) verwendet "
"verwendet wurden. Setzen Sie dies auf null, um ein Zurückstellen der " "wurden. Setzen Sie dies auf null, um ein Zurückstellen der "
"Beschleunigungswerte zu deaktivieren." "Beschleunigungswerte zu deaktivieren."
#: src/libslic3r/PrintConfig.cpp:443 #: src/libslic3r/PrintConfig.cpp:443
@ -13679,11 +13679,11 @@ msgid ""
"surfaces which benefit from a higher number of perimeters if the Extra " "surfaces which benefit from a higher number of perimeters if the Extra "
"Perimeters option is enabled." "Perimeters option is enabled."
msgstr "" msgstr ""
"Diese Stellung bestimmt die Anzahl der Außenkonturen, die für jede Schicht " "Diese Stellung bestimmt die Anzahl der Konturen, die für jede Schicht "
"erzeugt werden. PusaSlicer kann diese Zahl automatisch vergrößern, wenn es " "erzeugt werden. PusaSlicer kann diese Zahl automatisch vergrößern, wenn es "
"schräge Oberflächen erkennt, die sich mit einer höheren Zahl von " "schräge Oberflächen erkennt, die sich mit einer höheren Zahl von Konturen "
"Außenkonturen besser drucken lassen, wenn die \"Zusätzliche Außenkonturen " "besser drucken lassen, wenn die \"Zusätzliche Konturen falls notwendig\" "
"falls notwendig\" Option aktiviert ist." "Option aktiviert ist."
#: src/libslic3r/PrintConfig.cpp:1895 #: src/libslic3r/PrintConfig.cpp:1895
msgid "" msgid ""
@ -13712,8 +13712,8 @@ msgid ""
"This option will switch the print order of perimeters and infill, making the " "This option will switch the print order of perimeters and infill, making the "
"latter first." "latter first."
msgstr "" msgstr ""
"Diese Einstellungen kehrt die Druckreihenfolge von Außenkonturen und Infill " "Diese Einstellungen kehrt die Druckreihenfolge von Konturen und Infill um, "
"um, sodass der Infill zuerst gedruckt wird." "sodass der Infill zuerst gedruckt wird."
#: src/slic3r/GUI/PhysicalPrinterDialog.cpp:83 #: src/slic3r/GUI/PhysicalPrinterDialog.cpp:83
msgid "This printer will be shown in the presets list as" msgid "This printer will be shown in the presets list as"
@ -13726,9 +13726,9 @@ msgid ""
"calculated on the perimeters speed setting above. Set to zero for auto." "calculated on the perimeters speed setting above. Set to zero for auto."
msgstr "" msgstr ""
"Diese separate Einstellung wirkt sich auf die Geschwindigkeit der äußeren " "Diese separate Einstellung wirkt sich auf die Geschwindigkeit der äußeren "
"(sichtbaren) Außenkonturen aus. Als Prozentwert eingegeben (z.B. 80%), wird " "(sichtbaren) Konturen aus. Als Prozentwert eingegeben (z.B. 80%), wird sie "
"sie ausgehend von der obigen Geschwindigkeitseinstellung für Außenkonturen " "ausgehend von der obigen Geschwindigkeitseinstellung für Konturen berechnet. "
"berechnet. Für die automatische Berechnung auf null setzen." "Für die automatische Berechnung auf null setzen."
#: src/libslic3r/PrintConfig.cpp:2303 #: src/libslic3r/PrintConfig.cpp:2303
msgid "" msgid ""
@ -13736,11 +13736,11 @@ msgid ""
"6.5mm (usually holes). If expressed as percentage (for example: 80%) it will " "6.5mm (usually holes). If expressed as percentage (for example: 80%) it will "
"be calculated on the perimeters speed setting above. Set to zero for auto." "be calculated on the perimeters speed setting above. Set to zero for auto."
msgstr "" msgstr ""
"Diese separate Einstellung wirkt sich auf die Geschwindigkeit von " "Diese separate Einstellung wirkt sich auf die Geschwindigkeit von Konturen "
"Außenkonturen mit einem Radius <= 6,5 mm (üblicherweise Bohrungen) aus. Als " "mit einem Radius <= 6,5 mm (üblicherweise Bohrungen) aus. Als Prozentwert "
"Prozentwert eingegeben (z.B. 80%), wird sie ausgehend von der obigen " "eingegeben (z.B. 80%), wird sie ausgehend von der obigen "
"Geschwindigkeitseinstellung für Außenkonturen berechnet. Für eine " "Geschwindigkeitseinstellung für Konturen berechnet. Für eine automatische "
"automatische Berechnung setzen Sie dies auf null." "Berechnung setzen Sie dies auf null."
#: src/libslic3r/PrintConfig.cpp:1484 #: src/libslic3r/PrintConfig.cpp:1484
msgid "" msgid ""
@ -13749,11 +13749,11 @@ msgid ""
"cause gaps. If expressed as percentage (example: 15%) it is calculated over " "cause gaps. If expressed as percentage (example: 15%) it is calculated over "
"perimeter extrusion width." "perimeter extrusion width."
msgstr "" msgstr ""
"Diese Einstellung fügt eine zusätzliche Überlappung zwischen Außenkonturen " "Diese Einstellung fügt eine zusätzliche Überlappung zwischen Konturen und "
"und Infill ein, um die Haftung zu verbessern. Theoretisch sollte dies nicht " "Infill ein, um die Haftung zu verbessern. Theoretisch sollte dies nicht "
"notwendig sein, doch vorhandenes Getriebespiel könnte Lücken erzeugen. Als " "notwendig sein, doch vorhandenes Getriebespiel könnte Lücken erzeugen. Als "
"Prozentwert eingegeben (z.B. 15%) wird sie ausgehend von der " "Prozentwert eingegeben (z.B. 15%) wird sie ausgehend von der "
"Extrusionsbreite für die Außenkontur ausgerechnet." "Extrusionsbreite für die Kontur ausgerechnet."
#: src/libslic3r/PrintConfig.cpp:265 #: src/libslic3r/PrintConfig.cpp:265
msgid "" msgid ""
@ -15816,7 +15816,7 @@ msgstr "Parametername"
#: src/slic3r/GUI/PresetHints.cpp:171 #: src/slic3r/GUI/PresetHints.cpp:171
msgid "perimeters" msgid "perimeters"
msgstr "Außenkonturen" msgstr "Konturen"
#: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338 #: src/slic3r/GUI/ConfigSnapshotDialog.cpp:64 src/libslic3r/Preset.cpp:1338
msgid "print" msgid "print"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -470,4 +470,8 @@ max_print_height = 235
start_gcode = M82 ;absolute extrusion mode\n;Start GCode begin\nM140 S[first_layer_bed_temperature] ;Start Warming Bed\nM104 S160 ;Preheat Nozzle\nG28 ; home all axes\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000\nG1 Z0 F1800\nG1 Z5 F5000 ; lift nozzle\nM190 S[first_layer_bed_temperature] ;Wait For Bed Temperature\nM109 S[first_layer_temperature] ;Wait for Hotend Temperature\nG92 E0\nG1 E10 F200\nG1 E-2 F300\nG92 E0\n;Start GCode end\nG1 F3600 E-2 start_gcode = M82 ;absolute extrusion mode\n;Start GCode begin\nM140 S[first_layer_bed_temperature] ;Start Warming Bed\nM104 S160 ;Preheat Nozzle\nG28 ; home all axes\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000\nG1 Z0 F1800\nG1 Z5 F5000 ; lift nozzle\nM190 S[first_layer_bed_temperature] ;Wait For Bed Temperature\nM109 S[first_layer_temperature] ;Wait for Hotend Temperature\nG92 E0\nG1 E10 F200\nG1 E-2 F300\nG92 E0\n;Start GCode end\nG1 F3600 E-2
end_gcode = M140 S0\n;End GCode begin\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG90 ;absolute positioning\nG92 E0\nG1 E-2 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z330 E-1 F80 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y250 F3000 ;so the head is out of the way and Plate is moved forward\nM84 ;steppers off\n;End GCode end\nM82 ;absolute extrusion mode\nM104 S0\nM107\n;End of Gcode end_gcode = M140 S0\n;End GCode begin\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG90 ;absolute positioning\nG92 E0\nG1 E-2 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z330 E-1 F80 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y250 F3000 ;so the head is out of the way and Plate is moved forward\nM84 ;steppers off\n;End GCode end\nM82 ;absolute extrusion mode\nM104 S0\nM107\n;End of Gcode
default_filament_profile = Generic PLA @Snapmaker default_filament_profile = Generic PLA @Snapmaker
<<<<<<< HEAD
default_print_profile = 0.20mm NORMAL @SnapmakerA250 default_print_profile = 0.20mm NORMAL @SnapmakerA250
=======
default_print_profile = 0.20mm NORMAL @SnapmakerA250
>>>>>>> stable

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

View file

@ -824,6 +824,7 @@ public:
m_ifs.seekg(m_file_pos, m_ifs.beg); m_ifs.seekg(m_file_pos, m_ifs.beg);
if (! m_ifs.read(m_block.data(), m_block_len)) if (! m_ifs.read(m_block.data(), m_block_len))
return false; return false;
assert(m_block_len == m_ifs.gcount());
} }
assert(m_block_len > 0); assert(m_block_len > 0);
@ -866,7 +867,7 @@ private:
ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule) ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule)
{ {
// Read a 64k block from the end of the G-code. // Read a 64k block from the end of the G-code.
boost::nowide::ifstream ifs(file); boost::nowide::ifstream ifs(file, std::ifstream::binary);
// Look for Slic3r or PrusaSlicer header. // Look for Slic3r or PrusaSlicer header.
// Look for the header across the whole file as the G-code may have been extended at the start by a post-processing script or the user. // Look for the header across the whole file as the G-code may have been extended at the start by a post-processing script or the user.
bool has_delimiters = false; bool has_delimiters = false;

View file

@ -194,7 +194,8 @@ enum ConfigOptionType {
enum ConfigOptionMode { enum ConfigOptionMode {
comSimple = 0, comSimple = 0,
comAdvanced, comAdvanced,
comExpert comExpert,
comUndef
}; };
enum PrinterTechnology : unsigned char enum PrinterTechnology : unsigned char

File diff suppressed because it is too large Load diff

View file

@ -153,8 +153,8 @@ public:
float layer_height, float layer_height,
// Maximum number of tool changes on this layer or the layers below. // Maximum number of tool changes on this layer or the layers below.
size_t max_tool_changes, size_t max_tool_changes,
// Is this the first layer of the print? In that case print the brim first. // Is this the first layer of the print? In that case print the brim first. (OBSOLETE)
bool is_first_layer, bool /*is_first_layer*/,
// Is this the last layer of the waste tower? // Is this the last layer of the waste tower?
bool is_last_layer) bool is_last_layer)
{ {
@ -162,8 +162,14 @@ public:
m_layer_height = layer_height; m_layer_height = layer_height;
m_depth_traversed = 0.f; m_depth_traversed = 0.f;
m_current_layer_finished = false; m_current_layer_finished = false;
m_current_shape = (! is_first_layer && m_current_shape == SHAPE_NORMAL) ? SHAPE_REVERSED : SHAPE_NORMAL;
if (is_first_layer) {
// Advance m_layer_info iterator, making sure we got it right
while (!m_plan.empty() && m_layer_info->z < print_z - WT_EPSILON && m_layer_info+1 != m_plan.end())
++m_layer_info;
m_current_shape = (! this->is_first_layer() && m_current_shape == SHAPE_NORMAL) ? SHAPE_REVERSED : SHAPE_NORMAL;
if (this->is_first_layer()) {
m_num_layer_changes = 0; m_num_layer_changes = 0;
m_num_tool_changes = 0; m_num_tool_changes = 0;
} else } else
@ -171,10 +177,6 @@ public:
// Calculate extrusion flow from desired line width, nozzle diameter, filament diameter and layer_height: // Calculate extrusion flow from desired line width, nozzle diameter, filament diameter and layer_height:
m_extrusion_flow = extrusion_flow(layer_height); m_extrusion_flow = extrusion_flow(layer_height);
// Advance m_layer_info iterator, making sure we got it right
while (!m_plan.empty() && m_layer_info->z < print_z - WT_EPSILON && m_layer_info+1 != m_plan.end())
++m_layer_info;
} }
// Return the wipe tower position. // Return the wipe tower position.

View file

@ -538,8 +538,21 @@ std::string Print::validate(std::string* warning) const
for (size_t idx_object = 0; idx_object < m_objects.size(); ++ idx_object) { for (size_t idx_object = 0; idx_object < m_objects.size(); ++ idx_object) {
if (idx_object == tallest_object_idx) if (idx_object == tallest_object_idx)
continue; continue;
if (layer_height_profiles[idx_object] != layer_height_profiles[tallest_object_idx]) // Check that the layer height profiles are equal. This will happen when one object is
return L("The Wipe tower is only supported if all objects have the same variable layer height"); // a copy of another, or when a layer height modifier is used the same way on both objects.
// The latter case might create a floating point inaccuracy mismatch, so compare
// element-wise using an epsilon check.
size_t i = 0;
const coordf_t eps = 0.5 * EPSILON; // layers closer than EPSILON will be merged later. Let's make
// this check a bit more sensitive to make sure we never consider two different layers as one.
while (i < layer_height_profiles[idx_object].size()
&& i < layer_height_profiles[tallest_object_idx].size()) {
if (i%2 == 0 && layer_height_profiles[tallest_object_idx][i] > layer_height_profiles[idx_object][layer_height_profiles[idx_object].size() - 2 ])
break;
if (std::abs(layer_height_profiles[idx_object][i] - layer_height_profiles[tallest_object_idx][i]) > eps)
return L("The Wipe tower is only supported if all objects have the same variable layer height");
++i;
}
} }
} }
} }

View file

@ -2176,7 +2176,8 @@ void Control::auto_color_change()
const Print& print = GUI::wxGetApp().plater()->fff_print(); const Print& print = GUI::wxGetApp().plater()->fff_print();
for (auto object : print.objects()) { for (auto object : print.objects()) {
if (object->layer_count() == 0) // An object should to have at least 2 layers to apply an auto color change
if (object->layer_count() < 2)
continue; continue;
check_color_change(object, 1, object->layers().size(), false, [this, extruders_cnt](Layer* layer) check_color_change(object, 1, object->layers().size(), false, [this, extruders_cnt](Layer* layer)

View file

@ -1050,8 +1050,6 @@ bool GUI_App::OnInit()
} }
} }
static bool update_gui_after_init = true;
bool GUI_App::on_init_inner() bool GUI_App::on_init_inner()
{ {
// Set initialization of image handlers before any UI actions - See GH issue #7469 // Set initialization of image handlers before any UI actions - See GH issue #7469
@ -1327,18 +1325,18 @@ bool GUI_App::on_init_inner()
// An ugly solution to GH #5537 in which GUI_App::init_opengl (normally called from events wxEVT_PAINT // An ugly solution to GH #5537 in which GUI_App::init_opengl (normally called from events wxEVT_PAINT
// and wxEVT_SET_FOCUS before GUI_App::post_init is called) wasn't called before GUI_App::post_init and OpenGL wasn't initialized. // and wxEVT_SET_FOCUS before GUI_App::post_init is called) wasn't called before GUI_App::post_init and OpenGL wasn't initialized.
#ifdef __linux__ #ifdef __linux__
if (update_gui_after_init && m_opengl_initialized) { if (! m_post_initialized && m_opengl_initialized) {
#else #else
if (update_gui_after_init) { if (! m_post_initialized) {
#endif #endif
update_gui_after_init = false; m_post_initialized = true;
#ifdef WIN32 #ifdef WIN32
this->mainframe->register_win32_callbacks(); this->mainframe->register_win32_callbacks();
#endif #endif
this->post_init(); this->post_init();
} }
if (! update_gui_after_init && app_config->dirty() && app_config->get("autosave") == "1") if (m_post_initialized && app_config->dirty() && app_config->get("autosave") == "1")
app_config->save(); app_config->save();
}); });
@ -2726,17 +2724,25 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames)
// Running in G-code viewer. // Running in G-code viewer.
// Load the first G-code into the G-code viewer. // Load the first G-code into the G-code viewer.
// Or if no G-codes, send other files to slicer. // Or if no G-codes, send other files to slicer.
if (! gcode_files.empty()) if (! gcode_files.empty()) {
this->plater()->load_gcode(gcode_files.front()); if (m_post_initialized)
this->plater()->load_gcode(gcode_files.front());
else
this->init_params->input_files = { into_u8(gcode_files.front()) };
}
if (!non_gcode_files.empty()) if (!non_gcode_files.empty())
start_new_slicer(non_gcode_files, true); start_new_slicer(non_gcode_files, true);
} else { } else {
if (! files.empty()) { if (! files.empty()) {
wxArrayString input_files; if (m_post_initialized) {
for (size_t i = 0; i < non_gcode_files.size(); ++i) { wxArrayString input_files;
input_files.push_back(non_gcode_files[i]); for (size_t i = 0; i < non_gcode_files.size(); ++i)
input_files.push_back(non_gcode_files[i]);
this->plater()->load_files(input_files);
} else {
for (const auto &f : non_gcode_files)
this->init_params->input_files.emplace_back(into_u8(f));
} }
this->plater()->load_files(input_files);
} }
for (const wxString &filename : gcode_files) for (const wxString &filename : gcode_files)
start_new_gcodeviewer(&filename); start_new_gcodeviewer(&filename);

View file

@ -116,6 +116,7 @@ public:
private: private:
bool m_initialized { false }; bool m_initialized { false };
bool m_post_initialized { false };
bool m_app_conf_exists{ false }; bool m_app_conf_exists{ false };
EAppMode m_app_mode{ EAppMode::Editor }; EAppMode m_app_mode{ EAppMode::Editor };
bool m_is_recreating_gui{ false }; bool m_is_recreating_gui{ false };

View file

@ -119,6 +119,7 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking)
const GLVolume* vol = selection.get_volume(*selection.get_volume_idxs().begin()); const GLVolume* vol = selection.get_volume(*selection.get_volume_idxs().begin());
Geometry::Transformation trafo = vol->get_instance_transformation() * vol->get_volume_transformation(); Geometry::Transformation trafo = vol->get_instance_transformation() * vol->get_volume_transformation();
<<<<<<< HEAD
#if ENABLE_GL_SHADERS_ATTRIBUTES #if ENABLE_GL_SHADERS_ATTRIBUTES
const Transform3d instance_scaling_matrix_inverse = vol->get_instance_transformation().get_matrix(true, true, false, true).inverse(); const Transform3d instance_scaling_matrix_inverse = vol->get_instance_transformation().get_matrix(true, true, false, true).inverse();
@ -130,6 +131,8 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking)
shader->set_uniform("projection_matrix", projection_matrix); shader->set_uniform("projection_matrix", projection_matrix);
#else #else
=======
>>>>>>> stable
const Transform3d& instance_scaling_matrix_inverse = trafo.get_matrix(true, true, false, true).inverse(); const Transform3d& instance_scaling_matrix_inverse = trafo.get_matrix(true, true, false, true).inverse();
const Transform3d& instance_matrix = trafo.get_matrix(); const Transform3d& instance_matrix = trafo.get_matrix();

View file

@ -149,6 +149,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
const GLVolume* vol = selection.get_volume(*selection.get_volume_idxs().begin()); const GLVolume* vol = selection.get_volume(*selection.get_volume_idxs().begin());
Geometry::Transformation transformation(vol->get_instance_transformation().get_matrix() * vol->get_volume_transformation().get_matrix()); Geometry::Transformation transformation(vol->get_instance_transformation().get_matrix() * vol->get_volume_transformation().get_matrix());
const Transform3d& instance_scaling_matrix_inverse = transformation.get_matrix(true, true, false, true).inverse(); const Transform3d& instance_scaling_matrix_inverse = transformation.get_matrix(true, true, false, true).inverse();
<<<<<<< HEAD
#if ENABLE_GL_SHADERS_ATTRIBUTES #if ENABLE_GL_SHADERS_ATTRIBUTES
const Transform3d instance_matrix = Geometry::assemble_transform(m_c->selection_info()->get_sla_shift() * Vec3d::UnitZ()) * transformation.get_matrix(); const Transform3d instance_matrix = Geometry::assemble_transform(m_c->selection_info()->get_sla_shift() * Vec3d::UnitZ()) * transformation.get_matrix();
const Camera& camera = wxGetApp().plater()->get_camera(); const Camera& camera = wxGetApp().plater()->get_camera();
@ -157,6 +158,8 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
shader->set_uniform("projection_matrix", projection_matrix); shader->set_uniform("projection_matrix", projection_matrix);
#else #else
=======
>>>>>>> stable
const Transform3d& instance_matrix = transformation.get_matrix(); const Transform3d& instance_matrix = transformation.get_matrix();
const float z_shift = m_c->selection_info()->get_sla_shift(); const float z_shift = m_c->selection_info()->get_sla_shift();
glsafe(::glPushMatrix()); glsafe(::glPushMatrix());

View file

@ -1227,6 +1227,15 @@ void ImGuiWrapper::init_font(bool compress)
ImVector<ImWchar> ranges; ImVector<ImWchar> ranges;
ImFontAtlas::GlyphRangesBuilder builder; ImFontAtlas::GlyphRangesBuilder builder;
builder.AddRanges(m_glyph_ranges); builder.AddRanges(m_glyph_ranges);
if (m_font_cjk) {
// This is a temporary fix of https://github.com/prusa3d/PrusaSlicer/issues/8171. The translation
// contains characters not in the ImGui ranges for simplified Chinese. For now, just add them manually.
// In future, it might be worth to parse the dictionary and add all the necessary characters.
builder.AddChar(ImWchar(0x5ED3));
builder.AddChar(ImWchar(0x8F91));
}
#ifdef __APPLE__ #ifdef __APPLE__
if (m_font_cjk) if (m_font_cjk)
// Apple keyboard shortcuts are only contained in the CJK fonts. // Apple keyboard shortcuts are only contained in the CJK fonts.

View file

@ -53,7 +53,7 @@ void SLAImportJob::process(Ctl &ctl)
return !ctl.was_canceled(); return !ctl.was_canceled();
}; };
if (p->path.empty()) return; if (p->path.empty() || ! p->err.empty()) return;
std::string path = p->path.ToUTF8().data(); std::string path = p->path.ToUTF8().data();
std::string format_id = p->import_dlg->get_archive_format(); std::string format_id = p->import_dlg->get_archive_format();
@ -75,11 +75,16 @@ void SLAImportJob::process(Ctl &ctl)
} }
} catch (MissingProfileError &) { } catch (MissingProfileError &) {
p->err = _u8L("The SLA archive doesn't contain any presets. " p->err = _u8L("The SLA archive doesn't contain any presets. "
<<<<<<< HEAD
"Please activate some SLA printer preset first before " "Please activate some SLA printer preset first before "
"importing that SLA archive."); "importing that SLA archive.");
} catch (ReaderUnimplementedError &) { } catch (ReaderUnimplementedError &) {
p->err = _u8L("Import is unavailable for this archive format."); p->err = _u8L("Import is unavailable for this archive format.");
}catch (std::exception &ex) { }catch (std::exception &ex) {
=======
"Please activate some SLA printer preset first before importing that SLA archive.");
} catch (std::exception &ex) {
>>>>>>> stable
p->err = ex.what(); p->err = ex.what();
} }
@ -94,12 +99,14 @@ void SLAImportJob::reset()
p->profile = p->plater->sla_print().full_print_config(); p->profile = p->plater->sla_print().full_print_config();
p->quality = SLAImportQuality::Balanced; p->quality = SLAImportQuality::Balanced;
p->path.Clear(); p->path.Clear();
p->err = "";
} }
void SLAImportJob::prepare() void SLAImportJob::prepare()
{ {
reset(); reset();
<<<<<<< HEAD
auto path = p->import_dlg->get_path(); auto path = p->import_dlg->get_path();
auto nm = wxFileName(path); auto nm = wxFileName(path);
p->path = !nm.Exists(wxFILE_EXISTS_REGULAR) ? "" : nm.GetFullPath(); p->path = !nm.Exists(wxFILE_EXISTS_REGULAR) ? "" : nm.GetFullPath();
@ -107,6 +114,22 @@ void SLAImportJob::prepare()
p->quality = p->import_dlg->get_quality(); p->quality = p->import_dlg->get_quality();
p->config_substitutions.clear(); p->config_substitutions.clear();
=======
if (p->import_dlg.ShowModal() == wxID_OK) {
auto path = p->import_dlg.get_path();
auto nm = wxFileName(path);
p->path = !nm.Exists(wxFILE_EXISTS_REGULAR) ? "" : nm.GetFullPath();
if (p->path.empty()) {
p->err = _u8L("The file does not exist.");
return;
}
p->sel = p->import_dlg.get_selection();
p->win = p->import_dlg.get_marchsq_windowsize();
p->config_substitutions.clear();
} else {
p->path = "";
}
>>>>>>> stable
} }
void SLAImportJob::finalize(bool canceled, std::exception_ptr &eptr) void SLAImportJob::finalize(bool canceled, std::exception_ptr &eptr)
@ -121,6 +144,12 @@ void SLAImportJob::finalize(bool canceled, std::exception_ptr &eptr)
return; return;
} }
if (p->path.empty()) {
// This happens when the user cancels the import dialog. That is not
// an error to report, but we cannot continue either.
return;
}
std::string name = wxFileName(p->path).GetName().ToUTF8().data(); std::string name = wxFileName(p->path).GetName().ToUTF8().data();
if (p->profile.empty()) { if (p->profile.empty()) {

View file

@ -1491,22 +1491,18 @@ bool Sidebar::is_multifilament()
return p->combos_filament.size() > 1; return p->combos_filament.size() > 1;
} }
static std::vector<Search::InputInfo> get_search_inputs(ConfigOptionMode mode) void Sidebar::check_and_update_searcher(bool respect_mode /*= false*/)
{ {
std::vector<Search::InputInfo> ret {}; std::vector<Search::InputInfo> search_inputs{};
auto& tabs_list = wxGetApp().tabs_list; auto& tabs_list = wxGetApp().tabs_list;
auto print_tech = wxGetApp().preset_bundle->printers.get_selected_preset().printer_technology(); auto print_tech = wxGetApp().preset_bundle->printers.get_selected_preset().printer_technology();
for (auto tab : tabs_list) for (auto tab : tabs_list)
if (tab->supports_printer_technology(print_tech)) if (tab->supports_printer_technology(print_tech))
ret.emplace_back(Search::InputInfo {tab->get_config(), tab->type(), mode}); search_inputs.emplace_back(Search::InputInfo{ tab->get_config(), tab->type() });
return ret; p->searcher.check_and_update(wxGetApp().preset_bundle->printers.get_selected_preset().printer_technology(),
} respect_mode ? m_mode : comExpert, search_inputs);
void Sidebar::update_searcher()
{
p->searcher.init(get_search_inputs(m_mode));
} }
void Sidebar::update_mode() void Sidebar::update_mode()
@ -1515,7 +1511,6 @@ void Sidebar::update_mode()
update_reslice_btn_tooltip(); update_reslice_btn_tooltip();
update_mode_sizer(); update_mode_sizer();
update_searcher();
wxWindowUpdateLocker noUpdates(this); wxWindowUpdateLocker noUpdates(this);
@ -1573,6 +1568,8 @@ Search::OptionsSearcher& Sidebar::get_searcher()
std::string& Sidebar::get_search_line() std::string& Sidebar::get_search_line()
{ {
// update searcher before show imGui search dialog on the plater, if printer technology or mode was changed
check_and_update_searcher(true);
return p->searcher.search_string(); return p->searcher.search_string();
} }
@ -1716,8 +1713,11 @@ struct Plater::priv
res = (act == "1") ? wxID_YES : wxID_NO; res = (act == "1") ? wxID_YES : wxID_NO;
if (res == wxID_YES) if (res == wxID_YES)
if (!mainframe->save_project_as(project_name)) if (!mainframe->save_project_as(project_name)) {
res = wxID_CANCEL; // Return Cancel only, when we don't remember a choice for closing the application.
// Elsewhere it can causes an impossibility to close the application at all.
res = act.empty() ? wxID_CANCEL : wxID_NO;
}
} }
} }
return res; return res;
@ -2399,7 +2399,11 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
} }
const auto loading = _L("Loading") + dots; const auto loading = _L("Loading") + dots;
wxProgressDialog progress_dlg(loading, "", 100, find_toplevel_parent(q), wxPD_AUTO_HIDE);
// Create wxProgressDialog on heap, see the linux ifdef below.
auto progress_dlg = new wxProgressDialog(loading, "", 100, find_toplevel_parent(q), wxPD_AUTO_HIDE);
Slic3r::ScopeGuard([&progress_dlg](){ if (progress_dlg) progress_dlg->Destroy(); progress_dlg = nullptr; });
wxBusyCursor busy; wxBusyCursor busy;
auto *new_model = (!load_model || one_by_one) ? nullptr : new Slic3r::Model(); auto *new_model = (!load_model || one_by_one) ? nullptr : new Slic3r::Model();
@ -2419,8 +2423,10 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
const auto &path = input_files[i]; const auto &path = input_files[i];
#endif // _WIN32 #endif // _WIN32
const auto filename = path.filename(); const auto filename = path.filename();
progress_dlg.Update(static_cast<int>(100.0f * static_cast<float>(i) / static_cast<float>(input_files.size())), _L("Loading file") + ": " + from_path(filename)); if (progress_dlg) {
progress_dlg.Fit(); progress_dlg->Update(static_cast<int>(100.0f * static_cast<float>(i) / static_cast<float>(input_files.size())), _L("Loading file") + ": " + from_path(filename));
progress_dlg->Fit();
}
const bool type_3mf = std::regex_match(path.string(), pattern_3mf); const bool type_3mf = std::regex_match(path.string(), pattern_3mf);
const bool type_zip_amf = !type_3mf && std::regex_match(path.string(), pattern_zip_amf); const bool type_zip_amf = !type_3mf && std::regex_match(path.string(), pattern_zip_amf);
@ -2438,8 +2444,10 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
// then related SLA Print and Materials Settings or FFF Print and Filaments Settings will be unparent from the wxNoteBook // then related SLA Print and Materials Settings or FFF Print and Filaments Settings will be unparent from the wxNoteBook
// and that is why they will never be enabled after destruction of the ProgressDialog. // and that is why they will never be enabled after destruction of the ProgressDialog.
// So, distroy progress_gialog if we are loading project file // So, distroy progress_gialog if we are loading project file
if (input_files_size == 1) if (input_files_size == 1 && progress_dlg) {
progress_dlg.Destroy(); progress_dlg->Destroy();
progress_dlg = nullptr;
}
#endif #endif
DynamicPrintConfig config; DynamicPrintConfig config;
PrinterTechnology loaded_printer_technology {ptFFF}; PrinterTechnology loaded_printer_technology {ptFFF};
@ -5822,6 +5830,10 @@ void Plater::convert_unit(ConversionType conv_type)
if (obj_idxs.empty() && volume_idxs.empty()) if (obj_idxs.empty() && volume_idxs.empty())
return; return;
// We will remove object indexes after convertion
// So, resort object indexes descending to avoid the crash after remove
std::sort(obj_idxs.begin(), obj_idxs.end(), std::greater<int>());
TakeSnapshot snapshot(this, conv_type == ConversionType::CONV_FROM_INCH ? _L("Convert from imperial units") : TakeSnapshot snapshot(this, conv_type == ConversionType::CONV_FROM_INCH ? _L("Convert from imperial units") :
conv_type == ConversionType::CONV_TO_INCH ? _L("Revert conversion from imperial units") : conv_type == ConversionType::CONV_TO_INCH ? _L("Revert conversion from imperial units") :
conv_type == ConversionType::CONV_FROM_METER ? _L("Convert from meters") : _L("Revert conversion from meters")); conv_type == ConversionType::CONV_FROM_METER ? _L("Convert from meters") : _L("Revert conversion from meters"));
@ -6497,8 +6509,6 @@ void Plater::on_config_change(const DynamicPrintConfig &config)
p->config->set_key_value(opt_key, config.option(opt_key)->clone()); p->config->set_key_value(opt_key, config.option(opt_key)->clone());
if (opt_key == "printer_technology") { if (opt_key == "printer_technology") {
this->set_printer_technology(config.opt_enum<PrinterTechnology>(opt_key)); this->set_printer_technology(config.opt_enum<PrinterTechnology>(opt_key));
// print technology is changed, so we should to update a search list
p->sidebar->update_searcher();
p->sidebar->show_sliced_info_sizer(false); p->sidebar->show_sliced_info_sizer(false);
p->reset_gcode_toolpaths(); p->reset_gcode_toolpaths();
p->view3D->get_canvas3d()->reset_sequential_print_clearance(); p->view3D->get_canvas3d()->reset_sequential_print_clearance();
@ -6747,8 +6757,6 @@ bool Plater::set_printer_technology(PrinterTechnology printer_technology)
p->update_main_toolbar_tooltips(); p->update_main_toolbar_tooltips();
p->sidebar->get_searcher().set_printer_technology(printer_technology);
p->notification_manager->set_fff(printer_technology == ptFFF); p->notification_manager->set_fff(printer_technology == ptFFF);
p->notification_manager->set_slicing_progress_hidden(); p->notification_manager->set_slicing_progress_hidden();
@ -6912,8 +6920,10 @@ void Plater::search(bool plater_is_active)
evt.SetControlDown(true); evt.SetControlDown(true);
canvas3D()->on_char(evt); canvas3D()->on_char(evt);
} }
else else {
p->sidebar->check_and_update_searcher(true);
p->sidebar->get_searcher().show_dialog(); p->sidebar->get_searcher().show_dialog();
}
} }
void Plater::msw_rescale() void Plater::msw_rescale()

View file

@ -113,7 +113,7 @@ public:
void update_mode(); void update_mode();
bool is_collapsed(); bool is_collapsed();
void collapse(bool collapse); void collapse(bool collapse);
void update_searcher(); void check_and_update_searcher(bool respect_mode = false);
void update_ui_from_settings(); void update_ui_from_settings();
#ifdef _MSW_DARK_MODE #ifdef _MSW_DARK_MODE

View file

@ -78,7 +78,7 @@ static std::string get_key(const std::string& opt_key, Preset::Type type)
return std::to_string(int(type)) + ";" + opt_key; return std::to_string(int(type)) + ";" + opt_key;
} }
void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type type, ConfigOptionMode mode) void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type type)
{ {
auto emplace = [this, type](const std::string key, const wxString& label) auto emplace = [this, type](const std::string key, const wxString& label)
{ {
@ -299,8 +299,9 @@ OptionsSearcher::~OptionsSearcher()
{ {
} }
void OptionsSearcher::init(std::vector<InputInfo> input_values) void OptionsSearcher::check_and_update(PrinterTechnology pt_in, ConfigOptionMode mode_in, std::vector<InputInfo> input_values)
{ {
<<<<<<< HEAD
options.clear(); options.clear();
for (auto i : input_values) for (auto i : input_values)
append_options(i.config, i.type, i.mode); append_options(i.config, i.type, i.mode);
@ -315,14 +316,18 @@ void OptionsSearcher::init(std::vector<InputInfo> input_values)
void OptionsSearcher::apply(DynamicPrintConfig* config, Preset::Type type, ConfigOptionMode mode) void OptionsSearcher::apply(DynamicPrintConfig* config, Preset::Type type, ConfigOptionMode mode)
{ {
if (options.empty()) if (options.empty())
=======
if (printer_technology == pt_in && mode == mode_in)
>>>>>>> stable
return; return;
options.erase(std::remove_if(options.begin(), options.end(), [type](Option opt) { options.clear();
return opt.type == type;
}), options.end());
append_options(config, type, mode); printer_technology = pt_in;
mode = mode_in;
for (auto i : input_values)
append_options(i.config, i.type);
sort_options(); sort_options();
search(search_line, true); search(search_line, true);

View file

@ -33,7 +33,6 @@ struct InputInfo
{ {
DynamicPrintConfig* config {nullptr}; DynamicPrintConfig* config {nullptr};
Preset::Type type {Preset::TYPE_INVALID}; Preset::Type type {Preset::TYPE_INVALID};
ConfigOptionMode mode {comSimple};
}; };
struct GroupAndCategory { struct GroupAndCategory {
@ -83,13 +82,14 @@ class OptionsSearcher
{ {
std::string search_line; std::string search_line;
std::map<std::string, GroupAndCategory> groups_and_categories; std::map<std::string, GroupAndCategory> groups_and_categories;
PrinterTechnology printer_technology; PrinterTechnology printer_technology {ptAny};
ConfigOptionMode mode{ comUndef };
std::vector<Option> options {}; std::vector<Option> options {};
std::vector<Option> preferences_options {}; std::vector<Option> preferences_options {};
std::vector<FoundOption> found {}; std::vector<FoundOption> found {};
void append_options(DynamicPrintConfig* config, Preset::Type type, ConfigOptionMode mode); void append_options(DynamicPrintConfig* config, Preset::Type type);
void sort_options() { void sort_options() {
std::sort(options.begin(), options.end(), [](const Option& o1, const Option& o2) { std::sort(options.begin(), options.end(), [](const Option& o1, const Option& o2) {
@ -111,12 +111,18 @@ public:
OptionsSearcher(); OptionsSearcher();
~OptionsSearcher(); ~OptionsSearcher();
<<<<<<< HEAD
void init(std::vector<InputInfo> input_values); void init(std::vector<InputInfo> input_values);
void apply(DynamicPrintConfig *config, void apply(DynamicPrintConfig *config,
Preset::Type type, Preset::Type type,
ConfigOptionMode mode); ConfigOptionMode mode);
void append_preferences_option(const GUI::Line& opt_line); void append_preferences_option(const GUI::Line& opt_line);
void append_preferences_options(const std::vector<GUI::Line>& opt_lines); void append_preferences_options(const std::vector<GUI::Line>& opt_lines);
=======
void check_and_update( PrinterTechnology pt_in,
ConfigOptionMode mode_in,
std::vector<InputInfo> input_values);
>>>>>>> stable
bool search(); bool search();
bool search(const std::string& search, bool force = false); bool search(const std::string& search, bool force = false);
@ -133,8 +139,6 @@ public:
const GroupAndCategory& get_group_and_category (const std::string& opt_key) { return groups_and_categories[opt_key]; } const GroupAndCategory& get_group_and_category (const std::string& opt_key) { return groups_and_categories[opt_key]; }
std::string& search_string() { return search_line; } std::string& search_string() { return search_line; }
void set_printer_technology(PrinterTechnology pt) { printer_technology = pt; }
void sort_options_by_key() { void sort_options_by_key() {
std::sort(options.begin(), options.end(), [](const Option& o1, const Option& o2) { std::sort(options.begin(), options.end(), [](const Option& o1, const Option& o2) {
return o1.key < o2.key; }); return o1.key < o2.key; });

View file

@ -1191,11 +1191,6 @@ void Tab::activate_option(const std::string& opt_key, const wxString& category)
m_highlighter.init(get_custom_ctrl_with_blinking_ptr(opt_key)); m_highlighter.init(get_custom_ctrl_with_blinking_ptr(opt_key));
} }
void Tab::apply_searcher()
{
wxGetApp().sidebar().get_searcher().apply(m_config, m_type, m_mode);
}
void Tab::cache_config_diff(const std::vector<std::string>& selected_options) void Tab::cache_config_diff(const std::vector<std::string>& selected_options)
{ {
m_cache_config.apply_only(m_presets->get_edited_preset().config, selected_options); m_cache_config.apply_only(m_presets->get_edited_preset().config, selected_options);
@ -2836,9 +2831,6 @@ void TabPrinter::build_unregular_pages(bool from_initial_build/* = false*/)
// Reload preset pages with current configuration values // Reload preset pages with current configuration values
reload_config(); reload_config();
// apply searcher with current configuration
apply_searcher();
} }
// this gets executed after preset is loaded and before GUI fields are updated // this gets executed after preset is loaded and before GUI fields are updated

View file

@ -377,7 +377,6 @@ public:
void update_wiping_button_visibility(); void update_wiping_button_visibility();
void activate_option(const std::string& opt_key, const wxString& category); void activate_option(const std::string& opt_key, const wxString& category);
void apply_searcher();
void cache_config_diff(const std::vector<std::string>& selected_options); void cache_config_diff(const std::vector<std::string>& selected_options);
void apply_config_from_cache(); void apply_config_from_cache();

View file

@ -1243,6 +1243,8 @@ void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent
void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* presets_) void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* presets_)
{ {
// update searcher befofre update of tree
wxGetApp().sidebar().check_and_update_searcher();
Search::OptionsSearcher& searcher = wxGetApp().sidebar().get_searcher(); Search::OptionsSearcher& searcher = wxGetApp().sidebar().get_searcher();
searcher.sort_options_by_key(); searcher.sort_options_by_key();
@ -1298,9 +1300,6 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres
get_string_value(opt_key, old_config), get_string_value(opt_key, new_config), category_icon_map.at(option.category)); get_string_value(opt_key, old_config), get_string_value(opt_key, new_config), category_icon_map.at(option.category));
} }
} }
// Revert sort of searcher back
searcher.sort_options_by_label();
} }
void UnsavedChangesDialog::on_dpi_changed(const wxRect& suggested_rect) void UnsavedChangesDialog::on_dpi_changed(const wxRect& suggested_rect)
@ -1606,6 +1605,8 @@ void DiffPresetDialog::update_presets(Preset::Type type)
void DiffPresetDialog::update_tree() void DiffPresetDialog::update_tree()
{ {
// update searcher befofre update of tree
wxGetApp().sidebar().check_and_update_searcher();
Search::OptionsSearcher& searcher = wxGetApp().sidebar().get_searcher(); Search::OptionsSearcher& searcher = wxGetApp().sidebar().get_searcher();
searcher.sort_options_by_key(); searcher.sort_options_by_key();
@ -1708,9 +1709,6 @@ void DiffPresetDialog::update_tree()
Fit(); Fit();
Refresh(); Refresh();
} }
// Revert sort of searcher back
searcher.sort_options_by_label();
} }
void DiffPresetDialog::on_dpi_changed(const wxRect&) void DiffPresetDialog::on_dpi_changed(const wxRect&)