mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-12 02:29:04 +08:00
Fix for SPE-1220:
* Added check of the visibility for selected presets when Configuration is loaded from SLA archive or from the G-code. * SLAImportDialog: * MSW specific: added dark mode * Center on parent
This commit is contained in:
parent
3ce2d3a700
commit
09512c086b
@ -54,6 +54,7 @@ public:
|
|||||||
inp_choices.size(), inp_choices.data(), wxCB_READONLY | wxCB_DROPDOWN);
|
inp_choices.size(), inp_choices.data(), wxCB_READONLY | wxCB_DROPDOWN);
|
||||||
|
|
||||||
szchoices->Add(m_import_dropdown);
|
szchoices->Add(m_import_dropdown);
|
||||||
|
szchoices->AddStretchSpacer(1);
|
||||||
szchoices->Add(new wxStaticText(this, wxID_ANY, _L("Quality") + ": "), 0, wxALIGN_CENTER | wxALL, 5);
|
szchoices->Add(new wxStaticText(this, wxID_ANY, _L("Quality") + ": "), 0, wxALIGN_CENTER | wxALL, 5);
|
||||||
|
|
||||||
static const std::vector<wxString> qual_choices = {
|
static const std::vector<wxString> qual_choices = {
|
||||||
@ -65,7 +66,7 @@ public:
|
|||||||
m_quality_dropdown = new wxComboBox(
|
m_quality_dropdown = new wxComboBox(
|
||||||
this, wxID_ANY, qual_choices[0], wxDefaultPosition, wxDefaultSize,
|
this, wxID_ANY, qual_choices[0], wxDefaultPosition, wxDefaultSize,
|
||||||
qual_choices.size(), qual_choices.data(), wxCB_READONLY | wxCB_DROPDOWN);
|
qual_choices.size(), qual_choices.data(), wxCB_READONLY | wxCB_DROPDOWN);
|
||||||
szchoices->Add(m_quality_dropdown);
|
szchoices->Add(m_quality_dropdown, 1);
|
||||||
|
|
||||||
m_import_dropdown->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &) {
|
m_import_dropdown->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &) {
|
||||||
if (get_selection() == Sel::profileOnly)
|
if (get_selection() == Sel::profileOnly)
|
||||||
@ -73,14 +74,20 @@ public:
|
|||||||
else m_quality_dropdown->Enable();
|
else m_quality_dropdown->Enable();
|
||||||
});
|
});
|
||||||
|
|
||||||
szvert->Add(szchoices, 0, wxALL, 5);
|
szvert->Add(szchoices, 1, wxEXPAND | wxALL, 5);
|
||||||
szvert->AddStretchSpacer(1);
|
|
||||||
auto szbtn = new wxBoxSizer(wxHORIZONTAL);
|
auto szbtn = new wxBoxSizer(wxHORIZONTAL);
|
||||||
szbtn->Add(new wxButton{this, wxID_CANCEL});
|
szbtn->Add(new wxButton{this, wxID_CANCEL}, 0, wxRIGHT, 5);
|
||||||
szbtn->Add(new wxButton{this, wxID_OK});
|
szbtn->Add(new wxButton{this, wxID_OK});
|
||||||
szvert->Add(szbtn, 0, wxALIGN_RIGHT | wxALL, 5);
|
szvert->Add(szbtn, 0, wxALIGN_RIGHT | wxALL, 5);
|
||||||
|
|
||||||
SetSizerAndFit(szvert);
|
SetSizerAndFit(szvert);
|
||||||
|
wxGetApp().UpdateDlgDarkUI(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ShowModal() override
|
||||||
|
{
|
||||||
|
CenterOnParent();
|
||||||
|
return wxDialog::ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
Sel get_selection() const override
|
Sel get_selection() const override
|
||||||
|
@ -139,6 +139,7 @@ void SLAImportJob::finalize(bool canceled, std::exception_ptr &eptr)
|
|||||||
config += std::move(p->profile);
|
config += std::move(p->profile);
|
||||||
|
|
||||||
wxGetApp().preset_bundle->load_config_model(name, std::move(config));
|
wxGetApp().preset_bundle->load_config_model(name, std::move(config));
|
||||||
|
p->plater->check_selected_presets_visibility(ptSLA);
|
||||||
wxGetApp().load_current_presets();
|
wxGetApp().load_current_presets();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1821,6 +1821,8 @@ bool MainFrame::load_config_file(const std::string &path)
|
|||||||
show_error(this, ex.what());
|
show_error(this, ex.what());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_plater->check_selected_presets_visibility(ptFFF);
|
||||||
wxGetApp().load_current_presets();
|
wxGetApp().load_current_presets();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2336,6 +2336,52 @@ std::string Plater::priv::get_config(const std::string &key) const
|
|||||||
return wxGetApp().app_config->get(key);
|
return wxGetApp().app_config->get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// After loading of the presets from project, check if they are visible.
|
||||||
|
// Set them to visible if they are not.
|
||||||
|
void Plater::check_selected_presets_visibility(PrinterTechnology loaded_printer_technology)
|
||||||
|
{
|
||||||
|
auto update_selected_preset_visibility = [](PresetCollection& presets, std::vector<std::string>& names) {
|
||||||
|
if (!presets.get_selected_preset().is_visible) {
|
||||||
|
assert(presets.get_selected_preset().name == presets.get_edited_preset().name);
|
||||||
|
presets.get_selected_preset().is_visible = true;
|
||||||
|
presets.get_edited_preset().is_visible = true;
|
||||||
|
names.emplace_back(presets.get_selected_preset().name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<std::string> names;
|
||||||
|
PresetBundle* preset_bundle = wxGetApp().preset_bundle;
|
||||||
|
if (loaded_printer_technology == ptFFF) {
|
||||||
|
update_selected_preset_visibility(preset_bundle->prints, names);
|
||||||
|
for (const std::string& filament : preset_bundle->filament_presets) {
|
||||||
|
Preset* preset = preset_bundle->filaments.find_preset(filament);
|
||||||
|
if (preset && !preset->is_visible) {
|
||||||
|
preset->is_visible = true;
|
||||||
|
names.emplace_back(preset->name);
|
||||||
|
if (preset->name == preset_bundle->filaments.get_edited_preset().name)
|
||||||
|
preset_bundle->filaments.get_selected_preset().is_visible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
update_selected_preset_visibility(preset_bundle->sla_prints, names);
|
||||||
|
update_selected_preset_visibility(preset_bundle->sla_materials, names);
|
||||||
|
}
|
||||||
|
update_selected_preset_visibility(preset_bundle->printers, names);
|
||||||
|
|
||||||
|
preset_bundle->update_compatible(PresetSelectCompatibleType::Never);
|
||||||
|
|
||||||
|
// show notification about temporarily installed presets
|
||||||
|
if (!names.empty()) {
|
||||||
|
std::string notif_text = into_u8(_L_PLURAL("The preset below was temporarily installed on the active instance of PrusaSlicer",
|
||||||
|
"The presets below were temporarily installed on the active instance of PrusaSlicer", names.size())) + ":";
|
||||||
|
for (std::string& name : names)
|
||||||
|
notif_text += "\n - " + name;
|
||||||
|
get_notification_manager()->push_notification(NotificationType::CustomNotification,
|
||||||
|
NotificationManager::NotificationLevel::PrintInfoNotificationLevel, notif_text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_files, bool load_model, bool load_config, bool imperial_units/* = false*/)
|
std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_files, bool load_model, bool load_config, bool imperial_units/* = false*/)
|
||||||
{
|
{
|
||||||
if (input_files.empty()) { return std::vector<size_t>(); }
|
if (input_files.empty()) { return std::vector<size_t>(); }
|
||||||
@ -2435,50 +2481,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
|||||||
Preset::normalize(config);
|
Preset::normalize(config);
|
||||||
PresetBundle* preset_bundle = wxGetApp().preset_bundle;
|
PresetBundle* preset_bundle = wxGetApp().preset_bundle;
|
||||||
preset_bundle->load_config_model(filename.string(), std::move(config));
|
preset_bundle->load_config_model(filename.string(), std::move(config));
|
||||||
{
|
q->check_selected_presets_visibility(loaded_printer_technology);
|
||||||
// After loading of the presets from project, check if they are visible.
|
|
||||||
// Set them to visible if they are not.
|
|
||||||
|
|
||||||
auto update_selected_preset_visibility = [](PresetCollection& presets, std::vector<std::string>& names) {
|
|
||||||
if (!presets.get_selected_preset().is_visible) {
|
|
||||||
assert(presets.get_selected_preset().name == presets.get_edited_preset().name);
|
|
||||||
presets.get_selected_preset().is_visible = true;
|
|
||||||
presets.get_edited_preset().is_visible = true;
|
|
||||||
names.emplace_back(presets.get_selected_preset().name);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
std::vector<std::string> names;
|
|
||||||
if (loaded_printer_technology == ptFFF) {
|
|
||||||
update_selected_preset_visibility(preset_bundle->prints, names);
|
|
||||||
for (const std::string& filament : preset_bundle->filament_presets) {
|
|
||||||
Preset* preset = preset_bundle->filaments.find_preset(filament);
|
|
||||||
if (preset && !preset->is_visible) {
|
|
||||||
preset->is_visible = true;
|
|
||||||
names.emplace_back(preset->name);
|
|
||||||
if (preset->name == preset_bundle->filaments.get_edited_preset().name)
|
|
||||||
preset_bundle->filaments.get_selected_preset().is_visible = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
update_selected_preset_visibility(preset_bundle->sla_prints, names);
|
|
||||||
update_selected_preset_visibility(preset_bundle->sla_materials, names);
|
|
||||||
}
|
|
||||||
update_selected_preset_visibility(preset_bundle->printers, names);
|
|
||||||
|
|
||||||
preset_bundle->update_compatible(PresetSelectCompatibleType::Never);
|
|
||||||
|
|
||||||
// show notification about temporarily installed presets
|
|
||||||
if (!names.empty()) {
|
|
||||||
std::string notif_text = into_u8(_L_PLURAL("The preset below was temporarily installed on the active instance of PrusaSlicer",
|
|
||||||
"The presets below were temporarily installed on the active instance of PrusaSlicer", names.size())) + ":";
|
|
||||||
for (std::string& name : names)
|
|
||||||
notif_text += "\n - " + name;
|
|
||||||
notification_manager->push_notification(NotificationType::CustomNotification,
|
|
||||||
NotificationManager::NotificationLevel::PrintInfoNotificationLevel, notif_text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (loaded_printer_technology == ptFFF)
|
if (loaded_printer_technology == ptFFF)
|
||||||
CustomGCode::update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, &preset_bundle->project_config);
|
CustomGCode::update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, &preset_bundle->project_config);
|
||||||
|
@ -175,6 +175,7 @@ public:
|
|||||||
std::vector<size_t> load_files(const std::vector<std::string>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
|
std::vector<size_t> load_files(const std::vector<std::string>& input_files, bool load_model = true, bool load_config = true, bool imperial_units = false);
|
||||||
// to be called on drag and drop
|
// to be called on drag and drop
|
||||||
bool load_files(const wxArrayString& filenames);
|
bool load_files(const wxArrayString& filenames);
|
||||||
|
void check_selected_presets_visibility(PrinterTechnology loaded_printer_technology);
|
||||||
|
|
||||||
const wxString& get_last_loaded_gcode() const { return m_last_loaded_gcode; }
|
const wxString& get_last_loaded_gcode() const { return m_last_loaded_gcode; }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user