diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index f0340d30d..90bd83253 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -10226,10 +10226,27 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) switch (error) { case PLATER_WARNING: - if (state) - notification_manager.push_plater_warning_notification(text); - else - notification_manager.close_plater_warning_notification(text); + if (warning == EWarning::MixUsePLAAndPETG) { + if (state) { + notification_manager.push_slicing_customize_error_notification(NotificationType::BBLMixUsePLAAndPETG, NotificationLevel::WarningNotificationLevel, text, _u8L("Click Wiki for help."), + [](wxEvtHandler*) { + std::string language = wxGetApp().app_config->get("language"); + wxString region = L"en"; + if (language.find("zh") == 0) + region = L"zh"; + wxGetApp().open_browser_with_warning_dialog(wxString::Format(L"https://wiki.bambulab.com/%s/filament-acc/filament/h2d-pla-and-petg-mutual-support", region)); + return false; + }); + } + else + notification_manager.close_slicing_customize_error_notification(NotificationType::BBLMixUsePLAAndPETG, NotificationLevel::WarningNotificationLevel); + } + else { + if (state) + notification_manager.push_plater_warning_notification(text); + else + notification_manager.close_plater_warning_notification(text); + } break; case PLATER_ERROR: if (warning == EWarning::LeftExtruderPrintableError) { @@ -10284,7 +10301,15 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) } if (warning == EWarning::FilamentPrintableError) { if (state) - notification_manager.push_slicing_customize_error_notification(NotificationType::BBLFilamentPrintableError, NotificationLevel::ErrorNotificationLevel, text); + notification_manager.push_slicing_customize_error_notification(NotificationType::BBLFilamentPrintableError, NotificationLevel::ErrorNotificationLevel, text, _u8L("Click Wiki for help."), + [](wxEvtHandler*) { + std::string language = wxGetApp().app_config->get("language"); + wxString region = L"en"; + if (language.find("zh") == 0) + region = L"zh"; + wxGetApp().open_browser_with_warning_dialog(wxString::Format(L"https://wiki.bambulab.com/%s/filament-acc/filament/h2d-filament-config-limit", region)); + return false; + }); else notification_manager.close_slicing_customize_error_notification(NotificationType::BBLFilamentPrintableError, NotificationLevel::ErrorNotificationLevel); } diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index c405d0ea4..6549a5934 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -1746,10 +1746,11 @@ void NotificationManager::close_general_error_notification(const std::string& te } } -void NotificationManager::push_slicing_customize_error_notification(NotificationType type, NotificationLevel level, const std::string &text) +void NotificationManager::push_slicing_customize_error_notification(NotificationType type, NotificationLevel level, const std::string &text, const std::string &hypertext, std::function callback) { set_all_slicing_errors_gray(false); - push_notification_data({type, level, 0, _u8L("Error:") + "\n" + text}, 0); + std::string prefix_msg = level == NotificationLevel::WarningNotificationLevel ? _u8L("Warning:") : _u8L("Error:"); + push_notification_data({type, level, 0, prefix_msg + "\n" + text, hypertext, callback}, 0); set_slicing_progress_hidden(); } diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index f2edfb89b..023d0734b 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -152,6 +152,7 @@ enum class NotificationType BBLFilamentPrintableError, BBLSliceLimitError, BBLBedFilamentIncompatible, + BBLMixUsePLAAndPETG, NotificationTypeCount }; @@ -236,7 +237,7 @@ public: void close_plater_error_notification(const std::string& text); void close_plater_warning_notification(const std::string& text); // GCode exceeds the printing range of the extruder - void push_slicing_customize_error_notification(NotificationType type, NotificationLevel level, const std::string &text); + void push_slicing_customize_error_notification(NotificationType type, NotificationLevel level, const std::string &text, const std::string &hypertext = "", std::function callback = std::function()); void close_slicing_customize_error_notification(NotificationType type, NotificationLevel level); // Object warning with ObjectID, closes when object is deleted. ID used is of object not print like in slicing warning.