diff --git a/src/slic3r/GUI/DownloadProgressDialog.cpp b/src/slic3r/GUI/DownloadProgressDialog.cpp index 1f2fbe7ec..b30ec3d2c 100644 --- a/src/slic3r/GUI/DownloadProgressDialog.cpp +++ b/src/slic3r/GUI/DownloadProgressDialog.cpp @@ -31,6 +31,13 @@ namespace GUI { DownloadProgressDialog::DownloadProgressDialog(wxString title) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { + wxString download_failed_url = wxT("https://wiki.bambulab.com/e/en/software/bambu-studio/failed-to-get-network-plugin"); + wxString install_failed_url = wxT("https://wiki.bambulab.com/e/en/software/bambu-studio/failed-to-get-network-plugin"); + + wxString download_failed_msg = _L("Download Failed. Please check your firewall settings and vpn software, check and retry."); + wxString install_failed_msg = _L("Installed failed. Check whether the plugin is deleted by the antivirus software."); + + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); @@ -39,14 +46,68 @@ DownloadProgressDialog::DownloadProgressDialog(wxString title) auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); - m_status_bar = std::make_shared(this); + + + m_simplebook_status = new wxSimplebook(this); + m_simplebook_status->SetSize(wxSize(FromDIP(400), FromDIP(70))); + m_simplebook_status->SetMinSize(wxSize(FromDIP(400), FromDIP(70))); + m_simplebook_status->SetMaxSize(wxSize(FromDIP(400), FromDIP(70))); + + //mode normal + m_status_bar = std::make_shared(m_simplebook_status); m_panel_download = m_status_bar->get_panel(); - m_panel_download->SetSize(wxSize(FromDIP(340), -1)); - m_panel_download->SetMinSize(wxSize(FromDIP(340), -1)); - m_panel_download->SetMaxSize(wxSize(FromDIP(340), -1)); - m_sizer_main->Add(m_panel_download, 0, wxALL, FromDIP(20)); + m_panel_download->SetSize(wxSize(FromDIP(400), FromDIP(70))); + m_panel_download->SetMinSize(wxSize(FromDIP(400), FromDIP(70))); + m_panel_download->SetMaxSize(wxSize(FromDIP(400), FromDIP(70))); + + + //mode Download Failed + auto m_panel_download_failed = new wxPanel(m_simplebook_status, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + + wxBoxSizer* sizer_download_failed = new wxBoxSizer(wxVERTICAL); + + auto m_statictext_download_failed = new wxStaticText(m_panel_download_failed, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + m_statictext_download_failed->SetLabel(format_text(m_statictext_download_failed, download_failed_msg, FromDIP(360))); + m_statictext_download_failed->Wrap(FromDIP(360)); + + sizer_download_failed->Add(m_statictext_download_failed, 0, wxALIGN_CENTER | wxALL, 5); + + auto m_download_hyperlink = new wxHyperlinkCtrl(m_panel_download_failed, wxID_ANY, _L("click here to see more info"), download_failed_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); + sizer_download_failed->Add(m_download_hyperlink, 0, wxALIGN_CENTER | wxALL, 5); + + + m_panel_download_failed->SetSizer(sizer_download_failed); + m_panel_download_failed->Layout(); + sizer_download_failed->Fit(m_panel_download_failed); + + + //mode Installed failed + auto m_panel_install_failed = new wxPanel(m_simplebook_status, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + + wxBoxSizer* sizer_install_failed = new wxBoxSizer(wxVERTICAL); + + auto m_statictext_install_failed = new wxStaticText(m_panel_install_failed, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + m_statictext_install_failed->SetLabel(format_text(m_statictext_install_failed, install_failed_msg,FromDIP(360))); + m_statictext_install_failed->Wrap(FromDIP(360)); + + sizer_install_failed->Add(m_statictext_install_failed, 0, wxALIGN_CENTER | wxALL, 5); + + auto m_install_hyperlink = new wxHyperlinkCtrl(m_panel_install_failed, wxID_ANY, _L("click here to see more info"), install_failed_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); + sizer_install_failed->Add(m_install_hyperlink, 0, wxALIGN_CENTER | wxALL, 5); + + + m_panel_download_failed->SetSizer(sizer_install_failed); + m_panel_download_failed->Layout(); + sizer_install_failed->Fit(m_panel_install_failed); + + m_sizer_main->Add(m_simplebook_status, 0, wxALL, FromDIP(20)); m_sizer_main->Add(0, 0, 1, wxBOTTOM, 10); + + m_simplebook_status->AddPage(m_status_bar->get_panel(), wxEmptyString, true); + m_simplebook_status->AddPage(m_panel_download_failed, wxEmptyString, false); + m_simplebook_status->AddPage(m_panel_install_failed, wxEmptyString, false); + SetSizer(m_sizer_main); Layout(); Fit(); @@ -55,9 +116,31 @@ DownloadProgressDialog::DownloadProgressDialog(wxString title) Bind(wxEVT_CLOSE_WINDOW, &DownloadProgressDialog::on_close, this); } +wxString DownloadProgressDialog::format_text(wxStaticText* st, wxString str, int warp) +{ + if (wxGetApp().app_config->get("language") != "zh_CN") { return str; } + + wxString out_txt = str; + wxString count_txt = ""; + int new_line_pos = 0; + + for (int i = 0; i < str.length(); i++) { + auto text_size = st->GetTextExtent(count_txt); + if (text_size.x < warp) { + count_txt += str[i]; + } + else { + out_txt.insert(i - 1, '\n'); + count_txt = ""; + } + } + return out_txt; +} + bool DownloadProgressDialog::Show(bool show) { if (show) { + m_simplebook_status->SetSelection(0); m_upgrade_job = std::make_shared(m_status_bar); m_upgrade_job->set_event_handle(this); m_status_bar->set_progress(0); @@ -71,9 +154,23 @@ bool DownloadProgressDialog::Show(bool show) ); }); - Bind(EVT_UPGRADE_NETWORK_FAILED, [this](wxCommandEvent& evt) { + //download failed + Bind(EVT_DOWNLOAD_NETWORK_FAILED, [this](wxCommandEvent& evt) { m_status_bar->change_button_label(_L("Close")); m_status_bar->set_progress(0); + this->m_simplebook_status->SetSelection(1); + m_status_bar->set_cancel_callback_fina( + [this]() { + this->Close(); + } + ); + }); + + //install failed + Bind(EVT_INSTALL_NETWORK_FAILED, [this](wxCommandEvent& evt) { + m_status_bar->change_button_label(_L("Close")); + m_status_bar->set_progress(0); + this->m_simplebook_status->SetSelection(2); m_status_bar->set_cancel_callback_fina( [this]() { this->Close(); diff --git a/src/slic3r/GUI/DownloadProgressDialog.hpp b/src/slic3r/GUI/DownloadProgressDialog.hpp index b35d206d1..0f5504cc1 100644 --- a/src/slic3r/GUI/DownloadProgressDialog.hpp +++ b/src/slic3r/GUI/DownloadProgressDialog.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include "Widgets/Button.hpp" #include "BBLStatusBar.hpp" #include "BBLStatusBarSend.hpp" @@ -37,11 +38,14 @@ protected: public: DownloadProgressDialog(wxString title); + wxString format_text(wxStaticText* st, wxString str, int warp); ~DownloadProgressDialog(); void on_dpi_changed(const wxRect &suggested_rect) override; void update_release_note(std::string release_note, std::string version); + wxSimplebook* m_simplebook_status{nullptr}; + std::shared_ptr m_status_bar; std::shared_ptr m_upgrade_job { nullptr }; wxPanel * m_panel_download; diff --git a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp index 8b53cb303..827cd8843 100644 --- a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp +++ b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp @@ -9,7 +9,8 @@ namespace GUI { wxDEFINE_EVENT(EVT_UPGRADE_UPDATE_MESSAGE, wxCommandEvent); wxDEFINE_EVENT(EVT_UPGRADE_NETWORK_SUCCESS, wxCommandEvent); -wxDEFINE_EVENT(EVT_UPGRADE_NETWORK_FAILED, wxCommandEvent); +wxDEFINE_EVENT(EVT_DOWNLOAD_NETWORK_FAILED, wxCommandEvent); +wxDEFINE_EVENT(EVT_INSTALL_NETWORK_FAILED, wxCommandEvent); UpgradeNetworkJob::UpgradeNetworkJob(std::shared_ptr pri) @@ -88,7 +89,7 @@ void UpgradeNetworkJob::process() if (result < 0) { update_status(0, _L("Download failed")); - wxCommandEvent event(EVT_UPGRADE_NETWORK_FAILED); + wxCommandEvent event(EVT_DOWNLOAD_NETWORK_FAILED); event.SetEventObject(m_event_handle); wxPostEvent(m_event_handle, event); return; @@ -112,7 +113,7 @@ void UpgradeNetworkJob::process() if (result != 0) { update_status(0, _L("Install failed")); - wxCommandEvent event(EVT_UPGRADE_NETWORK_FAILED); + wxCommandEvent event(EVT_INSTALL_NETWORK_FAILED); event.SetEventObject(m_event_handle); wxPostEvent(m_event_handle, event); return; diff --git a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp index 54c3c14c4..f26dcba37 100644 --- a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp +++ b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp @@ -49,7 +49,8 @@ public: wxDECLARE_EVENT(EVT_UPGRADE_UPDATE_MESSAGE, wxCommandEvent); wxDECLARE_EVENT(EVT_UPGRADE_NETWORK_SUCCESS, wxCommandEvent); -wxDECLARE_EVENT(EVT_UPGRADE_NETWORK_FAILED, wxCommandEvent); +wxDECLARE_EVENT(EVT_DOWNLOAD_NETWORK_FAILED, wxCommandEvent); +wxDECLARE_EVENT(EVT_INSTALL_NETWORK_FAILED, wxCommandEvent); }} // namespace Slic3r::GUI