From eeb474d2cee9187961db1941be952f806ff6c76d Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Fri, 17 Jan 2025 15:40:25 +0800 Subject: [PATCH] FIX:update SyncAmsInfoDialog jira: STUDIO-9928 STUDIO-9934 Change-Id: Ica81cb037ff0b99cc53a762b280a666e8c832ab3 --- src/slic3r/GUI/AmsMappingPopup.cpp | 4 +- src/slic3r/GUI/AmsMappingPopup.hpp | 4 +- src/slic3r/GUI/Plater.cpp | 36 +++--- src/slic3r/GUI/SyncAmsInfoDialog.cpp | 174 ++------------------------- src/slic3r/GUI/SyncAmsInfoDialog.hpp | 2 - 5 files changed, 38 insertions(+), 182 deletions(-) diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 11d2d9568..afd9e7916 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -29,8 +29,8 @@ namespace Slic3r { namespace GUI { #define MAPPING_ITEM_REAL_SIZE wxSize(FromDIP(60), FromDIP(60)) wxDEFINE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent); - MaterialItem::MaterialItem(wxWindow *parent, wxColour mcolour, wxString mname) - : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) + MaterialItem::MaterialItem(wxWindow *parent, wxColour mcolour, wxString mname, bool use_in_ams_sync) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize), m_use_in_ams_sync(use_in_ams_sync) { m_arraw_bitmap_gray = ScalableBitmap(this, "drop_down", 12); m_arraw_bitmap_white = ScalableBitmap(this, "topbar_dropdown", 12); diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index a27ea0a7d..6a8e70e74 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -72,8 +72,10 @@ struct TrayData class MaterialItem: public wxPanel { int m_text_pos_y = -1; + bool m_use_in_ams_sync = false; + public: - MaterialItem(wxWindow *parent,wxColour mcolour, wxString mname); + MaterialItem(wxWindow *parent, wxColour mcolour, wxString mname, bool use_in_ams_sync = false); ~MaterialItem(); wxPanel* m_main_panel; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 3fdd96b4b..496edad28 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1128,12 +1128,12 @@ bool Sidebar::priv::sync_extruder_list() { MachineObject *obj = wxGetApp().getDeviceManager()->get_selected_machine(); if (obj == nullptr) { - MessageDialog dlg(this->plater, _L("Please select a printer in 'Device' page first."), _L("Sync extruder infomation"), wxOK | wxICON_WARNING); + MessageDialog dlg(this->plater, _L("Please select a printer in 'Device' page first."), _L("Sync printer information"), wxOK | wxICON_WARNING); dlg.ShowModal(); return false; } if (obj->m_extder_data.extders.size() != 2) { - MessageDialog dlg(this->plater, _L("The currently connected printer does not have two extruders."), _L("Sync extruder infomation"), wxOK | wxICON_WARNING); + MessageDialog dlg(this->plater, _L("The currently connected printer does not have two extruders."), _L("Sync printer information"), wxOK | wxICON_WARNING); dlg.ShowModal(); return false; } @@ -1150,7 +1150,7 @@ bool Sidebar::priv::sync_extruder_list() if (machine_print_name != target_model_id) { MessageDialog dlg(this->plater, _L("The currently selected machine preset is inconsistent with the connected printer type.\n" - "Are you sure to continue syncing?"), _L("Sync extruder infomation"), wxICON_WARNING | wxYES | wxNO); + "Are you sure to continue syncing?"), _L("Sync printer information"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { return false; } @@ -2847,9 +2847,9 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) temp_info.use_dialog_pos = true; temp_info.cancel_text_to_later = is_from_big_sync_btn; wxPoint small_btn_pt; - wxSize big_btn_size; - get_small_btn_sync_pos_size(small_btn_pt, big_btn_size); - auto cur_dialog_pos = small_btn_pt + wxPoint(big_btn_size.x * 3.6 + 5,0); + wxSize small_btn_size; + get_small_btn_sync_pos_size(small_btn_pt, small_btn_size); + auto cur_dialog_pos = small_btn_pt + wxPoint(small_btn_size.x * 3.6 + 5, 0); temp_info.dialog_pos = cur_dialog_pos; temp_info.connected_printer = true; SyncAmsInfoDialog sync_dlg(this, temp_info); @@ -3084,15 +3084,23 @@ bool Sidebar::is_multifilament() } void Sidebar::deal_btn_sync() { - p->sync_extruder_list(); + auto ok = p->sync_extruder_list(); + if (ok) { + SyncNozzleAndAmsDialog::InputInfo temp_na_info; + wxPoint big_btn_pt; + wxSize big_btn_size; + wxGetApp().plater()->sidebar().get_big_btn_sync_pos_size(big_btn_pt, big_btn_size); + temp_na_info.dialog_pos = big_btn_pt + wxPoint(big_btn_size.x, big_btn_size.y) + wxPoint(FromDIP(big_btn_size.x / 10.f - 5), FromDIP(big_btn_size.y / 10.f)); - SyncNozzleAndAmsDialog::InputInfo temp_na_info; - wxPoint big_btn_pt; - wxSize big_btn_size; - wxGetApp().plater()->sidebar().get_big_btn_sync_pos_size(big_btn_pt, big_btn_size); - temp_na_info.dialog_pos = big_btn_pt + wxPoint(big_btn_size.x, big_btn_size.y) + wxPoint(FromDIP(big_btn_size.x / 10.f - 2), FromDIP(big_btn_size.y / 10.f)); - SyncNozzleAndAmsDialog na_dialog(nullptr, temp_na_info); - na_dialog.ShowModal(); + wxPoint small_btn_pt; + wxSize small_btn_size; + get_small_btn_sync_pos_size(small_btn_pt, small_btn_size); + auto cur_dialog_pos = small_btn_pt + wxPoint(small_btn_size.x * 3.6 + 5, 0); + temp_na_info.dialog_pos.x = cur_dialog_pos.x; + temp_na_info.dialog_pos.y += FromDIP(2); + SyncNozzleAndAmsDialog na_dialog(nullptr, temp_na_info); + na_dialog.ShowModal(); + } } static std::vector get_search_inputs(ConfigOptionMode mode) diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index b17cbcc6f..02efdf61d 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -86,8 +86,6 @@ bool SyncAmsInfoDialog::Show(bool show) m_rename_button->Hide(); m_rename_edit_panel->Hide(); m_rename_input->Hide(); - m_bitmap_last_plate->Hide(); - m_bitmap_next_plate->Hide(); //print_time->Hide(); hide_no_use_controls(); } @@ -127,12 +125,7 @@ bool SyncAmsInfoDialog::Show(bool show) } Layout(); Fit(); - if (m_input_info.use_dialog_pos) { - SetPosition(m_input_info.dialog_pos); - } - else { - CenterOnParent(); - } + CenterOnParent(); return DPIDialog::Show(show); } @@ -504,14 +497,14 @@ void SyncAmsInfoDialog::add_two_image_control() m_left_image_button = new wxButton(m_two_image_panel, wxID_ANY, {}, wxDefaultPosition, wxSize(FromDIP(LEFT_THUMBNAIL_SIZE_WIDTH), FromDIP(LEFT_THUMBNAIL_SIZE_WIDTH)), wxBORDER_NONE | wxBU_AUTODRAW); m_left_sizer_thumbnail = create_sizer_thumbnail(m_left_image_button, true); - m_two_image_panel_sizer->Add(m_left_sizer_thumbnail, FromDIP(0), wxALIGN_LEFT | wxEXPAND , FromDIP(0)); + m_two_image_panel_sizer->Add(m_left_sizer_thumbnail, FromDIP(0), wxALIGN_LEFT | wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, FromDIP(8)); m_two_image_panel_sizer->AddSpacer(FromDIP(5)); m_right_image_button = new wxButton(m_two_image_panel, wxID_ANY, {}, wxDefaultPosition, wxSize(FromDIP(RIGHT_THUMBNAIL_SIZE_WIDTH), FromDIP(RIGHT_THUMBNAIL_SIZE_WIDTH)), wxBORDER_NONE | wxBU_AUTODRAW); m_right_sizer_thumbnail = create_sizer_thumbnail(m_right_image_button, false); - m_two_image_panel_sizer->Add(m_right_sizer_thumbnail, FromDIP(0), wxALIGN_LEFT | wxEXPAND , FromDIP(0)); + m_two_image_panel_sizer->Add(m_right_sizer_thumbnail, FromDIP(0), wxALIGN_LEFT | wxEXPAND | wxRIGHT | wxTOP | wxBOTTOM, FromDIP(8)); m_two_image_panel->SetSizer(m_two_image_panel_sizer); m_two_image_panel->Layout(); m_two_image_panel->Fit(); @@ -792,20 +785,9 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_rename_switch_panel->AddPage(m_rename_edit_panel, wxEmptyString, false); /*last & next page*/ - auto last_plate_sizer = new wxBoxSizer(wxVERTICAL); - m_bitmap_last_plate = new wxStaticBitmap(m_basic_panel, wxID_ANY, create_scaled_bitmap("go_last_plate", this, 25), wxDefaultPosition, wxSize(FromDIP(25), FromDIP(25)), 0); - m_bitmap_last_plate->Hide(); - last_plate_sizer->Add(m_bitmap_last_plate, 0, wxALIGN_CENTER, 0); - - auto next_plate_sizer = new wxBoxSizer(wxVERTICAL); - m_bitmap_next_plate = new wxStaticBitmap(m_basic_panel, wxID_ANY, create_scaled_bitmap("go_next_plate", this, 25), wxDefaultPosition, wxSize(FromDIP(25), FromDIP(25)), 0); - m_bitmap_next_plate->Hide(); - next_plate_sizer->Add(m_bitmap_next_plate, 0, wxALIGN_CENTER, 0); - sizer_rename->Add(m_rename_switch_panel, 0, wxALIGN_CENTER, 0); sizer_rename->Add(0, 0, 0, wxEXPAND, 0); - sizer_rename->Add(m_bitmap_last_plate, 0, wxALIGN_CENTER, 0); - sizer_rename->Add(m_bitmap_next_plate, 0, wxALIGN_CENTER, 0); + /*printer combobox*/ /*wxBoxSizer *sizer_split_printer = new wxBoxSizer(wxHORIZONTAL); @@ -1277,7 +1259,7 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_append_color_sizer = new wxBoxSizer(wxHORIZONTAL); m_append_color_checkbox = new ::CheckBox(this, wxID_ANY); - m_append_color_checkbox->SetToolTip(_L("When you click ok button,it will append unmapped color.")); + m_append_color_checkbox->SetToolTip(_L("When you click \"Synchronize now\" button,it will append unmapped color.")); //m_append_color_checkbox->SetForegroundColour(wxColour(107, 107, 107, 100)); m_append_color_checkbox->SetValue(wxGetApp().app_config->get_bool("enable_append_color_by_sync_ams")); m_append_color_checkbox->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent &e) { @@ -1296,7 +1278,7 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_merge_color_sizer = new wxBoxSizer(wxHORIZONTAL); m_merge_color_checkbox = new ::CheckBox(this, wxID_ANY); - m_merge_color_checkbox->SetToolTip(_L("When you click ok button,it will merge same ams to only one color.")); + m_merge_color_checkbox->SetToolTip(_L("When you click \"Synchronize now\" button,it will merge same ams to only one color.")); //m_merge_color_checkbox->SetForegroundColour(wxColour(107, 107, 107, 100)); m_merge_color_checkbox->SetValue(wxGetApp().app_config->get_bool("enable_merge_color_by_sync_ams")); m_merge_color_checkbox->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent &e) { @@ -1407,10 +1389,7 @@ void SyncAmsInfoDialog::init_bind() check_fcous_state(this); e.Skip(); }); - m_bitmap_last_plate->Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { SetCursor(wxCURSOR_HAND); }); - m_bitmap_last_plate->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { SetCursor(wxCURSOR_ARROW); }); - m_bitmap_next_plate->Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { SetCursor(wxCURSOR_HAND); }); - m_bitmap_next_plate->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { SetCursor(wxCURSOR_ARROW); }); + Bind(EVT_CONNECT_LAN_MODE_PRINT, [this](wxCommandEvent &e) { if (e.GetInt() == 0) { @@ -1422,22 +1401,6 @@ void SyncAmsInfoDialog::init_bind() if (obj->dev_id == e.GetString()) { m_comboBox_printer->SetValue(obj->dev_name + "(LAN)"); } } }); - - m_bitmap_last_plate->Bind(wxEVT_LEFT_DOWN, [this](auto &e) { - if (m_print_plate_idx > 0) { - m_print_plate_idx--; - update_page_turn_state(true); - set_default_from_sdcard(); - } - }); - - m_bitmap_next_plate->Bind(wxEVT_LEFT_DOWN, [this](auto &e) { - if (m_print_plate_idx < (m_print_plate_total - 1)) { - m_print_plate_idx++; - update_page_turn_state(true); - set_default_from_sdcard(); - } - }); } void SyncAmsInfoDialog::check_focus(wxWindow *window) @@ -3848,10 +3811,6 @@ void SyncAmsInfoDialog::set_default(bool hide_some) m_cur_input_thumbnail_data = m_specify_plate_idx == -1 ? m_plater->get_partplate_list().get_curr_plate()->thumbnail_data : m_plater->get_partplate_list().get_plate(m_specify_plate_idx)->thumbnail_data; set_default_normal(m_cur_input_thumbnail_data); - } else if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { - // todo:unify_deal_thumbnail_data(input_data, no_light_data);this include m_print_type = PrintFromType::FROM_SDCARD_VIEW - // and notice update_page_turn_state(true) - set_default_from_sdcard(); } Layout(); @@ -3948,10 +3907,10 @@ void SyncAmsInfoDialog::reset_and_sync_ams_list() MaterialItem *item = nullptr; if (use_double_extruder) { if (m_filaments_map[extruder] == 1) { - item = new MaterialItem(m_filament_panel, colour_rgb, _L(display_materials[extruder]));// m_filament_left_panel//special + item = new MaterialItem(m_filament_panel, colour_rgb, _L(display_materials[extruder]),true);// m_filament_left_panel//special m_sizer_ams_mapping->Add(item, 0, wxALL, FromDIP(5)); // m_sizer_ams_mapping_left } else if (m_filaments_map[extruder] == 2) { - item = new MaterialItem(m_filament_panel, colour_rgb, _L(display_materials[extruder])); // m_filament_right_panel + item = new MaterialItem(m_filament_panel, colour_rgb, _L(display_materials[extruder]), true); // m_filament_right_panel m_sizer_ams_mapping->Add(item, 0, wxALL, FromDIP(5)); // m_sizer_ams_mapping_right } else { @@ -3959,11 +3918,11 @@ void SyncAmsInfoDialog::reset_and_sync_ams_list() continue; } } else { - item = new MaterialItem(m_filament_panel, colour_rgb, _L(display_materials[extruder])); + item = new MaterialItem(m_filament_panel, colour_rgb, _L(display_materials[extruder]), true); m_sizer_ams_mapping->Add(item, 0, wxALL, FromDIP(5)); } contronal_index++; - item->SetToolTip(_L("Up: Original\nDown: filament in AMS\nAnd you can click it to modify it.")); + item->SetToolTip(_L("Upper half area: Original\nLower half area: Filament in AMS\nAnd you can click it to modify")); item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent &e) {}); item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent &e) { MaterialHash::iterator iter = m_materialList.begin(); @@ -4272,117 +4231,6 @@ void SyncAmsInfoDialog::change_default_normal(int old_filament_id, wxColour temp } } -void SyncAmsInfoDialog::set_default_from_sdcard() -{ - m_print_plate_total = m_required_data_plate_data_list.size(); - update_page_turn_state(true); - - ThumbnailData &data = m_required_data_plate_data_list[m_print_plate_idx]->plate_thumbnail; - - if (data.pixels.size() > 0) { - wxMemoryInputStream mis((unsigned char *) data.pixels.data(), data.pixels.size()); - wxImage image = wxImage(mis); - image = image.Rescale(FromDIP(198), FromDIP(198)); - m_thumbnailPanel->set_thumbnail(image); - } - - // for black list - std::vector materials; - std::vector brands; - std::vector display_materials; - - for (auto i = 0; i < m_required_data_plate_data_list[m_print_plate_idx]->slice_filaments_info.size(); i++) { - FilamentInfo fo = m_required_data_plate_data_list[m_print_plate_idx]->slice_filaments_info[i]; - display_materials.push_back(fo.type); - materials.push_back(fo.type); - brands.push_back(fo.brand); - } - - // init MaterialItem - MaterialHash::iterator iter = m_materialList.begin(); - while (iter != m_materialList.end()) { - int id = iter->first; - Material *item = iter->second; - item->item->Destroy(); - delete item; - iter++; - } - - m_ams_mapping_result.clear(); - m_sizer_ams_mapping->Clear(); - m_materialList.clear(); - m_filaments.clear(); - - for (auto i = 0; i < m_required_data_plate_data_list[m_print_plate_idx]->slice_filaments_info.size(); i++) { - FilamentInfo fo = m_required_data_plate_data_list[m_print_plate_idx]->slice_filaments_info[i]; - - MaterialItem *item = new MaterialItem(m_filament_panel, wxColour(fo.color), fo.type); - m_sizer_ams_mapping->Add(item, 0, wxALL, FromDIP(5)); - - item->Bind(wxEVT_LEFT_UP, [this, item, materials](wxMouseEvent &e) {}); - item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, fo](wxMouseEvent &e) { - MaterialHash::iterator iter = m_materialList.begin(); - while (iter != m_materialList.end()) { - int id = iter->first; - Material * item = iter->second; - MaterialItem *m = item->item; - m->on_normal(); - iter++; - } - - try { - m_current_filament_id = fo.id; - } catch (...) {} - item->on_selected(); - - auto mouse_pos = ClientToScreen(e.GetPosition()); - wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); - // update ams data - DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev_manager) return; - MachineObject *obj_ = dev_manager->get_selected_machine(); - - if (obj_ && obj_->is_support_ams_mapping()) { - if (m_mapping_popup.IsShown()) - return; - wxPoint pos = item->ClientToScreen(wxPoint(0, 0)); - pos.y += item->GetRect().height; - m_mapping_popup.Move(pos); - - if (obj_ && obj_->has_ams() && (m_checkbox_list["use_ams"]->getValue() == "on") && obj_->dev_id == m_printer_last_select) { - m_mapping_popup.set_parent_item(item); - m_mapping_popup.set_current_filament_id(fo.id); - m_mapping_popup.set_tag_texture(fo.type); - m_mapping_popup.update(obj_); - m_mapping_popup.Popup(); - } - } - }); - - Material *material_item = new Material(); - material_item->id = fo.id; - material_item->item = item; - m_materialList[i] = material_item; - - // build for ams mapping - m_filaments.push_back(fo); - } - - if (m_required_data_plate_data_list[m_print_plate_idx]->slice_filaments_info.size() <= 4) { - m_sizer_ams_mapping->SetCols(m_required_data_plate_data_list[m_print_plate_idx]->slice_filaments_info.size()); - } else { - m_sizer_ams_mapping->SetCols(4); - } - - m_basic_panel->Layout(); - m_basic_panel->Fit(); - - set_flow_calibration_state(true); - wxSize screenSize = wxGetDisplaySize(); - auto dialogSize = this->GetSize(); - reset_ams_material(); -} - void SyncAmsInfoDialog::update_page_turn_state(bool show) { /* m_bitmap_last_plate->Show(show); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.hpp b/src/slic3r/GUI/SyncAmsInfoDialog.hpp index 9a38b7cde..c05001520 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.hpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.hpp @@ -85,8 +85,6 @@ protected: wxStaticBitmap * m_rename_button{nullptr}; ComboBox * m_comboBox_printer{nullptr}; wxStaticBitmap * m_staticbitmap{nullptr}; - wxStaticBitmap * m_bitmap_last_plate{nullptr}; - wxStaticBitmap * m_bitmap_next_plate{nullptr}; wxStaticBitmap * img_amsmapping_tip{nullptr}; ThumbnailPanel * m_thumbnailPanel{nullptr}; wxPanel * m_panel_status{nullptr};