ultimatepp/bazaar/BoostPyTest/main.cpp
kohait e95d3a2a6b bazaar: BoostPyTest extension of exports, cleanup, preparation for further extensions; CtrlProp: some fixes
git-svn-id: svn://ultimatepp.org/upp/trunk@3365 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2011-04-21 08:34:41 +00:00

97 lines
2.3 KiB
C++

#include "BoostPyTest.h"
//CAUTION special module definitions to reduce compile time
#include "modules.cppi"
BoostPyTest::BoostPyTest()
{
CtrlLayout(*this, "Boost Test");
Sizeable().Zoomable();
//bool b = Py_IsInitialized();
int ret;
ret = PyImport_AppendInittab( "hello", &inithello );
ret = PyImport_AppendInittab( "upp", &initupp );
//Py_Initialize(); //should be done *after* PyImport_AppendInittab, but it still works :), leaving INITBLOCK from Py
//PyCon::Init();
PyCon::AtExit = THISBACK(ExitHandler);
try {
object main_module(handle<>(borrowed(PyImport_AddModule("__main__"))));
object main_namespace = main_module.attr("__dict__");
handle<> ign(PyRun_String( "print \"Hello, World\"",
Py_file_input,
main_namespace.ptr(),
main_namespace.ptr() ));
object hello_module(handle<>(PyImport_ImportModule("hello")));
//MEM LEAK from PyImport_ImportModule ??
//http://mail.python.org/pipermail/python-win32/2008-August/008092.html
//seems to be well known and not correctable
//so better do it in python code
//is only caused on boost python module declarations
main_namespace["hello"] = hello_module;
w.set("Welcom on earth");
scope(hello_module).attr("earth") = ptr(&w);
object upp_module = import("upp");
main_namespace["upp"] = upp_module;
sl.SetData(50);
scope(upp_module).attr("sl") = ptr(&sl);
vc.SetData(123);
scope(upp_module).attr("vc") = ptr(&vc);
es.SetData("Hello from Upp");
scope(upp_module).attr("es") = ptr(&es);
//the additional import is needless
String sc =
"p = hello.World()\n"
"p.set('Some Greet Text')\n"
"print p.greet()\n"
"upp.sl.data = 75\n"
"print upp.sl.data\n"
"upp.vc.data = range(10)\n"
"print upp.vc.data\n"
"print upp.es.data\n"
"upp.es.data = 'Another Text from Upp'\n"
"print upp.es.data\n"
"c = upp.Color(123,124,125)\n"
"print c"
//"upp.vc.data = c\n"
;
con.cmd.SetData(sc);
} catch( error_already_set ) {
PyErr_Print();
}
}
BoostPyTest::~BoostPyTest()
{
// Py_Finalize();
}
void BoostPyTest::ExitHandler()
{
SetTimeCallback(1000, Breaker());
}
GUI_APP_MAIN
{
BoostPyTest().Run();
}