FIX: join bind_job when close BindDialog

Change-Id: Ide24f4d116d65063ebc414230abe12ef94d9dd23
Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
Stone Li 2022-08-31 11:33:40 +08:00 committed by Lane.Wei
parent 30a97cc6dc
commit b7974185fa
3 changed files with 57 additions and 41 deletions

View file

@ -15,7 +15,7 @@
namespace Slic3r { namespace Slic3r {
namespace GUI { namespace GUI {
BindMachineDilaog::BindMachineDilaog(Plater *plater /*= nullptr*/) BindMachineDialog::BindMachineDialog(Plater *plater /*= nullptr*/)
: DPIDialog(static_cast<wxWindow *>(wxGetApp().mainframe), wxID_ANY, _L("Log in printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION) : DPIDialog(static_cast<wxWindow *>(wxGetApp().mainframe), wxID_ANY, _L("Log in printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION)
{ {
std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str();
@ -172,23 +172,25 @@ namespace GUI {
Fit(); Fit();
Centre(wxBOTH); Centre(wxBOTH);
Bind(wxEVT_SHOW, &BindMachineDilaog::on_show, this); Bind(wxEVT_SHOW, &BindMachineDialog::on_show, this);
m_button_bind->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDilaog::on_bind_printer), NULL, this); Bind(wxEVT_CLOSE_WINDOW, &BindMachineDialog::on_close, this);
m_button_cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDilaog::on_cancel), NULL, this);
this->Connect(EVT_BIND_MACHINE_FAIL, wxCommandEventHandler(BindMachineDilaog::on_bind_fail), NULL, this); m_button_bind->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDialog::on_bind_printer), NULL, this);
this->Connect(EVT_BIND_MACHINE_SUCCESS, wxCommandEventHandler(BindMachineDilaog::on_bind_success), NULL, this); m_button_cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDialog::on_cancel), NULL, this);
this->Connect(EVT_BIND_UPDATE_MESSAGE, wxCommandEventHandler(BindMachineDilaog::on_update_message), NULL, this); this->Connect(EVT_BIND_MACHINE_FAIL, wxCommandEventHandler(BindMachineDialog::on_bind_fail), NULL, this);
this->Connect(EVT_BIND_MACHINE_SUCCESS, wxCommandEventHandler(BindMachineDialog::on_bind_success), NULL, this);
this->Connect(EVT_BIND_UPDATE_MESSAGE, wxCommandEventHandler(BindMachineDialog::on_update_message), NULL, this);
m_simplebook->SetSelection(1); m_simplebook->SetSelection(1);
} }
BindMachineDilaog::~BindMachineDilaog() BindMachineDialog::~BindMachineDialog()
{ {
m_button_bind->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDilaog::on_bind_printer), NULL, this); m_button_bind->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDialog::on_bind_printer), NULL, this);
m_button_cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDilaog::on_cancel), NULL, this); m_button_cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BindMachineDialog::on_cancel), NULL, this);
this->Disconnect(EVT_BIND_MACHINE_FAIL, wxCommandEventHandler(BindMachineDilaog::on_bind_fail), NULL, this); this->Disconnect(EVT_BIND_MACHINE_FAIL, wxCommandEventHandler(BindMachineDialog::on_bind_fail), NULL, this);
this->Disconnect(EVT_BIND_MACHINE_SUCCESS, wxCommandEventHandler(BindMachineDilaog::on_bind_success), NULL, this); this->Disconnect(EVT_BIND_MACHINE_SUCCESS, wxCommandEventHandler(BindMachineDialog::on_bind_success), NULL, this);
this->Disconnect(EVT_BIND_UPDATE_MESSAGE, wxCommandEventHandler(BindMachineDilaog::on_update_message), NULL, this); 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) //static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
@ -205,30 +207,43 @@ namespace GUI {
//} //}
void BindMachineDilaog::on_cancel(wxCommandEvent &event) void BindMachineDialog::on_cancel(wxCommandEvent &event)
{ {
EndModal(wxID_CANCEL); if (m_bind_job) {
m_bind_job->cancel();
m_bind_job->join();
}
EndModal(wxID_CANCEL);
} }
void BindMachineDilaog::on_bind_fail(wxCommandEvent &event) void BindMachineDialog::on_close(wxCloseEvent &event)
{
if (m_bind_job) {
m_bind_job->cancel();
m_bind_job->join();
}
event.Skip();
}
void BindMachineDialog::on_bind_fail(wxCommandEvent &event)
{ {
//m_status_text->SetLabel(_L("Would you like to log in this printer with current account?")); //m_status_text->SetLabel(_L("Would you like to log in this printer with current account?"));
m_simplebook->SetSelection(1); m_simplebook->SetSelection(1);
} }
void BindMachineDilaog::on_update_message(wxCommandEvent &event) void BindMachineDialog::on_update_message(wxCommandEvent &event)
{ {
m_status_text->SetLabelText(event.GetString()); m_status_text->SetLabelText(event.GetString());
} }
void BindMachineDilaog::on_bind_success(wxCommandEvent &event) void BindMachineDialog::on_bind_success(wxCommandEvent &event)
{ {
EndModal(wxID_OK); EndModal(wxID_OK);
MessageDialog msg_wingow(nullptr, _L("Log in successful."), "", wxAPPLY | wxOK); MessageDialog msg_wingow(nullptr, _L("Log in successful."), "", wxAPPLY | wxOK);
if (msg_wingow.ShowModal() == wxOK) { return; } if (msg_wingow.ShowModal() == wxOK) { return; }
} }
void BindMachineDilaog::on_bind_printer(wxCommandEvent &event) void BindMachineDialog::on_bind_printer(wxCommandEvent &event)
{ {
//check isset info //check isset info
if (m_machine_info == nullptr || m_machine_info == NULL) return; if (m_machine_info == nullptr || m_machine_info == NULL) return;
@ -242,13 +257,13 @@ namespace GUI {
m_bind_job->start(); m_bind_job->start();
} }
void BindMachineDilaog::on_dpi_changed(const wxRect &suggested_rect) void BindMachineDialog::on_dpi_changed(const wxRect &suggested_rect)
{ {
m_button_bind->SetMinSize(BIND_DIALOG_BUTTON_SIZE); m_button_bind->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE); m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
} }
void BindMachineDilaog::on_show(wxShowEvent &event) void BindMachineDialog::on_show(wxShowEvent &event)
{ {
//m_printer_name->SetLabelText(m_machine_info->get_printer_type_string()); //m_printer_name->SetLabelText(m_machine_info->get_printer_type_string());
m_printer_name->SetLabelText(from_u8(m_machine_info->dev_name)); m_printer_name->SetLabelText(from_u8(m_machine_info->dev_name));
@ -256,7 +271,7 @@ void BindMachineDilaog::on_show(wxShowEvent &event)
} }
UnBindMachineDilaog::UnBindMachineDilaog(Plater *plater /*= nullptr*/) UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/)
: DPIDialog(static_cast<wxWindow *>(wxGetApp().mainframe), wxID_ANY, _L("Log out printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION) : DPIDialog(static_cast<wxWindow *>(wxGetApp().mainframe), wxID_ANY, _L("Log out printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION)
{ {
std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str();
@ -402,24 +417,24 @@ UnBindMachineDilaog::UnBindMachineDilaog(Plater *plater /*= nullptr*/)
Fit(); Fit();
Centre(wxBOTH); Centre(wxBOTH);
Bind(wxEVT_SHOW, &UnBindMachineDilaog::on_show, this); Bind(wxEVT_SHOW, &UnBindMachineDialog::on_show, this);
m_button_unbind->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDilaog::on_unbind_printer), NULL, this); m_button_unbind->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDialog::on_unbind_printer), NULL, this);
m_button_cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDilaog::on_cancel), NULL, this); m_button_cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDialog::on_cancel), NULL, this);
} }
UnBindMachineDilaog::~UnBindMachineDilaog() UnBindMachineDialog::~UnBindMachineDialog()
{ {
m_button_unbind->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDilaog::on_unbind_printer), NULL, this); m_button_unbind->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDialog::on_unbind_printer), NULL, this);
m_button_cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDilaog::on_cancel), NULL, this); m_button_cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(UnBindMachineDialog::on_cancel), NULL, this);
} }
void UnBindMachineDilaog::on_cancel(wxCommandEvent &event) void UnBindMachineDialog::on_cancel(wxCommandEvent &event)
{ {
EndModal(wxID_CANCEL); EndModal(wxID_CANCEL);
} }
void UnBindMachineDilaog::on_unbind_printer(wxCommandEvent &event) void UnBindMachineDialog::on_unbind_printer(wxCommandEvent &event)
{ {
if (!wxGetApp().is_user_login()) { if (!wxGetApp().is_user_login()) {
m_status_text->SetLabelText(_L("Please log in first.")); m_status_text->SetLabelText(_L("Please log in first."));
@ -455,13 +470,13 @@ void UnBindMachineDilaog::on_unbind_printer(wxCommandEvent &event)
} }
} }
void UnBindMachineDilaog::on_dpi_changed(const wxRect &suggested_rect) void UnBindMachineDialog::on_dpi_changed(const wxRect &suggested_rect)
{ {
m_button_unbind->SetMinSize(BIND_DIALOG_BUTTON_SIZE); m_button_unbind->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE); m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
} }
void UnBindMachineDilaog::on_show(wxShowEvent &event) void UnBindMachineDialog::on_show(wxShowEvent &event)
{ {
//m_printer_name->SetLabelText(m_machine_info->get_printer_type_string()); //m_printer_name->SetLabelText(m_machine_info->get_printer_type_string());
m_printer_name->SetLabelText(from_u8(m_machine_info->dev_name)); m_printer_name->SetLabelText(from_u8(m_machine_info->dev_name));

View file

@ -42,7 +42,7 @@ struct MemoryStruct
size_t size; size_t size;
}; };
class BindMachineDilaog : public DPIDialog class BindMachineDialog : public DPIDialog
{ {
private: private:
wxStaticText * m_printer_name; wxStaticText * m_printer_name;
@ -60,8 +60,8 @@ private:
std::shared_ptr<BBLStatusBarBind> m_status_bar; std::shared_ptr<BBLStatusBarBind> m_status_bar;
public: public:
BindMachineDilaog(Plater *plater = nullptr); BindMachineDialog(Plater *plater = nullptr);
~BindMachineDilaog(); ~BindMachineDialog();
void on_cancel(wxCommandEvent &event); void on_cancel(wxCommandEvent &event);
void on_bind_fail(wxCommandEvent &event); void on_bind_fail(wxCommandEvent &event);
void on_update_message(wxCommandEvent &event); void on_update_message(wxCommandEvent &event);
@ -70,9 +70,10 @@ public:
void on_dpi_changed(const wxRect &suggested_rect) override; void on_dpi_changed(const wxRect &suggested_rect) override;
void update_machine_info(MachineObject *info) { m_machine_info = info; }; void update_machine_info(MachineObject *info) { m_machine_info = info; };
void on_show(wxShowEvent &event); void on_show(wxShowEvent &event);
void on_close(wxCloseEvent& event);
}; };
class UnBindMachineDilaog : public DPIDialog class UnBindMachineDialog : public DPIDialog
{ {
protected: protected:
wxStaticText * m_printer_name; wxStaticText * m_printer_name;
@ -84,8 +85,8 @@ protected:
wxStaticBitmap *m_avatar; wxStaticBitmap *m_avatar;
public: public:
UnBindMachineDilaog(Plater *plater = nullptr); UnBindMachineDialog(Plater *plater = nullptr);
~UnBindMachineDilaog(); ~UnBindMachineDialog();
void on_cancel(wxCommandEvent &event); void on_cancel(wxCommandEvent &event);
void on_unbind_printer(wxCommandEvent &event); void on_unbind_printer(wxCommandEvent &event);

View file

@ -122,7 +122,7 @@ MachineObjectPanel::~MachineObjectPanel() {}
void MachineObjectPanel::show_bind_dialog() void MachineObjectPanel::show_bind_dialog()
{ {
if (wxGetApp().is_user_login()) { if (wxGetApp().is_user_login()) {
BindMachineDilaog dlg; BindMachineDialog dlg;
dlg.update_machine_info(m_info); dlg.update_machine_info(m_info);
dlg.ShowModal(); dlg.ShowModal();
} }
@ -559,7 +559,7 @@ void SelectMachinePopup::update_other_devices()
}); });
op->Bind(EVT_BIND_MACHINE, [this, mobj](wxCommandEvent &e) { op->Bind(EVT_BIND_MACHINE, [this, mobj](wxCommandEvent &e) {
BindMachineDilaog dlg; BindMachineDialog dlg;
dlg.update_machine_info(mobj); dlg.update_machine_info(mobj);
int dlg_result = wxID_CANCEL; int dlg_result = wxID_CANCEL;
dlg_result = dlg.ShowModal(); dlg_result = dlg.ShowModal();
@ -647,7 +647,7 @@ void SelectMachinePopup::update_user_devices()
op->show_printer_bind(true, PrinterBindState::ALLOW_UNBIND); op->show_printer_bind(true, PrinterBindState::ALLOW_UNBIND);
op->Bind(EVT_UNBIND_MACHINE, [this, mobj, dev](wxCommandEvent& e) { op->Bind(EVT_UNBIND_MACHINE, [this, mobj, dev](wxCommandEvent& e) {
// show_unbind_dialog // show_unbind_dialog
UnBindMachineDilaog dlg; UnBindMachineDialog dlg;
dlg.update_machine_info(mobj); dlg.update_machine_info(mobj);
if (dlg.ShowModal() == wxID_OK) { if (dlg.ShowModal() == wxID_OK) {
dev->set_selected_machine(""); dev->set_selected_machine("");