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

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

Inheritance diagram for Slic3r::GUI::CrealityPrintHostSendDialog:
Collaboration diagram for Slic3r::GUI::CrealityPrintHostSendDialog:

Classes

struct  SlotInfo

Public Member Functions

 CrealityPrintHostSendDialog (const boost::filesystem::path &path, PrintHostPostUploadActions post_actions, const wxArrayString &groups, const wxArrayString &storage_paths, const wxArrayString &storage_names, bool switch_to_device_tab, PrintHost *printhost)
virtual void init () override
virtual std::map< std::string, std::string > extendedInfo () const override
boost::filesystem::path filename () const
PrintHostPostUploadAction post_action () const
std::string group () const
std::string storage () const
bool switch_to_device_tab () const
virtual void EndModal (int ret) override
void show_dsa_button (wxString const &title={})
bool get_checkbox_state ()
virtual void on_dpi_changed (const wxRect &suggested_rect)
void SetButtonLabel (wxWindowID btn_id, const wxString &label, bool set_focus=false)
void AddButton (wxWindowID btn_id, const wxString &label, bool set_focus=false)
float scale_factor () const
float prev_scale_factor () const
void set_scale_factor (float v)
void set_prev_scale_factor (float v)
void set_em_unit (int v)
bool force_rescale () const
int em_unit () const
const wxFont & normal_font () const
void enable_force_rescale ()
int ShowModal ()

Protected Types

enum  {
  BORDER = 20 , LOGO_SPACING = 25 , LOGO_GAP = 20 , CONTENT_WIDTH = 242 ,
  CONTENT_MAX_HEIGHT = 60 , BTN_SPACING = 20 , VERT_SPACING = 15
}

Protected Member Functions

Button * add_button (wxWindowID btn_id, bool set_focus=false, const wxString &label=wxString())
Button * get_button (wxWindowID btn_id)
void apply_style (long style)
void finalize ()
virtual void on_sys_color_changed ()

Protected Attributes

wxTextCtrl * txt_filename
wxComboBox * combo_groups
wxComboBox * combo_storage
PrintHostPostUploadAction post_upload_action
wxString m_valid_suffix
wxString m_preselected_storage
wxArrayString m_paths
bool m_switch_to_device_tab
boost::filesystem::path m_path
PrintHostPostUploadActions m_post_actions
wxArrayString m_storage_names
wxFont boldfont
wxBoxSizer * content_sizer
wxBoxSizer * btn_sizer
wxBoxSizer * m_dsa_sizer
wxStaticBitmap * logo
MsgButtonsHash m_buttons
CheckBox * m_checkbox_dsa {nullptr}
wxString m_forward_str

Private Member Functions

void update_em_unit ()
bool is_new_scale_factor () const
void rescale (const wxRect &suggested_rect)

Private Attributes

bool m_enableSelfTest
PrintHost * m_printhost
std::vector< SlotInfo > m_printer_slots
std::vector< BitmapComboBox * > m_slot_combos
float m_scale_factor
int m_em_unit
wxFont m_normal_font
float m_prev_scale_factor
bool m_can_rescale
bool m_force_rescale
int m_new_font_point_size

Static Private Attributes

static constexpr const char * CONFIG_KEY_ENABLESELFTEST = "crealityprint_enable_self_test"

Detailed Description


Class Documentation

◆ Slic3r::GUI::CrealityPrintHostSendDialog::SlotInfo

struct Slic3r::GUI::CrealityPrintHostSendDialog::SlotInfo
Collaboration diagram for Slic3r::GUI::CrealityPrintHostSendDialog::SlotInfo:
Class Members
int box_id
string color
int material_id
string tool_id
string type

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
protectedinherited
Enumerator
BORDER 
LOGO_SPACING 
LOGO_GAP 
CONTENT_WIDTH 
CONTENT_MAX_HEIGHT 
BTN_SPACING 
VERT_SPACING 
85 {
86 BORDER = 20,
87 LOGO_SPACING = 25,
88 LOGO_GAP = 20,
89 CONTENT_WIDTH = 242,
90 CONTENT_MAX_HEIGHT = 60,//TO
91 BTN_SPACING = 20,
92 VERT_SPACING = 15,//TO
93 };
@ CONTENT_WIDTH
Definition MsgDialog.hpp:89
@ LOGO_GAP
Definition MsgDialog.hpp:88
@ VERT_SPACING
Definition MsgDialog.hpp:92
@ BORDER
Definition MsgDialog.hpp:86
@ CONTENT_MAX_HEIGHT
Definition MsgDialog.hpp:90
@ BTN_SPACING
Definition MsgDialog.hpp:91
@ LOGO_SPACING
Definition MsgDialog.hpp:87

Constructor & Destructor Documentation

◆ CrealityPrintHostSendDialog()

Slic3r::GUI::CrealityPrintHostSendDialog::CrealityPrintHostSendDialog ( const boost::filesystem::path & path,
PrintHostPostUploadActions post_actions,
const wxArrayString & groups,
const wxArrayString & storage_paths,
const wxArrayString & storage_names,
bool switch_to_device_tab,
PrintHost * printhost )
1915 : PrintHostSendDialog(path, post_actions, groups, storage_paths, storage_names, switch_to_device_tab)
1916 , m_enableSelfTest(false)
1917 , m_printhost(printhost)
1918{}
PrintHost * m_printhost
Definition PrintHostDialogs.hpp:213
bool m_enableSelfTest
Definition PrintHostDialogs.hpp:212
bool switch_to_device_tab() const
Definition PrintHostDialogs.hpp:47
PrintHostSendDialog(const boost::filesystem::path &path, PrintHostPostUploadActions post_actions, const wxArrayString &groups, const wxArrayString &storage_paths, const wxArrayString &storage_names, bool switch_to_device_tab)
Definition PrintHostDialogs.cpp:470

References Slic3r::GUI::PrintHostSendDialog::PrintHostSendDialog(), m_enableSelfTest, m_printhost, and Slic3r::GUI::PrintHostSendDialog::switch_to_device_tab().

Here is the call graph for this function:

Member Function Documentation

◆ add_button()

Button * Slic3r::GUI::MsgDialog::add_button ( wxWindowID btn_id,
bool set_focus = false,
const wxString & label = wxString() )
protectedinherited
185{
186 Button* btn = new Button(this, label, "", 0, 0, btn_id);
187 /* ORCA not required since all buttons has same size and Rescale re applies its style
188 ButtonSizeType type;
189
190 if (label.length() < 5) {
191 type = ButtonSizeNormal;
192 btn->SetMinSize(MSG_DIALOG_BUTTON_SIZE); // ?????
193 }
194 else if (label.length() >= 5 && label.length() < 8) {
195 type = ButtonSizeMiddle;
196 btn->SetMinSize(MSG_DIALOG_MIDDLE_BUTTON_SIZE);
197 }
198 else if (label.length() >= 8 && label.length() < 12) {
199 type = ButtonSizeMiddle;
200 btn->SetMinSize(MSG_DIALOG_LONG_BUTTON_SIZE);
201 } else {
202 type = ButtonSizeLong;
203 btn->SetMinSize(MSG_DIALOG_LONGER_BUTTON_SIZE);
204 }
205 */
206
207 if (btn_id == wxID_OK || btn_id == wxID_YES || btn_id == wxFORWARD) {
209 }
210
211 if (btn_id == wxID_CANCEL || btn_id == wxID_NO) {
213 }
214
215 if (set_focus)
216 btn->SetFocus();
217 btn_sizer->Add(btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(ButtonProps::ChoiceButtonGap()));
218 btn->Bind(wxEVT_BUTTON, [this, btn_id](wxCommandEvent&) { EndModal(btn_id); });
219
220 MsgButton *mb = new MsgButton;
221 ButtonData *bd = new ButtonData;
222
223 bd->button = btn;
224 //bd->type = type;
225
226 // m_buttons.size() is a size_t, which does not match the %d conversion
227 mb->id = wxString(std::to_string(m_buttons.size()));
228 mb->buttondata = bd;
229 m_buttons[ wxString(std::to_string(m_buttons.size()))] = mb;
230 return btn;
231};
static const wxColour bd
Definition AxisCtrlButton.cpp:25
@ Confirm
Definition Button.hpp:25
@ Regular
Definition Button.hpp:24
@ Choice
Definition Button.hpp:33
static int ChoiceButtonGap()
Definition Button.hpp:19
void SetStyle(const ButtonStyle style, const ButtonType type)
Definition Button.cpp:200
void EndModal(int retCode) override
Definition GUI_Utils.hpp:305
MsgButtonsHash m_buttons
Definition MsgDialog.hpp:108
wxBoxSizer * btn_sizer
Definition MsgDialog.hpp:105

References bd, btn_sizer, Slic3r::GUI::MsgButton::buttondata, Choice, ButtonProps::ChoiceButtonGap(), Confirm, Slic3r::GUI::DPIDialog::EndModal(), Slic3r::GUI::MsgButton::id, m_buttons, Regular, and Button::SetStyle().

Referenced by Slic3r::GUI::ConfigsOverwriteConfirmDialog::ConfigsOverwriteConfirmDialog(), Slic3r::GUI::DownloadDialog::DownloadDialog(), Slic3r::GUI::MsgUpdateForced::MsgUpdateForced(), AddButton(), apply_style(), Slic3r::GUI::ElegooPrintHostSendDialog::init(), Slic3r::GUI::FlashforgePrintHostSendDialog::init(), and Slic3r::GUI::PrintHostSendDialog::init().

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

◆ AddButton()

void Slic3r::GUI::MsgDialog::AddButton ( wxWindowID btn_id,
const wxString & label,
bool set_focus = false )
inlineinherited
82{ add_button(btn_id, set_focus, label); }
Button * add_button(wxWindowID btn_id, bool set_focus=false, const wxString &label=wxString())
Definition MsgDialog.cpp:184

References add_button().

Referenced by Slic3r::GUI::PrintOptionsDialog::PrintOptionsDialog(), Slic3r::GUI::wgtDeviceNozzleRackNozzleItem::OnBtnNozzleStatus(), and Slic3r::GUI::wgtDeviceNozzleRackHotendUpdate::OnStatusIconClick().

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

◆ apply_style()

void Slic3r::GUI::MsgDialog::apply_style ( long style)
protectedinherited
238{
239 if (style & wxFORWARD)
240 add_button(wxFORWARD, true, _L("Go to") + " " + m_forward_str);
241 if (style & wxOK) {
242 if (style & wxFORWARD) { add_button(wxID_CANCEL, false, _L("Later")); }
243 else {
244 add_button(wxID_OK, true, _L("OK"));
245 }
246 }
247 if (style & wxYES) add_button(wxID_YES, true, _L("Yes"));
248 if (style & wxNO) add_button(wxID_NO, false,_L("No"));
249 if (style & wxCANCEL) add_button(wxID_CANCEL, false, _L("Cancel"));
250
251 logo->SetBitmap( create_scaled_bitmap(style & wxAPPLY ? "completed" :
252 style & wxICON_WARNING ? "exclamation" : // ORCA "exclamation" used for dialogs "obj_warning" used for 16x16 areas
253 style & wxICON_INFORMATION ? "info" :
254 style & wxICON_QUESTION ? "question" : "OrcaSlicer", this, 64, style & wxICON_ERROR));
255}
#define _L(s)
Definition OBJ.cpp:34
#define style
Definition WipeTowerDialog.cpp:101
wxStaticBitmap * logo
Definition MsgDialog.hpp:107
wxString m_forward_str
Definition MsgDialog.hpp:110
wxBitmap create_scaled_bitmap(const std::string &bmp_name_in, wxWindow *win, const int px_cnt, const bool grayscale, const std::string &new_color, const bool menu_bitmap, const bool resize, const bool bitmap2, const std::vector< std::string > &array_new_color)
Definition wxExtensions.cpp:448

References _L, add_button(), create_scaled_bitmap(), logo, m_forward_str, and style.

Referenced by MsgDialog().

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

◆ em_unit()

int Slic3r::GUI::DPIAware< wxDialog >::em_unit ( ) const
inlineinherited
203{ return m_em_unit; }
Definition GUI_Utils.hpp:107

Referenced by Slic3r::GUI::AuxiliaryDialog::AuxiliaryDialog(), Slic3r::GUI::CopyrightsDialog::CopyrightsDialog(), Slic3r::GUI::DesignTextDialog::DesignTextDialog(), Slic3r::GUI::EditGCodeDialog::EditGCodeDialog(), Slic3r::GUI::FileArchiveDialog::FileArchiveDialog(), Slic3r::GUI::MsgNoUpdates::MsgNoUpdates(), Slic3r::GUI::MsgUpdateForced::MsgUpdateForced(), Slic3r::GUI::OAuthDialog::OAuthDialog(), Slic3r::GUI::ParamsDialog::ParamsDialog(), Slic3r::GUI::PhysicalPrinterDialog::PhysicalPrinterDialog(), Slic3r::GUI::SettingsDialog::SettingsDialog(), anonymous_namespace{3DPrinterOS.cpp}::TokenAuthDialog::TokenAuthDialog(), anonymous_namespace{3DPrinterOS.cpp}::UploadOptionsDialog::UploadOptionsDialog(), Slic3r::GUI::PublishSettingsDialog::add_row_ui(), Slic3r::GUI::DiffPresetDialog::complete_dialog_creation(), Slic3r::GUI::DiffPresetDialog::create_edit_sizer(), Slic3r::GUI::DiffPresetDialog::create_presets_sizer(), Slic3r::GUI::DiffPresetDialog::create_tree(), Slic3r::GUI::ElegooPrintHostSendDialog::init(), Slic3r::GUI::FlashforgePrintHostSendDialog::init(), Slic3r::GUI::PrintHostSendDialog::init(), Slic3r::GUI::AboutDialog::on_dpi_changed(), Slic3r::GUI::AuxiliaryDialog::on_dpi_changed(), Slic3r::GUI::BedShapeDialog::on_dpi_changed(), Slic3r::GUI::ConfigWizard::on_dpi_changed(), Slic3r::GUI::CopyrightsDialog::on_dpi_changed(), Slic3r::GUI::DiffPresetDialog::on_dpi_changed(), Slic3r::GUI::EditGCodeDialog::on_dpi_changed(), Slic3r::GUI::FileArchiveDialog::on_dpi_changed(), Slic3r::GUI::OAuthDialog::on_dpi_changed(), Slic3r::GUI::ObjectTableDialog::on_dpi_changed(), Slic3r::GUI::ParamsDialog::on_dpi_changed(), Slic3r::GUI::PhysicalPrinterDialog::on_dpi_changed(), Slic3r::GUI::PrintHostQueueDialog::on_dpi_changed(), Slic3r::GUI::PurgeModeDialog::on_dpi_changed(), Slic3r::GUI::SavePresetDialog::on_dpi_changed(), Slic3r::GUI::SendSystemInfoDialog::on_dpi_changed(), Slic3r::GUI::SettingsDialog::on_dpi_changed(), and Slic3r::GUI::UnsavedChangesDialog::on_dpi_changed().

Here is the caller graph for this function:

◆ enable_force_rescale()

void Slic3r::GUI::DPIAware< wxDialog >::enable_force_rescale ( )
inlineinherited
206{ m_force_rescale = true; }

◆ EndModal()

void Slic3r::GUI::PrintHostSendDialog::EndModal ( int ret)
overridevirtualinherited

Reimplemented in Slic3r::GUI::ElegooPrintHostSendDialog, and Slic3r::GUI::FlashforgePrintHostSendDialog.

663{
664 if (ret == wxID_OK) {
665 // Persist path and print settings
666 wxString path = txt_filename->GetValue();
667 int last_slash = path.Find('/', true);
668 if (last_slash == wxNOT_FOUND)
669 path.clear();
670 else
671 path = path.SubString(0, last_slash);
672
673 AppConfig *app_config = wxGetApp().app_config;
674 app_config->set("recent", CONFIG_KEY_PATH, into_u8(path));
675
676 if (combo_groups != nullptr) {
677 wxString group = combo_groups->GetValue();
678 app_config->set("recent", CONFIG_KEY_GROUP, into_u8(group));
679 }
680 if (combo_storage != nullptr) {
681 wxString storage = combo_storage->GetValue();
682 app_config->set("recent", CONFIG_KEY_STORAGE, into_u8(storage));
683 }
684 }
685
687}
wxComboBox * combo_storage
Definition PrintHostDialogs.hpp:56
wxTextCtrl * txt_filename
Definition PrintHostDialogs.hpp:54
std::string storage() const
Definition PrintHostDialogs.cpp:653
std::string group() const
Definition PrintHostDialogs.cpp:643
wxComboBox * combo_groups
Definition PrintHostDialogs.hpp:55
static const char * CONFIG_KEY_STORAGE
Definition PrintHostDialogs.cpp:468
static const char * CONFIG_KEY_GROUP
Definition PrintHostDialogs.cpp:467
static const char * CONFIG_KEY_PATH
Definition PrintHostDialogs.cpp:466
std::string into_u8(const wxString &str)
Definition GUI.cpp:549

References combo_groups, combo_storage, Slic3r::GUI::CONFIG_KEY_GROUP, Slic3r::GUI::CONFIG_KEY_PATH, Slic3r::GUI::CONFIG_KEY_STORAGE, Slic3r::GUI::DPIDialog::EndModal(), group(), Slic3r::GUI::into_u8(), Slic3r::AppConfig::set(), storage(), and txt_filename.

Referenced by Slic3r::GUI::ElegooPrintHostSendDialog::EndModal(), and Slic3r::GUI::FlashforgePrintHostSendDialog::EndModal().

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

◆ extendedInfo()

std::map< std::string, std::string > Slic3r::GUI::CrealityPrintHostSendDialog::extendedInfo ( ) const
overridevirtual

Reimplemented from Slic3r::GUI::PrintHostSendDialog.

2135{
2136 std::map<std::string, std::string> info;
2137 info["enableSelfTest"] = m_enableSelfTest ? "1" : "0";
2138
2139 // Color mapping: colorMatch_0, colorMatch_1, ... tab-delimited
2140 for (int i = 0; i < (int)m_slot_combos.size(); i++) {
2141 int sel = m_slot_combos[i]->GetSelection();
2142 if (sel >= 0 && sel < (int)m_printer_slots.size()) {
2143 auto& slot = m_printer_slots[sel];
2144 // id = gcode tool index (T1A for first filament, T1B for second, ...),
2145 // not the destination CFS slot — firmware matches by gcode tool.
2146 std::string gcode_tool = "T1" + std::string(1, 'A' + i);
2147 info["colorMatch_" + std::to_string(i)] =
2148 gcode_tool + "\t" + slot.type + "\t" + slot.color + "\t" +
2149 std::to_string(slot.box_id) + "\t" + std::to_string(slot.material_id);
2150 }
2151 }
2152
2153 return info;
2154}
std::vector< SlotInfo > m_printer_slots
Definition PrintHostDialogs.hpp:222
std::vector< BitmapComboBox * > m_slot_combos
Definition PrintHostDialogs.hpp:223

References m_enableSelfTest, m_printer_slots, and m_slot_combos.

◆ filename()

fs::path Slic3r::GUI::PrintHostSendDialog::filename ( ) const
inherited
634{
635 return into_path(txt_filename->GetValue());
636}
boost::filesystem::path into_path(const wxString &str)
Definition GUI.cpp:564

References Slic3r::GUI::into_path(), and txt_filename.

Referenced by Slic3r::GUI::FlashforgePrintHostSendDialog::init().

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

◆ finalize()

◆ force_rescale()

bool Slic3r::GUI::DPIAware< wxDialog >::force_rescale ( ) const
inlineinherited
201{ return m_force_rescale; }

◆ get_button()

Button * Slic3r::GUI::MsgDialog::get_button ( wxWindowID btn_id)
protectedinherited
233 {
234 return static_cast<Button*>(FindWindowById(btn_id, this));
235}

Referenced by Slic3r::GUI::MsgUpdateForced::MsgUpdateForced(), and SetButtonLabel().

Here is the caller graph for this function:

◆ get_checkbox_state()

bool Slic3r::GUI::MsgDialog::get_checkbox_state ( )
inherited

◆ group()

std::string Slic3r::GUI::PrintHostSendDialog::group ( ) const
inherited
644{
645 if (combo_groups == nullptr) {
646 return "";
647 } else {
648 wxString group = combo_groups->GetValue();
649 return into_u8(group);
650 }
651}

References combo_groups, group(), and Slic3r::GUI::into_u8().

Referenced by EndModal(), and group().

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

◆ init()

void Slic3r::GUI::CrealityPrintHostSendDialog::init ( )
overridevirtual

Reimplemented from Slic3r::GUI::PrintHostSendDialog.

1921{
1923
1924 auto* creality_host = static_cast<CrealityPrint*>(m_printhost);
1925 bool multi_color;
1926 std::string printer_name;
1927 {
1928 wxBusyCursor wait;
1929 multi_color = creality_host->supports_multi_color_print();
1930 if (multi_color)
1931 printer_name = creality_host->model_name();
1932 }
1933 if (!multi_color)
1934 return;
1935
1936 auto* group_box = new wxStaticBox(this, wxID_ANY,
1937 wxString::Format(_L("Printer: %s"), printer_name));
1938 auto* group_sizer = new wxStaticBoxSizer(group_box, wxVERTICAL);
1939 content_sizer->Add(group_sizer, 0, wxEXPAND);
1940
1941 const AppConfig* app_config = wxGetApp().app_config;
1942 std::string saved = app_config->get("recent", CONFIG_KEY_ENABLESELFTEST);
1943 if (!saved.empty()) {
1944 try { m_enableSelfTest = std::stoi(saved) != 0; } catch (...) {}
1945 }
1946
1947 // Calibration checkbox
1948 {
1949 auto checkbox_sizer = new wxBoxSizer(wxHORIZONTAL);
1950 auto checkbox = new ::CheckBox(this);
1951 checkbox->SetValue(m_enableSelfTest);
1952 checkbox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) {
1953 m_enableSelfTest = e.IsChecked();
1954 AppConfig* ac = wxGetApp().app_config;
1955 ac->set("recent", CONFIG_KEY_ENABLESELFTEST, m_enableSelfTest ? "1" : "0");
1956 e.Skip();
1957 });
1958 checkbox_sizer->Add(checkbox, 0, wxALL | wxALIGN_CENTER, FromDIP(2));
1959 auto checkbox_text = new wxStaticText(this, wxID_ANY, _L("Calibrate before printing"), wxDefaultPosition, wxDefaultSize, 0);
1960 checkbox_sizer->Add(checkbox_text, 0, wxALL | wxALIGN_CENTER, FromDIP(2));
1961 checkbox_text->SetFont(::Label::Body_13);
1962 checkbox_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3D")));
1963 group_sizer->Add(checkbox_sizer);
1964 group_sizer->AddSpacer(VERT_SPACING);
1965 }
1966
1967 // --- Color mapping UI ---
1968 // Get gcode filament info from slicer
1969 auto preset_bundle = wxGetApp().preset_bundle;
1970 auto full_config = preset_bundle->full_config();
1971 auto* filament_colors = full_config.option<ConfigOptionStrings>("filament_colour");
1972 auto* filament_types = full_config.option<ConfigOptionStrings>("filament_type");
1973 int gcode_filament_count = filament_colors ? (int)filament_colors->values.size() : 0;
1974
1975 // Query printer for loaded materials
1976 {
1977 wxBusyCursor wait;
1978 std::string boxes_json = creality_host->query_boxes_info();
1979 if (!boxes_json.empty()) {
1980 try {
1981 auto resp = nlohmann::json::parse(boxes_json);
1982 if (resp.contains("boxsInfo") && resp["boxsInfo"].contains("materialBoxs")) {
1983 for (auto& box : resp["boxsInfo"]["materialBoxs"]) {
1984 int box_id = box["id"].get<int>();
1985 int box_type = box.value("type", 0);
1986 // Skip inactive CFS boxes (type 0 with state != 1)
1987 // Spool holder (type 1) is always available
1988 if (box_type == 0 && box.value("state", 0) != 1)
1989 continue;
1990 for (auto& mat : box["materials"]) {
1991 int slot_id = mat["id"].get<int>();
1992 std::string tool_id = "T" + std::to_string(box_id) + std::string(1, 'A' + slot_id);
1993 // Creality uses "#0RRGGBB" (7 hex digits), normalize to "#RRGGBB"
1994 std::string color = mat.value("color", "#FFFFFF");
1995 if (color.size() == 8 && color[0] == '#')
1996 color = "#" + color.substr(2);
1997 m_printer_slots.push_back({
1998 tool_id,
1999 mat.value("type", ""),
2000 color,
2001 box_id,
2002 slot_id
2003 });
2004 }
2005 }
2006 }
2007 } catch (const nlohmann::json::exception& e) {
2008 BOOST_LOG_TRIVIAL(error) << "CrealityPrint dialog: Failed to parse boxsInfo: " << e.what();
2009 }
2010 }
2011 }
2012
2013 if (gcode_filament_count > 0 && !m_printer_slots.empty()) {
2014 auto* label = new wxStaticText(this, wxID_ANY, _L("Filament Mapping:"));
2015 label->SetFont(::Label::Body_13);
2016 label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3D")));
2017 group_sizer->Add(label);
2018 group_sizer->AddSpacer(4);
2019
2020 for (int i = 0; i < gcode_filament_count; i++) {
2021 auto* row_sizer = new wxBoxSizer(wxHORIZONTAL);
2022
2023 // Left side: gcode filament color swatch + type
2024 std::string gc_color = (filament_colors && i < (int)filament_colors->values.size())
2025 ? filament_colors->values[i] : "#FFFFFF";
2026 std::string gc_type = (filament_types && i < (int)filament_types->values.size())
2027 ? filament_types->values[i] : "?";
2028
2029 // Color indicator panel
2030 auto* color_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)));
2031 color_panel->SetBackgroundColour(wxColour(gc_color));
2032 color_panel->SetMinSize(wxSize(FromDIP(16), FromDIP(16)));
2033 row_sizer->Add(color_panel, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4));
2034
2035 auto* type_label = new wxStaticText(this, wxID_ANY,
2036 wxString::Format("%d (%s)", i + 1, gc_type.c_str()));
2037 type_label->SetFont(::Label::Body_13);
2038 type_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3D")));
2039 type_label->SetMinSize(wxSize(FromDIP(80), -1));
2040 row_sizer->Add(type_label, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(8));
2041
2042 // Arrow
2043 auto* arrow_label = new wxStaticText(this, wxID_ANY, wxString::FromUTF8("\xe2\x86\x92"));
2044 arrow_label->SetFont(::Label::Body_13);
2045 row_sizer->Add(arrow_label, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(8));
2046
2047 // Right side: dropdown with color icons per slot
2048 int icon_sz = FromDIP(16);
2049 auto* combo = new BitmapComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY);
2050 for (auto& slot : m_printer_slots) {
2051 wxBitmap* bmp = get_extruder_color_icon(slot.color, "", icon_sz, icon_sz);
2052 wxString label_str;
2053 if (slot.box_id == 0)
2054 // TRN External spool slot, followed by its filament type
2055 label_str = wxString::Format(_L("Ext - %s"), slot.type.c_str());
2056 else
2057 label_str = wxString::Format("%s - %s", slot.tool_id.substr(1).c_str(), slot.type.c_str());
2058 combo->Append(label_str, bmp ? *bmp : wxNullBitmap);
2059 }
2060 // Find best default: CFS exact color+type, CFS type-only,
2061 // Ext exact, Ext type-only, else positional
2062 int default_sel = (i < (int)m_printer_slots.size()) ? i : 0;
2063 bool matched = false;
2064 for (int pass = 0; pass < 4 && !matched; pass++) {
2065 for (int s = 0; s < (int)m_printer_slots.size(); s++) {
2066 bool is_ext = (m_printer_slots[s].box_id == 0);
2067 bool type_match = (m_printer_slots[s].type == gc_type);
2068 bool color_match = (wxColour(m_printer_slots[s].color) == wxColour(gc_color));
2069 bool hit = false;
2070 switch (pass) {
2071 case 0: hit = !is_ext && type_match && color_match; break;
2072 case 1: hit = !is_ext && type_match; break;
2073 case 2: hit = is_ext && type_match && color_match; break;
2074 case 3: hit = is_ext && type_match; break;
2075 }
2076 if (hit) {
2077 default_sel = s;
2078 matched = true;
2079 break;
2080 }
2081 }
2082 }
2083 combo->SetSelection(default_sel);
2084 row_sizer->Add(combo, 0, wxALIGN_CENTER_VERTICAL);
2085
2086 group_sizer->Add(row_sizer);
2087 group_sizer->AddSpacer(4);
2088 m_slot_combos.push_back(combo);
2089 }
2090
2091 int ext_slot_idx = -1;
2092 for (int s = 0; s < (int)m_printer_slots.size(); s++) {
2093 if (m_printer_slots[s].box_id == 0) {
2094 ext_slot_idx = s;
2095 break;
2096 }
2097 }
2098 if (ext_slot_idx >= 0) {
2099 for (int ci = 0; ci < (int)m_slot_combos.size(); ci++) {
2100 int sel = m_slot_combos[ci]->GetSelection();
2101 if (sel >= 0 && sel < (int)m_printer_slots.size() &&
2102 m_printer_slots[sel].box_id == 0) {
2103 for (int cj = 0; cj < (int)m_slot_combos.size(); cj++) {
2104 if (cj != ci)
2105 m_slot_combos[cj]->Enable(false);
2106 }
2107 break;
2108 }
2109 }
2110
2111 for (auto* c : m_slot_combos) {
2112 c->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) {
2113 int sel = e.GetSelection();
2114 if (sel >= 0 && sel < (int)m_printer_slots.size() &&
2115 m_printer_slots[sel].box_id == 0) {
2116 for (auto* c2 : m_slot_combos) {
2117 if (c2 != e.GetEventObject())
2118 c2->Enable(false);
2119 }
2120 } else {
2121 for (auto* c2 : m_slot_combos)
2122 c2->Enable(true);
2123 }
2124 e.Skip();
2125 });
2126 }
2127 }
2128 }
2129
2130 this->Layout();
2131 this->Fit();
2132}
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
static wxFont Body_13
Definition Label.hpp:54
static constexpr const char * CONFIG_KEY_ENABLESELFTEST
Definition PrintHostDialogs.hpp:210
virtual void init()
Definition PrintHostDialogs.cpp:487
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219
static const std::vector< std::string > filament_types
Definition CreatePresetsDialog.cpp:123
wxBoxSizer * content_sizer
Definition MsgDialog.hpp:104
wxBitmap * get_extruder_color_icon(std::vector< std::string > colors, bool is_gradient, std::string label, int icon_width, int icon_height, const std::vector< wxColour > *ramp)
Definition wxExtensions.cpp:633

References _L, Label::Body_13, CONFIG_KEY_ENABLESELFTEST, Slic3r::GUI::MsgDialog::content_sizer, StateColor::darkModeColorFor(), Slic3r::GUI::filament_types, Slic3r::AppConfig::get(), get_extruder_color_icon(), Slic3r::GUI::PrintHostSendDialog::init(), m_enableSelfTest, m_printer_slots, m_printhost, m_slot_combos, Slic3r::AppConfig::set(), Slic3r::ConfigOptionVector< T >::values, Slic3r::GUI::MsgDialog::VERT_SPACING, and wxStaticText.

Here is the call graph for this function:

◆ is_new_scale_factor()

bool Slic3r::GUI::DPIAware< wxDialog >::is_new_scale_factor ( ) const
inlineprivateinherited
262{ return fabs(m_scale_factor - m_prev_scale_factor) > 0.001; }

◆ normal_font()

◆ on_dpi_changed()

void Slic3r::GUI::MsgDialog::on_dpi_changed ( const wxRect & suggested_rect)
virtualinherited

Implements Slic3r::GUI::DPIAware< wxDialog >.

150 {
151 if (m_buttons.size() > 0) {
152 MsgButtonsHash::iterator i = m_buttons.begin();
153
154 while (i != m_buttons.end()) {
155 MsgButton *bd = i->second;
156 /* ORCA not required since all buttons has same size and Rescale re applies its style
157 wxSize bsize;
158
159
160 switch (bd->buttondata->type) {
161 case ButtonSizeNormal:bsize = MSG_DIALOG_BUTTON_SIZE;break;
162 case ButtonSizeMiddle: bsize = MSG_DIALOG_MIDDLE_BUTTON_SIZE; break;
163 case ButtonSizeLong: bsize = MSG_DIALOG_LONG_BUTTON_SIZE; break;
164 default: break;
165 }
166
167 bd->buttondata->button->SetMinSize(bsize);
168 */
169 bd->buttondata->button->Rescale();
170 i++;
171 }
172 }
173 }

References bd, and m_buttons.

◆ on_sys_color_changed()

◆ post_action()

PrintHostPostUploadAction Slic3r::GUI::PrintHostSendDialog::post_action ( ) const
inherited
639{
640 return post_upload_action;
641}
PrintHostPostUploadAction post_upload_action
Definition PrintHostDialogs.hpp:57

References post_upload_action.

◆ prev_scale_factor()

float Slic3r::GUI::DPIAware< wxDialog >::prev_scale_factor ( ) const
inlineinherited
196{ return m_prev_scale_factor; }

◆ rescale()

void Slic3r::GUI::DPIAware< wxDialog >::rescale ( const wxRect & suggested_rect)
inlineprivateinherited
265 {
266 this->Freeze();
267
268 m_force_rescale = false;
269
270 // set normal application font as a current window font
271 m_normal_font = this->GetFont();
272
274
275 // rescale missed controls sizes and images
277
278 this->Layout();
279 this->Thaw();
280
281 // reset previous scale factor from current scale factor value
283 }
virtual void on_dpi_changed(const wxRect &suggested_rect)=0
void update_em_unit()
Definition GUI_Utils.hpp:249

◆ scale_factor()

float Slic3r::GUI::DPIAware< wxDialog >::scale_factor ( ) const
inlineinherited
195{ return m_scale_factor; }

◆ set_em_unit()

void Slic3r::GUI::DPIAware< wxDialog >::set_em_unit ( int v)
inlineinherited
200{ m_em_unit = v; }

◆ set_prev_scale_factor()

void Slic3r::GUI::DPIAware< wxDialog >::set_prev_scale_factor ( float v)
inlineinherited

◆ set_scale_factor()

void Slic3r::GUI::DPIAware< wxDialog >::set_scale_factor ( float v)
inlineinherited
198{ m_scale_factor = v; }

◆ SetButtonLabel()

void Slic3r::GUI::MsgDialog::SetButtonLabel ( wxWindowID btn_id,
const wxString & label,
bool set_focus = false )
inherited
176{
177 if (Button* btn = get_button(btn_id)) {
178 btn->SetLabel(label);
179 if (set_focus)
180 btn->SetFocus();
181 }
182}
Button * get_button(wxWindowID btn_id)
Definition MsgDialog.cpp:233

References get_button().

Referenced by Slic3r::GUI::MixedFilamentWarningDialog::MixedFilamentWarningDialog(), Slic3r::GUI::ConfigManipulation::check_layer_height(), Slic3r::GUI::FanControlNew::check_printing_state(), Slic3r::GUI::FanOperate::check_printing_state(), Slic3r::DevNozzleRack::CtrlRackReadAll(), Slic3r::DevNozzleRack::CtrlRackUpgrade(), Slic3r::GUI::ObjectList::del_from_cut_object(), Slic3r::GUI::Plater::priv::delete_object_from_model(), Slic3r::GUI::Field::get_value_by_opt_type(), Slic3r::GUI::GUI_App::handle_web_request(), Slic3r::GUI::ConfigManipulation::layer_height_out_of_range_dialog(), Slic3r::GUI::Plater::priv::load_files(), Slic3r::GUI::StatusPanel::on_lamp_switch(), Slic3r::GUI::TextureImportDialog::on_mesh_repair_decision_required(), Slic3r::GUI::Tab::on_value_change(), Slic3r::GUI::AMSSettingTypePanel::OnAmsTypeChanged(), Slic3r::GUI::run_scene_benchmark(), Slic3r::GUI::FanControlPopupNew::UpdatePartSubMode(), and Slic3r::GUI::Tab::validate_filament_temperature_pairs().

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

◆ show_dsa_button()

void Slic3r::GUI::MsgDialog::show_dsa_button ( wxString const & title = {})
inherited
112{
113 m_checkbox_dsa = new CheckBox(this);
114 m_dsa_sizer->Add(m_checkbox_dsa, 0, wxALIGN_CENTER);
115 m_checkbox_dsa->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) {
116 auto event = wxCommandEvent(EVT_CHECKBOX_CHANGE);
117 event.SetInt(m_checkbox_dsa->GetValue()?1:0);
118 event.SetEventObject(this);
119 wxPostEvent(this, event);
120 e.Skip();
121 });
122
123 auto m_text_dsa = new wxStaticText(this, wxID_ANY, title.IsEmpty() ? _L("Don't show again") : title, wxDefaultPosition, wxDefaultSize, 0);
124 auto on_toggle = [this]() {
125 m_checkbox_dsa->SetValue(!m_checkbox_dsa->GetValue());
126 wxCommandEvent ev(wxEVT_TOGGLEBUTTON, m_checkbox_dsa->GetId());
127 ev.SetEventObject(m_checkbox_dsa);
128 m_checkbox_dsa->GetEventHandler()->ProcessEvent(ev);
129 };
130 m_text_dsa->Bind(wxEVT_LEFT_DOWN, [on_toggle](wxMouseEvent& e) {if(!e.LeftDClick()) on_toggle();});
131 m_text_dsa->Bind(wxEVT_LEFT_DCLICK, [on_toggle](wxMouseEvent& e) {on_toggle();});
132
133 m_dsa_sizer->Add(m_text_dsa, 0, wxALL | wxALIGN_CENTER, FromDIP(2));
134 m_dsa_sizer->AddSpacer(FromDIP(10)); // spacing after checkbox
135 m_text_dsa->SetFont(::Label::Body_13);
136 m_text_dsa->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3D")));
137 btn_sizer->Layout();
138 Fit();
139}
wxMouseEvent
Definition CameraPopup.cpp:47
wxBoxSizer * m_dsa_sizer
Definition MsgDialog.hpp:106

References _L, Label::Body_13, btn_sizer, StateColor::darkModeColorFor(), m_checkbox_dsa, m_dsa_sizer, Slic3r::GUI::wxMouseEvent, and wxStaticText.

Referenced by Slic3r::DevNozzleRack::CheckRackMoveWarningDlg(), Slic3r::GUI::Plater::close_with_confirm(), Slic3r::GUI::confirm_create_decompose_missing_components(), Slic3r::DevNozzleRack::CtrlRackUpgrade(), Slic3r::GUI::ObjectList::layers_editing(), Slic3r::GUI::Plater::priv::load_files(), Slic3r::GUI::Plater::priv::on_action_layersediting(), Slic3r::GUI::RichMessageDialog::ShowModal(), Slic3r::GUI::MediaPlayCtrl::ToggleStream(), and Slic3r::GUI::ConfigManipulation::update_print_fff_config().

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

◆ ShowModal()

◆ storage()

std::string Slic3r::GUI::PrintHostSendDialog::storage ( ) const
inherited
654{
655 if (!combo_storage)
656 return GUI::format("%1%", m_preselected_storage);
657 if (combo_storage->GetSelection() < 0 || combo_storage->GetSelection() >= int(m_paths.size()))
658 return {};
659 return into_u8(m_paths[combo_storage->GetSelection()]);
660}
wxArrayString m_paths
Definition PrintHostDialogs.hpp:60
wxString m_preselected_storage
Definition PrintHostDialogs.hpp:59
std::string format(const char *fmt, TArgs &&... args)
Definition format.hpp:36

References combo_storage, Slic3r::GUI::format(), Slic3r::GUI::into_u8(), m_paths, and m_preselected_storage.

Referenced by EndModal().

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

◆ switch_to_device_tab()

bool Slic3r::GUI::PrintHostSendDialog::switch_to_device_tab ( ) const
inlineinherited
bool m_switch_to_device_tab
Definition PrintHostDialogs.hpp:61

References m_switch_to_device_tab.

Referenced by Slic3r::GUI::CrealityPrintHostSendDialog::CrealityPrintHostSendDialog(), Slic3r::GUI::ElegooPrintHostSendDialog::ElegooPrintHostSendDialog(), Slic3r::GUI::FlashforgePrintHostSendDialog::FlashforgePrintHostSendDialog(), and PrintHostSendDialog().

Here is the caller graph for this function:

◆ update_em_unit()

void Slic3r::GUI::DPIAware< wxDialog >::update_em_unit ( )
inlineprivateinherited
250 {
251 // Linux specific issue : get_dpi_for_window(this) still doesn't responce to the Display's scale in new wxWidgets(3.1.3).
252 // So, calculate the m_em_unit value from the font size, as before
253#if !defined(__WXGTK__)
255#else
256 // initialize default width_unit according to the width of the one symbol ("m") of the currently active font of this window.
257 m_em_unit = std::max<size_t>(10, this->GetTextExtent("m").x - 1);
258#endif // __WXGTK__
259 }

Member Data Documentation

◆ boldfont

wxFont Slic3r::GUI::MsgDialog::boldfont
protectedinherited

◆ btn_sizer

wxBoxSizer* Slic3r::GUI::MsgDialog::btn_sizer
protectedinherited

◆ combo_groups

wxComboBox* Slic3r::GUI::PrintHostSendDialog::combo_groups
protectedinherited

◆ combo_storage

wxComboBox* Slic3r::GUI::PrintHostSendDialog::combo_storage
protectedinherited

◆ CONFIG_KEY_ENABLESELFTEST

const char* Slic3r::GUI::CrealityPrintHostSendDialog::CONFIG_KEY_ENABLESELFTEST = "crealityprint_enable_self_test"
staticconstexprprivate

Referenced by init().

◆ content_sizer

◆ logo

wxStaticBitmap* Slic3r::GUI::MsgDialog::logo
protectedinherited

◆ m_buttons

MsgButtonsHash Slic3r::GUI::MsgDialog::m_buttons
protectedinherited

◆ m_can_rescale

bool Slic3r::GUI::DPIAware< wxDialog >::m_can_rescale
privateinherited
235{ true };

◆ m_checkbox_dsa

CheckBox* Slic3r::GUI::MsgDialog::m_checkbox_dsa {nullptr}
protectedinherited

◆ m_dsa_sizer

wxBoxSizer* Slic3r::GUI::MsgDialog::m_dsa_sizer
protectedinherited

Referenced by MsgDialog(), and show_dsa_button().

◆ m_em_unit

int Slic3r::GUI::DPIAware< wxDialog >::m_em_unit
privateinherited

◆ m_enableSelfTest

bool Slic3r::GUI::CrealityPrintHostSendDialog::m_enableSelfTest
private

◆ m_force_rescale

bool Slic3r::GUI::DPIAware< wxDialog >::m_force_rescale
privateinherited
236{ false };

◆ m_forward_str

wxString Slic3r::GUI::MsgDialog::m_forward_str
protectedinherited

Referenced by MsgDialog(), and apply_style().

◆ m_new_font_point_size

int Slic3r::GUI::DPIAware< wxDialog >::m_new_font_point_size
privateinherited

◆ m_normal_font

wxFont Slic3r::GUI::DPIAware< wxDialog >::m_normal_font
privateinherited

◆ m_path

boost::filesystem::path Slic3r::GUI::PrintHostSendDialog::m_path
protectedinherited

◆ m_paths

wxArrayString Slic3r::GUI::PrintHostSendDialog::m_paths
protectedinherited

◆ m_post_actions

◆ m_preselected_storage

wxString Slic3r::GUI::PrintHostSendDialog::m_preselected_storage
protectedinherited

◆ m_prev_scale_factor

float Slic3r::GUI::DPIAware< wxDialog >::m_prev_scale_factor
privateinherited

◆ m_printer_slots

std::vector<SlotInfo> Slic3r::GUI::CrealityPrintHostSendDialog::m_printer_slots
private

Referenced by extendedInfo(), and init().

◆ m_printhost

PrintHost* Slic3r::GUI::CrealityPrintHostSendDialog::m_printhost
private

◆ m_scale_factor

float Slic3r::GUI::DPIAware< wxDialog >::m_scale_factor
privateinherited

◆ m_slot_combos

std::vector<BitmapComboBox*> Slic3r::GUI::CrealityPrintHostSendDialog::m_slot_combos
private

Referenced by extendedInfo(), and init().

◆ m_storage_names

wxArrayString Slic3r::GUI::PrintHostSendDialog::m_storage_names
protectedinherited

◆ m_switch_to_device_tab

bool Slic3r::GUI::PrintHostSendDialog::m_switch_to_device_tab
protectedinherited

◆ m_valid_suffix

wxString Slic3r::GUI::PrintHostSendDialog::m_valid_suffix
protectedinherited

◆ post_upload_action

◆ txt_filename

wxTextCtrl* Slic3r::GUI::PrintHostSendDialog::txt_filename
protectedinherited

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