From 1079d4644c04d075e783d3fb3ad59f13077fae32 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Thu, 6 Aug 2020 10:40:04 +0200
Subject: [PATCH 1/3] PhysicalPrinterDialog improvements : Printer device
 default name is changed to force the user to change it

SavePresetDialog : Fixed OSX bug, when wxEVT_TEXT wasn't invoked after change selection in ComboBox
---
 src/slic3r/GUI/PhysicalPrinterDialog.cpp | 12 +++++++++---
 src/slic3r/GUI/PresetComboBoxes.cpp      |  5 +++++
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp
index f14f49801..12d1cd287 100644
--- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp
+++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp
@@ -161,13 +161,15 @@ PhysicalPrinterDialog::PhysicalPrinterDialog(wxString printer_name)
     SetFont(wxGetApp().normal_font());
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
 
-    m_default_name = _L("My Printer Device");
+    m_default_name = _L("Type here the name of your printer device");
+    bool new_printer = true;
 
     if (printer_name.IsEmpty())
         printer_name = m_default_name;
     else {
         std::string full_name = into_u8(printer_name);
         printer_name = from_u8(PhysicalPrinter::get_short_name(full_name));
+        new_printer = false;
     }
 
     wxStaticText* label_top = new wxStaticText(this, wxID_ANY, _L("Descriptive name for the printer device") + ":");
@@ -206,7 +208,6 @@ PhysicalPrinterDialog::PhysicalPrinterDialog(wxString printer_name)
 
     m_optgroup = new ConfigOptionsGroup(this, _L("Print Host upload"), m_config);
     build_printhost_settings(m_optgroup);
-    //m_optgroup->reload_config();
 
     wxStdDialogButtonSizer* btns = this->CreateStdDialogButtonSizer(wxOK | wxCANCEL);
     wxButton* btnOK = static_cast<wxButton*>(this->FindWindowById(wxID_OK, this));
@@ -230,6 +231,11 @@ PhysicalPrinterDialog::PhysicalPrinterDialog(wxString printer_name)
 
     SetSizer(topSizer);
     topSizer->SetSizeHints(this);
+
+    if (new_printer) {
+        m_printer_name->SetFocus();
+        m_printer_name->SelectAll();
+    }
 }
 
 PhysicalPrinterDialog::~PhysicalPrinterDialog()
@@ -494,7 +500,7 @@ void PhysicalPrinterDialog::OnOK(wxEvent& event)
 
     std::string renamed_from;
     // temporary save previous printer name if it was edited
-    if (m_printer.name != _u8L("My Printer Device") &&
+    if (m_printer.name != into_u8(m_default_name) &&
         m_printer.name != into_u8(printer_name))
         renamed_from = m_printer.name;
 
diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp
index 77bdb3812..da33ee51a 100644
--- a/src/slic3r/GUI/PresetComboBoxes.cpp
+++ b/src/slic3r/GUI/PresetComboBoxes.cpp
@@ -1054,6 +1054,11 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string& suffix, wxBox
         m_combo->Append(from_u8(value));
 
     m_combo->Bind(wxEVT_TEXT, [this](wxCommandEvent&) { update(); });
+#ifdef __WXOSX__
+    // Under OSX wxEVT_TEXT wasn't invoked after change selection in combobox,
+    // So process wxEVT_COMBOBOX too
+    m_combo->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { update(); });
+#endif //__WXOSX__
 
     m_valid_label = new wxStaticText(m_parent, wxID_ANY, "");
     m_valid_label->SetFont(wxGetApp().bold_font());

From 41b1dc3d80d43f4a2df141edd3d4b5bd1ee24ce1 Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Thu, 6 Aug 2020 14:05:42 +0200
Subject: [PATCH 2/3] Fix of custom supports 3MF loading Multiple-part objects
 were not handled correctly

---
 src/libslic3r/Format/3mf.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp
index 3612e6898..59dc85a0a 100644
--- a/src/libslic3r/Format/3mf.cpp
+++ b/src/libslic3r/Format/3mf.cpp
@@ -1878,10 +1878,11 @@ namespace Slic3r {
             volume->calculate_convex_hull();
 
             // recreate custom supports from previously loaded attribute
-            assert(geometry.custom_supports.size() == triangles_count);
             for (unsigned i=0; i<triangles_count; ++i) {
-                if (! geometry.custom_supports[i].empty())
-                    volume->m_supported_facets.set_triangle_from_string(i, geometry.custom_supports[i]);
+                size_t index = src_start_id/3 + i;
+                assert(index < geometry.custom_supports.size());
+                if (! geometry.custom_supports[index].empty())
+                    volume->m_supported_facets.set_triangle_from_string(i, geometry.custom_supports[index]);
             }
 
             // apply the remaining volume's metadata

From b6746a3937f89a27092e3119c38c1c2cbd9e373b Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 7 Aug 2020 10:00:54 +0200
Subject: [PATCH 3/3] PhysicalPrinterDialog : Incompatible presets extracted to
 the separate group

---
 src/slic3r/GUI/PresetComboBoxes.cpp | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp
index da33ee51a..33ae4f54e 100644
--- a/src/slic3r/GUI/PresetComboBoxes.cpp
+++ b/src/slic3r/GUI/PresetComboBoxes.cpp
@@ -179,7 +179,9 @@ void PresetComboBox::update(std::string select_preset_name)
 
     const std::deque<Preset>& presets = m_collection->get_presets();
 
-    std::map<wxString, std::pair<wxBitmap*, bool>> nonsys_presets;
+    std::map<wxString, std::pair<wxBitmap*, bool>>  nonsys_presets;
+    std::map<wxString, wxBitmap*>                   incomp_presets;
+
     wxString selected = "";
     if (!presets.front().is_visible)
         set_label_marker(Append(separator(L("System presets")), wxNullBitmap));
@@ -206,15 +208,15 @@ void PresetComboBox::update(std::string select_preset_name)
         wxBitmap* bmp = get_bmp(bitmap_key, main_icon_name, "lock_closed", is_enabled, preset.is_compatible, preset.is_system || preset.is_default);
         assert(bmp);
 
-        if (preset.is_default || preset.is_system) {
-            int item_id = Append(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), *bmp);
-            if (!is_enabled)
-                set_label_marker(item_id, LABEL_ITEM_DISABLED);
+        if (!is_enabled)
+            incomp_presets.emplace(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), bmp);
+        else if (preset.is_default || preset.is_system)
+        {
+            Append(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), *bmp);
             validate_selection(preset.name == select_preset_name);
         }
         else
         {
-            std::pair<wxBitmap*, bool> pair(bmp, is_enabled);
             nonsys_presets.emplace(wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str()), std::pair<wxBitmap*, bool>(bmp, is_enabled));
             if (preset.name == select_preset_name || (select_preset_name.empty() && is_enabled))
                 selected = wxString::FromUTF8((preset.name + (preset.is_dirty ? Preset::suffix_modified() : "")).c_str());
@@ -233,6 +235,13 @@ void PresetComboBox::update(std::string select_preset_name)
             validate_selection(it->first == selected);
         }
     }
+    if (!incomp_presets.empty())
+    {
+        set_label_marker(Append(separator(L("Incompatible presets")), wxNullBitmap));
+        for (std::map<wxString, wxBitmap*>::iterator it = incomp_presets.begin(); it != incomp_presets.end(); ++it) {
+            set_label_marker(Append(it->first, *it->second), LABEL_ITEM_DISABLED);
+        }
+    }
 
     update_selection();
     Thaw();