From 8ef002af7eb5e90ead5e3d9907fc457d9143bc75 Mon Sep 17 00:00:00 2001 From: QIDI TECH <893239786@qq.com> Date: Tue, 26 Dec 2023 15:25:38 +0800 Subject: [PATCH] update bed exclude area, change thumbnails to PNG, printer webview --- src/libslic3r/AppConfig.cpp | 4 + src/libslic3r/GCode.cpp | 26 +-- src/libslic3r/Preset.cpp | 4 + src/libslic3r/Print.cpp | 2 + src/libslic3r/PrintConfig.cpp | 9 + src/libslic3r/PrintConfig.hpp | 2 + src/slic3r/GUI/Field.cpp | 16 +- src/slic3r/GUI/GLCanvas3D.cpp | 3 +- src/slic3r/GUI/GUI.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmoCut.cpp | 10 +- src/slic3r/GUI/MainFrame.cpp | 9 +- src/slic3r/GUI/OptionsGroup.cpp | 2 + src/slic3r/GUI/Plater.cpp | 2 +- src/slic3r/GUI/PrinterWebView.cpp | 240 +++++++++++++++++++----- src/slic3r/GUI/PrinterWebView.hpp | 52 ++++- src/slic3r/GUI/Tab.cpp | 6 +- src/slic3r/GUI/UnsavedChangesDialog.cpp | 3 + 17 files changed, 305 insertions(+), 87 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 11dc910..57219e8 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -205,6 +205,10 @@ void AppConfig::set_defaults() if (get("sys_menu_enabled").empty()) set("sys_menu_enabled", "1"); + //B45 + if (get("machine_list_minification").empty()) + set("machine_list_minification", "1"); + #endif // _WIN32 // Remove legacy window positions/sizes diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index f1d0329..5cc3b96 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1146,15 +1146,14 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Unit tests or command line slicing may not define "thumbnails" or "thumbnails_format". // If "thumbnails_format" is not defined, export to PNG. - //B3 - // if (const auto [thumbnails, thumbnails_format] = std::make_pair( - // print.full_print_config().option("thumbnails"), - // print.full_print_config().option>("thumbnails_format")); - // thumbnails) - // GCodeThumbnails::export_thumbnails_to_file( - // thumbnail_cb, thumbnails->values, thumbnails_format ? thumbnails_format->value : GCodeThumbnailsFormat::PNG, - // [&file](const char* sz) { file.write(sz); }, - // [&print]() { print.throw_if_canceled(); }); + if (const auto [thumbnails, thumbnails_format] = std::make_pair( + print.full_print_config().option("thumbnails"), + print.full_print_config().option>("thumbnails_format")); + thumbnails) + GCodeThumbnails::export_thumbnails_to_file( + thumbnail_cb, thumbnails->values, thumbnails_format ? thumbnails_format->value : GCodeThumbnailsFormat::PNG, + [&file](const char* sz) { file.write(sz); }, + [&print]() { print.throw_if_canceled(); }); // Write notes (content of the Print Settings tab -> Notes) { @@ -1528,15 +1527,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato if (print.m_print_statistics.total_toolchanges > 0) file.write_format("; total toolchanges = %i\n", print.m_print_statistics.total_toolchanges); file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder).c_str()); - //B3 - if (const auto [thumbnails, thumbnails_format] = std::make_pair( - print.full_print_config().option("thumbnails"), - print.full_print_config().option>("thumbnails_format")); - thumbnails) - GCodeThumbnails::export_thumbnails_to_file( - thumbnail_cb, thumbnails->values, thumbnails_format ? thumbnails_format->value : GCodeThumbnailsFormat::PNG, - [&file](const char* sz) { file.write(sz); }, - [&print]() { print.throw_if_canceled(); }); // Append full config, delimited by two 'phony' configuration keys qidislicer_config = begin and qidislicer_config = end. // The delimiters are structured as configuration key / value pairs to be parsable by older versions of QIDISlicer G-code viewer. { diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index c049a82..915cfc4 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -545,6 +545,8 @@ static std::vector s_Preset_printer_options { "default_print_profile", "inherits", "remaining_times", "silent_mode", "machine_limits_usage", "thumbnails", "thumbnails_format", +//Y18 + "bed_exclude_area", //Y16 "chamber_temperature", "auxiliary_fan", "chamber_fan" }; @@ -1349,6 +1351,8 @@ static const std::set independent_from_extruder_number_options = { "gcode_substitutions", "post_process", "thumbnails", +//Y18 + "bed_exclude_area", }; bool PresetCollection::is_independent_from_extruder_number_option(const std::string& opt_key) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index a71bd44..211a6d0 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -60,6 +60,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "autoemit_temperature_commands", "avoid_crossing_perimeters", "avoid_crossing_perimeters_max_detour", + //Y18 + "bed_exclude_area", "bed_shape", "bed_temperature", "before_layer_gcode", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 4a2273d..29e86f4 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -259,6 +259,15 @@ void PrintConfigDef::init_common_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionPoints{ Vec2d(0, 0), Vec2d(200, 0), Vec2d(200, 200), Vec2d(0, 200) }); + //Y18 + def = this->add("bed_exclude_area", coPoints); + def->label = L("Bed exclude area"); + def->tooltip = L("Unprintable area in XY plane. For example, X1 Series printers use the front left corner to cut filament during filament change. " + "The area is expressed as polygon by points in following format: \"XxY, XxY, ...\""); + def->mode = comExpert; + def->gui_type = ConfigOptionDef::GUIType::one_string; + def->set_default_value(new ConfigOptionPoints{ Vec2d(0, 0) }); + def = this->add("bed_custom_texture", coString); def->label = L("Bed custom texture"); def->mode = comAdvanced; diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 4098f41..589193b 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -774,6 +774,8 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionBool, avoid_crossing_perimeters)) ((ConfigOptionFloatOrPercent, avoid_crossing_perimeters_max_detour)) ((ConfigOptionPoints, bed_shape)) + //Y18 + ((ConfigOptionPoints, bed_exclude_area)) ((ConfigOptionInts, bed_temperature)) //Y16 ((ConfigOptionBool, chamber_temperature)) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 5a11ac9..19c1322 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -374,10 +374,20 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true if (x_str.ToDouble(&x) && thumbnail.HasMoreTokens()) { wxString y_str = thumbnail.GetNextToken(); if (y_str.ToDouble(&y) && !thumbnail.HasMoreTokens()) { - if (0 < x && x < 1000 && 0 < y && y < 1000) { - out_values.push_back(Vec2d(x, y)); - continue; + //Y18 + if (m_opt_id == "bed_exclude_area") { + if (0 <= x && x <= 1000 && 0 <= y && y <= 1000) { + out_values.push_back(Vec2d(x, y)); + continue; + } } + else{ + if (0 < x && x < 1000 && 0 < y && y < 1000) { + out_values.push_back(Vec2d(x, y)); + continue; + } + } + out_of_range_val = true; break; } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 4215a8d..6ff0279 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4895,7 +4895,8 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const return; if (thumbnail_params.transparent_background) - glsafe(::glClearColor(0.0f, 0.0f, 0.0f, 0.0f)); + //Y18 + glsafe(::glClearColor(1.0f, 1.0f, 1.0f, 1.0f)); glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); glsafe(::glEnable(GL_DEPTH_TEST)); diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 2c1873c..a42d73d 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -203,7 +203,7 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt } break; case coPoints:{ - if (opt_key == "bed_shape" || opt_key == "thumbnails") { + if (opt_key == "bed_shape" || opt_key == "bed_exclude_area" || opt_key == "thumbnails") { config.option(opt_key)->values = boost::any_cast>(value); break; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index ecb99a1..21795ae 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -2241,7 +2241,7 @@ void GLGizmoCut3D::render_shortcuts() if (m_show_shortcuts) for (const auto&shortcut : m_shortcuts ){ - m_imgui->text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, shortcut.first); + m_imgui->text_colored(ImGuiWrapper::COL_BLUE_LIGHT, shortcut.first); ImGui::SameLine(m_shortcut_label_width); m_imgui->text(shortcut.second); } @@ -2271,7 +2271,7 @@ void GLGizmoCut3D::render_connectors_input_window(CutConnectors &connectors) // render_connect_mode_radio_button(CutConnectorMode::Manual); ImGui::AlignTextToFramePadding(); - m_imgui->text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, m_labels_map["Connectors"]); + m_imgui->text_colored(ImGuiWrapper::COL_BLUE_LIGHT, m_labels_map["Connectors"]); m_imgui->disabled_begin(connectors.empty()); ImGui::SameLine(m_label_width); @@ -2359,7 +2359,7 @@ void GLGizmoCut3D::render_build_size() ImGui::AlignTextToFramePadding(); m_imgui->text(_L("Build Volume")); ImGui::SameLine(); - m_imgui->text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, size); + m_imgui->text_colored(ImGuiWrapper::COL_BLUE_LIGHT, size); } void GLGizmoCut3D::reset_cut_plane() @@ -2623,7 +2623,7 @@ void GLGizmoCut3D::render_cut_plane_input_window(CutConnectors &connectors) ImGui::AlignTextToFramePadding(); ImGuiWrapper::text(wxString(ImGui::InfoMarkerSmall)); ImGui::SameLine(); - ImGuiWrapper::text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, + ImGuiWrapper::text_colored(ImGuiWrapper::COL_BLUE_LIGHT, get_wraped_wxString(_L("Hold SHIFT key to draw a cut line"), 40)); ImGui::Separator(); @@ -2675,7 +2675,7 @@ void GLGizmoCut3D::render_cut_plane_input_window(CutConnectors &connectors) else if (mode == CutMode::cutTongueAndGroove) { m_is_slider_editing_done = false; ImGui::Separator(); - ImGuiWrapper::text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, m_labels_map["Groove"] + ": "); + ImGuiWrapper::text_colored(ImGuiWrapper::COL_BLUE_LIGHT, m_labels_map["Groove"] + ": "); render_groove_float_input(m_labels_map["Depth"], m_groove.depth, m_groove.depth_init, m_groove.depth_tolerance); render_groove_float_input(m_labels_map["Width"], m_groove.width, m_groove.width_init, m_groove.width_tolerance); render_groove_angle_input(m_labels_map["Flap Angle"], m_groove.flaps_angle, m_groove.flaps_angle_init, 30.f, 120.f); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 0350766..4916d15 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -251,6 +251,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S return; } this->shutdown(); + m_printer_view->StopAllThread(); // propagate event event.Skip(); }); @@ -2178,7 +2179,13 @@ void MainFrame::select_tab(size_t tab/* = size_t(-1)*/) Preset *preset = wxGetApp().preset_bundle->printers.find_preset(preset_name); if (preset != nullptr) { - std::string model_id = preset->config.opt_string("printer_model"); + std::string model_id; + if (preset != nullptr) { + if ((preset->config.opt_string("printer_model").empty())) + model_id = "X-MAX 3"; + else + model_id = preset->config.opt_string("printer_model"); + } preset_data.push_back({wxString::FromUTF8(it->get_full_name(preset_name)).Lower(), wxString::FromUTF8(preset_name), wxString::FromUTF8(it->get_full_name(preset_name)), ph_printers.is_selected(it, preset_name), diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index bd2c42d..30b7de4 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -946,6 +946,8 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config case coPoints: if (opt_key == "bed_shape") ret = config.option(opt_key)->values; + else if (opt_key == "bed_exclude_area") + ret = get_thumbnails_string(config.option(opt_key)->values); else if (opt_key == "thumbnails") ret = get_thumbnails_string(config.option(opt_key)->values); else diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 2cbf9d9..9f5a218 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5723,7 +5723,7 @@ void Plater::calib_pa_tower(const double StartPA, double EndPA, double PAStep) // Change End Gcode //new_config.set_key_value("seam_position", new ConfigOptionEnum(spRear)); //new_config.set_key_value("perimeter_generator", new ConfigOptionEnum(PerimeterGeneratorType::Classic)); - pa_end_gcode = "M900 K{int(layer_z / 5) * " + double_to_str(PAStep) + "}\n" + pa_end_gcode; + pa_end_gcode = "M900 K{int(layer_z / 5) * " + double_to_str(PAStep) + " + " + double_to_str(StartPA) + "}\n" + pa_end_gcode; new_config.set_key_value("before_layer_gcode", new ConfigOptionString(pa_end_gcode)); //tab_print->load_config(new_config); tab_printer->load_config(new_config); diff --git a/src/slic3r/GUI/PrinterWebView.cpp b/src/slic3r/GUI/PrinterWebView.cpp index c452ba1..295d0be 100644 --- a/src/slic3r/GUI/PrinterWebView.cpp +++ b/src/slic3r/GUI/PrinterWebView.cpp @@ -28,20 +28,46 @@ wxBEGIN_EVENT_TABLE(MachineListButton, wxButton) EVT_PAINT(MachineListButton::On wxEND_EVENT_TABLE() + //B45 void MachineListButton::OnPaint(wxPaintEvent &event) { + wxPaintDC dc(this); //m_bitmap = get_bmp_bundle("X-MAX 3_thumbnail", 80)->GetBitmapFor(this); + //w13 + wxRect rect = GetClientRect(); + dc.SetPen(wxPen(wxColour(30, 30, 32))); + if (mouseOnButton) { + //dc.SetPen(wxPen(wxColour(110, 110, 110))); + dc.SetBrush(wxBrush(wxColour(100, 100, 105))); + + dc.DrawRoundedRectangle(rect, 5); + } else { + //dc.SetPen(wxPen(wxColour(110, 110, 110))); + + dc.SetBrush(wxBrush(wxColour(67, 67, 71))); + + dc.DrawRoundedRectangle(rect, 5); + } + if (m_isSelected) { + //dc.SetPen(wxPen(wxColour(110, 110, 110))); + + dc.SetBrush(wxBrush(wxColour(100, 100, 105))); + + dc.DrawRoundedRectangle(rect, 5); + } + if (mousePressed) { + dc.SetPen(wxPen(wxColour(110, 110, 110))); + + dc.SetBrush(wxBrush(wxColour(109, 109, 113))); + + dc.DrawRoundedRectangle(rect, 5); + } if (m_isSimpleMode) { dc.SetFont(wxFont(15, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD)); dc.SetTextForeground(wxColour(230, 230, 230)); dc.DrawText(m_name_text, 10 , 10); - //wxSize textSize = dc.GetTextExtent(m_name_text); - //int x = (dc.GetSize().GetWidth() - textSize.GetWidth()) / 2; - //int y = (dc.GetSize().GetHeight() - textSize.GetHeight()) / 2; - - //dc.DrawText(m_name_text, x, y); } else { dc.DrawBitmap(m_bitmap, 10, (GetSize().GetHeight() - m_bitmap.GetHeight()) / 2, true); @@ -71,28 +97,38 @@ void MachineListButton::OnPaint(wxPaintEvent &event) void MachineListButton::OnMouseEnter(wxMouseEvent &event) { - SetBackgroundColour(wxColour(100, 100, 105)); + //w13 + mouseOnButton = true; + //SetBackgroundColour(wxColour(100, 100, 105)); Refresh(); + Update(); } void MachineListButton::OnMouseLeave(wxMouseEvent &event) { - if (m_isSelected) + //w13 + mouseOnButton = false; + /* if (m_isSelected) SetBackgroundColour(wxColour(100, 100, 105)); else - SetBackgroundColour(wxColour(67, 67, 71)); + SetBackgroundColour(wxColour(100, 100, 105)); */ Refresh(); + Update(); } void MachineListButton::OnMouseLeftDown(wxMouseEvent &event) { - SetBackgroundColour(wxColour(120, 120, 125)); + //w13 + mousePressed = true; + SetBackgroundColour(wxColour(30, 30, 32)); Refresh(); } void MachineListButton::OnMouseLeftUp(wxMouseEvent &event) { - SetBackgroundColour(wxColour(100, 100, 105)); + //w13 + mousePressed = false; + //SetBackgroundColour(wxColour(100, 100, 105)); if (m_handlerl) { m_handlerl(event); } @@ -111,13 +147,18 @@ PrinterWebView::PrinterWebView(wxWindow *parent) int leftsizerWidth = 210; #endif topsizer = new wxBoxSizer(wxHORIZONTAL); - leftScrolledWindow = new wxScrolledWindow(this, wxID_ANY); - leftScrolledWindow->SetBackgroundColour(wxColour(45, 45, 48)); + leftScrolledWindow = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL | wxVSCROLL); + // leftScrolledWindow->ShowScrollbars(wxSHOW_SB_NEVER, wxSHOW_SB_NEVER); + leftScrolledWindow->SetBackgroundColour(wxColour(30, 30, 32)); leftsizer = new wxBoxSizer(wxVERTICAL); wxFont font(wxFontInfo().Bold()); + wxPanel *buttonPanel = new wxPanel(this, wxID_ANY); + buttonPanel->SetBackgroundColour(wxColour(30, 30, 32)); + wxBoxSizer *buttonSizer = new wxBoxSizer(wxVERTICAL); + leftallsizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *titlesizer = new wxBoxSizer(wxHORIZONTAL); - text_static = new wxStaticText(leftScrolledWindow, wxID_ANY, "MACHINE LIST", wxDefaultPosition, wxDefaultSize); + text_static = new wxStaticText(buttonPanel, wxID_ANY, "MACHINE LIST", wxDefaultPosition, wxDefaultSize); text_static->SetForegroundColour(wxColour(255, 255, 255)); text_static->SetFont(wxFont(wxFontInfo(18).Bold())); #if defined __linux__ @@ -129,51 +170,54 @@ PrinterWebView::PrinterWebView(wxWindow *parent) titlesizer->AddStretchSpacer(); wxBoxSizer *buttonsizer = new wxBoxSizer(wxHORIZONTAL); - //wxBU_EXACTFIT wxBORDER_NONE + m_isSimpleMode = wxGetApp().app_config->get_bool("machine_list_minification"); + + + buttonPanel->SetSizer(buttonSizer); + //w13 #if defined(__WIN32__) || defined(__WXMAC__) - wxButton *add_button = new wxButton(leftScrolledWindow, wxID_ANY, "", wxDefaultPosition, wxSize(20, 20), wxBORDER_NONE); - add_button->SetBackgroundColour(wxColour(100, 100, 105)); - //add_button->SetForegroundColour(leftScrolledWindow->GetBackgroundColour()); + MyRoundButton *add_button = new MyRoundButton(buttonPanel, wxID_ANY, "", "add_machine_list", wxDefaultPosition, wxSize(20, 20), + wxBORDER_NONE); + add_button->SetBackgroundColour(wxColour(30, 30, 32)); add_button->SetMinSize(wxSize(40, -1)); - add_button->SetBitmap(*get_bmp_bundle("add_machine_list", 20)); buttonsizer->Add(add_button, wxSizerFlags().Align(wxALIGN_LEFT).CenterVertical().Border(wxALL, 2)); add_button->Bind(wxEVT_BUTTON, &PrinterWebView::OnAddButtonClick, this); - wxButton *delete_button = new wxButton(leftScrolledWindow, wxID_ANY, "", wxDefaultPosition, wxSize(20, 20), wxBORDER_NONE); - delete_button->SetBackgroundColour(wxColour(100, 100, 105)); - //delete_button->SetForegroundColour(leftScrolledWindow->GetBackgroundColour()); + MyRoundButton *delete_button = new MyRoundButton(buttonPanel, wxID_ANY, "", "delete_machine_list", wxDefaultPosition, + wxSize(20, 20), wxBORDER_NONE); + delete_button->SetBackgroundColour(wxColour(30, 30, 32)); delete_button->SetMinSize(wxSize(40, -1)); - delete_button->SetBitmap(*get_bmp_bundle("delete_machine_list", 20)); buttonsizer->Add(delete_button, wxSizerFlags().Align(wxALIGN_LEFT).CenterVertical().Border(wxALL, 2)); delete_button->Bind(wxEVT_BUTTON, &PrinterWebView::OnDeleteButtonClick, this); - wxButton *edit_button = new wxButton(leftScrolledWindow, wxID_ANY, "", wxDefaultPosition, wxSize(20, 20), wxBORDER_NONE); - edit_button->SetBackgroundColour(wxColour(100, 100, 105)); - //edit_button->SetForegroundColour(leftScrolledWindow->GetBackgroundColour()); + MyRoundButton *edit_button = new MyRoundButton(buttonPanel, wxID_ANY, "", "edit_machine_list", wxDefaultPosition, wxSize(20, 20), + wxBORDER_NONE); + edit_button->SetBackgroundColour(wxColour(30, 30, 32)); edit_button->SetMinSize(wxSize(40, -1)); - edit_button->SetBitmap(*get_bmp_bundle("edit_machine_list", 20)); buttonsizer->Add(edit_button, wxSizerFlags().Align(wxALIGN_LEFT).CenterVertical().Border(wxALL, 2)); edit_button->Bind(wxEVT_BUTTON, &PrinterWebView::OnEditButtonClick, this); - wxButton *refresh_button = new wxButton(leftScrolledWindow, wxID_ANY, "", wxDefaultPosition, wxSize(20, 20), wxBORDER_NONE); - refresh_button->SetBackgroundColour(wxColour(100, 100, 105)); - //refresh_button->SetForegroundColour(leftScrolledWindow->GetBackgroundColour()); + MyRoundButton *refresh_button = new MyRoundButton(buttonPanel, wxID_ANY, "", "refresh-line", wxDefaultPosition, wxSize(20, 20), + wxBORDER_NONE); + refresh_button->SetBackgroundColour(wxColour(30, 30, 32)); refresh_button->SetMinSize(wxSize(40, -1)); - refresh_button->SetBitmap(*get_bmp_bundle("refresh-line", 20)); buttonsizer->Add(refresh_button, wxSizerFlags().Align(wxALIGN_LEFT).CenterVertical().Border(wxALL, 2)); refresh_button->Bind(wxEVT_BUTTON, &PrinterWebView::OnRightButtonClick, this); - arrow_button = new wxButton(leftScrolledWindow, wxID_ANY, "", wxDefaultPosition, wxSize(20, 20), wxBORDER_NONE); + arrow_button = new wxButton(buttonPanel, wxID_ANY, "", wxDefaultPosition, wxSize(20, 20), wxBORDER_NONE); arrow_button->SetFont(font); - arrow_button->SetBackgroundColour(leftScrolledWindow->GetBackgroundColour()); - arrow_button->SetForegroundColour(leftScrolledWindow->GetBackgroundColour()); + arrow_button->SetBackgroundColour(buttonPanel->GetBackgroundColour()); + arrow_button->SetForegroundColour(buttonPanel->GetBackgroundColour()); arrow_button->SetMinSize(wxSize(40, -1)); + if (m_isSimpleMode) + arrow_button->SetBitmap(*get_bmp_bundle("arrow-right-s-line", 20)); + else arrow_button->SetBitmap(*get_bmp_bundle("arrow-left-s-line", 20)); titlesizer->Add(arrow_button, wxSizerFlags().Align(wxALIGN_LEFT).CenterVertical().Border(wxALL, 2)); arrow_button->Bind(wxEVT_BUTTON, &PrinterWebView::OnLeftButtonClick, this); @@ -182,8 +226,13 @@ PrinterWebView::PrinterWebView(wxWindow *parent) titlesizer->Layout(); buttonsizer->Layout(); - leftsizer->Add(titlesizer, wxSizerFlags().Expand().Align(wxALIGN_TOP).Border(wxALL, 0)); - leftsizer->Add(buttonsizer, wxSizerFlags().Expand().Align(wxALIGN_TOP).Border(wxALL, 0)); + buttonSizer->Add(titlesizer, wxSizerFlags(0).Expand().Align(wxALIGN_TOP).Border(wxALL, 0)); + buttonSizer->Add(buttonsizer, wxSizerFlags(1).Expand().Align(wxALIGN_TOP).Border(wxALL, 0)); + buttonPanel->Layout(); + + leftsizer->SetMinSize(wxSize(300, -1)); + //leftsizer->Add(titlesizer, wxSizerFlags().Expand().Align(wxALIGN_TOP).Border(wxALL, 0)); + //leftsizer->Add(buttonsizer, wxSizerFlags().Expand().Align(wxALIGN_TOP).Border(wxALL, 0)); leftsizer->Layout(); leftScrolledWindow->SetSizer(leftsizer); @@ -199,7 +248,10 @@ PrinterWebView::PrinterWebView(wxWindow *parent) SetSizer(topsizer); - topsizer->Add(leftScrolledWindow, wxSizerFlags(0).Expand()); + leftallsizer->Add(buttonPanel, wxSizerFlags(0).Expand()); + leftallsizer->Add(leftScrolledWindow, wxSizerFlags(1).Expand()); + + topsizer->Add(leftallsizer, wxSizerFlags(0).Expand()); topsizer->Add(m_browser, wxSizerFlags(1).Expand().Border(wxALL, 0)); // Zoom @@ -219,6 +271,18 @@ PrinterWebView::PrinterWebView(wxWindow *parent) //Connect the idle events Bind(wxEVT_CLOSE_WINDOW, &PrinterWebView::OnClose, this); + if (m_isSimpleMode) { + arrow_button->SetBitmap(*get_bmp_bundle("arrow-right-s-line", 20)); + leftsizer->SetMinSize(wxSize(190, -1)); + leftScrolledWindow->SetMinSize(wxSize(190, -1)); + text_static->SetFont(wxFont(wxFontInfo(12).Bold())); + leftsizer->Layout(); + + leftScrolledWindow->Layout(); + buttonSizer->Layout(); + + topsizer->Layout(); + } } @@ -258,7 +322,15 @@ void PrinterWebView::AddButton(const wxString & devi #else customButton->SetSize(wxSize(200, -1)); #endif - customButton->SetSimpleMode(false); + if (m_isSimpleMode) { + customButton->SetBitmap(*get_bmp_bundle(std::string("X-MAX 3_thumbnail"), 30)); + customButton->SetSimpleMode(m_isSimpleMode); + customButton->SetSize(wxSize(180, -1)); + } else { + customButton->SetBitmap(*get_bmp_bundle(std::string("X-MAX 3_thumbnail"), 80)); + customButton->SetSimpleMode(m_isSimpleMode); + customButton->SetSize(wxSize(300, -1)); + } leftsizer->Add(customButton, wxSizerFlags().Border(wxALL, 1).Expand()); leftsizer->Layout(); @@ -292,6 +364,19 @@ void PrinterWebView::AddButton(const wxString & devi } } + //B45 + void PrinterWebView::StopAllThread() + { + // BOOST_LOG_TRIVIAL(error) << " Stop"; + + if (m_buttons.empty()) { + BOOST_LOG_TRIVIAL(info) << " empty"; + } else { + for (MachineListButton *button : m_buttons) { + button->StopStatusThread(); + } + } + } // B45 void PrinterWebView::UnSelectedButton() @@ -336,11 +421,13 @@ void PrinterWebView::SetButtons(std::vector buttons) { m_bu BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " End"; } +//B45 void PrinterWebView::OnLeftButtonClick(wxCommandEvent &event) { m_isSimpleMode = !m_isSimpleMode; if (!m_isSimpleMode) { + wxGetApp().app_config->set("machine_list_minification","0"); leftsizer->SetMinSize(wxSize(300, -1)); leftScrolledWindow->SetMinSize(wxSize(300, -1)); arrow_button->SetBitmap(*get_bmp_bundle("arrow-left-s-line", 20)); @@ -353,14 +440,15 @@ void PrinterWebView::OnLeftButtonClick(wxCommandEvent &event) } } else { + wxGetApp().app_config->set("machine_list_minification", "1"); arrow_button->SetBitmap(*get_bmp_bundle("arrow-right-s-line", 20)); - leftsizer->SetMinSize(wxSize(210, -1)); - leftScrolledWindow->SetMinSize(wxSize(210, -1)); + leftsizer->SetMinSize(wxSize(190, -1)); + leftScrolledWindow->SetMinSize(wxSize(190, -1)); text_static->SetFont(wxFont(wxFontInfo(12).Bold())); for (MachineListButton *button : m_buttons) { button->SetBitmap(*get_bmp_bundle(std::string("X-MAX 3_thumbnail"), 30)); button->SetSimpleMode(m_isSimpleMode); - button->SetSize(wxSize(200, -1)); + button->SetSize(wxSize(180, -1)); } } @@ -370,14 +458,17 @@ void PrinterWebView::OnLeftButtonClick(wxCommandEvent &event) leftScrolledWindow->Layout(); topsizer->Layout(); - //UpdateLayout(); + UpdateLayout(); } +//B45 void PrinterWebView::OnRightButtonClick(wxCommandEvent &event) { for (MachineListButton *button : m_buttons) { button->ResumeStatusThread(); } + //w13 + Refresh(); } void PrinterWebView::OnAddButtonClick(wxCommandEvent &event) @@ -403,6 +494,9 @@ void PrinterWebView::OnAddButtonClick(wxCommandEvent &event) Preset * preset = wxGetApp().preset_bundle->printers.find_preset(preset_name); std::string model_id = "X-MAX 3"; if (preset != nullptr) { + if ((preset->config.opt_string("printer_model").empty())) + model_id = "X-MAX 3"; + else model_id = preset->config.opt_string("printer_model"); } @@ -424,8 +518,10 @@ void PrinterWebView::OnAddButtonClick(wxCommandEvent &event) true, cfg_t); load_url(formattedHost); UpdateLayout(); - Refresh(); + //w13 + //Refresh(); } + Refresh(); } void PrinterWebView::OnDeleteButtonClick(wxCommandEvent &event) { @@ -443,9 +539,12 @@ void PrinterWebView::OnDeleteButtonClick(wxCommandEvent &event) { #else msg += _L("Are you sure you want to delete ") + (button->getLabel()) + _L("printer?"); #endif - - if (MessageDialog(this, msg, _L("Delete Physical Printer"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION).ShowModal() != wxID_YES) - return ; + //w13 + if (MessageDialog(this, msg, _L("Delete Physical Printer"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION).ShowModal() != + wxID_YES) { + Refresh(); + return; + } button->StopStatusThread(); preset_bundle.physical_printers.select_printer((button->getLabel()).ToStdString()); @@ -476,13 +575,14 @@ void PrinterWebView::OnDeleteButtonClick(wxCommandEvent &event) { } UpdateLayout(); - Refresh(); + //Refresh(); break; } } if (m_handlerl) { m_handlerl(event); } + Refresh(); } void PrinterWebView::OnEditButtonClick(wxCommandEvent &event) { @@ -519,11 +619,13 @@ void PrinterWebView::OnEditButtonClick(wxCommandEvent &event) { button->SetBitMap(get_bmp_bundle(std::string(Machine_Name.mb_str()), 80)->GetBitmapFor(this)); UpdateLayout(); - Refresh(); + //w13 + //Refresh(); } break; } } + Refresh(); } @@ -565,7 +667,10 @@ void PrinterWebView::OnScriptMessage(wxWebViewEvent &evt) void PrinterWebView::UpdateLayout() { - //leftScrolledWindow->SetVirtualSize(leftsizer->GetMinSize()); + wxSize size = leftsizer->GetSize(); + int height = size.GetHeight(); + int Width = size.GetWidth(); + leftScrolledWindow->SetVirtualSize(Width, height); leftsizer->Layout(); leftScrolledWindow->Layout(); @@ -580,6 +685,20 @@ void PrinterWebView::UpdateLayout() } } +void PrinterWebView::OnScrollup(wxScrollWinEvent &event) +{ + height -= 5; + leftScrolledWindow->Scroll(0, height); + UpdateLayout(); + event.Skip(); +} +void PrinterWebView::OnScrolldown(wxScrollWinEvent &event) +{ + height += 5; + leftScrolledWindow->Scroll(0, height); + UpdateLayout(); + event.Skip(); +} void PrinterWebView::OnScroll(wxScrollWinEvent &event) { @@ -592,8 +711,9 @@ void PrinterWebView::load_url(wxString& url) { // this->Show(); // this->Raise(); - if (m_browser == nullptr) + if (m_browser == nullptr || m_web == url) return; + m_web = url; m_browser->LoadURL(url); url.Remove(0, 7); @@ -639,7 +759,25 @@ void PrinterWebView::RunScript(const wxString &javascript) WebView::RunScript(m_browser, javascript); } - - +//w13 +void MyRoundButton::OnPaint(wxPaintEvent &evt) +{ + wxPaintDC dc(this); + wxRect rect = GetClientRect(); + dc.SetPen(wxPen(wxColour(110, 110, 110))); + dc.SetBrush(wxBrush(wxColour(85, 85, 90))); + dc.DrawRoundedRectangle(rect, 5); + wxBitmap m_bitmap_state = get_bmp_bundle(m_name.ToStdString(), 20)->GetBitmapFor(this); + int imgWidth = m_bitmap_state.GetWidth(); + int imgHeight = m_bitmap_state.GetHeight(); + int x = (rect.GetWidth() - imgWidth) / 2; + int y = (rect.GetHeight() - imgHeight) / 2; + dc.DrawBitmap(m_bitmap_state, x, y); +} +void MyRoundButton::OnFocusEvent(wxFocusEvent &evt) +{ + Refresh(); + evt.Skip(); +} } // GUI } // Slic3r diff --git a/src/slic3r/GUI/PrinterWebView.hpp b/src/slic3r/GUI/PrinterWebView.hpp index a0cc235..5024d66 100644 --- a/src/slic3r/GUI/PrinterWebView.hpp +++ b/src/slic3r/GUI/PrinterWebView.hpp @@ -58,10 +58,11 @@ public: { full_label = fullname; m_isSelected = isSelected; + //w13 if (isSelected) - SetBackgroundColour(wxColour(100, 100, 105)); + SetBackgroundColour(wxColour(30, 30, 32)); else - SetBackgroundColour(wxColour(67, 67, 71)); + SetBackgroundColour(wxColour(30, 30, 32)); //Bind(wxEVT_BUTTON, &MachineListButton::OnMouseLeftUp, this); } @@ -110,10 +111,11 @@ public: void SetSelect(bool isselectd) { m_isSelected = isselectd; - if (m_isSelected) + //w13 + /* if (m_isSelected) SetBackgroundColour(wxColour(100, 100, 105)); else - SetBackgroundColour(wxColour(67, 67, 71)); + SetBackgroundColour(wxColour(67, 67, 71)); */ Refresh(); } bool GetSelected() { return m_isSelected;} @@ -135,6 +137,9 @@ public: m_stopThread = true; if (m_statusThread.joinable()) { m_statusThread.join(); + } else { + m_statusThread.detach(); + std::terminate(); } } void OnPaint(wxPaintEvent &event); @@ -185,7 +190,9 @@ public: } private: - + //w13 + bool mousePressed = false; + bool mouseOnButton; std::atomic m_stopThread{false}; std::atomic m_pauseThread{false}; @@ -230,6 +237,8 @@ public: void OnScriptMessage(wxWebViewEvent &evt); void UpdateLayout(); void OnScroll(wxScrollWinEvent &event); + void OnScrollup(wxScrollWinEvent &event); + void OnScrolldown(wxScrollWinEvent &event); void SetUpdateHandler(const std::function &handler) { m_handlerl = handler; } void SetDeleteHandler(const std::function &handler) { m_delete_handlerl = handler; } @@ -248,6 +257,7 @@ public: void DeleteButton(); void PauseButton(); void ResumeButton(); + void StopAllThread(); void UnSelectedButton(); std::vector GetButton() { return m_buttons; }; @@ -263,6 +273,8 @@ private: wxStaticText * text_static; + int height = 0; + wxString m_web; std::function m_handlerl; std::function m_delete_handlerl; @@ -278,7 +290,37 @@ private: // DECLARE_EVENT_TABLE() }; +//w13 +class MyRoundButton : public wxButton +{ +public: + wxString m_name; + MyRoundButton(wxWindow * parent, + wxWindowID id = wxID_ANY, + const wxString &label = "", + const wxString &name = "", + const wxPoint & pos = wxDefaultPosition, + const wxSize & size = wxDefaultSize, + long style = 0) + : wxButton(parent, id, label, pos, size, style), m_name(name) + { + //w13 + //SetBackgroundColour(wxColour(100, 100, 105)); + //SetMinSize(wxSize(40, -1)); + + Bind(wxEVT_PAINT, &MyRoundButton::OnPaint, this); + Bind(wxEVT_SET_FOCUS, &MyRoundButton::OnFocusEvent, this); + Bind(wxEVT_KILL_FOCUS, &MyRoundButton::OnFocusEvent, this); + } + void OnFocusEvent(wxFocusEvent &evt); + void OnPaint(wxPaintEvent &evt); + +private: + void DrawRoundedRect(wxDC &dc, wxRect rect, int radius){ + dc.DrawRoundedRectangle(rect, radius); + } +}; } // GUI diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 01af77d..da33713 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2516,6 +2516,10 @@ void TabPrinter::build_fff() return create_bed_shape_widget(parent); }); +//Y18 + Option option = optgroup->get_option("bed_exclude_area"); + option.opt.full_width = true; + optgroup->append_single_option_line(option); optgroup->append_single_option_line("max_print_height"); optgroup->append_single_option_line("z_offset"); @@ -2528,7 +2532,7 @@ void TabPrinter::build_fff() def.min = 1; def.max = 256; def.mode = comExpert; - Option option(def, "extruders_count"); + option = Option(def, "extruders_count"); optgroup->append_single_option_line(option); optgroup->append_single_option_line("single_extruder_multi_material"); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index f268904..556b1f6 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1209,6 +1209,9 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig& BedShape shape(*config.option(opt_key)); return shape.get_full_name_with_params(); } +//Y18 + if (opt_key == "bed_exclude_area") + return get_thumbnails_string(config.option(opt_key)->values); if (opt_key == "thumbnails") return get_thumbnails_string(config.option(opt_key)->values);