diff options
author | YuSanka <yusanka@gmail.com> | 2018-10-25 13:48:19 +0300 |
---|---|---|
committer | YuSanka <yusanka@gmail.com> | 2018-10-25 13:49:29 +0300 |
commit | 300943983831ebc4d2370b55d2db8587571ff283 (patch) | |
tree | 5f767f0fe8c62c5c93e061358dc2b48616fbac30 /src/slic3r/GUI/SysInfoDialog.cpp | |
parent | e72a0586002dc85332cb3f8833f8c78c9403d799 (diff) |
Ported System Info Dialog
Diffstat (limited to 'src/slic3r/GUI/SysInfoDialog.cpp')
-rw-r--r-- | src/slic3r/GUI/SysInfoDialog.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp new file mode 100644 index 000000000..ee3060c24 --- /dev/null +++ b/src/slic3r/GUI/SysInfoDialog.cpp @@ -0,0 +1,148 @@ +#include "SysInfoDialog.hpp" +// #include "AboutDialog.hpp" + +#include <wx/clipbrd.h> +#include <wx/platinfo.h> + +// #include "../../libslic3r/Utils.hpp" +#include "3DScene.hpp" +#include "GUI.hpp" + +namespace Slic3r { +namespace GUI { + +std::string get_main_info(bool format_as_html) +{ + std::stringstream out; + + std::string b_start = format_as_html ? "<b>" : ""; + std::string b_end = format_as_html ? "</b>" : ""; + std::string line_end = format_as_html ? "<br>" : "\n"; + + if (!format_as_html) + out << b_start << SLIC3R_FORK_NAME << b_end << line_end; + out << b_start << "Version: " << b_end << SLIC3R_VERSION << line_end; + out << b_start << "Build: " << b_end << SLIC3R_BUILD << line_end; + out << line_end; + out << b_start << "Operating System: " << b_end << wxPlatformInfo::Get().GetOperatingSystemFamilyName() << line_end; + out << b_start << "System Architecture: " << b_end << wxPlatformInfo::Get().GetArchName() << line_end; + out << b_start << +#if defined _WIN32 + "Windows Version: " +#else + // Hopefully some kind of unix / linux. + "System Version: " +#endif + << b_end << wxPlatformInfo::Get().GetOperatingSystemDescription() << line_end; + + return out.str(); +} + +SysInfoDialog::SysInfoDialog() + : wxDialog(NULL, wxID_ANY, _(L("Slic3r Prusa Edition - System Information")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) +{ + wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); + SetBackgroundColour(bgr_clr); + wxBoxSizer* hsizer = new wxBoxSizer(wxHORIZONTAL); + hsizer->SetMinSize(wxSize(600, -1)); + + auto main_sizer = new wxBoxSizer(wxVERTICAL); + main_sizer->Add(hsizer, 0, wxEXPAND | wxALL, 10); + + // logo + wxBitmap logo_bmp = wxBitmap(from_u8(Slic3r::var("Slic3r_128px.png")), wxBITMAP_TYPE_PNG); + auto *logo = new wxStaticBitmap(this, wxID_ANY, std::move(logo_bmp)); + hsizer->Add(logo, 0, wxEXPAND | wxTOP | wxBOTTOM, 15); + + wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL); + hsizer->Add(vsizer, 1, wxEXPAND|wxLEFT, 20); + + // title + { + wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_FORK_NAME, wxDefaultPosition, wxDefaultSize); + wxFont title_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + title_font.SetWeight(wxFONTWEIGHT_BOLD); + title_font.SetFamily(wxFONTFAMILY_ROMAN); + title_font.SetPointSize(14); + title->SetFont(title_font); + vsizer->Add(title, 0, wxALIGN_LEFT | wxTOP, 10); + } + + // main_info_text + wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + const auto text_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + 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 fs = font.GetPointSize() - 1; + int size[] = { fs*1.5, fs*1.4, fs*1.3, fs, fs, fs, fs }; + + wxHtmlWindow* html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER); + { + html->SetFonts(font.GetFaceName(), font.GetFaceName(), size); + html->SetBorders(2); + const auto text = wxString::Format( + "<html>" + "<body bgcolor= %s link= %s>" + "<font color=%s>" + "%s" + "</font>" + "</body>" + "</html>", bgr_clr_str, text_clr_str, text_clr_str, + get_main_info(true)); + html->SetPage(text); + vsizer->Add(html, 1, wxEXPAND); + } + + + // opengl_info + wxHtmlWindow* opengl_info_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO); + { + opengl_info_html->SetMinSize(wxSize(-1, 200)); + opengl_info_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size); + opengl_info_html->SetBorders(10); + const auto text = wxString::Format( + "<html>" + "<body bgcolor= %s link= %s>" + "<font color=%s>" + "%s" + "</font>" + "</body>" + "</html>", bgr_clr_str, text_clr_str, text_clr_str, + _3DScene::get_gl_info(true, true)); + opengl_info_html->SetPage(text); + main_sizer->Add(opengl_info_html, 1, wxEXPAND | wxBOTTOM, 15); + } + + wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK); + auto btn_copy_to_clipboard = new wxButton(this, wxID_ANY, "Copy to Clipboard", wxDefaultPosition, wxDefaultSize); + buttons->Insert(0, btn_copy_to_clipboard, 0, wxLEFT, 5); + btn_copy_to_clipboard->Bind(wxEVT_BUTTON, &SysInfoDialog::onCopyToClipboard, this); + + this->SetEscapeId(wxID_CLOSE); + this->Bind(wxEVT_BUTTON, &SysInfoDialog::onCloseDialog, this, wxID_OK); + main_sizer->Add(buttons, 0, wxEXPAND | wxRIGHT | wxBOTTOM, 3); + + this->Bind(wxEVT_LEFT_DOWN, &SysInfoDialog::onCloseDialog, this); + logo->Bind(wxEVT_LEFT_DOWN, &SysInfoDialog::onCloseDialog, this); + + SetSizer(main_sizer); + main_sizer->SetSizeHints(this); +} + +void SysInfoDialog::onCopyToClipboard(wxEvent &) +{ + wxTheClipboard->Open(); + const auto text = get_main_info(false)+"\n"+_3DScene::get_gl_info(false, true); + wxTheClipboard->SetData(new wxTextDataObject(text)); + wxTheClipboard->Close(); +} + +void SysInfoDialog::onCloseDialog(wxEvent &) +{ + this->EndModal(wxID_CLOSE); + this->Close(); +} + +} // namespace GUI +} // namespace Slic3r |