diff --git a/src/slic3r/GUI/BulkExportDialog.cpp b/src/slic3r/GUI/BulkExportDialog.cpp index 7005de7486..a54c4841d0 100644 --- a/src/slic3r/GUI/BulkExportDialog.cpp +++ b/src/slic3r/GUI/BulkExportDialog.cpp @@ -200,15 +200,16 @@ void BulkExportDialog::Item::update_valid_bmp() m_valid_bmp->SetBitmap(*get_bmp_bundle(get_bmp_name(m_status))); } -BulkExportDialog::BulkExportDialog(const std::vector>> &paths): +BulkExportDialog::BulkExportDialog(const std::vector>> &paths, const wxString& title): DPIDialog( nullptr, wxID_ANY, - _L("Export beds"), + title, wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()), wxDEFAULT_DIALOG_STYLE | wxICON_WARNING ) + , m_title(title) { this->SetFont(wxGetApp().normal_font()); @@ -254,7 +255,7 @@ void BulkExportDialog::accept() if (has_warnings()) { MessageDialog dialog(nullptr, _L("Some of the selected files already exist. Do you want to replace them?"), - _L("Export beds"), wxYES_NO | wxICON_QUESTION); + m_title, wxYES_NO | wxICON_QUESTION); if (dialog.ShowModal() == wxID_NO) return; } diff --git a/src/slic3r/GUI/BulkExportDialog.hpp b/src/slic3r/GUI/BulkExportDialog.hpp index 83b72f4fba..78cc3bb0b2 100644 --- a/src/slic3r/GUI/BulkExportDialog.hpp +++ b/src/slic3r/GUI/BulkExportDialog.hpp @@ -79,10 +79,10 @@ private: // This must be a unique ptr, because Item does not have copy nor move constructors. std::vector> m_items; wxFlexGridSizer*m_sizer{nullptr}; - + wxString m_title; public: - BulkExportDialog(const std::vector>> &paths); + BulkExportDialog(const std::vector>> &paths, const wxString& title); std::vector>> get_paths() const; bool has_warnings() const; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 64a57a9323..05c8caa8b9 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5948,7 +5948,7 @@ void Plater::export_all_gcodes(bool prefer_removable) { paths.emplace_back(print_index, output_file); } - BulkExportDialog dialog{paths}; + BulkExportDialog dialog{paths, _L("Export beds")}; if (dialog.ShowModal() != wxID_OK) { return; } @@ -6481,11 +6481,12 @@ void Plater::printables_to_connect_gcode(const std::string& url) } -std::optional Plater::get_connect_print_host_job() { +std::optional Plater::get_connect_print_host_job(bool multiple_beds) +{ assert(p->user_account->is_logged()); std::string dialog_msg; { - PrinterPickWebViewDialog dialog(this, dialog_msg); + PrinterPickWebViewDialog dialog(this, dialog_msg, multiple_beds); if (dialog.ShowModal() != wxID_OK) { return std::nullopt; } @@ -6538,13 +6539,13 @@ std::optional Plater::get_connect_print_host_job() { void Plater::connect_gcode() { - if (auto upload_job{get_connect_print_host_job()}) { + if (auto upload_job{get_connect_print_host_job(false)}) { p->export_gcode(fs::path(), false, std::move(*upload_job)); } } void Plater::connect_gcode_all() { - auto optional_upload_job{get_connect_print_host_job()}; + auto optional_upload_job{get_connect_print_host_job(true)}; if (!optional_upload_job) { return; } @@ -6556,6 +6557,7 @@ void Plater::connect_gcode_all() { if (print_host_ptr == nullptr) { throw std::runtime_error{"Sending to connect requires PrusaConnectNew host."}; } + const PrusaConnectNew connect{*print_host_ptr}; std::vector >> paths; @@ -6566,16 +6568,35 @@ void Plater::connect_gcode_all() { paths.emplace_back(print_index, std::nullopt); continue; } + // Prevously, filename from Connect FE was taken and used for each gcode file. + // Now naming is same as in gcode export. + fs::path default_filename{upload_job_template.upload_data.upload_path}; + this->with_mocked_fff_background_process( + *print, + this->p->gcode_results[print_index], + print_index, + [&](){ + const auto optional_file{this->get_default_output_file()}; + if (!optional_file) { + return; + } + if (print_index != s_multiple_beds.get_number_of_beds() - 1 || default_filename.empty()) { + const fs::path &default_file{*optional_file}; + default_filename = default_file.filename(); + } + } + ); - const fs::path filename{upload_job_template.upload_data.upload_path}; - paths.emplace_back(print_index, fs::path{ - filename.stem().string() - + "_bed" + std::to_string(print_index + 1) - + filename.extension().string() - }); + const fs::path filename_fixed{ + default_filename.stem().string() + + "_bed" + + std::to_string(print_index + 1) + + default_filename.extension().string() + }; + paths.emplace_back(print_index, filename_fixed); } - BulkExportDialog dialog{paths}; + BulkExportDialog dialog{paths, _L("Send all to Connect")}; if (dialog.ShowModal() != wxID_OK) { return; } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 879a125f2b..db2c79778d 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -249,7 +249,7 @@ public: void send_gcode_inner(DynamicPrintConfig* physical_printer_config); void eject_drive(); - std::optional get_connect_print_host_job(); + std::optional get_connect_print_host_job(bool multiple_beds); void connect_gcode(); void connect_gcode_all(); void printables_to_connect_gcode(const std::string& url); diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index e3cd03cde9..8633daa062 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -452,13 +452,14 @@ void WebViewDialog::EndModal(int retCode) wxDialog::EndModal(retCode); } -PrinterPickWebViewDialog::PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val) +PrinterPickWebViewDialog::PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val, bool multiple_beds) : WebViewDialog(parent , GUI::from_u8(Utils::ServiceConfig::instance().connect_select_printer_url()) , _L("Choose a printer") , wxSize(parent->GetClientSize().x / 4 * 3, parent->GetClientSize().y/ 4 * 3) ,{"_prusaSlicer"} , "connect_loading") + , m_multiple_beds(multiple_beds) , m_ret_val(ret_val) { @@ -580,7 +581,9 @@ void PrinterPickWebViewDialog::request_compatible_printers_FFF() { const std::string uuid = wxGetApp().plater()->get_user_account()->get_current_printer_uuid_from_connect(printer_model_serialized); const std::string filename = wxGetApp().plater()->get_upload_filename(); - //filament_abrasive + + const std::string multiple_beds_value = m_multiple_beds ? "true" : "false"; + std::string request = GUI::format( "{" "\"printerUuid\": \"%4%\", " @@ -589,9 +592,10 @@ void PrinterPickWebViewDialog::request_compatible_printers_FFF() { "\"material\": %1%, " "\"filename\": \"%5%\", " "\"filament_abrasive\": %6%," - "\"high_flow\": %7%" + "\"high_flow\": %7%," + "\"multiple_beds\": %8%" "}" - , filament_type_serialized, nozzle_diameter_serialized, printer_model_serialized, uuid, filename, filament_abrasive_serialized, nozzle_high_flow_serialized); + , filament_type_serialized, nozzle_diameter_serialized, printer_model_serialized, uuid, filename, filament_abrasive_serialized, nozzle_high_flow_serialized, multiple_beds_value); wxString script = GUI::format_wxstr("window._prusaConnect_v2.requestCompatiblePrinter(%1%)", request); run_script(script); @@ -609,13 +613,15 @@ void PrinterPickWebViewDialog::request_compatible_printers_SLA() const std::string material_type_serialized = selected_material.config.option("material_type")->serialize(); const std::string uuid = wxGetApp().plater()->get_user_account()->get_current_printer_uuid_from_connect(printer_model_serialized); const std::string filename = wxGetApp().plater()->get_upload_filename(); + const std::string multiple_beds_value = m_multiple_beds ? "true" : "false"; const std::string request = GUI::format( "{" "\"printerUuid\": \"%3%\", " "\"material\": \"%1%\", " "\"printerModel\": \"%2%\", " - "\"filename\": \"%4%\" " - "}", material_type_serialized, printer_model_serialized, uuid, filename); + "\"filename\": \"%4%\", " + "\"multiple_beds\": \"%5%\" " + "}", material_type_serialized, printer_model_serialized, uuid, filename, multiple_beds_value); wxString script = GUI::format_wxstr("window._prusaConnect_v2.requestCompatiblePrinter(%1%)", request); run_script(script); diff --git a/src/slic3r/GUI/WebViewDialog.hpp b/src/slic3r/GUI/WebViewDialog.hpp index 1ed91f666e..fd62f9f3da 100644 --- a/src/slic3r/GUI/WebViewDialog.hpp +++ b/src/slic3r/GUI/WebViewDialog.hpp @@ -95,7 +95,7 @@ protected: class PrinterPickWebViewDialog : public WebViewDialog, public ConnectRequestHandler { public: - PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val); + PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val, bool multiple_beds); void on_show(wxShowEvent& evt) override; void on_script_message(wxWebViewEvent& evt) override; protected: @@ -110,6 +110,7 @@ protected: void on_connect_action_close_dialog(const std::string& message_data) override {assert(false);} private: std::string& m_ret_val; + bool m_multiple_beds; }; class PrintablesConnectUploadDialog : public WebViewDialog, public ConnectRequestHandler diff --git a/src/slic3r/GUI/WebViewPanel.hpp b/src/slic3r/GUI/WebViewPanel.hpp index ddf43d7a0e..77b05d062b 100644 --- a/src/slic3r/GUI/WebViewPanel.hpp +++ b/src/slic3r/GUI/WebViewPanel.hpp @@ -221,6 +221,7 @@ private: void on_printables_event_slice_file(const std::string& message_data); void on_printables_event_required_login(const std::string& message_data); void on_printables_event_open_url(const std::string& message_data); + void on_dummy_event(const std::string& message_data) {} void load_default_url() override; std::string get_url_lang_theme(const wxString& url) const; void show_download_notification(const std::string& filename);