1 | #ifdef NANOGUI_PYTHON |
2 | |
3 | #include "python.h" |
4 | |
5 | DECLARE_WIDGET(Widget); |
6 | DECLARE_SCREEN(Screen); |
7 | DECLARE_WIDGET(Window); |
8 | |
9 | void register_widget(py::module &m) { |
10 | py::class_<Widget, ref<Widget>, PyWidget>(m, "Widget" , D(Widget)) |
11 | .def(py::init<Widget *>(), D(Widget, Widget)) |
12 | .def("parent" , (Widget *(Widget::*)(void)) &Widget::parent, D(Widget, parent)) |
13 | .def("setParent" , &Widget::setParent, D(Widget, setParent)) |
14 | .def("layout" , (Layout *(Widget::*)(void)) &Widget::layout, D(Widget, layout)) |
15 | .def("setLayout" , &Widget::setLayout, D(Widget, setLayout)) |
16 | .def("theme" , (Theme *(Widget::*)(void)) &Widget::theme, D(Widget, theme)) |
17 | .def("setTheme" , &Widget::setTheme, D(Widget, setTheme)) |
18 | .def("position" , &Widget::position, D(Widget, position)) |
19 | .def("setPosition" , &Widget::setPosition, D(Widget, setPosition)) |
20 | .def("absolutePosition" , &Widget::absolutePosition, D(Widget, absolutePosition)) |
21 | .def("size" , &Widget::size, D(Widget, size)) |
22 | .def("setSize" , &Widget::setSize, D(Widget, setSize)) |
23 | .def("width" , &Widget::width, D(Widget, width)) |
24 | .def("setWidth" , &Widget::setWidth, D(Widget, setWidth)) |
25 | .def("height" , &Widget::height, D(Widget, height)) |
26 | .def("setHeight" , &Widget::setHeight, D(Widget, setHeight)) |
27 | .def("fixedSize" , &Widget::fixedSize, D(Widget, fixedSize)) |
28 | .def("setFixedSize" , &Widget::setFixedSize, D(Widget, setFixedSize)) |
29 | .def("fixedWidth" , &Widget::fixedWidth, D(Widget, fixedWidth)) |
30 | .def("setFixedWidth" , &Widget::setFixedWidth, D(Widget, setFixedWidth)) |
31 | .def("fixedHeight" , &Widget::fixedHeight, D(Widget, fixedHeight)) |
32 | .def("setFixedHeight" , &Widget::setFixedHeight, D(Widget, setFixedHeight)) |
33 | .def("visible" , &Widget::visible, D(Widget, visible)) |
34 | .def("setVisible" , &Widget::setVisible, D(Widget, setVisible)) |
35 | .def("visibleRecursive" , &Widget::visibleRecursive, D(Widget, visibleRecursive)) |
36 | .def("children" , (std::vector<Widget *>&(Widget::*)(void)) &Widget::children, |
37 | D(Widget, children), py::return_value_policy::reference) |
38 | .def("addChild" , (void (Widget::*) (int, Widget *)) &Widget::addChild, D(Widget, addChild)) |
39 | .def("addChild" , (void (Widget::*) (Widget *)) &Widget::addChild, D(Widget, addChild, 2)) |
40 | .def("childCount" , &Widget::childCount, D(Widget, childCount)) |
41 | .def("__len__" , &Widget::childCount, D(Widget, childCount)) |
42 | .def("__iter__" , [](const Widget &w) { |
43 | return py::make_iterator(w.children().begin(), w.children().end()); |
44 | }, py::keep_alive<0, 1>()) |
45 | .def("childIndex" , &Widget::childIndex, D(Widget, childIndex)) |
46 | .def("__getitem__" , (Widget* (Widget::*)(int)) &Widget::childAt, D(Widget, childAt)) |
47 | .def("removeChild" , (void(Widget::*)(int)) &Widget::removeChild, D(Widget, removeChild)) |
48 | .def("removeChild" , (void(Widget::*)(const Widget *)) &Widget::removeChild, D(Widget, removeChild, 2)) |
49 | .def("__delitem__" , (void(Widget::*)(int)) &Widget::removeChild, D(Widget, removeChild, 2)) |
50 | .def("window" , &Widget::window, D(Widget, window)) |
51 | .def("setId" , &Widget::setId, D(Widget, setId)) |
52 | .def("id" , &Widget::id, D(Widget, id)) |
53 | .def("enabled" , &Widget::enabled, D(Widget, enabled)) |
54 | .def("setEnabled" , &Widget::setEnabled, D(Widget, setEnabled)) |
55 | .def("focused" , &Widget::focused, D(Widget, focused)) |
56 | .def("setFocused" , &Widget::setFocused, D(Widget, setFocused)) |
57 | .def("requestFocus" , &Widget::requestFocus, D(Widget, requestFocus)) |
58 | .def("tooltip" , &Widget::tooltip, D(Widget, tooltip)) |
59 | .def("setTooltip" , &Widget::setTooltip, D(Widget, setTooltip)) |
60 | .def("fontSize" , &Widget::fontSize, D(Widget, fontSize)) |
61 | .def("setFontSize" , &Widget::setFontSize, D(Widget, setFontSize)) |
62 | .def("hasFontSize" , &Widget::hasFontSize, D(Widget, hasFontSize)) |
63 | .def("cursor" , &Widget::cursor, D(Widget, cursor)) |
64 | .def("setCursor" , &Widget::setCursor, D(Widget, setCursor)) |
65 | .def("findWidget" , &Widget::findWidget, D(Widget, findWidget)) |
66 | .def("contains" , &Widget::contains, D(Widget, contains)) |
67 | .def("mouseButtonEvent" , &Widget::mouseButtonEvent, py::arg("p" ), py::arg("button" ), |
68 | py::arg("down" ), py::arg("modifiers" ), D(Widget, mouseButtonEvent)) |
69 | .def("mouseMotionEvent" , &Widget::mouseMotionEvent, py::arg("p" ), py::arg("rel" ), |
70 | py::arg("button" ), py::arg("modifiers" ), D(Widget, mouseMotionEvent)) |
71 | .def("mouseDragEvent" , &Widget::mouseDragEvent, py::arg("p" ), py::arg("rel" ), |
72 | py::arg("button" ), py::arg("modifiers" ), D(Widget, mouseDragEvent)) |
73 | .def("mouseEnterEvent" , &Widget::mouseEnterEvent, py::arg("p" ), py::arg("enter" ), |
74 | D(Widget, mouseEnterEvent)) |
75 | .def("scrollEvent" , &Widget::scrollEvent, py::arg("p" ), py::arg("rel" ), |
76 | D(Widget, scrollEvent)) |
77 | .def("focusEvent" , &Widget::focusEvent, py::arg("focused" ), D(Widget, focusEvent)) |
78 | .def("keyboardEvent" , &Widget::keyboardEvent, py::arg("key" ), py::arg("scancode" ), |
79 | py::arg("action" ), py::arg("modifiers" ), D(Widget, keyboardEvent)) |
80 | .def("keyboardCharacterEvent" , &Widget::keyboardCharacterEvent, |
81 | D(Widget, keyboardCharacterEvent)) |
82 | .def("preferredSize" , &Widget::preferredSize, D(Widget, preferredSize)) |
83 | .def("performLayout" , &Widget::performLayout, D(Widget, performLayout)) |
84 | .def("draw" , &Widget::draw, D(Widget, draw)); |
85 | |
86 | py::class_<Window, Widget, ref<Window>, PyWindow>(m, "Window" , D(Window)) |
87 | .def(py::init<Widget *, const std::string>(), py::arg("parent" ), |
88 | py::arg("title" ) = std::string("Untitled" ), D(Window, Window)) |
89 | .def("title" , &Window::title, D(Window, title)) |
90 | .def("setTitle" , &Window::setTitle, D(Window, setTitle)) |
91 | .def("modal" , &Window::modal, D(Window, modal)) |
92 | .def("setModal" , &Window::setModal, D(Window, setModal)) |
93 | .def("dispose" , &Window::dispose, D(Window, dispose)) |
94 | .def("buttonPanel" , &Window::buttonPanel, D(Window, buttonPanel)) |
95 | .def("center" , &Window::center, D(Window, center)); |
96 | |
97 | py::class_<Screen, Widget, ref<Screen>, PyScreen>(m, "Screen" , D(Screen)) |
98 | .def(py::init<const Vector2i &, const std::string &, bool, bool, int, int, int, int, int, unsigned int, unsigned int>(), |
99 | py::arg("size" ), py::arg("caption" ), py::arg("resizable" ) = true, py::arg("fullscreen" ) = false, |
100 | py::arg("colorBits" ) = 8, py::arg("alphaBits" ) = 8, py::arg("depthBits" ) = 24, py::arg("stencilBits" ) = 8, |
101 | py::arg("nSamples" ) = 0, py::arg("glMajor" ) = 3, py::arg("glMinor" ) = 3, D(Screen, Screen)) |
102 | .def("caption" , &Screen::caption, D(Screen, caption)) |
103 | .def("setCaption" , &Screen::setCaption, D(Screen, setCaption)) |
104 | .def("background" , &Screen::background, D(Screen, background)) |
105 | .def("setBackground" , &Screen::setBackground, D(Screen, setBackground)) |
106 | .def("setVisible" , &Screen::setVisible, D(Screen, setVisible)) |
107 | .def("setSize" , &Screen::setSize, D(Screen, setSize)) |
108 | .def("performLayout" , (void(Screen::*)(void)) &Screen::performLayout, D(Screen, performLayout)) |
109 | .def("drawAll" , &Screen::drawAll, D(Screen, drawAll)) |
110 | .def("drawContents" , &Screen::drawContents, D(Screen, drawContents)) |
111 | .def("resizeEvent" , &Screen::resizeEvent, py::arg("size" ), D(Screen, resizeEvent)) |
112 | .def("resizeCallback" , &Screen::resizeCallback) |
113 | .def("setResizeCallback" , &Screen::setResizeCallback) |
114 | .def("dropEvent" , &Screen::dropEvent, D(Screen, dropEvent)) |
115 | .def("mousePos" , &Screen::mousePos, D(Screen, mousePos)) |
116 | .def("pixelRatio" , &Screen::pixelRatio, D(Screen, pixelRatio)) |
117 | .def("glfwWindow" , &Screen::glfwWindow, D(Screen, glfwWindow), |
118 | py::return_value_policy::reference) |
119 | .def("nvgContext" , &Screen::nvgContext, D(Screen, nvgContext), |
120 | py::return_value_policy::reference); |
121 | } |
122 | #endif |
123 | |