Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r/GUI/ConfigSnapshotDialog.cpp')
-rw-r--r--src/slic3r/GUI/ConfigSnapshotDialog.cpp140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/slic3r/GUI/ConfigSnapshotDialog.cpp b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
new file mode 100644
index 000000000..efcbf05bd
--- /dev/null
+++ b/src/slic3r/GUI/ConfigSnapshotDialog.cpp
@@ -0,0 +1,140 @@
+#include "ConfigSnapshotDialog.hpp"
+
+#include "../Config/Snapshot.hpp"
+#include "../Utils/Time.hpp"
+
+#include "../../libslic3r/Utils.hpp"
+
+namespace Slic3r {
+namespace GUI {
+
+static wxString format_reason(const Config::Snapshot::Reason reason)
+{
+ switch (reason) {
+ case Config::Snapshot::SNAPSHOT_UPGRADE:
+ return wxString(_(L("Upgrade")));
+ case Config::Snapshot::SNAPSHOT_DOWNGRADE:
+ return wxString(_(L("Downgrade")));
+ case Config::Snapshot::SNAPSHOT_BEFORE_ROLLBACK:
+ return wxString(_(L("Before roll back")));
+ case Config::Snapshot::SNAPSHOT_USER:
+ return wxString(_(L("User")));
+ case Config::Snapshot::SNAPSHOT_UNKNOWN:
+ default:
+ return wxString(_(L("Unknown")));
+ }
+}
+
+static wxString generate_html_row(const Config::Snapshot &snapshot, bool row_even, bool snapshot_active)
+{
+ // Start by declaring a row with an alternating background color.
+ wxString text = "<tr bgcolor=\"";
+ text += snapshot_active ? "#B3FFCB" : (row_even ? "#FFFFFF" : "#D5D5D5");
+ text += "\">";
+ text += "<td>";
+ // Format the row header.
+ text += wxString("<font size=\"5\"><b>") + (snapshot_active ? _(L("Active: ")) : "") +
+ Utils::format_local_date_time(snapshot.time_captured) + ": " + format_reason(snapshot.reason);
+ if (! snapshot.comment.empty())
+ text += " (" + snapshot.comment + ")";
+ text += "</b></font><br>";
+ // End of row header.
+ text += _(L("slic3r version")) + ": " + snapshot.slic3r_version_captured.to_string() + "<br>";
+ text += _(L("print")) + ": " + snapshot.print + "<br>";
+ text += _(L("filaments")) + ": " + snapshot.filaments.front() + "<br>";
+ text += _(L("printer")) + ": " + snapshot.printer + "<br>";
+
+ bool compatible = true;
+ for (const Config::Snapshot::VendorConfig &vc : snapshot.vendor_configs) {
+ text += _(L("vendor")) + ": " + vc.name +", " + _(L("version")) + ": " + vc.version.config_version.to_string() +
+ ", " + _(L("min slic3r version")) + ": " + vc.version.min_slic3r_version.to_string();
+ if (vc.version.max_slic3r_version != Semver::inf())
+ text += ", " + _(L("max slic3r version")) + ": " + vc.version.max_slic3r_version.to_string();
+ text += "<br>";
+ for (const std::pair<std::string, std::set<std::string>> &model : vc.models_variants_installed) {
+ text += _(L("model")) + ": " + model.first + ", " + _(L("variants")) + ": ";
+ for (const std::string &variant : model.second) {
+ if (&variant != &*model.second.begin())
+ text += ", ";
+ text += variant;
+ }
+ text += "<br>";
+ }
+ if (! vc.version.is_current_slic3r_supported()) { compatible = false; }
+ }
+
+ if (! compatible) {
+ text += "<p align=\"right\">" + _(L("Incompatible with this Slic3r")) + "</p>";
+ }
+ else if (! snapshot_active)
+ text += "<p align=\"right\"><a href=\"" + snapshot.id + "\">" + _(L("Activate")) + "</a></p>";
+ text += "</td>";
+ text += "</tr>";
+ return text;
+}
+
+static wxString generate_html_page(const Config::SnapshotDB &snapshot_db, const wxString &on_snapshot)
+{
+ wxString text =
+ "<html>"
+ "<body bgcolor=\"#ffffff\" cellspacing=\"2\" cellpadding=\"0\" border=\"0\" link=\"#800000\">"
+ "<font color=\"#000000\">";
+ text += "<table style=\"width:100%\">";
+ for (size_t i_row = 0; i_row < snapshot_db.snapshots().size(); ++ i_row) {
+ const Config::Snapshot &snapshot = snapshot_db.snapshots()[snapshot_db.snapshots().size() - i_row - 1];
+ text += generate_html_row(snapshot, i_row & 1, snapshot.id == on_snapshot);
+ }
+ text +=
+ "</table>"
+ "</font>"
+ "</body>"
+ "</html>";
+ return text;
+}
+
+ConfigSnapshotDialog::ConfigSnapshotDialog(const Config::SnapshotDB &snapshot_db, const wxString &on_snapshot)
+ : wxDialog(NULL, wxID_ANY, _(L("Configuration Snapshots")), wxDefaultPosition, wxSize(600, 500), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX)
+{
+ this->SetBackgroundColour(*wxWHITE);
+
+ wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL);
+ this->SetSizer(vsizer);
+
+ // text
+ wxHtmlWindow* html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
+ {
+ wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+ #ifdef __WXMSW__
+ int size[] = {8,8,8,8,11,11,11};
+ #else
+ int size[] = {11,11,11,11,14,14,14};
+ #endif
+ html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
+ html->SetBorders(2);
+ wxString text = generate_html_page(snapshot_db, on_snapshot);
+ html->SetPage(text);
+ vsizer->Add(html, 1, wxEXPAND | wxALIGN_LEFT | wxRIGHT | wxBOTTOM, 0);
+ html->Bind(wxEVT_HTML_LINK_CLICKED, &ConfigSnapshotDialog::onLinkClicked, this);
+ }
+
+ wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxCLOSE);
+ this->SetEscapeId(wxID_CLOSE);
+ this->Bind(wxEVT_BUTTON, &ConfigSnapshotDialog::onCloseDialog, this, wxID_CLOSE);
+ vsizer->Add(buttons, 0, wxEXPAND | wxRIGHT | wxBOTTOM, 3);
+}
+
+void ConfigSnapshotDialog::onLinkClicked(wxHtmlLinkEvent &event)
+{
+ m_snapshot_to_activate = event.GetLinkInfo().GetHref();
+ this->EndModal(wxID_CLOSE);
+ this->Close();
+}
+
+void ConfigSnapshotDialog::onCloseDialog(wxEvent &)
+{
+ this->EndModal(wxID_CLOSE);
+ this->Close();
+}
+
+} // namespace GUI
+} // namespace Slic3r