From 5a2925466db4c5162bb1cc644e98652851b21687 Mon Sep 17 00:00:00 2001 From: YuSanka 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\""), + "" + from_u8(crash_reason) + "", + "#2939", + "#5573", + "" + preferences_item + "") + + "\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(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", "
"); boost::replace_all(msg_escaped, "\n", "
"); if (monospaced_font) // Code formatting will be preserved. This is useful for reporting errors from the placeholder parser. msg_escaped = std::string("
") + msg_escaped + "
"; - html->SetPage("" + wxString::FromUTF8(msg_escaped.data()) + ""); + html->SetPage(format_wxstr("" + "" + "" + "%3%" + "" + "" + "", + 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); }