FIX:fixed can't popup pinbind win on macos

jira:[STUDIO-6895]

Change-Id: I664bba78cf27420d736b586df19e3c09c6f8ed21
This commit is contained in:
tao wang 2024-04-19 17:40:03 +08:00 committed by Lane.Wei
parent c1376b76cb
commit 15b3fb3a54
6 changed files with 119 additions and 43 deletions

View File

@ -91,14 +91,14 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/)
request_bind_panel->SetBackgroundColour(*wxWHITE);
binding_panel->SetBackgroundColour(*wxWHITE);
m_status_text = new Label(request_bind_panel, _L("Please Find the ping code in Account page on printer screen,\n and type in the ping code below."));
m_status_text = new Label(request_bind_panel, _L("Please Find the Pin Code in Account page on printer screen,\n and type in the Pin Code below."));
m_status_text->SetBackgroundColour(*wxWHITE);
m_status_text->SetFont(Label::Body_14);
m_status_text->SetMaxSize(wxSize(FromDIP(440), -1));
m_status_text->Wrap(FromDIP(440));
m_status_text->SetForegroundColour(wxColour(38, 46, 48));
m_link_show_ping_code_wiki = new wxStaticText(request_bind_panel, wxID_ANY, _L("Can't find pin code?"));
m_link_show_ping_code_wiki = new wxStaticText(request_bind_panel, wxID_ANY, _L("Can't find Pin Code?"));
m_link_show_ping_code_wiki->SetFont(Label::Body_14);
m_link_show_ping_code_wiki->SetBackgroundColour(*wxWHITE);
m_link_show_ping_code_wiki->SetForegroundColour(wxColour(31, 142, 234));
@ -203,14 +203,6 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/)
m_button_close->SetCornerRadius(FromDIP(12));
m_sizer_binding_button->Add(m_button_close, 0, wxALIGN_CENTER, 0);
m_button_close->Bind(wxEVT_BUTTON, [this](auto& e) {
wxGetApp().remove_ping_bind_dialog();
});
this->Bind(wxEVT_CLOSE_WINDOW, [this](auto& e) {
wxGetApp().remove_ping_bind_dialog();
});
auto sizer_binding = new wxBoxSizer(wxVERTICAL);
sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(80));
sizer_binding->Add(m_loading_txt, 0, wxALIGN_CENTER, 0);
@ -292,7 +284,7 @@ void PingCodeBindDialog::on_bind_printer(wxCommandEvent& event)
auto result = agent->ping_bind(ping_code.ToStdString());
if(result < 0){
MessageDialog msg_wingow(nullptr, _L("Log in failed. Please check the pin code."), "", wxAPPLY | wxOK);
MessageDialog msg_wingow(nullptr, _L("Log in failed. Please check the Pin Code."), "", wxAPPLY | wxOK);
msg_wingow.ShowModal();
return;
}
@ -302,7 +294,7 @@ void PingCodeBindDialog::on_bind_printer(wxCommandEvent& event)
void PingCodeBindDialog::on_cancel(wxCommandEvent& event)
{
wxGetApp().remove_ping_bind_dialog();
EndModal(wxCLOSE);
}
void PingCodeBindDialog::on_dpi_changed(const wxRect& suggested_rect)
@ -312,6 +304,7 @@ void PingCodeBindDialog::on_dpi_changed(const wxRect& suggested_rect)
Refresh();
}
PingCodeBindDialog::~PingCodeBindDialog() {
m_button_bind->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_bind_printer), NULL, this);
m_button_cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this);

View File

@ -6346,6 +6346,7 @@ void GUI_App::popup_ping_bind_dialog()
if (m_ping_code_binding_dialog == nullptr) {
m_ping_code_binding_dialog = new PingCodeBindDialog();
m_ping_code_binding_dialog->ShowModal();
remove_ping_bind_dialog();
}
}

View File

@ -10,7 +10,7 @@ namespace GUI {
#define DEVICE_LEFT_PADDING_LEFT 15
#define DEVICE_LEFT_DEV_NAME 180
#define DEVICE_LEFT_PRO_NAME 180
#define DEVICE_LEFT_PRO_INFO 250
#define DEVICE_LEFT_PRO_INFO 280
class MultiMachineItem : public DeviceItem
{

View File

@ -395,38 +395,11 @@ SelectMachinePopup::SelectMachinePopup(wxWindow *parent)
m_sizer_other_devices = new wxBoxSizer(wxVERTICAL);
wxWindow* m_panel_ping_code = new wxWindow(m_scrolledWindow, wxID_ANY, wxDefaultPosition, SELECT_MACHINE_ITEM_SIZE, wxTAB_TRAVERSAL);
m_panel_ping_code->SetBackgroundColour(*wxWHITE);
wxBoxSizer* sizer_ping_code = new wxBoxSizer(wxHORIZONTAL);
m_img_ping_code = new wxStaticBitmap(m_panel_ping_code, wxID_ANY, create_scaled_bitmap("bind_device_ping_code", this, 10), wxDefaultPosition, wxSize(FromDIP(10), FromDIP(10)), 0);
m_img_ping_code->SetBackgroundColour(*wxWHITE);
m_ping_code_text = new Label(m_panel_ping_code, _L("Bind with Pin Code"));
m_ping_code_text->SetFont(::Label::Head_13);
m_ping_code_text->SetForegroundColour(wxColour(38, 46, 48));
m_ping_code_text->SetBackgroundColour(*wxWHITE);
m_panel_ping_code->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
wxGetApp().popup_ping_bind_dialog();
});
m_ping_code_text->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
wxGetApp().popup_ping_bind_dialog();
});
sizer_ping_code->Add(m_img_ping_code, 0, wxEXPAND, 0);
sizer_ping_code->Add(0, 0, 0, wxLEFT, FromDIP(7));
sizer_ping_code->Add(m_ping_code_text, 0, wxALIGN_CENTER, 0);
m_panel_ping_code->SetSizer(sizer_ping_code);
m_panel_ping_code->Layout();
m_panel_ping_code = new PinCodePanel(m_scrolledWindow, wxID_ANY, wxDefaultPosition, SELECT_MACHINE_ITEM_SIZE);
m_sizxer_scrolledWindow->Add(own_title, 0, wxEXPAND | wxLEFT, FromDIP(15));
m_sizxer_scrolledWindow->Add(m_sizer_my_devices, 0, wxEXPAND, 0);
m_sizxer_scrolledWindow->Add(m_panel_ping_code, 0, wxEXPAND | wxLEFT, FromDIP(8));
m_sizxer_scrolledWindow->Add(m_panel_ping_code, 0, wxEXPAND, 0);
m_sizxer_scrolledWindow->Add(other_title, 0, wxEXPAND | wxLEFT, FromDIP(15));
m_sizxer_scrolledWindow->Add(m_sizer_other_devices, 0, wxEXPAND, 0);
@ -898,6 +871,17 @@ void SelectMachinePopup::OnLeftUp(wxMouseEvent &event)
}
}
//pin code
auto pc_rect = m_panel_ping_code->ClientToScreen(wxPoint(0, 0));
if (mouse_pos.x > pc_rect.x && mouse_pos.y > pc_rect.y && mouse_pos.x < (pc_rect.x + m_panel_ping_code->GetSize().x) && mouse_pos.y < (pc_rect.y + m_panel_ping_code->GetSize().y)) {
/*wxMouseEvent event(wxEVT_LEFT_UP);
auto tag_pos = m_panel_ping_code->ScreenToClient(mouse_pos);
event.SetPosition(tag_pos);
event.SetEventObject(m_panel_ping_code);
wxPostEvent(m_panel_ping_code, event);*/
wxGetApp().popup_ping_bind_dialog();
}
//hyper link
auto h_rect = m_hyperlink->ClientToScreen(wxPoint(0, 0));
if (mouse_pos.x > h_rect.x && mouse_pos.y > h_rect.y && mouse_pos.x < (h_rect.x + m_hyperlink->GetSize().x) && mouse_pos.y < (h_rect.y + m_hyperlink->GetSize().y)) {
@ -4617,4 +4601,80 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e)
ThumbnailPanel::~ThumbnailPanel() {}
PinCodePanel::PinCodePanel(wxWindow* parent, wxWindowID winid /*= wxID_ANY*/, const wxPoint& pos /*= wxDefaultPosition*/, const wxSize& size /*= wxDefaultSize*/)
{
wxPanel::Create(parent, winid, pos, SELECT_MACHINE_ITEM_SIZE);
Bind(wxEVT_PAINT, &PinCodePanel::OnPaint, this);
SetSize(SELECT_MACHINE_ITEM_SIZE);
SetMaxSize(SELECT_MACHINE_ITEM_SIZE);
SetMinSize(SELECT_MACHINE_ITEM_SIZE);
m_bitmap = ScalableBitmap(this, "bind_device_ping_code",10);
this->Bind(wxEVT_ENTER_WINDOW, &PinCodePanel::on_mouse_enter, this);
this->Bind(wxEVT_LEAVE_WINDOW, &PinCodePanel::on_mouse_leave, this);
this->Bind(wxEVT_LEFT_UP, &PinCodePanel::on_mouse_left_up, this);
}
void PinCodePanel::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
render(dc);
}
void PinCodePanel::render(wxDC& dc)
{
#ifdef __WXMSW__
wxSize size = GetSize();
wxMemoryDC memdc;
wxBitmap bmp(size.x, size.y);
memdc.SelectObject(bmp);
memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 });
{
wxGCDC dc2(memdc);
doRender(dc2);
}
memdc.SelectObject(wxNullBitmap);
dc.DrawBitmap(bmp, 0, 0);
#else
doRender(dc);
#endif
}
void PinCodePanel::doRender(wxDC& dc)
{
auto size = GetSize();
dc.DrawBitmap(m_bitmap.bmp(), wxPoint(FromDIP(20), (size.y - m_bitmap.GetBmpSize().y) / 2));
dc.SetFont(::Label::Head_13);
dc.SetTextForeground(wxColour(38, 46, 48));
wxString txt = _L("Bind with Pin Code");
auto txt_size = dc.GetTextExtent(txt);
dc.DrawText(txt, wxPoint(FromDIP(40), (size.y - txt_size.y) / 2));
if (m_hover) {
dc.SetPen(SELECT_MACHINE_BRAND);
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRectangle(0, 0, size.x, size.y);
}
}
void PinCodePanel::on_mouse_enter(wxMouseEvent& evt)
{
m_hover = true;
Refresh();
}
void PinCodePanel::on_mouse_leave(wxMouseEvent& evt)
{
m_hover = false;
Refresh();
}
void PinCodePanel::on_mouse_left_up(wxMouseEvent& evt)
{
wxGetApp().popup_ping_bind_dialog();
}
}} // namespace Slic3r::GUI

View File

@ -208,6 +208,27 @@ public:
MachineObjectPanel *mPanel;
};
class PinCodePanel : public wxPanel
{
public:
PinCodePanel(wxWindow* parent,
wxWindowID winid = wxID_ANY,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize);
~PinCodePanel() {};
ScalableBitmap m_bitmap;
bool m_hover{false};
void OnPaint(wxPaintEvent& event);
void render(wxDC& dc);
void doRender(wxDC& dc);
void on_mouse_enter(wxMouseEvent& evt);
void on_mouse_leave(wxMouseEvent& evt);
void on_mouse_left_up(wxMouseEvent& evt);
};
class ThumbnailPanel;
@ -230,6 +251,7 @@ public:
private:
int m_my_devices_count{0};
int m_other_devices_count{0};
PinCodePanel* m_panel_ping_code{nullptr};
wxWindow* m_placeholder_panel{nullptr};
wxHyperlinkCtrl* m_hyperlink{nullptr};
Label* m_ping_code_text{nullptr};

View File

@ -56,9 +56,9 @@ int UserManager::parse_json(std::string payload)
if (!dev) {return -1;}
if (GUI::wxGetApp().m_ping_code_binding_dialog && GUI::wxGetApp().m_ping_code_binding_dialog->IsShown()) {
GUI::wxGetApp().m_ping_code_binding_dialog->EndModal(wxCLOSE);
GUI::MessageDialog msgdialog(nullptr, _L("Log in successful."), "", wxAPPLY | wxOK);
msgdialog.ShowModal();
GUI::wxGetApp().remove_ping_bind_dialog();
}
dev->update_user_machine_list_info();
dev->set_selected_machine(dev_id);