2018-04-30 12:31:57 +00:00
|
|
|
#include "MsgDialog.hpp"
|
|
|
|
|
|
|
|
#include <wx/settings.h>
|
|
|
|
#include <wx/sizer.h>
|
|
|
|
#include <wx/stattext.h>
|
|
|
|
#include <wx/button.h>
|
|
|
|
#include <wx/statbmp.h>
|
|
|
|
#include <wx/scrolwin.h>
|
2018-12-18 17:40:35 +00:00
|
|
|
#include <wx/clipbrd.h>
|
2019-02-22 10:13:48 +00:00
|
|
|
#include <wx/html/htmlwin.h>
|
|
|
|
|
|
|
|
#include <boost/algorithm/string/replace.hpp>
|
2018-04-30 12:31:57 +00:00
|
|
|
|
|
|
|
#include "libslic3r/libslic3r.h"
|
|
|
|
#include "libslic3r/Utils.hpp"
|
|
|
|
#include "GUI.hpp"
|
2018-11-26 13:41:58 +00:00
|
|
|
#include "I18N.hpp"
|
2018-04-30 12:31:57 +00:00
|
|
|
#include "ConfigWizard.hpp"
|
2019-02-11 13:14:35 +00:00
|
|
|
#include "wxExtensions.hpp"
|
|
|
|
#include "GUI_App.hpp"
|
2018-04-30 12:31:57 +00:00
|
|
|
|
|
|
|
namespace Slic3r {
|
|
|
|
namespace GUI {
|
|
|
|
|
|
|
|
|
|
|
|
MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &headline, wxWindowID button_id) :
|
2019-02-11 13:14:35 +00:00
|
|
|
// MsgDialog(parent, title, headline, wxBitmap(from_u8(Slic3r::var("Slic3r_192px.png")), wxBITMAP_TYPE_PNG), button_id)
|
|
|
|
MsgDialog(parent, title, headline, create_scaled_bitmap("Slic3r_192px.png"), button_id)
|
2018-04-30 12:31:57 +00:00
|
|
|
{}
|
|
|
|
|
|
|
|
MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &headline, wxBitmap bitmap, wxWindowID button_id) :
|
|
|
|
wxDialog(parent, wxID_ANY, title),
|
|
|
|
boldfont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)),
|
|
|
|
content_sizer(new wxBoxSizer(wxVERTICAL)),
|
|
|
|
btn_sizer(new wxBoxSizer(wxHORIZONTAL))
|
|
|
|
{
|
|
|
|
boldfont.SetWeight(wxFONTWEIGHT_BOLD);
|
|
|
|
|
|
|
|
auto *topsizer = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
auto *rightsizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
|
|
|
|
auto *headtext = new wxStaticText(this, wxID_ANY, headline);
|
|
|
|
headtext->SetFont(boldfont);
|
2019-02-11 13:14:35 +00:00
|
|
|
headtext->Wrap(CONTENT_WIDTH*wxGetApp().em_unit());
|
2018-04-30 12:31:57 +00:00
|
|
|
rightsizer->Add(headtext);
|
|
|
|
rightsizer->AddSpacer(VERT_SPACING);
|
|
|
|
|
|
|
|
rightsizer->Add(content_sizer, 1, wxEXPAND);
|
|
|
|
|
|
|
|
if (button_id != wxID_NONE) {
|
|
|
|
auto *button = new wxButton(this, button_id);
|
|
|
|
button->SetFocus();
|
|
|
|
btn_sizer->Add(button);
|
|
|
|
}
|
|
|
|
|
2019-02-22 10:13:48 +00:00
|
|
|
rightsizer->Add(btn_sizer, 0, wxALIGN_RIGHT);
|
2018-04-30 12:31:57 +00:00
|
|
|
|
|
|
|
auto *logo = new wxStaticBitmap(this, wxID_ANY, std::move(bitmap));
|
|
|
|
|
|
|
|
topsizer->Add(logo, 0, wxALL, BORDER);
|
|
|
|
topsizer->Add(rightsizer, 1, wxALL | wxEXPAND, BORDER);
|
|
|
|
|
|
|
|
SetSizerAndFit(topsizer);
|
|
|
|
}
|
|
|
|
|
|
|
|
MsgDialog::~MsgDialog() {}
|
|
|
|
|
|
|
|
|
|
|
|
// ErrorDialog
|
|
|
|
|
2018-12-18 17:40:35 +00:00
|
|
|
ErrorDialog::ErrorDialog(wxWindow *parent, const wxString &msg)
|
|
|
|
: MsgDialog(parent, _(L("Slic3r error")), _(L("Slic3r has encountered an error")),
|
2019-02-11 13:14:35 +00:00
|
|
|
// wxBitmap(from_u8(Slic3r::var("Slic3r_192px_grayscale.png")), wxBITMAP_TYPE_PNG),
|
|
|
|
create_scaled_bitmap("Slic3r_192px_grayscale.png"),
|
2018-12-18 17:40:35 +00:00
|
|
|
wxID_NONE)
|
|
|
|
, msg(msg)
|
2018-04-30 12:31:57 +00:00
|
|
|
{
|
2019-02-22 10:13:48 +00:00
|
|
|
// Text shown as HTML, so that mouse selection and Ctrl-V to copy will work.
|
|
|
|
wxHtmlWindow* html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
|
|
|
|
{
|
|
|
|
html->SetMinSize(wxSize(40 * wxGetApp().em_unit(), -1));
|
|
|
|
wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
|
|
|
|
wxColour text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
|
|
|
|
wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_FRAMEBK); // wxSYS_COLOUR_WINDOW
|
|
|
|
auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue());
|
|
|
|
auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue());
|
|
|
|
const int font_size = font.GetPointSize()-1;
|
|
|
|
int size[] = {font_size, font_size, font_size, font_size, font_size, font_size, font_size};
|
|
|
|
html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
|
|
|
|
html->SetBorders(2);
|
|
|
|
std::string msg_escaped = xml_escape(msg.ToUTF8().data());
|
|
|
|
boost::replace_all(msg_escaped, "\r\n", "<br>");
|
|
|
|
boost::replace_all(msg_escaped, "\n", "<br>");
|
|
|
|
html->SetPage("<html><body bgcolor=\"" + bgr_clr_str + "\"><font color=\"" + text_clr_str + "\">" + wxString::FromUTF8(msg_escaped.data()) + "</font></body></html>");
|
|
|
|
content_sizer->Add(html, 1, wxEXPAND);
|
|
|
|
}
|
2018-12-18 17:40:35 +00:00
|
|
|
|
|
|
|
auto *btn_ok = new wxButton(this, wxID_OK);
|
|
|
|
btn_ok->SetFocus();
|
2019-02-22 10:13:48 +00:00
|
|
|
btn_sizer->Add(btn_ok, 0, wxRIGHT, HORIZ_SPACING);
|
2018-12-18 17:40:35 +00:00
|
|
|
|
2019-02-11 13:14:35 +00:00
|
|
|
SetMaxSize(wxSize(-1, CONTENT_MAX_HEIGHT*wxGetApp().em_unit()));
|
2018-04-30 12:31:57 +00:00
|
|
|
Fit();
|
|
|
|
}
|
|
|
|
|
|
|
|
ErrorDialog::~ErrorDialog() {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|