library/forms/swig/mforms.i (1,005 lines of code) (raw):

%module mforms %include "stdint.i" #pragma SWIG nowarn=401,402,509 %{ #include <boost/signals2/signal.hpp> #include <sstream> #include <frameobject.h> #include <base/drawing.h> #include <base/log.h> #include <mforms/view.h> #include <mforms/form.h> #include <mforms/button.h> #include <mforms/checkbox.h> #include <mforms/textentry.h> #include <mforms/textbox.h> #include <mforms/label.h> #include <mforms/selector.h> #include <mforms/listbox.h> #include <mforms/tabview.h> #include <mforms/box.h> #include <mforms/panel.h> #include <mforms/filechooser.h> #include <mforms/radiobutton.h> #include <mforms/imagebox.h> #include <mforms/progressbar.h> #include <mforms/table.h> #include <mforms/scrollpanel.h> #include <mforms/wizard.h> #include <mforms/drawbox.h> #include <mforms/tabswitcher.h> #include <mforms/app.h> #include <mforms/appview.h> #include <mforms/utilities.h> #include <mforms/uistyle.h> #include <mforms/appview.h> #include <mforms/sectionbox.h> #include <mforms/widgets.h> #include <mforms/menu.h> #include <mforms/splitter.h> #include <mforms/popup.h> #include <mforms/code_editor.h> #include <mforms/menubar.h> #include <mforms/toolbar.h> #include <mforms/task_sidebar.h> #include <mforms/hypertext.h> #include <mforms/popover.h> #include <mforms/fs_object_selector.h> #include <mforms/simpleform.h> #include <mforms/treeview.h> #include <mforms/dockingpoint.h> #include "mforms_grt.h" #include "mforms_drawbox.h" using namespace boost::placeholders; DEFAULT_LOG_DOMAIN("pymforms") /// begin python specific stuff struct PyObjectRef { PyObject *object; PyObjectRef(PyObject *obj) : object(obj) { Py_XINCREF(obj); } PyObjectRef(const PyObjectRef &obj) : object(obj.object) { Py_XINCREF(object); } ~PyObjectRef() { WillEnterPython gil; Py_XDECREF(object); } operator PyObject*() { return object; } PyObjectRef &operator =(const PyObjectRef &other) { WillEnterPython gil; if (other.object != object) { if (object) Py_XDECREF(object); object = other.object; Py_XINCREF(object); } return *this; } }; static std::string format_string_list(PyObject *list) { std::string result; if(!list) { return result; } int count = PyList_Size(list); for (int index = 0; index < count; ++index) { PyObject *item = PyList_GetItem(list, index); const char *text = PyUnicode_AsUTF8(item); if(text) { result += text; } } return result; } static void show_python_exception() { if (!PyErr_Occurred()) return; PyObject *type, *value, *traceback; PyObject *pythonErrorDescryption, *moduleName, *pythonModule, *formatExceptionFunction; PyErr_Fetch(&type, &value, &traceback); pythonErrorDescryption = PyObject_Str(value); std::string errorDescription; const char *description = PyUnicode_AsUTF8(pythonErrorDescryption); if(description) { errorDescription = description; } std::string result; /* See if we can get a full traceback */ moduleName = PyString_FromString("traceback"); pythonModule = PyImport_Import(moduleName); Py_DECREF(moduleName); if (pythonModule) { formatExceptionFunction = PyObject_GetAttrString(pythonModule, "format_exception"); if (formatExceptionFunction && PyCallable_Check(formatExceptionFunction)) { PyObject *formatExceptionFunctionResult; formatExceptionFunctionResult = PyObject_CallFunctionObjArgs(formatExceptionFunction, type, value, traceback, NULL); result = format_string_list(formatExceptionFunctionResult); } } logError("Unhandled exception in Python code: \n%s", result.c_str()); mforms::Utilities::show_error("Error", std::string("Unhandled exception: ").append(errorDescription).append("\n\nCheck the log for more details."), "OK", "", ""); } static void call_void_pycallable(PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("()"); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static void *call_ignoreret_voidptr_pycallable(PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("()"); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); return NULL; } static void call_void_string_pycallable(const std::string &s, PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("(s)", s.c_str()); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static void call_void_int_pycallable(int arg, PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("(i)", arg); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static void call_void_menuitem_pycallable(mforms::MenuItem *arg, PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("(O)", togrt(arg, "MenuItem")); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static void call_void_int_int_pycallable(int row, int column, PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("(ii)", row, column); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static void call_void_int_int_int_pycallable(int a, int b, int c, PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("(iii)", a, b, c); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static void call_void_node_int_pycallable(mforms::TreeNodeRef node, int column, PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *obj; if (node) obj = SWIG_NewPointerObj((new mforms::TreeNodeRef(node)), SWIGTYPE_p_mforms__TreeNodeRef, SWIG_POINTER_OWN | 0 ); else { obj = Py_None; Py_INCREF(obj); } PyObject *args = Py_BuildValue("(Oi)", obj, column); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static bool call_bool_pycallable(PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("()"); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); return false; } else { bool r = ret == Py_True; Py_DECREF(ret); return r; } } static bool call_bool_int_pycallable(int i, PyObjectRef &callable) { PyObject *ret; WillEnterPython lock; PyObject *args = Py_BuildValue("(i)", i); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); return false; } else { bool r = ret == Py_True; Py_DECREF(ret); return r; } } /* static void call_cell_edited_pycallable(int row, int col, const std::string &value, PyObjectRef &callable) { WillEnterPython lock; PyObject *ret; PyObject *args = Py_BuildValue("(iis)", row, col, value.c_str()); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } */ static void call_cell_node_edited_pycallable(mforms::TreeNodeRef node, int col, const std::string &value, PyObjectRef &callable) { WillEnterPython lock; PyObject *ret; PyObject *obj; if (node) obj = SWIG_NewPointerObj((new mforms::TreeNodeRef(node)), SWIGTYPE_p_mforms__TreeNodeRef, SWIG_POINTER_OWN | 0 ); else { obj = Py_None; Py_INCREF(obj); } PyObject *args = Py_BuildValue("(Ois)", obj, col, value.c_str()); ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static void call_toolbaritem_pycallable(const mforms::ToolBarItem *i, PyObjectRef &callable) { WillEnterPython lock; PyObject* tbi = SWIG_NewPointerObj(SWIG_as_voidptr(i), SWIGTYPE_p_mforms__ToolBarItem, SWIG_POINTER_DISOWN | 0 ); PyObject *args = PyTuple_Pack(1, tbi); PyObject *ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } static void call_void_entryaction_pycallable(mforms::TextEntryAction action, PyObjectRef &callable) { WillEnterPython lock; PyObject *args = Py_BuildValue("(i)", (int)action); PyObject *ret = PyObject_Call(callable, args, NULL); Py_DECREF(args); if (!ret) { show_python_exception(); PyErr_Print(); } else Py_DECREF(ret); } inline boost::function<void ()> pycall_void_fun(PyObject *callable) { return boost::bind(call_void_pycallable, PyObjectRef(callable)); } inline boost::function<void* ()> pycall_ignoreret_voidptr_fun(PyObject *callable) { return boost::bind(call_ignoreret_voidptr_pycallable, PyObjectRef(callable)); } inline boost::function<void (std::string)> pycall_void_string_fun(PyObject *callable) { return boost::bind(call_void_string_pycallable, _1, PyObjectRef(callable)); } inline boost::function<void (int)> pycall_void_int_fun(PyObject *callable) { return boost::bind(call_void_int_pycallable, _1, PyObjectRef(callable)); } inline boost::function<void (mforms::MenuItem*)> pycall_void_menuitem_fun(PyObject *callable) { return boost::bind(call_void_menuitem_pycallable, _1, PyObjectRef(callable)); } inline boost::function<void (int,int)> pycall_void_int_int_fun(PyObject *callable) { return boost::bind(call_void_int_int_pycallable, _1, _2, PyObjectRef(callable)); } inline boost::function<void (int, int,int)> pycall_void_int_int_int_fun(PyObject *callable) { return boost::bind(call_void_int_int_int_pycallable, _1, _2, _3, PyObjectRef(callable)); } inline boost::function<void (int, int, int, bool)> pycall_void_int_int_int_bool_fun(PyObject *callable) { return boost::bind(call_void_int_int_int_pycallable, _1, _2, _3, PyObjectRef(callable)); } inline boost::function<void (mforms::TreeNodeRef,int)> pycall_void_node_int_fun(PyObject *callable) { return boost::bind(call_void_node_int_pycallable, _1, _2, PyObjectRef(callable)); } inline boost::function<bool ()> pycall_bool_fun(PyObject *callable) { return boost::bind(call_bool_pycallable, PyObjectRef(callable)); } inline boost::function<bool (int)> pycall_bool_int_fun(PyObject *callable) { return boost::bind(call_bool_int_pycallable, _1, PyObjectRef(callable)); } inline boost::function<void (const mforms::ToolBarItem*)> pycall_void_toolbaritem_fun(PyObject *callable) { return boost::bind(call_toolbaritem_pycallable, _1, PyObjectRef(callable)); } inline boost::function<void (mforms::TextEntryAction)> pycall_void_entryaction_fun(PyObject *callable) { return boost::bind(call_void_entryaction_pycallable, _1, PyObjectRef(callable)); } /// end python specific stuff %} // Macros to define methods for adding Python callbacks as signal handlers #define SWIG_ADD_SIGNAL_VOID_CALLBACK(method, signal)\ signal_connection_wrapper add_##method(PyObject *callback) { return signal_connection_wrapper(signal->connect(pycall_void_fun(callback))); }\ void call_##method() { (*signal)(); } #define SWIG_ADD_SIGNAL_VOID_STRING_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_string_fun(callback)); }\ void call_##method(const char *s) { (*signal)(s ? s : ""); } #define BOOST_ADD_SIGNAL_VOID_STRING_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_string_fun(callback)); }\ void call_##method(const char *s) { (*(signal))(s ? s : ""); } #define SWIG_ADD_SIGNAL_VOID_INT_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_int_fun(callback)); }\ void call_##method(int i) { (*signal)(i); } #define SWIG_ADD_SIGNAL_VOID_MENUITEM_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_menuitem_fun(callback)); }\ void call_##method(mforms::MenuItem *item) { (*signal)(item); } #define SWIG_ADD_SIGNAL_VOID_INT_INT_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_int_int_fun(callback)); }\ void call_##method(int i, int j) { (*signal)(i, j); } #define SWIG_ADD_SIGNAL_VOID_INT_INT_INT_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_int_int_int_fun(callback)); }\ void call_##method(int i, int j, int k) { (*signal)(i, j, k); } #define SWIG_ADD_SIGNAL_VOID_INT_INT_INT_BOOL_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_int_int_int_bool_fun(callback)); }\ void call_##method(int i, int j, int k, bool l) { (*signal)(i, j, k, l); } #define SWIG_ADD_SIGNAL_VOID_NODE_INT_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_node_int_fun(callback)); }\ void call_##method(mforms::TreeNodeRef i, int j) { (*signal)(i, j); } #define SWIG_ADD_SIGNAL_VOID_TOOLBARITEM_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_toolbaritem_fun(callback)); } #define SWIG_ADD_SIGNAL_BOOL_INT_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_bool_int_fun(callback)); }\ bool call_##method(int i) { return *( (*signal)(i) ); } #define SWIG_ADD_SIGNAL_VOID_ENTRYACTION_CALLBACK(method, signal)\ void add_##method(PyObject *callback) { signal->connect(pycall_void_entryaction_fun(callback)); } #define SWIG_ADD_SET_BOOL_CALLBACK(method, setter)\ void method(PyObject *callback) { if (callback != Py_None) setter(pycall_bool_fun(callback)); else setter(boost::function<bool ()>()); } #if 0 %init %{ extern void init_mforms_bindings(); init_mforms_bindings(); %} #endif %exception { try { $action } catch (std::exception &exc) { logError("exception calling mforms method $name: %s\n", exc.what()); PyErr_Format(PyExc_SystemError, "Exception calling mforms method '$name': %s", exc.what()); SWIG_fail; } } %feature("ref") Object "$this->retain();" %feature("unref") Object "$this->release();" %include std_string.i %include std_vector.i %typemap (in) int64_t, boost::int64_t = long long; %typemap (out) int64_t, boost::int64_t = long long; %typemap (in) ssize_t = long long; %typemap (out) ssize_t = long long; %typemap (in) size_t = unsigned long long; %typemap (out) size_t = unsigned long long; %typemap (out) base::Rect { $result = Py_BuildValue("(ffff)", $1.left(), $1.top(), $1.width(), $1.height()); } %typemap(in) const std::string& { if (PyUnicode_Check($input)) { PyObject *tmp = PyUnicode_AsUTF8String($input); $1 = new std::string(PyString_AsString(tmp)); Py_DECREF(tmp); } else if (PyString_Check($input)) $1 = new std::string(PyString_AsString($input)); else { PyErr_SetString(PyExc_TypeError, "not a string"); SWIG_fail; } } %typemap(freearg) const std::string& { delete $1; } %typemap(out) std::string { $result = PyUnicode_DecodeUTF8($1.data(), $1.size(), NULL); } %typemap(in) const std::list<std::string>& { if (PyList_Check($input)) { $1 = new std::list<std::string>(); for (int c= PyList_Size($input), i= 0; i < c; i++) { PyObject *item = PyList_GetItem($input, i); if (PyUnicode_Check(item)) { PyObject *tmp = PyUnicode_AsUTF8String(item); $1->push_back(PyString_AsString(tmp)); Py_DECREF(tmp); } else if (PyString_Check(item)) $1->push_back(PyString_AsString(item)); else { delete $1; $1 = 0; SWIG_exception_fail(SWIG_TypeError, "expected list of strings"); } } } else SWIG_exception_fail(SWIG_TypeError, "expected list of strings"); } %typemap(out) std::vector<int> { $result = PyList_New(0); for (std::vector<int>::const_iterator iter = $1.begin(); iter != $1.end(); ++iter) { PyList_Append($result, PyInt_FromLong(*iter)); } } %typemap(out) std::vector<size_t> { $result = PyList_New(0); for (std::vector<size_t>::const_iterator iter = $1.begin(); iter != $1.end(); ++iter) { PyList_Append($result, PyInt_FromLong(*iter)); } } %typemap(in) const std::vector<size_t>& { if (PyList_Check($input)) { $1 = new std::vector<size_t>(); for (int c= PyList_Size($input), i= 0; i < c; i++) { PyObject *item = PyList_GetItem($input, i); $1->push_back(PyInt_AsLong(item)); } } else SWIG_exception_fail(SWIG_TypeError, "expected vector of size_t"); } %typemap(out) std::pair<int, int> { $result = Py_BuildValue("(ii)", $1.first, $1.second); } %typemap(freearg) const std::list<std::string>& { delete $1; } %typemap(in) const std::vector<std::string>& { if (PyList_Check($input)) { $1 = new std::vector<std::string>(); for (int c= PyList_Size($input), i= 0; i < c; i++) { PyObject *item = PyList_GetItem($input, i); if (PyUnicode_Check(item)) { PyObject *tmp = PyUnicode_AsUTF8String(item); $1->push_back(PyString_AsString(tmp)); Py_DECREF(tmp); } else if (PyString_Check(item)) $1->push_back(PyString_AsString(item)); else { delete $1; $1 = 0; SWIG_exception_fail(SWIG_TypeError, "expected vector of strings"); } } } else SWIG_exception_fail(SWIG_TypeError, "expected vector of strings"); } %typemap(freearg) const std::vector<std::string>& { delete $1; } %typemap(argout) std::string &ret_password { PyObject *o= PyUnicode_DecodeUTF8(($1)->data(), ($1)->size(), NULL); $result= SWIG_Python_AppendOutput($result, o); } %typemap(in,numinputs=0) std::string &ret_password(std::string temp) { $1 = &temp; } %typemap(argout) std::string &ret_value { PyObject *o= PyUnicode_DecodeUTF8(($1)->data(), ($1)->size(), NULL); $result= SWIG_Python_AppendOutput($result, o); } %typemap(in,numinputs=0) std::string &ret_value(std::string temp) { $1 = &temp; } %typemap(argout) bool &ret_store { if (*$1) Py_INCREF(Py_True); else Py_INCREF(Py_False); $result= SWIG_Python_AppendOutput($result, *$1 ? Py_True : Py_False); } %typemap(in,numinputs=0) bool &ret_store(bool temp) { temp = false; $1 = &temp; } %typemap(in,numinputs=0) int *w (int temp), int *h (int temp) { $1 = &temp; } %typemap(argout) (int *w, int *h) { $result = Py_BuildValue("(ii)", *$1, *$2); } %typemap(in,numinputs=0) int &retx (int temp), int &rety (int temp) { $1 = &temp; } %typemap(argout) (int &retx, int &rety) { $result = Py_BuildValue("(ii)", *$1, *$2); } %typemap(out) mforms::TreeNodeRef { if ($1) $result = SWIG_NewPointerObj((new mforms::TreeNodeRef($1)), SWIGTYPE_p_mforms__TreeNodeRef, SWIG_POINTER_OWN | 0 ); else { $result = Py_None; Py_INCREF($result); } } %typemap(in) mforms::TreeNodeRef { if ($input == Py_None) $1 = mforms::TreeNodeRef(); else { void *argp; int r = SWIG_ConvertPtr($input, &argp, SWIGTYPE_p_mforms__TreeNodeRef, 0 | 0); if (!SWIG_IsOK(r)) { SWIG_exception_fail(SWIG_ArgError(r), "in method '" "TreeView_select_node" "', argument of type '" "mforms::TreeNodeRef""'"); } if (!argp) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "TreeView_select_node" "', argument " "2"" of type '" "mforms::TreeNodeRef""'"); } else { mforms::TreeNodeRef * temp = reinterpret_cast< mforms::TreeNodeRef * >(argp); $1 = *temp; if (SWIG_IsNewObj(r)) delete temp; } } } %typemap(out) std::list<mforms::TreeNodeRef> { $result = PyList_New(0); for (std::list<mforms::TreeNodeRef>::const_iterator iter = $1.begin(); iter != $1.end(); ++iter) { PyObject *obj = SWIG_NewPointerObj((new mforms::TreeNodeRef(*iter)), SWIGTYPE_p_mforms__TreeNodeRef, SWIG_POINTER_OWN | 0 ); PyList_Append($result, obj); Py_DECREF(obj); } } %include std_list.i namespace std { %template(doubleList) list<double>; }; %typemap(in) std::list<double> { if (PyList_Check($input)) { for (int c= PyList_Size($input), i= 0; i < c; i++) { PyObject *item = PyList_GetItem($input, i); if (PyFloat_Check(item)) $1.push_back(PyFloat_AsDouble(item)); else if (PyInt_Check(item)) $1.push_back(PyInt_AsLong(item)); else { SWIG_exception_fail(SWIG_TypeError, "expected list of doubles"); } } } else SWIG_exception_fail(SWIG_TypeError, "expected list of doubles"); } %pythoncode %{ # flake8: noqa def newLabel(*args): c = Label(*args) c.set_managed() c.set_release_on_add() return c def newButton(*args): c = Button(*args) c.set_managed() c.set_release_on_add() return c def newCheckBox(*args): c = CheckBox(*args) c.set_managed() c.set_release_on_add() return c def newCodeEditor(*args): c = CodeEditor(*args) c.set_managed() c.set_release_on_add() return c def newTextEntry(*args): c = TextEntry(*args) c.set_managed() c.set_release_on_add() return c def newTextBox(*args): c = TextBox(*args) c.set_managed() c.set_release_on_add() return c def newSelector(*args): c = Selector(*args) c.set_managed() c.set_release_on_add() return c def newListBox(*args): c = ListBox(*args) c.set_managed() c.set_release_on_add() return c def newTabView(*args): c = TabView(*args) c.set_managed() c.set_release_on_add() return c def newBox(*args): c = Box(*args) c.set_managed() c.set_release_on_add() return c def newPanel(*args): c = Panel(*args) c.set_managed() c.set_release_on_add() return c def newFileChooser(*args): c = FileChooser(*args) c.set_managed() c.set_release_on_add() return c def newRadioButton(*args): c = RadioButton(*args) c.set_managed() c.set_release_on_add() return c def newImageBox(*args): c = ImageBox(*args) c.set_managed() c.set_release_on_add() return c def newProgressBar(*args): c = ProgressBar(*args) c.set_managed() c.set_release_on_add() return c def newTable(*args): c = Table(*args) c.set_managed() c.set_release_on_add() return c def newScrollPanel(*args): c = ScrollPanel(*args) c.set_managed() c.set_release_on_add() return c def newTreeView(*args): c = TreeView(*args) c.set_managed() c.set_release_on_add() return c def newAppView(*args): c = AppView(*args) return c def newDrawBox(*args): c = DrawBox(*args) c.set_managed() c.set_release_on_add() return c def newTabSwitcher(*args): c = TabSwitcher(*args) c.set_managed() c.set_release_on_add() return c def newSectionBox(*args): c = SectionBox(*args) c.set_managed() c.set_release_on_add() return c def newWidgetSeparator(*args): c = WidgetSeparator(*args) c.set_managed() c.set_release_on_add() return c def newHeartbeatWidget(*args): c = HeartbeatWidget(*args) c.set_managed() c.set_release_on_add() return c def newServerStatusWidget(*args): c = ServerStatusWidget(*args) c.set_managed() c.set_release_on_add() return c def newBarGraphWidget(*args): c = BarGraphWidget(*args) c.set_managed() c.set_release_on_add() return c def newLineDiagramWidget(*args): c = LineDiagramWidget(*args) c.set_managed() c.set_release_on_add() return c def newPopup(*args): c = Popup(*args) c.set_managed() c.set_release_on_add() return c def newPopover(*args): c = Popover(*args) c.set_managed() c.release() return c def newSplitter(*args): c = Splitter(*args) c.set_managed() c.set_release_on_add() return c def newTaskSidebar(*args): c = TaskSidebar.create(*args) c.set_managed() c.set_release_on_add() return c def newHyperText(*args): c = HyperText(*args) c.set_managed() c.set_release_on_add() return c def newContextMenu(*args): c = ContextMenu(*args) c.set_managed() return c def newMenuItem(*args): c = MenuItem(*args) c.set_managed() c.set_release_on_add() return c def newToolBar(*args): c = ToolBar(*args) c.set_managed() return c def newToolBarItem(*args): c = ToolBarItem(*args) c.set_managed() c.set_release_on_add() return c %} %include "../mforms/base.h" %include "../mforms/view.h" %include "../mforms/container.h" %include "../mforms/form.h" %include "../mforms/button.h" %include "../mforms/checkbox.h" %include "../mforms/textentry.h" %include "../mforms/textbox.h" %include "../mforms/label.h" %include "../mforms/selector.h" %include "../mforms/listbox.h" %include "../mforms/tabview.h" %include "../mforms/box.h" %include "../mforms/panel.h" %include "../mforms/toolbar.h" %include "../mforms/filechooser.h" %include "../mforms/radiobutton.h" %include "../mforms/imagebox.h" %include "../mforms/progressbar.h" %include "../mforms/table.h" %include "../mforms/scrollpanel.h" %include "../mforms/wizard.h" %include "../mforms/utilities.h" %include "../mforms/appview.h" %include "../mforms/dockingpoint.h" %include "../mforms/app.h" %include "../mforms/drawbox.h" %include "../mforms/tabswitcher.h" %include "../mforms/sectionbox.h" %include "../mforms/widgets.h" %include "../mforms/popup.h" %include "../mforms/popover.h" %include "../mforms/menubar.h" %include "../mforms/splitter.h" %include "../mforms/code_editor.h" %include "../mforms/task_sidebar.h" %include "../mforms/hypertext.h" %include "../mforms/treeview.h" %include "../../base/base/common.h" %include "../../base/base/drawing.h" %include "mforms_grt.h" %include "mforms_drawbox.h" %warnfilter(362) signal_connection_wrapper; // Extend classes to include callback support %extend mforms::Button { SWIG_ADD_SIGNAL_VOID_CALLBACK(clicked_callback, self->signal_clicked()); } %extend mforms::ListBox { SWIG_ADD_SIGNAL_VOID_CALLBACK(changed_callback, self->signal_changed()); } %extend mforms::CodeEditor { SWIG_ADD_SIGNAL_VOID_INT_INT_INT_BOOL_CALLBACK(changed_callback, self->signal_changed()); } %extend mforms::TreeView { SWIG_ADD_SIGNAL_VOID_NODE_INT_CALLBACK(activated_callback, self->signal_node_activated()); SWIG_ADD_SIGNAL_VOID_CALLBACK(changed_callback, self->signal_changed()); SWIG_ADD_SIGNAL_VOID_INT_CALLBACK(column_resized_callback, self->signal_column_resized()); void set_cell_edited_callback(PyObject *callable) { self->set_cell_edit_handler(boost::bind(call_cell_node_edited_pycallable, _1, _2, _3, PyObjectRef(callable))); } } %extend mforms::RadioButton { SWIG_ADD_SIGNAL_VOID_CALLBACK(clicked_callback, self->signal_clicked()); } %extend mforms::Selector { SWIG_ADD_SIGNAL_VOID_CALLBACK(changed_callback, self->signal_changed()); } %extend mforms::Form { SWIG_ADD_SET_BOOL_CALLBACK(set_on_close, self->set_on_close); SWIG_ADD_SIGNAL_VOID_CALLBACK(closed_callback, self->signal_closed()); SWIG_ADD_SIGNAL_VOID_CALLBACK(activated_callback, self->signal_activated()); SWIG_ADD_SIGNAL_VOID_CALLBACK(deactivated_callback, self->signal_deactivated()); } %extend mforms::TextBox { SWIG_ADD_SIGNAL_VOID_CALLBACK(changed_callback, self->signal_changed()); void append_text_and_scroll(const std::string &text, bool scroll_to_end) { self->append_text(text, scroll_to_end); } } %extend mforms::TextEntry { SWIG_ADD_SIGNAL_VOID_CALLBACK(changed_callback, self->signal_changed()); SWIG_ADD_SIGNAL_VOID_ENTRYACTION_CALLBACK(action_callback, self->signal_action()); } %extend mforms::Wizard { SWIG_ADD_SIGNAL_VOID_CALLBACK(next_callback, self->signal_next_clicked()); SWIG_ADD_SIGNAL_VOID_CALLBACK(back_callback, self->signal_back_clicked()); SWIG_ADD_SIGNAL_VOID_CALLBACK(extra_callback, self->signal_extra_clicked()); } %extend mforms::AppView { SWIG_ADD_SET_BOOL_CALLBACK(on_close, self->set_on_close); } %extend mforms::TabView { SWIG_ADD_SIGNAL_VOID_CALLBACK(tab_changed_callback, self->signal_tab_changed()); SWIG_ADD_SIGNAL_BOOL_INT_CALLBACK(tab_closing_callback, self->signal_tab_closing()); } %extend mforms::TabSwitcher { SWIG_ADD_SIGNAL_VOID_CALLBACK(changed_callback, self->signal_changed()); } %extend mforms::Utilities { static mforms::TimeoutHandle add_timeout(float interval, PyObject *callback) { return mforms::Utilities::add_timeout(interval, (pycall_bool_fun(callback))); } static void perform_from_main_thread(PyObject *callable, bool wait) { WillLeavePython gil; mforms::Utilities::perform_from_main_thread(pycall_ignoreret_voidptr_fun(callable), wait); } } %extend mforms::MenuBase { mforms::MenuItem *add_item_with_title(const std::string &title, PyObject *callable, const std::string &name = "", const std::string &internalName = "") { return self->add_item_with_title(title, pycall_void_fun(callable), name, internalName); } mforms::MenuItem *add_check_item_with_title(const std::string &title, PyObject *callable, const std::string &name, const std::string &internalName) { return self->add_check_item_with_title(title, pycall_void_fun(callable), name, internalName); } } %extend mforms::MenuItem { SWIG_ADD_SIGNAL_VOID_CALLBACK(clicked_callback, self->signal_clicked()); } %extend mforms::ContextMenu { SWIG_ADD_SIGNAL_VOID_MENUITEM_CALLBACK(will_show_callback, self->signal_will_show()); } %extend mforms::TaskSidebar { SWIG_ADD_SIGNAL_VOID_STRING_CALLBACK(on_section_command_callback, self->on_section_command()); } %extend mforms::HyperText { BOOST_ADD_SIGNAL_VOID_STRING_CALLBACK(link_click_callback, self->signal_link_click()); } %extend mforms::ToolBarItem { SWIG_ADD_SIGNAL_VOID_TOOLBARITEM_CALLBACK(activated_callback, self->signal_activated()); } %extend mforms::Popover { SWIG_ADD_SIGNAL_VOID_CALLBACK(close_callback, self->signal_close()); }