MCPcopy Create free account
hub / github.com/MrNeRF/LichtFeld-Studio / register_class_api

Function register_class_api

src/python/lfs/py_ui.cpp:5751–5805  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5749 }
5750
5751 void register_class_api(nb::module_& m) {
5752 m.def(
5753 "register_class",
5754 [](nb::object cls) {
5755 nb::module_ builtins = nb::module_::import_("builtins");
5756 auto issubclass = builtins.attr("issubclass");
5757
5758 nb::object Panel_type = nb::module_::import_("lichtfeld").attr("ui").attr("Panel");
5759 nb::module_ types_module = nb::module_::import_("lfs_plugins.types");
5760 nb::object Operator_type = types_module.attr("Operator");
5761 const nb::object Menu_type = types_module.attr("Menu");
5762
5763 if (nb::cast<bool>(issubclass(cls, Panel_type))) {
5764 PyPanelRegistry::instance().register_panel(cls);
5765 } else if (nb::cast<bool>(issubclass(cls, Operator_type))) {
5766 register_python_operator_to_cpp(cls);
5767 std::string idname = get_class_id(cls);
5768 std::string label = idname;
5769 if (nb::hasattr(cls, "label")) {
5770 label = nb::cast<std::string>(cls.attr("label"));
5771 }
5772 register_python_property_group("operator." + idname, label, cls);
5773 } else if (nb::cast<bool>(issubclass(cls, Menu_type))) {
5774 PyMenuRegistry::instance().register_menu(cls);
5775 } else {
5776 throw nb::type_error(
5777 "register_class: cls must be a subclass of Panel, Operator, or Menu");
5778 }
5779 },
5780 nb::arg("cls"), "Register a class (Panel, Operator, or Menu)");
5781
5782 m.def(
5783 "unregister_class",
5784 [](nb::object cls) {
5785 nb::module_ builtins = nb::module_::import_("builtins");
5786 auto issubclass = builtins.attr("issubclass");
5787
5788 nb::object Panel_type = nb::module_::import_("lichtfeld").attr("ui").attr("Panel");
5789 nb::module_ types_module = nb::module_::import_("lfs_plugins.types");
5790 nb::object Operator_type = types_module.attr("Operator");
5791 const nb::object Menu_type = types_module.attr("Menu");
5792
5793 if (nb::cast<bool>(issubclass(cls, Panel_type))) {
5794 PyPanelRegistry::instance().unregister_panel(cls);
5795 } else if (nb::cast<bool>(issubclass(cls, Operator_type))) {
5796 std::string idname = get_class_id(cls);
5797 vis::op::operators().unregisterOperator(idname);
5798 vis::op::propertySchemas().unregisterSchema(idname);
5799 remove_python_operator_instance(idname);
5800 } else if (nb::cast<bool>(issubclass(cls, Menu_type))) {
5801 PyMenuRegistry::instance().unregister_menu(cls);
5802 }
5803 },
5804 nb::arg("cls"), "Unregister a class (Panel, Operator, or Menu)");
5805 }
5806
5807} // namespace lfs::python

Callers 1

NB_MODULEFunction · 0.85

Calls 11

instanceFunction · 0.85
register_menuMethod · 0.80
unregisterOperatorMethod · 0.80
unregisterSchemaMethod · 0.80
unregister_menuMethod · 0.80
get_class_idFunction · 0.70
register_panelMethod · 0.45
unregister_panelMethod · 0.45

Tested by

no test coverage detected