API_Py  0.0.2
API_Py exporte le projet API vers un module python dans l’environnement python choisi. Le module python se nomme wxcpppy.
wxAccess.cpp
Aller à la documentation de ce fichier.
1 
8 // wxWidget va nedéfinir l'expression _() avec wxTranslation si WXINTL_NO_GETTEXT_MACRO n'est pas défini.
9 #ifndef WXINTL_NO_GETTEXT_MACRO
10  #define WXINTL_NO_GETTEXT_MACRO
11 #endif // WXINTL_NO_GETTEXT_MACRO
12 
13 #include "API_Py/wxAccess.h"
14 
15 // pybind11 va définir l'expression _() si elle n'est pas déjà définie
16 // template <typename Type> constexpr descr<1, Type> _() { return {'%'}; }
17 
18 #include <pybind11/operators.h>
19 #include <sip.h>
20 #include <wxPython/wxpy_api.h>
21 
22 #include "API/API.h"
23 #include <sstream>
24 
25 using namespace pybind11::literals;
26 namespace API_Py
27 {
42  template <typename T>
43  pybind11::handle wxCast(T* src)
44  {
45  wxASSERT(src);
46 
47  // As always, first grab the GIL
48  wxPyBlock_t blocked = wxPyBeginBlockThreads();
49  wxString typeName(src->GetClassInfo()->GetClassName());
50  PyObject* obj = wxPyConstructObject(src, typeName, false);
51  // Finally, after all Python stuff is done, release the GIL
52  wxPyEndBlockThreads(blocked);
53 
54  wxASSERT(obj != nullptr);
55  return obj;
56  }
57 
65  template <typename T>
66  T* wxLoad(pybind11::handle src, const wxString& inTypeName)
67  {
68  /* Extract PyObject from handle */
69  PyObject *source = src.ptr();
70 
71  T obj = nullptr;
72 
73  bool success = wxPyConvertWrappedPtr(source, (void**) &obj, inTypeName);
74  wxASSERT_MSG(success, _T("Returned object was not a ") + inTypeName);
75 
76  return obj;
77  }
78 }
79 
80 void API_Py::wxAccess::SetModule(py::module &inModule)
81 {
82  py::object py_wxModule = py::module::import("wx");
83  py::module m_sub = inModule.def_submodule("wx", "Access to the wxWidgets gui.");
84 
85  m_sub.doc() = R"pbdoc(
86  wxCppPy.wx API plugin
87  -----------------------
88 
89  .. currentmodule:: wxcpp_py.wx
90 
91  .. autosummary::
92  :toctree: _generate
93 
94  get_menu_bar
95  get_tool_bar
96  get_bottom_bar
97  get_lef_bar
98  get_center_bar
99  get_motherframe_bar
100  )pbdoc";
101 
102 
103  m_sub.def("get_menu_bar", [] ()
104  {
105  return API_Py::wxCast(API::wx::GetMenuBar());
106 
107  }, py::return_value_policy::reference, "Return the menu bar.");
108 
109  m_sub.def("get_tool_bar", [] ()
110  {
111  return API_Py::wxCast(API::wx::GetToolBar());
112 
113  }, py::return_value_policy::reference, "Return the aui tool bar.");
114 
115  m_sub.def("get_bottom", [] ()
116  {
117  return API_Py::wxCast(API::wx::GetBottomNotebook());
118 
119  }, py::return_value_policy::reference, "Return the bottom aui note book.");
120 
121  m_sub.def("get_left", [] ()
122  {
123  return API_Py::wxCast(API::wx::GetLeftNoteBook());
124 
125  }, py::return_value_policy::reference, "Return the left aui note book.");
126 
127  m_sub.def("get_center", [] ()
128  {
129  return API_Py::wxCast(API::wx::GetCenterNoteBook());
130 
131  }, py::return_value_policy::reference, "Return the center aui note book.");
132 
133  m_sub.def("get_mother_frame", [] ()
134  {
135  return API_Py::wxCast(API::wx::GetMotherFrame());
136 
137  }, py::return_value_policy::reference, "Return the mother frame.");
138 }
139 
pybind11::handle wxCast(T *src)
Permet de construire l&#39;objet de wxPython qui enrobera l&#39;objet de wxWidget. Cette fonction est à utili...
Definition: wxAccess.cpp:43
T * wxLoad(pybind11::handle src, const wxString &inTypeName)
Permet de récupérer l&#39;objet wxWidget enrobé par wxPython.
Definition: wxAccess.cpp:66