diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 0211f38d5..8b07741ed 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -963,24 +963,35 @@ void MenuFactory::append_menu_items_mirror(wxMenu* menu) []() { return plater()->can_mirror(); }, m_parent); } -void MenuFactory::append_menu_item_edit_text(wxMenu *menu) { +void MenuFactory::append_menu_item_edit_text(wxMenu *menu) +{ wxString name = _L("Edit text"); + + auto can_edit_text = []() { + const auto& sel = plater()->get_selection(); + if (sel.volumes_count() != 1) return false; + auto cid = sel.get_volume(*sel.get_volume_idxs().begin()); + const ModelVolume* vol = plater()->canvas3D()->get_model() + ->objects[cid->object_idx()]->volumes[cid->volume_idx()]; + return vol->text_configuration.has_value(); + }; + + if (menu == &m_object_menu) { + auto menu_item_id = menu->FindItem(name); + if (menu_item_id != wxNOT_FOUND) + menu->Destroy(menu_item_id); + if (!can_edit_text()) + return; + } + wxString description = _L("Ability to change text, font, size, ..."); std::string icon = ""; append_menu_item( menu, wxID_ANY, name, description, - [](wxCommandEvent &) { + [can_edit_text](wxCommandEvent &) { plater()->canvas3D()->get_gizmos_manager().open_gizmo(GLGizmosManager::Emboss); }, - icon, nullptr, - []() { - const auto& sel = plater()->get_selection(); - if (sel.volumes_count() != 1) return false; - auto cid = sel.get_volume(*sel.get_volume_idxs().begin()); - const ModelVolume *vol = plater()->canvas3D()->get_model() - ->objects[cid->object_idx()]->volumes[cid->volume_idx()]; - return vol->text_configuration.has_value(); - }, m_parent); + icon, nullptr, can_edit_text, m_parent); } MenuFactory::MenuFactory() @@ -1139,6 +1150,7 @@ wxMenu* MenuFactory::object_menu() append_menu_item_change_extruder(&m_object_menu); update_menu_items_instance_manipulation(mtObjectFFF); append_menu_item_invalidate_cut_info(&m_object_menu); + append_menu_item_edit_text(&m_object_menu); return &m_object_menu; } @@ -1149,6 +1161,7 @@ wxMenu* MenuFactory::sla_object_menu() append_menu_item_settings(&m_sla_object_menu); update_menu_items_instance_manipulation(mtObjectSLA); append_menu_item_invalidate_cut_info(&m_sla_object_menu); + append_menu_item_edit_text(&m_sla_object_menu); return &m_sla_object_menu; } diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 4953de11c..8d63c2b5b 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -683,6 +683,10 @@ void ObjectList::update_name_in_list(int obj_idx, int vol_idx) const return; m_objects_model->SetName(new_name, item); + + // if object has just one volume, rename object too + if (ModelObject* obj = object(obj_idx); obj->volumes.size() == 1) + obj->name = obj->volumes.front()->name; } void ObjectList::selection_changed()