From 6807615c75dc861dd1578df7ab948b48720bb3ee Mon Sep 17 00:00:00 2001 From: Filip Sykala - NTB T15p Date: Wed, 15 Mar 2023 14:20:04 +0100 Subject: [PATCH] remove duplicit codes --- src/slic3r/GUI/GUI_Factories.cpp | 91 ++++++++++++-------------------- 1 file changed, 35 insertions(+), 56 deletions(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index daab5fafc9..8801bd397f 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -499,76 +499,55 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty return sub_menu; } -void MenuFactory::append_menu_item_add_text(wxMenu* menu, ModelVolumeType type, bool is_submenu_item/* = true*/) -{ - auto add_text = [type](wxCommandEvent& evt) { - GLCanvas3D* canvas = plater()->canvas3D(); - GLGizmosManager& mng = canvas->get_gizmos_manager(); - GLGizmoBase* gizmo = mng.get_gizmo(GLGizmosManager::Emboss); - GLGizmoEmboss* emboss = dynamic_cast(gizmo); - assert(emboss != nullptr); - if (emboss == nullptr) return; - +static void append_menu_itemm_add_(const wxString& name, GLGizmosManager::EType gizmo_type, wxMenu *menu, ModelVolumeType type, bool is_submenu_item) { + auto add_ = [type, gizmo_type](const wxCommandEvent & /*unnamed*/) { + const GLCanvas3D *canvas = plater()->canvas3D(); + const GLGizmosManager &mng = canvas->get_gizmos_manager(); + GLGizmoBase *gizmo_base = mng.get_gizmo(gizmo_type); + ModelVolumeType volume_type = type; // no selected object means create new object if (volume_type == ModelVolumeType::INVALID) volume_type = ModelVolumeType::MODEL_PART; auto screen_position = canvas->get_popup_menu_position(); - if (screen_position.has_value()) { - emboss->create_volume(volume_type, *screen_position); - } else { - emboss->create_volume(volume_type); - } + if (gizmo_type == GLGizmosManager::Emboss) { + auto emboss = dynamic_cast(gizmo_base); + assert(emboss != nullptr); + if (emboss == nullptr) return; + if (screen_position.has_value()) { + emboss->create_volume(volume_type, *screen_position); + } else { + emboss->create_volume(volume_type); + } + } else if (gizmo_type == GLGizmosManager::Svg) { + auto svg = dynamic_cast(gizmo_base); + assert(svg != nullptr); + if (svg == nullptr) return; + if (screen_position.has_value()) { + svg->create_volume(volume_type, *screen_position); + } else { + svg->create_volume(volume_type); + } + } }; - if ( type == ModelVolumeType::MODEL_PART - || type == ModelVolumeType::NEGATIVE_VOLUME - || type == ModelVolumeType::PARAMETER_MODIFIER - || type == ModelVolumeType::INVALID // cannot use gizmo without selected object - ) { - wxString item_name = is_submenu_item ? "" : _(ADD_VOLUME_MENU_ITEMS[int(type)].first) + ": "; - item_name += _L("Text"); + if (type == ModelVolumeType::MODEL_PART || type == ModelVolumeType::NEGATIVE_VOLUME || type == ModelVolumeType::PARAMETER_MODIFIER || + type == ModelVolumeType::INVALID // cannot use gizmo without selected object + ) { + wxString item_name = wxString(is_submenu_item ? "" : _(ADD_VOLUME_MENU_ITEMS[int(type)].first) + ": ") + name; menu->AppendSeparator(); const std::string icon_name = is_submenu_item ? "" : ADD_VOLUME_MENU_ITEMS[int(type)].second; - append_menu_item(menu, wxID_ANY, item_name, "", add_text, icon_name, menu); + append_menu_item(menu, wxID_ANY, item_name, "", add_, icon_name, menu); } } -void MenuFactory::append_menu_item_add_svg(wxMenu *menu, ModelVolumeType type, bool is_submenu_item /* = true*/) -{ - auto open_svg = [type](wxCommandEvent &evt) { - GLCanvas3D* canvas = plater()->canvas3D(); - GLGizmosManager& mng = canvas->get_gizmos_manager(); - GLGizmoBase* gizmo = mng.get_gizmo(GLGizmosManager::Svg); - GLGizmoSVG* svg = dynamic_cast(gizmo); - assert(svg != nullptr); - if (svg == nullptr) return; - - ModelVolumeType volume_type = type; - // no selected object means create new object - if (volume_type == ModelVolumeType::INVALID) - volume_type = ModelVolumeType::MODEL_PART; +void MenuFactory::append_menu_item_add_text(wxMenu* menu, ModelVolumeType type, bool is_submenu_item/* = true*/){ + append_menu_itemm_add_(_L("Text"), GLGizmosManager::Emboss, menu, type, is_submenu_item); +} - auto screen_position = canvas->get_popup_menu_position(); - if (screen_position.has_value()) { - svg->create_volume(volume_type, *screen_position); - } else { - svg->create_volume(volume_type); - } - }; - - if ( type == ModelVolumeType::MODEL_PART - || type == ModelVolumeType::NEGATIVE_VOLUME - || type == ModelVolumeType::PARAMETER_MODIFIER - || type == ModelVolumeType::INVALID // cannot use gizmo without selected object - ) { - wxString item_name = is_submenu_item ? "" : _(ADD_VOLUME_MENU_ITEMS[int(type)].first) + ": "; - item_name += _L("SVG"); - menu->AppendSeparator(); - const std::string icon_name = is_submenu_item ? "" : ADD_VOLUME_MENU_ITEMS[int(type)].second; - append_menu_item(menu, wxID_ANY, item_name, "", open_svg, icon_name, menu); - } +void MenuFactory::append_menu_item_add_svg(wxMenu *menu, ModelVolumeType type, bool is_submenu_item /* = true*/){ + append_menu_itemm_add_(_L("Svg"), GLGizmosManager::Svg, menu, type, is_submenu_item); } void MenuFactory::append_menu_items_add_volume(MenuType menu_type)