diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index d5740ddaaa..4a47119720 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1138,7 +1138,7 @@ void GUI_App::UpdateDlgDarkUI(wxDialog* dlg, bool just_buttons_update/* = false* void GUI_App::UpdateDVCDarkUI(wxDataViewCtrl* dvc, bool highlited/* = false*/) { #ifdef _WIN32 - UpdateDarkUI(dvc, highlited); + UpdateDarkUI(dvc, highlited ? dark_mode() : false); wxItemAttr attr(dark_mode() ? m_color_highlight_default : m_color_label_default, m_color_window_default, m_normal_font); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 1dfa0eabb6..6a945c061a 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -433,7 +433,7 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty [type, item](wxCommandEvent&) { obj_list()->load_generic_subobject(item, type); }, "", menu); } - if (wxGetApp().get_mode() == comExpert && type != ModelVolumeType::INVALID) { + if (wxGetApp().get_mode() == comExpert) { sub_menu->AppendSeparator(); append_menu_item(sub_menu, wxID_ANY, _L("Gallery"), "", [type](wxCommandEvent&) { obj_list()->load_subobject(type, true); }, "", menu); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 7f31554350..5927cc302d 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1358,6 +1358,11 @@ bool ObjectList::is_instance_or_object_selected() void ObjectList::load_subobject(ModelVolumeType type, bool from_galery/* = false*/) { + if (type == ModelVolumeType::INVALID && from_galery) { + load_shape_object_from_gallery(); + return; + } + wxDataViewItem item = GetSelection(); // we can add volumes for Object or Instance if (!item || !(m_objects_model->GetItemType(item)&(itObject|itInstance))) @@ -1569,6 +1574,39 @@ void ObjectList::load_shape_object(const std::string& type_name) #endif // ENABLE_PROJECT_DIRTY_STATE } +void ObjectList::load_shape_object_from_gallery() +{ + if (wxGetApp().plater()->canvas3D()->get_selection().get_object_idx() != -1) + return;// Add nothing if something is selected on 3DScene + + wxArrayString input_files; + GalleryDialog gallery_dlg(this); + if (gallery_dlg.ShowModal() == wxID_CANCEL) + return; + gallery_dlg.get_input_files(input_files); + if (input_files.IsEmpty()) + return; + + std::vector paths; + for (const auto& file : input_files) + paths.push_back(into_path(file)); + + assert(!paths.empty()); + wxString snapshot_label = (paths.size() == 1 ? _L("Add Shape") : _L("Add Shapes")) + ": " + + wxString::FromUTF8(paths.front().filename().string().c_str()); + for (size_t i = 1; i < paths.size(); ++i) + snapshot_label += ", " + wxString::FromUTF8(paths[i].filename().string().c_str()); + + take_snapshot(snapshot_label); +#if ENABLE_PROJECT_DIRTY_STATE + std::vector res = wxGetApp().plater()->load_files(paths, true, false); + if (!res.empty()) + wxGetApp().mainframe->update_title(); +#else + load_files(paths, true, false); +#endif // ENABLE_PROJECT_DIRTY_STATE +} + void ObjectList::load_mesh_object(const TriangleMesh &mesh, const wxString &name, bool center) { // Add mesh to model as a new object diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 3943295541..086c25902d 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -243,6 +243,7 @@ public: void load_part(ModelObject* model_object, std::vector &added_volumes, ModelVolumeType type, bool from_galery = false); void load_generic_subobject(const std::string& type_name, const ModelVolumeType type); void load_shape_object(const std::string &type_name); + void load_shape_object_from_gallery(); void load_mesh_object(const TriangleMesh &mesh, const wxString &name, bool center = true); void del_object(const int obj_idx); void del_subobject_item(wxDataViewItem& item);