FIX: the data and UI are out of sync when creating printer
jira: STUDIO-11080 Change-Id: I4cc86174b4ed847b53c87f85f9e590742e6dd9ff
This commit is contained in:
parent
10945fcafc
commit
c366876acf
|
@ -2690,7 +2690,7 @@ std::vector<std::string> PresetCollection::diameters_of_selected_printer()
|
|||
std::set<std::string> diameters;
|
||||
auto printer_model = m_edited_preset.config.opt_string("printer_model");
|
||||
for (auto &preset : m_presets) {
|
||||
if (preset.is_system && preset.config.opt_string("printer_model") == printer_model)
|
||||
if (preset.config.opt_string("printer_model") == printer_model)
|
||||
diameters.insert(preset.config.opt_string("printer_variant"));
|
||||
}
|
||||
return std::vector<std::string>{diameters.begin(), diameters.end()};
|
||||
|
|
|
@ -1629,6 +1629,10 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent)
|
|||
MessageDialog dlg(this, _L("The model is not fond, place reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
}
|
||||
|
||||
m_select_printer->SetSelection(-1);
|
||||
m_select_printer->SetValue(_L("Select Printer"));
|
||||
m_select_printer->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR);
|
||||
e.Skip();
|
||||
});
|
||||
|
||||
|
@ -2426,6 +2430,8 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vector<std::pair<Radio
|
|||
int len = radiobox_list.size();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (i == btn_idx) {
|
||||
if (!radiobox_list[i].first->IsEnabled())
|
||||
return;
|
||||
radiobox_list[i].first->SetValue(true);
|
||||
wxString curr_selected_type = radiobox_list[i].second;
|
||||
this->Freeze();
|
||||
|
@ -2525,11 +2531,22 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_preset_item(wxWindow *pare
|
|||
m_printer_vendor = new ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, PRINTER_PRESET_VENDOR_SIZE, 0, nullptr, wxCB_READONLY);
|
||||
m_printer_vendor->SetValue(_L("Select Vendor"));
|
||||
m_printer_vendor->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR);
|
||||
|
||||
VendorMap vendors;
|
||||
wxArrayString exist_vendor_choice = get_exist_vendor_choices(vendors);
|
||||
m_printer_vendor->Set(exist_vendor_choice);
|
||||
m_printer_vendor->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) {
|
||||
e.SetExtraLong(1); // 0 means form last page, 1 means form cur combobox
|
||||
on_select_printer_model(e);
|
||||
});
|
||||
|
||||
comboBox_sizer->Add(m_printer_vendor, 0, wxEXPAND, 0);
|
||||
m_printer_model = new ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, PRINTER_PRESET_MODEL_SIZE, 0, nullptr, wxCB_READONLY);
|
||||
m_printer_model->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR);
|
||||
m_printer_model->SetValue(_L("Select Model"));
|
||||
|
||||
m_printer_model->Bind(wxEVT_COMBOBOX, &CreatePrinterPresetDialog::on_preset_model_value_change, this);
|
||||
|
||||
comboBox_sizer->Add(m_printer_model, 0, wxEXPAND | wxLEFT, FromDIP(10));
|
||||
vertical_sizer->Add(comboBox_sizer, 0, wxEXPAND | wxTOP, FromDIP(5));
|
||||
|
||||
|
@ -2913,33 +2930,81 @@ void CreatePrinterPresetDialog::show_page2()
|
|||
|
||||
bool CreatePrinterPresetDialog::data_init()
|
||||
{
|
||||
std::string nozzle_type = into_u8(m_nozzle_diameter->GetStringSelection());
|
||||
size_t index_mm = nozzle_type.find(" mm");
|
||||
if (std::string::npos != index_mm) {
|
||||
nozzle_type = nozzle_type.substr(0, index_mm);
|
||||
}
|
||||
float nozzle = nozzle_diameter_map[nozzle_type];
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " entry and nozzle type is: " << nozzle_type << " and nozzle is: " << nozzle;
|
||||
wxCommandEvent e;
|
||||
e.SetExtraLong(0); // 0 means form last page, 1 means form cur combobox
|
||||
on_select_printer_model(e);
|
||||
|
||||
auto get_nozzle_size_for_printer_model = [this](const std::string &model_name) -> size_t {
|
||||
auto iter = m_printer_name_to_preset.find(model_name);
|
||||
if (iter != m_printer_name_to_preset.end()) {
|
||||
std::shared_ptr<Preset> printer_preset = iter->second;
|
||||
if (printer_preset) {
|
||||
auto nozzle_diameter = dynamic_cast<ConfigOptionFloatsNullable *>(printer_preset->config.option("nozzle_diameter", true));
|
||||
return nozzle_diameter->values.size();
|
||||
}
|
||||
}
|
||||
return 1; // default nozzle size
|
||||
};
|
||||
|
||||
size_t selected_nozzle_size = get_nozzle_size_for_printer_model(into_u8(m_select_printer->GetStringSelection()));
|
||||
|
||||
bool has_set_value = false;
|
||||
for (size_t i = 0; i < m_create_presets_btns.size(); ++i) {
|
||||
auto &item = m_create_presets_btns[i];
|
||||
if (item.second == m_create_type.base_template) {
|
||||
if (selected_nozzle_size > 1) {
|
||||
item.first->Disable();
|
||||
item.first->SetValue(false);
|
||||
}
|
||||
else {
|
||||
item.first->Enable();
|
||||
if (!has_set_value) {
|
||||
select_curr_radiobox(m_create_presets_btns, i);
|
||||
has_set_value = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!has_set_value) {
|
||||
select_curr_radiobox(m_create_presets_btns, i);
|
||||
has_set_value = true;
|
||||
} else {
|
||||
item.first->SetValue(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_page2->SetSizerAndFit(m_page2_sizer);
|
||||
return true;
|
||||
}
|
||||
|
||||
void CreatePrinterPresetDialog::on_select_printer_model(wxCommandEvent &e)
|
||||
{
|
||||
bool is_from_last_page = e.GetExtraLong() == 0; // 0 means form last page, 1 means form cur combobox
|
||||
m_printer_vendor->SetLabelColor(*wxBLACK);
|
||||
VendorMap vendors;
|
||||
wxArrayString exist_vendor_choice = get_exist_vendor_choices(vendors);
|
||||
m_printer_vendor->Set(exist_vendor_choice);
|
||||
|
||||
m_printer_model->Bind(wxEVT_COMBOBOX, &CreatePrinterPresetDialog::on_preset_model_value_change, this);
|
||||
|
||||
m_printer_vendor->Bind(wxEVT_COMBOBOX, [this, vendors, nozzle](wxCommandEvent e) {
|
||||
m_printer_vendor->SetLabelColor(*wxBLACK);
|
||||
|
||||
std::string curr_selected_vendor = into_u8(m_printer_vendor->GetStringSelection());
|
||||
auto iterator = vendors.find(curr_selected_vendor);
|
||||
if (iterator != vendors.end()) {
|
||||
m_printer_preset_vendor_selected = iterator->second;
|
||||
} else {
|
||||
if (is_from_last_page) {
|
||||
m_printer_vendor->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR);
|
||||
return;
|
||||
}
|
||||
|
||||
MessageDialog dlg(this, _L("Vendor is not found, please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
}
|
||||
|
||||
std::string nozzle_type = into_u8(m_nozzle_diameter->GetStringSelection());
|
||||
size_t index_mm = nozzle_type.find(" mm");
|
||||
if (std::string::npos != index_mm) { nozzle_type = nozzle_type.substr(0, index_mm); }
|
||||
float nozzle = nozzle_diameter_map[nozzle_type];
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " entry and nozzle type is: " << nozzle_type << " and nozzle is: " << nozzle;
|
||||
|
||||
wxArrayString printer_preset_model = printer_preset_sort_with_nozzle_diameter(m_printer_preset_vendor_selected, nozzle);
|
||||
if (printer_preset_model.size() == 0) {
|
||||
MessageDialog dlg(this, _L("Current vendor has no models, please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
|
@ -2955,10 +3020,6 @@ bool CreatePrinterPresetDialog::data_init()
|
|||
}
|
||||
rewritten = false;
|
||||
e.Skip();
|
||||
|
||||
});
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
void CreatePrinterPresetDialog::set_current_visible_printer()
|
||||
|
|
|
@ -126,6 +126,7 @@ protected:
|
|||
|
||||
/********************************************************** Data Interaction *******************************************************/
|
||||
bool data_init();
|
||||
void on_select_printer_model(wxCommandEvent &e);
|
||||
void set_current_visible_printer();
|
||||
void select_curr_radiobox(std::vector<std::pair<RadioBox *, wxString>> &radiobox_list, int btn_idx);
|
||||
void select_all_preset_template(std::vector<std::pair<::CheckBox *, Preset *>> &preset_templates);
|
||||
|
|
|
@ -1977,10 +1977,10 @@ void Sidebar::create_printer_preset()
|
|||
CreatePrinterPresetDialog dlg(wxGetApp().mainframe);
|
||||
int res = dlg.ShowModal();
|
||||
if (wxID_OK == res) {
|
||||
wxGetApp().load_current_presets();
|
||||
wxGetApp().mainframe->update_side_preset_ui();
|
||||
update_ui_from_settings();
|
||||
update_all_preset_comboboxes();
|
||||
wxGetApp().load_current_presets();
|
||||
CreatePresetSuccessfulDialog success_dlg(wxGetApp().mainframe, SuccessType::PRINTER);
|
||||
int res = success_dlg.ShowModal();
|
||||
if (res == wxID_OK) {
|
||||
|
|
|
@ -6099,9 +6099,10 @@ void Tab::update_extruder_variants(int extruder_id, bool reload)
|
|||
{
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << extruder_id;
|
||||
if (m_extruder_switch) {
|
||||
Preset &printer_preset = m_preset_bundle->printers.get_edited_preset();
|
||||
auto nozzle_volumes = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
|
||||
if (nozzle_volumes->size() == 2) {
|
||||
int extruder_nums = m_preset_bundle->get_printer_extruder_count();
|
||||
nozzle_volumes->values.resize(extruder_nums);
|
||||
if (extruder_nums == 2) {
|
||||
auto nozzle_volumes_def = m_preset_bundle->project_config.def()->get("nozzle_volume_type");
|
||||
wxString left, right;
|
||||
for (size_t i = 0; i < nozzle_volumes_def->enum_labels.size(); ++i) {
|
||||
|
|
Loading…
Reference in New Issue