From 66b4b45177182cf119b95c4faf497d6814afdb39 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 4 Dec 2017 19:38:40 +1000 Subject: [PATCH] Try to fix issues with sip casting collisions between layout and compositions --- python/core/composer/qgscomposeritem.sip | 142 --------------------- python/core/layout/qgslayoutitem.sip | 67 ++++++++++ src/core/composer/qgscomposeritem.h | 152 +---------------------- src/core/layout/qgslayoutitem.h | 67 ++++++++++ 4 files changed, 135 insertions(+), 293 deletions(-) diff --git a/python/core/composer/qgscomposeritem.sip b/python/core/composer/qgscomposeritem.sip index af58cd0a6aa0..d7ce1a3af11e 100644 --- a/python/core/composer/qgscomposeritem.sip +++ b/python/core/composer/qgscomposeritem.sip @@ -17,148 +17,6 @@ class QgsComposerItem: QgsComposerObject, QGraphicsRectItem %TypeHeaderCode #include "qgscomposeritem.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "qgslayoutitemgroup.h" -#include "qgslayoutitemmap.h" -#include "qgslayoutitempicture.h" -#include "qgslayoutitemlabel.h" -#include "qgslayoutitemlegend.h" -#include "qgslayoutitempolygon.h" -#include "qgslayoutitempolyline.h" -#include "qgslayoutitemscalebar.h" -#include "qgslayoutframe.h" -#include "qgslayoutitemshape.h" -#include "qgslayoutitempage.h" -%End -%ConvertToSubClassCode - // the conversions have to be static, because they're using multiple inheritance - // (seen in PyQt4 .sip files for some QGraphicsItem classes) - if ( dynamic_cast< QgsComposerItem * >( sipCpp ) ) - { - switch ( sipCpp->type() ) - { - case QgsComposerItem::ComposerItem: - sipType = sipType_QgsComposerItem; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerArrow: - sipType = sipType_QgsComposerArrow; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerItemGroup: - sipType = sipType_QgsComposerItemGroup; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerLabel: - sipType = sipType_QgsComposerLabel; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerLegend: - sipType = sipType_QgsComposerLegend; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerMap: - sipType = sipType_QgsComposerMap; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerPaper: - sipType = sipType_QgsPaperItem; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerPicture: - sipType = sipType_QgsComposerPicture; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerScaleBar: - sipType = sipType_QgsComposerScaleBar; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerShape: - sipType = sipType_QgsComposerShape; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerPolygon: - sipType = sipType_QgsComposerPolygon; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerPolyline: - sipType = sipType_QgsComposerPolyline; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerFrame: - sipType = sipType_QgsComposerFrame; - *sipCppRet = static_cast( sipCpp ); - break; - default: - sipType = 0; - } - } - else - { - switch ( sipCpp->type() ) - { - // really, these *should* use the constants from QgsLayoutItemRegistry, but sip doesn't like that! - case QGraphicsItem::UserType + 101: - sipType = sipType_QgsLayoutItemGroup; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 102: - sipType = sipType_QgsLayoutItemPage; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 103: - sipType = sipType_QgsLayoutItemMap; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 104: - sipType = sipType_QgsLayoutItemPicture; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 105: - sipType = sipType_QgsLayoutItemLabel; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 106: - sipType = sipType_QgsLayoutItemLegend; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 107: - sipType = sipType_QgsLayoutItemShape; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 108: - sipType = sipType_QgsLayoutItemPolygon; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 109: - sipType = sipType_QgsLayoutItemPolyline; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 110: - sipType = sipType_QgsLayoutItemScaleBar; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 111: - sipType = sipType_QgsLayoutFrame; - *sipCppRet = static_cast( sipCpp ); - break; - default: - sipType = 0; - } - } - %End public: diff --git a/python/core/layout/qgslayoutitem.sip b/python/core/layout/qgslayoutitem.sip index 29be6cd9e51d..900ac53413aa 100644 --- a/python/core/layout/qgslayoutitem.sip +++ b/python/core/layout/qgslayoutitem.sip @@ -29,12 +29,79 @@ class QgsLayoutItem : QgsLayoutObject, QGraphicsRectItem, QgsLayoutUndoObjectInt #include "qgslayoutframe.h" #include "qgslayoutitemshape.h" #include "qgslayoutitempage.h" + +#include "qgscomposerarrow.h" +#include "qgscomposeritemgroup.h" +#include "qgscomposerlabel.h" +#include "qgscomposerlegend.h" +#include "qgspaperitem.h" +#include "qgscomposerscalebar.h" +#include "qgscomposershape.h" +#include "qgscomposerpolygon.h" +#include "qgscomposerpolyline.h" + + %End %ConvertToSubClassCode // the conversions have to be static, because they're using multiple inheritance // (seen in PyQt4 .sip files for some QGraphicsItem classes) switch ( sipCpp->type() ) { + case QgsComposerItem::ComposerItem: + sipType = sipType_QgsComposerItem; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerArrow: + sipType = sipType_QgsComposerArrow; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerItemGroup: + sipType = sipType_QgsComposerItemGroup; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerLabel: + sipType = sipType_QgsComposerLabel; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerLegend: + sipType = sipType_QgsComposerLegend; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerMap: + sipType = sipType_QgsComposerMap; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerPaper: + sipType = sipType_QgsPaperItem; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerPicture: + sipType = sipType_QgsComposerPicture; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerScaleBar: + sipType = sipType_QgsComposerScaleBar; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerShape: + sipType = sipType_QgsComposerShape; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerPolygon: + sipType = sipType_QgsComposerPolygon; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerPolyline: + sipType = sipType_QgsComposerPolyline; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerFrame: + sipType = sipType_QgsComposerFrame; + *sipCppRet = static_cast( sipCpp ); + break; + + + // really, these *should* use the constants from QgsLayoutItemRegistry, but sip doesn't like that! case QGraphicsItem::UserType + 101: sipType = sipType_QgsLayoutItemGroup; diff --git a/src/core/composer/qgscomposeritem.h b/src/core/composer/qgscomposeritem.h index 85a08774e1ac..b7aaac042c90 100644 --- a/src/core/composer/qgscomposeritem.h +++ b/src/core/composer/qgscomposeritem.h @@ -40,163 +40,13 @@ class QgsComposerEffect; */ class CORE_EXPORT QgsComposerItem: public QgsComposerObject, public QGraphicsRectItem { -#ifdef SIP_RUN -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "qgslayoutitemgroup.h" -#include "qgslayoutitemmap.h" -#include "qgslayoutitempicture.h" -#include "qgslayoutitemlabel.h" -#include "qgslayoutitemlegend.h" -#include "qgslayoutitempolygon.h" -#include "qgslayoutitempolyline.h" -#include "qgslayoutitemscalebar.h" -#include "qgslayoutframe.h" -#include "qgslayoutitemshape.h" -#include "qgslayoutitempage.h" -#endif - - -#ifdef SIP_RUN - SIP_CONVERT_TO_SUBCLASS_CODE - // the conversions have to be static, because they're using multiple inheritance - // (seen in PyQt4 .sip files for some QGraphicsItem classes) - if ( dynamic_cast< QgsComposerItem * >( sipCpp ) ) - { - switch ( sipCpp->type() ) - { - case QgsComposerItem::ComposerItem: - sipType = sipType_QgsComposerItem; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerArrow: - sipType = sipType_QgsComposerArrow; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerItemGroup: - sipType = sipType_QgsComposerItemGroup; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerLabel: - sipType = sipType_QgsComposerLabel; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerLegend: - sipType = sipType_QgsComposerLegend; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerMap: - sipType = sipType_QgsComposerMap; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerPaper: - sipType = sipType_QgsPaperItem; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerPicture: - sipType = sipType_QgsComposerPicture; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerScaleBar: - sipType = sipType_QgsComposerScaleBar; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerShape: - sipType = sipType_QgsComposerShape; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerPolygon: - sipType = sipType_QgsComposerPolygon; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerPolyline: - sipType = sipType_QgsComposerPolyline; - *sipCppRet = static_cast( sipCpp ); - break; - case QgsComposerItem::ComposerFrame: - sipType = sipType_QgsComposerFrame; - *sipCppRet = static_cast( sipCpp ); - break; - default: - sipType = 0; - } - } - else - { - switch ( sipCpp->type() ) - { - // really, these *should* use the constants from QgsLayoutItemRegistry, but sip doesn't like that! - case QGraphicsItem::UserType + 101: - sipType = sipType_QgsLayoutItemGroup; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 102: - sipType = sipType_QgsLayoutItemPage; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 103: - sipType = sipType_QgsLayoutItemMap; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 104: - sipType = sipType_QgsLayoutItemPicture; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 105: - sipType = sipType_QgsLayoutItemLabel; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 106: - sipType = sipType_QgsLayoutItemLegend; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 107: - sipType = sipType_QgsLayoutItemShape; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 108: - sipType = sipType_QgsLayoutItemPolygon; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 109: - sipType = sipType_QgsLayoutItemPolyline; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 110: - sipType = sipType_QgsLayoutItemScaleBar; - *sipCppRet = static_cast( sipCpp ); - break; - case QGraphicsItem::UserType + 111: - sipType = sipType_QgsLayoutFrame; - *sipCppRet = static_cast( sipCpp ); - break; - default: - sipType = 0; - } - } - - SIP_END -#endif - - Q_OBJECT public: enum ItemType { // base class for the items - ComposerItem = UserType + 100, + ComposerItem = UserType + 10000, // derived classes ComposerArrow, diff --git a/src/core/layout/qgslayoutitem.h b/src/core/layout/qgslayoutitem.h index 4b31b5dbb6e9..7a434ff72c7e 100644 --- a/src/core/layout/qgslayoutitem.h +++ b/src/core/layout/qgslayoutitem.h @@ -52,6 +52,18 @@ class CORE_EXPORT QgsLayoutItem : public QgsLayoutObject, public QGraphicsRectIt #include "qgslayoutframe.h" #include "qgslayoutitemshape.h" #include "qgslayoutitempage.h" + +#include "qgscomposerarrow.h" +#include "qgscomposeritemgroup.h" +#include "qgscomposerlabel.h" +#include "qgscomposerlegend.h" +#include "qgspaperitem.h" +#include "qgscomposerscalebar.h" +#include "qgscomposershape.h" +#include "qgscomposerpolygon.h" +#include "qgscomposerpolyline.h" + + #endif @@ -61,6 +73,61 @@ class CORE_EXPORT QgsLayoutItem : public QgsLayoutObject, public QGraphicsRectIt // (seen in PyQt4 .sip files for some QGraphicsItem classes) switch ( sipCpp->type() ) { + case QgsComposerItem::ComposerItem: + sipType = sipType_QgsComposerItem; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerArrow: + sipType = sipType_QgsComposerArrow; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerItemGroup: + sipType = sipType_QgsComposerItemGroup; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerLabel: + sipType = sipType_QgsComposerLabel; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerLegend: + sipType = sipType_QgsComposerLegend; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerMap: + sipType = sipType_QgsComposerMap; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerPaper: + sipType = sipType_QgsPaperItem; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerPicture: + sipType = sipType_QgsComposerPicture; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerScaleBar: + sipType = sipType_QgsComposerScaleBar; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerShape: + sipType = sipType_QgsComposerShape; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerPolygon: + sipType = sipType_QgsComposerPolygon; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerPolyline: + sipType = sipType_QgsComposerPolyline; + *sipCppRet = static_cast( sipCpp ); + break; + case QgsComposerItem::ComposerFrame: + sipType = sipType_QgsComposerFrame; + *sipCppRet = static_cast( sipCpp ); + break; + + + // really, these *should* use the constants from QgsLayoutItemRegistry, but sip doesn't like that! case QGraphicsItem::UserType + 101: sipType = sipType_QgsLayoutItemGroup;