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;
|
std::set<std::string> diameters;
|
||||||
auto printer_model = m_edited_preset.config.opt_string("printer_model");
|
auto printer_model = m_edited_preset.config.opt_string("printer_model");
|
||||||
for (auto &preset : m_presets) {
|
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"));
|
diameters.insert(preset.config.opt_string("printer_variant"));
|
||||||
}
|
}
|
||||||
return std::vector<std::string>{diameters.begin(), diameters.end()};
|
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);
|
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();
|
dlg.ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_select_printer->SetSelection(-1);
|
||||||
|
m_select_printer->SetValue(_L("Select Printer"));
|
||||||
|
m_select_printer->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR);
|
||||||
e.Skip();
|
e.Skip();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -2426,6 +2430,8 @@ void CreatePrinterPresetDialog::select_curr_radiobox(std::vector<std::pair<Radio
|
||||||
int len = radiobox_list.size();
|
int len = radiobox_list.size();
|
||||||
for (int i = 0; i < len; ++i) {
|
for (int i = 0; i < len; ++i) {
|
||||||
if (i == btn_idx) {
|
if (i == btn_idx) {
|
||||||
|
if (!radiobox_list[i].first->IsEnabled())
|
||||||
|
return;
|
||||||
radiobox_list[i].first->SetValue(true);
|
radiobox_list[i].first->SetValue(true);
|
||||||
wxString curr_selected_type = radiobox_list[i].second;
|
wxString curr_selected_type = radiobox_list[i].second;
|
||||||
this->Freeze();
|
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 = 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->SetValue(_L("Select Vendor"));
|
||||||
m_printer_vendor->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR);
|
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);
|
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 = 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->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR);
|
||||||
m_printer_model->SetValue(_L("Select Model"));
|
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));
|
comboBox_sizer->Add(m_printer_model, 0, wxEXPAND | wxLEFT, FromDIP(10));
|
||||||
vertical_sizer->Add(comboBox_sizer, 0, wxEXPAND | wxTOP, FromDIP(5));
|
vertical_sizer->Add(comboBox_sizer, 0, wxEXPAND | wxTOP, FromDIP(5));
|
||||||
|
|
||||||
|
@ -2913,52 +2930,96 @@ void CreatePrinterPresetDialog::show_page2()
|
||||||
|
|
||||||
bool CreatePrinterPresetDialog::data_init()
|
bool CreatePrinterPresetDialog::data_init()
|
||||||
{
|
{
|
||||||
std::string nozzle_type = into_u8(m_nozzle_diameter->GetStringSelection());
|
wxCommandEvent e;
|
||||||
size_t index_mm = nozzle_type.find(" mm");
|
e.SetExtraLong(0); // 0 means form last page, 1 means form cur combobox
|
||||||
if (std::string::npos != index_mm) {
|
on_select_printer_model(e);
|
||||||
nozzle_type = nozzle_type.substr(0, index_mm);
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
float nozzle = nozzle_diameter_map[nozzle_type];
|
|
||||||
|
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);
|
||||||
|
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;
|
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " entry and nozzle type is: " << nozzle_type << " and nozzle is: " << nozzle;
|
||||||
|
|
||||||
VendorMap vendors;
|
wxArrayString printer_preset_model = printer_preset_sort_with_nozzle_diameter(m_printer_preset_vendor_selected, nozzle);
|
||||||
wxArrayString exist_vendor_choice = get_exist_vendor_choices(vendors);
|
if (printer_preset_model.size() == 0) {
|
||||||
m_printer_vendor->Set(exist_vendor_choice);
|
MessageDialog dlg(this, _L("Current vendor has no models, please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||||
|
dlg.ShowModal();
|
||||||
m_printer_model->Bind(wxEVT_COMBOBOX, &CreatePrinterPresetDialog::on_preset_model_value_change, this);
|
return;
|
||||||
|
}
|
||||||
m_printer_vendor->Bind(wxEVT_COMBOBOX, [this, vendors, nozzle](wxCommandEvent e) {
|
m_printer_model->Set(printer_preset_model);
|
||||||
m_printer_vendor->SetLabelColor(*wxBLACK);
|
if (!printer_preset_model.empty()) {
|
||||||
|
m_printer_model->SetSelection(0);
|
||||||
std::string curr_selected_vendor = into_u8(m_printer_vendor->GetStringSelection());
|
wxCommandEvent e;
|
||||||
auto iterator = vendors.find(curr_selected_vendor);
|
on_preset_model_value_change(e);
|
||||||
if (iterator != vendors.end()) {
|
update_preset_list_size();
|
||||||
m_printer_preset_vendor_selected = iterator->second;
|
}
|
||||||
} else {
|
rewritten = false;
|
||||||
MessageDialog dlg(this, _L("Vendor is not found, please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
e.Skip();
|
||||||
dlg.ShowModal();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
dlg.ShowModal();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
m_printer_model->Set(printer_preset_model);
|
|
||||||
if (!printer_preset_model.empty()) {
|
|
||||||
m_printer_model->SetSelection(0);
|
|
||||||
wxCommandEvent e;
|
|
||||||
on_preset_model_value_change(e);
|
|
||||||
update_preset_list_size();
|
|
||||||
}
|
|
||||||
rewritten = false;
|
|
||||||
e.Skip();
|
|
||||||
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatePrinterPresetDialog::set_current_visible_printer()
|
void CreatePrinterPresetDialog::set_current_visible_printer()
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include "ParamsDialog.hpp"
|
#include "ParamsDialog.hpp"
|
||||||
#include "json_diff.hpp"
|
#include "json_diff.hpp"
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
class CreateFilamentPresetDialog : public DPIDialog
|
class CreateFilamentPresetDialog : public DPIDialog
|
||||||
|
@ -24,7 +24,7 @@ public:
|
||||||
~CreateFilamentPresetDialog();
|
~CreateFilamentPresetDialog();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum FilamentOptionType {
|
enum FilamentOptionType {
|
||||||
VENDOR = 0,
|
VENDOR = 0,
|
||||||
TYPE,
|
TYPE,
|
||||||
SERIAL,
|
SERIAL,
|
||||||
|
@ -126,6 +126,7 @@ protected:
|
||||||
|
|
||||||
/********************************************************** Data Interaction *******************************************************/
|
/********************************************************** Data Interaction *******************************************************/
|
||||||
bool data_init();
|
bool data_init();
|
||||||
|
void on_select_printer_model(wxCommandEvent &e);
|
||||||
void set_current_visible_printer();
|
void set_current_visible_printer();
|
||||||
void select_curr_radiobox(std::vector<std::pair<RadioBox *, wxString>> &radiobox_list, int btn_idx);
|
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);
|
void select_all_preset_template(std::vector<std::pair<::CheckBox *, Preset *>> &preset_templates);
|
||||||
|
@ -244,7 +245,7 @@ public:
|
||||||
~ExportConfigsDialog();//to do: delete preset
|
~ExportConfigsDialog();//to do: delete preset
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
struct ExportType
|
struct ExportType
|
||||||
{
|
{
|
||||||
wxString preset_bundle;
|
wxString preset_bundle;
|
||||||
|
@ -341,7 +342,7 @@ class PresetTree
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PresetTree(EditFilamentPresetDialog *dialog);
|
PresetTree(EditFilamentPresetDialog *dialog);
|
||||||
|
|
||||||
wxPanel *get_preset_tree(std::pair<std::string, std::vector<std::shared_ptr<Preset>>> printer_and_presets);
|
wxPanel *get_preset_tree(std::pair<std::string, std::vector<std::shared_ptr<Preset>>> printer_and_presets);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -364,7 +365,7 @@ class EditFilamentPresetDialog : public DPIDialog
|
||||||
public:
|
public:
|
||||||
EditFilamentPresetDialog(wxWindow *parent, FilamentInfomation *filament_info);
|
EditFilamentPresetDialog(wxWindow *parent, FilamentInfomation *filament_info);
|
||||||
~EditFilamentPresetDialog();
|
~EditFilamentPresetDialog();
|
||||||
|
|
||||||
wxPanel *get_preset_tree_panel() { return m_preset_tree_panel; }
|
wxPanel *get_preset_tree_panel() { return m_preset_tree_panel; }
|
||||||
std::shared_ptr<Preset> get_need_edit_preset() { return m_need_edit_preset; }
|
std::shared_ptr<Preset> get_need_edit_preset() { return m_need_edit_preset; }
|
||||||
void set_printer_name(const std::string &printer_name) { m_selected_printer = printer_name; }
|
void set_printer_name(const std::string &printer_name) { m_selected_printer = printer_name; }
|
||||||
|
|
|
@ -1977,10 +1977,10 @@ void Sidebar::create_printer_preset()
|
||||||
CreatePrinterPresetDialog dlg(wxGetApp().mainframe);
|
CreatePrinterPresetDialog dlg(wxGetApp().mainframe);
|
||||||
int res = dlg.ShowModal();
|
int res = dlg.ShowModal();
|
||||||
if (wxID_OK == res) {
|
if (wxID_OK == res) {
|
||||||
|
wxGetApp().load_current_presets();
|
||||||
wxGetApp().mainframe->update_side_preset_ui();
|
wxGetApp().mainframe->update_side_preset_ui();
|
||||||
update_ui_from_settings();
|
update_ui_from_settings();
|
||||||
update_all_preset_comboboxes();
|
update_all_preset_comboboxes();
|
||||||
wxGetApp().load_current_presets();
|
|
||||||
CreatePresetSuccessfulDialog success_dlg(wxGetApp().mainframe, SuccessType::PRINTER);
|
CreatePresetSuccessfulDialog success_dlg(wxGetApp().mainframe, SuccessType::PRINTER);
|
||||||
int res = success_dlg.ShowModal();
|
int res = success_dlg.ShowModal();
|
||||||
if (res == wxID_OK) {
|
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;
|
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << extruder_id;
|
||||||
if (m_extruder_switch) {
|
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");
|
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");
|
auto nozzle_volumes_def = m_preset_bundle->project_config.def()->get("nozzle_volume_type");
|
||||||
wxString left, right;
|
wxString left, right;
|
||||||
for (size_t i = 0; i < nozzle_volumes_def->enum_labels.size(); ++i) {
|
for (size_t i = 0; i < nozzle_volumes_def->enum_labels.size(); ++i) {
|
||||||
|
|
Loading…
Reference in New Issue