Expose getMainWindow() to Python

This commit is contained in:
wmayer 2013-06-30 23:34:24 +02:00
parent 8a5d32892f
commit 112b25f9fc
4 changed files with 29 additions and 5 deletions

View File

@ -211,6 +211,7 @@ public:
PYFUNCDEF_S(sSendActiveView);
PYFUNCDEF_S(sGetMainWindow);
PYFUNCDEF_S(sUpdateGui);
PYFUNCDEF_S(sUpdateLocale);
PYFUNCDEF_S(sGetLocale);

View File

@ -83,6 +83,9 @@ PyMethodDef Application::Methods[] = {
{"addIcon", (PyCFunction) Application::sAddIcon, 1,
"addIcon(string, string or list) -> None\n\n"
"Add an icon as file name or in XPM format to the system"},
{"getMainWindow", (PyCFunction) Application::sGetMainWindow, 1,
"getMainWindow() -> QMainWindow\n\n"
"Return the main window instance"},
{"updateGui", (PyCFunction) Application::sUpdateGui, 1,
"updateGui() -> None\n\n"
"Update the main window and all its windows"},
@ -418,6 +421,22 @@ PyObject* Application::sSendActiveView(PyObject * /*self*/, PyObject *args,PyObj
return Py_None;
}
PyObject* Application::sGetMainWindow(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/)
{
if (!PyArg_ParseTuple(args, ""))
return NULL;
PythonWrapper wrap;
wrap.loadCoreModule();
wrap.loadGuiModule();
try {
return Py::new_reference_to(wrap.fromQWidget(Gui::getMainWindow(), "QMainWindow"));
}
catch (const Py::Exception&) {
return 0;
}
}
PyObject* Application::sUpdateGui(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/)
{
if (!PyArg_ParseTuple(args, "")) // convert args: Python->C

View File

@ -84,15 +84,19 @@ QObject* PythonWrapper::toQObject(const Py::Object& pyobject)
return 0;
}
Py::Object PythonWrapper::toPython(QWidget* widget)
Py::Object PythonWrapper::fromQWidget(QWidget* widget, const char* className)
{
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
PyTypeObject * type = Shiboken::SbkType<QWidget>();
if (type) {
SbkObjectType* sbk_type = reinterpret_cast<SbkObjectType*>(type);
std::string typeName = widget->metaObject()->className();
std::string typeName;
if (className)
typeName = className;
else
typeName = widget->metaObject()->className();
PyObject* pyobj = Shiboken::Object::newObject(sbk_type, widget, false, false, typeName.c_str());
return Py::Object(pyobj);
return Py::asObject(pyobj);
}
throw Py::RuntimeError("Failed to wrap widget");
#else
@ -353,7 +357,7 @@ Py::Object UiLoaderPy::createWidget(const Py::Tuple& args)
QWidget* widget = loader.createWidget(QString::fromAscii(className.c_str()), parent,
QString::fromAscii(objectName.c_str()));
wrap.loadGuiModule();
return wrap.toPython(widget);
return wrap.fromQWidget(widget);
}
// ----------------------------------------------------

View File

@ -47,7 +47,7 @@ public:
bool loadGuiModule();
QObject* toQObject(const Py::Object&);
Py::Object toPython(QWidget*);
Py::Object fromQWidget(QWidget*, const char* className=0);
};
/**