Python Bindings: Fix findParent that was not working as expected (#349)

This commit is contained in:
Nicolas Elie 2021-09-06 20:48:17 +02:00 committed by GitHub
parent b5b251dffb
commit 130b0de646
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,138 +1,138 @@
%Import QtWidgets/QtWidgetsmod.sip
%If (Qt_5_0_0 -)
%ModuleHeaderCode
PyObject *qtads_FindParent(PyObject* type, const QWidget *child);
%End
%ModuleCode
PyObject *qtads_FindParent(PyObject* type, const QWidget *w)
{
// Check that the types checking was successful.
if (!type)
return 0;
QWidget* parentWidget = w->parentWidget();
while (parentWidget)
{
PyObject *ParentImpl = sipConvertFromType(parentWidget, sipType_QObject, 0);
if (!ParentImpl)
{
return 0;
}
if (PyType_IsSubtype((PyTypeObject *)type, Py_TYPE(ParentImpl)))
return ParentImpl;
Py_DECREF(ParentImpl);
parentWidget = parentWidget->parentWidget();
}
Py_INCREF(Py_None);
return Py_None;
}
%End
namespace ads
{
%TypeHeaderCode
#include <ads_globals.h>
%End
enum DockWidgetArea
{
NoDockWidgetArea,
LeftDockWidgetArea,
RightDockWidgetArea,
TopDockWidgetArea,
BottomDockWidgetArea,
CenterDockWidgetArea,
InvalidDockWidgetArea,
OuterDockAreas,
AllDockAreas
};
typedef QFlags<ads::DockWidgetArea> DockWidgetAreas;
enum TitleBarButton
{
TitleBarButtonTabsMenu,
TitleBarButtonUndock,
TitleBarButtonClose
};
enum eDragState
{
DraggingInactive,
DraggingMousePressed,
DraggingTab,
DraggingFloatingWidget
};
enum eIcon
{
TabCloseIcon,
DockAreaMenuIcon,
DockAreaUndockIcon,
DockAreaCloseIcon,
IconCount,
};
enum eBitwiseOperator
{
BitwiseAnd,
BitwiseOr
};
namespace internal
{
void replaceSplitterWidget(QSplitter* Splitter, QWidget* From, QWidget* To);
void hideEmptyParentSplitters(ads::CDockSplitter* FirstParentSplitter);
class CDockInsertParam
{
%TypeHeaderCode
#include <ads_globals.h>
%End
public:
Qt::Orientation orientation() const;
bool append() const;
int insertOffset() const;
};
ads::internal::CDockInsertParam dockAreaInsertParameters(ads::DockWidgetArea Area);
SIP_PYOBJECT findParent(SIP_PYTYPE type, const QWidget *w) const /TypeHint="QObject"/;
%MethodCode
sipRes = qtads_FindParent(a0, a1);
if (!sipRes)
{
sipIsErr = 1;
}
%End
QPixmap createTransparentPixmap(const QPixmap& Source, qreal Opacity);
QPoint globalPositionOf(QMouseEvent* ev);
void setButtonIcon(QAbstractButton* Button, QStyle::StandardPixmap StandarPixmap, ads::eIcon CustomIconId);
enum eRepolishChildOptions
{
RepolishIgnoreChildren,
RepolishDirectChildren,
RepolishChildrenRecursively
};
void repolishStyle(QWidget* w, ads::internal::eRepolishChildOptions Options = ads::internal::RepolishIgnoreChildren);
};
};
%End
%Import QtWidgets/QtWidgetsmod.sip
%If (Qt_5_0_0 -)
%ModuleHeaderCode
PyObject *qtads_FindParent(PyObject* type, const QWidget *child);
%End
%ModuleCode
PyObject *qtads_FindParent(PyObject* type, const QWidget *w)
{
// Check that the types checking was successful.
if (!type)
return 0;
QWidget* parentWidget = w->parentWidget();
while (parentWidget)
{
PyObject *ParentImpl = sipConvertFromType(parentWidget, sipType_QObject, 0);
if (!ParentImpl)
{
return 0;
}
if (PyObject_IsInstance(ParentImpl, type))
return ParentImpl;
Py_DECREF(ParentImpl);
parentWidget = parentWidget->parentWidget();
}
Py_INCREF(Py_None);
return Py_None;
}
%End
namespace ads
{
%TypeHeaderCode
#include <ads_globals.h>
%End
enum DockWidgetArea
{
NoDockWidgetArea,
LeftDockWidgetArea,
RightDockWidgetArea,
TopDockWidgetArea,
BottomDockWidgetArea,
CenterDockWidgetArea,
InvalidDockWidgetArea,
OuterDockAreas,
AllDockAreas
};
typedef QFlags<ads::DockWidgetArea> DockWidgetAreas;
enum TitleBarButton
{
TitleBarButtonTabsMenu,
TitleBarButtonUndock,
TitleBarButtonClose
};
enum eDragState
{
DraggingInactive,
DraggingMousePressed,
DraggingTab,
DraggingFloatingWidget
};
enum eIcon
{
TabCloseIcon,
DockAreaMenuIcon,
DockAreaUndockIcon,
DockAreaCloseIcon,
IconCount,
};
enum eBitwiseOperator
{
BitwiseAnd,
BitwiseOr
};
namespace internal
{
void replaceSplitterWidget(QSplitter* Splitter, QWidget* From, QWidget* To);
void hideEmptyParentSplitters(ads::CDockSplitter* FirstParentSplitter);
class CDockInsertParam
{
%TypeHeaderCode
#include <ads_globals.h>
%End
public:
Qt::Orientation orientation() const;
bool append() const;
int insertOffset() const;
};
ads::internal::CDockInsertParam dockAreaInsertParameters(ads::DockWidgetArea Area);
SIP_PYOBJECT findParent(SIP_PYTYPE type, const QWidget *w) const /TypeHint="QObject"/;
%MethodCode
sipRes = qtads_FindParent(a0, a1);
if (!sipRes)
{
sipIsErr = 1;
}
%End
QPixmap createTransparentPixmap(const QPixmap& Source, qreal Opacity);
QPoint globalPositionOf(QMouseEvent* ev);
void setButtonIcon(QAbstractButton* Button, QStyle::StandardPixmap StandarPixmap, ads::eIcon CustomIconId);
enum eRepolishChildOptions
{
RepolishIgnoreChildren,
RepolishDirectChildren,
RepolishChildrenRecursively
};
void repolishStyle(QWidget* w, ads::internal::eRepolishChildOptions Options = ads::internal::RepolishIgnoreChildren);
};
};
%End