From 5a2925466db4c5162bb1cc644e98652851b21687 Mon Sep 17 00:00:00 2001 From: YuSanka <yusanka@gmail.com> Date: Wed, 12 Jan 2022 11:19:59 +0100 Subject: [PATCH] Follow-up to https://github.com/prusa3d/PrusaSlicer/commit/1dffc40f324a9bf2361b55c0f4e227508e25f388 - Fixed a message text. +Improved context of the MessageDialogs. We can use hyperlinks now. --- src/slic3r/GUI/GUI_App.cpp | 34 +++++++++++++++++++++++----------- src/slic3r/GUI/MsgDialog.cpp | 18 +++++++++++++++--- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 42ea55578..12a5fc4e2 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1322,19 +1322,31 @@ bool GUI_App::on_init_inner() m_initialized = true; if (const std::string& crash_reason = app_config->get("restore_win_position"); - crash_reason.find_first_of("crashed") == 0) + boost::starts_with(crash_reason,"crashed")) { - MessageDialog dialog(mainframe, - format_wxstr(_L("PrusaSlicer was crashed during a previous start due to \"%1%\".\n" - "PrusaSlicer works in save mode now.\n" - "To avoid a next application crash you have to disable\n" - "\"%2%\" in \"Preferences\""), from_u8(crash_reason), _L("Restore window position on start")) - + "\n\n" + - format_wxstr(_L("Do you want to disable \"%1%\"?"), _L("Restore window position on start")), - _L("Start PrusaSlicer in save mode"), - wxICON_QUESTION | wxYES_NO); - if (dialog.ShowModal() == wxID_YES) + wxString preferences_item = _L("Restore window position on start"); + InfoDialog dialog(nullptr, + _L("PrusaSlicer is started in save mode"), + format_wxstr(_L("PrusaSlicer was crashed last time due to \"%1%\".\n" + "For more information see issues \"%2%\" and \"%3%\"\n\n" + "To avoid an application crash next time you have to disable\n" + "\"%4%\" in \"Preferences\""), + "<b>" + from_u8(crash_reason) + "</b>", + "<a href=http://github.com/prusa3d/PrusaSlicer/issues/2939>#2939</a>", + "<a href=http://github.com/prusa3d/PrusaSlicer/issues/5573>#5573</a>", + "<b>" + preferences_item + "</b>") + + "\n\n" + + format_wxstr(_L("Note: Enabling of the \"%1%\" will caused an application crash on next start."), preferences_item), + true, wxYES_NO); + + dialog.SetButtonLabel(wxID_YES, format_wxstr(_L("Disable \"%1%\""), preferences_item)); + dialog.SetButtonLabel(wxID_NO, format_wxstr(_L("Enable \"%1%\"") , preferences_item)); + + auto answer = dialog.ShowModal(); + if (answer == wxID_YES) app_config->set("restore_win_position", "0"); + else if (answer == wxID_NO) + app_config->set("restore_win_position", "1"); } return true; diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index 199fdebce..f64923c9b 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -24,7 +24,6 @@ namespace Slic3r { namespace GUI { - MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &headline, long style, wxBitmap bitmap) : wxDialog(parent ? parent : dynamic_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) , boldfont(wxGetApp().normal_font()) @@ -182,13 +181,26 @@ static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxStrin } html->SetMinSize(page_size); - std::string msg_escaped = xml_escape(msg.ToUTF8().data(), is_marked_msg); + std::string msg_escaped = xml_escape(into_u8(msg), is_marked_msg); boost::replace_all(msg_escaped, "\r\n", "<br>"); boost::replace_all(msg_escaped, "\n", "<br>"); if (monospaced_font) // Code formatting will be preserved. This is useful for reporting errors from the placeholder parser. msg_escaped = std::string("<pre><code>") + msg_escaped + "</code></pre>"; - html->SetPage("<html><body bgcolor=\"" + bgr_clr_str + "\"><font color=\"" + text_clr_str + "\">" + wxString::FromUTF8(msg_escaped.data()) + "</font></body></html>"); + html->SetPage(format_wxstr("<html>" + "<body bgcolor=%1% link=%2%>" + "<font color=%2%>" + "%3%" + "</font>" + "</body>" + "</html>", + bgr_clr_str, text_clr_str, from_u8(msg_escaped))); + + html->Bind(wxEVT_HTML_LINK_CLICKED, [parent](wxHtmlLinkEvent& event) { + wxGetApp().open_browser_with_warning_dialog(event.GetLinkInfo().GetHref(), parent, false); + event.Skip(false); + }); + content_sizer->Add(html, 1, wxEXPAND); wxGetApp().UpdateDarkUI(html); }