1+ #include " UnrealEnginePythonPrivatePCH.h"
2+
3+ #if WITH_EDITOR
4+
5+ #include " Runtime/Slate/Public/Framework/Commands/UIAction.h"
6+
7+ static PyObject *py_ue_fmenu_builder_begin_section (ue_PyFMenuBuilder *self, PyObject * args) {
8+ char *name;
9+ char *text;
10+ if (!PyArg_ParseTuple (args, " ss:begin_section" , &name, &text))
11+ return NULL ;
12+
13+ self->menu_builder ->BeginSection (name, FText::FromString (UTF8_TO_TCHAR (text)));
14+
15+ Py_INCREF (Py_None);
16+ return Py_None;
17+ }
18+
19+ static PyObject *py_ue_fmenu_builder_end_section (ue_PyFMenuBuilder *self, PyObject * args) {
20+ self->menu_builder ->EndSection ();
21+
22+ Py_INCREF (Py_None);
23+ return Py_None;
24+ }
25+
26+ static PyObject *py_ue_fmenu_builder_make_widget (ue_PyFMenuBuilder *self, PyObject * args) {
27+ ue_PySWidget *ret = (ue_PySWidget *)PyObject_New (ue_PySWidget, &ue_PySWidgetType);
28+ ret->s_widget_owned = self->menu_builder ->MakeWidget ();
29+ ret->s_widget = &ret->s_widget_owned .Get ();
30+ return (PyObject *)ret;
31+ }
32+
33+ static PyObject *py_ue_fmenu_builder_add_menu_entry (ue_PyFMenuBuilder *self, PyObject * args) {
34+ char *label;
35+ char *tooltip;
36+ PyObject *py_callable;
37+ PyObject *py_obj = nullptr ;
38+ if (!PyArg_ParseTuple (args, " ssO|O:add_menu_entry" , &label, &tooltip, &py_callable, &py_obj))
39+ return NULL ;
40+
41+ if (!PyCallable_Check (py_callable)) {
42+ return PyErr_Format (PyExc_Exception, " argument is not callable" );
43+ }
44+
45+ FExecuteAction handler;
46+ UPythonSlateDelegate *py_delegate = NewObject<UPythonSlateDelegate>();
47+ py_delegate->SetPyCallable (py_callable);
48+ py_delegate->AddToRoot ();
49+
50+ if (py_obj) {
51+ handler.BindUObject (py_delegate, &UPythonSlateDelegate::ExecuteAction, py_obj);
52+ }
53+ else {
54+ handler.BindUObject (py_delegate, &UPythonSlateDelegate::SimpleExecuteAction);
55+ }
56+
57+ self->menu_builder ->AddMenuEntry (FText::FromString (UTF8_TO_TCHAR (label)), FText::FromString (UTF8_TO_TCHAR (tooltip)), FSlateIcon (), FUIAction (handler));
58+
59+ Py_INCREF (Py_None);
60+ return Py_None;
61+ }
62+
63+ static PyMethodDef ue_PyFMenuBuilder_methods[] = {
64+ { " begin_section" , (PyCFunction)py_ue_fmenu_builder_begin_section, METH_VARARGS, " " },
65+ { " end_section" , (PyCFunction)py_ue_fmenu_builder_end_section, METH_VARARGS, " " },
66+ { " make_widget" , (PyCFunction)py_ue_fmenu_builder_make_widget, METH_VARARGS, " " },
67+ { " add_menu_entry" , (PyCFunction)py_ue_fmenu_builder_add_menu_entry, METH_VARARGS, " " },
68+ { NULL } /* Sentinel */
69+ };
70+
71+
72+ static PyObject *ue_PyFMenuBuilder_str (ue_PyFMenuBuilder *self)
73+ {
74+ return PyUnicode_FromFormat (" <unreal_engine.FMenuBuilder '%p'}>" ,
75+ &self->menu_builder );
76+ }
77+
78+ static void ue_py_fmenu_builder_dealloc (ue_PyFMenuBuilder *self) {
79+ delete (self->menu_builder );
80+ #if PY_MAJOR_VERSION < 3
81+ self->ob_type ->tp_free ((PyObject*)self);
82+ #else
83+ Py_TYPE (self)->tp_free ((PyObject*)self);
84+ #endif
85+ }
86+
87+ static PyTypeObject ue_PyFMenuBuilderType = {
88+ PyVarObject_HEAD_INIT (NULL , 0 )
89+ " unreal_engine.FMenuBuilder" , /* tp_name */
90+ sizeof (ue_PyFMenuBuilder), /* tp_basicsize */
91+ 0 , /* tp_itemsize */
92+ (destructor)ue_py_fmenu_builder_dealloc, /* tp_dealloc */
93+ 0 , /* tp_print */
94+ 0 , /* tp_getattr */
95+ 0 , /* tp_setattr */
96+ 0 , /* tp_reserved */
97+ 0 , /* tp_repr */
98+ 0 , /* tp_as_number */
99+ 0 , /* tp_as_sequence */
100+ 0 , /* tp_as_mapping */
101+ 0 , /* tp_hash */
102+ 0 , /* tp_call */
103+ (reprfunc)ue_PyFMenuBuilder_str, /* tp_str */
104+ 0 , /* tp_getattro */
105+ 0 , /* tp_setattro */
106+ 0 , /* tp_as_buffer */
107+ Py_TPFLAGS_DEFAULT, /* tp_flags */
108+ " Unreal Engine FMenuBuilder" , /* tp_doc */
109+ 0 , /* tp_traverse */
110+ 0 , /* tp_clear */
111+ 0 , /* tp_richcompare */
112+ 0 , /* tp_weaklistoffset */
113+ 0 , /* tp_iter */
114+ 0 , /* tp_iternext */
115+ ue_PyFMenuBuilder_methods, /* tp_methods */
116+ };
117+
118+ static int ue_py_fmenu_builder_init (ue_PyFMenuBuilder *self, PyObject *args, PyObject *kwargs) {
119+ self->menu_builder = new FMenuBuilder (true , nullptr );
120+ return 0 ;
121+ }
122+
123+
124+ void ue_python_init_fmenu_builder (PyObject *ue_module) {
125+ ue_PyFMenuBuilderType.tp_new = PyType_GenericNew;
126+
127+ ue_PyFMenuBuilderType.tp_init = (initproc)ue_py_fmenu_builder_init;
128+
129+ if (PyType_Ready (&ue_PyFMenuBuilderType) < 0 )
130+ return ;
131+
132+ Py_INCREF (&ue_PyFMenuBuilderType);
133+ PyModule_AddObject (ue_module, " FMenuBuilder" , (PyObject *)&ue_PyFMenuBuilderType);
134+ }
135+
136+ #endif
0 commit comments