diff --git a/src/slic3r/GUI/DoubleSlider.cpp b/src/slic3r/GUI/DoubleSlider.cpp index fc93262a2e..9134d6988d 100644 --- a/src/slic3r/GUI/DoubleSlider.cpp +++ b/src/slic3r/GUI/DoubleSlider.cpp @@ -11,6 +11,7 @@ #include "GUI_Utils.hpp" #include "MsgDialog.hpp" #include "Tab.hpp" +#include "GUI_ObjectList.hpp" #include #include @@ -1588,7 +1589,7 @@ void Control::append_change_extruder_menu_item(wxMenu* menu, bool switch_current append_submenu(menu, change_extruder_menu, wxID_ANY, change_extruder_menu_name, _L("Use another extruder"), active_extruders[1] > 0 ? "edit_uni" : "change_extruder", - [this]() {return m_mode == MultiAsSingle; }, GUI::wxGetApp().plater()); + [this]() {return m_mode == MultiAsSingle && !GUI::wxGetApp().obj_list()->has_paint_on_segmentation(); }, GUI::wxGetApp().plater()); } } diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index 3fd6b9f04f..277f225afb 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -2,6 +2,7 @@ #include "wxExtensions.hpp" #include "GUI.hpp" #include "I18N.hpp" +#include "BitmapComboBox.hpp" #include #ifdef wxHAS_GENERIC_DATAVIEWCTRL @@ -296,7 +297,11 @@ wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelR DataViewBitmapText data; data << value; +#ifdef _WIN32 + Slic3r::GUI::BitmapComboBox* c_editor = new Slic3r::GUI::BitmapComboBox(parent, wxID_ANY, wxEmptyString, +#else auto c_editor = new wxBitmapComboBox(parent, wxID_ANY, wxEmptyString, +#endif labelRect.GetTopLeft(), wxSize(labelRect.GetWidth(), -1), 0, nullptr , wxCB_READONLY); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 0eb535ee83..9bbf82039d 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -4248,5 +4248,10 @@ ModelObject* ObjectList::object(const int obj_idx) const return (*m_objects)[obj_idx]; } +bool ObjectList::has_paint_on_segmentation() +{ + return m_objects_model->HasInfoItem(InfoItemType::MmuSegmentation); +} + } //namespace GUI } //namespace Slic3r diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 0f1bcd6014..b41628a258 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -379,6 +379,7 @@ public: void set_extruder_for_selected_items(const int extruder) const ; wxDataViewItemArray reorder_volumes_and_get_selection(int obj_idx, std::function add_to_selection = nullptr); void apply_volumes_order(); + bool has_paint_on_segmentation(); private: #ifdef __WXOSX__ diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 8f65e4f902..c7208984e5 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -1494,7 +1494,17 @@ void ObjectDataViewModel::GetAllChildren(const wxDataViewItem &parent, wxDataVie } } -ItemType ObjectDataViewModel::GetItemType(const wxDataViewItem &item) const +bool ObjectDataViewModel::HasInfoItem(InfoItemType type) const +{ + for (ObjectDataViewModelNode* obj_node : m_objects) + for (size_t j = 0; j < obj_node->GetChildCount(); j++) + if (obj_node->GetNthChild(j)->GetInfoItemType() == type) + return true; + + return false; +} + +ItemType ObjectDataViewModel::GetItemType(const wxDataViewItem &item) const { if (!item.IsOk()) return itUndef; diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 664cf7ff57..b1330f93d6 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -345,6 +345,7 @@ public: // Is the container just a header or an item with all columns // In our case it is an item with all columns bool HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override { return true; } + bool HasInfoItem(InfoItemType type) const; ItemType GetItemType(const wxDataViewItem &item) const; InfoItemType GetInfoItemType(const wxDataViewItem &item) const;