FIX: [STUDIO-4502 4505 4558] create filament dialog issue

Jira: STUDIO 4502 4505 4888

fix: 4502 modify vendor
fix: 4505 renew preset name in filament combobox
fix: 4558 reload from disk, delaying busyinfo
fix: encoding filament preset name

Change-Id: Iff55f539c5b0dd4c96ef22ba84ef22ce4d762443
This commit is contained in:
maosheng.wei 2023-09-22 20:49:19 +08:00 committed by Lane.Wei
parent f9f44d0785
commit d01a3c331b
5 changed files with 79 additions and 46 deletions

View File

@ -2080,7 +2080,7 @@ Preset& PresetCollection::load_preset(const std::string &path, const std::string
return preset; return preset;
} }
bool PresetCollection::clone_presets(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::function<void(Preset &)> modifier, bool force_rewritten) bool PresetCollection::clone_presets(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::function<void(Preset &, Preset::Type &)> modifier, bool force_rewritten)
{ {
std::vector<Preset> new_presets; std::vector<Preset> new_presets;
for (auto curr_preset : presets) { for (auto curr_preset : presets) {
@ -2095,13 +2095,12 @@ bool PresetCollection::clone_presets(std::vector<Preset const *> const &presets,
preset.is_external = false; preset.is_external = false;
preset.is_visible = true; preset.is_visible = true;
preset.is_project_embedded = false; preset.is_project_embedded = false;
modifier(preset); modifier(preset, m_type);
if (find_preset(preset.name)) { if (find_preset(preset.name)) {
failures.push_back(preset.name); failures.push_back(preset.name);
continue; continue;
} }
preset.file = this->path_for_preset(preset); preset.file = this->path_for_preset(preset);
preset.alias.clear();
if (m_type == Preset::TYPE_PRINT) if (m_type == Preset::TYPE_PRINT)
preset.config.option<ConfigOptionString>("print_settings_id", true)->value = preset.name; preset.config.option<ConfigOptionString>("print_settings_id", true)->value = preset.name;
else if (m_type == Preset::TYPE_FILAMENT) else if (m_type == Preset::TYPE_FILAMENT)
@ -2114,6 +2113,7 @@ bool PresetCollection::clone_presets(std::vector<Preset const *> const &presets,
return false; return false;
lock(); lock();
for (auto preset : new_presets) { for (auto preset : new_presets) {
preset.alias.clear();
auto it = this->find_preset_internal(preset.name); auto it = this->find_preset_internal(preset.name);
assert((it == m_presets.end() || it->name != preset.name) || force_rewritten); assert((it == m_presets.end() || it->name != preset.name) || force_rewritten);
if (it == m_presets.end() || it->name != preset.name) { if (it == m_presets.end() || it->name != preset.name) {
@ -2130,7 +2130,7 @@ bool PresetCollection::clone_presets(std::vector<Preset const *> const &presets,
bool PresetCollection::clone_presets_for_printer(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::string const &printer, bool force_rewritten) bool PresetCollection::clone_presets_for_printer(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::string const &printer, bool force_rewritten)
{ {
return clone_presets(presets, failures, [printer](Preset &preset) { return clone_presets(presets, failures, [printer](Preset &preset, Preset::Type &type) {
preset.name = preset.name.substr(0, preset.name.find("@")) + " @" + printer; preset.name = preset.name.substr(0, preset.name.find("@")) + " @" + printer;
//preset.alias = ""; //preset.alias = "";
auto *compatible_printers = dynamic_cast<ConfigOptionStrings *>(preset.config.option("compatible_printers")); auto *compatible_printers = dynamic_cast<ConfigOptionStrings *>(preset.config.option("compatible_printers"));
@ -2147,11 +2147,13 @@ bool PresetCollection::clone_presets_for_filament(std::vector<Preset const *> co
std::vector<std::string> & failures, std::vector<std::string> & failures,
std::string const & filament_name, std::string const & filament_name,
std::string const & filament_id, std::string const & filament_id,
bool force_rewritten) const std::string & vendor_name,
bool force_rewritten)
{ {
return clone_presets(presets, failures, [filament_name, filament_id](Preset &preset) { return clone_presets(presets, failures, [filament_name, filament_id, vendor_name](Preset &preset, Preset::Type &type) {
preset.name = filament_name + " " + preset.name.substr(preset.name.find_last_of('@')); preset.name = filament_name + " " + preset.name.substr(preset.name.find_last_of('@'));
//preset.alias = ""; if (type == Preset::TYPE_FILAMENT)
preset.config.option<ConfigOptionStrings>("filament_vendor", true)->values[0] = vendor_name;
preset.filament_id = filament_id; preset.filament_id = filament_id;
}, },
force_rewritten); force_rewritten);

View File

@ -450,10 +450,10 @@ public:
Preset& load_preset(const std::string &path, const std::string &name, const DynamicPrintConfig &config, bool select = true, Semver file_version = Semver(), bool is_custom_defined = false); Preset& load_preset(const std::string &path, const std::string &name, const DynamicPrintConfig &config, bool select = true, Semver file_version = Semver(), bool is_custom_defined = false);
Preset& load_preset(const std::string &path, const std::string &name, DynamicPrintConfig &&config, bool select = true, Semver file_version = Semver(), bool is_custom_defined = false); Preset& load_preset(const std::string &path, const std::string &name, DynamicPrintConfig &&config, bool select = true, Semver file_version = Semver(), bool is_custom_defined = false);
bool clone_presets(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::function<void(Preset &)> modifier, bool force_rewritten = false); bool clone_presets(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::function<void(Preset &, Preset::Type &)> modifier, bool force_rewritten = false);
bool clone_presets_for_printer(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::string const &printer, bool force_rewritten = false); bool clone_presets_for_printer(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::string const &printer, bool force_rewritten = false);
bool create_presets_from_template_for_printer(std::vector<std::string> const &templates, std::vector<std::string> &failures, std::string const &printer); bool create_presets_from_template_for_printer(std::vector<std::string> const &templates, std::vector<std::string> &failures, std::string const &printer);
bool clone_presets_for_filament(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::string const &filament_name, std::string const &filament_id, bool force_rewritten = false); bool clone_presets_for_filament(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::string const &filament_name, std::string const &filament_id, const std::string& vendor, bool force_rewritten = false);
std::map<std::string, std::vector<Preset const *>> get_filament_presets() const; std::map<std::string, std::vector<Preset const *>> get_filament_presets() const;

View File

@ -214,10 +214,10 @@ static wxBoxSizer *create_select_filament_preset_checkbox(wxWindow *
combobox->SetLabel(_L("Select filament preset")); combobox->SetLabel(_L("Select filament preset"));
combobox->Bind(wxEVT_COMBOBOX, [combobox, checkbox, presets, &machine_filament_preset](wxCommandEvent &e) { combobox->Bind(wxEVT_COMBOBOX, [combobox, checkbox, presets, &machine_filament_preset](wxCommandEvent &e) {
combobox->SetLabelColor(*wxBLACK); combobox->SetLabelColor(*wxBLACK);
std::string preset_name = into_u8(combobox->GetLabel()); wxString preset_name = combobox->GetStringSelection();
checkbox->SetValue(true); checkbox->SetValue(true);
for (Preset *preset : presets) { for (Preset *preset : presets) {
if (preset_name == preset->name) { if (preset_name == wxString::FromUTF8(preset->name)) {
machine_filament_preset[checkbox] = preset; machine_filament_preset[checkbox] = preset;
} }
} }
@ -228,7 +228,7 @@ static wxBoxSizer *create_select_filament_preset_checkbox(wxWindow *
wxArrayString choices; wxArrayString choices;
for (Preset *preset : presets) { for (Preset *preset : presets) {
choices.Add(preset->name); choices.Add(wxString::FromUTF8(preset->name));
} }
combobox->Set(choices); combobox->Set(choices);
@ -371,8 +371,9 @@ static char* read_json_file(const std::string &preset_path)
return json_contents; return json_contents;
} }
CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent) CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent, bool modify_filament)
: DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Creat Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Creat Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX), m_modify_filament(modify_filament)
{
m_create_type.base_filament = _L("Create based on current filamet"); m_create_type.base_filament = _L("Create based on current filamet");
m_create_type.base_filament_preset = _L("Copy current filament preset "); m_create_type.base_filament_preset = _L("Copy current filament preset ");
@ -468,6 +469,8 @@ wxBoxSizer *CreateFilamentPresetDialog::create_vendor_item()
Layout(); Layout();
Fit(); Fit();
}); });
m_filament_vendor_combobox->Enable(!m_modify_filament);
horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10));
wxBoxSizer *textInputSizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *textInputSizer = new wxBoxSizer(wxVERTICAL);
@ -504,6 +507,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_type_item()
m_filament_type_combobox->Set(filament_type); m_filament_type_combobox->Set(filament_type);
comboBoxSizer->Add(m_filament_type_combobox, 0, wxEXPAND | wxALL, 0); comboBoxSizer->Add(m_filament_type_combobox, 0, wxEXPAND | wxALL, 0);
horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10));
m_filament_type_combobox->Enable(!m_modify_filament);
m_filament_type_combobox->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { m_filament_type_combobox->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) {
m_filament_type_combobox->SetLabelColor(*wxBLACK); m_filament_type_combobox->SetLabelColor(*wxBLACK);
@ -539,6 +543,16 @@ wxBoxSizer *CreateFilamentPresetDialog::create_serial_item()
wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxVERTICAL);
m_filament_serial_input = new TextInput(this, "", "", "", wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, wxTE_PROCESS_ENTER); m_filament_serial_input = new TextInput(this, "", "", "", wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, wxTE_PROCESS_ENTER);
comboBoxSizer->Add(m_filament_serial_input, 0, wxEXPAND | wxALL, 0); comboBoxSizer->Add(m_filament_serial_input, 0, wxEXPAND | wxALL, 0);
m_filament_serial_input->GetTextCtrl()->Bind(wxEVT_CHAR, [this](wxKeyEvent &event) {
int key = event.GetKeyCode();
if (key == 64) {
event.Skip(false);
return;
}
event.Skip();
});
m_filament_serial_input->Enable(!m_modify_filament);
wxStaticText *static_eg_text = new wxStaticText(this, wxID_ANY, _L("e.g. Basic, Matte, Silk, Marble"), wxDefaultPosition, wxDefaultSize); wxStaticText *static_eg_text = new wxStaticText(this, wxID_ANY, _L("e.g. Basic, Matte, Silk, Marble"), wxDefaultPosition, wxDefaultSize);
static_eg_text->SetForegroundColour(wxColour("#6B6B6B")); static_eg_text->SetForegroundColour(wxColour("#6B6B6B"));
static_eg_text->SetFont(::Label::Body_12); static_eg_text->SetFont(::Label::Body_12);
@ -568,15 +582,15 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_item()
m_filament_preset_combobox->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { m_filament_preset_combobox->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) {
m_filament_preset_combobox->SetLabelColor(*wxBLACK); m_filament_preset_combobox->SetLabelColor(*wxBLACK);
std::string filament_type = into_u8(m_filament_preset_combobox->GetStringSelection()); wxString filament_type = m_filament_preset_combobox->GetStringSelection();
std::unordered_map<std::string, std::vector<Preset *>>::iterator iter = m_filament_choice_map.find(m_public_name_to_filament_id_map[filament_type]); std::unordered_map<std::string, std::vector<Preset *>>::iterator iter = m_filament_choice_map.find(m_public_name_to_filament_id_map[filament_type]);
m_filament_preset_panel->Freeze(); m_filament_preset_panel->Freeze();
m_filament_presets_sizer->Clear(true); m_filament_presets_sizer->Clear(true);
m_filament_preset.clear(); m_filament_preset.clear();
if (iter != m_filament_choice_map.end()) { if (iter != m_filament_choice_map.end()) {
for (Preset* preset : iter->second) { for (Preset* preset : iter->second) {
std::string preset_name = wxString::FromUTF8(preset->name).ToStdString(); std::string preset_name = preset->name;
size_t index_at = preset_name.find("@"); size_t index_at = preset_name.find("@");
if (std::string::npos != index_at) { if (std::string::npos != index_at) {
std::string machine_name = preset_name.substr(index_at + 1); std::string machine_name = preset_name.substr(index_at + 1);
@ -704,7 +718,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item()
} }
if (!filament_presets.empty()) { if (!filament_presets.empty()) {
std::vector<std::string> failures; std::vector<std::string> failures;
bool res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id); bool res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, vendor_name);
if (!res) { if (!res) {
std::string failure_names; std::string failure_names;
for (std::string &failure : failures) { for (std::string &failure : failures) {
@ -713,7 +727,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item()
MessageDialog dlg(this, _L("Some existing presets have failed to be created, as follows:\n") + failure_names + _L("\nDo you want to rewrite it?"), MessageDialog dlg(this, _L("Some existing presets have failed to be created, as follows:\n") + failure_names + _L("\nDo you want to rewrite it?"),
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE); wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
if (dlg.ShowModal() == wxID_YES) { if (dlg.ShowModal() == wxID_YES) {
res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, true); res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, vendor_name, true);
BOOST_LOG_TRIVIAL(info) << "clone filament have failures rewritten is successful? "<< res; BOOST_LOG_TRIVIAL(info) << "clone filament have failures rewritten is successful? "<< res;
} else { } else {
std::vector<Preset const *> temp_filament_presets; std::vector<Preset const *> temp_filament_presets;
@ -728,7 +742,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item()
} }
} }
if (temp_filament_presets.empty()) return; if (temp_filament_presets.empty()) return;
preset_bundle->filaments.clone_presets_for_filament(temp_filament_presets, failures, filament_preset_name, user_filament_id); preset_bundle->filaments.clone_presets_for_filament(temp_filament_presets, failures, filament_preset_name, user_filament_id, vendor_name);
BOOST_LOG_TRIVIAL(info) << "clone filament have failures not rewritten is successful? " << res; BOOST_LOG_TRIVIAL(info) << "clone filament have failures not rewritten is successful? " << res;
} }
} }
@ -748,14 +762,14 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item()
} }
if (!filament_presets.empty()) { if (!filament_presets.empty()) {
std::vector<std::string> failures; std::vector<std::string> failures;
bool res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id); bool res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, vendor_name);
if (!res) { if (!res) {
std::string failure_names; std::string failure_names;
for (std::string &failure : failures) { failure_names += failure + "\n"; } for (std::string &failure : failures) { failure_names += failure + "\n"; }
MessageDialog dlg(this, _L("Some existing presets have failed to be created, as follows:\n") + failure_names + _L("\nDo you want to rewrite it?"), MessageDialog dlg(this, _L("Some existing presets have failed to be created, as follows:\n") + failure_names + _L("\nDo you want to rewrite it?"),
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE); wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
if (wxID_YES == dlg.ShowModal()) { if (wxID_YES == dlg.ShowModal()) {
res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, true); res = preset_bundle->filaments.clone_presets_for_filament(filament_presets, failures, filament_preset_name, user_filament_id, vendor_name, true);
BOOST_LOG_TRIVIAL(info) << "clone filament presets have failures rewritten is successful? " << res; BOOST_LOG_TRIVIAL(info) << "clone filament presets have failures rewritten is successful? " << res;
} else { } else {
std::vector<Preset const *> temp_filament_presets; std::vector<Preset const *> temp_filament_presets;
@ -770,7 +784,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item()
} }
} }
if (temp_filament_presets.empty()) return; if (temp_filament_presets.empty()) return;
preset_bundle->filaments.clone_presets_for_filament(temp_filament_presets, failures, filament_preset_name, user_filament_id); preset_bundle->filaments.clone_presets_for_filament(temp_filament_presets, failures, filament_preset_name, user_filament_id, vendor_name);
BOOST_LOG_TRIVIAL(info) << "clone filament have failures not rewritten is successful? " << res; BOOST_LOG_TRIVIAL(info) << "clone filament have failures not rewritten is successful? " << res;
} }
} }
@ -828,17 +842,17 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices()
int suffix = 0; int suffix = 0;
for (const pair<std::string, std::vector<Preset *>> &preset : m_filament_choice_map) { for (const pair<std::string, std::vector<Preset *>> &preset : m_filament_choice_map) {
if (preset.second.empty()) continue; if (preset.second.empty()) continue;
std::set<std::string> preset_name_set; std::set<wxString> preset_name_set;
for (Preset* filament_preset : preset.second) { for (Preset* filament_preset : preset.second) {
std::string preset_name = filament_preset->name; std::string preset_name = filament_preset->name;
size_t index_at = preset_name.find("@"); size_t index_at = preset_name.find("@");
if (std::string::npos != index_at) { if (std::string::npos != index_at) {
std::string cur_preset_name = preset_name.substr(0, index_at - 1); std::string cur_preset_name = preset_name.substr(0, index_at - 1);
preset_name_set.insert(cur_preset_name); preset_name_set.insert(wxString::FromUTF8(cur_preset_name));
} }
} }
assert(1 == preset_name_set.size()); assert(1 == preset_name_set.size());
for (const std::string& public_name : preset_name_set) { for (const wxString& public_name : preset_name_set) {
if (m_public_name_to_filament_id_map.find(public_name) != m_public_name_to_filament_id_map.end()) { if (m_public_name_to_filament_id_map.find(public_name) != m_public_name_to_filament_id_map.end()) {
suffix++; suffix++;
m_public_name_to_filament_id_map[public_name + "_" + std::to_string(suffix)] = preset.first; m_public_name_to_filament_id_map[public_name + "_" + std::to_string(suffix)] = preset.first;
@ -968,7 +982,7 @@ void CreateFilamentPresetDialog::get_all_filament_presets()
for (const Preset &preset : filament_presets) { for (const Preset &preset : filament_presets) {
if (preset.filament_id.empty() || "null" == preset.filament_id) continue; if (preset.filament_id.empty() || "null" == preset.filament_id) continue;
std::string filament_preset_name = wxString::FromUTF8(preset.name).ToStdString(); std::string filament_preset_name = preset.name;
Preset *filament_preset = new Preset(preset); Preset *filament_preset = new Preset(preset);
m_all_presets_map[filament_preset_name] = filament_preset; m_all_presets_map[filament_preset_name] = filament_preset;
} }
@ -979,7 +993,7 @@ void CreateFilamentPresetDialog::get_all_filament_presets()
if (filament_id_to_presets.first.empty()) continue; if (filament_id_to_presets.first.empty()) continue;
for (const Preset *preset : filament_id_to_presets.second) { for (const Preset *preset : filament_id_to_presets.second) {
if (preset->filament_id.empty() || "null" == preset->filament_id) continue; if (preset->filament_id.empty() || "null" == preset->filament_id) continue;
std::string filament_preset_name = wxString::FromUTF8(preset->name).ToStdString(); std::string filament_preset_name = preset->name;
if (!preset->is_visible) continue; if (!preset->is_visible) continue;
Preset *filament_preset = new Preset(*preset); Preset *filament_preset = new Preset(*preset);
m_all_presets_map[filament_preset_name] = filament_preset; m_all_presets_map[filament_preset_name] = filament_preset;
@ -1022,7 +1036,7 @@ CreatePrinterPresetDialog::CreatePrinterPresetDialog(wxWindow *parent)
m_page1 = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_page1 = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);
m_page1->SetBackgroundColour(*wxWHITE); m_page1->SetBackgroundColour(*wxWHITE);
m_page1->SetScrollRate(0, 5); m_page1->SetScrollRate(5, 5);
m_page2 = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_page2 = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);
m_page2->SetScrollRate(5, 5); m_page2->SetScrollRate(5, 5);
m_page2->SetBackgroundColour(*wxWHITE); m_page2->SetBackgroundColour(*wxWHITE);
@ -1093,20 +1107,20 @@ void CreatePrinterPresetDialog::create_printer_page1(wxWindow *parent)
{ {
this->SetBackgroundColour(*wxWHITE); this->SetBackgroundColour(*wxWHITE);
wxBoxSizer *page1_sizer = new wxBoxSizer(wxVERTICAL); m_page1_sizer = new wxBoxSizer(wxVERTICAL);
page1_sizer->Add(create_type_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_type_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_printer_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_printer_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_nozzle_diameter_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_nozzle_diameter_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_bed_shape_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_bed_shape_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_bed_size_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_bed_size_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_origin_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_origin_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_hot_bed_stl_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_hot_bed_stl_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_hot_bed_svg_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_hot_bed_svg_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_max_print_height_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_max_print_height_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
page1_sizer->Add(create_page1_btns_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page1_sizer->Add(create_page1_btns_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5));
parent->SetSizerAndFit(page1_sizer); parent->SetSizerAndFit(m_page1_sizer);
Layout(); Layout();
wxGetApp().UpdateDlgDarkUI(this); wxGetApp().UpdateDlgDarkUI(this);
@ -1215,6 +1229,14 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent)
m_custom_vendor_model->SetHint(_L("Input Printer Vendor and Model")); m_custom_vendor_model->SetHint(_L("Input Printer Vendor and Model"));
checkbox_sizer->Add(m_custom_vendor_model, 0, wxLEFT | wxALIGN_CENTER, FromDIP(13)); checkbox_sizer->Add(m_custom_vendor_model, 0, wxLEFT | wxALIGN_CENTER, FromDIP(13));
m_custom_vendor_model->Hide(); m_custom_vendor_model->Hide();
m_custom_vendor_model->Bind(wxEVT_CHAR, [this](wxKeyEvent &event) {
int key = event.GetKeyCode();
if (key == 64) { // "@" can not be inputed
event.Skip(false);
return;
}
event.Skip();
});
m_can_not_find_vendor_combox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent &e) { m_can_not_find_vendor_combox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent &e) {
bool value = m_can_not_find_vendor_combox->GetValue(); bool value = m_can_not_find_vendor_combox->GetValue();
@ -1231,6 +1253,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent)
} }
Refresh(); Refresh();
Layout(); Layout();
m_page1->SetSizerAndFit(m_page1_sizer);
Fit(); Fit();
}); });
@ -1468,7 +1491,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page1_btns_item(wxWindow *parent)
bSizer_button->Add(m_button_OK, 0, wxRIGHT, FromDIP(10)); bSizer_button->Add(m_button_OK, 0, wxRIGHT, FromDIP(10));
m_button_OK->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { m_button_OK->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
//if (!validate_input_valid()) return; if (!validate_input_valid()) return;
data_init(); data_init();
show_page2(); show_page2();
}); });
@ -1559,6 +1582,7 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vector<std::pair<Radio
m_filament_preset.clear(); m_filament_preset.clear();
m_process_preset_template_sizer->Clear(true); m_process_preset_template_sizer->Clear(true);
m_process_preset.clear(); m_process_preset.clear();
m_page2->SetSizerAndFit(m_page2_sizer);
} else if (curr_selected_type == m_create_presets_type[1]) { } else if (curr_selected_type == m_create_presets_type[1]) {
if (into_u8(m_printer_model->GetLabel()) == _L("Select model")) { if (into_u8(m_printer_model->GetLabel()) == _L("Select model")) {
m_filament_preset_template_sizer->Clear(true); m_filament_preset_template_sizer->Clear(true);
@ -1568,6 +1592,7 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vector<std::pair<Radio
} else { } else {
update_presets_list(); update_presets_list();
} }
m_page2->SetSizerAndFit(m_page2_sizer);
} else if (curr_selected_type == m_create_printer_type[0]) { } else if (curr_selected_type == m_create_printer_type[0]) {
m_select_printer->Hide(); m_select_printer->Hide();
m_select_vendor->Show(); m_select_vendor->Show();
@ -1577,6 +1602,7 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vector<std::pair<Radio
if (m_can_not_find_vendor_combox->GetValue()) { if (m_can_not_find_vendor_combox->GetValue()) {
m_custom_vendor_model->Show(); m_custom_vendor_model->Show();
} }
m_page1->SetSizerAndFit(m_page1_sizer);
} else if (curr_selected_type == m_create_printer_type[1]) { } else if (curr_selected_type == m_create_printer_type[1]) {
m_select_vendor->Hide(); m_select_vendor->Hide();
m_select_model->Hide(); m_select_model->Hide();
@ -1584,13 +1610,15 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vector<std::pair<Radio
m_can_not_find_vendor_text->Hide(); m_can_not_find_vendor_text->Hide();
m_custom_vendor_model->Hide(); m_custom_vendor_model->Hide();
m_select_printer->Show(); m_select_printer->Show();
m_page1->SetSizerAndFit(m_page1_sizer);
} }
} else { } else {
radiobox_list[i].first->SetValue(false); radiobox_list[i].first->SetValue(false);
} }
} }
Layout(); Layout();
m_page2->SetSizerAndFit(m_page2_sizer); //m_page1->SetSizerAndFit(m_page1_sizer);
//m_page2->SetSizerAndFit(m_page2_sizer);
Fit(); Fit();
int screen_height = (int) wxGetDisplaySize().GetHeight() * 4 / 5; int screen_height = (int) wxGetDisplaySize().GetHeight() * 4 / 5;
if (this->GetSize().GetHeight() > screen_height) { if (this->GetSize().GetHeight() > screen_height) {

View File

@ -18,7 +18,7 @@ namespace GUI {
class CreateFilamentPresetDialog : public DPIDialog class CreateFilamentPresetDialog : public DPIDialog
{ {
public: public:
CreateFilamentPresetDialog(wxWindow *parent); CreateFilamentPresetDialog(wxWindow *parent, bool modify_filament = false);
~CreateFilamentPresetDialog(); ~CreateFilamentPresetDialog();
protected: protected:
@ -62,8 +62,9 @@ private:
std::vector<std::pair<CheckBox *, Preset *>> m_filament_preset; std::vector<std::pair<CheckBox *, Preset *>> m_filament_preset;
std::unordered_map<CheckBox *, Preset *> m_machint_filament_preset; std::unordered_map<CheckBox *, Preset *> m_machint_filament_preset;
std::unordered_map<std::string, std::vector<Preset *>> m_filament_choice_map; std::unordered_map<std::string, std::vector<Preset *>> m_filament_choice_map;
std::unordered_map<std::string, std::string> m_public_name_to_filament_id_map; std::unordered_map<wxString, std::string> m_public_name_to_filament_id_map;
std::unordered_map<std::string, Preset *> m_all_presets_map; std::unordered_map<std::string, Preset *> m_all_presets_map;
bool m_modify_filament;
CreateType m_create_type; CreateType m_create_type;
Button * m_button_create = nullptr; Button * m_button_create = nullptr;
Button * m_button_cancel = nullptr; Button * m_button_cancel = nullptr;
@ -172,6 +173,7 @@ private:
wxPanel * m_filament_preset_panel = nullptr; wxPanel * m_filament_preset_panel = nullptr;
wxPanel * m_process_preset_panel = nullptr; wxPanel * m_process_preset_panel = nullptr;
wxPanel * m_preset_template_panel = nullptr; wxPanel * m_preset_template_panel = nullptr;
wxBoxSizer * m_page1_sizer = nullptr;
wxBoxSizer * m_page2_sizer = nullptr; wxBoxSizer * m_page2_sizer = nullptr;
std::string m_custom_texture; std::string m_custom_texture;
std::string m_custom_model; std::string m_custom_model;

View File

@ -4959,7 +4959,6 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const
{ {
const std::string path = new_path.string(); const std::string path = new_path.string();
wxBusyCursor wait; wxBusyCursor wait;
wxBusyInfo info(_devL("Replace from:") + " " + from_u8(path), q->get_current_canvas3D()->get_wxglcanvas());
Model new_model; Model new_model;
try { try {
@ -4980,6 +4979,8 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const
return false; return false;
} }
wxBusyInfo info(_devL("Replace from:") + " " + from_u8(path), q->get_current_canvas3D()->get_wxglcanvas());
if (!snapshot.empty()) if (!snapshot.empty())
q->take_snapshot(snapshot); q->take_snapshot(snapshot);