NEW:optimizing error info for network requests

Change-Id: I8656c2f899b086b5ab52d94b7186e64df1625e3e
This commit is contained in:
tao wang 2023-05-04 17:52:22 +08:00 committed by Lane.Wei
parent 7b12dcb6ea
commit 8b490adc51
27 changed files with 1133 additions and 637 deletions

View file

@ -0,0 +1,3 @@
<svg width="7" height="7" viewBox="0 0 7 7" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.84691 3.72084C6.04317 3.87625 6.32909 3.8633 6.51041 3.68198C6.70567 3.48672 6.70567 3.17014 6.51041 2.97488L3.68198 0.146449L3.63837 0.107596C3.44211 -0.0478172 3.15619 -0.0348658 2.97487 0.146449L0.146447 2.97488L0.107593 3.01849C-0.0478193 3.21475 -0.0348682 3.50067 0.146447 3.68198L0.190057 3.72084C0.386316 3.87625 0.672239 3.8633 0.853553 3.68198L3.32847 1.20711L5.8033 3.68198L5.84691 3.72084ZM5.84691 6.72084C6.04317 6.87625 6.32909 6.8633 6.51041 6.68198C6.70567 6.48672 6.70567 6.17014 6.51041 5.97488L3.68198 3.14645L3.63837 3.1076C3.44211 2.95218 3.15619 2.96513 2.97487 3.14645L0.146447 5.97488L0.107594 6.01849C-0.0478191 6.21475 -0.0348681 6.50067 0.146447 6.68198L0.190057 6.72084C0.386316 6.87625 0.672239 6.8633 0.853554 6.68198L3.32848 4.20711L5.8033 6.68198L5.84691 6.72084Z" fill="#6B6B6B"/>
</svg>

After

Width:  |  Height:  |  Size: 965 B

View file

@ -0,0 +1,3 @@
<svg width="7" height="7" viewBox="0 0 7 7" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.809942 3.10759C0.613683 2.95218 0.327761 2.96513 0.146446 3.14645C-0.0488168 3.34171 -0.0488168 3.65829 0.146446 3.85355L2.97487 6.68198L3.01848 6.72083C3.21474 6.87625 3.50066 6.8633 3.68198 6.68198L6.51041 3.85355L6.54926 3.80994C6.70467 3.61368 6.69172 3.32776 6.51041 3.14645L6.4668 3.10759C6.27054 2.95218 5.98461 2.96513 5.8033 3.14645L3.32838 5.62132L0.853552 3.14645L0.809942 3.10759ZM0.809941 0.107593C0.613683 -0.0478196 0.32776 -0.0348685 0.146445 0.146446C-0.0488167 0.341709 -0.0488167 0.658291 0.146445 0.853553L2.97487 3.68198L3.01848 3.72083C3.21474 3.87625 3.50066 3.8633 3.68198 3.68198L6.51041 0.853554L6.54926 0.809943C6.70467 0.613684 6.69172 0.327762 6.51041 0.146447L6.4668 0.107593C6.27054 -0.0478193 5.98461 -0.0348683 5.8033 0.146447L3.32838 2.62132L0.853552 0.146446L0.809941 0.107593Z" fill="#6B6B6B"/>
</svg>

After

Width:  |  Height:  |  Size: 982 B

View file

@ -128,7 +128,7 @@ void BBLStatusBar::clear_percent()
}
void BBLStatusBar::show_networking_test(wxString msg)
void BBLStatusBar::show_error_info(wxString msg, int code, wxString description, wxString extra)
{
}

View file

@ -45,7 +45,7 @@ public:
int get_range() const override;
void set_range(int = 100) override;
void clear_percent() override;
void show_networking_test(wxString msg) override;
void show_error_info(wxString msg, int code, wxString description, wxString extra) override;
void show_progress(bool);
void start_busy(int = 100);
void stop_busy();

View file

@ -24,19 +24,9 @@ BBLStatusBarBind::BBLStatusBarBind(wxWindow *parent, int id)
m_self->SetBackgroundColour(wxColour(255,255,255));
m_self->SetMinSize(wxSize(m_self->FromDIP(450), m_self->FromDIP(30)));
//wxBoxSizer *m_sizer_bottom = new wxBoxSizer(wxHORIZONTAL);
/* m_status_text = new wxStaticText(m_self, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0);
m_status_text->SetForegroundColour(wxColour(107, 107, 107));
m_status_text->SetFont(::Label::Body_13);
m_status_text->Wrap(-1);
m_sizer_body->Add(m_status_text, 0, 0, 0);*/
m_prog = new wxGauge(m_self, wxID_ANY, 100, wxDefaultPosition, wxSize(m_self->FromDIP(400), m_self->FromDIP(6)), wxGA_HORIZONTAL);
m_prog->SetValue(0);
m_stext_percent = new wxStaticText(m_self, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0);
m_stext_percent->SetForegroundColour(wxColour(107, 107, 107));
m_stext_percent->SetFont(::Label::Body_13);
@ -46,13 +36,9 @@ BBLStatusBarBind::BBLStatusBarBind(wxWindow *parent, int id)
m_sizer->Add(0, 0, 1, wxEXPAND, 0);
m_sizer->Add(m_stext_percent, 1, wxALIGN_CENTER, 0);
//m_sizer->Add(m_sizer_bottom, 1, wxALIGN_CENTER, 0);
m_self->SetSizer(m_sizer);
m_self->Layout();
m_sizer->Fit(m_self);
//set_prog_block();
}
void BBLStatusBarBind::set_prog_block()
@ -97,7 +83,7 @@ void BBLStatusBarBind::clear_percent()
}
void BBLStatusBarBind::show_networking_test(wxString msg)
void BBLStatusBarBind::show_error_info(wxString msg, int code, wxString description, wxString extra)
{
}

View file

@ -48,7 +48,7 @@ public:
int get_range() const override;
void set_range(int = 100) override;
void clear_percent() override;
void show_networking_test(wxString msg) override;
void show_error_info(wxString msg, int code, wxString description, wxString extra) override;
void show_progress(bool);
void start_busy(int = 100);
void stop_busy();

View file

@ -16,6 +16,7 @@
namespace Slic3r {
wxDEFINE_EVENT(EVT_SHOW_ERROR_INFO, wxCommandEvent);
BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id)
: m_self{new wxPanel(parent, id == -1 ? wxID_ANY : id)}
@ -29,8 +30,7 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id)
m_status_text = new wxStaticText(m_self, wxID_ANY, wxEmptyString);
m_status_text->SetForegroundColour(wxColour(107, 107, 107));
m_status_text->SetFont(::Label::Body_13);
m_status_text->SetSize(wxSize(m_self->FromDIP(300), m_self->FromDIP(46)));
m_status_text->SetMaxSize(wxSize(m_self->FromDIP(300), m_self->FromDIP(46)));
m_status_text->SetMaxSize(wxSize(m_self->FromDIP(360), m_self->FromDIP(40)));
m_prog = new wxGauge(m_self, wxID_ANY, 100, wxDefaultPosition, wxSize(-1, m_self->FromDIP(6)), wxGA_HORIZONTAL);
m_prog->SetMinSize(wxSize(m_self->FromDIP(300),m_self->FromDIP(6)));
@ -39,6 +39,7 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id)
StateColor btn_bd_white(std::pair<wxColour, int>(*wxWHITE, StateColor::Disabled), std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
m_cancelbutton = new Button(m_self, _L("Cancel"));
m_cancelbutton->SetSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22)));
m_cancelbutton->SetMinSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22)));
m_cancelbutton->SetMaxSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22)));
m_cancelbutton->SetBackgroundColor(wxColour(255, 255, 255));
@ -56,33 +57,62 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id)
m_stext_percent->SetFont(::Label::Body_13);
m_stext_percent->Wrap(-1);
m_hyperlink = new Label(m_self, _L("Check the status of current system services"));
m_hyperlink->SetForegroundColour(0x00AE42);
m_hyperlink->SetFont(::Label::Body_12);
m_hyperlink->Hide();
m_sizer_status_text = new wxBoxSizer(wxHORIZONTAL);
m_link_show_error = new Label(m_self, _L("Check the reason"));
m_link_show_error->SetForegroundColour(wxColour(0x6b6b6b));
m_link_show_error->SetFont(::Label::Head_13);
m_bitmap_show_error_close = create_scaled_bitmap("link_more_error_close", nullptr, 7);
m_bitmap_show_error_open = create_scaled_bitmap("link_more_error_open", nullptr, 7);
m_static_bitmap_show_error = new wxStaticBitmap(m_self, wxID_ANY, m_bitmap_show_error_open, wxDefaultPosition, wxSize(m_self->FromDIP(7), m_self->FromDIP(7)));
m_link_show_error->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {this->m_self->SetCursor(wxCURSOR_HAND); });
m_link_show_error->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {this->m_self->SetCursor(wxCURSOR_ARROW); });
m_link_show_error->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
if (!m_show_error_info_state) { m_show_error_info_state = true; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_close); }
else { m_show_error_info_state = false; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_open); }
wxCommandEvent* evt = new wxCommandEvent(EVT_SHOW_ERROR_INFO);
wxQueueEvent(this->m_self->GetParent(), evt);
});
m_link_show_error->Hide();
m_static_bitmap_show_error->Hide();
m_static_bitmap_show_error->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {this->m_self->SetCursor(wxCURSOR_HAND); });
m_static_bitmap_show_error->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {this->m_self->SetCursor(wxCURSOR_ARROW); });
m_static_bitmap_show_error->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
if (!m_show_error_info_state) {m_show_error_info_state = true;m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_close);}
else {m_show_error_info_state = false;m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_open);}
wxCommandEvent* evt = new wxCommandEvent(EVT_SHOW_ERROR_INFO);
wxQueueEvent(this->m_self->GetParent(), evt);
});
m_sizer_status_text->Add(m_link_show_error, 0, wxLEFT | wxALIGN_CENTER, 0);
m_sizer_status_text->Add(m_static_bitmap_show_error, 0, wxLEFT | wxTOP| wxALIGN_CENTER, m_self->FromDIP(2));
m_sizer_bottom->Add(m_prog, 1, wxALIGN_CENTER, 0);
m_sizer_bottom->Add(m_stext_percent, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10);
m_sizer_bottom->Add(m_hyperlink, 0, wxALIGN_CENTER, 10);
m_sizer_bottom->Add(m_sizer_status_text, 0, wxALIGN_CENTER, 10);
m_sizer_bottom->Add(0, 0, 1, wxEXPAND, 0);
m_sizer_bottom->Add(m_cancelbutton, 0, wxALIGN_CENTER, 0);
m_sizer_body->Add(m_status_text, 0, wxALL, 0);
m_sizer_body->Add(0, 0, 0, wxTOP, 1);
m_sizer_body->Add(m_sizer_bottom, 1, wxEXPAND, 0);
m_sizer_body->Add(0, 0, 1, wxEXPAND, 0);
m_sizer_body->Add(m_status_text, 0, wxEXPAND, 0);
m_sizer_body->Add(m_sizer_bottom, 0, wxEXPAND, 0);
m_sizer_body->Add(0, 0, 1, wxEXPAND, 0);
m_sizer->Add(m_sizer_body, 1, wxALIGN_CENTER, 0);
m_self->SetSizer(m_sizer);
m_self->Layout();
m_sizer->Fit(m_self);
//set_prog_block();
}
void BBLStatusBarSend::set_prog_block()
{
//block_left->SetPosition(wxPoint(0, 0));
//block_right->SetPosition(wxPoint(m_prog->GetSize().GetWidth() - 2, 0));
}
int BBLStatusBarSend::get_progress() const
@ -92,10 +122,7 @@ int BBLStatusBarSend::get_progress() const
void BBLStatusBarSend::set_progress(int val)
{
//set_prog_block();
if(val < 0)
return;
if(val < 0) return;
//add the logic for arrange/orient jobs, which don't call stop_busy
if (!m_prog->IsShown()) {
@ -126,48 +153,14 @@ void BBLStatusBarSend::clear_percent()
m_cancelbutton->Hide();
}
void BBLStatusBarSend::show_networking_test(wxString msg)
void BBLStatusBarSend::show_error_info(wxString msg, int code, wxString description, wxString extra)
{
std::string url;
std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code();
if (country_code == "US") {
url = "https://status.bambulab.com";
}
else if (country_code == "CN") {
url = "https://status.bambulab.cn";
}
else if (country_code == "ENV_CN_DEV") {
url = "https://status.bambu-lab.com";
}
else if (country_code == "ENV_CN_QA") {
url = "https://status.bambu-lab.com";
}
else if (country_code == "ENV_CN_PRE") {
url = "https://status.bambu-lab.com";
}
else {
url = "https://status.bambu-lab.com";
}
m_hyperlink->Bind(wxEVT_LEFT_DOWN, [this, url](auto& e) {
wxLaunchDefaultBrowser(url);
});
m_hyperlink->Bind(wxEVT_ENTER_WINDOW, [this, url](auto& e) {
m_hyperlink->SetCursor(wxCURSOR_HAND);
});
m_hyperlink->Bind(wxEVT_LEAVE_WINDOW, [this, url](auto& e) {
m_hyperlink->SetCursor(wxCURSOR_ARROW);
});
set_status_text(msg);
m_prog->Hide();
m_stext_percent->Hide();
m_hyperlink->Show();
m_link_show_error->Show();
m_static_bitmap_show_error->Show();
m_cancelbutton->Show();
m_self->Layout();
m_sizer->Layout();
@ -283,9 +276,15 @@ void BBLStatusBarSend::set_status_text(const wxString& txt)
//auto txtss = "Sending the printing task has timed out.\nPlease try again!";
//auto txtss = "The printing project is being uploaded... 25%%";
//m_status_text->SetLabelText(txtss);
wxString str;
format_text(m_status_text, m_self->FromDIP(300), txt, str);
m_status_text->SetLabelText(str);
//wxString str;
//format_text(m_status_text, m_self->FromDIP(300), txt, str);
if (m_status_text->GetTextExtent(txt).x > m_self->FromDIP(360)) {
m_status_text->SetSize(m_self->FromDIP(360), m_self->FromDIP(40));
}
m_status_text->SetLabelText(txt);
m_status_text->Wrap(m_self->FromDIP(360));
m_status_text->Layout();
m_self->Layout();
//if (is_english_text(str)) m_status_text->Wrap(m_self->FromDIP(280));
}
@ -317,9 +316,7 @@ wxString BBLStatusBarSend::get_status_text() const
bool BBLStatusBarSend::update_status(wxString &msg, bool &was_cancel, int percent, bool yield)
{
//auto test_txt = _L("Unkown Error.") + _L("status=150, body=Timeout was reached: Connection timed out after 10009 milliseconds [Error 28]");
set_status_text(msg);
if (percent >= 0)
this->set_progress(percent);
@ -331,7 +328,8 @@ bool BBLStatusBarSend::update_status(wxString &msg, bool &was_cancel, int percen
void BBLStatusBarSend::reset()
{
m_hyperlink->Hide();
m_link_show_error->Hide();
m_static_bitmap_show_error->Hide();
m_prog->Show();
m_stext_percent->Show();
m_cancelbutton->Show();

View file

@ -30,7 +30,11 @@ class BBLStatusBarSend : public ProgressIndicator
{
wxPanel * m_self; // we cheat! It should be the base class but: perl!
wxGauge * m_prog;
Label * m_hyperlink;
Label * m_link_show_error;
wxBoxSizer* m_sizer_status_text;
wxStaticBitmap* m_static_bitmap_show_error;
wxBitmap m_bitmap_show_error_close;
wxBitmap m_bitmap_show_error_open;
Button * m_cancelbutton;
wxStaticText *m_status_text;
wxStaticText *m_stext_percent;
@ -51,7 +55,7 @@ public:
int get_range() const override;
void set_range(int = 100) override;
void clear_percent() override;
void show_networking_test(wxString msg) override;
void show_error_info(wxString msg, int code, wxString description, wxString extra) override;
void show_progress(bool);
void start_busy(int = 100);
void stop_busy();
@ -81,6 +85,7 @@ public:
void change_button_label(wxString name);
private:
bool m_show_error_info_state = false;
bool m_busy = false;
bool m_was_cancelled = false;
CancelFn m_cancel_cb;
@ -91,6 +96,8 @@ namespace GUI {
using Slic3r::BBLStatusBarSend;
}
wxDECLARE_EVENT(EVT_SHOW_ERROR_INFO, wxCommandEvent);
} // namespace Slic3r
#endif // BBLSTATUSBAR_HPP

View file

@ -15,9 +15,44 @@
namespace Slic3r {
namespace GUI {
wxString get_fail_reason(int code)
{
if (code == BAMBU_NETWORK_ERR_BIND_CREATE_SOCKET_FAILED)
return _L("Failed to create socket");
else if (code == BAMBU_NETWORK_ERR_BIND_SOCKET_CONNECT_FAILED)
return _L("Failed to connect socket");
else if (code == BAMBU_NETWORK_ERR_BIND_PUBLISH_LOGIN_REQUEST)
return _L("Failed to publish login request");
else if (code == BAMBU_NETWORK_ERR_BIND_GET_PRINTER_TICKET_TIMEOUT)
return _L("Get ticket from device timeout");
else if (code == BAMBU_NETWORK_ERR_BIND_GET_CLOUD_TICKET_TIMEOUT)
return _L("Get ticket from server timeout");
else if (code == BAMBU_NETWORK_ERR_BIND_POST_TICKET_TO_CLOUD_FAILED)
return _L("Failed to post ticket to server");
else if (code == BAMBU_NETWORK_ERR_BIND_PARSE_LOGIN_REPORT_FAILED)
return _L("Failed to parse login report reason");
else if (code == BAMBU_NETWORK_ERR_BIND_RECEIVE_LOGIN_REPORT_TIMEOUT)
return _L("Receive login report timeout");
else
return _L("Unknown Failure");
}
BindMachineDialog::BindMachineDialog(Plater *plater /*= nullptr*/)
: DPIDialog(static_cast<wxWindow *>(wxGetApp().mainframe), wxID_ANY, _L("Log in printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION)
{
#ifdef __WINDOWS__
SetDoubleBuffered(true);
#endif //__WINDOWS__
std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str();
SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
@ -116,12 +151,128 @@ namespace GUI {
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(20));
m_status_text = new wxStaticText(this, wxID_ANY, _L("Would you like to log in this printer with current account?"), wxDefaultPosition,
wxSize(BIND_DIALOG_BUTTON_PANEL_SIZE.x, -1), wxST_ELLIPSIZE_END);
auto m_sizer_status_text = new wxBoxSizer(wxHORIZONTAL);
m_status_text = new wxStaticText(this, wxID_ANY, _L("Would you like to log in this printer with current account?"));
m_status_text->SetForegroundColour(wxColour(107, 107, 107));
m_status_text->SetFont(::Label::Body_13);
m_status_text->Wrap(-1);
m_link_show_error = new wxStaticText(this, wxID_ANY, _L("Check the reason"));
m_link_show_error->SetForegroundColour(wxColour(0x6b6b6b));
m_link_show_error->SetFont(::Label::Head_13);
m_bitmap_show_error_close = create_scaled_bitmap("link_more_error_close",nullptr, 7);
m_bitmap_show_error_open = create_scaled_bitmap("link_more_error_open",nullptr, 7);
m_static_bitmap_show_error = new wxStaticBitmap(this, wxID_ANY, m_bitmap_show_error_open, wxDefaultPosition, wxSize(FromDIP(7), FromDIP(7)));
m_link_show_error->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); });
m_link_show_error->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
m_link_show_error->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
if (!m_show_error_info_state) { m_show_error_info_state = true; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_open); }
else { m_show_error_info_state = false; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_close); }
show_bind_failed_info(true);}
);
m_static_bitmap_show_error->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); });
m_static_bitmap_show_error->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
m_static_bitmap_show_error->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
if (!m_show_error_info_state) { m_show_error_info_state = true; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_open); }
else { m_show_error_info_state = false; m_static_bitmap_show_error->SetBitmap(m_bitmap_show_error_close); }
show_bind_failed_info(true);
});
m_link_show_error->Hide();
m_static_bitmap_show_error->Hide();
m_sizer_status_text->SetMinSize(wxSize(BIND_DIALOG_BUTTON_PANEL_SIZE.x, -1));
m_sizer_status_text->Add(m_status_text, 0, wxALIGN_CENTER, 0);
m_sizer_status_text->Add(m_link_show_error, 0, wxLEFT|wxALIGN_CENTER, FromDIP(8));
m_sizer_status_text->Add(m_static_bitmap_show_error, 0, wxLEFT|wxALIGN_CENTER, FromDIP(2));
//show bind failed info
m_sw_bind_failed_info = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(450), FromDIP(300)), wxVSCROLL);
m_sw_bind_failed_info->SetBackgroundColour(*wxWHITE);
m_sw_bind_failed_info->SetScrollRate(5, 5);
m_sw_bind_failed_info->SetMinSize(wxSize(FromDIP(450), FromDIP(90)));
m_sw_bind_failed_info->SetMaxSize(wxSize(FromDIP(450), FromDIP(90)));
wxBoxSizer* m_sizer_bind_failed_info = new wxBoxSizer(wxVERTICAL);
m_sw_bind_failed_info->SetSizer( m_sizer_bind_failed_info );
m_link_network_state = new Label(m_sw_bind_failed_info, _L("Check the status of current system services"));
m_link_network_state->SetForegroundColour(0x00AE42);
m_link_network_state->SetFont(::Label::Body_12);
m_link_network_state->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {link_to_network_check(); });
m_link_network_state->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_HAND); });
m_link_network_state->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_ARROW); });
wxBoxSizer* sizer_error_code = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer_error_desc = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer_extra_info = new wxBoxSizer(wxHORIZONTAL);
auto st_title_error_code = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, _L("Error code"));
auto st_title_error_code_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": ");
m_st_txt_error_code = new Label(m_sw_bind_failed_info, wxEmptyString);
st_title_error_code->SetForegroundColour(0x909090);
st_title_error_code_doc->SetForegroundColour(0x909090);
m_st_txt_error_code->SetForegroundColour(0x909090);
st_title_error_code->SetFont(::Label::Body_13);
st_title_error_code_doc->SetFont(::Label::Body_13);
m_st_txt_error_code->SetFont(::Label::Body_13);
st_title_error_code->SetMinSize(wxSize(FromDIP(80), -1));
st_title_error_code->SetMaxSize(wxSize(FromDIP(80), -1));
m_st_txt_error_code->SetMinSize(wxSize(FromDIP(340), -1));
m_st_txt_error_code->SetMaxSize(wxSize(FromDIP(340), -1));
sizer_error_code->Add(st_title_error_code, 0, wxALL, 0);
sizer_error_code->Add(st_title_error_code_doc, 0, wxALL, 0);
sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0);
auto st_title_error_desc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, wxT("Error desc"));
auto st_title_error_desc_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": ");
m_st_txt_error_desc = new Label(m_sw_bind_failed_info, wxEmptyString);
st_title_error_desc->SetForegroundColour(0x909090);
st_title_error_desc_doc->SetForegroundColour(0x909090);
m_st_txt_error_desc->SetForegroundColour(0x909090);
st_title_error_desc->SetFont(::Label::Body_13);
st_title_error_desc_doc->SetFont(::Label::Body_13);
m_st_txt_error_desc->SetFont(::Label::Body_13);
st_title_error_desc->SetMinSize(wxSize(FromDIP(80), -1));
st_title_error_desc->SetMaxSize(wxSize(FromDIP(80), -1));
m_st_txt_error_desc->SetMinSize(wxSize(FromDIP(340), -1));
m_st_txt_error_desc->SetMaxSize(wxSize(FromDIP(340), -1));
sizer_error_desc->Add(st_title_error_desc, 0, wxALL, 0);
sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0);
sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0);
auto st_title_extra_info = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, wxT("Extra info"));
auto st_title_extra_info_doc = new wxStaticText(m_sw_bind_failed_info, wxID_ANY, ": ");
m_st_txt_extra_info = new Label(m_sw_bind_failed_info, wxEmptyString);
st_title_extra_info->SetForegroundColour(0x909090);
st_title_extra_info_doc->SetForegroundColour(0x909090);
m_st_txt_extra_info->SetForegroundColour(0x909090);
st_title_extra_info->SetFont(::Label::Body_13);
st_title_extra_info_doc->SetFont(::Label::Body_13);
m_st_txt_extra_info->SetFont(::Label::Body_13);
st_title_extra_info->SetMinSize(wxSize(FromDIP(80), -1));
st_title_extra_info->SetMaxSize(wxSize(FromDIP(80), -1));
m_st_txt_extra_info->SetMinSize(wxSize(FromDIP(340), -1));
m_st_txt_extra_info->SetMaxSize(wxSize(FromDIP(340), -1));
sizer_extra_info->Add(st_title_extra_info, 0, wxALL, 0);
sizer_extra_info->Add(st_title_extra_info_doc, 0, wxALL, 0);
sizer_extra_info->Add(m_st_txt_extra_info, 0, wxALL, 0);
m_sizer_bind_failed_info->Add(m_link_network_state, 0, wxLEFT, 0);
m_sizer_bind_failed_info->Add(sizer_error_code, 0, wxLEFT, 0);
m_sizer_bind_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3));
m_sizer_bind_failed_info->Add(sizer_error_desc, 0, wxLEFT, 0);
m_sizer_bind_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3));
m_sizer_bind_failed_info->Add(sizer_extra_info, 0, wxLEFT, 0);
m_simplebook = new wxSimplebook(this, wxID_ANY, wxDefaultPosition,BIND_DIALOG_BUTTON_PANEL_SIZE, 0);
m_simplebook->SetBackgroundColour(*wxWHITE);
@ -165,8 +316,11 @@ namespace GUI {
//m_sizer_main->Add(m_sizer_button, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30));
m_sizer_main->Add(m_status_text, 0, wxALIGN_CENTER, 0);
show_bind_failed_info(false);
m_sizer_main->Add(m_sizer_status_text, 0, wxALIGN_CENTER, FromDIP(40));
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10));
m_sizer_main->Add(m_sw_bind_failed_info, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(m_simplebook, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(20));
@ -198,20 +352,64 @@ namespace GUI {
this->Disconnect(EVT_BIND_UPDATE_MESSAGE, wxCommandEventHandler(BindMachineDialog::on_update_message), NULL, this);
}
//static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
//{
// register int realsize = size * nmemb;
// struct MemoryStruct *mem = (struct MemoryStruct *) userp;
// mem->memory = (char *) realloc(mem->memory, mem->size + realsize + 1);
// if (mem->memory) {
// memcpy(&(mem->memory[mem->size]), contents, realsize);
// mem->size += realsize;
// mem->memory[mem->size] = 0;
// }
// return realsize;
//}
void BindMachineDialog::link_to_network_check()
{
std::string url;
std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code();
if (country_code == "US") {
url = "https://status.bambulab.com";
}
else if (country_code == "CN") {
url = "https://status.bambulab.cn";
}
else if (country_code == "ENV_CN_DEV") {
url = "https://status.bambu-lab.com";
}
else if (country_code == "ENV_CN_QA") {
url = "https://status.bambu-lab.com";
}
else if (country_code == "ENV_CN_PRE") {
url = "https://status.bambu-lab.com";
}
else {
url = "https://status.bambu-lab.com";
}
wxLaunchDefaultBrowser(url);
}
void BindMachineDialog::show_bind_failed_info(bool show, int code, wxString description, wxString extra)
{
if (show) {
if (!m_sw_bind_failed_info->IsShown()) {
m_sw_bind_failed_info->Show(true);
m_st_txt_error_code->SetLabelText(wxString::Format("%d", m_result_code));
m_st_txt_error_desc->SetLabelText(m_result_info);
m_st_txt_extra_info->SetLabelText(m_result_extra);
m_st_txt_error_code->Wrap(FromDIP(260));
m_st_txt_error_desc->Wrap(FromDIP(260));
m_st_txt_extra_info->Wrap(FromDIP(260));
}
else {
m_sw_bind_failed_info->Show(false);
}
Layout();
Fit();
}
else {
if (!m_sw_bind_failed_info->IsShown()) { return; }
m_sw_bind_failed_info->Show(false);
m_st_txt_error_code->SetLabelText(wxEmptyString);
m_st_txt_error_desc->SetLabelText(wxEmptyString);
m_st_txt_extra_info->SetLabelText(wxEmptyString);
Layout();
Fit();
}
}
void BindMachineDialog::on_cancel(wxCommandEvent &event)
{
on_destroy();
@ -238,8 +436,15 @@ namespace GUI {
void BindMachineDialog::on_bind_fail(wxCommandEvent &event)
{
//m_status_text->SetLabel(_L("Would you like to log in this printer with current account?"));
m_simplebook->SetSelection(1);
m_link_show_error->Show(true);
m_static_bitmap_show_error->Show(true);
m_result_code = event.GetInt();
m_result_info = get_fail_reason(event.GetInt()).ToStdString();
m_result_extra = event.GetString().ToStdString();
show_bind_failed_info(true, event.GetInt(), get_fail_reason(event.GetInt()), event.GetString());
}
void BindMachineDialog::on_update_message(wxCommandEvent &event)
@ -256,6 +461,11 @@ namespace GUI {
void BindMachineDialog::on_bind_printer(wxCommandEvent &event)
{
m_result_code = 0;
m_result_extra = "";
m_result_info = "";
show_bind_failed_info(false);
//check isset info
if (m_machine_info == nullptr || m_machine_info == NULL) return;
@ -281,6 +491,10 @@ void BindMachineDialog::on_dpi_changed(const wxRect &suggested_rect)
void BindMachineDialog::on_show(wxShowEvent &event)
{
m_result_code = 0;
m_result_extra = "";
m_result_info = "";
if (event.IsShown()) {
auto img = m_machine_info->get_printer_thumbnail_img_str();
if (wxGetApp().dark_mode()) { img += "_dark"; }
@ -398,11 +612,9 @@ UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/)
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(20));
m_status_text = new wxStaticText(this, wxID_ANY, _L("Would you like to log out the printer?"), wxDefaultPosition,
wxSize(BIND_DIALOG_BUTTON_PANEL_SIZE.x, -1), wxST_ELLIPSIZE_END);
m_status_text = new wxStaticText(this, wxID_ANY, _L("Would you like to log out the printer?"), wxDefaultPosition, wxSize(BIND_DIALOG_BUTTON_PANEL_SIZE.x, -1), wxST_ELLIPSIZE_END);
m_status_text->SetForegroundColour(wxColour(107, 107, 107));
m_status_text->SetFont(::Label::Body_13);
m_status_text->Wrap(-1);

View file

@ -51,12 +51,26 @@ private:
StaticBox * m_panel_left;
StaticBox * m_panel_right;
wxStaticText *m_status_text;
wxStaticText* m_link_show_error;
Button * m_button_bind;
Button * m_button_cancel;
wxSimplebook *m_simplebook;
wxStaticBitmap *m_avatar;
wxStaticBitmap *m_printer_img;
wxStaticBitmap *m_static_bitmap_show_error;
wxBitmap m_bitmap_show_error_close;
wxBitmap m_bitmap_show_error_open;
wxWebRequest web_request;
wxScrolledWindow* m_sw_bind_failed_info;
Label* m_bind_failed_info;
Label* m_st_txt_error_code{ nullptr };
Label* m_st_txt_error_desc{ nullptr };
Label* m_st_txt_extra_info{ nullptr };
Label* m_link_network_state{ nullptr };
std::string m_result_info;
std::string m_result_extra;
bool m_show_error_info_state = true;
int m_result_code;
MachineObject * m_machine_info{nullptr};
std::shared_ptr<BindJob> m_bind_job;
@ -65,7 +79,9 @@ private:
public:
BindMachineDialog(Plater *plater = nullptr);
~BindMachineDialog();
void on_cancel(wxCommandEvent &event);
void link_to_network_check();
void show_bind_failed_info(bool show, int code = 0, wxString description = wxEmptyString, wxString extra = wxEmptyString);
void on_cancel(wxCommandEvent& event);
void on_bind_fail(wxCommandEvent &event);
void on_update_message(wxCommandEvent &event);
void on_bind_success(wxCommandEvent &event);

View file

@ -16,22 +16,6 @@ static wxString waiting_auth_str = _L("Logging in");
static wxString login_failed_str = _L("Login failed");
wxString get_login_fail_reason(std::string fail_reason)
{
if (fail_reason == "NO Regions")
return _L("The region parameter is incorrrect");
else if (fail_reason == "Cloud Timeout")
return _L("Failure of printer login");
else if (fail_reason == "Ticket Failed")
return _L("Failed to get ticket");
else if (fail_reason == "Wait Auth Timeout")
return _L("User authorization timeout");
else if (fail_reason == "Bind Failure")
return _L("Failure of bind");
else
return _L("Unknown Failure");
}
BindJob::BindJob(std::shared_ptr<ProgressIndicator> pri, Plater *plater, std::string dev_id, std::string dev_ip, std::string sec_link)
: PlaterJob{std::move(pri), plater},
m_dev_id(dev_id),
@ -59,7 +43,6 @@ void BindJob::on_success(std::function<void()> success)
void BindJob::update_status(int st, const wxString &msg)
{
GUI::Job::update_status(st, msg);
//post_event(wxCommandEvent(EVT_BIND_UPDATE_MESSAGE), msg);
wxCommandEvent event(EVT_BIND_UPDATE_MESSAGE);
event.SetString(msg);
event.SetEventObject(m_event_handle);
@ -68,6 +51,9 @@ void BindJob::update_status(int st, const wxString &msg)
void BindJob::process()
{
int result_code = 0;
std::string result_info;
/* display info */
wxString msg = waiting_auth_str;
int curr_percent = 0;
@ -81,7 +67,11 @@ void BindJob::process()
std::string timezone = get_timezone_utc_hm(offset);
int result = m_agent->bind(m_dev_ip, m_dev_id, m_sec_link, timezone,
[this, &curr_percent, &msg](int stage, int code, std::string info) {
[this, &curr_percent, &msg, &result_code, &result_info](int stage, int code, std::string info) {
result_code = code;
result_info = info;
if (stage == BBL::BindJobStage::LoginStageConnect) {
curr_percent = 15;
msg = _L("Logging in");
@ -103,8 +93,9 @@ void BindJob::process()
} else {
msg = _L("Logging in");
}
if (code != 0) {
msg = _L("Login failed") + wxString::Format("(code=%d,info=%s). ", code, info);
msg = _L("Login failed");
if (code == BAMBU_NETWORK_ERR_TIMEOUT) {
msg += _L("Please check the printer network connection.");
}
@ -115,14 +106,14 @@ void BindJob::process()
if (result < 0) {
BOOST_LOG_TRIVIAL(trace) << "login: result = " << result;
post_fail_event();
post_fail_event(result_code, result_info);
return;
}
DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev) {
BOOST_LOG_TRIVIAL(trace) << "login: dev is null";
post_fail_event();
post_fail_event(result_code, result_info);
return;
}
dev->update_user_machine_list_info();
@ -145,9 +136,11 @@ void BindJob::set_event_handle(wxWindow *hanle)
m_event_handle = hanle;
}
void BindJob::post_fail_event()
void BindJob::post_fail_event(int code, std::string info)
{
wxCommandEvent event(EVT_BIND_MACHINE_FAIL);
event.SetInt(code);
event.SetString(info);
event.SetEventObject(m_event_handle);
wxPostEvent(m_event_handle, event);
}

View file

@ -37,7 +37,7 @@ public:
void process() override;
void finalize() override;
void set_event_handle(wxWindow* hanle);
void post_fail_event();
void post_fail_event(int code, std::string info);
};
wxDECLARE_EVENT(EVT_BIND_UPDATE_MESSAGE, wxCommandEvent);

View file

@ -35,9 +35,9 @@ void GUI::Job::update_percent_finish()
m_progress->clear_percent();
}
void GUI::Job::show_networking_test(wxString msg)
void GUI::Job::show_error_info(wxString msg, int code, wxString description, wxString extra)
{
m_progress->show_networking_test(msg);
m_progress->show_error_info(msg, code, description, extra);
}
GUI::Job::Job(std::shared_ptr<ProgressIndicator> pri)

View file

@ -47,7 +47,7 @@ protected:
void update_percent_finish();
void show_networking_test(wxString msg);
void show_error_info(wxString msg, int code, wxString description, wxString extra);
bool was_canceled() const { return m_canceled.load(); }

View file

@ -10,7 +10,7 @@ void NotificationProgressIndicator::clear_percent()
}
void NotificationProgressIndicator::show_networking_test(wxString msg)
void NotificationProgressIndicator::show_error_info(wxString msg, int code, wxString description, wxString extra)
{
}

View file

@ -15,7 +15,7 @@ public:
explicit NotificationProgressIndicator(NotificationManager *nm);
void clear_percent() override;
void show_networking_test(wxString msg) override;
void show_error_info(wxString msg, int code, wxString description, wxString extra) override;
void set_range(int range) override;
void set_cancel_callback(CancelFn = CancelFn()) override;
void set_progress(int pr) override;

View file

@ -2,27 +2,31 @@
#include "libslic3r/MTUtils.hpp"
#include "libslic3r/Model.hpp"
#include "libslic3r/PresetBundle.hpp"
#include "bambu_networking.hpp"
#include "slic3r/GUI/Plater.hpp"
#include "slic3r/GUI/GUI.hpp"
#include "slic3r/GUI/GUI_App.hpp"
#include "bambu_networking.hpp"
namespace Slic3r {
namespace GUI {
static wxString check_gcode_failed_str = _L("Abnormal print file data. Please slice again");
static wxString printjob_cancel_str = _L("Task canceled");
static wxString timeout_to_upload_str = _L("Upload task timed out. Please check the network problem and try again");
static wxString check_gcode_failed_str = _L("Abnormal print file data. Please slice again.");
static wxString printjob_cancel_str = _L("Task canceled.");
static wxString timeout_to_upload_str = _L("Upload task timed out. Please check the network status and try again.");
static wxString failed_in_cloud_service_str = _L("Cloud service connection failed. Please try again.");
static wxString file_is_not_exists_str = _L("Print file not found, please slice again");
static wxString file_over_size_str = _L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again");
static wxString print_canceled_str = _L("Task canceled");
static wxString upload_failed_str = _L("Failed uploading print file");
static wxString upload_login_failed_str = _L("Wrong Access code");
static wxString file_is_not_exists_str = _L("Print file not found. please slice again.");
static wxString file_over_size_str = _L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again.");
static wxString print_canceled_str = _L("Task canceled.");
static wxString send_print_failed_str = _L("Failed to send the print job. Please try again.");
static wxString upload_ftp_failed_str = _L("Failed to upload file to ftp. Please try again.");
static wxString desc_network_error = _L("Check the current status of the bambu server by clicking on the link above.");
static wxString desc_file_too_large = _L("The size of the print file is too large. Please adjust the file size and try again.");
static wxString desc_fail_not_exist = _L("Print file not found, Please slice it again and send it for printing.");
static wxString desc_upload_ftp_failed = _L("Failed to upload print file to FTP. Please check the network status and try again.");
static wxString sending_over_lan_str = _L("Sending print job over LAN");
static wxString sending_over_cloud_str = _L("Sending print job through cloud service");
static wxString sending_over_lan_str = _L("Sending print job over LAN");
static wxString sending_over_cloud_str = _L("Sending print job through cloud service");
PrintJob::PrintJob(std::shared_ptr<ProgressIndicator> pri, Plater* plater, std::string dev_id)
: PlaterJob{ std::move(pri), plater },
@ -262,7 +266,16 @@ void PrintJob::process()
bool is_try_lan_mode = false;
bool is_try_lan_mode_failed = false;
auto update_fn = [this, &is_try_lan_mode, &is_try_lan_mode_failed, &msg, &error_str, &curr_percent, &error_text, StagePercentPoint](int stage, int code, std::string info) {
auto update_fn = [this,
&is_try_lan_mode,
&is_try_lan_mode_failed,
&msg,
&error_str,
&curr_percent,
&error_text,
StagePercentPoint
](int stage, int code, std::string info) {
if (stage == BBL::SendingPrintJobStage::PrintingStageCreate && !is_try_lan_mode_failed) {
if (this->connection_type == "lan") {
msg = _L("Sending print job over LAN");
@ -318,13 +331,21 @@ void PrintJob::process()
}
}
if (code > 100 || code < 0) {
error_text = this->get_http_error_msg(code, info);
error_str = wxString::Format("[%s]", error_text);
} else {
error_str = wxEmptyString;
//get errors
if (code > 100 || code < 0 || stage == BBL::SendingPrintJobStage::PrintingStageERROR) {
if (code == BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE || code == BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE) {
m_plater->update_print_error_info(code, desc_file_too_large.ToStdString(), info);
}else if (code == BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST || code == BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST){
m_plater->update_print_error_info(code, desc_fail_not_exist.ToStdString(), info);
}else if (code == BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED || code == BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED) {
m_plater->update_print_error_info(code, desc_upload_ftp_failed.ToStdString(), info);
}else {
m_plater->update_print_error_info(code, desc_network_error.ToStdString(), info);
}
}
else {
this->update_status(curr_percent, msg);
}
this->update_status(curr_percent, msg + error_str);
};
auto cancel_fn = [this]() {
@ -373,10 +394,7 @@ void PrintJob::process()
if (result == 0) {
params.comments = "";
}
else if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) {
params.comments = "wrong_code";
}
else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) {
else if (result == BAMBU_NETWORK_ERR_PRINT_WR_UPLOAD_FTP_FAILED) {
params.comments = "upload_failed";
}
else {
@ -407,41 +425,27 @@ void PrintJob::process()
}
if (result < 0) {
if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) {
msg_text = _L("Failed to send the print job. Please try again.");
} if (result == BAMBU_NETWORK_ERR_FILE_NOT_EXIST) {
curr_percent = -1;
if (result == BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST || result == BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST) {
msg_text = file_is_not_exists_str;
} else if (result == BAMBU_NETWORK_ERR_FILE_OVER_SIZE) {
} else if (result == BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE || result == BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE) {
msg_text = file_over_size_str;
} else if (result == BAMBU_NETWORK_ERR_CHECK_MD5_FAILED) {
} else if (result == BAMBU_NETWORK_ERR_PRINT_WR_CHECK_MD5_FAILED || result == BAMBU_NETWORK_ERR_PRINT_SP_CHECK_MD5_FAILED) {
msg_text = failed_in_cloud_service_str;
} else if (result == BAMBU_NETWORK_ERR_INVALID_PARAMS) {
msg_text = _L("Failed to send the print job. Please try again.");
} else if (result == BAMBU_NETWORK_ERR_PRINT_WR_GET_NOTIFICATION_TIMEOUT || result == BAMBU_NETWORK_ERR_PRINT_SP_GET_NOTIFICATION_TIMEOUT) {
msg_text = timeout_to_upload_str;
} else if (result == BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED || result == BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED) {
msg_text = upload_ftp_failed_str;
} else if (result == BAMBU_NETWORK_ERR_CANCELED) {
msg_text = print_canceled_str;
} else if (result == BAMBU_NETWORK_ERR_TIMEOUT) {
msg_text = timeout_to_upload_str;
} else if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) {
msg_text = _L("Failed to send the print job. Please try again.");
} else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) {
msg_text = _L("Failed to send the print job. Please try again.");
} else {
update_status(curr_percent, failed_in_cloud_service_str);
}
if (!error_text.IsEmpty()) {
curr_percent = 0;
msg_text += wxString::Format("[%d][%s]", result, error_text);
}
if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) {
this->show_networking_test(msg_text);
}
else {
update_status(curr_percent, msg_text);
msg_text = send_print_failed_str;
}
this->show_error_info(msg_text, 0, "", "");
BOOST_LOG_TRIVIAL(error) << "print_job: failed, result = " << result;
} else {
BOOST_LOG_TRIVIAL(error) << "print_job: send ok.";
wxCommandEvent* evt = new wxCommandEvent(m_print_job_completed_id);

View file

@ -33,9 +33,7 @@ class PrintJob : public PlaterJob
std::function<void()> m_enter_ip_address_fun_success{ nullptr };
protected:
void prepare() override;
void on_exception(const std::exception_ptr &) override;
public:
PrintJob(std::shared_ptr<ProgressIndicator> pri, Plater *plater, std::string dev_id = "");
@ -43,17 +41,18 @@ public:
std::string m_project_name;
std::string m_dev_ip;
std::string m_ftp_folder;
bool m_local_use_ssl { true };
std::string m_access_code;
std::string task_bed_type;
std::string task_ams_mapping;
std::string task_ams_mapping_info;
std::string connection_type;
bool m_local_use_ssl { true };
bool task_bed_leveling;
bool task_flow_cali;
bool task_vibration_cali;
bool task_record_timelapse;
bool task_layer_inspect;
std::string task_ams_mapping;
std::string task_ams_mapping_info;
std::string connection_type;
bool cloud_print_only { false };
bool has_sdcard { false };
bool task_use_ams { true };

View file

@ -18,7 +18,7 @@ public:
virtual ~ProgressIndicator() = default;
virtual void clear_percent() = 0;
virtual void show_networking_test(wxString msg) = 0;
virtual void show_error_info(wxString msg, int code, wxString description, wxString extra) = 0;
virtual void set_range(int range) = 0;
virtual void set_cancel_callback(CancelFn = CancelFn()) = 0;
virtual void set_progress(int pr) = 0;

View file

@ -9,20 +9,23 @@
namespace Slic3r {
namespace GUI {
static wxString check_gcode_failed_str = _L("Abnormal print file data. Please slice again");
static wxString printjob_cancel_str = _L("Task canceled");
static wxString timeout_to_upload_str = _L("Upload task timed out. Please check the network problem and try again");
static wxString failed_in_cloud_service_str = _L("Send to Printer failed. Please try again.");
static wxString file_is_not_exists_str = _L("Print file not found, please slice again");
static wxString file_over_size_str = _L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again");
static wxString print_canceled_str = _L("Task canceled");
static wxString upload_failed_str = _L("Failed uploading print file");
static wxString upload_login_failed_str = _L("Wrong Access code");
static wxString upload_no_space_left_str = _L("No space left on Printer SD card");
static wxString check_gcode_failed_str = _L("Abnormal print file data. Please slice again.");
static wxString printjob_cancel_str = _L("Task canceled.");
static wxString timeout_to_upload_str = _L("Upload task timed out. Please check the network status and try again.");
static wxString failed_in_cloud_service_str = _L("Cloud service connection failed. Please try again.");
static wxString file_is_not_exists_str = _L("Print file not found. please slice again.");
static wxString file_over_size_str = _L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again.");
static wxString print_canceled_str = _L("Task canceled.");
static wxString send_print_failed_str = _L("Failed to send the print job. Please try again.");
static wxString upload_ftp_failed_str = _L("Failed to upload file to ftp. Please try again.");
static wxString desc_network_error = _L("Check the current status of the bambu server by clicking on the link above.");
static wxString desc_file_too_large = _L("The size of the print file is too large. Please adjust the file size and try again.");
static wxString desc_fail_not_exist = _L("Print file not found, Please slice it again and send it for printing.");
static wxString desc_upload_ftp_failed = _L("Failed to upload print file to FTP. Please check the network status and try again.");
static wxString sending_over_lan_str = _L("Sending gcode file over LAN");
static wxString sending_over_cloud_str = _L("Sending gcode file through cloud service");
static wxString sending_over_lan_str = _L("Sending print job over LAN");
static wxString sending_over_cloud_str = _L("Sending print job through cloud service");
SendJob::SendJob(std::shared_ptr<ProgressIndicator> pri, Plater* plater, std::string dev_id)
: PlaterJob{ std::move(pri), plater },
@ -271,11 +274,24 @@ void SendJob::process()
}
}
if (code < 0 || code > 100) {
error_text = this->get_http_error_msg(code, info);
msg += wxString::Format("[%s]", error_text);
//get errors
if (code > 100 || code < 0 || stage == BBL::SendingPrintJobStage::PrintingStageERROR) {
if (code == BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE || code == BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE) {
m_plater->update_print_error_info(code, desc_file_too_large.ToStdString(), info);
}
else if (code == BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST || code == BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST) {
m_plater->update_print_error_info(code, desc_fail_not_exist.ToStdString(), info);
}
else if (code == BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED || code == BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED) {
m_plater->update_print_error_info(code, desc_upload_ftp_failed.ToStdString(), info);
}
else {
m_plater->update_print_error_info(code, desc_network_error.ToStdString(), info);
}
}
else {
this->update_status(curr_percent, msg);
}
this->update_status(curr_percent, msg);
};
auto cancel_fn = [this]() {
@ -300,9 +316,7 @@ void SendJob::process()
BOOST_LOG_TRIVIAL(info) << "send_job: try to send gcode to printer";
this->update_status(curr_percent, _L("Sending gcode file over LAN"));
result = m_agent->start_send_gcode_to_sdcard(params, update_fn, cancel_fn);
if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) {
params.comments = "wrong_code";
} else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) {
if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) {
params.comments = "upload_failed";
} else {
params.comments = (boost::format("failed(%1%)") % result).str();
@ -332,50 +346,38 @@ void SendJob::process()
}
if (result < 0) {
if (result == BAMBU_NETWORK_ERR_NO_SPACE_LEFT_ON_DEVICE) {
msg_text = upload_no_space_left_str;
} else if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) {
msg_text = upload_login_failed_str;
} else if (result == BAMBU_NETWORK_ERR_FILE_NOT_EXIST) {
curr_percent = -1;
if (result == BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST || result == BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST) {
msg_text = file_is_not_exists_str;
} else if (result == BAMBU_NETWORK_ERR_FILE_OVER_SIZE) {
}
else if (result == BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE || result == BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE) {
msg_text = file_over_size_str;
} else if (result == BAMBU_NETWORK_ERR_CHECK_MD5_FAILED) {
}
else if (result == BAMBU_NETWORK_ERR_PRINT_WR_CHECK_MD5_FAILED || result == BAMBU_NETWORK_ERR_PRINT_SP_CHECK_MD5_FAILED) {
msg_text = failed_in_cloud_service_str;
} else if (result == BAMBU_NETWORK_ERR_INVALID_PARAMS) {
msg_text = upload_failed_str;
} else if (result == BAMBU_NETWORK_ERR_CANCELED) {
}
else if (result == BAMBU_NETWORK_ERR_PRINT_WR_GET_NOTIFICATION_TIMEOUT || result == BAMBU_NETWORK_ERR_PRINT_SP_GET_NOTIFICATION_TIMEOUT) {
msg_text = timeout_to_upload_str;
}
else if (result == BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED || result == BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED) {
msg_text = upload_ftp_failed_str;
}
else if (result == BAMBU_NETWORK_ERR_CANCELED) {
msg_text = print_canceled_str;
} else if (result == BAMBU_NETWORK_ERR_TIMEOUT) {
msg_text = timeout_to_upload_str;
} else if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) {
msg_text = upload_failed_str;
} else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) {
msg_text = upload_failed_str;
} else {
update_status(curr_percent, failed_in_cloud_service_str);
}
else {
msg_text = send_print_failed_str;
}
if (!error_text.IsEmpty()) {
if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) {
msg_text += ". ";
msg_text += _L("Please log out and login to the printer again.");
}
else {
msg_text += wxString::Format("[%s]", error_text);
}
}
if (result == BAMBU_NETWORK_ERR_WRONG_IP_ADDRESS) {
msg_text = timeout_to_upload_str;
}
update_status(curr_percent, msg_text);
this->show_error_info(msg_text, 0, "", "");
BOOST_LOG_TRIVIAL(error) << "send_job: failed, result = " << result;
} else {
}
else {
BOOST_LOG_TRIVIAL(error) << "send_job: send ok.";
wxCommandEvent* evt = new wxCommandEvent(m_print_job_completed_id);
evt->SetString(from_u8(params.project_name));
evt->SetString(m_dev_id);
wxQueueEvent(m_plater, evt);
m_job_finished = true;
}

View file

@ -10501,6 +10501,17 @@ std::vector<std::string> Plater::get_colors_for_color_print(const GCodeProcessor
return colors;
}
void Plater::update_print_error_info(int code, std::string msg, std::string extra)
{
if (p->m_select_machine_dlg) {
p->m_select_machine_dlg->update_print_error_info(code, msg, extra);
}
if (p->m_send_to_sdcard_dlg) {
p->m_send_to_sdcard_dlg->update_print_error_info(code, msg, extra);
}
}
wxString Plater::get_project_filename(const wxString& extension) const
{
return p->get_project_filename(extension);

View file

@ -399,6 +399,7 @@ public:
wxString get_project_filename(const wxString& extension = wxEmptyString) const;
wxString get_export_gcode_filename(const wxString& extension = wxEmptyString, bool only_filename = false, bool export_all = false) const;
void set_project_filename(const wxString& filename);
void update_print_error_info(int code, std::string msg, std::string extra);
bool is_export_gcode_scheduled() const;

View file

@ -1058,13 +1058,13 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_panel_image = new wxPanel(m_scrollable_region, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_panel_image->SetBackgroundColour(m_colour_def_color);
sizer_thumbnail = new wxBoxSizer(wxVERTICAL);
m_sizer_thumbnail = new wxBoxSizer(wxVERTICAL);
m_thumbnailPanel = new ThumbnailPanel(m_panel_image);
m_thumbnailPanel->SetSize(wxSize(FromDIP(256), FromDIP(256)));
m_thumbnailPanel->SetMinSize(wxSize(FromDIP(256), FromDIP(256)));
m_thumbnailPanel->SetMaxSize(wxSize(FromDIP(256), FromDIP(256)));
sizer_thumbnail->Add(m_thumbnailPanel, 0, wxEXPAND, 0);
m_panel_image->SetSizer(sizer_thumbnail);
m_sizer_thumbnail->Add(m_thumbnailPanel, 0, wxEXPAND, 0);
m_panel_image->SetSizer(m_sizer_thumbnail);
m_panel_image->Layout();
wxBoxSizer *m_sizer_basic = new wxBoxSizer(wxHORIZONTAL);
@ -1162,12 +1162,12 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_comboBox_printer->Bind(wxEVT_COMBOBOX, &SelectMachineDialog::on_selection_changed, this);
m_sizer_printer->Add(m_comboBox_printer, 1, wxEXPAND | wxRIGHT, FromDIP(5));
btn_bg_enable = StateColor(std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed), std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered),
m_btn_bg_enable = StateColor(std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed), std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal));
m_button_refresh = new Button(this, _L("Refresh"));
m_button_refresh->SetBackgroundColor(btn_bg_enable);
m_button_refresh->SetBorderColor(btn_bg_enable);
m_button_refresh->SetBackgroundColor(m_btn_bg_enable);
m_button_refresh->SetBorderColor(m_btn_bg_enable);
m_button_refresh->SetTextColor(StateColor::darkModeColorFor("#FFFFFE"));
m_button_refresh->SetSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE);
m_button_refresh->SetMinSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE);
@ -1202,13 +1202,11 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_line_schedule = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1));
m_line_schedule->SetBackgroundColour(wxColour(238, 238, 238));
m_sizer_bottom = new wxBoxSizer(wxVERTICAL);
m_simplebook = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, SELECT_MACHINE_DIALOG_SIMBOOK_SIZE, 0);
// perpare mode
m_panel_prepare = new wxPanel(m_simplebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_panel_prepare->SetBackgroundColour(m_colour_def_color);
//m_panel_prepare->SetBackgroundColour(wxColour(135,206,250));
wxBoxSizer *m_sizer_prepare = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *m_sizer_pcont = new wxBoxSizer(wxHORIZONTAL);
@ -1217,24 +1215,22 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
auto hyperlink_sizer = new wxBoxSizer( wxHORIZONTAL );
auto m_hyperlink = new wxHyperlinkCtrl(m_panel_prepare, wxID_ANY, _L("Can't find my devices?"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
//auto linkimg = new wxStaticBitmap(m_panel_prepare, wxID_ANY, create_scaled_bitmap("link_wiki_img", this, 18), wxDefaultPosition, wxSize(FromDIP(18), FromDIP(18)), 0);
hyperlink_sizer->Add(m_hyperlink, 0, wxALIGN_CENTER | wxALL, 5);
//hyperlink_sizer->Add(linkimg, 0, wxALIGN_CENTER | wxALL, FromDIP(5));
m_sizer_prepare->Add(hyperlink_sizer, 0, wxALIGN_CENTER | wxALL, 5);
m_button_ensure = new Button(m_panel_prepare, _L("Send"));
m_button_ensure->SetBackgroundColor(btn_bg_enable);
m_button_ensure->SetBorderColor(btn_bg_enable);
m_button_ensure->SetBackgroundColor(m_btn_bg_enable);
m_button_ensure->SetBorderColor(m_btn_bg_enable);
m_button_ensure->SetTextColor(StateColor::darkModeColorFor("#FFFFFE"));
m_button_ensure->SetSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE);
m_button_ensure->SetMinSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE);
m_button_ensure->SetMinSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE);
m_button_ensure->SetCornerRadius(FromDIP(12));
m_button_ensure->Bind(wxEVT_BUTTON, &SelectMachineDialog::on_ok_btn, this);
m_sizer_pcont->Add(0, 0, 1, wxEXPAND, 0);
m_sizer_pcont->Add(m_button_ensure, 0, wxEXPAND | wxBOTTOM, FromDIP(10));
m_sizer_pcont->Add(m_button_ensure, 0,wxRIGHT, 0);
m_sizer_prepare->Add(m_sizer_pcont, 0, wxEXPAND, 0);
@ -1272,7 +1268,92 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_sizer_finish->Fit(m_panel_finish);
m_simplebook->AddPage(m_panel_finish, wxEmptyString, false);
//show bind failed info
m_sw_print_failed_info = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(380), FromDIP(125)), wxVSCROLL);
m_sw_print_failed_info->SetBackgroundColour(*wxWHITE);
m_sw_print_failed_info->SetScrollRate(0, 5);
m_sw_print_failed_info->SetMinSize(wxSize(FromDIP(380), FromDIP(125)));
m_sw_print_failed_info->SetMaxSize(wxSize(FromDIP(380), FromDIP(125)));
wxBoxSizer* sizer_print_failed_info = new wxBoxSizer(wxVERTICAL);
m_sw_print_failed_info->SetSizer(sizer_print_failed_info);
wxBoxSizer* sizer_error_code = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer_error_desc = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer_extra_info = new wxBoxSizer(wxHORIZONTAL);
auto st_title_error_code = new wxStaticText(m_sw_print_failed_info, wxID_ANY, _L("Error code"));
auto st_title_error_code_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY,": ");
m_st_txt_error_code = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_error_code->SetForegroundColour(0x909090);
st_title_error_code_doc->SetForegroundColour(0x909090);
m_st_txt_error_code->SetForegroundColour(0x909090);
st_title_error_code->SetFont(::Label::Body_13);
st_title_error_code_doc->SetFont(::Label::Body_13);
m_st_txt_error_code->SetFont(::Label::Body_13);
st_title_error_code->SetMinSize(wxSize(FromDIP(74), -1));
st_title_error_code->SetMaxSize(wxSize(FromDIP(74), -1));
m_st_txt_error_code->SetMinSize(wxSize(FromDIP(260), -1));
m_st_txt_error_code->SetMaxSize(wxSize(FromDIP(260), -1));
sizer_error_code->Add(st_title_error_code, 0, wxALL, 0);
sizer_error_code->Add(st_title_error_code_doc, 0, wxALL, 0);
sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0);
auto st_title_error_desc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, wxT("Error desc"));
auto st_title_error_desc_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY,": ");
m_st_txt_error_desc = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_error_desc->SetForegroundColour(0x909090);
st_title_error_desc_doc->SetForegroundColour(0x909090);
m_st_txt_error_desc->SetForegroundColour(0x909090);
st_title_error_desc->SetFont(::Label::Body_13);
st_title_error_desc_doc->SetFont(::Label::Body_13);
m_st_txt_error_desc->SetFont(::Label::Body_13);
st_title_error_desc->SetMinSize(wxSize(FromDIP(74), -1));
st_title_error_desc->SetMaxSize(wxSize(FromDIP(74), -1));
m_st_txt_error_desc->SetMinSize(wxSize(FromDIP(260), -1));
m_st_txt_error_desc->SetMaxSize(wxSize(FromDIP(260), -1));
sizer_error_desc->Add(st_title_error_desc, 0, wxALL, 0);
sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0);
sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0);
auto st_title_extra_info = new wxStaticText(m_sw_print_failed_info, wxID_ANY, wxT("Extra info"));
auto st_title_extra_info_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": ");
m_st_txt_extra_info = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_extra_info->SetForegroundColour(0x909090);
st_title_extra_info_doc->SetForegroundColour(0x909090);
m_st_txt_extra_info->SetForegroundColour(0x909090);
st_title_extra_info->SetFont(::Label::Body_13);
st_title_extra_info_doc->SetFont(::Label::Body_13);
m_st_txt_extra_info->SetFont(::Label::Body_13);
st_title_extra_info->SetMinSize(wxSize(FromDIP(74), -1));
st_title_extra_info->SetMaxSize(wxSize(FromDIP(74), -1));
m_st_txt_extra_info->SetMinSize(wxSize(FromDIP(260), -1));
m_st_txt_extra_info->SetMaxSize(wxSize(FromDIP(260), -1));
sizer_extra_info->Add(st_title_extra_info, 0, wxALL, 0);
sizer_extra_info->Add(st_title_extra_info_doc, 0, wxALL, 0);
sizer_extra_info->Add(m_st_txt_extra_info, 0, wxALL, 0);
m_link_network_state = new Label(m_sw_print_failed_info, _L("Check the status of current system services"));
m_link_network_state->SetForegroundColour(0x00AE42);
m_link_network_state->SetFont(::Label::Body_12);
m_link_network_state->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {link_to_network_check();});
m_link_network_state->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_HAND);});
m_link_network_state->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_ARROW);});
sizer_print_failed_info->Add(m_link_network_state, 0, wxLEFT, 5);
sizer_print_failed_info->Add(sizer_error_code, 0, wxLEFT, 5);
sizer_print_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3));
sizer_print_failed_info->Add(sizer_error_desc, 0, wxLEFT, 5);
sizer_print_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3));
sizer_print_failed_info->Add(sizer_extra_info, 0, wxLEFT, 5);
// bind
Bind(EVT_SHOW_ERROR_INFO, [this](auto& e) {
show_print_failed_info(true);
});
Bind(EVT_UPDATE_USER_MACHINE_LIST, &SelectMachineDialog::update_printer_combobox, this);
Bind(EVT_PRINT_JOB_CANCEL, &SelectMachineDialog::on_print_job_cancel, this);
Bind(EVT_SET_FINISH_MAPPING, &SelectMachineDialog::on_set_finish_mapping, this);
@ -1317,29 +1398,30 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_sizer_scrollable_view->Add(m_scrollable_region, 0, wxEXPAND, 0);
m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0);
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(22));
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(13));
m_sizer_main->Add(m_scrollable_view, 0, wxALIGN_CENTER_HORIZONTAL, 0);
#ifdef FILAMENT_BACKUP
m_sizer_main->Add(m_sizer_backup, 0, wxALIGN_CENTER_HORIZONTAL, 0);
#endif
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(6));
m_sizer_main->Add(m_statictext_ams_msg, 0, wxALIGN_CENTER_HORIZONTAL, 0);
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(6));
m_sizer_main->Add(m_line_materia, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(14));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(12));
m_sizer_main->Add(m_sizer_printer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(5));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(11));
m_sizer_main->Add(m_statictext_printer_msg, 0, wxALIGN_CENTER_HORIZONTAL, 0);
m_sizer_main->Add(0, 1, 0, wxTOP, FromDIP(20));
m_sizer_main->Add(0, 1, 0, wxTOP, FromDIP(16));
m_sizer_main->Add(m_sizer_select, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(40));
m_sizer_main->Add(0, 1, 0, wxTOP, FromDIP(12));
m_sizer_main->Add(0, 1, 0, wxTOP, FromDIP(10));
m_sizer_main->Add(m_line_schedule, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30));
m_sizer_main->Add(m_simplebook, 0, wxALIGN_CENTER_HORIZONTAL, 0);
m_sizer_main->Add(m_sizer_bottom, 0, wxALIGN_CENTER_HORIZONTAL);
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(15));
m_sizer_main->Add(m_sw_print_failed_info, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(13));
show_print_failed_info(false);
SetSizer(m_sizer_main);
Layout();
@ -1359,6 +1441,65 @@ void SelectMachineDialog::check_focus(wxWindow* window)
}
}
void SelectMachineDialog::link_to_network_check()
{
std::string url;
std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code();
if (country_code == "US") {
url = "https://status.bambulab.com";
}
else if (country_code == "CN") {
url = "https://status.bambulab.cn";
}
else if (country_code == "ENV_CN_DEV") {
url = "https://status.bambu-lab.com";
}
else if (country_code == "ENV_CN_QA") {
url = "https://status.bambu-lab.com";
}
else if (country_code == "ENV_CN_PRE") {
url = "https://status.bambu-lab.com";
}
else {
url = "https://status.bambu-lab.com";
}
wxLaunchDefaultBrowser(url);
}
void SelectMachineDialog::show_print_failed_info(bool show, int code, wxString description, wxString extra)
{
if (show) {
if (!m_sw_print_failed_info->IsShown()) {
m_sw_print_failed_info->Show(true);
m_st_txt_error_code->SetLabelText(wxString::Format("%d", m_print_error_code));
m_st_txt_error_desc->SetLabelText(m_print_error_msg);
m_st_txt_extra_info->SetLabelText(m_print_error_extra);
m_st_txt_error_code->Wrap(FromDIP(260));
m_st_txt_error_desc->Wrap(FromDIP(260));
m_st_txt_extra_info->Wrap(FromDIP(260));
}
else {
m_sw_print_failed_info->Show(false);
}
Layout();
Fit();
}
else {
if (!m_sw_print_failed_info->IsShown()) {return;}
m_sw_print_failed_info->Show(false);
m_st_txt_error_code->SetLabelText(wxEmptyString);
m_st_txt_error_desc->SetLabelText(wxEmptyString);
m_st_txt_extra_info->SetLabelText(wxEmptyString);
Layout();
Fit();
}
}
void SelectMachineDialog::check_fcous_state(wxWindow* window)
{
check_focus(window);
@ -1387,9 +1528,9 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par
wxBoxSizer *sizer_checkbox = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer *sizer_check = new wxBoxSizer(wxVERTICAL);
ams_check = new ::CheckBox(checkbox);
m_ams_check = new ::CheckBox(checkbox);
sizer_check->Add(ams_check, 0, wxBOTTOM | wxEXPAND | wxTOP, FromDIP(5));
sizer_check->Add(m_ams_check, 0, wxBOTTOM | wxEXPAND | wxTOP, FromDIP(5));
sizer_checkbox->Add(sizer_check, 0, wxEXPAND, FromDIP(5));
sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(11));
@ -1429,11 +1570,11 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par
text->SetToolTip(tooltip);
text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& event) {
ams_check->SetValue(ams_check->GetValue() ? false : true);
m_ams_check->SetValue(m_ams_check->GetValue() ? false : true);
});
checkbox->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& event) {
ams_check->SetValue(ams_check->GetValue() ? false : true);
m_ams_check->SetValue(m_ams_check->GetValue() ? false : true);
});
return checkbox;
}
@ -1541,6 +1682,7 @@ void SelectMachineDialog::prepare_mode()
{
// disable combobox
m_comboBox_printer->Enable();
show_print_failed_info(false);
m_is_in_sending_mode = false;
if (m_print_job) {
@ -1820,6 +1962,13 @@ void SelectMachineDialog::update_print_status_msg(wxString msg, bool is_warning,
}
}
void SelectMachineDialog::update_print_error_info(int code, std::string msg, std::string extra)
{
m_print_error_code = code;
m_print_error_msg = msg;
m_print_error_extra = extra;
}
bool SelectMachineDialog::has_tips(MachineObject* obj)
{
if (!obj) return false;
@ -1993,27 +2142,6 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector<wxSt
}
}
void SelectMachineDialog::init_model()
{
machine_model = new MachineListModel;
m_dataViewListCtrl_machines->AssociateModel(machine_model.get());
m_dataViewListCtrl_machines->AppendTextColumn("Printer Name", MachineListModel::Col_MachineName, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_SORTABLE);
m_dataViewListCtrl_machines->AppendTextColumn("SN(dev_id)", MachineListModel::Col_MachineSN, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_RESIZABLE);
m_dataViewListCtrl_machines->AppendTextColumn("Status", MachineListModel::Col_MachinePrintingStatus, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_RESIZABLE);
m_dataViewListCtrl_machines->AppendTextColumn("TaskName", MachineListModel::Col_MachineTaskName, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_RESIZABLE);
m_dataViewListCtrl_machines->AppendTextColumn("Connection", MachineListModel::Col_MachineConnection, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_RESIZABLE);
}
void SelectMachineDialog::init_bind()
{
Bind(wxEVT_TIMER, &SelectMachineDialog::on_timer, this);
@ -2156,7 +2284,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
}
}
if (has_prohibited_filament && obj_->has_ams() && ams_check->GetValue()) {
if (has_prohibited_filament && obj_->has_ams() && m_ams_check->GetValue()) {
wxString tpu_tips = prohibited_error;
show_errors(tpu_tips);
return;
@ -2251,7 +2379,7 @@ void SelectMachineDialog::on_ok()
// get ams_mapping_result
std::string ams_mapping_array;
std::string ams_mapping_info;
if (ams_check->GetValue())
if (m_ams_check->GetValue())
get_ams_mapping_result(ams_mapping_array, ams_mapping_info);
else {
json mapping_info_json = json::array();
@ -2329,7 +2457,7 @@ void SelectMachineDialog::on_ok()
true);
if (obj_->has_ams()) {
m_print_job->task_use_ams = ams_check->GetValue();
m_print_job->task_use_ams = m_ams_check->GetValue();
} else {
m_print_job->task_use_ams = false;
}
@ -2444,7 +2572,7 @@ std::vector<std::string> SelectMachineDialog::sort_string(std::vector<std::strin
bool SelectMachineDialog::is_timeout()
{
if (timeout_count > 15 * 1000 / LIST_REFRESH_INTERVAL) {
if (m_timeout_count > 15 * 1000 / LIST_REFRESH_INTERVAL) {
return true;
}
return false;
@ -2452,7 +2580,7 @@ bool SelectMachineDialog::is_timeout()
void SelectMachineDialog::reset_timeout()
{
timeout_count = 0;
m_timeout_count = 0;
}
void SelectMachineDialog::update_user_printer()
@ -2662,9 +2790,9 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event)
{
/* reset timeout and reading printer info */
m_status_bar->reset();
timeout_count = 0;
m_timeout_count = 0;
m_ams_mapping_res = false;
ams_mapping_valid = false;
m_ams_mapping_valid = false;
m_ams_mapping_result.clear();
auto selection = m_comboBox_printer->GetSelection();
@ -2785,7 +2913,7 @@ void SelectMachineDialog::update_show_status()
return;
}
else {
timeout_count++;
m_timeout_count++;
show_status(PrintDialogStatus::PrintStatusReading);
return;
}
@ -2805,7 +2933,7 @@ void SelectMachineDialog::update_show_status()
bool clean_ams_mapping = false;
if (obj_->has_ams() && m_ams_mapping_result.empty()) {
if (obj_->ams_support_use_ams) {
if (ams_check->GetValue()) {
if (m_ams_check->GetValue()) {
do_ams_mapping(obj_);
} else {
clean_ams_mapping = true;
@ -2813,7 +2941,7 @@ void SelectMachineDialog::update_show_status()
}
}
if (!obj_->has_ams() || !ams_check->GetValue()) {
if (!obj_->has_ams() || !m_ams_check->GetValue()) {
clean_ams_mapping = true;
}
@ -2861,14 +2989,14 @@ void SelectMachineDialog::update_show_status()
}
// no ams
if (!obj_->has_ams() || !ams_check->GetValue()) {
if (!obj_->has_ams() || !m_ams_check->GetValue()) {
if (!has_tips(obj_))
show_status(PrintDialogStatus::PrintStatusReadingFinished);
return;
}
if (obj_->ams_support_use_ams) {
if (!ams_check->GetValue()) {
if (!m_ams_check->GetValue()) {
m_ams_mapping_result.clear();
sync_ams_mapping_result(m_ams_mapping_result);
show_status(PrintDialogStatus::PrintStatusDisableAms);
@ -2994,8 +3122,8 @@ void SelectMachineDialog::Enable_Refresh_Button(bool en)
} else {
if (!m_button_refresh->IsEnabled()) {
m_button_refresh->Enable();
m_button_refresh->SetBackgroundColor(btn_bg_enable);
m_button_refresh->SetBorderColor(btn_bg_enable);
m_button_refresh->SetBackgroundColor(m_btn_bg_enable);
m_button_refresh->SetBorderColor(m_btn_bg_enable);
}
}
}
@ -3011,8 +3139,8 @@ void SelectMachineDialog::Enable_Send_Button(bool en)
} else {
if (!m_button_ensure->IsEnabled()) {
m_button_ensure->Enable();
m_button_ensure->SetBackgroundColor(btn_bg_enable);
m_button_ensure->SetBorderColor(btn_bg_enable);
m_button_ensure->SetBackgroundColor(m_btn_bg_enable);
m_button_ensure->SetBorderColor(m_btn_bg_enable);
}
}
}
@ -3126,7 +3254,7 @@ void SelectMachineDialog::set_default()
} else {
m_checkbox_list["timelapse"]->SetValue(true);
}
ams_check->SetValue(true);
m_ams_check->SetValue(true);
// thumbmail
//wxBitmap bitmap;
@ -3148,7 +3276,7 @@ void SelectMachineDialog::set_default()
}
//m_staticbitmap->SetBitmap(bitmap);
//sizer_thumbnail->Layout();
//m_sizer_thumbnail->Layout();
std::vector<std::string> materials;
std::vector<std::string> brands;
@ -3244,7 +3372,7 @@ void SelectMachineDialog::set_default()
if (obj_ &&
obj_->has_ams() &&
ams_check->GetValue() &&
m_ams_check->GetValue() &&
obj_->dev_id == m_printer_last_select)
{
m_mapping_popup.set_parent_item(item);

View file

@ -229,8 +229,8 @@ private:
wxWindow *create_title_panel(wxString text);
};
#define SELECT_MACHINE_DIALOG_BUTTON_SIZE wxSize(FromDIP(68), FromDIP(24))
#define SELECT_MACHINE_DIALOG_SIMBOOK_SIZE wxSize(FromDIP(360), FromDIP(70))
#define SELECT_MACHINE_DIALOG_BUTTON_SIZE wxSize(FromDIP(68), FromDIP(23))
#define SELECT_MACHINE_DIALOG_SIMBOOK_SIZE wxSize(FromDIP(370), FromDIP(64))
enum PrintDialogStatus {
@ -270,179 +270,162 @@ std::string get_print_status_info(PrintDialogStatus status);
class SelectMachineDialog : public DPIDialog
{
private:
void init_model();
void init_bind();
void init_timer();
int m_current_filament_id{0};
int m_print_plate_idx{0};
int m_timeout_count{0};
bool m_is_in_sending_mode{ false };
bool m_ams_mapping_res{ false };
bool m_ams_mapping_valid{ false };
bool m_need_adaptation_screen{ false };
bool m_export_3mf_cancel{ false };
bool m_is_canceled{ false };
bool m_is_rename_mode{ false };
int m_print_plate_idx;
std::string m_printer_last_select;
std::string m_print_info;
wxString m_current_project_name;
PrintDialogStatus m_print_status { PrintStatusInit };
std::string m_printer_last_select;
PrintDialogStatus m_print_status { PrintStatusInit };
wxColour m_colour_def_color{wxColour(255, 255, 255)};
wxColour m_colour_bold_color{wxColour(38, 46, 48)};
StateColor m_btn_bg_enable;
std::vector<wxString> m_bedtype_list;
std::map<std::string, ::CheckBox *> m_checkbox_list;
std::map<std::string, bool> m_checkbox_state_list;
wxColour m_colour_def_color{wxColour(255, 255, 255)};
wxColour m_colour_bold_color{wxColour(38, 46, 48)};
//SecondaryCheckDialog* confirm_dlg = nullptr;
protected:
MaterialHash m_materialList;
std::vector<FilamentInfo> m_filaments;
std::vector<FilamentInfo> m_ams_mapping_result; /* ams mapping data */
bool m_ams_mapping_res { false }; /* ams mapping result */
bool ams_mapping_valid { false };
Plater * m_plater{nullptr};
wxPanel * m_line_top{nullptr};
wxPanel * m_panel_image{nullptr};
wxStaticText *m_stext_time{nullptr};
wxStaticText *m_stext_weight{nullptr};
wxPanel * m_line_materia{nullptr};
wxStaticText *m_stext_printer_title{nullptr};
AmsMapingPopup m_mapping_popup{ nullptr };
AmsMapingTipPopup m_mapping_tip_popup{ nullptr };
AmsTutorialPopup m_mapping_tutorial_popup{ nullptr };
MaterialHash m_materialList;
Plater * m_plater{nullptr};
wxWrapSizer* m_sizer_select{ nullptr };
wxBoxSizer* m_sizer_thumbnail{ nullptr };
wxGridSizer* m_sizer_material{ nullptr };
wxBoxSizer* m_sizer_main{ nullptr };
wxBoxSizer* m_sizer_scrollable_view{ nullptr };
wxBoxSizer* m_sizer_scrollable_region{ nullptr };
wxBoxSizer* rename_sizer_v{ nullptr };
wxBoxSizer* rename_sizer_h{ nullptr };
Button* m_button_refresh{ nullptr };
Button* m_button_ensure{ nullptr };
Button* m_rename_button{nullptr};
CheckBox* m_ams_check{ nullptr };
ComboBox* m_comboBox_printer{ nullptr };
ComboBox* m_comboBox_bed{ nullptr };
wxStaticBitmap* m_staticbitmap{ nullptr };
ThumbnailPanel* m_thumbnailPanel{ nullptr };
wxWindow* select_bed{ nullptr };
wxWindow* select_flow{ nullptr };
wxWindow* select_timelapse{ nullptr };
wxWindow* select_use_ams{ nullptr };
wxPanel* m_panel_status{ nullptr };
wxPanel* m_scrollable_region;
wxPanel* m_rename_normal_panel{nullptr};
wxPanel* m_line_schedule{nullptr};
wxPanel* m_panel_sending{nullptr};
wxPanel* m_panel_prepare{nullptr};
wxPanel* m_panel_finish{nullptr};
wxPanel* m_line_top{ nullptr };
wxPanel* m_panel_image{ nullptr };
wxPanel* m_line_materia{ nullptr };
Label* m_st_txt_error_code{nullptr};
Label* m_st_txt_error_desc{nullptr};
Label* m_st_txt_extra_info{nullptr};
Label * m_link_network_state;
wxSimplebook* m_rename_switch_panel{nullptr};
wxSimplebook* m_simplebook{nullptr};
wxStaticText* m_rename_text{nullptr};
wxStaticText* m_stext_printer_title{nullptr};
wxStaticText* m_stext_time{ nullptr };
wxStaticText* m_stext_weight{ nullptr };
wxStaticText* m_statictext_ams_msg{ nullptr };
wxStaticText* m_statictext_printer_msg{ nullptr };
wxStaticText* m_staticText_bed_title{ nullptr };
wxStaticText* m_stext_sending{ nullptr };
wxStaticText* m_statictext_finish{nullptr};
TextInput* m_rename_input{nullptr};
wxTimer* m_refresh_timer{ nullptr };
std::shared_ptr<PrintJob> m_print_job;
wxScrolledWindow* m_scrollable_view;
wxScrolledWindow* m_sw_print_failed_info{nullptr};
wxBoxSizer* rename_sizer_v{ nullptr };
wxBoxSizer* rename_sizer_h{ nullptr };
wxStaticText* m_rename_text{nullptr};
TextInput* m_rename_input{nullptr};
Button* m_rename_button{nullptr};
wxPanel* m_rename_normal_panel{nullptr};
wxSimplebook* m_rename_switch_panel{nullptr};
/* model */
wxObjectDataPtr<MachineListModel> m_machine_model;
std::shared_ptr<BBLStatusBarSend> m_status_bar;
wxStaticText *m_statictext_ams_msg{nullptr};
wxStaticText * m_statictext_printer_msg{nullptr};
wxStaticBitmap* m_staticbitmap {nullptr};
ThumbnailPanel *m_thumbnailPanel {nullptr};
::ComboBox * m_comboBox_printer{nullptr};
::ComboBox * m_comboBox_bed{nullptr};
wxStaticText *m_staticText_bed_title{nullptr};
wxPanel * m_line_schedule{nullptr};
wxPanel * m_panel_sending{nullptr};
wxStaticText *m_stext_sending{nullptr};
wxPanel * m_panel_prepare{nullptr};
Button * m_button_refresh{nullptr};
Button * m_button_ensure{nullptr};
wxPanel * m_panel_finish{nullptr};
wxSimplebook *m_simplebook{nullptr};
wxStaticText *m_statictext_finish{nullptr};
StateColor btn_bg_enable;
int m_current_filament_id;
bool m_is_in_sending_mode { false };
//wxGridSizer *m_sizer_select;
wxWrapSizer *m_sizer_select;
wxBoxSizer * sizer_thumbnail;
wxGridSizer *m_sizer_material;
wxBoxSizer * m_sizer_main;
wxBoxSizer * m_sizer_bottom;
bool m_need_adaptation_screen {false};
wxScrolledWindow * m_scrollable_view;
wxBoxSizer * m_sizer_scrollable_view;
wxPanel* m_scrollable_region;
wxBoxSizer* m_sizer_scrollable_region;
wxWindow *select_bed{nullptr};
wxWindow *select_flow{nullptr};
wxWindow *select_timelapse { nullptr };
wxWindow *select_use_ams{nullptr};
CheckBox *ams_check{nullptr};
void stripWhiteSpace(std::string& str);
wxString format_text(wxString &m_msg);
void update_ams_status_msg(wxString msg, bool is_warning = false);
void update_priner_status_msg(wxString msg, bool is_warning = false);
void update_print_status_msg(wxString msg, bool is_warning = false, bool is_printer = true);
/*error info*/
int m_print_error_code;
std::string m_print_error_msg;
std::string m_print_error_extra;
std::vector<MachineObject*> m_list;
std::vector<FilamentInfo> m_filaments;
std::vector<FilamentInfo> m_ams_mapping_result; /* ams mapping data */
public:
SelectMachineDialog(Plater *plater = nullptr);
~SelectMachineDialog();
void init_bind();
void init_timer();
void check_focus(wxWindow* window);
void link_to_network_check();
void show_print_failed_info(bool show, int code = 0, wxString description = wxEmptyString, wxString extra = wxEmptyString);
void check_fcous_state(wxWindow* window);
void popup_filament_backup();
wxWindow* create_ams_checkbox(wxString title, wxWindow* parent, wxString tooltip);
wxWindow* create_item_checkbox(wxString title, wxWindow* parent, wxString tooltip, std::string param);
void update_select_layout(MachineObject *obj);
void prepare_mode();
void sending_mode();
void finish_mode();
void update_select_layout(MachineObject *obj);
void prepare_mode();
void sending_mode();
void finish_mode();
void sync_ams_mapping_result(std::vector<FilamentInfo>& result);
void prepare(int print_plate_idx);
void show_status(PrintDialogStatus status, std::vector<wxString> params = std::vector<wxString>());
void sys_color_changed();
void reset_timeout();
void update_user_printer();
void reset_ams_material();
void update_show_status();
void update_ams_check(MachineObject* obj);
void on_rename_click(wxCommandEvent& event);
void on_rename_enter();
void update_printer_combobox(wxCommandEvent& event);
void on_cancel(wxCloseEvent& event);
void show_errors(wxString& info);
void on_ok_btn(wxCommandEvent& event);
void on_ok();
void clear_ip_address_config(wxCommandEvent& e);
void on_refresh(wxCommandEvent& event);
void on_set_finish_mapping(wxCommandEvent& evt);
void on_print_job_cancel(wxCommandEvent& evt);
void set_default();
void on_timer(wxTimerEvent& event);
void on_selection_changed(wxCommandEvent& event);
void Enable_Refresh_Button(bool en);
void Enable_Send_Button(bool en);
void on_dpi_changed(const wxRect& suggested_rect) override;
void update_user_machine_list();
void update_lan_machine_list();
void stripWhiteSpace(std::string& str);
void update_ams_status_msg(wxString msg, bool is_warning = false);
void update_priner_status_msg(wxString msg, bool is_warning = false);
void update_print_status_msg(wxString msg, bool is_warning = false, bool is_printer = true);
void update_print_error_info(int code, std::string msg, std::string extra);
void set_flow_calibration_state(bool state);
bool is_show_timelapse();
bool is_same_printer_model();
bool has_tips(MachineObject* obj);
bool is_timeout();
bool Show(bool show);
bool do_ams_mapping(MachineObject* obj_);
bool get_ams_mapping_result(std::string& mapping_array_str, std::string& ams_mapping_info);
void sync_ams_mapping_result(std::vector<FilamentInfo>& result);
bool do_ams_mapping(MachineObject *obj_);
bool get_ams_mapping_result(std::string &mapping_array_str, std::string &ams_mapping_info);
void prepare(int print_plate_idx);
bool has_tips(MachineObject* obj);
void show_status(PrintDialogStatus status, std::vector<wxString> params = std::vector<wxString>());
wxString format_text(wxString &m_msg);
wxWindow* create_ams_checkbox(wxString title, wxWindow* parent, wxString tooltip);
wxWindow* create_item_checkbox(wxString title, wxWindow* parent, wxString tooltip, std::string param);
wxImage * LoadImageFromBlob(const unsigned char *data, int size);
PrintDialogStatus get_status() { return m_print_status; }
bool is_same_printer_model();
void sys_color_changed();
bool Show(bool show);
/* model */
wxObjectDataPtr<MachineListModel> machine_model;
std::shared_ptr<BBLStatusBarSend> m_status_bar;
bool m_export_3mf_cancel{false};
bool m_is_canceled { false };
protected:
std::vector<MachineObject *> m_list;
wxDataViewCtrl * m_dataViewListCtrl_machines{nullptr};
wxStaticText * m_staticText_left{nullptr};
wxHyperlinkCtrl * m_hyperlink_add_machine{nullptr};
wxGauge * m_gauge_job_progress{nullptr};
wxPanel * m_panel_status{nullptr};
wxButton * m_button_cancel{nullptr};
AmsMapingPopup m_mapping_popup{nullptr};
AmsMapingTipPopup m_mapping_tip_popup{nullptr};
AmsTutorialPopup m_mapping_tutorial_popup{nullptr};
wxString m_current_project_name;
std::string m_print_info;
int timeout_count = 0;
bool m_is_rename_mode{false};
bool is_timeout();
void reset_timeout();
void update_user_printer();
void reset_ams_material();
void update_show_status();
void update_ams_check(MachineObject* obj);
bool is_show_timelapse();
wxTimer *m_refresh_timer { nullptr };
std::shared_ptr<PrintJob> m_print_job;
// Virtual event handlers, overide them in your derived class
void on_rename_click(wxCommandEvent &event);
void on_rename_enter();
void update_printer_combobox(wxCommandEvent &event);
void on_cancel(wxCloseEvent &event);
void show_errors(wxString &info);
void on_ok_btn(wxCommandEvent &event);
void on_ok();
void clear_ip_address_config(wxCommandEvent& e);
void on_refresh(wxCommandEvent& event);
void on_set_finish_mapping(wxCommandEvent &evt);
void on_print_job_cancel(wxCommandEvent &evt);
void set_default();
void on_timer(wxTimerEvent& event);
void on_selection_changed(wxCommandEvent &event);
void Enable_Refresh_Button(bool en);
void Enable_Send_Button(bool en);
void on_dpi_changed(const wxRect &suggested_rect) override;
void update_user_machine_list();
void update_lan_machine_list();
void set_flow_calibration_state(bool state);
wxImage * LoadImageFromBlob(const unsigned char *data, int size);
std::vector<std::string> sort_string(std::vector<std::string> strArray);
};

View file

@ -256,8 +256,6 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater)
// line schedule
m_line_schedule = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1));
m_line_schedule->SetBackgroundColour(wxColour(238, 238, 238));
m_sizer_bottom = new wxBoxSizer(wxVERTICAL);
m_simplebook = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, SELECT_MACHINE_DIALOG_SIMBOOK_SIZE, 0);
// perpare mode
@ -314,6 +312,93 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater)
m_sizer_finish->Fit(m_panel_finish);
m_simplebook->AddPage(m_panel_finish, wxEmptyString, false);
//show bind failed info
m_sw_print_failed_info = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(380), FromDIP(125)), wxVSCROLL);
m_sw_print_failed_info->SetBackgroundColour(*wxWHITE);
m_sw_print_failed_info->SetScrollRate(0, 5);
m_sw_print_failed_info->SetMinSize(wxSize(FromDIP(380), FromDIP(125)));
m_sw_print_failed_info->SetMaxSize(wxSize(FromDIP(380), FromDIP(125)));
wxBoxSizer* sizer_print_failed_info = new wxBoxSizer(wxVERTICAL);
m_sw_print_failed_info->SetSizer(sizer_print_failed_info);
wxBoxSizer* sizer_error_code = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer_error_desc = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer_extra_info = new wxBoxSizer(wxHORIZONTAL);
auto st_title_error_code = new wxStaticText(m_sw_print_failed_info, wxID_ANY, _L("Error code"));
auto st_title_error_code_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": ");
m_st_txt_error_code = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_error_code->SetForegroundColour(0x909090);
st_title_error_code_doc->SetForegroundColour(0x909090);
m_st_txt_error_code->SetForegroundColour(0x909090);
st_title_error_code->SetFont(::Label::Body_13);
st_title_error_code_doc->SetFont(::Label::Body_13);
m_st_txt_error_code->SetFont(::Label::Body_13);
st_title_error_code->SetMinSize(wxSize(FromDIP(74), -1));
st_title_error_code->SetMaxSize(wxSize(FromDIP(74), -1));
m_st_txt_error_code->SetMinSize(wxSize(FromDIP(260), -1));
m_st_txt_error_code->SetMaxSize(wxSize(FromDIP(260), -1));
sizer_error_code->Add(st_title_error_code, 0, wxALL, 0);
sizer_error_code->Add(st_title_error_code_doc, 0, wxALL, 0);
sizer_error_code->Add(m_st_txt_error_code, 0, wxALL, 0);
auto st_title_error_desc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, wxT("Error desc"));
auto st_title_error_desc_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": ");
m_st_txt_error_desc = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_error_desc->SetForegroundColour(0x909090);
st_title_error_desc_doc->SetForegroundColour(0x909090);
m_st_txt_error_desc->SetForegroundColour(0x909090);
st_title_error_desc->SetFont(::Label::Body_13);
st_title_error_desc_doc->SetFont(::Label::Body_13);
m_st_txt_error_desc->SetFont(::Label::Body_13);
st_title_error_desc->SetMinSize(wxSize(FromDIP(74), -1));
st_title_error_desc->SetMaxSize(wxSize(FromDIP(74), -1));
m_st_txt_error_desc->SetMinSize(wxSize(FromDIP(260), -1));
m_st_txt_error_desc->SetMaxSize(wxSize(FromDIP(260), -1));
sizer_error_desc->Add(st_title_error_desc, 0, wxALL, 0);
sizer_error_desc->Add(st_title_error_desc_doc, 0, wxALL, 0);
sizer_error_desc->Add(m_st_txt_error_desc, 0, wxALL, 0);
auto st_title_extra_info = new wxStaticText(m_sw_print_failed_info, wxID_ANY, wxT("Extra info"));
auto st_title_extra_info_doc = new wxStaticText(m_sw_print_failed_info, wxID_ANY, ": ");
m_st_txt_extra_info = new Label(m_sw_print_failed_info, wxEmptyString);
st_title_extra_info->SetForegroundColour(0x909090);
st_title_extra_info_doc->SetForegroundColour(0x909090);
m_st_txt_extra_info->SetForegroundColour(0x909090);
st_title_extra_info->SetFont(::Label::Body_13);
st_title_extra_info_doc->SetFont(::Label::Body_13);
m_st_txt_extra_info->SetFont(::Label::Body_13);
st_title_extra_info->SetMinSize(wxSize(FromDIP(74), -1));
st_title_extra_info->SetMaxSize(wxSize(FromDIP(74), -1));
m_st_txt_extra_info->SetMinSize(wxSize(FromDIP(260), -1));
m_st_txt_extra_info->SetMaxSize(wxSize(FromDIP(260), -1));
sizer_extra_info->Add(st_title_extra_info, 0, wxALL, 0);
sizer_extra_info->Add(st_title_extra_info_doc, 0, wxALL, 0);
sizer_extra_info->Add(m_st_txt_extra_info, 0, wxALL, 0);
m_link_network_state = new Label(m_sw_print_failed_info, _L("Check the status of current system services"));
m_link_network_state->SetForegroundColour(0x00AE42);
m_link_network_state->SetFont(::Label::Body_12);
m_link_network_state->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {link_to_network_check(); });
m_link_network_state->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_HAND); });
m_link_network_state->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_ARROW); });
sizer_print_failed_info->Add(m_link_network_state, 0, wxLEFT, 5);
sizer_print_failed_info->Add(sizer_error_code, 0, wxLEFT, 5);
sizer_print_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3));
sizer_print_failed_info->Add(sizer_error_desc, 0, wxLEFT, 5);
sizer_print_failed_info->Add(0, 0, 0, wxTOP, FromDIP(3));
sizer_print_failed_info->Add(sizer_extra_info, 0, wxLEFT, 5);
// bind
Bind(EVT_SHOW_ERROR_INFO, [this](auto& e) {
show_print_failed_info(true);
});
// bind
Bind(EVT_UPDATE_USER_MACHINE_LIST, &SendToPrinterDialog::update_printer_combobox, this);
Bind(EVT_PRINT_JOB_CANCEL, &SendToPrinterDialog::on_print_job_cancel, this);
@ -411,22 +496,23 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater)
});
m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0);
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(22));
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10));
m_sizer_main->Add(m_scrollable_region, 0, wxALIGN_CENTER_HORIZONTAL, 0);
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(6));
m_sizer_main->Add(m_rename_switch_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0);
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(6));
m_sizer_main->Add(m_line_materia, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(15));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(12));
m_sizer_main->Add(m_sizer_printer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(13));
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(11));
m_sizer_main->Add(m_statictext_printer_msg, 0, wxALIGN_CENTER_HORIZONTAL, 0);
m_sizer_main->Add(0, 1, 0, wxTOP, FromDIP(32));
m_sizer_main->Add(0, 1, 0, wxTOP, FromDIP(22));
m_sizer_main->Add(m_line_schedule, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30));
m_sizer_main->Add(m_simplebook, 0, wxALIGN_CENTER_HORIZONTAL, 0);
m_sizer_main->Add(m_sizer_bottom, 0, wxALIGN_CENTER_HORIZONTAL);
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(15));
m_sizer_main->Add(m_sw_print_failed_info, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(13));
show_print_failed_info(false);
SetSizer(m_sizer_main);
Layout();
Fit();
@ -439,6 +525,44 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater)
wxGetApp().UpdateDlgDarkUI(this);
}
void SendToPrinterDialog::update_print_error_info(int code, std::string msg, std::string extra)
{
m_print_error_code = code;
m_print_error_msg = msg;
m_print_error_extra = extra;
}
void SendToPrinterDialog::show_print_failed_info(bool show, int code, wxString description, wxString extra)
{
if (show) {
if (!m_sw_print_failed_info->IsShown()) {
m_sw_print_failed_info->Show(true);
m_st_txt_error_code->SetLabelText(wxString::Format("%d", m_print_error_code));
m_st_txt_error_desc->SetLabelText(m_print_error_msg);
m_st_txt_extra_info->SetLabelText(m_print_error_extra);
m_st_txt_error_code->Wrap(FromDIP(260));
m_st_txt_error_desc->Wrap(FromDIP(260));
m_st_txt_extra_info->Wrap(FromDIP(260));
}
else {
m_sw_print_failed_info->Show(false);
}
Layout();
Fit();
}
else {
if (!m_sw_print_failed_info->IsShown()) { return; }
m_sw_print_failed_info->Show(false);
m_st_txt_error_code->SetLabelText(wxEmptyString);
m_st_txt_error_desc->SetLabelText(wxEmptyString);
m_st_txt_extra_info->SetLabelText(wxEmptyString);
Layout();
Fit();
}
}
void SendToPrinterDialog::prepare_mode()
{
m_is_in_sending_mode = false;
@ -449,6 +573,7 @@ void SendToPrinterDialog::prepare_mode()
if (wxIsBusy())
wxEndBusyCursor();
Enable_Send_Button(true);
show_print_failed_info(false);
m_status_bar->reset();
if (m_simplebook->GetSelection() != 0) {
@ -466,6 +591,33 @@ void SendToPrinterDialog::sending_mode()
}
}
void SendToPrinterDialog::link_to_network_check()
{
std::string url;
std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code();
if (country_code == "US") {
url = "https://status.bambulab.com";
}
else if (country_code == "CN") {
url = "https://status.bambulab.cn";
}
else if (country_code == "ENV_CN_DEV") {
url = "https://status.bambu-lab.com";
}
else if (country_code == "ENV_CN_QA") {
url = "https://status.bambu-lab.com";
}
else if (country_code == "ENV_CN_PRE") {
url = "https://status.bambu-lab.com";
}
else {
url = "https://status.bambu-lab.com";
}
wxLaunchDefaultBrowser(url);
}
void SendToPrinterDialog::prepare(int print_plate_idx)
{
m_print_plate_idx = print_plate_idx;
@ -516,26 +668,6 @@ void SendToPrinterDialog::update_print_status_msg(wxString msg, bool is_warning,
}
void SendToPrinterDialog::init_model()
{
machine_model = new MachineListModel;
m_dataViewListCtrl_machines->AssociateModel(machine_model.get());
m_dataViewListCtrl_machines->AppendTextColumn("Printer Name", MachineListModel::Col_MachineName, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_SORTABLE);
m_dataViewListCtrl_machines->AppendTextColumn("SN(dev_id)", MachineListModel::Col_MachineSN, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_RESIZABLE);
m_dataViewListCtrl_machines->AppendTextColumn("Status", MachineListModel::Col_MachinePrintingStatus, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_RESIZABLE);
m_dataViewListCtrl_machines->AppendTextColumn("TaskName", MachineListModel::Col_MachineTaskName, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_RESIZABLE);
m_dataViewListCtrl_machines->AppendTextColumn("Connection", MachineListModel::Col_MachineConnection, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT,
wxDATAVIEW_COL_RESIZABLE);
}
void SendToPrinterDialog::init_bind()
{
Bind(wxEVT_TIMER, &SendToPrinterDialog::on_timer, this);
@ -689,13 +821,6 @@ void SendToPrinterDialog::clear_ip_address_config(wxCommandEvent& e)
{
enable_prepare_mode = true;
prepare_mode();
/*DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev) return;
if (!dev->get_selected_machine()) return;
auto obj = dev->get_selected_machine();
Slic3r::GUI::wxGetApp().app_config->set_str("ip_address", obj->dev_id, "");
Slic3r::GUI::wxGetApp().app_config->save();
wxGetApp().show_ip_address_enter_dialog();*/
}
void SendToPrinterDialog::update_user_machine_list()

View file

@ -45,129 +45,115 @@ namespace GUI {
class SendToPrinterDialog : public DPIDialog
{
private:
void init_model();
void init_bind();
void init_timer();
int m_print_plate_idx;
PrintDialogStatus m_print_status { PrintStatusInit };
int m_print_plate_idx;
int m_current_filament_id;
int m_print_error_code;
int timeout_count = 0;
bool m_is_in_sending_mode{ false };
bool m_is_rename_mode{ false };
bool enable_prepare_mode{ true };
bool m_need_adaptation_screen{ false };
bool m_export_3mf_cancel{ false };
bool m_is_canceled{ false };
std::string m_print_error_msg;
std::string m_print_error_extra;
std::string m_print_info;
std::string m_printer_last_select;
wxString m_current_project_name;
std::string m_printer_last_select;
std::vector<wxString> m_bedtype_list;
std::map<std::string, ::CheckBox*> m_checkbox_list;
TextInput* m_rename_input{ nullptr };
wxSimplebook* m_rename_switch_panel{ nullptr };
Plater* m_plater{ nullptr };
wxStaticBitmap* m_staticbitmap{ nullptr };
ThumbnailPanel* m_thumbnailPanel{ nullptr };
ComboBox* m_comboBox_printer{ nullptr };
ComboBox* m_comboBox_bed{ nullptr };
Button* m_rename_button{ nullptr };
Button* m_button_refresh{ nullptr };
Button* m_button_ensure{ nullptr };
wxPanel* m_scrollable_region;
wxPanel* m_line_schedule{ nullptr };
wxPanel* m_panel_sending{ nullptr };
wxPanel* m_panel_prepare{ nullptr };
wxPanel* m_panel_finish{ nullptr };
wxPanel* m_line_top{ nullptr };
wxPanel* m_panel_image{ nullptr };
wxPanel* m_rename_normal_panel{ nullptr };
wxPanel* m_line_materia{ nullptr };
wxSimplebook* m_simplebook{ nullptr };
wxStaticText* m_statictext_finish{ nullptr };
wxStaticText* m_stext_sending{ nullptr };
wxStaticText* m_staticText_bed_title{ nullptr };
wxStaticText* m_statictext_printer_msg{ nullptr };
wxStaticText* m_stext_printer_title{ nullptr };
wxStaticText* m_rename_text{ nullptr };
wxStaticText* m_stext_time{ nullptr };
wxStaticText* m_stext_weight{ nullptr };
Label* m_st_txt_error_code{ nullptr };
Label* m_st_txt_error_desc{ nullptr };
Label* m_st_txt_extra_info{ nullptr };
Label * m_link_network_state;
StateColor btn_bg_enable;
wxBoxSizer* rename_sizer_v{ nullptr };
wxBoxSizer* rename_sizer_h{ nullptr };
wxBoxSizer* sizer_thumbnail;
wxBoxSizer* m_sizer_scrollable_region;
wxBoxSizer* m_sizer_main;
wxStaticText* m_file_name;
PrintDialogStatus m_print_status{ PrintStatusInit };
wxColour m_colour_def_color{ wxColour(255, 255, 255) };
wxColour m_colour_bold_color{ wxColour(38, 46, 48) };
std::shared_ptr<SendJob> m_send_job{nullptr};
std::vector<wxString> m_bedtype_list;
std::map<std::string, ::CheckBox*> m_checkbox_list;
std::vector<MachineObject*> m_list;
wxColour m_colour_def_color{ wxColour(255, 255, 255) };
wxColour m_colour_bold_color{ wxColour(38, 46, 48) };
wxTimer* m_refresh_timer{ nullptr };
wxObjectDataPtr<MachineListModel> machine_model;
std::shared_ptr<BBLStatusBarSend> m_status_bar;
wxScrolledWindow* m_sw_print_failed_info{nullptr};
protected:
wxString m_current_project_name;
wxBoxSizer* rename_sizer_v{ nullptr };
wxBoxSizer* rename_sizer_h{ nullptr };
wxStaticText* m_rename_text{ nullptr };
TextInput* m_rename_input{ nullptr };
Button* m_rename_button{ nullptr };
wxPanel* m_rename_normal_panel{ nullptr };
wxSimplebook* m_rename_switch_panel{ nullptr };
Plater* m_plater{ nullptr };
wxPanel* m_line_top{ nullptr };
wxPanel* m_panel_image{ nullptr };
wxStaticText* m_stext_time{ nullptr };
wxStaticText* m_stext_weight{ nullptr };
wxPanel* m_line_materia{ nullptr };
wxStaticText* m_stext_printer_title{ nullptr };
wxStaticText* m_statictext_printer_msg{ nullptr };
wxStaticBitmap* m_staticbitmap{ nullptr };
ThumbnailPanel* m_thumbnailPanel{ nullptr };
::ComboBox* m_comboBox_printer{ nullptr };
::ComboBox* m_comboBox_bed{ nullptr };
wxStaticText* m_staticText_bed_title{ nullptr };
wxPanel* m_line_schedule{ nullptr };
wxPanel* m_panel_sending{ nullptr };
wxStaticText* m_stext_sending{ nullptr };
wxPanel* m_panel_prepare{ nullptr };
Button* m_button_refresh{ nullptr };
Button* m_button_ensure{ nullptr };
wxPanel* m_panel_finish{ nullptr };
wxSimplebook* m_simplebook{ nullptr };
wxStaticText* m_statictext_finish{ nullptr };
StateColor btn_bg_enable;
int m_current_filament_id;
bool m_is_in_sending_mode{ false };
wxBoxSizer* sizer_thumbnail;
wxBoxSizer* m_sizer_main;
wxBoxSizer* m_sizer_bottom;
wxStaticText* m_file_name;
bool m_is_rename_mode{false};
bool enable_prepare_mode{true};
bool m_need_adaptation_screen{ false };
wxPanel* m_scrollable_region;
wxBoxSizer* m_sizer_scrollable_region;
void on_rename_click(wxCommandEvent& event);
void on_rename_enter();
void stripWhiteSpace(std::string& str);
wxString format_text(wxString& m_msg);
void check_focus(wxWindow* window);
void check_fcous_state(wxWindow* window);
void update_priner_status_msg(wxString msg, bool is_warning = false);
void update_print_status_msg(wxString msg, bool is_warning = false, bool is_printer = true);
public:
SendToPrinterDialog(Plater* plater = nullptr);
~SendToPrinterDialog();
~SendToPrinterDialog();
void prepare_mode();
void sending_mode();
void prepare(int print_plate_idx);
bool Show(bool show);
/* model */
wxObjectDataPtr<MachineListModel> machine_model;
std::shared_ptr<BBLStatusBarSend> m_status_bar;
bool m_export_3mf_cancel{ false };
bool m_is_canceled{ false };
protected:
std::vector<MachineObject*> m_list;
wxDataViewCtrl* m_dataViewListCtrl_machines{ nullptr };
wxStaticText* m_staticText_left{ nullptr };
wxHyperlinkCtrl* m_hyperlink_add_machine{ nullptr };
wxGauge* m_gauge_job_progress{ nullptr };
wxPanel* m_panel_status{ nullptr };
wxButton* m_button_cancel{ nullptr };
std::string m_print_info;
int timeout_count = 0;
bool is_timeout();
void reset_timeout();
void update_user_printer();
void update_show_status();
wxTimer* m_refresh_timer{ nullptr };
std::shared_ptr<SendJob> m_send_job{nullptr};
// Virtual event handlers, overide them in your derived class
void update_printer_combobox(wxCommandEvent& event);
void on_cancel(wxCloseEvent& event);
void on_ok(wxCommandEvent& event);
void clear_ip_address_config(wxCommandEvent& e);
void on_refresh(wxCommandEvent& event);
void on_print_job_cancel(wxCommandEvent& evt);
void set_default();
void on_timer(wxTimerEvent& event);
void on_selection_changed(wxCommandEvent& event);
void Enable_Refresh_Button(bool en);
void show_status(PrintDialogStatus status, std::vector<wxString> params = std::vector<wxString>());
void Enable_Send_Button(bool en);
void on_dpi_changed(const wxRect& suggested_rect) override;
void update_user_machine_list();
bool Show(bool show);
bool is_timeout();
void on_rename_click(wxCommandEvent& event);
void on_rename_enter();
void stripWhiteSpace(std::string& str);
void prepare_mode();
void sending_mode();
void link_to_network_check();
void reset_timeout();
void update_user_printer();
void update_show_status();
void prepare(int print_plate_idx);
void check_focus(wxWindow* window);
void check_fcous_state(wxWindow* window);
void update_priner_status_msg(wxString msg, bool is_warning = false);
void update_print_status_msg(wxString msg, bool is_warning = false, bool is_printer = true);
void update_printer_combobox(wxCommandEvent& event);
void on_cancel(wxCloseEvent& event);
void on_ok(wxCommandEvent& event);
void clear_ip_address_config(wxCommandEvent& e);
void on_refresh(wxCommandEvent& event);
void on_print_job_cancel(wxCommandEvent& evt);
void set_default();
void on_timer(wxTimerEvent& event);
void on_selection_changed(wxCommandEvent& event);
void Enable_Refresh_Button(bool en);
void show_status(PrintDialogStatus status, std::vector<wxString> params = std::vector<wxString>());
void Enable_Send_Button(bool en);
void on_dpi_changed(const wxRect& suggested_rect) override;
void update_user_machine_list();
void show_print_failed_info(bool show, int code = 0, wxString description = wxEmptyString, wxString extra = wxEmptyString);
void update_print_error_info(int code, std::string msg, std::string extra);
wxString format_text(wxString& m_msg);
std::vector<std::string> sort_string(std::vector<std::string> strArray);
};

View file

@ -13,30 +13,68 @@ namespace BBL {
#define BAMBU_NETWORK_ERR_SEND_MSG_FAILED -4
#define BAMBU_NETWORK_ERR_BIND_FAILED -5
#define BAMBU_NETWORK_ERR_UNBIND_FAILED -6
#define BAMBU_NETWORK_ERR_PRINT_FAILED -7
#define BAMBU_NETWORK_ERR_LOCAL_PRINT_FAILED -8
#define BAMBU_NETWORK_ERR_REQUEST_SETTING_FAILED -9
#define BAMBU_NETWORK_ERR_PUT_SETTING_FAILED -10
#define BAMBU_NETWORK_ERR_GET_SETTING_LIST_FAILED -11
#define BAMBU_NETWORK_ERR_DEL_SETTING_FAILED -12
#define BAMBU_NETWORK_ERR_GET_USER_PRINTINFO_FAILED -13
#define BAMBU_NETWORK_ERR_GET_PRINTER_FIRMWARE_FAILED -14
#define BAMBU_NETWORK_ERR_QUERY_BIND_INFO_FAILED -15
#define BAMBU_NETWORK_ERR_MODIFY_PRINTER_NAME_FAILED -16
#define BAMBU_NETWORK_ERR_FILE_NOT_EXIST -17
#define BAMBU_NETWORK_ERR_FILE_OVER_SIZE -18
#define BAMBU_NETWORK_ERR_CHECK_MD5_FAILED -19
#define BAMBU_NETWORK_ERR_TIMEOUT -20
#define BAMBU_NETWORK_ERR_CANCELED -21
#define BAMBU_NETWORK_ERR_INVALID_PARAMS -22
#define BAMBU_NETWORK_ERR_INVALID_RESULT -23
#define BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED -24
#define BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED -25
#define BAMBU_NETWORK_ERR_GET_MODEL_PUBLISH_PAGE -26
#define BAMBU_NETWORK_ERR_GET_MODEL_MALL_HOME_PAGE -27
#define BAMBU_NETWORK_ERR_GET_USER_INFO -28
#define BAMBU_NETWORK_ERR_WRONG_IP_ADDRESS -29
#define BAMBU_NETWORK_ERR_NO_SPACE_LEFT_ON_DEVICE -30
#define BAMBU_NETWORK_ERR_REQUEST_SETTING_FAILED -7
#define BAMBU_NETWORK_ERR_PUT_SETTING_FAILED -8
#define BAMBU_NETWORK_ERR_GET_SETTING_LIST_FAILED -9
#define BAMBU_NETWORK_ERR_DEL_SETTING_FAILED -10
#define BAMBU_NETWORK_ERR_GET_USER_PRINTINFO_FAILED -11
#define BAMBU_NETWORK_ERR_QUERY_BIND_INFO_FAILED -12
#define BAMBU_NETWORK_ERR_MODIFY_PRINTER_NAME_FAILED -13
#define BAMBU_NETWORK_ERR_FILE_NOT_EXIST -14
#define BAMBU_NETWORK_ERR_FILE_OVER_SIZE -15
#define BAMBU_NETWORK_ERR_CHECK_MD5_FAILED -16
#define BAMBU_NETWORK_ERR_TIMEOUT -17
#define BAMBU_NETWORK_ERR_CANCELED -18
#define BAMBU_NETWORK_ERR_INVALID_RESULT -19
#define BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED -20
//bind error
#define BAMBU_NETWORK_ERR_BIND_CREATE_SOCKET_FAILED -1010 //failed to create socket
#define BAMBU_NETWORK_ERR_BIND_SOCKET_CONNECT_FAILED -1020 //failed to socket connect
#define BAMBU_NETWORK_ERR_BIND_PUBLISH_LOGIN_REQUEST -1030 //failed to publish login request
#define BAMBU_NETWORK_ERR_BIND_GET_PRINTER_TICKET_TIMEOUT -1040 //timeout to get ticket from printer
#define BAMBU_NETWORK_ERR_BIND_GET_CLOUD_TICKET_TIMEOUT -1050 //timeout to get ticket from cloud server
#define BAMBU_NETWORK_ERR_BIND_POST_TICKET_TO_CLOUD_FAILED -1060 //failed to post ticket to cloud server
#define BAMBU_NETWORK_ERR_BIND_PARSE_LOGIN_REPORT_FAILED -1070 //failed to parse login report reason
#define BAMBU_NETWORK_ERR_BIND_RECEIVE_LOGIN_REPORT_TIMEOUT -1080 //timeout to receive login report
//start_local_print_with_record error
#define BAMBU_NETWORK_ERR_PRINT_WR_REQUEST_PROJECT_ID_FAILED -2010 //failed to request project id
#define BAMBU_NETWORK_ERR_PRINT_WR_CHECK_MD5_FAILED -2020 //failed to check md5 for upload 3mf to oss
#define BAMBU_NETWORK_ERR_PRINT_WR_UPLOAD_3MF_CONFIG_TO_OSS_FAILED -2030 //failed to upload 3mf config to oss
#define BAMBU_NETWORK_ERR_PRINT_WR_FILE_OVER_SIZE -2040 //the size of the uploaded file cannot exceed 1 GB
#define BAMBU_NETWORK_ERR_PRINT_WR_PUT_NOTIFICATION_FAILED -2050 //timeout to get notification
#define BAMBU_NETWORK_ERR_PRINT_WR_GET_NOTIFICATION_TIMEOUT -2060 //timeout to get notification
#define BAMBU_NETWORK_ERR_PRINT_WR_GET_NOTIFICATION_FAILED -2070 //failed to get notification
#define BAMBU_NETWORK_ERR_PRINT_WR_PATCH_PROJECT_FAILED -2080 //failed to patch project
#define BAMBU_NETWORK_ERR_PRINT_WR_GET_MY_SETTING_FAILED -2090 //failed to get my setting
#define BAMBU_NETWORK_ERR_PRINT_WR_FILE_NOT_EXIST -2100 //3mf file is not exists
#define BAMBU_NETWORK_ERR_PRINT_WR_UPLOAD_3MF_TO_OSS_FAILED -2110 //failed to upload 3mf to oss
#define BAMBU_NETWORK_ERR_PRINT_WR_POST_TASK_FAILED -2120 //failed to post task
#define BAMBU_NETWORK_ERR_PRINT_WR_UPLOAD_FTP_FAILED -2130 //failed to upload to ftp
#define BAMBU_NETWORK_ERR_PRINT_WR_GET_USER_UPLOAD_FAILED -2140 //failed to get_user_upload
//start_print error
#define BAMBU_NETWORK_ERR_PRINT_SP_REQUEST_PROJECT_ID_FAILED -3010 //failed to request project id
#define BAMBU_NETWORK_ERR_PRINT_SP_CHECK_MD5_FAILED -3020 //failed to check md5 for upload 3mf to oss
#define BAMBU_NETWORK_ERR_PRINT_SP_UPLOAD_3MF_CONFIG_TO_OSS_FAILED -3030 //failed to upload 3mf config to oss
#define BAMBU_NETWORK_ERR_PRINT_SP_PUT_NOTIFICATION_FAILED -3040 //failed to put notification
#define BAMBU_NETWORK_ERR_PRINT_SP_GET_NOTIFICATION_TIMEOUT -3050 //timeout to get notification
#define BAMBU_NETWORK_ERR_PRINT_SP_GET_NOTIFICATION_FAILED -3060 //failed to get notification
#define BAMBU_NETWORK_ERR_PRINT_SP_FILE_NOT_EXIST -3070 //3mf file is not exists
#define BAMBU_NETWORK_ERR_PRINT_SP_GET_USER_UPLOAD_FAILED -3080 //failed to get_user_upload
#define BAMBU_NETWORK_ERR_PRINT_SP_FILE_OVER_SIZE -3090 //the size of the uploaded file cannot exceed 1 GB
#define BAMBU_NETWORK_ERR_PRINT_SP_UPLOAD_3MF_TO_OSS_FAILED -3100 //failed to upload 3mf to oss
#define BAMBU_NETWORK_ERR_PRINT_SP_PATCH_PROJECT_FAILED -3110 //failed to patch project
#define BAMBU_NETWORK_ERR_PRINT_SP_POST_TASK_FAILED -3120 //failed to post task
//start_local_print error
#define BAMBU_NETWORK_ERR_PRINT_LP_FILE_OVER_SIZE -4010 //the size of the uploaded file cannot exceed 1 GB
#define BAMBU_NETWORK_ERR_PRINT_LP_UPLOAD_FTP_FAILED -4020 //failed to upload ftp
#define BAMBU_NETWORK_ERR_PRINT_LP_PUBLISH_MSG_FAILED -4030 //failed to send mqtt message to device
//start_send_gcode_to_sdcard error
#define BAMBU_NETWORK_ERR_PRINT_SG_UPLOAD_FTP_FAILED -5010 //failed to upload ftp
#define BAMBU_NETWORK_LIBRARY "bambu_networking"
@ -87,6 +125,7 @@ enum SendingPrintJobStage {
PrintingStageSending = 3,
PrintingStageRecord = 4,
PrintingStageFinished = 5,
PrintingStageERROR = 6,
};
enum PublishingStage {