283 lines
11 KiB
C++
283 lines
11 KiB
C++
#ifndef _PYTHONQTSTDDECORATORS_H
|
|
#define _PYTHONQTSTDDECORATORS_H
|
|
|
|
/*
|
|
*
|
|
* Copyright (C) 2010 MeVis Medical Solutions AG All Rights Reserved.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* Further, this software is distributed without any warranty that it is
|
|
* free of the rightful claim of any third person regarding infringement
|
|
* or the like. Any license provided herein, whether implied or
|
|
* otherwise, applies only to this software file. Patent licenses, if
|
|
* any, provided herein do not apply to combinations of this program with
|
|
* other software, or any other product whatsoever.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* Contact information: MeVis Medical Solutions AG, Universitaetsallee 29,
|
|
* 28359 Bremen, Germany or:
|
|
*
|
|
* http://www.mevis.de
|
|
*
|
|
*/
|
|
|
|
//----------------------------------------------------------------------------------
|
|
/*!
|
|
// \file PythonQtStdDecorators.h
|
|
// \author Florian Link
|
|
// \author Last changed by $Author: florian $
|
|
// \date 2007-04
|
|
*/
|
|
//----------------------------------------------------------------------------------
|
|
|
|
#include "PythonQtPythonInclude.h"
|
|
|
|
#include "PythonQt.h"
|
|
|
|
#include <QColor>
|
|
#include <QDate>
|
|
#include <QDateTime>
|
|
#include <QImage>
|
|
#include <QMetaEnum>
|
|
#include <QMetaMethod>
|
|
#include <QMetaProperty>
|
|
#include <QObject>
|
|
#include <QTextDocument>
|
|
#include <QTime>
|
|
#include <QTimer>
|
|
#include <QVariantList>
|
|
|
|
class PYTHONQT_EXPORT PythonQtStdDecorators : public QObject {
|
|
Q_OBJECT
|
|
|
|
public Q_SLOTS:
|
|
bool connect(QObject *sender, const QString &signal, PyObject *callable);
|
|
bool connect(QObject *sender, const QString &signal, QObject *receiver,
|
|
const QString &slot,
|
|
Qt::ConnectionType type = Qt::AutoConnection);
|
|
bool connect(QObject *receiver, QObject *sender, const QString &signal,
|
|
const QString &slot,
|
|
Qt::ConnectionType type = Qt::AutoConnection) {
|
|
return connect(sender, signal, receiver, slot, type);
|
|
}
|
|
bool static_QObject_connect(QObject *sender, const QString &signal,
|
|
PyObject *callable) {
|
|
return connect(sender, signal, callable);
|
|
}
|
|
bool static_QObject_connect(QObject *sender, const QString &signal,
|
|
QObject *receiver, const QString &slot,
|
|
Qt::ConnectionType type = Qt::AutoConnection) {
|
|
return connect(sender, signal, receiver, slot, type);
|
|
}
|
|
bool disconnect(QObject *sender, const QString &signal,
|
|
PyObject *callable = nullptr);
|
|
bool disconnect(QObject *sender, const QString &signal, QObject *receiver,
|
|
const QString &slot);
|
|
bool static_QObject_disconnect(QObject *sender, const QString &signal,
|
|
PyObject *callable = nullptr) {
|
|
return disconnect(sender, signal, callable);
|
|
}
|
|
bool static_QObject_disconnect(QObject *sender, const QString &signal,
|
|
QObject *receiver, const QString &slot) {
|
|
return connect(sender, signal, receiver, slot);
|
|
}
|
|
|
|
const QMetaObject *metaObject(QObject *obj);
|
|
|
|
QObject *parent(QObject *o);
|
|
void setParent(QObject *o, PythonQtNewOwnerOfThis<QObject *> parent);
|
|
|
|
const QObjectList *children(QObject *o);
|
|
QObject *findChild(QObject *parent, PyObject *type,
|
|
const QString &name = QString());
|
|
QList<QObject *> findChildren(QObject *parent, PyObject *type,
|
|
const QString &name = QString());
|
|
QList<QObject *> findChildren(QObject *parent, PyObject *type,
|
|
const QRegExp ®Exp);
|
|
|
|
bool setProperty(QObject *o, const char *name, const QVariant &value);
|
|
QVariant property(QObject *o, const char *name);
|
|
|
|
double static_Qt_qAbs(double a) { return qAbs(a); }
|
|
double static_Qt_qBound(double a, double b, double c) {
|
|
return qBound(a, b, c);
|
|
}
|
|
void static_Qt_qDebug(const QByteArray &msg) {
|
|
qDebug("%s", msg.constData());
|
|
}
|
|
// TODO: multi arg qDebug...
|
|
void static_Qt_qWarning(const QByteArray &msg) {
|
|
qWarning("%s", msg.constData());
|
|
}
|
|
// TODO: multi arg qWarning...
|
|
void static_Qt_qCritical(const QByteArray &msg) {
|
|
qCritical("%s", msg.constData());
|
|
}
|
|
// TODO: multi arg qCritical...
|
|
void static_Qt_qFatal(const QByteArray &msg) {
|
|
qFatal("%s", msg.constData());
|
|
}
|
|
// TODO: multi arg qFatal...
|
|
bool static_Qt_qFuzzyCompare(double a, double b) {
|
|
return qFuzzyCompare(a, b);
|
|
}
|
|
double static_Qt_qMax(double a, double b) { return qMax(a, b); }
|
|
double static_Qt_qMin(double a, double b) { return qMin(a, b); }
|
|
int static_Qt_qRound(double a) { return qRound(a); }
|
|
qint64 static_Qt_qRound64(double a) { return qRound64(a); }
|
|
const char *static_Qt_qVersion() { return qVersion(); }
|
|
int static_Qt_qrand() { return qrand(); }
|
|
void static_Qt_qsrand(uint a) { qsrand(a); }
|
|
|
|
QString tr(QObject *obj, const QString &text,
|
|
const QString &ambig = QString(), int n = -1);
|
|
|
|
QString static_Qt_SIGNAL(const QString &s) { return QString("2") + s; }
|
|
QString static_Qt_SLOT(const QString &s) { return QString("1") + s; }
|
|
|
|
void static_QTimer_singleShot(int msec, PyObject *callable);
|
|
|
|
private:
|
|
QObject *findChild(QObject *parent, const char *typeName,
|
|
const QMetaObject *meta, const QString &name);
|
|
int findChildren(QObject *parent, const char *typeName,
|
|
const QMetaObject *meta, const QString &name,
|
|
QList<QObject *> &list);
|
|
int findChildren(QObject *parent, const char *typeName,
|
|
const QMetaObject *meta, const QRegExp ®Exp,
|
|
QList<QObject *> &list);
|
|
};
|
|
|
|
class PythonQtSingleShotTimer : public QTimer {
|
|
Q_OBJECT
|
|
public:
|
|
PythonQtSingleShotTimer(int msec, const PythonQtObjectPtr &callable);
|
|
|
|
public Q_SLOTS:
|
|
void slotTimeout();
|
|
|
|
private:
|
|
PythonQtObjectPtr _callable;
|
|
};
|
|
|
|
class PythonQtWrapper_QMetaObject : public QObject {
|
|
Q_OBJECT
|
|
|
|
public Q_SLOTS:
|
|
const char *className(QMetaObject *obj) const { return obj->className(); }
|
|
const QMetaObject *superClass(QMetaObject *obj) const {
|
|
return obj->superClass();
|
|
}
|
|
|
|
int methodOffset(QMetaObject *obj) const { return obj->methodOffset(); }
|
|
int enumeratorOffset(QMetaObject *obj) const {
|
|
return obj->enumeratorOffset();
|
|
}
|
|
int propertyOffset(QMetaObject *obj) const { return obj->propertyOffset(); }
|
|
int classInfoOffset(QMetaObject *obj) const { return obj->classInfoOffset(); }
|
|
|
|
int constructorCount(QMetaObject *obj) const {
|
|
return obj->constructorCount();
|
|
}
|
|
int methodCount(QMetaObject *obj) const { return obj->methodCount(); }
|
|
int enumeratorCount(QMetaObject *obj) const { return obj->enumeratorCount(); }
|
|
int propertyCount(QMetaObject *obj) const { return obj->propertyCount(); }
|
|
int classInfoCount(QMetaObject *obj) const { return obj->classInfoCount(); }
|
|
|
|
int indexOfConstructor(QMetaObject *obj, const char *constructor) const {
|
|
return obj->indexOfConstructor(constructor);
|
|
}
|
|
int indexOfMethod(QMetaObject *obj, const char *method) const {
|
|
return obj->indexOfMethod(method);
|
|
}
|
|
int indexOfSignal(QMetaObject *obj, const char *signal) const {
|
|
return obj->indexOfSignal(signal);
|
|
}
|
|
int indexOfSlot(QMetaObject *obj, const char *slot) const {
|
|
return obj->indexOfSlot(slot);
|
|
}
|
|
int indexOfEnumerator(QMetaObject *obj, const char *name) const {
|
|
return obj->indexOfEnumerator(name);
|
|
}
|
|
int indexOfProperty(QMetaObject *obj, const char *name) const {
|
|
return obj->indexOfProperty(name);
|
|
}
|
|
int indexOfClassInfo(QMetaObject *obj, const char *name) const {
|
|
return obj->indexOfClassInfo(name);
|
|
}
|
|
|
|
QMetaMethod constructor(QMetaObject *obj, int index) const {
|
|
return obj->constructor(index);
|
|
}
|
|
QMetaMethod method(QMetaObject *obj, int index) const {
|
|
return obj->method(index);
|
|
}
|
|
QMetaEnum enumerator(QMetaObject *obj, int index) const {
|
|
return obj->enumerator(index);
|
|
}
|
|
QMetaProperty property(QMetaObject *obj, int index) const {
|
|
return obj->property(index);
|
|
}
|
|
QMetaClassInfo classInfo(QMetaObject *obj, int index) const {
|
|
return obj->classInfo(index);
|
|
}
|
|
QMetaProperty userProperty(QMetaObject *obj) const {
|
|
return obj->userProperty();
|
|
}
|
|
|
|
bool static_QMetaObject_checkConnectArgs(const char *signal,
|
|
const char *method) {
|
|
return QMetaObject::checkConnectArgs(signal, method);
|
|
}
|
|
QByteArray static_QMetaObject_normalizedSignature(const char *method) {
|
|
return QMetaObject::normalizedSignature(method);
|
|
}
|
|
QByteArray static_QMetaObject_normalizedType(const char *type) {
|
|
return QMetaObject::normalizedType(type);
|
|
}
|
|
};
|
|
|
|
//! Some helper methods that allow testing of the ownership
|
|
class PYTHONQT_EXPORT PythonQtDebugAPI : public QObject {
|
|
Q_OBJECT
|
|
public:
|
|
PythonQtDebugAPI(QObject *parent) : QObject(parent) {}
|
|
|
|
public slots:
|
|
//! Returns if the C++ object is owned by PythonQt and will be deleted when
|
|
//! the reference goes away.
|
|
bool isOwnedByPython(PyObject *object);
|
|
//! Returns if the C++ object is an instance of a Python class that derives a
|
|
//! C++ class.
|
|
bool isDerivedShellInstance(PyObject *object);
|
|
//! Returns if the shell instance has an extra ref count from the C++ side.
|
|
bool hasExtraShellRefCount(PyObject *object);
|
|
|
|
//! Pass the ownership of the given object to CPP (so that it will not be
|
|
//! deleted by Python if the reference goes away)
|
|
bool passOwnershipToCPP(PyObject *object);
|
|
//! Pass the ownership of the given object to Python (so that the C++ object
|
|
//! will be deleted when the Python reference goes away)
|
|
bool passOwnershipToPython(PyObject *object);
|
|
|
|
//! Returns if the given object is a PythonQt instance wrapper (or derived
|
|
//! class)
|
|
bool isPythonQtInstanceWrapper(PyObject *object);
|
|
//! Returns if the given object is a PythonQt class wrapper (or derived class)
|
|
bool isPythonQtClassWrapper(PyObject *object);
|
|
};
|
|
|
|
#endif
|