OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::Sidebar::priv Struct Reference
Collaboration diagram for Slic3r::GUI::Sidebar::priv:

Public Member Functions

int FromDIP (int n)
void layout_printer (bool isBBL, bool isDual)
void flush_printer_sync (bool restart=false)
 priv (Plater *plater)
 ~priv ()
void show_preset_comboboxes ()
void jump_to_object (ObjectDataViewModelNode *item)
void can_search ()
bool sync_extruder_list (bool &only_external_material, bool is_manual=false)
std::optional< NozzleOption > get_nozzle_options (MachineObject *obj, int extruder_count, bool support_multi_nozzle, bool is_manual)
bool switch_diameter (bool single)
bool switch_diameter_to (const wxString &diameter)
void update_sync_status (const MachineObject *obj)
bool is_fila_switch_ready ()
void show_filament_switcher_dialog (bool is_ready, bool is_manual)
void show_fila_switch_msg (bool ready)
void update_extruder_separator_icon (bool show, bool ready)

Public Attributes

Plater * plater
wxPanel * scrolled = nullptr
PlaterPresetComboBox * combo_sla_print = nullptr
PlaterPresetComboBox * combo_sla_material = nullptr
wxSizer * vsizer_printer = nullptr
wxBoxSizer * extruder_dual_sizer = nullptr
wxBoxSizer * extruder_single_sizer = nullptr
StaticBox * panel_printer_preset = nullptr
wxStaticBitmap * image_printer = nullptr
PlaterPresetComboBox * combo_printer = nullptr
ScalableButton * btn_edit_printer = nullptr
ScalableButton * btn_connect_printer = nullptr
StaticBox * panel_nozzle_dia = nullptr
Label * label_nozzle_title = nullptr
ComboBox * combo_nozzle_dia = nullptr
Label * label_nozzle_type = nullptr
StaticBox * panel_printer_bed = nullptr
wxStaticBitmap * image_printer_bed = nullptr
ComboBox * combo_printer_bed = nullptr
ImageDPIFrame * big_bed_image_popup = nullptr
std::shared_ptr< int > counter_sync_printer = std::make_shared<int>()
wxTimer * timer_sync_printer = new wxTimer()
ExtruderGroup * left_extruder = nullptr
ExtruderGroup * right_extruder = nullptr
ExtruderGroup * single_extruder = nullptr
PlaterPresetComboBox * combo_print = nullptr
std::vector< PlaterPresetComboBox * > combos_filament
int editing_filament = -1
wxBoxSizer * sizer_filaments = nullptr
wxPanel * m_panel_print_title
wxStaticText * m_staticText_print_title
wxPanel * m_panel_print_content
wxBoxSizer * sizer_params
wxStaticLine * m_staticline1
StaticBox * m_panel_filament_title
wxPanel * m_panel_filament_separator
wxStaticText * m_staticText_filament_settings
wxStaticText * m_staticText_filament_count
ScalableButton * m_bpButton_add_filament
ScalableButton * m_bpButton_del_filament
ScalableButton * m_bpButton_ams_filament
ScalableButton * m_bpButton_set_filament
int m_menu_filament_id = -1
wxPanel * m_filament_area_wrapper
wxScrolledWindow * m_panel_filament_content
wxPanel * m_btn_add_mixed_filament {nullptr}
wxPanel * m_panel_mixed_title {nullptr}
StaticLine * m_text_mixed_title {nullptr}
ScalableButton * m_btn_mixed_add {nullptr}
ScalableButton * m_btn_mixed_del {nullptr}
ScalableButton * m_btn_mixed_del_all {nullptr}
wxScrolledWindow * m_mixed_scroll_area {nullptr}
wxPanel * m_panel_mixed_content {nullptr}
wxBoxSizer * m_sizer_mixed_filaments {nullptr}
wxPanel * m_panel_mixed_warning {nullptr}
wxStaticText * m_text_mixed_warning {nullptr}
bool m_mixed_filament_broken {false}
wxScrolledWindow * m_scrolledWindow_filament_content
wxStaticLine * m_staticline2
wxPanel * m_panel_project_title
ScalableButton * m_filament_icon = nullptr
Button * m_purge_mode_btn = nullptr
Button * m_flushing_volume_btn = nullptr
TextInput * m_search_item = nullptr
StaticBox * m_search_bar = nullptr
Search::SearchObjectDialog * dia = nullptr
StaticBox * m_panel_printer_title = nullptr
wxPanel * m_panel_printer_separator = nullptr
ScalableButton * m_printer_icon = nullptr
ScalableButton * m_printer_connect = nullptr
ScalableButton * m_printer_bbl_sync = nullptr
ScalableButton * m_printer_setting = nullptr
wxStaticText * m_text_printer_settings = nullptr
wxPanel * m_panel_printer_content = nullptr
wxStaticBitmap * extruder_separator_icon = nullptr
ObjectList * m_object_list { nullptr }
ObjectSettings * object_settings { nullptr }
ObjectLayers * object_layers { nullptr }
wxButton * btn_export_gcode
wxButton * btn_reslice
ScalableButton * btn_send_gcode
ScalableButton * btn_export_gcode_removable
bool is_switching_diameter {false}
Search::OptionsSearcher searcher
std::string ams_list_device
bool fila_switch_warning_shown = false
std::string last_sync_dev_id

Detailed Description

Constructor & Destructor Documentation

◆ priv()

Slic3r::GUI::Sidebar::priv::priv ( Plater * plater)
inline
994: plater(plater) {}
Plater * plater
Definition Plater.cpp:870

References plater.

◆ ~priv()

Slic3r::GUI::Sidebar::priv::~priv ( )
1161{
1162 // BBS
1163 //delete object_manipulation;
1164 delete object_settings;
1165 // BBS
1166#if 0
1167 delete frequently_changed_parameters;
1168#endif
1169}
ObjectSettings * object_settings
Definition Plater.cpp:981

References object_settings.

Member Function Documentation

◆ can_search()

void Slic3r::GUI::Sidebar::priv::can_search ( )
1198{
1199 if (m_search_bar->IsShown()) {
1200 m_search_item->SetFocus();
1201 }
1202}
StaticBox * m_search_bar
Definition Plater.cpp:964
TextInput * m_search_item
Definition Plater.cpp:963

References m_search_bar, and m_search_item.

◆ flush_printer_sync()

void Slic3r::GUI::Sidebar::priv::flush_printer_sync ( bool restart = false)
1149{
1150 if (restart) {
1152 timer_sync_printer->Start(500);
1153 }
1154 //btn_sync_printer->SetBackgroundColorNormal((*counter_sync_printer & 1) ? "#F8F8F8" :"#009688");
1155 m_printer_bbl_sync->SetBitmap_((*counter_sync_printer & 1) ? "printer_sync_not" : "printer_sync_ok");
1156 if (--*counter_sync_printer <= 0)
1157 timer_sync_printer->Stop();
1158}
std::shared_ptr< int > counter_sync_printer
Definition Plater.cpp:902
wxTimer * timer_sync_printer
Definition Plater.cpp:903
ScalableButton * m_printer_bbl_sync
Definition Plater.cpp:972

References counter_sync_printer, m_printer_bbl_sync, and timer_sync_printer.

◆ FromDIP()

int Slic3r::GUI::Sidebar::priv::FromDIP ( int n)
inline
909{ return plater->FromDIP(n); }

References plater.

Referenced by layout_printer(), and update_extruder_separator_icon().

Here is the caller graph for this function:

◆ get_nozzle_options()

std::optional< NozzleOption > Slic3r::GUI::Sidebar::priv::get_nozzle_options ( MachineObject * obj,
int extruder_count,
bool support_multi_nozzle,
bool is_manual )
2128{
2129 if (extruder_count < 2 || !support_multi_nozzle) {
2130 return std::nullopt;
2131 }
2132 if (!obj || !obj->GetNozzleSystem()) return std::nullopt;
2133 auto nozzle_system = obj->GetNozzleSystem();
2134
2135 PresetBundle *preset_bundle = wxGetApp().preset_bundle;
2136 if (!preset_bundle) return std::nullopt;
2137
2138 std::string curr_dev_id = obj->get_dev_id();
2139 std::map<int, std::vector<DevNozzle>> curr_nozzle_cfg;
2140
2141 for (const auto& ext_nozzle : nozzle_system->GetExtNozzles()) {
2142 int extruder_id = ext_nozzle.first;
2143 curr_nozzle_cfg[extruder_id].emplace_back(ext_nozzle.second);
2144 }
2145
2146 for (const auto& rack_nozzle : nozzle_system->GetRackNozzles()) {
2147 curr_nozzle_cfg[MAIN_EXTRUDER_ID].emplace_back(rack_nozzle.second);
2148 }
2149
2150 AppConfig *app_config = wxGetApp().app_config;
2151 std::string saved_dev_id = app_config->get("sync_extruder", "dev_id");
2152 std::string saved_nozzle_config_str = app_config->get("sync_extruder", "nozzle_config");
2153 std::string saved_nozzle_option_str = app_config->get("sync_extruder", "nozzle_option");
2154 std::optional<NozzleOption> nozzle_option;
2155
2156 if (is_manual) {
2157 nozzle_option = tryPopUpMultiNozzleDialog(obj);
2158 } else {
2159 bool can_reuse_saved_option = false;
2160 if (!saved_dev_id.empty() && !saved_nozzle_config_str.empty() && !saved_nozzle_option_str.empty() && saved_dev_id == curr_dev_id) {
2161 auto saved_nozzle_config = deserialize_nozzle_config(saved_nozzle_config_str);
2162 if (is_same_nozzle_config(saved_nozzle_config, curr_nozzle_cfg)) {
2163 nozzle_option = deserialize_nozzle_option(saved_nozzle_option_str);
2164 can_reuse_saved_option = nozzle_option.has_value();
2165 }
2166 if (can_reuse_saved_option) {
2167 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Reusing saved nozzle option for dev_id: " << curr_dev_id;
2168
2169 auto &project_config = preset_bundle->project_config;
2170 ConfigOptionEnumsGeneric *nozzle_volume_type_opt = project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
2171
2172 // Write to preset bundle config
2173 for (int extruder_id = 0; extruder_id < extruder_count; ++extruder_id) {
2174 NozzleVolumeType volume_type;
2175 int nozzle_count;
2176 bool clear_all = true;
2177
2178 if (!nozzle_option->extruder_nozzle_stats.count(extruder_id)) {
2179 nozzle_count = 0;
2180 // Reset the concrete volume types (Standard/High Flow); Hybrid is not a physical
2181 // nozzle type and never appears in the stats. TPU High Flow is a concrete variant
2182 // shipped on 0.4/0.6 nozzles, so reset it too, but only there (mirrors the
2183 // High-Flow-skip-for-0.2 guard).
2184 std::vector<NozzleVolumeType> reset_types{nvtStandard, nvtHighFlow};
2185 if (extruder_supports_tpu_high_flow(preset_bundle, extruder_id))
2186 reset_types.push_back(nvtTPUHighFlow);
2187 for (NozzleVolumeType vt : reset_types) {
2188 volume_type = vt;
2189 setExtruderNozzleCount(preset_bundle, extruder_id, volume_type, nozzle_count, clear_all);
2190 clear_all = false;
2191 }
2192 } else {
2193 for (auto &stat : nozzle_option->extruder_nozzle_stats[extruder_id]) {
2194 volume_type = stat.first;
2195 nozzle_count = stat.second;
2196 setExtruderNozzleCount(preset_bundle, extruder_id, volume_type, nozzle_count, clear_all);
2197 clear_all = false;
2198 }
2199 }
2200 }
2201 // The stats now hold the device's per-type breakdown: protect it from being collapsed by
2202 // a manual flow switch, and refresh the sidebar badges.
2204 if (nozzle_volume_type_opt) {
2205 for (int extruder_id = 0; extruder_id < extruder_count && extruder_id < (int) nozzle_volume_type_opt->values.size(); ++extruder_id)
2206 updateNozzleCountDisplay(preset_bundle, extruder_id, NozzleVolumeType(nozzle_volume_type_opt->values[extruder_id]));
2207 }
2208 }
2209 }
2210
2211 if (!can_reuse_saved_option) {
2212 nozzle_option = tryPopUpMultiNozzleDialog(obj);
2213 }
2214 }
2215 if (nozzle_option) {
2216 std::string current_nozzle_config = serialize_nozzle_config(curr_nozzle_cfg);
2217 std::string current_nozzle_option = serialize_nozzle_option(*nozzle_option);
2218 if (app_config->has_section("sync_extruder")) {
2219 app_config->set("sync_extruder", "dev_id", curr_dev_id);
2220 app_config->set("sync_extruder", "nozzle_config", current_nozzle_config);
2221 app_config->set("sync_extruder", "nozzle_option", current_nozzle_option);
2222 } else {
2223 std::map<std::string, std::string> data;
2224 data["dev_id"] = curr_dev_id;
2225 data["nozzle_config"] = current_nozzle_config;
2226 data["nozzle_option"] = current_nozzle_option;
2227 app_config->set_section("sync_extruder", data);
2228 }
2229 }
2230
2231 return nozzle_option;
2232}
#define MAIN_EXTRUDER_ID
Definition DevDefs.h:101
static std::map< int, std::vector< DevNozzle > > deserialize_nozzle_config(const std::string &config_str)
Definition Plater.cpp:1984
static std::string serialize_nozzle_config(const std::map< int, std::vector< DevNozzle > > &nozzle_cfg_map)
Definition Plater.cpp:1951
void updateNozzleCountDisplay(PresetBundle *preset_bundle, int extruder_id, NozzleVolumeType volume_type)
Definition MultiNozzleSync.cpp:263
bool extruder_supports_tpu_high_flow(PresetBundle *preset_bundle, int extruder_id)
Definition MultiNozzleSync.cpp:254
void setNozzleStatsFromMachine(bool from_machine)
Definition MultiNozzleSync.cpp:220
void setExtruderNozzleCount(PresetBundle *preset_bundle, int extruder_id, NozzleVolumeType volume_type, int nozzle_count, bool clear_all)
Definition MultiNozzleSync.cpp:222
std::optional< NozzleOption > tryPopUpMultiNozzleDialog(MachineObject *obj)
Definition MultiNozzleSync.cpp:1278
static std::string serialize_nozzle_option(const NozzleOption &option)
Definition Plater.cpp:2065
static std::optional< NozzleOption > deserialize_nozzle_option(const std::string &option_str)
Definition Plater.cpp:2085
static bool is_same_nozzle_config(const std::map< int, std::vector< DevNozzle > > &config1, const std::map< int, std::vector< DevNozzle > > &config2)
Definition Plater.cpp:2028
NozzleVolumeType
Definition PrintConfig.hpp:618
@ nvtHighFlow
Definition PrintConfig.hpp:620
@ nvtTPUHighFlow
Definition PrintConfig.hpp:624
@ nvtStandard
Definition PrintConfig.hpp:619
ConfigOptionEnumsGenericTempl< false > ConfigOptionEnumsGeneric
Definition Config.hpp:2311

References Slic3r::GUI::deserialize_nozzle_config(), Slic3r::GUI::deserialize_nozzle_option(), Slic3r::GUI::extruder_supports_tpu_high_flow(), Slic3r::AppConfig::get(), Slic3r::MachineObject::get_dev_id(), Slic3r::MachineObject::GetNozzleSystem(), Slic3r::AppConfig::has_section(), Slic3r::GUI::is_same_nozzle_config(), MAIN_EXTRUDER_ID, Slic3r::nvtHighFlow, Slic3r::nvtStandard, Slic3r::nvtTPUHighFlow, Slic3r::PresetBundle::project_config, Slic3r::GUI::serialize_nozzle_config(), Slic3r::GUI::serialize_nozzle_option(), Slic3r::AppConfig::set(), Slic3r::AppConfig::set_section(), Slic3r::GUI::setExtruderNozzleCount(), Slic3r::GUI::setNozzleStatsFromMachine(), Slic3r::GUI::tryPopUpMultiNozzleDialog(), Slic3r::GUI::updateNozzleCountDisplay(), and Slic3r::ConfigOptionVector< int >::values.

Referenced by sync_extruder_list().

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

◆ is_fila_switch_ready()

bool Slic3r::GUI::Sidebar::priv::is_fila_switch_ready ( )
2235{
2236 if (!wxGetApp().plater()->is_same_printer_for_connected_and_selected(false))
2237 return false;
2238 auto device_manager = wxGetApp().getDeviceManager();
2239 if (device_manager == nullptr)
2240 return false;
2241 auto obj = device_manager->get_selected_machine();
2242 if (obj == nullptr || !obj->is_online())
2243 return false;
2244 auto fila_switch = obj->GetFilaSwitch();
2245 if (fila_switch == nullptr)
2246 return false;
2247 return fila_switch->IsInstalled() && fila_switch->IsReady();
2248}

References Slic3r::GUI::plater().

Referenced by layout_printer().

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

◆ jump_to_object()

void Slic3r::GUI::Sidebar::priv::jump_to_object ( ObjectDataViewModelNode * item)
1193{
1194 m_object_list->selected_object(item);
1195}
ObjectList * m_object_list
Definition Plater.cpp:980

References m_object_list.

◆ layout_printer()

void Slic3r::GUI::Sidebar::priv::layout_printer ( bool isBBL,
bool isDual )
1032{
1033 // Printer - preset
1034 if (auto sizer = static_cast<wxBoxSizer *>(panel_printer_preset->GetSizer());
1035 sizer == nullptr /*|| isBBL != (sizer->GetOrientation() == wxVERTICAL)*/) {
1036
1037 //if (isBBL) {
1038 wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL);
1039 hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10));
1040 hsizer->Add(combo_printer, 1, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(2)); // 1 already triggers wxEXPAND
1041 hsizer->AddSpacer(FromDIP(2));
1042 hsizer->Add(btn_edit_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing()));
1043 //hsizer->Add(btn_connect_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing()));
1044 panel_printer_preset->SetSizer(hsizer);
1045 //} else {
1046 // wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL);
1047 // hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_CENTER, FromDIP(4));
1048 // hsizer->Add(combo_printer, 1, wxALIGN_CENTRE | wxLEFT | wxRIGHT, FromDIP(6));
1049 // hsizer->Add(hsizer_printer_btn, 0, wxALIGN_TOP | wxTOP | wxRIGHT, FromDIP(4));
1050 // hsizer->AddSpacer(FromDIP(10));
1051 // panel_printer_preset->SetSizer(hsizer);
1052 //}
1053 }
1054
1055 if (vsizer_printer->GetItemCount() == 0) {
1056 wxBoxSizer *hsizer_printer = new wxBoxSizer(wxHORIZONTAL);
1057 hsizer_printer->Add(panel_printer_preset, 1, wxEXPAND, 0);
1058 hsizer_printer->Add(panel_nozzle_dia , 0, wxLEFT, FromDIP(4));
1059 hsizer_printer->Add(panel_printer_bed, 0, wxLEFT, FromDIP(4));
1060 //hsizer_printer->Add(btn_sync_printer , 0, wxLEFT, FromDIP(4));
1062 vsizer_printer->Add(hsizer_printer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin()));
1063
1064 // Printer - extruder
1065
1066 // double
1067 extruder_dual_sizer = new wxBoxSizer(wxHORIZONTAL);
1068 extruder_dual_sizer->Add(left_extruder, 1, wxEXPAND, 0);
1069 extruder_dual_sizer->AddSpacer(FromDIP(4));
1070 extruder_dual_sizer->Add(right_extruder, 1, wxEXPAND, 0);
1071
1072 // Filament Track Switch status icon, floated over the extruder AMS area (positioned in
1073 // update_extruder_separator_icon). Created hidden; a click re-shows the ready/not-ready tip.
1075 auto bitmap = ScalableBitmap(m_panel_printer_content, "fila_switch", 10);
1076 extruder_separator_icon = new wxStaticBitmap(m_panel_printer_content, wxID_ANY, bitmap.bmp(), wxDefaultPosition, bitmap.GetBmpSize());
1078 extruder_separator_icon->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) {
1080 evt.Skip();
1081 });
1082 }
1083
1084 // single
1085 extruder_single_sizer = new wxBoxSizer(wxHORIZONTAL);
1086 extruder_single_sizer->Add(single_extruder, 1, wxEXPAND, 0);
1087
1088 wxBoxSizer * extruder_sizer = new wxBoxSizer(wxVERTICAL);
1089 extruder_sizer->Add(extruder_dual_sizer , 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin()));
1090 extruder_sizer->Add(extruder_single_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin()));
1091
1092 vsizer_printer->Add(extruder_sizer, 1, wxEXPAND | wxTOP, FromDIP(2));
1093
1095 }
1096
1097 //btn_connect_printer->Show(!isBBL);
1098 m_printer_connect->Show(!isBBL);
1099 //btn_sync_printer->Show(isBBL);
1100 m_printer_bbl_sync->Show(isBBL);
1101
1102 // ORCA show plate type combo box only when its supported
1103 PresetBundle &preset_bundle = *wxGetApp().preset_bundle;
1104 const auto& cfg = preset_bundle.printers.get_edited_preset().config;
1105 // Orca: we use preset_bundle.is_bbl_vendor() instead of isBBL to determine if the plate type combo box should be shown
1106 // ref: https://github.com/OrcaSlicer/OrcaSlicer/pull/11610#discussion_r2607411847
1107 panel_printer_bed->Show(preset_bundle.is_bbl_vendor() || cfg.opt_bool("support_multi_bed_types"));
1108
1109 extruder_dual_sizer->Show(isDual);
1110
1111 // NEEDFIX requires AMS check or any type of ???
1112 // Single nozzle & non ams
1113 if (!isDual) {
1114 // Orca: for printer without flow variant, we do not show flow combo
1115 int extruder_count = 0;
1116 const bool has_flow_variant = cfg.support_different_extruders(extruder_count);
1117
1118 // ORCA: a non-Bambu printer with several extruders lists one nozzle row per tool; Bambu's own
1119 // multi-extruder printers keep the left/right pair above.
1120 const bool multi_extruder_rows = !preset_bundle.is_bbl_vendor() && extruder_count > 1;
1121 const auto &diameters = cfg.option<ConfigOptionFloats>("nozzle_diameter")->values;
1122 const bool mixed_diameters = std::any_of(diameters.begin(), diameters.end(), [&diameters](double value) {
1123 return get_diameter_string(value) != get_diameter_string(diameters.front());
1124 });
1125
1126 // The variant box switches the machine variant. The card below lists the nozzles when there
1127 // are flow variants to choose or extruders of different diameters; otherwise the box says it all.
1128 panel_nozzle_dia->Show(true);
1129 extruder_single_sizer->Show(has_flow_variant || (multi_extruder_rows && mixed_diameters));
1130 single_extruder->SetNozzleRowCount(multi_extruder_rows ? size_t(extruder_count) : 1);
1131 } else {
1132 panel_nozzle_dia->Show(false);
1133 extruder_single_sizer->Show(false);
1134 single_extruder->SetNozzleRowCount(1);
1135 }
1136
1137 // ORCA ensure printer section is visible after changing printer from printer selection dialog
1138 // this will inform user on printer change when printer section is collapsed
1140 bool isShown = m_panel_printer_content->IsShown();
1141 if(!isShown && m_text_printer_settings){
1142 m_text_printer_settings->SetLabel(_L("Printer")); // ensure title returns to default state
1144 }
1145 }
1146}
#define _L(s)
Definition OBJ.cpp:34
static int IconSpacing()
Definition Plater.hpp:151
static int ContentMargin()
Definition Plater.hpp:149
static int ContentMarginV()
Definition Plater.hpp:150
wxMouseEvent
Definition CameraPopup.cpp:47
ConfigOptionFloatsTempl< false > ConfigOptionFloats
Definition Config.hpp:1015
StaticBox * panel_printer_bed
Definition Plater.cpp:895
PlaterPresetComboBox * combo_printer
Definition Plater.cpp:883
void show_fila_switch_msg(bool ready)
Definition Plater.cpp:2250
wxPanel * m_panel_printer_content
Definition Plater.cpp:975
bool is_fila_switch_ready()
Definition Plater.cpp:2234
StaticBox * panel_nozzle_dia
Definition Plater.cpp:889
ExtruderGroup * right_extruder
Definition Plater.cpp:906
wxBoxSizer * extruder_dual_sizer
Definition Plater.cpp:878
int FromDIP(int n)
Definition Plater.cpp:909
StaticBox * panel_printer_preset
Definition Plater.cpp:881
ScalableButton * m_printer_connect
Definition Plater.cpp:971
ScalableButton * btn_edit_printer
Definition Plater.cpp:884
ExtruderGroup * single_extruder
Definition Plater.cpp:907
wxStaticBitmap * image_printer
Definition Plater.cpp:882
wxStaticBitmap * extruder_separator_icon
Definition Plater.cpp:978
wxBoxSizer * extruder_single_sizer
Definition Plater.cpp:879
wxSizer * vsizer_printer
Definition Plater.cpp:877
ExtruderGroup * left_extruder
Definition Plater.cpp:905
wxStaticText * m_text_printer_settings
Definition Plater.cpp:974

References _L, btn_edit_printer, combo_printer, Slic3r::Preset::config, Slic3r::GUI::SidebarProps::ContentMargin(), Slic3r::GUI::SidebarProps::ContentMarginV(), extruder_dual_sizer, extruder_separator_icon, extruder_single_sizer, FromDIP(), Slic3r::PresetCollection::get_edited_preset(), Slic3r::GUI::SidebarProps::IconSpacing(), image_printer, Slic3r::PresetBundle::is_bbl_vendor(), is_fila_switch_ready(), left_extruder, m_panel_printer_content, m_printer_bbl_sync, m_printer_connect, m_text_printer_settings, panel_nozzle_dia, panel_printer_bed, panel_printer_preset, Slic3r::PresetBundle::printers, right_extruder, show_fila_switch_msg(), single_extruder, vsizer_printer, and Slic3r::GUI::wxMouseEvent.

Here is the call graph for this function:

◆ show_fila_switch_msg()

void Slic3r::GUI::Sidebar::priv::show_fila_switch_msg ( bool ready)
2251{
2252 wxString msg = ready ? _L("Filament switcher detected. All AMS filaments are now available for both extruders. "
2253 "The slicer will auto-assign for optimal printing.") :
2254 _L("A filament switcher is detected but not calibrated and thus currently unavailable. "
2255 "Please calibrate it on the printer and synchronize before use.");
2256
2257 long style = ready ? (wxICON_INFORMATION | wxOK) : (wxICON_WARNING | wxOK);
2258 // Orca: drop the vendor "Learn more" tracking link; there is no Orca help page for the switch yet.
2259 MessageDialog dlg(static_cast<wxWindow *>(wxGetApp().mainframe), msg, _L("Tips"), style);
2260 dlg.CenterOnParent();
2261 dlg.ShowModal();
2262}
#define style
Definition WipeTowerDialog.cpp:101

References _L, Slic3r::GUI::DPIAware< P >::ShowModal(), and style.

Referenced by layout_printer(), and show_filament_switcher_dialog().

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

◆ show_filament_switcher_dialog()

void Slic3r::GUI::Sidebar::priv::show_filament_switcher_dialog ( bool is_ready,
bool is_manual )
2265{
2266 if (is_ready) {
2267 // Show the "switch is ready" tip only once, ever.
2268 if (wxGetApp().app_config->get("show_fila_switch_tips") == "true") {
2269 wxGetApp().app_config->set("show_fila_switch_tips", "false");
2271 }
2272 } else {
2273 // A manual sync always warns; an automatic update warns once per session.
2274 if (is_manual || !fila_switch_warning_shown) {
2276 show_fila_switch_msg(false);
2277 }
2278 }
2279}
bool fila_switch_warning_shown
Definition Plater.cpp:1017

References fila_switch_warning_shown, and show_fila_switch_msg().

Referenced by sync_extruder_list(), and update_sync_status().

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

◆ show_preset_comboboxes()

void Slic3r::GUI::Sidebar::priv::show_preset_comboboxes ( )
1172{
1173 const bool showSLA = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA;
1174
1175//BBS
1176#if 0
1177 for (size_t i = 0; i < 4; ++i)
1178 sizer_presets->Show(i, !showSLA);
1179
1180 for (size_t i = 4; i < 8; ++i) {
1181 if (sizer_presets->IsShown(i) != showSLA)
1182 sizer_presets->Show(i, showSLA);
1183 }
1184
1185 frequently_changed_parameters->Show(!showSLA);
1186#endif
1187
1188 scrolled->GetParent()->Layout();
1189 scrolled->Refresh();
1190}
@ ptSLA
Definition Config.hpp:233
wxPanel * scrolled
Definition Plater.cpp:872

References Slic3r::ptSLA, and scrolled.

◆ switch_diameter()

bool Slic3r::GUI::Sidebar::priv::switch_diameter ( bool single)
1873{
1874 wxString diameter;
1875 if (single) {
1876 diameter = single_extruder->combo_diameter->GetValue();
1877 } else {
1878 auto diameter_left = left_extruder->combo_diameter->GetValue();
1879 auto diameter_right = right_extruder->combo_diameter->GetValue();
1880 if (diameter_left != diameter_right) {
1881 double left_value = 0.0, right_value = 0.0;
1882 if (!diameter_left.ToCDouble(&left_value) || !diameter_right.ToCDouble(&right_value))
1883 return false;
1884
1885 Tab* printer_tab = wxGetApp().get_tab(Preset::TYPE_PRINTER);
1886 DynamicPrintConfig new_conf = wxGetApp().preset_bundle->printers.get_edited_preset().config;
1887 auto* nozzle_diameter_opt = new_conf.option<ConfigOptionFloats>("nozzle_diameter");
1888 if (printer_tab == nullptr || nozzle_diameter_opt == nullptr || nozzle_diameter_opt->size() < 2)
1889 return false;
1890
1891 nozzle_diameter_opt->values[0] = left_value;
1892 nozzle_diameter_opt->values[1] = right_value;
1893 printer_tab->load_config(new_conf);
1894 return true;
1895 }
1896 diameter = diameter_left;
1897 }
1898
1899 return switch_diameter_to(diameter);
1900}
std::vector< double > values
Definition Config.hpp:418
@ TYPE_PRINTER
Definition Preset.hpp:250
bool switch_diameter_to(const wxString &diameter)
Definition Plater.cpp:1902

References left_extruder, Slic3r::GUI::Tab::load_config(), Slic3r::ConfigBase::option(), right_extruder, single_extruder, switch_diameter_to(), and Slic3r::Preset::TYPE_PRINTER.

Referenced by sync_extruder_list().

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

◆ switch_diameter_to()

bool Slic3r::GUI::Sidebar::priv::switch_diameter_to ( const wxString & diameter)
1903{
1904 // ORCA: Check if the selected diameter matches the current nozzle diameter in the config
1905 Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
1906 auto* nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(printer_preset.config.option("nozzle_diameter"));
1907 // ORCA: the left/right combos of a BBL multi-nozzle printer set the nozzles apart without leaving
1908 // the preset (see switch_diameter), so there the preset is only kept while every nozzle matches.
1909 const bool nozzles_apart = nozzle_diameter && nozzle_diameter->size() > 1 && wxGetApp().preset_bundle->is_bbl_vendor() &&
1910 std::any_of(nozzle_diameter->values.begin(), nozzle_diameter->values.end(),
1911 [&diameter](double value) { return get_diameter_string(value) != diameter.ToStdString(); });
1912 // The combo lists printer variants, and the variant of a mixed-nozzle machine ("0.4+0.6") is no
1913 // single extruder's diameter, so the preset's own variant answers first.
1914 const std::string &printer_variant = printer_preset.config.opt_string("printer_variant");
1915 if (printer_variant == diameter.ToStdString() && !nozzles_apart) {
1916 return true;
1917 }
1918 // A named variant ("0.4 High Flow") shares its diameter with the standard profile, which selecting
1919 // the plain diameter switches back to, so only a preset naming no variant is kept by its diameter.
1920 if (printer_variant.empty() && nozzle_diameter && nozzle_diameter->size() > 0) {
1921 auto current_nozzle_dia = get_diameter_string(nozzle_diameter->values[0]);
1922 // If the selected diameter is the same as current nozzle, don't switch profiles
1923 if (current_nozzle_dia == diameter.ToStdString()) {
1924 return true;
1925 }
1926 }
1927
1928 auto preset = wxGetApp().preset_bundle->get_similar_printer_preset({}, diameter.ToStdString());
1929 if (preset == nullptr) {
1930 // ORCA add a text. this appears when user tries to change nozzle value but config doesnt have a inherited or compatible preset
1931 MessageDialog dlg(this->plater, _L("Configuration incompatible"), _L("Warning"), wxICON_WARNING | wxOK);
1932 dlg.ShowModal();
1933 return false;
1934 }
1935 preset->is_visible = true; // force visible
1936 return wxGetApp().get_tab(Preset::TYPE_PRINTER)->select_preset(preset->name);
1937}
size_t size() const override
Definition Config.hpp:722
static std::string get_diameter_string(float diameter)
Definition Plater.cpp:366
zaa_minimize_perimeter_height nozzle_diameter((ConfigOptionBool, reduce_infill_retraction))((ConfigOptionBool
@ Preset
Definition calib.hpp:39

References _L, Slic3r::Preset::config, Slic3r::GUI::get_diameter_string(), Slic3r::nozzle_diameter(), Slic3r::DynamicConfig::opt_string(), Slic3r::ConfigBase::option(), plater, Slic3r::GUI::DPIAware< P >::ShowModal(), and Slic3r::Preset::TYPE_PRINTER.

Referenced by switch_diameter().

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

◆ sync_extruder_list()

bool Slic3r::GUI::Sidebar::priv::sync_extruder_list ( bool & only_external_material,
bool is_manual = false )
2334{
2335 MachineObject *obj = wxGetApp().getDeviceManager()->get_selected_machine();
2336 auto printer_name = plater->get_selected_printer_name_in_combox();
2337 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " begin sync_extruder_list";
2338 if (obj == nullptr) {
2339 plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::NOT_CONNECTED, _L("Sync printer information"));
2340 return false;
2341 }
2342 //if (obj->get_extder_system()->extders.size() != 2) {//wxString(obj->get_preset_printer_model_name(machine_print_name))
2343 // plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::INCONSISTENT, _L("Sync printer information"));
2344 // return false;
2345 //}
2346
2347 if (!plater->check_printer_initialized(obj)) {
2348 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " check_printer_initialized fail";
2349 return false;
2350 }
2351
2352 std::string machine_print_name = obj->get_show_printer_type();
2353 PresetBundle *preset_bundle = wxGetApp().preset_bundle;
2354 std::string target_model_id = preset_bundle->printers.get_selected_preset().get_printer_type(preset_bundle);
2355 const bool optional_printer_model = DevPrinterConfigUtil::is_optional_printer_model_id(obj->printer_type);
2356 const bool optional_target_model = DevPrinterConfigUtil::is_optional_printer_model_id(target_model_id);
2357 Preset* machine_preset = optional_printer_model ? nullptr : get_printer_preset(obj);
2358 if (!optional_printer_model && !optional_target_model && !machine_preset) {
2359 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << "check error: machine_preset empty";
2360 return false;
2361 }
2362 if (!optional_printer_model && !optional_target_model && machine_print_name != target_model_id) {
2363 MessageDialog dlg(this->plater, _L("The currently selected machine preset is inconsistent with the connected printer type.\n"
2364 "Are you sure to continue syncing?"), _L("Sync printer information"), wxICON_WARNING | wxYES | wxNO);
2365 if (dlg.ShowModal() == wxID_NO) {
2366 return false;
2367 }
2368
2369 if (!this->plater)
2370 return false;
2371
2372 this->plater->update_objects_position_when_select_preset([machine_preset]() {
2373 Tab *printer_tab = GUI::wxGetApp().get_tab(Preset::Type::TYPE_PRINTER);
2374 printer_tab->select_preset(machine_preset->name);
2375 });
2376 }
2377 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " go on sync_extruder_list";
2378 const Preset &cur_preset = preset_bundle->printers.get_selected_preset();
2379 int extruder_nums = preset_bundle->get_printer_extruder_count();
2380 std::vector<int> extruder_map(extruder_nums);
2381 std::iota(extruder_map.begin(), extruder_map.end(), 0);
2382 const ConfigOptionInts *physical_extruder_map = cur_preset.config.option<ConfigOptionInts>("physical_extruder_map");
2383 if (physical_extruder_map != nullptr) {
2384 assert(physical_extruder_map->values.size() == extruder_nums);
2385 extruder_map = physical_extruder_map->values;
2386 }
2387 assert(obj->GetExtderSystem()->GetTotalExtderCount() == extruder_nums);
2388
2389 // Multi-nozzle: resolve the nozzle option (pops MultiNozzleSyncDialog when is_manual). No-op for every
2390 // existing printer — support_multi_nozzle is false unless some extruder_max_nozzle_count entry is a real
2391 // value > 1 (nil-guarded, matching the manual/ToolOrdering gates), which no shipping single-nozzle or
2392 // dual-extruder profile sets. When the machine is multi-nozzle but no option resolves (e.g. user cancelled),
2393 // abort the sync.
2394 const ConfigOptionIntsNullable *extruder_max_nozzle_count = cur_preset.config.option<ConfigOptionIntsNullable>("extruder_max_nozzle_count");
2395 bool support_multi_nozzle = extruder_max_nozzle_count != nullptr &&
2396 std::any_of(extruder_max_nozzle_count->values.begin(), extruder_max_nozzle_count->values.end(),
2397 [](int val) { return val > 1 && val != ConfigOptionIntsNullable::nil_value(); });
2398 auto nozzle_option = get_nozzle_options(obj, extruder_nums, support_multi_nozzle, is_manual);
2399 if (!nozzle_option && support_multi_nozzle)
2400 return false;
2401
2402 std::vector<float> nozzle_diameters;
2403 nozzle_diameters.resize(extruder_nums);
2404 std::vector<NozzleVolumeType> target_types(extruder_nums, NozzleVolumeType::nvtStandard);
2405 for (size_t index = 0; index < extruder_nums; ++index) {
2406 int extruder_id = extruder_map[index];
2407 nozzle_diameters[extruder_id] = nozzle_option ? atof(nozzle_option->diameter.c_str()) : obj->GetExtderSystem()->GetNozzleDiameter(index);
2409 std::optional<NozzleVolumeType> select_type;
2410 if (nozzle_option && nozzle_option->extruder_nozzle_stats.count(index)) {
2411 const auto &stats = nozzle_option->extruder_nozzle_stats[index];
2412 if (stats.size() > 1)
2413 // The extruder holds nozzles of several flow types: select the mixed-flow mode.
2414 select_type = NozzleVolumeType::nvtHybrid;
2415 else
2416 select_type = stats.begin()->first;
2417 }
2418 if (obj->is_nozzle_flow_type_supported()) {
2419 if (obj->GetExtderSystem()->GetNozzleFlowType(index) == NozzleFlowType::NONE_FLOWTYPE) {
2420 MessageDialog dlg(this->plater, _L("There are unset nozzle types. Please set the nozzle types of all extruders before synchronizing."),
2421 _L("Sync extruder infomation"), wxICON_WARNING | wxOK);
2422 dlg.ShowModal();
2423 continue;
2424 }
2425 // hack code, only use standard flow for 0.2
2426 if (std::fabs(nozzle_diameters[extruder_id] - 0.2) > EPSILON)
2427 // Map device flow->volume via the table, not `flowtype - 1`.
2428 // The arithmetic only aligns for S_FLOW/H_FLOW; U_FLOW(3)-1 would yield nvtHybrid(2), not nvtTPUHighFlow(3).
2429 target_type = DevNozzle::ToNozzleVolumeType(obj->GetExtderSystem()->GetNozzleFlowType(extruder_id));
2430 }
2431 if (select_type)
2432 target_type = *select_type;
2433 target_types[index] = target_type;
2434 }
2435
2436 int deputy_4 = 0, main_4 = 0, deputy_1 = 0, main_1 = 0;
2437 const bool switch_ready = is_fila_switch_ready();
2438 for (auto ams : obj->GetFilaSystem()->GetAmsList()) {
2439 for (int extruder_id : ams.second->GetBindedExtruderSet()) {
2440 // With the switch installed every AMS binds to both extruders; once it is ready, attribute
2441 // each to the extruder its input track feeds so the per-extruder counts stay correct. Without
2442 // a switch the binding set is the single extruder and the filter is skipped, matching the
2443 // pre-switch counts.
2444 if (switch_ready) {
2445 auto switcher_pos = ams.second->GetSwitcherPos();
2446 if (!switcher_pos)
2447 continue;
2448 int switcher_id = obj->is_main_extruder_on_left() ? (1 - static_cast<int>(switcher_pos.value()))
2449 : static_cast<int>(switcher_pos.value());
2450 if (extruder_id != switcher_id)
2451 continue;
2452 }
2453 const bool is_n3s = ams.second->GetAmsType() == DevAms::N3S;
2454 // Main (first) extruder is id 0, deputy is id 1.
2455 if (extruder_id == 0) {
2456 if (is_n3s) ++main_1; else ++main_4;
2457 } else if (extruder_id == 1) {
2458 if (is_n3s) ++deputy_1; else ++deputy_4;
2459 }
2460 }
2461 }
2462 only_external_material = !obj->GetFilaSystem()->HasAms();
2463 int main_index = obj->is_main_extruder_on_left() ? 0 : 1;
2464 int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0;
2465
2466 if (extruder_nums > 1) {
2467 int left_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[0]));
2468 int right_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[1]));
2469 assert(left_index != -1 && right_index != -1);
2470 left_extruder->combo_diameter->SetSelection(left_index);
2471 right_extruder->combo_diameter->SetSelection(right_index);
2472 is_switching_diameter = true;
2473 switch_diameter(false);
2474 is_switching_diameter = false;
2475 AMSCountPopupWindow::SetAMSCount(deputy_index, deputy_4, deputy_1);
2476 AMSCountPopupWindow::SetAMSCount(main_index, main_4, main_1);
2479 } else {
2480 int index = single_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[0]));
2481 assert(index != -1);
2482 single_extruder->combo_diameter->SetSelection(index);
2483 is_switching_diameter = true;
2484 switch_diameter(true);
2485 is_switching_diameter = false;
2486 }
2487
2488 // set nozzle volume type after switching prset, so this value can override the old value stored in conf
2489 auto printer_tab = dynamic_cast<TabPrinter *>(wxGetApp().get_tab(Preset::TYPE_PRINTER));
2490 for (size_t idx = 0; idx < target_types.size(); ++idx) {
2491 printer_tab->set_extruder_volume_type(idx, target_types[idx]);
2492 }
2493
2494 if (extruder_nums > 1) {
2495 auto fila_switch = obj->GetFilaSwitch();
2496 if (fila_switch->IsInstalled())
2497 show_filament_switcher_dialog(fila_switch->IsReady(), is_manual);
2498 else
2500 }
2501
2502 // Copy the live switch state into the project so slicing and the send dialog honor it. Both
2503 // resolve to false unless the switch is installed and calibrated, so nothing changes without one.
2504 auto &project_config = wxGetApp().preset_bundle->project_config;
2505 if (auto *dynamic_filament = project_config.opt<ConfigOptionBool>("enable_filament_dynamic_map"))
2506 dynamic_filament->value = is_fila_switch_ready();
2507 if (auto *has_switcher = project_config.opt<ConfigOptionBool>("has_filament_switcher"))
2508 has_switcher->value = is_fila_switch_ready();
2509
2510 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " finish sync_extruder_list";
2511 return true;
2512}
#define EPSILON
Definition ColorUtils.cpp:64
static constexpr AmsType N3S
Definition DevFilaSystem.h:147
static bool is_optional_printer_model_id(const std::string &model_id)
Definition DevConfigUtil.h:69
static void UpdateAMSCount(int index, ExtruderGroup *extruder)
Definition Plater.cpp:1514
static void SetAMSCount(int index, int ams4, int ams1)
Definition Plater.cpp:1486
@ NOT_CONNECTED
Definition Plater.hpp:690
Preset * get_printer_preset(const MachineObject *obj)
Definition Plater.cpp:19913
zaa_minimize_perimeter_height physical_extruder_map((ConfigOptionIntsNullable, nozzle_flush_dataset))((ConfigOptionFloatsNullable
ConfigOptionIntsTempl< true > ConfigOptionIntsNullable
Definition Config.hpp:1155
ConfigOptionIntsTempl< false > ConfigOptionInts
Definition Config.hpp:1154
zaa_minimize_perimeter_height extruder_max_nozzle_count((ConfigOptionBool, support_fast_purge_mode))((ConfigOptionStrings
static NozzleVolumeType ToNozzleVolumeType(const NozzleFlowType &type)
Definition DevNozzleSystem.cpp:52
bool switch_diameter(bool single)
Definition Plater.cpp:1872
std::optional< NozzleOption > get_nozzle_options(MachineObject *obj, int extruder_count, bool support_multi_nozzle, bool is_manual)
Definition Plater.cpp:2127
bool is_switching_diameter
Definition Plater.cpp:990
void show_filament_switcher_dialog(bool is_ready, bool is_manual)
Definition Plater.cpp:2264

References _L, Slic3r::Preset::config, EPSILON, Slic3r::extruder_max_nozzle_count(), fila_switch_warning_shown, Slic3r::GUI::get_diameter_string(), get_nozzle_options(), Slic3r::PresetBundle::get_printer_extruder_count(), Slic3r::GUI::get_printer_preset(), Slic3r::Preset::get_printer_type(), Slic3r::PresetCollection::get_selected_preset(), Slic3r::MachineObject::get_show_printer_type(), Slic3r::MachineObject::GetExtderSystem(), Slic3r::MachineObject::GetFilaSwitch(), Slic3r::MachineObject::GetFilaSystem(), Slic3r::DevExtderSystem::GetNozzleDiameter(), Slic3r::DevExtderSystem::GetNozzleFlowType(), Slic3r::DevExtderSystem::GetTotalExtderCount(), Slic3r::GUI::Sidebar::is_fila_switch_ready(), Slic3r::MachineObject::is_main_extruder_on_left(), Slic3r::MachineObject::is_nozzle_flow_type_supported(), Slic3r::DevPrinterConfigUtil::is_optional_printer_model_id(), is_switching_diameter, left_extruder, Slic3r::DevAms::N3S, Slic3r::Preset::name, Slic3r::NONE_FLOWTYPE, Slic3r::GUI::Plater::NOT_CONNECTED, Slic3r::nvtHybrid, Slic3r::nvtStandard, Slic3r::ConfigBase::option(), Slic3r::physical_extruder_map(), plater, Slic3r::MachineObject::printer_type, Slic3r::PresetBundle::printers, right_extruder, Slic3r::GUI::Tab::select_preset(), Slic3r::GUI::AMSCountPopupWindow::SetAMSCount(), show_filament_switcher_dialog(), Slic3r::GUI::DPIAware< P >::ShowModal(), single_extruder, switch_diameter(), Slic3r::DevNozzle::ToNozzleVolumeType(), Slic3r::Preset::TYPE_PRINTER, and Slic3r::GUI::AMSCountPopupWindow::UpdateAMSCount().

Here is the call graph for this function:

◆ update_extruder_separator_icon()

void Slic3r::GUI::Sidebar::priv::update_extruder_separator_icon ( bool show,
bool ready )
2282{
2284 return;
2285 static bool last_show = false;
2286 static bool last_ready = false;
2287 static bool first_call = true;
2288
2289 if (!first_call && last_show == show && last_ready == ready)
2290 return;
2291 first_call = false;
2292 last_show = show;
2293 last_ready = ready;
2294
2295 // Never overlay the icon when the connected printer is not the selected preset.
2296 if (!wxGetApp().plater()->is_same_printer_for_connected_and_selected(false)) {
2299 m_panel_printer_content->Refresh();
2300 return;
2301 }
2302
2303 if (show && left_extruder && left_extruder->hsizer_ams && left_extruder->sizer) {
2304 // Orca: center the icon over the seam between the two extruder cards, vertically aligned with
2305 // the AMS row. left_extruder and the icon share m_panel_printer_content as parent, so
2306 // left_extruder->GetPosition() and the icon position live in the same coordinate space.
2307 wxPoint left_box_pos = left_extruder->GetPosition();
2308 wxPoint ams_local_pos = left_extruder->hsizer_ams->GetPosition();
2309 wxSize left_size = left_extruder->sizer->GetSize();
2310 wxSize ams_size = left_extruder->hsizer_ams->GetSize();
2311 wxSize icon_size = extruder_separator_icon->GetSize();
2312 int ams_abs_y = left_box_pos.y + ams_local_pos.y + FromDIP(4);
2313 int center_x = left_size.GetWidth() + FromDIP(6);
2314 int center_y = ams_abs_y + (ams_size.GetHeight() - icon_size.GetHeight()) / 2;
2315 center_x -= icon_size.GetWidth() / 2;
2316 center_y -= icon_size.GetHeight() / 2;
2317 extruder_separator_icon->SetPosition(wxPoint(center_x, center_y));
2318
2319 auto normal_bitmap = ScalableBitmap(m_panel_printer_content, "fila_switch", 10);
2320 auto error_bitmap = ScalableBitmap(m_panel_printer_content, "fila_switch_error", 10);
2321 extruder_separator_icon->SetBitmap(ready ? normal_bitmap.bmp() : error_bitmap.bmp());
2322
2324 extruder_separator_icon->Raise();
2325 } else {
2327 }
2328
2330 m_panel_printer_content->Refresh();
2331}

References extruder_separator_icon, FromDIP(), left_extruder, m_panel_printer_content, and Slic3r::GUI::plater().

Referenced by update_sync_status().

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

◆ update_sync_status()

void Slic3r::GUI::Sidebar::priv::update_sync_status ( const MachineObject * obj)
2515{
2516 StateColor not_synced_colour(std::pair<wxColour, int>(wxColour("#009688"), StateColor::Normal));
2517 auto clear_all_sync_status = [this]() {
2518 panel_printer_preset->ShowBadge(false);
2519 panel_printer_bed->ShowBadge(false);
2520 panel_nozzle_dia->ShowBadge(false); // ORCA add support for nozzle sync
2521 left_extruder->ShowBadge(false);
2522 left_extruder->sync_ams(nullptr, {}, {});
2523 right_extruder->ShowBadge(false);
2524 right_extruder->sync_ams(nullptr, {}, {});
2525 single_extruder->ShowBadge(false);
2526 single_extruder->sync_ams(nullptr, {}, {});
2527 update_extruder_separator_icon(false, false);
2528 //btn_sync_printer->SetBorderColor(not_synced_colour);
2529 //btn_sync_printer->SetIcon("printer_sync");
2530 m_printer_bbl_sync->SetBitmap_("printer_sync_not");
2531 };
2532
2533 if (!obj || !obj->is_info_ready()) {
2534 clear_all_sync_status();
2535 return;
2536 }
2537
2538 // Orca: replaces BBS's reset_fila_switch hook on DeviceManager::OnSelectedMachineChanged (absent
2539 // in Orca). Selection/MQTT updates all funnel through here, so a change of the selected device id
2540 // resets the switcher icon and the once-per-session not-ready warning for the new printer.
2541 const std::string cur_dev_id = obj->get_dev_id();
2542 if (cur_dev_id != last_sync_dev_id) {
2543 last_sync_dev_id = cur_dev_id;
2544 update_extruder_separator_icon(false, false);
2546 }
2547
2548 PresetBundle *preset_bundle = wxGetApp().preset_bundle;
2549 if (!preset_bundle) {
2550 clear_all_sync_status();
2551 return;
2552 }
2553
2555 clear_all_sync_status();
2556 return;
2557 }
2558
2559 bool printer_synced = false;
2560 // 1. update printer status
2561 const Preset &cur_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
2562 if (preset_bundle && preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle) == obj->get_show_printer_type()) {
2563 panel_printer_preset->ShowBadge(true);
2564 printer_synced = true;
2565
2566 wxGetApp().plater()->sidebar().udpate_combos_filament_badge();
2567 } else {
2568 clear_all_sync_status();
2569
2570 wxGetApp().plater()->sidebar().clear_combos_filament_badge();
2571 return;
2572 }
2573
2574 struct ExtruderInfo
2575 {
2576 float diameter{0.4};
2577 //int nozzle_volue_type{0};
2578 int ams_4{0};
2579 int ams_1{0};
2580 std::vector<DevAms *> ams_v4;
2581 std::vector<DevAms *> ams_v1;
2582
2583 bool operator==(const ExtruderInfo &other) const
2584 {
2585 return abs(diameter - other.diameter) < EPSILON
2586 && /*nozzle_volue_type == other.nozzle_volue_type
2587 &&*/ ams_4 == other.ams_4
2588 && ams_1 == other.ams_1;
2589 }
2590 };
2591
2592 auto is_same_nozzle_info = [obj](const ExtruderInfo &left, const ExtruderInfo &right) {
2593 bool is_same_nozzle_type = true;
2594 if (obj->is_nozzle_flow_type_supported())
2595 is_same_nozzle_type = true;//left.nozzle_volue_type == right.nozzle_volue_type; // TODO: Orca hack
2596 return abs(left.diameter - right.diameter) < EPSILON && is_same_nozzle_type;
2597 };
2598
2599 // 2. update extruder status
2600 int extruder_nums = preset_bundle->get_printer_extruder_count();
2601 if (extruder_nums != obj->GetExtderSystem()->GetTotalExtderCount())
2602 return;
2603
2604 // Filament Track Switch: only ever surfaced on multi-extruder machines. When installed, tip/warn
2605 // and show the status icon (green ready / red not-calibrated); when absent the icon stays hidden.
2606 // Inert on any printer without a switch: GetFilaSwitch()->IsInstalled() is false.
2607 const bool fila_switch_flag = is_fila_switch_ready();
2608 if (extruder_nums > 1) {
2609 auto fila_switch = obj->GetFilaSwitch();
2610 if (fila_switch->IsInstalled()) {
2611 show_filament_switcher_dialog(fila_switch->IsReady(), false);
2612 update_extruder_separator_icon(true, fila_switch->IsReady());
2613 } else {
2614 update_extruder_separator_icon(false, false);
2616 }
2617 }
2618
2619 std::vector<ExtruderInfo> extruder_infos(extruder_nums);
2620 std::vector<int> nozzle_volume_types = wxGetApp().preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type")->values;
2621 //for (size_t i = 0; i < nozzle_volume_types.size(); ++i) {
2622 // extruder_infos[i].nozzle_volue_type = nozzle_volume_types[i];
2623 //}
2624
2625 std::vector<std::map<int, int>> extruder_ams_counts = wxGetApp().preset_bundle->extruder_ams_counts;
2626 if (extruder_ams_counts.size() >= extruder_nums) {
2627 for (size_t i = 0; i < extruder_nums; ++i) {
2628 for (auto iter = extruder_ams_counts[i].begin(); iter != extruder_ams_counts[i].end(); ++iter) {
2629 if (iter->first == 4)
2630 extruder_infos[i].ams_4 = iter->second;
2631 if (iter->first == 1)
2632 extruder_infos[i].ams_1 = iter->second;
2633 }
2634 }
2635 }
2636
2637 if (extruder_nums == 1) {
2638 double value = 0.0;
2639 single_extruder->diameter.ToDouble(&value);
2640 extruder_infos[0].diameter = float(value);
2641 }
2642 else if(extruder_nums == 2){
2643 double value = 0.0;
2644 left_extruder->diameter.ToDouble(&value);
2645 extruder_infos[0].diameter = float(value);
2646
2647 value = 0.0;
2648 right_extruder->diameter.ToDouble(&value);
2649 extruder_infos[1].diameter = float(value);
2650 }
2651
2652 std::vector<ExtruderInfo> machine_extruder_infos(obj->GetExtderSystem()->GetTotalExtderCount());
2653
2654 const auto& extruders = obj->GetExtderSystem()->GetExtruders();
2655 for (const DevExtder &extruder : extruders) {
2656 //machine_extruder_infos[extruder.GetExtId()].nozzle_volue_type = int(extruder.GetNozzleFlowType()) - 1;
2657 machine_extruder_infos[extruder.GetExtId()].diameter = extruder.GetNozzleDiameter();
2658 }
2659 for (auto &item : obj->GetFilaSystem()->GetAmsList()) {
2660 int extruder_id;
2661 // With the switch ready every AMS feeds both extruders, so attribute each to the extruder its
2662 // input track feeds. Without a switch the binding is a single extruder
2663 // (GetUniqueBindedExtruderId() == GetExtruderId()) and the switcher position is empty, so this
2664 // yields the same attribution as before.
2665 if (fila_switch_flag) {
2666 auto switcher_pos = item.second->GetSwitcherPos();
2667 if (!switcher_pos)
2668 continue;
2669 extruder_id = obj->is_main_extruder_on_left() ? (1 - static_cast<int>(switcher_pos.value()))
2670 : static_cast<int>(switcher_pos.value());
2671 } else {
2672 const auto &uniq_extruder_id = item.second->GetUniqueBindedExtruderId();
2673 if (!uniq_extruder_id)
2674 continue;
2675 extruder_id = uniq_extruder_id.value();
2676 }
2677
2678 if (extruder_id >= machine_extruder_infos.size())
2679 continue;
2680
2681 if (item.second->GetAmsType() == DevAms::N3S)
2682 { // N3S
2683 machine_extruder_infos[extruder_id].ams_1++;
2684 machine_extruder_infos[extruder_id].ams_v1.push_back(item.second);
2685 } else {
2686 machine_extruder_infos[extruder_id].ams_4++;
2687 machine_extruder_infos[extruder_id].ams_v4.push_back(item.second);
2688 }
2689 }
2690
2691 std::reverse(machine_extruder_infos.begin(), machine_extruder_infos.end());
2692
2693 std::vector<bool> extruder_synced(extruder_nums, false);
2694 if (extruder_nums == 1) {
2695 if (is_same_nozzle_info(extruder_infos[0], machine_extruder_infos[0])) {
2696 single_extruder->ShowBadge(true);
2697 panel_nozzle_dia->ShowBadge(true); // ORCA add support for nozzle sync
2698 single_extruder->sync_ams(obj, machine_extruder_infos[0].ams_v4, machine_extruder_infos[0].ams_v1);
2699 extruder_synced[0] = true;
2700 }
2701 else {
2702 single_extruder->ShowBadge(false);
2703 panel_nozzle_dia->ShowBadge(false); // ORCA add support for nozzle sync
2704 single_extruder->sync_ams(obj, {}, {});
2705 }
2706 }
2707 else if (extruder_nums == 2) {
2708 if (extruder_infos[0] == machine_extruder_infos[0]) {
2709 left_extruder->ShowBadge(true);
2710 left_extruder->sync_ams(obj, machine_extruder_infos[0].ams_v4, machine_extruder_infos[0].ams_v1);
2711 extruder_synced[0] = true;
2712 }
2713 else {
2714 left_extruder->ShowBadge(false);
2715 left_extruder->sync_ams(obj, {}, {});
2716 }
2717
2718 if (extruder_infos[1] == machine_extruder_infos[1]) {
2719 right_extruder->ShowBadge(true);
2720 right_extruder->sync_ams(obj, machine_extruder_infos[1].ams_v4, machine_extruder_infos[1].ams_v1);
2721 extruder_synced[1] = true;
2722 }
2723 else {
2724 right_extruder->ShowBadge(false);
2725 right_extruder->sync_ams(obj, {}, {});
2726 }
2727 }
2728
2729 StateColor synced_colour(std::pair<wxColour, int>(wxColour("#CECECE"), StateColor::Normal));
2730 bool all_extruder_synced = std::all_of(extruder_synced.begin(), extruder_synced.end(), [](bool value) { return value; });
2731 if (printer_synced && all_extruder_synced) {
2732 // btn_sync_printer->SetBorderColor(synced_colour);
2733 // btn_sync_printer->SetIcon("ams_nozzle_sync");
2734 m_printer_bbl_sync->SetBitmap_("printer_sync_ok");
2735 }
2736 else {
2737 // btn_sync_printer->SetBorderColor(not_synced_colour);
2738 // btn_sync_printer->SetIcon("printer_sync");
2739 m_printer_bbl_sync->SetBitmap_("printer_sync_not");
2740 }
2741
2742 // When the switch is ready every AMS filament is available to both extruders; refresh the
2743 // filament combos whenever the AMS list changes so both extruders pick up the full set.
2744 if (fila_switch_flag) {
2745 static std::map<int, DynamicPrintConfig> last_filament_ams_list;
2746 bool is_same_ams_list = last_filament_ams_list == wxGetApp().preset_bundle->filament_ams_list;
2747 if (!is_same_ams_list)
2748 last_filament_ams_list = wxGetApp().preset_bundle->filament_ams_list;
2749 const auto print_tech = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology();
2750 if (print_tech == ptFFF && !is_same_ams_list) {
2751 for (PlaterPresetComboBox *cb : combos_filament)
2752 cb->update();
2753 }
2754 }
2755 }
@ Normal
Definition StateColor.hpp:16
T * begin(Slic3r::Mat< N, M, T > &mat)
Definition Point.hpp:838
static bool is_same_nozzle_type(const DynamicPrintConfig &full_config, const MachineObject *obj, wxString &error_msg)
Definition CalibUtils.cpp:301
@ ptFFF
Definition Config.hpp:231
bool operator==(const clonable_ptr< T > &l, const clonable_ptr< U > &r) noexcept
Definition clonable_ptr.hpp:145
@ right
Definition MarchingSquares.hpp:190
@ left
Definition MarchingSquares.hpp:188
void update_extruder_separator_icon(bool show, bool ready)
Definition Plater.cpp:2281
std::string last_sync_dev_id
Definition Plater.cpp:1022
std::vector< PlaterPresetComboBox * > combos_filament
Definition Plater.cpp:915

References combos_filament, EPSILON, fila_switch_warning_shown, Slic3r::MachineObject::get_dev_id(), Slic3r::PresetCollection::get_edited_preset(), Slic3r::PresetBundle::get_printer_extruder_count(), Slic3r::Preset::get_printer_type(), Slic3r::MachineObject::get_show_printer_type(), Slic3r::MachineObject::GetExtderSystem(), Slic3r::DevExtderSystem::GetExtruders(), Slic3r::MachineObject::GetFilaSwitch(), Slic3r::MachineObject::GetFilaSystem(), Slic3r::DevExtderSystem::GetTotalExtderCount(), Slic3r::GUI::Sidebar::is_fila_switch_ready(), Slic3r::MachineObject::is_info_ready(), Slic3r::MachineObject::is_main_extruder_on_left(), Slic3r::MachineObject::is_nozzle_flow_type_supported(), Slic3r::DevPrinterConfigUtil::is_optional_printer_model_id(), Slic3r::GUI::is_same_nozzle_type(), last_sync_dev_id, left_extruder, m_printer_bbl_sync, Slic3r::DevAms::N3S, StateColor::Normal, Slic3r::GUI::operator==(), panel_nozzle_dia, panel_printer_bed, panel_printer_preset, Slic3r::MachineObject::printer_type, Slic3r::PresetBundle::printers, Slic3r::ptFFF, right_extruder, show_filament_switcher_dialog(), single_extruder, and update_extruder_separator_icon().

Here is the call graph for this function:

Member Data Documentation

◆ ams_list_device

std::string Slic3r::GUI::Sidebar::priv::ams_list_device

◆ big_bed_image_popup

ImageDPIFrame* Slic3r::GUI::Sidebar::priv::big_bed_image_popup = nullptr

◆ btn_connect_printer

ScalableButton* Slic3r::GUI::Sidebar::priv::btn_connect_printer = nullptr

◆ btn_edit_printer

ScalableButton* Slic3r::GUI::Sidebar::priv::btn_edit_printer = nullptr

Referenced by layout_printer().

◆ btn_export_gcode

wxButton* Slic3r::GUI::Sidebar::priv::btn_export_gcode

◆ btn_export_gcode_removable

ScalableButton* Slic3r::GUI::Sidebar::priv::btn_export_gcode_removable

◆ btn_reslice

wxButton* Slic3r::GUI::Sidebar::priv::btn_reslice

◆ btn_send_gcode

ScalableButton* Slic3r::GUI::Sidebar::priv::btn_send_gcode

◆ combo_nozzle_dia

ComboBox* Slic3r::GUI::Sidebar::priv::combo_nozzle_dia = nullptr

◆ combo_print

PlaterPresetComboBox* Slic3r::GUI::Sidebar::priv::combo_print = nullptr

◆ combo_printer

PlaterPresetComboBox* Slic3r::GUI::Sidebar::priv::combo_printer = nullptr

Referenced by layout_printer().

◆ combo_printer_bed

ComboBox* Slic3r::GUI::Sidebar::priv::combo_printer_bed = nullptr

◆ combo_sla_material

PlaterPresetComboBox* Slic3r::GUI::Sidebar::priv::combo_sla_material = nullptr

◆ combo_sla_print

PlaterPresetComboBox* Slic3r::GUI::Sidebar::priv::combo_sla_print = nullptr

◆ combos_filament

std::vector<PlaterPresetComboBox*> Slic3r::GUI::Sidebar::priv::combos_filament

Referenced by update_sync_status().

◆ counter_sync_printer

std::shared_ptr<int> Slic3r::GUI::Sidebar::priv::counter_sync_printer = std::make_shared<int>()

Referenced by flush_printer_sync().

◆ dia

Search::SearchObjectDialog* Slic3r::GUI::Sidebar::priv::dia = nullptr

◆ editing_filament

int Slic3r::GUI::Sidebar::priv::editing_filament = -1

◆ extruder_dual_sizer

wxBoxSizer* Slic3r::GUI::Sidebar::priv::extruder_dual_sizer = nullptr

Referenced by layout_printer().

◆ extruder_separator_icon

wxStaticBitmap* Slic3r::GUI::Sidebar::priv::extruder_separator_icon = nullptr

◆ extruder_single_sizer

wxBoxSizer* Slic3r::GUI::Sidebar::priv::extruder_single_sizer = nullptr

Referenced by layout_printer().

◆ fila_switch_warning_shown

bool Slic3r::GUI::Sidebar::priv::fila_switch_warning_shown = false

◆ image_printer

wxStaticBitmap* Slic3r::GUI::Sidebar::priv::image_printer = nullptr

Referenced by layout_printer().

◆ image_printer_bed

wxStaticBitmap* Slic3r::GUI::Sidebar::priv::image_printer_bed = nullptr

◆ is_switching_diameter

bool Slic3r::GUI::Sidebar::priv::is_switching_diameter {false}
990{false};

Referenced by sync_extruder_list().

◆ label_nozzle_title

Label* Slic3r::GUI::Sidebar::priv::label_nozzle_title = nullptr

◆ label_nozzle_type

Label* Slic3r::GUI::Sidebar::priv::label_nozzle_type = nullptr

◆ last_sync_dev_id

std::string Slic3r::GUI::Sidebar::priv::last_sync_dev_id

Referenced by update_sync_status().

◆ left_extruder

◆ m_bpButton_add_filament

ScalableButton* Slic3r::GUI::Sidebar::priv::m_bpButton_add_filament

◆ m_bpButton_ams_filament

ScalableButton* Slic3r::GUI::Sidebar::priv::m_bpButton_ams_filament

◆ m_bpButton_del_filament

ScalableButton* Slic3r::GUI::Sidebar::priv::m_bpButton_del_filament

◆ m_bpButton_set_filament

ScalableButton* Slic3r::GUI::Sidebar::priv::m_bpButton_set_filament

◆ m_btn_add_mixed_filament

wxPanel* Slic3r::GUI::Sidebar::priv::m_btn_add_mixed_filament {nullptr}
944{nullptr}; // "+ Add Mixed Filament" full-width button

◆ m_btn_mixed_add

ScalableButton* Slic3r::GUI::Sidebar::priv::m_btn_mixed_add {nullptr}
947{nullptr};

◆ m_btn_mixed_del

ScalableButton* Slic3r::GUI::Sidebar::priv::m_btn_mixed_del {nullptr}
948{nullptr};

◆ m_btn_mixed_del_all

ScalableButton* Slic3r::GUI::Sidebar::priv::m_btn_mixed_del_all {nullptr}
949{nullptr};

◆ m_filament_area_wrapper

wxPanel* Slic3r::GUI::Sidebar::priv::m_filament_area_wrapper

◆ m_filament_icon

ScalableButton* Slic3r::GUI::Sidebar::priv::m_filament_icon = nullptr

◆ m_flushing_volume_btn

Button* Slic3r::GUI::Sidebar::priv::m_flushing_volume_btn = nullptr

◆ m_menu_filament_id

int Slic3r::GUI::Sidebar::priv::m_menu_filament_id = -1

◆ m_mixed_filament_broken

bool Slic3r::GUI::Sidebar::priv::m_mixed_filament_broken {false}
955{false};

◆ m_mixed_scroll_area

wxScrolledWindow* Slic3r::GUI::Sidebar::priv::m_mixed_scroll_area {nullptr}
950{nullptr}; // independent scrollbar for mixed rows

◆ m_object_list

ObjectList* Slic3r::GUI::Sidebar::priv::m_object_list { nullptr }
980{ nullptr };

Referenced by jump_to_object().

◆ m_panel_filament_content

wxScrolledWindow* Slic3r::GUI::Sidebar::priv::m_panel_filament_content

◆ m_panel_filament_separator

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_filament_separator

◆ m_panel_filament_title

StaticBox* Slic3r::GUI::Sidebar::priv::m_panel_filament_title

◆ m_panel_mixed_content

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_mixed_content {nullptr}
951{nullptr};

◆ m_panel_mixed_title

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_mixed_title {nullptr}
945{nullptr}; // title row: "Mixed Filament" + add/del buttons

◆ m_panel_mixed_warning

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_mixed_warning {nullptr}
953{nullptr}; // red bar for broken/mismatched mixes

◆ m_panel_print_content

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_print_content

◆ m_panel_print_title

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_print_title

◆ m_panel_printer_content

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_printer_content = nullptr

◆ m_panel_printer_separator

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_printer_separator = nullptr

◆ m_panel_printer_title

StaticBox* Slic3r::GUI::Sidebar::priv::m_panel_printer_title = nullptr

◆ m_panel_project_title

wxPanel* Slic3r::GUI::Sidebar::priv::m_panel_project_title

◆ m_printer_bbl_sync

ScalableButton* Slic3r::GUI::Sidebar::priv::m_printer_bbl_sync = nullptr

◆ m_printer_connect

ScalableButton* Slic3r::GUI::Sidebar::priv::m_printer_connect = nullptr

Referenced by layout_printer().

◆ m_printer_icon

ScalableButton* Slic3r::GUI::Sidebar::priv::m_printer_icon = nullptr

◆ m_printer_setting

ScalableButton* Slic3r::GUI::Sidebar::priv::m_printer_setting = nullptr

◆ m_purge_mode_btn

Button* Slic3r::GUI::Sidebar::priv::m_purge_mode_btn = nullptr

◆ m_scrolledWindow_filament_content

wxScrolledWindow* Slic3r::GUI::Sidebar::priv::m_scrolledWindow_filament_content

◆ m_search_bar

StaticBox* Slic3r::GUI::Sidebar::priv::m_search_bar = nullptr

Referenced by can_search().

◆ m_search_item

TextInput* Slic3r::GUI::Sidebar::priv::m_search_item = nullptr

Referenced by can_search().

◆ m_sizer_mixed_filaments

wxBoxSizer* Slic3r::GUI::Sidebar::priv::m_sizer_mixed_filaments {nullptr}
952{nullptr}; // two-column, mirrors sizer_filaments

◆ m_staticline1

wxStaticLine* Slic3r::GUI::Sidebar::priv::m_staticline1

◆ m_staticline2

wxStaticLine* Slic3r::GUI::Sidebar::priv::m_staticline2

◆ m_staticText_filament_count

wxStaticText* Slic3r::GUI::Sidebar::priv::m_staticText_filament_count

◆ m_staticText_filament_settings

wxStaticText* Slic3r::GUI::Sidebar::priv::m_staticText_filament_settings

◆ m_staticText_print_title

wxStaticText* Slic3r::GUI::Sidebar::priv::m_staticText_print_title

◆ m_text_mixed_title

StaticLine* Slic3r::GUI::Sidebar::priv::m_text_mixed_title {nullptr}
946{nullptr};

◆ m_text_mixed_warning

wxStaticText* Slic3r::GUI::Sidebar::priv::m_text_mixed_warning {nullptr}
954{nullptr};

◆ m_text_printer_settings

wxStaticText* Slic3r::GUI::Sidebar::priv::m_text_printer_settings = nullptr

Referenced by layout_printer().

◆ object_layers

ObjectLayers* Slic3r::GUI::Sidebar::priv::object_layers { nullptr }
982{ nullptr };

◆ object_settings

ObjectSettings* Slic3r::GUI::Sidebar::priv::object_settings { nullptr }
981{ nullptr };

Referenced by ~priv().

◆ panel_nozzle_dia

StaticBox* Slic3r::GUI::Sidebar::priv::panel_nozzle_dia = nullptr

◆ panel_printer_bed

StaticBox* Slic3r::GUI::Sidebar::priv::panel_printer_bed = nullptr

◆ panel_printer_preset

StaticBox* Slic3r::GUI::Sidebar::priv::panel_printer_preset = nullptr

◆ plater

Plater* Slic3r::GUI::Sidebar::priv::plater

◆ right_extruder

ExtruderGroup* Slic3r::GUI::Sidebar::priv::right_extruder = nullptr

◆ scrolled

wxPanel* Slic3r::GUI::Sidebar::priv::scrolled = nullptr

Referenced by show_preset_comboboxes().

◆ searcher

Search::OptionsSearcher Slic3r::GUI::Sidebar::priv::searcher

◆ single_extruder

ExtruderGroup* Slic3r::GUI::Sidebar::priv::single_extruder = nullptr

◆ sizer_filaments

wxBoxSizer* Slic3r::GUI::Sidebar::priv::sizer_filaments = nullptr

◆ sizer_params

wxBoxSizer* Slic3r::GUI::Sidebar::priv::sizer_params

◆ timer_sync_printer

wxTimer* Slic3r::GUI::Sidebar::priv::timer_sync_printer = new wxTimer()

Referenced by flush_printer_sync().

◆ vsizer_printer

wxSizer* Slic3r::GUI::Sidebar::priv::vsizer_printer = nullptr

Referenced by layout_printer().


The documentation for this struct was generated from the following file:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Plater.cpp