MsgDialog: Some code refactoring.

Use style for whole Dialog instead of wxWindowID for just one default button
This commit is contained in:
YuSanka 2021-11-10 10:49:43 +01:00
parent e8be7b2ecd
commit a3f6ce1ac6
5 changed files with 24 additions and 44 deletions

View file

@ -865,7 +865,7 @@ bool GUI_App::check_older_app_config(Semver current_version, bool backup)
"\n\nIf you select yes, PrusaSlicer will copy all profiles and other files from found folder to the current one." "\n\nIf you select yes, PrusaSlicer will copy all profiles and other files from found folder to the current one."
"\nIf you select no, you will start with clean installation with configuration wizard.") "\nIf you select no, you will start with clean installation with configuration wizard.")
, m_older_data_dir_path, last_semver.to_string()) , m_older_data_dir_path, last_semver.to_string())
, _L("PrusaSlicer"), wxICON_QUESTION | wxYES_NO); , _L("PrusaSlicer"), /*wxICON_QUESTION | */wxYES_NO);
if (msg.ShowModal() == wxID_YES) { if (msg.ShowModal() == wxID_YES) {
std::string snapshot_id; std::string snapshot_id;
if (backup) { if (backup) {

View file

@ -25,7 +25,7 @@ namespace Slic3r {
namespace GUI { namespace GUI {
MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &headline, wxWindowID button_id, wxBitmap bitmap) 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) : wxDialog(parent ? parent : dynamic_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
, boldfont(wxGetApp().normal_font()) , boldfont(wxGetApp().normal_font())
, content_sizer(new wxBoxSizer(wxVERTICAL)) , content_sizer(new wxBoxSizer(wxVERTICAL))
@ -49,12 +49,6 @@ MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &he
rightsizer->Add(content_sizer, 1, wxEXPAND); rightsizer->Add(content_sizer, 1, wxEXPAND);
btn_sizer->AddStretchSpacer(); btn_sizer->AddStretchSpacer();
if (button_id != wxID_NONE) {
auto *button = new wxButton(this, button_id);
button->SetFocus();
btn_sizer->Add(button);
}
logo = new wxStaticBitmap(this, wxID_ANY, bitmap.IsOk() ? bitmap : wxNullBitmap); logo = new wxStaticBitmap(this, wxID_ANY, bitmap.IsOk() ? bitmap : wxNullBitmap);
topsizer->Add(logo, 0, wxALL, BORDER); topsizer->Add(logo, 0, wxALL, BORDER);
@ -64,6 +58,8 @@ MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &he
main_sizer->Add(new StaticLine(this), 0, wxEXPAND | wxLEFT | wxRIGHT, HORIZ_SPACING); main_sizer->Add(new StaticLine(this), 0, wxEXPAND | wxLEFT | wxRIGHT, HORIZ_SPACING);
main_sizer->Add(btn_sizer, 0, wxALL | wxEXPAND, VERT_SPACING); main_sizer->Add(btn_sizer, 0, wxALL | wxEXPAND, VERT_SPACING);
apply_style(style);
SetSizerAndFit(main_sizer); SetSizerAndFit(main_sizer);
} }
@ -83,9 +79,9 @@ void MsgDialog::apply_style(long style)
if (style & wxNO) add_btn(wxID_NO); if (style & wxNO) add_btn(wxID_NO);
if (style & wxCANCEL) add_btn(wxID_CANCEL); if (style & wxCANCEL) add_btn(wxID_CANCEL);
logo->SetBitmap(create_scaled_bitmap(style & wxICON_WARNING ? "exclamation" : logo->SetBitmap( create_scaled_bitmap(style & wxICON_WARNING ? "exclamation" :
style & wxICON_INFORMATION ? "info" : style & wxICON_INFORMATION ? "info" :
style & wxICON_QUESTION ? "question" : "PrusaSlicer"/*"_192px_grayscale.png"*/, this, 84)); style & wxICON_QUESTION ? "question" : "PrusaSlicer", this, 64, style & wxICON_ERROR));
} }
void MsgDialog::finalize() void MsgDialog::finalize()
@ -161,18 +157,17 @@ static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxStrin
msg_escaped = std::string("<pre><code>") + msg_escaped + "</code></pre>"; 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("<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); content_sizer->Add(html, 1, wxEXPAND);
wxGetApp().UpdateDarkUI(html);
} }
// ErrorDialog // ErrorDialog
ErrorDialog::ErrorDialog(wxWindow *parent, const wxString &msg, bool monospaced_font) ErrorDialog::ErrorDialog(wxWindow *parent, const wxString &msg, bool monospaced_font)
: MsgDialog(parent, wxString::Format(_(L("%s error")), SLIC3R_APP_NAME), : MsgDialog(parent, wxString::Format(_(L("%s error")), SLIC3R_APP_NAME),
wxString::Format(_(L("%s has encountered an error")), SLIC3R_APP_NAME), wxString::Format(_(L("%s has encountered an error")), SLIC3R_APP_NAME), wxOK)
wxID_NONE)
, msg(msg) , msg(msg)
{ {
add_msg_content(this, content_sizer, msg, monospaced_font); add_msg_content(this, content_sizer, msg, monospaced_font);
add_btn(wxID_OK, true);
// Use a small bitmap with monospaced font, as the error text will not be wrapped. // Use a small bitmap with monospaced font, as the error text will not be wrapped.
logo->SetBitmap(create_scaled_bitmap("PrusaSlicer_192px_grayscale.png", this, monospaced_font ? 48 : /*1*/84)); logo->SetBitmap(create_scaled_bitmap("PrusaSlicer_192px_grayscale.png", this, monospaced_font ? 48 : /*1*/84));
@ -189,10 +184,9 @@ WarningDialog::WarningDialog(wxWindow *parent,
const wxString& caption/* = wxEmptyString*/, const wxString& caption/* = wxEmptyString*/,
long style/* = wxOK*/) long style/* = wxOK*/)
: MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s warning"), SLIC3R_APP_NAME) : caption, : MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s warning"), SLIC3R_APP_NAME) : caption,
wxString::Format(_L("%s has a warning")+":", SLIC3R_APP_NAME), wxID_NONE) wxString::Format(_L("%s has a warning")+":", SLIC3R_APP_NAME), style)
{ {
add_msg_content(this, content_sizer, message); add_msg_content(this, content_sizer, message);
apply_style(style);
finalize(); finalize();
} }
@ -203,10 +197,9 @@ MessageDialog::MessageDialog(wxWindow* parent,
const wxString& message, const wxString& message,
const wxString& caption/* = wxEmptyString*/, const wxString& caption/* = wxEmptyString*/,
long style/* = wxOK*/) long style/* = wxOK*/)
: MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s info"), SLIC3R_APP_NAME) : caption, wxEmptyString, wxID_NONE) : MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s info"), SLIC3R_APP_NAME) : caption, wxEmptyString, style)
{ {
add_msg_content(this, content_sizer, message); add_msg_content(this, content_sizer, message);
apply_style(style);
finalize(); finalize();
} }
@ -217,16 +210,16 @@ RichMessageDialog::RichMessageDialog(wxWindow* parent,
const wxString& message, const wxString& message,
const wxString& caption/* = wxEmptyString*/, const wxString& caption/* = wxEmptyString*/,
long style/* = wxOK*/) long style/* = wxOK*/)
: MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s info"), SLIC3R_APP_NAME) : caption, wxEmptyString, wxID_NONE) : MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s info"), SLIC3R_APP_NAME) : caption, wxEmptyString, style)
{ {
add_msg_content(this, content_sizer, message); add_msg_content(this, content_sizer, message);
m_checkBox = new wxCheckBox(this, wxID_ANY, m_checkBoxText); m_checkBox = new wxCheckBox(this, wxID_ANY, m_checkBoxText);
wxGetApp().UpdateDarkUI(m_checkBox);
m_checkBox->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { m_checkBoxValue = m_checkBox->GetValue(); }); m_checkBox->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { m_checkBoxValue = m_checkBox->GetValue(); });
btn_sizer->Insert(0, m_checkBox, wxALIGN_CENTER_VERTICAL); btn_sizer->Insert(0, m_checkBox, wxALIGN_CENTER_VERTICAL);
apply_style(style);
finalize(); finalize();
} }
@ -245,13 +238,10 @@ int RichMessageDialog::ShowModal()
// InfoDialog // InfoDialog
InfoDialog::InfoDialog(wxWindow* parent, const wxString &title, const wxString& msg) InfoDialog::InfoDialog(wxWindow* parent, const wxString &title, const wxString& msg)
: MsgDialog(parent, wxString::Format(_L("%s information"), SLIC3R_APP_NAME), title) : MsgDialog(parent, wxString::Format(_L("%s information"), SLIC3R_APP_NAME), title, wxOK | wxICON_INFORMATION)
, msg(msg) , msg(msg)
{ {
add_msg_content(this, content_sizer, msg); add_msg_content(this, content_sizer, msg);
// Set info bitmap
logo->SetBitmap(create_scaled_bitmap("info", this, 84));
finalize(); finalize();
} }

View file

@ -41,8 +41,7 @@ protected:
HORIZ_SPACING = 5, HORIZ_SPACING = 5,
}; };
// button_id is an id of a button that can be added by default, use wxID_NONE to disable MsgDialog(wxWindow *parent, const wxString &title, const wxString &headline, long style = wxOK, wxBitmap bitmap = wxNullBitmap);
MsgDialog(wxWindow *parent, const wxString &title, const wxString &headline, wxWindowID button_id = wxID_OK, wxBitmap bitmap = wxNullBitmap);
void add_btn(wxWindowID btn_id, bool set_focus = false); void add_btn(wxWindowID btn_id, bool set_focus = false);
void apply_style(long style); void apply_style(long style);

View file

@ -2487,7 +2487,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
"The internal unit of PrusaSlicer are millimeters. Do you want to recalculate the dimensions of the object?", "The internal unit of PrusaSlicer are millimeters. Do you want to recalculate the dimensions of the object?",
"The dimensions of some objects from file %s seem to be defined in meters.\n" "The dimensions of some objects from file %s seem to be defined in meters.\n"
"The internal unit of PrusaSlicer are millimeters. Do you want to recalculate the dimensions of these objects?", model.objects.size()), from_path(filename)) + "\n", "The internal unit of PrusaSlicer are millimeters. Do you want to recalculate the dimensions of these objects?", model.objects.size()), from_path(filename)) + "\n",
_L("The object is too small"), wxICON_WARNING | wxYES | wxNO); _L("The object is too small"), wxICON_QUESTION | wxYES_NO);
dlg.ShowCheckBox(_L("Apply to all the remaining small objects being loaded.")); dlg.ShowCheckBox(_L("Apply to all the remaining small objects being loaded."));
int answer = dlg.ShowModal(); int answer = dlg.ShowModal();
if (dlg.IsCheckBoxChecked()) if (dlg.IsCheckBoxChecked())
@ -2509,7 +2509,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
"The internal unit of PrusaSlicer are millimeters. Do you want to recalculate the dimensions of the object?", "The internal unit of PrusaSlicer are millimeters. Do you want to recalculate the dimensions of the object?",
"The dimensions of some objects from file %s seem to be defined in inches.\n" "The dimensions of some objects from file %s seem to be defined in inches.\n"
"The internal unit of PrusaSlicer are millimeters. Do you want to recalculate the dimensions of these objects?", model.objects.size()), from_path(filename)) + "\n", "The internal unit of PrusaSlicer are millimeters. Do you want to recalculate the dimensions of these objects?", model.objects.size()), from_path(filename)) + "\n",
_L("The object is too small"), wxICON_WARNING | wxYES | wxNO); _L("The object is too small"), wxICON_QUESTION | wxYES_NO);
dlg.ShowCheckBox(_L("Apply to all the remaining small objects being loaded.")); dlg.ShowCheckBox(_L("Apply to all the remaining small objects being loaded."));
int answer = dlg.ShowModal(); int answer = dlg.ShowModal();
if (dlg.IsCheckBoxChecked()) if (dlg.IsCheckBoxChecked())

View file

@ -156,7 +156,7 @@ MsgUpdateConfig::~MsgUpdateConfig() {}
//MsgUpdateForced //MsgUpdateForced
MsgUpdateForced::MsgUpdateForced(const std::vector<Update>& updates) : MsgUpdateForced::MsgUpdateForced(const std::vector<Update>& updates) :
MsgDialog(nullptr, wxString::Format(_(L("%s incompatibility")), SLIC3R_APP_NAME), _(L("You must install a configuration update.")) + " ", wxID_NONE) MsgDialog(nullptr, wxString::Format(_(L("%s incompatibility")), SLIC3R_APP_NAME), _(L("You must install a configuration update.")) + " ", wxICON_ERROR)
{ {
auto* text = new wxStaticText(this, wxID_ANY, wxString::Format(_(L( auto* text = new wxStaticText(this, wxID_ANY, wxString::Format(_(L(
"%s will now start updates. Otherwise it won't be able to start.\n\n" "%s will now start updates. Otherwise it won't be able to start.\n\n"
@ -165,7 +165,6 @@ MsgUpdateForced::MsgUpdateForced(const std::vector<Update>& updates) :
"Updated configuration bundles:" "Updated configuration bundles:"
)), SLIC3R_APP_NAME)); )), SLIC3R_APP_NAME));
logo->SetBitmap(create_scaled_bitmap("PrusaSlicer_192px_grayscale.png", this, 192));
text->Wrap(CONTENT_WIDTH * wxGetApp().em_unit()); text->Wrap(CONTENT_WIDTH * wxGetApp().em_unit());
content_sizer->Add(text); content_sizer->Add(text);
@ -210,7 +209,7 @@ MsgUpdateForced::MsgUpdateForced(const std::vector<Update>& updates) :
btn_exit->Bind(wxEVT_BUTTON, exiter); btn_exit->Bind(wxEVT_BUTTON, exiter);
btn_ok->Bind(wxEVT_BUTTON, exiter); btn_ok->Bind(wxEVT_BUTTON, exiter);
Fit(); finalize();
} }
MsgUpdateForced::~MsgUpdateForced() {} MsgUpdateForced::~MsgUpdateForced() {}
@ -219,10 +218,8 @@ MsgUpdateForced::~MsgUpdateForced() {}
MsgDataIncompatible::MsgDataIncompatible(const std::unordered_map<std::string, wxString> &incompats) : MsgDataIncompatible::MsgDataIncompatible(const std::unordered_map<std::string, wxString> &incompats) :
MsgDialog(nullptr, wxString::Format(_(L("%s incompatibility")), SLIC3R_APP_NAME), MsgDialog(nullptr, wxString::Format(_(L("%s incompatibility")), SLIC3R_APP_NAME),
wxString::Format(_(L("%s configuration is incompatible")), SLIC3R_APP_NAME), wxID_NONE) wxString::Format(_(L("%s configuration is incompatible")), SLIC3R_APP_NAME), /*wxID_NONE | */wxICON_ERROR)
{ {
logo->SetBitmap(create_scaled_bitmap("PrusaSlicer_192px_grayscale.png", this, 192));
auto *text = new wxStaticText(this, wxID_ANY, wxString::Format(_(L( auto *text = new wxStaticText(this, wxID_ANY, wxString::Format(_(L(
"This version of %s is not compatible with currently installed configuration bundles.\n" "This version of %s is not compatible with currently installed configuration bundles.\n"
"This probably happened as a result of running an older %s after using a newer one.\n\n" "This probably happened as a result of running an older %s after using a newer one.\n\n"
@ -265,7 +262,7 @@ MsgDataIncompatible::MsgDataIncompatible(const std::unordered_map<std::string, w
btn_exit->Bind(wxEVT_BUTTON, exiter); btn_exit->Bind(wxEVT_BUTTON, exiter);
btn_reconf->Bind(wxEVT_BUTTON, exiter); btn_reconf->Bind(wxEVT_BUTTON, exiter);
Fit(); finalize();
} }
MsgDataIncompatible::~MsgDataIncompatible() {} MsgDataIncompatible::~MsgDataIncompatible() {}
@ -303,9 +300,7 @@ MsgDataLegacy::MsgDataLegacy() :
content_sizer->Add(link); content_sizer->Add(link);
content_sizer->AddSpacer(VERT_SPACING); content_sizer->AddSpacer(VERT_SPACING);
wxGetApp().UpdateDlgDarkUI(this); finalize();
Fit();
} }
MsgDataLegacy::~MsgDataLegacy() {} MsgDataLegacy::~MsgDataLegacy() {}
@ -314,7 +309,7 @@ MsgDataLegacy::~MsgDataLegacy() {}
// MsgNoUpdate // MsgNoUpdate
MsgNoUpdates::MsgNoUpdates() : MsgNoUpdates::MsgNoUpdates() :
MsgDialog(nullptr, _(L("Configuration updates")), _(L("No updates available"))) MsgDialog(nullptr, _(L("Configuration updates")), _(L("No updates available")), wxICON_ERROR)
{ {
auto* text = new wxStaticText(this, wxID_ANY, wxString::Format( auto* text = new wxStaticText(this, wxID_ANY, wxString::Format(
@ -327,11 +322,7 @@ MsgNoUpdates::MsgNoUpdates() :
content_sizer->Add(text); content_sizer->Add(text);
content_sizer->AddSpacer(VERT_SPACING); content_sizer->AddSpacer(VERT_SPACING);
logo->SetBitmap(create_scaled_bitmap("PrusaSlicer_192px_grayscale.png", this, 192)); finalize();
wxGetApp().UpdateDlgDarkUI(this);
Fit();
} }
MsgNoUpdates::~MsgNoUpdates() {} MsgNoUpdates::~MsgNoUpdates() {}