mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-07-31 18:42:02 +08:00
Merge tag 'version_2.7.4'
version_2.7.4
This commit is contained in:
commit
53e7a2d726
@ -1971,7 +1971,15 @@ namespace Slic3r {
|
||||
|
||||
m_curr_object.geometry.custom_supports.push_back(get_attribute_value_string(attributes, num_attributes, CUSTOM_SUPPORTS_ATTR));
|
||||
m_curr_object.geometry.custom_seam.push_back(get_attribute_value_string(attributes, num_attributes, CUSTOM_SEAM_ATTR));
|
||||
m_curr_object.geometry.mm_segmentation.push_back(get_attribute_value_string(attributes, num_attributes, MM_SEGMENTATION_ATTR));
|
||||
|
||||
// Now load MM segmentation data. Unfortunately, BambuStudio has changed the attribute name after they forked us,
|
||||
// leading to https://github.com/prusa3d/PrusaSlicer/issues/12502. Let's try to load both keys if the usual
|
||||
// one that PrusaSlicer uses is not present.
|
||||
std::string mm_segmentation_serialized = get_attribute_value_string(attributes, num_attributes, MM_SEGMENTATION_ATTR);
|
||||
if (mm_segmentation_serialized.empty())
|
||||
mm_segmentation_serialized = get_attribute_value_string(attributes, num_attributes, "paint_color");
|
||||
m_curr_object.geometry.mm_segmentation.push_back(mm_segmentation_serialized);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1473,11 +1473,12 @@ PageDownloader::PageDownloader(ConfigWizard* parent)
|
||||
boldfont.SetWeight(wxFONTWEIGHT_BOLD);
|
||||
|
||||
append_spacer(VERTICAL_SPACING);
|
||||
|
||||
auto* box_allow_downloads = new wxCheckBox(this, wxID_ANY, _L("Allow built-in downloader"));
|
||||
// TODO: Do we want it like this? The downloader is allowed for very first time the wizard is run.
|
||||
bool box_allow_value = (app_config->has("downloader_url_registered") ? app_config->get_bool("downloader_url_registered") : true);
|
||||
box_allow_downloads->SetValue(box_allow_value);
|
||||
append(box_allow_downloads);
|
||||
append(box_allow_downloads);
|
||||
|
||||
// append info line with link on printables.com
|
||||
{
|
||||
@ -1523,7 +1524,7 @@ PageDownloader::PageDownloader(ConfigWizard* parent)
|
||||
)));
|
||||
#endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
|
||||
box_allow_downloads->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& event) { this->m_downloader->allow(event.IsChecked()); });
|
||||
box_allow_downloads->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& event) { this->m_downloader->allow(event.IsChecked()); });
|
||||
|
||||
m_downloader = new DownloaderUtils::Worker(this);
|
||||
append(m_downloader);
|
||||
@ -2409,9 +2410,7 @@ void ConfigWizard::priv::load_pages()
|
||||
btn_finish->Enable(any_fff_selected || any_sla_selected || custom_printer_selected || custom_printer_in_bundle);
|
||||
|
||||
index->add_page(page_update);
|
||||
#if !defined(__linux__) || (defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
index->add_page(page_downloader);
|
||||
#endif
|
||||
index->add_page(page_reload_from_disk);
|
||||
#ifdef _WIN32
|
||||
index->add_page(page_files_association);
|
||||
@ -2778,12 +2777,12 @@ void ConfigWizard::priv::on_3rdparty_install(const VendorProfile *vendor, bool i
|
||||
bool ConfigWizard::priv::on_bnt_finish()
|
||||
{
|
||||
wxBusyCursor wait;
|
||||
#if !defined(__linux__) || (defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
|
||||
if (!page_downloader->on_finish_downloader()) {
|
||||
index->go_to(page_downloader);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If some printers were added/deleted, but related MaterialPage wasn't activated,
|
||||
* than last changes wouldn't be updated for filaments/materials.
|
||||
* SO, do that before check_and_install_missing_materials()
|
||||
@ -3406,9 +3405,7 @@ ConfigWizard::ConfigWizard(wxWindow *parent)
|
||||
|
||||
|
||||
p->add_page(p->page_update = new PageUpdate(this));
|
||||
#if !defined(__linux__) || (defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
p->add_page(p->page_downloader = new PageDownloader(this));
|
||||
#endif
|
||||
p->add_page(p->page_reload_from_disk = new PageReloadFromDisk(this));
|
||||
#ifdef _WIN32
|
||||
p->add_page(p->page_files_association = new PageFilesAssociation(this));
|
||||
|
@ -66,11 +66,11 @@ void open_folder(const std::string& path)
|
||||
|
||||
std::string filename_from_url(const std::string& url)
|
||||
{
|
||||
// TODO: can it be done with curl?
|
||||
size_t slash = url.find_last_of("/");
|
||||
if (slash == std::string::npos && slash != url.size() - 1)
|
||||
std::string url_plain = std::string(url.begin(), std::find(url.begin(), url.end(), '?'));
|
||||
size_t slash = url_plain.find_last_of("/");
|
||||
if (slash == std::string::npos)
|
||||
return std::string();
|
||||
return url.substr(slash + 1, url.size() - slash + 1);
|
||||
return std::string(url_plain.begin() + slash + 1, url_plain.end());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3188,9 +3188,6 @@ void GUI_App::show_desktop_integration_dialog()
|
||||
|
||||
void GUI_App::show_downloader_registration_dialog()
|
||||
{
|
||||
#if defined(__linux__) && !defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
return;
|
||||
#endif
|
||||
InfoDialog msg(nullptr
|
||||
, format_wxstr(_L("Welcome to %1% version %2%."), SLIC3R_APP_NAME, SLIC3R_VERSION)
|
||||
, format_wxstr(_L(
|
||||
@ -3202,10 +3199,10 @@ void GUI_App::show_downloader_registration_dialog()
|
||||
if (msg.ShowModal() == wxID_YES) {
|
||||
auto downloader_worker = new DownloaderUtils::Worker(nullptr);
|
||||
downloader_worker->perform_register(app_config->get("url_downloader_dest"));
|
||||
#if defined(__linux__)
|
||||
#if defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
if (DownloaderUtils::Worker::perform_registration_linux)
|
||||
DesktopIntegrationDialog::perform_downloader_desktop_integration();
|
||||
#endif //(__linux__)
|
||||
#endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
} else {
|
||||
app_config->set("downloader_url_registered", "0");
|
||||
}
|
||||
@ -3598,26 +3595,23 @@ void GUI_App::start_download(std::string url)
|
||||
return;
|
||||
}
|
||||
|
||||
// Windows register and deregister executable path to registry - cant get here when not registered
|
||||
// Apple registers via info.plist attached to exectable - might get here
|
||||
// Linux registers via desktop integration file - might get here only if such file was created outside Slicer.
|
||||
// Desktop integration is limited with SLIC3R_DESKTOP_INTEGRATION (cmake option).
|
||||
#if defined(__APPLE__) || (defined(__linux__) && !defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
if (app_config && app_config->get_bool("downloader_url_registered")) {
|
||||
#if defined(__APPLE__) || (defined(__linux__) && !defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
if (app_config && !app_config->get_bool("downloader_url_registered"))
|
||||
{
|
||||
notification_manager()->push_notification(NotificationType::URLNotRegistered);
|
||||
BOOST_LOG_TRIVIAL(error) << "Recieved command to open URL, but it is not allowed in app configuration. URL: " << url;
|
||||
BOOST_LOG_TRIVIAL(error) << "Received command to open URL, but it is not allowed in app configuration. URL: " << url;
|
||||
return;
|
||||
}
|
||||
#endif //defined(__APPLE__) || (defined(__linux__) && !defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
#endif //defined(__APPLE__) || (defined(__linux__) && !defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
|
||||
//lets always init so if the download dest folder was changed, new dest is used
|
||||
boost::filesystem::path dest_folder(app_config->get("url_downloader_dest"));
|
||||
if (dest_folder.empty() || !boost::filesystem::is_directory(dest_folder)) {
|
||||
std::string msg = _u8L("Could not start URL download. Destination folder is not set. Please choose destination folder in Configuration Wizard.");
|
||||
BOOST_LOG_TRIVIAL(error) << msg;
|
||||
show_error(nullptr, msg);
|
||||
return;
|
||||
}
|
||||
boost::filesystem::path dest_folder(app_config->get("url_downloader_dest"));
|
||||
if (dest_folder.empty() || !boost::filesystem::is_directory(dest_folder)) {
|
||||
std::string msg = _u8L("Could not start URL download. Destination folder is not set. Please choose destination folder in Configuration Wizard.");
|
||||
BOOST_LOG_TRIVIAL(error) << msg;
|
||||
show_error(nullptr, msg);
|
||||
return;
|
||||
}
|
||||
m_downloader->init(dest_folder);
|
||||
m_downloader->start_download(url);
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ enum class NotificationType
|
||||
ExportOngoing,
|
||||
// Progressbar of download from prusaslicer:// url
|
||||
URLDownload,
|
||||
// MacOS and Linux flatpack (SLIC3R_DESKTOP_INTEGRATION = 0) specific - PS comes forward even when downloader is not allowed
|
||||
// MacOS specific - PS comes forward even when downloader is not allowed
|
||||
URLNotRegistered,
|
||||
// Config file was detected during startup, open wifi config dialog via hypertext
|
||||
WifiConfigFileDetected,
|
||||
|
@ -33,10 +33,6 @@
|
||||
#include "DesktopIntegrationDialog.hpp"
|
||||
#endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
|
||||
#if defined(__linux__) && !defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
#include "NotificationManager.hpp"
|
||||
#endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
static t_config_enum_names enum_names_from_keys_map(const t_config_enum_values& enum_keys_map)
|
||||
@ -135,10 +131,10 @@ void PreferencesDialog::show(const std::string& highlight_opt_key /*= std::strin
|
||||
|
||||
if (wxGetApp().is_editor()) {
|
||||
auto app_config = get_app_config();
|
||||
#if !defined(__linux__) || (defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
|
||||
downloader->set_path_name(app_config->get("url_downloader_dest"));
|
||||
downloader->allow(!app_config->has("downloader_url_registered") || app_config->get_bool("downloader_url_registered"));
|
||||
#endif
|
||||
|
||||
for (const std::string& opt_key : {"suppress_hyperlinks", "downloader_url_registered"})
|
||||
m_optgroup_other->set_value(opt_key, app_config->get_bool(opt_key));
|
||||
|
||||
@ -646,17 +642,15 @@ void PreferencesDialog::build()
|
||||
//L("If enabled, the descriptions of configuration parameters in settings tabs wouldn't work as hyperlinks. "
|
||||
// "If disabled, the descriptions of configuration parameters in settings tabs will work as hyperlinks."),
|
||||
app_config->get_bool("suppress_hyperlinks"));
|
||||
#if !defined(__linux__) || (defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
|
||||
append_bool_option(m_optgroup_other, "downloader_url_registered",
|
||||
L("Allow downloads from Printables.com"),
|
||||
L("If enabled, PrusaSlicer will be allowed to download from Printables.com"),
|
||||
app_config->get_bool("downloader_url_registered"));
|
||||
#endif
|
||||
|
||||
activate_options_tab(m_optgroup_other);
|
||||
#if !defined(__linux__) || (defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
|
||||
create_downloader_path_sizer();
|
||||
#endif
|
||||
create_settings_font_widget();
|
||||
|
||||
#if ENABLE_ENVIRONMENT_MAP
|
||||
@ -761,18 +755,16 @@ void PreferencesDialog::update_ctrls_alignment()
|
||||
|
||||
void PreferencesDialog::accept(wxEvent&)
|
||||
{
|
||||
#if !defined(__linux__) || (defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION))
|
||||
if(wxGetApp().is_editor()) {
|
||||
if (const auto it = m_values.find("downloader_url_registered"); it != m_values.end())
|
||||
downloader->allow(it->second == "1");
|
||||
if (!downloader->on_finish())
|
||||
return;
|
||||
#if defined(__linux__)
|
||||
if(DownloaderUtils::Worker::perform_registration_linux)
|
||||
#if defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
if(DownloaderUtils::Worker::perform_registration_linux)
|
||||
DesktopIntegrationDialog::perform_downloader_desktop_integration();
|
||||
#endif
|
||||
#endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)
|
||||
}
|
||||
#endif
|
||||
|
||||
std::vector<std::string> options_to_recreate_GUI = { "no_defaults", "tabs_as_menu", "sys_menu_enabled", "font_pt_size", "suppress_round_corners" };
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user