OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::AmsMapingPopup Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/AmsMappingPopup.hpp>

Inheritance diagram for Slic3r::GUI::AmsMapingPopup:
Collaboration diagram for Slic3r::GUI::AmsMapingPopup:

Public Types

using ResetCallback = std::function<void(const std::string&)>

Public Member Functions

 AmsMapingPopup (wxWindow *parent, bool use_in_sync_dialog=false)
 ~AmsMapingPopup ()
bool get_use_in_sync_dialog ()
void set_sizer_title (wxBoxSizer *sizer, wxString text)
wxBoxSizer * create_split_sizer (wxWindow *parent, wxString text)
void set_send_win (wxWindow *win)
void update_materials_list (std::vector< std::string > list)
void set_tag_texture (std::string texture)
void update (MachineObject *obj, const std::vector< FilamentInfo > &ams_mapping_result, bool use_dynamic_switch=false, std::optional< PrintFromType > print_type=std::nullopt)
void update_rack_select (MachineObject *obj, bool use_dynamic_switch, std::optional< PrintFromType > print_type)
void update_items_check_state (const std::vector< FilamentInfo > &ams_mapping_result)
void update_ams_data_multi_machines ()
void add_ams_mapping (std::vector< TrayData > tray_data, bool remain_detect_flag, wxWindow *container, wxBoxSizer *sizer)
void add_ext_ams_mapping (TrayData tray_data, MappingItem *item)
void set_current_filament_id (int id)
int get_current_filament_id ()
bool is_match_material (std::string material) const
void on_left_down (wxMouseEvent &evt)
virtual void OnDismiss () wxOVERRIDE
virtual bool ProcessLeftDown (wxMouseEvent &event) wxOVERRIDE
void paintEvent (wxPaintEvent &evt)
void set_parent_item (MaterialItem *item)
void set_show_type (ShowType type)
void set_only_show_ext_spool (bool)
std::vector< TrayData > parse_ams_mapping (const std::map< std::string, DevAms *, NumericStrCompare > &amsList)
void reset_ams_info ()
void set_reset_callback (ResetCallback callback)
void show_reset_button ()
void set_material_index_str (std::string str)
const std::string & get_material_index_str ()
void msw_rescale ()
void EnableExtMappingFilaTypeCheck (bool to_check=true)
bool Create (wxWindow *parent, int flags=wxBORDER_NONE)

Public Attributes

MaterialItem * m_parent_item { nullptr }
wxWindow * send_win { nullptr }
std::vector< std::string > m_materials_list
std::vector< wxBoxSizer * > m_amsmapping_container_sizer_list
std::vector< MappingContainer * > m_amsmapping_container_list
std::vector< MappingItem * > m_mapping_item_list
bool m_has_unmatch_filament {false}
int m_current_filament_id
ShowType m_show_type {ShowType::RIGHT}
std::string m_tag_material
wxScrolledWindow * m_scrolled_window {nullptr}
wxBoxSizer * m_sizer_main {nullptr}
wxBoxSizer * m_sizer_main_h {nullptr}
wxBoxSizer * m_sizer_ams_v {nullptr}
wxBoxSizer * m_sizer_ams {nullptr}
wxBoxSizer * m_sizer_ams_left {nullptr}
wxBoxSizer * m_sizer_ams_right {nullptr}
wxBoxSizer * m_sizer_ams_left_horizonal {nullptr}
wxBoxSizer * m_sizer_ams_right_horizonal {nullptr}
wxBoxSizer * m_sizer_ams_basket_left { nullptr }
wxBoxSizer * m_sizer_ams_basket_right { nullptr }
wxBoxSizer * m_sizer_list {nullptr}
MappingItem * m_left_extra_slot {nullptr}
MappingItem * m_right_extra_slot {nullptr}
wxPanel * m_left_marea_panel {nullptr}
wxPanel * m_right_marea_panel { nullptr }
wxPanel * m_left_first_text_panel {nullptr}
wxPanel * m_right_first_text_panel {nullptr}
wgtMsgPanel * m_ams_tips_msg_panel {nullptr}
wxPanel * m_split_line_panel {nullptr}
wxBoxSizer * m_left_split_ams_sizer {nullptr}
wxBoxSizer * m_right_split_ams_sizer {nullptr}
wxBoxSizer * m_right_split_ext_sizer { nullptr }
Label * m_left_tips {nullptr}
Label * m_right_tips {nullptr}
ScalableButton * m_reset_btn {nullptr}
wxString m_single_tip_text
wxString m_left_tip_text
wxString m_right_tip_text
wxString m_ams_tips_panel_text
wxBoxSizer * m_sizer_split_ams_left
wxBoxSizer * m_sizer_split_ams_right
bool m_mapping_from_multi_machines {false}

Protected Member Functions

virtual bool ShouldDismissOnTopWindowDeactivate ()

Private Member Functions

void update_title (MachineObject *obj)
void update_ams_tips (MachineObject *obj)
void update_mapping_items (MachineObject *obj, const std::vector< FilamentInfo > &ams_mapping_result, bool use_dynamic_switch)
void OnNozzleMappingSelected (wxCommandEvent &evt)
void update_flush_waste (MachineObject *obj)

Private Attributes

bool m_use_in_sync_dialog = false
bool m_ext_mapping_filatype_check = true
wxStaticText * m_title_text { nullptr }
wgtDeviceNozzleRackSelect * m_rack_nozzle_select {nullptr}
DevIconLabel * m_flush_warning_panel
std::weak_ptr< DevNozzleRack > m_rack
ResetCallback m_reset_callback {nullptr}
std::string m_material_index

Detailed Description

Member Typedef Documentation

◆ ResetCallback

using Slic3r::GUI::AmsMapingPopup::ResetCallback = std::function<void(const std::string&)>

Constructor & Destructor Documentation

◆ AmsMapingPopup()

Slic3r::GUI::AmsMapingPopup::AmsMapingPopup ( wxWindow * parent,
bool use_in_sync_dialog = false )
828 :
829 PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS), m_use_in_sync_dialog(use_in_sync_dialog)
830 {
831 Bind(wxEVT_PAINT, &AmsMapingPopup::paintEvent, this);
832
833#ifdef __APPLE__
834 Bind(wxEVT_LEFT_DOWN, &AmsMapingPopup::on_left_down, this);
835 Bind(wxEVT_MOTION, &AmsMapingPopup::on_mouse_move, this);
836#endif
837
838 SetBackgroundColour(*wxWHITE);
839
840 m_sizer_main = new wxBoxSizer(wxVERTICAL);
841 m_sizer_main_h = new wxBoxSizer(wxHORIZONTAL);
842 m_sizer_ams = new wxBoxSizer(wxHORIZONTAL);
843 m_sizer_ams_left = new wxBoxSizer(wxVERTICAL);
844 m_sizer_ams_right = new wxBoxSizer(wxVERTICAL);
845 m_sizer_ams_left_horizonal = new wxBoxSizer(wxHORIZONTAL);
846 m_sizer_ams_right_horizonal = new wxBoxSizer(wxHORIZONTAL);
847 m_sizer_ams_basket_left = new wxBoxSizer(wxVERTICAL);
848 m_sizer_ams_basket_right = new wxBoxSizer(wxVERTICAL);
849
850 auto title_panel = new wxPanel(this, wxID_ANY);
851 title_panel->SetBackgroundColour(StateColor::darkModeColorFor("#F1F1F1"));
852 title_panel->SetSize(wxSize(-1, FromDIP(30)));
853 title_panel->SetMinSize(wxSize(-1, FromDIP(30)));
854
855 m_scrolled_window = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL | wxHSCROLL);
856 m_scrolled_window->SetBackgroundColour(*wxWHITE);
857 m_scrolled_window->SetScrollRate(0, FromDIP(20));
858
859 wxBoxSizer *title_sizer_h= new wxBoxSizer(wxHORIZONTAL);
860 wxBoxSizer *title_sizer_v = new wxBoxSizer(wxVERTICAL);
861
862 m_title_text = new wxStaticText(title_panel, wxID_ANY, _L("AMS Slots"));
863 m_title_text->SetForegroundColour(wxColour("#262E30"));
865 title_sizer_v->Add(m_title_text, 0, wxALIGN_LEFT | wxLEFT, FromDIP(15));
866 title_sizer_h->Add(title_sizer_v, 1, wxALIGN_CENTER, 5);
867 title_panel->SetSizer(title_sizer_h);
868 title_panel->Layout();
869 title_panel->Fit();
870
872 m_left_marea_panel->SetName("left");
874 m_right_marea_panel->SetName("right");
877 auto sizer_temp = new wxBoxSizer(wxHORIZONTAL);
878 /*left ext*/
879 m_left_extra_slot = new MappingItem(m_left_marea_panel);
881 m_left_extra_slot->m_slot_id = 0;
882 m_left_extra_slot->SetSize(wxSize(FromDIP(48), FromDIP(60)));
883 m_left_extra_slot->SetMinSize(wxSize(FromDIP(48), FromDIP(60)));
884 m_left_extra_slot->SetMaxSize(wxSize(FromDIP(48), FromDIP(60)));
885
886 auto left_panel = new wxPanel(m_left_marea_panel);
887 left_panel->SetSize(wxSize(FromDIP(182), FromDIP(60)));
888 left_panel->SetMinSize(wxSize(FromDIP(182), FromDIP(60)));
889 left_panel->SetMaxSize(wxSize(FromDIP(182), FromDIP(60)));
890
891 sizer_temp->Add(m_left_extra_slot);
892 sizer_temp->Add(left_panel);
893
894 /*right ext*/
895 m_right_extra_slot = new MappingItem(m_right_marea_panel);
897 m_right_extra_slot->m_slot_id = 0;
898 m_right_extra_slot->SetSize(wxSize(FromDIP(48), FromDIP(60)));
899 m_right_extra_slot->SetMinSize(wxSize(FromDIP(48), FromDIP(60)));
900 m_right_extra_slot->SetMaxSize(wxSize(FromDIP(48), FromDIP(60)));
901
902 std::string amp_pt = wxGetApp().preset_bundle->printers.get_edited_preset().get_printer_type(wxGetApp().preset_bundle);
903 m_single_tip_text = _L("Please select from the following filaments");
904 m_left_tip_text = wxString::Format(_L("Select filament that installed to the %s"),
906 m_right_tip_text = wxString::Format(_L("Select filament that installed to the %s"),
908
910 m_left_tips->SetForegroundColour(StateColor::darkModeColorFor("0x262E30"));
911 m_left_tips->SetBackgroundColour(StateColor::darkModeColorFor("0xFFFFFF"));
913 m_left_tips->SetLabel(m_left_tip_text);
915
916 m_sizer_ams_left->Add(m_left_first_text_panel, 0, wxEXPAND | wxBOTTOM | wxTOP , FromDIP(8));
918 m_sizer_ams_left->Add(m_left_split_ams_sizer, 0, wxEXPAND, 0);
919 m_sizer_ams_left->Add(m_sizer_ams_basket_left, 0, wxEXPAND|wxTOP, FromDIP(8));
920 m_sizer_ams_left->Add(create_split_sizer(m_left_marea_panel, _L("External")), 0, wxEXPAND|wxTOP, FromDIP(8));
921 //m_sizer_ams_left->Add(m_left_extra_slot, 0, wxEXPAND|wxTOP, FromDIP(8));
922 m_sizer_ams_left->Add(sizer_temp, 0, wxEXPAND | wxTOP, FromDIP(8));
923
925 m_right_tips->SetForegroundColour(StateColor::darkModeColorFor("0x262E30"));
926 m_right_tips->SetBackgroundColour(StateColor::darkModeColorFor("0xFFFFFF"));
929
930 m_sizer_ams_right_horizonal->AddStretchSpacer();
931
932 m_reset_btn = new ScalableButton(m_scrolled_window, wxID_ANY, wxGetApp().dark_mode() ? "erase_dark" : "erase", wxEmptyString, wxDefaultSize, wxDefaultPosition,
933 wxBU_EXACTFIT | wxNO_BORDER, true, 14);
934 m_reset_btn->SetName(wxGetApp().dark_mode() ? "erase_dark" : "erase");
935 m_reset_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { reset_ams_info(); });
936 m_reset_btn->SetBackgroundColour(*wxWHITE);
937 m_reset_btn->SetToolTip(_L("Reset current filament mapping"));
938
939 m_sizer_ams_right_horizonal->AddStretchSpacer();
940 m_sizer_ams_right_horizonal->AddSpacer(FromDIP(5));
941 m_reset_btn->Hide();
943 const int same_height = 20;
944 m_left_first_text_panel->SetMaxSize(wxSize(-1, FromDIP(same_height)));
945 m_right_first_text_panel->SetMaxSize(wxSize(-1, FromDIP(same_height)));
946
947 // content_sizer
948 wxSizer *content_ams_sizer = new wxBoxSizer(wxVERTICAL);
951 content_ams_sizer->Add(m_right_split_ams_sizer, 0, wxEXPAND, 0);
952 content_ams_sizer->Add(m_sizer_ams_basket_right, 0, wxEXPAND | wxTOP, FromDIP(8));
953 content_ams_sizer->Add(m_right_split_ext_sizer, 0, wxEXPAND | wxTOP, FromDIP(8));
954 content_ams_sizer->Add(m_right_extra_slot, 0, wxEXPAND | wxTOP, FromDIP(8));
955
956 wxSizer *content_sizer = new wxBoxSizer(wxHORIZONTAL);
957 content_sizer->Add(content_ams_sizer, 1, wxEXPAND | wxLEFT);
958
959 m_flush_warning_panel = new DevIconLabel(m_right_marea_panel, "warning", ""); // Orca: dev_warning icon absent; use the shipped generic warning glyph
960 m_flush_warning_panel->SetAllBackgroundColor(StateColor::darkModeColorFor("#FFFFE0"));
961 m_flush_warning_panel->GetLabelItem()->SetForegroundColour(StateColor::darkModeColorFor("#F09A17"));
962 m_flush_warning_panel->Show(false);
963
964 m_sizer_ams_right->Add(m_right_first_text_panel, 0, wxEXPAND | wxBOTTOM | wxTOP, FromDIP(8));
965 m_sizer_ams_right->Add(m_flush_warning_panel, 0, wxBOTTOM | wxALIGN_LEFT, FromDIP(8));
966 m_sizer_ams_right->Add(content_sizer, 0, wxEXPAND, 0);
967
968 m_rack_nozzle_select = new wgtDeviceNozzleRackSelect(m_scrolled_window);
969 m_rack_nozzle_select->Bind(EVT_NOZZLE_SELECT_CHANGED, &AmsMapingPopup::OnNozzleMappingSelected, this);
970 m_rack_nozzle_select->Bind(EVT_NOZZLE_SELECT_CLICKED, [this](wxCommandEvent &e) { this->Dismiss(); });
971 m_rack_nozzle_select->Show(false);
972
973 m_ams_tips_msg_panel = new wgtMsgPanel(m_scrolled_window);
974
977
978 m_sizer_ams_v = new wxBoxSizer(wxVERTICAL);
979
980 m_split_line_panel = new wxPanel(m_scrolled_window, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(1), -1));
981 m_split_line_panel->SetBackgroundColour(*wxWHITE);
982 m_split_line_panel->Bind(wxEVT_PAINT, [this](wxPaintEvent& evt) {
983 wxPaintDC dc(m_split_line_panel);
984 dc.SetPen(wxPen(wxColour(0xAC, 0xAC, 0xAC), 1, wxPENSTYLE_SHORT_DASH));
985 dc.DrawLine(0, FromDIP(20), 0, m_sizer_ams->GetSize().GetHeight());
986 });
987
988 //m_sizer_ams->Add(m_left_marea_panel, 0, wxEXPAND, FromDIP(0));
989 m_sizer_ams->Add(m_left_marea_panel, 0, wxRIGHT, FromDIP(10));
990 m_sizer_ams->Add(m_split_line_panel, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(7));
991 m_sizer_ams->Add(m_right_marea_panel, 0, wxEXPAND | wxLEFT, FromDIP(10));
992
993 m_sizer_ams_v->Add(m_reset_btn, 0, wxALIGN_RIGHT);
994 m_sizer_ams_v->Add(m_sizer_ams, 0, wxEXPAND | wxBOTTOM, FromDIP(30));
995 m_sizer_ams_v->AddStretchSpacer();
996 m_sizer_ams_v->Add(m_ams_tips_msg_panel, 0, wxEXPAND | wxBOTTOM, FromDIP(10)); // Orca: wxBOTTOM (REF uses the wxEdge enum by mistake)
997
998 m_sizer_main_h->Add(m_sizer_ams_v, 0, wxEXPAND | wxRIGHT, FromDIP(10));
999 m_sizer_main_h->Add(m_rack_nozzle_select, 0, wxEXPAND | wxTOP | wxLEFT, FromDIP(15));
1000
1002 m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2));
1003 m_sizer_main->Add(m_scrolled_window, 1, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(14));
1004 m_sizer_main->Add( 0, 0, 0, wxTOP, FromDIP(14));
1005
1006 SetSizer(m_sizer_main);
1007 Layout();
1008 Fit();
1009
1010 Bind(wxEVT_SHOW, [this](wxShowEvent& e) {
1011 if (e.IsShown() && m_parent_item)
1012 {
1013 auto show_pos = m_parent_item->ClientToScreen(wxPoint(0, 0));
1014 int display_idx = wxDisplay::GetFromWindow(m_parent_item);
1015
1016 if (display_idx == wxNOT_FOUND)
1017 display_idx = 0;
1018
1019 wxRect screen_size = wxDisplay(display_idx).GetClientArea();
1020 auto parent_size = m_parent_item->GetRect();
1021 auto content_size = m_sizer_main_h->GetMinSize();
1022 int popup_width = content_size.x + FromDIP(28);
1023 int popup_height = content_size.y;
1024 wxSize popup_size(popup_width, popup_height);
1025
1026 // Horizontal Direction Processing
1027 if (show_pos.x + popup_size.x > screen_size.GetRight())
1028 {
1029 show_pos.x = screen_size.GetRight() - popup_size.x;
1030 }
1031
1032 //if popup size bigger than screen
1033 if (show_pos.x < screen_size.GetLeft())
1034 {
1035 show_pos.x = screen_size.GetLeft();
1036 m_scrolled_window->SetMaxSize(wxSize(screen_size.GetWidth(), popup_height));
1037 m_scrolled_window->SetMinSize(wxSize(screen_size.GetWidth(), popup_height));
1038 m_scrolled_window->SetScrollRate(FromDIP(10), FromDIP(20));
1039 }
1040 else
1041 {
1042 m_scrolled_window->SetMaxSize(wxSize(popup_width, popup_height));
1043 m_scrolled_window->SetMinSize(wxSize(popup_width, popup_height));
1044 m_scrolled_window->SetScrollRate(0, FromDIP(20));
1045 }
1046
1047 //Vertical Direction Processing
1048 int available_height_below = screen_size.GetBottom() - (show_pos.y + parent_size.height);
1049 int available_height_above = show_pos.y - screen_size.GetTop();
1050
1051 if (popup_size.y <= available_height_below)
1052 {
1053 show_pos.y = show_pos.y + parent_size.height;
1054 }
1055 else if (popup_size.y <= available_height_above)
1056 {
1057 show_pos.y = show_pos.y - popup_size.y - FromDIP(34) - FromDIP(14);// title_height = FromDIP(30) + FromDIP(4) padding = FromDIP(14)
1058 }
1059 else
1060 {
1061 int max_available_height;
1062
1063 if (available_height_below >= available_height_above) {
1064 show_pos.y = show_pos.y + parent_size.height;
1065 max_available_height = available_height_below;
1066 } else {
1067 show_pos.y = screen_size.GetTop();
1068 max_available_height = available_height_above;
1069 }
1070
1071 int title_and_padding = FromDIP(30) + FromDIP(4) + FromDIP(14);
1072 int max_scroll_height = max_available_height - title_and_padding;
1073
1074 m_scrolled_window->SetMaxSize(wxSize(m_scrolled_window->GetMaxSize().x,max_scroll_height));
1075 }
1076 Layout();
1077 Fit();
1078 this->Move(show_pos);
1079 }
1080 });
1081 }
#define DEPUTY_EXTRUDER_ID
Definition DevDefs.h:102
#define VIRTUAL_TRAY_DEPUTY_ID
Definition DevDefs.h:90
#define VIRTUAL_TRAY_MAIN_ID
Definition DevDefs.h:89
#define MAIN_EXTRUDER_ID
Definition DevDefs.h:101
#define _L(s)
Definition OBJ.cpp:34
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
static wxFont Body_13
Definition Label.hpp:54
static wxFont Body_16
Definition Label.hpp:51
PopupWindow()
Definition PopupWindow.hpp:10
static std::string get_toolhead_display_name(const std::string &type_str, int ext_id, ToolHeadComponent component, ToolHeadNameCase name_case=ToolHeadNameCase::TitleCase, bool short_name=false)
Definition DevConfigUtil.cpp:379
wxBoxSizer * m_sizer_ams_left
Definition AmsMappingPopup.hpp:310
bool m_use_in_sync_dialog
Definition AmsMappingPopup.hpp:282
wxString m_left_tip_text
Definition AmsMappingPopup.hpp:335
DevIconLabel * m_flush_warning_panel
Definition AmsMappingPopup.hpp:287
wxBoxSizer * m_sizer_ams_right_horizonal
Definition AmsMappingPopup.hpp:313
void paintEvent(wxPaintEvent &evt)
Definition AmsMappingPopup.cpp:1313
wxString m_single_tip_text
Definition AmsMappingPopup.hpp:334
wxBoxSizer * m_sizer_main
Definition AmsMappingPopup.hpp:306
wxBoxSizer * m_sizer_ams_left_horizonal
Definition AmsMappingPopup.hpp:312
wxPanel * m_left_first_text_panel
Definition AmsMappingPopup.hpp:323
wxBoxSizer * m_sizer_ams_basket_left
Definition AmsMappingPopup.hpp:314
MappingItem * m_left_extra_slot
Definition AmsMappingPopup.hpp:318
MaterialItem * m_parent_item
Definition AmsMappingPopup.hpp:293
ScalableButton * m_reset_btn
Definition AmsMappingPopup.hpp:333
wxBoxSizer * m_sizer_main_h
Definition AmsMappingPopup.hpp:307
wxPanel * m_right_marea_panel
Definition AmsMappingPopup.hpp:322
void reset_ams_info()
Definition AmsMappingPopup.cpp:1083
wxPanel * m_split_line_panel
Definition AmsMappingPopup.hpp:326
wxStaticText * m_title_text
Definition AmsMappingPopup.hpp:284
wxBoxSizer * m_sizer_ams_right
Definition AmsMappingPopup.hpp:311
wxBoxSizer * m_right_split_ams_sizer
Definition AmsMappingPopup.hpp:328
Label * m_left_tips
Definition AmsMappingPopup.hpp:330
wxBoxSizer * m_sizer_ams
Definition AmsMappingPopup.hpp:309
wxPanel * m_left_marea_panel
Definition AmsMappingPopup.hpp:321
wxString m_right_tip_text
Definition AmsMappingPopup.hpp:336
wxPanel * m_right_first_text_panel
Definition AmsMappingPopup.hpp:324
wxBoxSizer * m_right_split_ext_sizer
Definition AmsMappingPopup.hpp:329
wxBoxSizer * create_split_sizer(wxWindow *parent, wxString text)
Definition AmsMappingPopup.cpp:1163
wxBoxSizer * m_sizer_ams_v
Definition AmsMappingPopup.hpp:308
wxBoxSizer * m_sizer_ams_basket_right
Definition AmsMappingPopup.hpp:315
void on_left_down(wxMouseEvent &evt)
Definition AmsMappingPopup.cpp:1197
wxScrolledWindow * m_scrolled_window
Definition AmsMappingPopup.hpp:305
wgtDeviceNozzleRackSelect * m_rack_nozzle_select
Definition AmsMappingPopup.hpp:286
void OnNozzleMappingSelected(wxCommandEvent &evt)
Definition AmsMappingPopup.cpp:1321
Label * m_right_tips
Definition AmsMappingPopup.hpp:331
wgtMsgPanel * m_ams_tips_msg_panel
Definition AmsMappingPopup.hpp:325
MappingItem * m_right_extra_slot
Definition AmsMappingPopup.hpp:319
wxBoxSizer * m_left_split_ams_sizer
Definition AmsMappingPopup.hpp:327
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219
@ Nozzle
Definition DevConfigUtil.h:35
@ LowerCase
Definition DevConfigUtil.h:43

References PopupWindow::PopupWindow(), _L, Label::Body_13, Label::Body_16, create_split_sizer(), StateColor::darkModeColorFor(), DEPUTY_EXTRUDER_ID, Slic3r::DevPrinterConfigUtil::get_toolhead_display_name(), Slic3r::LowerCase, m_ams_tips_msg_panel, m_flush_warning_panel, m_left_extra_slot, m_left_first_text_panel, m_left_marea_panel, m_left_split_ams_sizer, m_left_tip_text, m_left_tips, m_parent_item, m_rack_nozzle_select, m_reset_btn, m_right_extra_slot, m_right_first_text_panel, m_right_marea_panel, m_right_split_ams_sizer, m_right_split_ext_sizer, m_right_tip_text, m_right_tips, m_scrolled_window, m_single_tip_text, m_sizer_ams, m_sizer_ams_basket_left, m_sizer_ams_basket_right, m_sizer_ams_left, m_sizer_ams_left_horizonal, m_sizer_ams_right, m_sizer_ams_right_horizonal, m_sizer_ams_v, m_sizer_main, m_sizer_main_h, m_split_line_panel, m_title_text, m_use_in_sync_dialog, MAIN_EXTRUDER_ID, Slic3r::Nozzle, on_left_down(), OnNozzleMappingSelected(), paintEvent(), reset_ams_info(), VIRTUAL_TRAY_DEPUTY_ID, VIRTUAL_TRAY_MAIN_ID, and wxStaticText.

Here is the call graph for this function:

◆ ~AmsMapingPopup()

Slic3r::GUI::AmsMapingPopup::~AmsMapingPopup ( )
inline
291{};

Member Function Documentation

◆ add_ams_mapping()

void Slic3r::GUI::AmsMapingPopup::add_ams_mapping ( std::vector< TrayData > tray_data,
bool remain_detect_flag,
wxWindow * container,
wxBoxSizer * sizer )
578{
579 sizer->Add(0, 0, 0, wxLEFT, FromDIP(6));
580
581 for (auto i = 0; i < tray_data.size(); i++) {
582
583 // set button
584 MappingItem* m_mapping_item = new MappingItem(container);
585 m_mapping_item->send_win = send_win;
586 m_mapping_item->m_ams_id = tray_data[i].ams_id;
587 m_mapping_item->m_slot_id = tray_data[i].slot_id;
588 // Orca: transition_tridid here has no total-extruder-count overload; label the virtual (ext)
589 // slots Ext-R / Ext-L inline in the two-nozzle left+right views (matches that overload's result).
591 && (tray_data[i].id == VIRTUAL_TRAY_MAIN_ID || tray_data[i].id == VIRTUAL_TRAY_DEPUTY_ID)) {
592 m_mapping_item->set_tray_index(tray_data[i].id == VIRTUAL_TRAY_MAIN_ID ? _L("Ext-R") : _L("Ext-L"));
593 } else {
594 m_mapping_item->set_tray_index(wxGetApp().transition_tridid(tray_data[i].id));
595 }
596
597 m_mapping_item->SetSize(wxSize(FromDIP(48), FromDIP(60)));
598 m_mapping_item->SetMinSize(wxSize(FromDIP(48), FromDIP(60)));
599 m_mapping_item->SetMaxSize(wxSize(FromDIP(48), FromDIP(60)));
600
601 // traversal if can pick the item or not
602 bool can_pick_the_item = true;
603 std::optional<wxString> item_tooltip_msg;
604 // check filament area
606 if (can_pick_the_item) {
608 can_pick_the_item = !devPrinterUtil::IsVirtualSlot(m_mapping_item->m_ams_id);
609 if (!can_pick_the_item) {
610 item_tooltip_msg = _L(
611 "External spools are not supported since Filament Track Switch has been installed. If you want to use an external spool, please uninstall it.");
612 }
613 }
614 }
615 }
616 else {
617 if (can_pick_the_item) {
618 // LEFT_AND_RIGHT — the fallback when a filament has no entry in the
619 // nozzle map — keeps both panels pickable.
620 auto parent = container->GetParent();
621 if (parent == m_left_marea_panel) {
622 can_pick_the_item = (m_show_type == ShowType::LEFT || m_show_type == ShowType::LEFT_AND_RIGHT);
623 } else if (parent == m_right_marea_panel) {
625 can_pick_the_item = !devPrinterUtil::IsVirtualSlot(m_mapping_item->m_ams_id);
626 if (!can_pick_the_item) {
627 item_tooltip_msg = _L(
628 "External spools are not supported since Filament Track Switch has been installed. If you want to use an external spool, please uninstall it.");
629 }
631 can_pick_the_item = false;
632 }
633 }
634 }
635 }
636
637 // check filament type
638 if (can_pick_the_item) {
639 if (tray_data[i].type == NORMAL && !is_match_material(tray_data[i].filament_type)){
640 can_pick_the_item = false;
641 } else if(tray_data[i].type == EMPTY){
642 // Mapping to an empty slot is only allowed from the multi-machine send page,
643 // which maps onto EMPTY placeholder trays.
644 can_pick_the_item = m_mapping_from_multi_machines;
645 }
646 }
647
648 wxColour display_color;
649 if (can_pick_the_item) {
650 display_color = tray_data[i].type == NORMAL ? tray_data[i].colour : wxColour(0xCE, 0xCE, 0xCE);
651 } else {
652 display_color = wxColour(0xEE, 0xEE, 0xEE);
653 }
654
655 wxString display_name;
656 if (tray_data[i].type == THIRD) {
657 display_name = "?";
658 } else if (tray_data[i].type == EMPTY) {
659 display_name = "-";
660 } else {
661 display_name = tray_data[i].name;
662 }
663
664 m_mapping_item->set_data(m_tag_material, display_color, display_name, remain_detect_flag, tray_data[i], !can_pick_the_item, item_tooltip_msg);
665 m_mapping_item->Bind(wxEVT_LEFT_DOWN, [this, can_pick_the_item, m_mapping_item](wxMouseEvent& e) {
666 if (can_pick_the_item) {
667 m_mapping_item->send_event(m_current_filament_id);
668 Dismiss();
669 }
670 });
671
672 sizer->Add(0, 0, 0, wxRIGHT, FromDIP(6));
673 sizer->Add(m_mapping_item, 0, wxTOP, FromDIP(1));
674 m_mapping_item_list.push_back(m_mapping_item);
675 }
676}
std::vector< MappingItem * > m_mapping_item_list
Definition AmsMappingPopup.hpp:299
std::string m_tag_material
Definition AmsMappingPopup.hpp:304
ShowType m_show_type
Definition AmsMappingPopup.hpp:303
bool m_mapping_from_multi_machines
Definition AmsMappingPopup.hpp:340
bool is_match_material(std::string material) const
Definition AmsMappingPopup.cpp:1191
wxWindow * send_win
Definition AmsMappingPopup.hpp:295
int m_current_filament_id
Definition AmsMappingPopup.hpp:302
static bool IsVirtualSlot(int ams_id)
Definition DevDefs.h:165
wxMouseEvent
Definition CameraPopup.cpp:47
@ NORMAL
Definition AmsMappingPopup.hpp:72
@ THIRD
Definition AmsMappingPopup.hpp:73
@ EMPTY
Definition AmsMappingPopup.hpp:74
@ LEFT
Definition AmsMappingPopup.hpp:78
@ LEFT_AND_RIGHT_DYNAMIC
Definition AmsMappingPopup.hpp:81
@ RIGHT
Definition AmsMappingPopup.hpp:79
@ LEFT_AND_RIGHT
Definition AmsMappingPopup.hpp:80
zaa_minimize_perimeter_height filament_type((ConfigOptionBools, filament_soluble))((ConfigOptionStrings

References _L, Slic3r::GUI::EMPTY, Slic3r::filament_type(), is_match_material(), Slic3r::devPrinterUtil::IsVirtualSlot(), Slic3r::GUI::LEFT, Slic3r::GUI::LEFT_AND_RIGHT, Slic3r::GUI::LEFT_AND_RIGHT_DYNAMIC, Slic3r::GUI::MappingItem::m_ams_id, m_current_filament_id, m_left_marea_panel, m_mapping_from_multi_machines, m_mapping_item_list, m_right_marea_panel, m_show_type, Slic3r::GUI::MappingItem::m_slot_id, m_tag_material, m_use_in_sync_dialog, Slic3r::GUI::NORMAL, Slic3r::GUI::RIGHT, Slic3r::GUI::MappingItem::send_event(), send_win, Slic3r::GUI::MappingItem::send_win, Slic3r::GUI::MappingItem::set_data(), Slic3r::GUI::MappingItem::set_tray_index(), Slic3r::GUI::THIRD, VIRTUAL_TRAY_DEPUTY_ID, VIRTUAL_TRAY_MAIN_ID, and Slic3r::GUI::wxMouseEvent.

Referenced by update_ams_data_multi_machines(), and update_mapping_items().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_ext_ams_mapping()

void Slic3r::GUI::AmsMapingPopup::add_ext_ams_mapping ( TrayData tray_data,
MappingItem * item )
679{
680#ifdef __APPLE__
681 m_mapping_item_list.push_back(item);
682#endif
683 // set button
684 if (tray_data.type == NORMAL) {
685 if (is_match_material(tray_data.filament_type)) {
686 item->set_data(m_tag_material, tray_data.colour, tray_data.name, false, tray_data);
687 } else {
688 item->set_data(m_tag_material, m_ext_mapping_filatype_check ? wxColour(0xEE, 0xEE, 0xEE) : tray_data.colour, tray_data.name, false, tray_data, true);
690 }
691
692 item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, item](wxMouseEvent& e) {
693 if (!item->GetParent() || !item->GetParent()->IsEnabled()) return;
694 if (m_ext_mapping_filatype_check && !is_match_material(tray_data.filament_type)) return;
695 item->send_event(m_current_filament_id);
696 Dismiss();
697 });
698 }
699
700
701 // temp
702 if (tray_data.type == EMPTY) {
703 item->set_data(m_tag_material, wxColour(0xCE, 0xCE, 0xCE), "-", false, tray_data);
704 item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, item](wxMouseEvent& e) {
705 if (!item->GetParent() || !item->GetParent()->IsEnabled()) return;
706 item->send_event(m_current_filament_id);
707 Dismiss();
708 });
709 }
710
711 // third party
712 if (tray_data.type == THIRD) {
713 item->set_data(m_tag_material, tray_data.colour, "?", false, tray_data);
714 //item->set_data(wxColour(0xCE, 0xCE, 0xCE), "?", tray_data);
715 item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, item](wxMouseEvent& e) {
716 if (!item->GetParent() || !item->GetParent()->IsEnabled()) return;
717 item->send_event(m_current_filament_id);
718 Dismiss();
719 });
720 }
721
722 item->set_tray_index(_L("Ext"));
723}
bool m_ext_mapping_filatype_check
Definition AmsMappingPopup.hpp:283
bool m_has_unmatch_filament
Definition AmsMappingPopup.hpp:301

References _L, Slic3r::GUI::TrayData::colour, Slic3r::GUI::EMPTY, Slic3r::GUI::TrayData::filament_type, is_match_material(), m_current_filament_id, m_ext_mapping_filatype_check, m_has_unmatch_filament, m_mapping_item_list, m_tag_material, Slic3r::GUI::TrayData::name, Slic3r::GUI::NORMAL, Slic3r::GUI::MappingItem::send_event(), Slic3r::GUI::MappingItem::set_data(), Slic3r::GUI::MappingItem::set_tray_index(), Slic3r::GUI::THIRD, Slic3r::GUI::TrayData::type, and Slic3r::GUI::wxMouseEvent.

Referenced by update_mapping_items().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Create()

bool PopupWindow::Create ( wxWindow * parent,
int flags = wxBORDER_NONE )
inherited
22{
23 if (!wxPopupTransientWindow::Create(parent, style))
24 return false;
25#ifdef __WXGTK__
26 GetTopParent(parent)->Bind(wxEVT_ACTIVATE, &PopupWindow::topWindowActiavate, this);
27#endif
28#ifdef __WXOSX__
29 if (style & wxPU_CONTAINS_CONTROLS)
30 for (auto evt : {wxEVT_LEFT_DOWN, wxEVT_LEFT_UP, wxEVT_LEFT_DCLICK, wxEVT_MOTION, wxEVT_MOUSEWHEEL})
31 Bind(evt, &PopupWindow::OnMouseEvent2, this);
32#endif
33 return true;
34}
static wxWindow * GetTopParent(wxWindow *pWindow)
Definition PopupWindow.cpp:10
#define style
Definition WipeTowerDialog.cpp:101

References GetTopParent(), and style.

Referenced by PopupWindow(), and DropDown::Create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_split_sizer()

wxBoxSizer * Slic3r::GUI::AmsMapingPopup::create_split_sizer ( wxWindow * parent,
wxString text )
1164 {
1165 wxBoxSizer* sizer_split_ams = new wxBoxSizer(wxHORIZONTAL);
1166 auto ams_title_text = new Label(parent, text);
1167 ams_title_text->SetFont(::Label::Body_13);
1168 ams_title_text->SetBackgroundColour(*wxWHITE);
1169 ams_title_text->SetForegroundColour(0x909090);
1170 auto m_split_left_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
1171 m_split_left_line->SetBackgroundColour(0xeeeeee);
1172 m_split_left_line->SetMinSize(wxSize(-1, 1));
1173 m_split_left_line->SetMaxSize(wxSize(-1, 1));
1174 sizer_split_ams->Add(0, 0, 0, wxEXPAND, 0);
1175 sizer_split_ams->Add(ams_title_text, 0, wxALIGN_CENTER, 0);
1176 sizer_split_ams->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND, 0);
1177 return sizer_split_ams;
1178 }

References Label::Body_13.

Referenced by AmsMapingPopup().

Here is the caller graph for this function:

◆ EnableExtMappingFilaTypeCheck()

void Slic3r::GUI::AmsMapingPopup::EnableExtMappingFilaTypeCheck ( bool to_check = true)
inline

◆ get_current_filament_id()

int Slic3r::GUI::AmsMapingPopup::get_current_filament_id ( )
inline
355{return m_current_filament_id;};

References m_current_filament_id.

◆ get_material_index_str()

const std::string & Slic3r::GUI::AmsMapingPopup::get_material_index_str ( )
inline
380{ return m_material_index; }
std::string m_material_index
Definition AmsMappingPopup.hpp:401

References m_material_index.

◆ get_use_in_sync_dialog()

bool Slic3r::GUI::AmsMapingPopup::get_use_in_sync_dialog ( )
inline
342{ return m_use_in_sync_dialog; }

References m_use_in_sync_dialog.

◆ is_match_material()

bool Slic3r::GUI::AmsMapingPopup::is_match_material ( std::string material) const
1192{
1193 return m_tag_material == material ? true : false;
1194}

References m_tag_material.

Referenced by add_ams_mapping(), add_ext_ams_mapping(), and on_left_down().

Here is the caller graph for this function:

◆ msw_rescale()

void Slic3r::GUI::AmsMapingPopup::msw_rescale ( )
1137{
1138 m_left_extra_slot->msw_rescale();
1139 m_right_extra_slot->msw_rescale();
1140 for (auto item : m_mapping_item_list) { item->msw_rescale(); }
1141 for (auto container : m_amsmapping_container_list) { container->msw_rescale(); }
1142
1143 m_flush_warning_panel->Rescale();
1144 m_rack_nozzle_select->Rescale();
1145
1146 Fit();
1147 Refresh();
1148};
std::vector< MappingContainer * > m_amsmapping_container_list
Definition AmsMappingPopup.hpp:298

References m_amsmapping_container_list, m_flush_warning_panel, m_left_extra_slot, m_mapping_item_list, m_rack_nozzle_select, and m_right_extra_slot.

◆ on_left_down()

void Slic3r::GUI::AmsMapingPopup::on_left_down ( wxMouseEvent & evt)
1198{
1199 auto pos = ClientToScreen(evt.GetPosition());
1200 {//deal m_reset_btn
1201 auto& item = m_reset_btn;
1202 auto p_rect = item->ClientToScreen(wxPoint(0, 0));
1203 auto left = item->GetSize();
1204 if (pos.x > p_rect.x && pos.y > p_rect.y && pos.x < (p_rect.x + item->GetSize().x) && pos.y < (p_rect.y + item->GetSize().y)) {
1206 evt.StopPropagation();
1207 return;
1208 }
1209 }
1210 for (MappingItem *item : m_mapping_item_list) {
1211 auto p_rect = item->ClientToScreen(wxPoint(0, 0));
1212 auto left = item->GetSize();
1213
1214 if (pos.x > p_rect.x && pos.y > p_rect.y && pos.x < (p_rect.x + item->GetSize().x) && pos.y < (p_rect.y + item->GetSize().y)) {
1215 if (item->m_tray_data.type == TrayType::NORMAL) {
1216 if (!m_ext_mapping_filatype_check && (item->m_ams_id == VIRTUAL_TRAY_MAIN_ID || item->m_ams_id == VIRTUAL_TRAY_DEPUTY_ID)) {
1217 // Do nothing
1218 } else {
1219 if(!is_match_material(item->m_tray_data.filament_type)) { return; }
1220 }
1221 }
1222
1223 if (item->m_tray_data.type == TrayType::EMPTY && !m_mapping_from_multi_machines) return;
1225
1226 if ((m_show_type == ShowType::LEFT && item->GetParent()->GetName() == "left") ||
1227 (m_show_type == ShowType::RIGHT && item->GetParent()->GetName() == "right") ||
1230 item->send_event(m_current_filament_id);
1231 Dismiss();
1232 break;
1233 }
1234 }
1235 }
1236 evt.Skip();
1237}
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16
@ left
Definition MarchingSquares.hpp:188

References Slic3r::GUI::EMPTY, is_match_material(), Slic3r::devPrinterUtil::IsVirtualSlot(), Slic3r::GUI::LEFT, Slic3r::GUI::LEFT_AND_RIGHT, Slic3r::GUI::LEFT_AND_RIGHT_DYNAMIC, m_current_filament_id, m_ext_mapping_filatype_check, m_mapping_from_multi_machines, m_mapping_item_list, m_reset_btn, m_show_type, Slic3r::GUI::NORMAL, reset_ams_info(), Slic3r::GUI::RIGHT, VIRTUAL_TRAY_DEPUTY_ID, VIRTUAL_TRAY_MAIN_ID, and Slic3r::GUI::wxMouseEvent.

Referenced by AmsMapingPopup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnDismiss()

void Slic3r::GUI::AmsMapingPopup::OnDismiss ( )
virtual
1301{
1302#ifdef __APPLE__
1303 if (m_tip_popup && m_tip_popup->IsShown ())
1304 m_tip_popup->Hide();
1305#endif
1306}

◆ OnNozzleMappingSelected()

void Slic3r::GUI::AmsMapingPopup::OnNozzleMappingSelected ( wxCommandEvent & evt)
private
1322{
1323 if (auto ptr = m_rack.lock()) {
1324 MachineObject* obj = ptr->GetNozzleSystem()->GetOwner();
1325 obj->get_nozzle_mapping_result()->SetManualNozzleMappingByFila(m_current_filament_id, m_rack_nozzle_select->GetSelectedNozzlePosID());
1326 update_flush_waste(obj);
1327 }
1328
1329 evt.Skip();
1330 Dismiss();
1331}
std::weak_ptr< DevNozzleRack > m_rack
Definition AmsMappingPopup.hpp:398
void update_flush_waste(MachineObject *obj)
Definition AmsMappingPopup.cpp:1333

References Slic3r::MachineObject::get_nozzle_mapping_result(), Slic3r::MachineObject::GetNozzleSystem(), Slic3r::DevNozzleSystem::GetOwner(), m_current_filament_id, m_rack, m_rack_nozzle_select, and update_flush_waste().

Referenced by AmsMapingPopup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ paintEvent()

void Slic3r::GUI::AmsMapingPopup::paintEvent ( wxPaintEvent & evt)
1314{
1315 wxPaintDC dc(this);
1316 dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#009688")), FromDIP(2))); // Orca: colorful accent border for separation (dark-mode aware)
1317 dc.SetBrush(*wxTRANSPARENT_BRUSH);
1318 dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0);
1319}

References StateColor::darkModeColorFor().

Referenced by AmsMapingPopup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse_ams_mapping()

std::vector< TrayData > Slic3r::GUI::AmsMapingPopup::parse_ams_mapping ( const std::map< std::string, DevAms *, NumericStrCompare > & amsList)
1100{
1101 std::vector<TrayData> m_tray_data;
1102 for (auto ams_iter = amsList.begin(); ams_iter != amsList.end(); ams_iter++) {
1103 BOOST_LOG_TRIVIAL(trace) << "ams_mapping ams id " << ams_iter->first.c_str();
1104
1105 auto ams_indx = atoi(ams_iter->first.c_str());
1106 DevAms* ams_group = ams_iter->second;
1107 std::map<std::string, DevAmsTray*>::const_iterator tray_iter;
1108
1109 for (tray_iter = ams_group->GetTrays().cbegin(); tray_iter != ams_group->GetTrays().cend(); tray_iter++) {
1110 DevAmsTray* tray_data = tray_iter->second;
1111 TrayData td;
1112
1113 td.id = ams_indx * AMS_TOTAL_COUNT + atoi(tray_data->id.c_str());
1114
1115 if (!tray_data->is_exists) {
1116 td.type = EMPTY;
1117 } else {
1118 if (!tray_data->is_tray_info_ready()) {
1119 td.type = THIRD;
1120 } else {
1121 td.type = NORMAL;
1122 td.remain = tray_data->remain;
1123 td.colour = DevAmsTray::decode_color(tray_data->color);
1124 td.name = tray_data->get_display_filament_type();
1125 td.filament_type = tray_data->get_filament_type();
1126 }
1127 }
1128
1129 m_tray_data.push_back(td);
1130 }
1131 }
1132
1133 return m_tray_data;
1134}
#define AMS_TOTAL_COUNT
Definition AmsMappingPopup.hpp:69
static wxColour decode_color(const std::string &color)
Definition DevFilaSystem.cpp:38
void trace(unsigned int level, const char *message)
Definition utils.cpp:247

References AMS_TOTAL_COUNT, Slic3r::DevAmsTray::color, Slic3r::GUI::TrayData::colour, Slic3r::DevAmsTray::decode_color(), Slic3r::GUI::EMPTY, Slic3r::GUI::TrayData::filament_type, Slic3r::DevAmsTray::get_display_filament_type(), Slic3r::DevAmsTray::get_filament_type(), Slic3r::DevAms::GetTrays(), Slic3r::DevAmsTray::id, Slic3r::GUI::TrayData::id, Slic3r::DevAmsTray::is_exists, Slic3r::DevAmsTray::is_tray_info_ready(), Slic3r::GUI::TrayData::name, Slic3r::GUI::NORMAL, Slic3r::DevAmsTray::remain, Slic3r::GUI::TrayData::remain, Slic3r::GUI::THIRD, Slic3r::trace(), and Slic3r::GUI::TrayData::type.

Here is the call graph for this function:

◆ ProcessLeftDown()

bool Slic3r::GUI::AmsMapingPopup::ProcessLeftDown ( wxMouseEvent & event)
virtual
1309{
1310 return PopupWindow::ProcessLeftDown(event);
1311}

References Slic3r::GUI::wxMouseEvent.

◆ reset_ams_info()

void Slic3r::GUI::AmsMapingPopup::reset_ams_info ( )
1084 {
1085 if (m_reset_callback) {
1087 }
1088 }
ResetCallback m_reset_callback
Definition AmsMappingPopup.hpp:400

References m_material_index, and m_reset_callback.

Referenced by AmsMapingPopup(), and on_left_down().

Here is the caller graph for this function:

◆ set_current_filament_id()

void Slic3r::GUI::AmsMapingPopup::set_current_filament_id ( int id)
inline
354{ m_current_filament_id = id; };

References m_current_filament_id.

◆ set_material_index_str()

void Slic3r::GUI::AmsMapingPopup::set_material_index_str ( std::string str)
inline
379{ m_material_index = str; }

References m_material_index.

◆ set_only_show_ext_spool()

void Slic3r::GUI::AmsMapingPopup::set_only_show_ext_spool ( bool )
inline
365{}

◆ set_parent_item()

void Slic3r::GUI::AmsMapingPopup::set_parent_item ( MaterialItem * item)
inline
361{m_parent_item = item;};

References m_parent_item, and set_parent_item().

Referenced by set_parent_item().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_reset_callback()

void Slic3r::GUI::AmsMapingPopup::set_reset_callback ( ResetCallback callback)
1090 {
1091 m_reset_callback = callback;
1092}

References m_reset_callback.

◆ set_send_win()

void Slic3r::GUI::AmsMapingPopup::set_send_win ( wxWindow * win)
inline
345{send_win = win;};

References send_win.

◆ set_show_type()

void Slic3r::GUI::AmsMapingPopup::set_show_type ( ShowType type)
inline
362{ m_show_type = type; };

References m_show_type.

◆ set_sizer_title()

void Slic3r::GUI::AmsMapingPopup::set_sizer_title ( wxBoxSizer * sizer,
wxString text )
1150 {
1151 if (!sizer) { return; }
1152 wxSizerItemList items = sizer->GetChildren();
1153 for (wxSizerItemList::iterator it = items.begin(); it != items.end(); ++it) {
1154 wxSizerItem *item = *it;
1155 auto temp_label = dynamic_cast<Label *>((item->GetWindow()));
1156 if (temp_label) {
1157 temp_label->SetLabel(text);
1158 break;
1159 }
1160 }
1161 }

Referenced by update(), and update_ams_data_multi_machines().

Here is the caller graph for this function:

◆ set_tag_texture()

void Slic3r::GUI::AmsMapingPopup::set_tag_texture ( std::string texture)
1186{
1187 m_tag_material = texture;
1188}

References m_tag_material.

◆ ShouldDismissOnTopWindowDeactivate()

virtual bool PopupWindow::ShouldDismissOnTopWindowDeactivate ( )
inlineprotectedvirtualinherited

Reimplemented in DropDown.

28{ return true; }

◆ show_reset_button()

void Slic3r::GUI::AmsMapingPopup::show_reset_button ( )
1094 {
1095 m_reset_btn->Show();
1096}

References m_reset_btn.

◆ update()

void Slic3r::GUI::AmsMapingPopup::update ( MachineObject * obj,
const std::vector< FilamentInfo > & ams_mapping_result,
bool use_dynamic_switch = false,
std::optional< PrintFromType > print_type = std::nullopt )
85{
86 if (!obj) { return; } // Orca: guard before use (REF logs before its null check)
87
88 BOOST_LOG_TRIVIAL(info) << "ams_mapping total count " << obj->GetFilaSystem()->GetAmsCount();
89
90 for (auto& ams_container : m_amsmapping_container_list) {
91 ams_container->Destroy();
92 }
93
96 m_mapping_item_list.clear();
97
98 /*title*/
99 update_title(obj);
100
101 /*ams mapping*/
102 update_ams_tips(obj);
103 update_mapping_items(obj, ams_mapping_result, use_dynamic_switch);
104
105 /*rack*/
106 update_rack_select(obj, use_dynamic_switch, print_type);
108
109 if (wxGetApp().dark_mode() && m_reset_btn->GetName() != "erase_dark") {
110 m_reset_btn->SetName("erase_dark");
111 m_reset_btn->SetBitmap(ScalableBitmap(m_right_first_text_panel, "erase_dark", 14).bmp());
112 } else if (!wxGetApp().dark_mode() && m_reset_btn->GetName() != "erase") {
113 m_reset_btn->SetName("erase");
114 m_reset_btn->SetBitmap(ScalableBitmap(m_right_first_text_panel, "erase", 14).bmp());
115 }
116
117 size_t extruder_num = obj->GetExtderSystem()->GetTotalExtderCount();
118 if (extruder_num == 1) {
119 m_left_marea_panel->Hide();
120 m_left_extra_slot->Hide();
121 m_split_line_panel->Hide();
122 m_right_marea_panel->Show();
123 m_right_marea_panel->Enable(true);
124 m_right_extra_slot->Show();
125 m_right_extra_slot->Enable(true);
126 m_right_split_ext_sizer->Show(true);
128 } else if (extruder_num > 1) {
130 m_left_marea_panel->Show(false);
131 m_left_extra_slot->Show(false);
132 m_right_extra_slot->Show(false);
133 m_left_split_ams_sizer->Show(false);
134 m_right_split_ams_sizer->Show(false);
135 m_right_split_ext_sizer->Show(false);
136 m_split_line_panel->Hide();
137
138 m_right_marea_panel->Show();
139 m_right_marea_panel->Enable(true);
140 } else {
141
142 m_left_marea_panel->Show();
143 m_left_extra_slot->Show();
144 m_split_line_panel->Show();
145 m_right_marea_panel->Show();
146 m_right_extra_slot->Show();
147 m_right_split_ext_sizer->Show(true);
148 m_left_tips->SetLabel(m_left_tip_text);
153 m_left_marea_panel->Enable(true);
154 m_left_extra_slot->Enable(true);
155 m_right_marea_panel->Enable(false);
156 m_right_extra_slot->Enable(false);
159 m_right_tips->SetLabel("");
160 }
161 } else if (m_show_type == ShowType::RIGHT) {
162 m_left_marea_panel->Enable(false);
163 m_left_extra_slot->Enable(false);
164 m_right_marea_panel->Enable(true);
165 m_right_extra_slot->Enable(true);
167 // m_right_tips->SetLabel(m_single_tip_text);
168 m_left_tips->SetLabel("");
169 }
171 m_left_marea_panel->Enable(true);
172 m_left_extra_slot->Enable(true);
173 m_right_marea_panel->Enable(true);
174 m_right_extra_slot->Enable(true);
177 m_right_tips->SetLabel("");
178 }
180 m_left_marea_panel->Show(false);
181 m_left_extra_slot->Show(false);
182 m_right_extra_slot->Show(false);
183 m_left_split_ams_sizer->Show(false);
184 m_right_split_ams_sizer->Show(false);
185 m_right_split_ext_sizer->Show(false);
186 m_split_line_panel->Hide();
187
188 m_right_marea_panel->Show();
189 m_right_marea_panel->Enable(true);
190 }
191 }
192 }
193
194 Layout();
195 Fit();
196 Refresh();
197}
void update_ams_tips(MachineObject *obj)
Definition AmsMappingPopupUpdate.cpp:498
std::vector< wxBoxSizer * > m_amsmapping_container_sizer_list
Definition AmsMappingPopup.hpp:297
void update_mapping_items(MachineObject *obj, const std::vector< FilamentInfo > &ams_mapping_result, bool use_dynamic_switch)
Definition AmsMappingPopupUpdate.cpp:254
void set_sizer_title(wxBoxSizer *sizer, wxString text)
Definition AmsMappingPopup.cpp:1150
void update_title(MachineObject *obj)
Definition AmsMappingPopupUpdate.cpp:470
void update_rack_select(MachineObject *obj, bool use_dynamic_switch, std::optional< PrintFromType > print_type)
Definition AmsMappingPopupUpdate.cpp:520

References _L, Slic3r::MachineObject::GetExtderSystem(), Slic3r::MachineObject::GetFilaSystem(), Slic3r::DevExtderSystem::GetTotalExtderCount(), Slic3r::GUI::LEFT, Slic3r::GUI::LEFT_AND_RIGHT, Slic3r::GUI::LEFT_AND_RIGHT_DYNAMIC, m_amsmapping_container_list, m_amsmapping_container_sizer_list, m_left_extra_slot, m_left_marea_panel, m_left_split_ams_sizer, m_left_tip_text, m_left_tips, m_mapping_item_list, m_reset_btn, m_right_extra_slot, m_right_first_text_panel, m_right_marea_panel, m_right_split_ams_sizer, m_right_split_ext_sizer, m_right_tip_text, m_right_tips, m_show_type, m_single_tip_text, m_split_line_panel, m_use_in_sync_dialog, Slic3r::GUI::RIGHT, set_sizer_title(), update_ams_tips(), update_flush_waste(), update_mapping_items(), update_rack_select(), and update_title().

Here is the call graph for this function:

◆ update_ams_data_multi_machines()

void Slic3r::GUI::AmsMapingPopup::update_ams_data_multi_machines ( )
370{
372
373 std::vector<TrayData> tray_datas;
374 for (int i = 0; i < 4; ++i) {
375 TrayData td;
376 td.id = i;
377 td.type = EMPTY;
378 td.colour = wxColour(166, 169, 170);
379 td.name = "";
380 td.filament_type = "";
381 td.ctype = 0;
382 tray_datas.push_back(td);
383 }
384
385 for (auto& ams_container : m_amsmapping_container_list) {
386 ams_container->Destroy();
387 }
388
391 m_mapping_item_list.clear();
392
393 if (wxGetApp().dark_mode() && m_reset_btn->GetName() != "erase_dark") {
394 m_reset_btn->SetName("erase_dark");
395 m_reset_btn->SetBitmap(ScalableBitmap(m_right_first_text_panel, "erase_dark", 14).bmp());
396 } else if (!wxGetApp().dark_mode() && m_reset_btn->GetName() != "erase") {
397 m_reset_btn->SetName("erase");
398 m_reset_btn->SetBitmap(ScalableBitmap(m_right_first_text_panel, "erase", 14).bmp());
399 }
400
401 size_t nozzle_nums = 1;
403
404 m_left_marea_panel->Hide();
405 m_left_extra_slot->Hide();
406 // m_left_marea_panel->Show();
407 m_right_marea_panel->Show();
409 // m_right_tips->SetLabel(m_single_tip_text);
410 m_right_extra_slot->Hide();
411 m_left_extra_slot->Hide();
412
413
414
415 /*ams*/
416 bool has_left_ams = false, has_right_ams = false;
417 std::list<MappingContainer*> left_one_slot_containers;
418 std::list<MappingContainer*> right_one_slot_containers;
419 std::vector<MappingContainer*> left_four_slots_containers;
420 std::vector<MappingContainer*> right_four_slot_containers;
421 for (int i = 0; i < 1; i++) {
422 int ams_indx = 0;
423 int ams_type = 1;
424 int nozzle_id = 0;
425
426 if (ams_type >= 1 && ams_type <= 3) { // 1:ams 2:ams-lite 3:n3f
427
428 auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL);
429 auto ams_mapping_item_container = new MappingContainer(nozzle_id == 0 ? m_right_marea_panel : m_left_marea_panel, "AMS-1", 4);
430 ams_mapping_item_container->SetName(nozzle_id == 0 ? m_right_marea_panel->GetName() : m_left_marea_panel->GetName());
431 ams_mapping_item_container->SetSizer(sizer_mapping_list);
432 ams_mapping_item_container->Layout();
433
435 ams_mapping_item_container->Show();
436 add_ams_mapping(tray_datas, false, ams_mapping_item_container, sizer_mapping_list);
437 m_amsmapping_container_sizer_list.push_back(sizer_mapping_list);
438 m_amsmapping_container_list.push_back(ams_mapping_item_container);
439
440 if (nozzle_id == 0) {
441 has_right_ams = true;
442 if (ams_mapping_item_container->get_slots_num() == 1) {
443 right_one_slot_containers.push_back(ams_mapping_item_container);
444 } else {
445 right_four_slot_containers.push_back(ams_mapping_item_container);
446 }
447 } else if (nozzle_id == 1) {
448 has_left_ams = true;
449 if (ams_mapping_item_container->get_slots_num() == 1) {
450 left_one_slot_containers.push_back(ams_mapping_item_container);
451 } else {
452 left_four_slots_containers.push_back(ams_mapping_item_container);
453 }
454 }
455 } else if (ams_type == 4) { // 4:n3s
456 }
457 }
458
459 _add_containers(this, left_one_slot_containers, left_four_slots_containers, m_sizer_ams_basket_left);
460 _add_containers(this, right_one_slot_containers, right_four_slot_containers, m_sizer_ams_basket_right);
461 m_left_split_ams_sizer->Show(has_left_ams);
462 m_right_split_ams_sizer->Show(has_right_ams);
463 //update_items_check_state(ams_mapping_result);
464
465 Layout();
466 Fit();
467}
void add_ams_mapping(std::vector< TrayData > tray_data, bool remain_detect_flag, wxWindow *container, wxBoxSizer *sizer)
Definition AmsMappingPopupUpdate.cpp:574
static void _add_containers(const AmsMapingPopup *win, std::list< MappingContainer * > &one_slot_containers, const std::vector< MappingContainer * > &four_slots_containers, wxBoxSizer *target_sizer)
Definition AmsMappingPopupUpdate.cpp:61

References Slic3r::GUI::_add_containers(), _L, add_ams_mapping(), Slic3r::GUI::TrayData::colour, Slic3r::GUI::TrayData::ctype, Slic3r::GUI::EMPTY, Slic3r::GUI::TrayData::filament_type, Slic3r::GUI::TrayData::id, m_amsmapping_container_list, m_amsmapping_container_sizer_list, m_has_unmatch_filament, m_left_extra_slot, m_left_marea_panel, m_left_split_ams_sizer, m_mapping_from_multi_machines, m_mapping_item_list, m_reset_btn, m_right_extra_slot, m_right_first_text_panel, m_right_marea_panel, m_right_split_ams_sizer, m_show_type, m_sizer_ams_basket_left, m_sizer_ams_basket_right, Slic3r::GUI::TrayData::name, Slic3r::GUI::RIGHT, set_sizer_title(), and Slic3r::GUI::TrayData::type.

Here is the call graph for this function:

◆ update_ams_tips()

void Slic3r::GUI::AmsMapingPopup::update_ams_tips ( MachineObject * obj)
private
499{
500 const auto& full_config = wxGetApp().preset_bundle->full_config();
501 size_t nozzle_nums = full_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
503 m_ams_tips_msg_panel->Clear();
504 if (nozzle_nums == 2 && m_show_type != ShowType::LEFT_AND_RIGHT) {
505 m_ams_tips_msg_panel->AddMessage(_L("To learn about the filaments matching rules."),
506 "#FF6F00", ""); // Orca: dropped vendor help link
507 }
508
509 if (obj && obj->GetFilaSwitch()->IsInstalled()) {
510 const auto& msg = _L("External spools are not supported since Filament Track Switch has been installed. If you want to use an external spool, please uninstall it.");
511 m_ams_tips_msg_panel->AddMessage(msg, "#FF6F00", "");
512 }
513
514 m_ams_tips_msg_panel->Layout();
516 m_ams_tips_msg_panel->Show(m_ams_tips_msg_panel->GetMessageCount() > 0);
517 }
518}
size_t size() const override
Definition Config.hpp:722
ConfigOptionFloatsTempl< true > ConfigOptionFloatsNullable
Definition Config.hpp:1016

References _L, Slic3r::MachineObject::GetFilaSwitch(), Slic3r::DevFilaSwitch::IsInstalled(), Slic3r::GUI::LEFT_AND_RIGHT, m_ams_tips_msg_panel, and m_show_type.

Referenced by update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_flush_waste()

void Slic3r::GUI::AmsMapingPopup::update_flush_waste ( MachineObject * obj)
private
1334{
1335 if (!obj) {
1336 m_flush_warning_panel->Hide();
1337 return;
1338 };
1339
1340 float flush_waste_base = obj->get_nozzle_mapping_result()->GetFlushWeightBase();
1341 float flush_waste_current = obj->get_nozzle_mapping_result()->GetFlushWeightCurrent();
1342 if ((flush_waste_base != -1) && (flush_waste_current != -1) && flush_waste_current > flush_waste_base){
1343 m_flush_warning_panel->SetLabel(wxString::Format(_L("Printing with the current nozzle may produce an extra %0.2f g of waste."), flush_waste_current - flush_waste_base));
1344 m_flush_warning_panel->Show();
1345 } else {
1346 m_flush_warning_panel->Hide();
1347 }
1348}

References _L, Slic3r::MachineObject::get_nozzle_mapping_result(), and m_flush_warning_panel.

Referenced by OnNozzleMappingSelected(), and update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_items_check_state()

void Slic3r::GUI::AmsMapingPopup::update_items_check_state ( const std::vector< FilamentInfo > & ams_mapping_result)
544{
545 /*update check states*/
546 if (m_parent_item) {
547 auto update_item_check_state = [&ams_mapping_result, this](MappingItem* item) {
548 if (item) {
549 for (const auto& mapping_res : ams_mapping_result) {
550 if (mapping_res.id == this->m_current_filament_id) {
551 if (mapping_res.ams_id == std::to_string(item->m_ams_id) &&
552 mapping_res.slot_id == std::to_string(item->m_slot_id)) {
553 item->set_checked(true);
554 } else {
555 item->set_checked(false);
556 }
557
558 return;
559 }
560 }
561
562 item->set_checked(false);
563 }
564 };
565
566 update_item_check_state(m_left_extra_slot);
567 update_item_check_state(m_right_extra_slot);
568 for (auto mapping_item : m_mapping_item_list) {
569 update_item_check_state(mapping_item);
570 }
571 }
572}

References m_left_extra_slot, m_mapping_item_list, m_parent_item, and m_right_extra_slot.

Referenced by update_mapping_items().

Here is the caller graph for this function:

◆ update_mapping_items()

void Slic3r::GUI::AmsMapingPopup::update_mapping_items ( MachineObject * obj,
const std::vector< FilamentInfo > & ams_mapping_result,
bool use_dynamic_switch )
private
255{
256 std::list<MappingContainer*> left_one_slot_containers;
257 std::list<MappingContainer*> right_one_slot_containers;
258 std::vector<MappingContainer*> left_four_slots_containers;
259 std::vector<MappingContainer*> right_four_slot_containers;
260
261 const auto& ams_list = obj->GetFilaSystem()->GetAmsList();
262 for (auto ams_iter = ams_list.begin(); ams_iter != ams_list.end(); ams_iter++) {
263 const auto& extruder_set = ams_iter->second->GetBindedExtruderSet();
264 if (extruder_set.size() <= 0) {
265 continue;
266 }
267
268 wxPanel* target_panel = nullptr;
270 target_panel = m_right_marea_panel;
271 } else {
272 int extruder_id = *extruder_set.begin();
273 if (extruder_id == MAIN_EXTRUDER_ID) {
274 target_panel = m_right_marea_panel;
275 } else if (extruder_id == DEPUTY_EXTRUDER_ID) {
276 target_panel = m_left_marea_panel;
277 }
278 }
279
280 if (!target_panel) {
281 continue;
282 }
283
284 auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL);
285 auto ams_mapping_item_container = new MappingContainer(target_panel, ams_iter->second->GetDisplayName(), ams_iter->second->GetSlotCount());
286 ams_mapping_item_container->SetName(target_panel->GetName());
287 ams_mapping_item_container->SetSizer(sizer_mapping_list);
288 ams_mapping_item_container->Layout();
289
290 BOOST_LOG_TRIVIAL(trace) << "ams_mapping ams id " << ams_iter->first.c_str();
291
292 DevAms* ams_group = ams_iter->second;
293 auto ams_type = ams_group->GetAmsType();
294 std::vector<TrayData> tray_datas;
295 std::map<std::string, DevAmsTray*>::const_iterator tray_iter;
296 for (tray_iter = ams_group->GetTrays().cbegin(); tray_iter != ams_group->GetTrays().cend(); tray_iter++) {
297 const auto& td_opt = sGetTrayData(tray_iter->second, ams_group->GetAmsId(), ams_type);
298 if (td_opt.has_value()) {
299 tray_datas.push_back(td_opt.value());
300 }
301 }
302
303 ams_mapping_item_container->Show();
304 add_ams_mapping(tray_datas, obj->GetFilaSystem()->IsDetectRemainEnabled(), ams_mapping_item_container, sizer_mapping_list);
305 m_amsmapping_container_sizer_list.push_back(sizer_mapping_list);
306 m_amsmapping_container_list.push_back(ams_mapping_item_container);
307
308 if (target_panel == m_right_marea_panel) {
309 if (ams_mapping_item_container->get_slots_num() == 1) {
310 right_one_slot_containers.push_back(ams_mapping_item_container);
311 } else {
312 right_four_slot_containers.push_back(ams_mapping_item_container);
313 }
314 } else if (target_panel == m_left_marea_panel) {
315 if (ams_mapping_item_container->get_slots_num() == 1) {
316 left_one_slot_containers.push_back(ams_mapping_item_container);
317 } else {
318 left_four_slots_containers.push_back(ams_mapping_item_container);
319 }
320 }
321 }
322
323 for (int i = obj->vt_slot.size() - 1; i >= 0; i--) {
324 DevAmsTray* tray_data = &obj->vt_slot[i];
325 const auto& td_opt = sGetTrayData(tray_data, tray_data->id, DevAmsType::EXT_SPOOL);
326 if (!td_opt.has_value()) {
327 continue;
328 }
329
331 auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL);
332 // TRN Short labels of the external spool of the right and left nozzle
333 const auto& shown_name = td_opt->ams_id == VIRTUAL_TRAY_MAIN_ID ? _L("Ext-R") : _L("Ext-L");
334 auto ams_mapping_item_container = new MappingContainer(m_right_marea_panel, shown_name, 1);
335 ams_mapping_item_container->SetName(m_right_marea_panel->GetName());
336 ams_mapping_item_container->SetSizer(sizer_mapping_list);
337 ams_mapping_item_container->Layout();
338
339 std::vector<TrayData> tray_datas;
340 tray_datas.push_back(td_opt.value());
341 add_ams_mapping(tray_datas, false, ams_mapping_item_container, sizer_mapping_list);
342 m_amsmapping_container_sizer_list.push_back(sizer_mapping_list);
343 m_amsmapping_container_list.push_back(ams_mapping_item_container);
344 right_one_slot_containers.push_back(ams_mapping_item_container);
345 } else {
346 if (td_opt->ams_id == VIRTUAL_TRAY_MAIN_ID) {
347 m_right_extra_slot->send_win = send_win;
349 } else if (td_opt->ams_id == VIRTUAL_TRAY_DEPUTY_ID) {
350 m_left_extra_slot->send_win = send_win;
351 add_ext_ams_mapping(td_opt.value(), m_left_extra_slot);
352 }
353 }
354 }
355
356 _add_containers(this, left_one_slot_containers, left_four_slots_containers, m_sizer_ams_basket_left);
357 _add_containers(this, right_one_slot_containers, right_four_slot_containers, m_sizer_ams_basket_right);
359 m_left_split_ams_sizer->Show(!left_one_slot_containers.empty() || !left_four_slots_containers.empty());
360 m_right_split_ams_sizer->Show(!right_one_slot_containers.empty() || !right_four_slot_containers.empty());
361 } else {
362 m_left_split_ams_sizer->Show(false);
363 m_right_split_ams_sizer->Show(false);
364 }
365
366 update_items_check_state(ams_mapping_result);
367}
void update_items_check_state(const std::vector< FilamentInfo > &ams_mapping_result)
Definition AmsMappingPopupUpdate.cpp:543
void add_ext_ams_mapping(TrayData tray_data, MappingItem *item)
Definition AmsMappingPopupUpdate.cpp:678
static std::optional< TrayData > sGetTrayData(DevAmsTray *tray, const std::string &ams_id_str, DevAmsType ams_type)
Definition AmsMappingPopupUpdate.cpp:201
@ EXT_SPOOL
Definition DevDefs.h:59

References Slic3r::GUI::_add_containers(), _L, add_ams_mapping(), add_ext_ams_mapping(), DEPUTY_EXTRUDER_ID, Slic3r::EXT_SPOOL, Slic3r::DevAms::GetAmsId(), Slic3r::DevAms::GetAmsType(), Slic3r::MachineObject::GetFilaSystem(), Slic3r::DevAms::GetTrays(), Slic3r::DevAmsTray::id, Slic3r::GUI::LEFT_AND_RIGHT_DYNAMIC, m_amsmapping_container_list, m_amsmapping_container_sizer_list, m_left_extra_slot, m_left_marea_panel, m_left_split_ams_sizer, m_right_extra_slot, m_right_marea_panel, m_right_split_ams_sizer, m_show_type, m_sizer_ams_basket_left, m_sizer_ams_basket_right, MAIN_EXTRUDER_ID, send_win, Slic3r::GUI::sGetTrayData(), Slic3r::trace(), update_items_check_state(), VIRTUAL_TRAY_DEPUTY_ID, VIRTUAL_TRAY_MAIN_ID, and Slic3r::MachineObject::vt_slot.

Referenced by update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_materials_list()

void Slic3r::GUI::AmsMapingPopup::update_materials_list ( std::vector< std::string > list)
1181{
1182 m_materials_list = list;
1183}
std::vector< std::string > m_materials_list
Definition AmsMappingPopup.hpp:296

References m_materials_list.

◆ update_rack_select()

void Slic3r::GUI::AmsMapingPopup::update_rack_select ( MachineObject * obj,
bool use_dynamic_switch,
std::optional< PrintFromType > print_type )
521{
522 // Orca: MachineObject has no GetNozzleRack() convenience; route through the nozzle system instead.
523 m_rack = obj ? obj->GetNozzleSystem()->GetNozzleRack() : nullptr;
524
525 bool show_rack_select_area = false;
527 obj && obj->GetNozzleSystem()->GetNozzleRack()->IsSupported() &&
528 print_from_type.has_value() && print_from_type.value() == PrintFromType::FROM_NORMAL) {
529 const auto& nozzle_pos_vec = obj->get_nozzle_mapping_result()->GetMappedNozzlePosVecByFilaId(m_current_filament_id);
530 m_rack_nozzle_select->UpdatSelectedNozzles(obj->GetNozzleSystem()->GetNozzleRack(), nozzle_pos_vec, use_dynamic_switch, print_from_type);
531 show_rack_select_area = true;
532 }
533
534 if (show_rack_select_area != m_rack_nozzle_select->IsShown()) {
535 m_right_tip_text = show_rack_select_area ? _L("Select Filament && Hotends") : _L("Select Filament");
537 m_rack_nozzle_select->Show(show_rack_select_area);
538 Layout();
539 Fit();
540 }
541}
@ FROM_NORMAL
Definition DevDefs.h:173

References _L, Slic3r::GUI::FROM_NORMAL, Slic3r::MachineObject::get_nozzle_mapping_result(), Slic3r::DevNozzleSystem::GetNozzleRack(), Slic3r::MachineObject::GetNozzleSystem(), m_current_filament_id, m_mapping_from_multi_machines, m_rack, m_rack_nozzle_select, m_right_tip_text, m_right_tips, and m_use_in_sync_dialog.

Referenced by update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_title()

void Slic3r::GUI::AmsMapingPopup::update_title ( MachineObject * obj)
private
471{
472 const auto& full_config = wxGetApp().preset_bundle->full_config();
473 size_t nozzle_nums = full_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
474 if (nozzle_nums > 1) {
475 m_split_line_panel->Show();
477 wxString nozzle_name = obj ? _L(DevPrinterConfigUtil::get_toolhead_display_name(
478 obj->printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase)) : _L("left nozzle");
479 m_title_text->SetLabelText(wxString::Format(_L("Please select the filament installed on the %s."), nozzle_name));
480 return;
481 } else if (m_show_type == ShowType::RIGHT) {
482 wxString nozzle_name = obj ? _L(DevPrinterConfigUtil::get_toolhead_display_name(
483 obj->printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase)) : _L("right nozzle");
484 m_title_text->SetLabelText(wxString::Format(_L("Please select the filament installed on the %s."), nozzle_name));
485 return;
487 m_title_text->SetLabelText(_L("Please select the filament."));
488 return;
489 }
490 } else if (nozzle_nums == 1) {
491 m_split_line_panel->Hide();
492 }
493
494 m_title_text->SetLabelText(_L("Nozzle"));
495}

References _L, DEPUTY_EXTRUDER_ID, Slic3r::DevPrinterConfigUtil::get_toolhead_display_name(), Slic3r::GUI::LEFT, Slic3r::GUI::LEFT_AND_RIGHT_DYNAMIC, Slic3r::LowerCase, m_show_type, m_split_line_panel, m_title_text, MAIN_EXTRUDER_ID, Slic3r::Nozzle, Slic3r::MachineObject::printer_type, and Slic3r::GUI::RIGHT.

Referenced by update().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_ams_tips_msg_panel

wgtMsgPanel* Slic3r::GUI::AmsMapingPopup::m_ams_tips_msg_panel {nullptr}
325{nullptr};

Referenced by AmsMapingPopup(), and update_ams_tips().

◆ m_ams_tips_panel_text

wxString Slic3r::GUI::AmsMapingPopup::m_ams_tips_panel_text

◆ m_amsmapping_container_list

std::vector<MappingContainer*> Slic3r::GUI::AmsMapingPopup::m_amsmapping_container_list

◆ m_amsmapping_container_sizer_list

std::vector<wxBoxSizer*> Slic3r::GUI::AmsMapingPopup::m_amsmapping_container_sizer_list

◆ m_current_filament_id

◆ m_ext_mapping_filatype_check

bool Slic3r::GUI::AmsMapingPopup::m_ext_mapping_filatype_check = true
private

◆ m_flush_warning_panel

DevIconLabel* Slic3r::GUI::AmsMapingPopup::m_flush_warning_panel
private

◆ m_has_unmatch_filament

bool Slic3r::GUI::AmsMapingPopup::m_has_unmatch_filament {false}

◆ m_left_extra_slot

MappingItem* Slic3r::GUI::AmsMapingPopup::m_left_extra_slot {nullptr}

◆ m_left_first_text_panel

wxPanel* Slic3r::GUI::AmsMapingPopup::m_left_first_text_panel {nullptr}
323{nullptr};

Referenced by AmsMapingPopup().

◆ m_left_marea_panel

wxPanel* Slic3r::GUI::AmsMapingPopup::m_left_marea_panel {nullptr}

◆ m_left_split_ams_sizer

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_left_split_ams_sizer {nullptr}

◆ m_left_tip_text

wxString Slic3r::GUI::AmsMapingPopup::m_left_tip_text

Referenced by AmsMapingPopup(), and update().

◆ m_left_tips

Label* Slic3r::GUI::AmsMapingPopup::m_left_tips {nullptr}
330{nullptr};

Referenced by AmsMapingPopup(), and update().

◆ m_mapping_from_multi_machines

bool Slic3r::GUI::AmsMapingPopup::m_mapping_from_multi_machines {false}

◆ m_mapping_item_list

std::vector<MappingItem*> Slic3r::GUI::AmsMapingPopup::m_mapping_item_list

◆ m_material_index

std::string Slic3r::GUI::AmsMapingPopup::m_material_index
private

◆ m_materials_list

std::vector<std::string> Slic3r::GUI::AmsMapingPopup::m_materials_list

Referenced by update_materials_list().

◆ m_parent_item

MaterialItem* Slic3r::GUI::AmsMapingPopup::m_parent_item { nullptr }
293{ nullptr };

Referenced by AmsMapingPopup(), set_parent_item(), and update_items_check_state().

◆ m_rack

std::weak_ptr<DevNozzleRack> Slic3r::GUI::AmsMapingPopup::m_rack
private

◆ m_rack_nozzle_select

wgtDeviceNozzleRackSelect* Slic3r::GUI::AmsMapingPopup::m_rack_nozzle_select {nullptr}
private

◆ m_reset_btn

ScalableButton* Slic3r::GUI::AmsMapingPopup::m_reset_btn {nullptr}

◆ m_reset_callback

ResetCallback Slic3r::GUI::AmsMapingPopup::m_reset_callback {nullptr}
private
400{nullptr};

Referenced by reset_ams_info(), and set_reset_callback().

◆ m_right_extra_slot

MappingItem* Slic3r::GUI::AmsMapingPopup::m_right_extra_slot {nullptr}

◆ m_right_first_text_panel

wxPanel* Slic3r::GUI::AmsMapingPopup::m_right_first_text_panel {nullptr}
324{nullptr};

Referenced by AmsMapingPopup(), update(), and update_ams_data_multi_machines().

◆ m_right_marea_panel

wxPanel* Slic3r::GUI::AmsMapingPopup::m_right_marea_panel { nullptr }
322{ nullptr }; // used as right if both left and right sides shown. used as single panel if only one side shown.

Referenced by AmsMapingPopup(), add_ams_mapping(), update(), update_ams_data_multi_machines(), and update_mapping_items().

◆ m_right_split_ams_sizer

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_right_split_ams_sizer {nullptr}

◆ m_right_split_ext_sizer

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_right_split_ext_sizer { nullptr }
329{ nullptr };

Referenced by AmsMapingPopup(), and update().

◆ m_right_tip_text

wxString Slic3r::GUI::AmsMapingPopup::m_right_tip_text

◆ m_right_tips

Label* Slic3r::GUI::AmsMapingPopup::m_right_tips {nullptr}
331{nullptr};

Referenced by AmsMapingPopup(), update(), and update_rack_select().

◆ m_scrolled_window

wxScrolledWindow* Slic3r::GUI::AmsMapingPopup::m_scrolled_window {nullptr}
305{nullptr};

Referenced by AmsMapingPopup().

◆ m_show_type

◆ m_single_tip_text

wxString Slic3r::GUI::AmsMapingPopup::m_single_tip_text

Referenced by AmsMapingPopup(), and update().

◆ m_sizer_ams

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_ams {nullptr}
309{nullptr};

Referenced by AmsMapingPopup().

◆ m_sizer_ams_basket_left

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_ams_basket_left { nullptr }

◆ m_sizer_ams_basket_right

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_ams_basket_right { nullptr }

◆ m_sizer_ams_left

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_ams_left {nullptr}
310{nullptr};

Referenced by AmsMapingPopup().

◆ m_sizer_ams_left_horizonal

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_ams_left_horizonal {nullptr}
312{nullptr};

Referenced by AmsMapingPopup().

◆ m_sizer_ams_right

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_ams_right {nullptr}
311{nullptr};

Referenced by AmsMapingPopup().

◆ m_sizer_ams_right_horizonal

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_ams_right_horizonal {nullptr}
313{nullptr};

Referenced by AmsMapingPopup().

◆ m_sizer_ams_v

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_ams_v {nullptr}
308{nullptr};

Referenced by AmsMapingPopup().

◆ m_sizer_list

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_list {nullptr}
316{nullptr};

◆ m_sizer_main

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_main {nullptr}
306{nullptr};

Referenced by AmsMapingPopup().

◆ m_sizer_main_h

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_main_h {nullptr}
307{nullptr};

Referenced by AmsMapingPopup().

◆ m_sizer_split_ams_left

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_split_ams_left

◆ m_sizer_split_ams_right

wxBoxSizer* Slic3r::GUI::AmsMapingPopup::m_sizer_split_ams_right

◆ m_split_line_panel

wxPanel* Slic3r::GUI::AmsMapingPopup::m_split_line_panel {nullptr}
326{nullptr};

Referenced by AmsMapingPopup(), update(), and update_title().

◆ m_tag_material

std::string Slic3r::GUI::AmsMapingPopup::m_tag_material

◆ m_title_text

wxStaticText* Slic3r::GUI::AmsMapingPopup::m_title_text { nullptr }
private
284{ nullptr };

Referenced by AmsMapingPopup(), and update_title().

◆ m_use_in_sync_dialog

bool Slic3r::GUI::AmsMapingPopup::m_use_in_sync_dialog = false
private

◆ send_win

wxWindow* Slic3r::GUI::AmsMapingPopup::send_win { nullptr }
295{ nullptr };

Referenced by add_ams_mapping(), set_send_win(), and update_mapping_items().


The documentation for this class was generated from the following files: