diff --git a/src/core/composer/qgscomposeritem.h b/src/core/composer/qgscomposeritem.h index fc7198869fec..50ee8ebebc39 100644 --- a/src/core/composer/qgscomposeritem.h +++ b/src/core/composer/qgscomposeritem.h @@ -38,7 +38,88 @@ class QgsComposerEffect; * A item that forms part of a map composition. */ class CORE_EXPORT QgsComposerItem: public QgsComposerObject, public QGraphicsRectItem +#ifdef SIP_RUN +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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) + 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; + } + SIP_END +#endif + + Q_OBJECT public: diff --git a/src/core/composer/qgscomposermultiframe.h b/src/core/composer/qgscomposermultiframe.h index d47742c457b4..20532f6f78f2 100644 --- a/src/core/composer/qgscomposermultiframe.h +++ b/src/core/composer/qgscomposermultiframe.h @@ -40,6 +40,22 @@ class QPainter; class CORE_EXPORT QgsComposerMultiFrame: public QgsComposerObject { + +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsComposerHtml; + else if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsComposerAttributeTableV2; + else if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsComposerTableV2; + else if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsComposerMultiFrame; + else + sipType = NULL; + SIP_END +#endif + Q_OBJECT public: diff --git a/src/core/gps/qgsgpsconnection.h b/src/core/gps/qgsgpsconnection.h index 45b1c034b1df..6231c0605102 100644 --- a/src/core/gps/qgsgpsconnection.h +++ b/src/core/gps/qgsgpsconnection.h @@ -62,7 +62,23 @@ struct CORE_EXPORT QgsGPSInformation /** \ingroup core * Abstract base class for connection to a GPS device*/ class CORE_EXPORT QgsGPSConnection : public QObject +#ifdef SIP_RUN +#include +#include +#endif { + +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + if ( sipCpp->inherits( "QgsGpsdConnection" ) ) + sipType = sipType_QgsGpsdConnection; + else if ( sipCpp->inherits( "QgsNMEAConnection" ) ) + sipType = sipType_QgsNMEAConnection; + else + sipType = NULL; + SIP_END +#endif + Q_OBJECT public: diff --git a/src/core/raster/qgsrasterinterface.h b/src/core/raster/qgsrasterinterface.h index 5d5d773f41d4..dc7f8f357378 100644 --- a/src/core/raster/qgsrasterinterface.h +++ b/src/core/raster/qgsrasterinterface.h @@ -75,7 +75,67 @@ class CORE_EXPORT QgsRasterBlockFeedback : public QgsFeedback * Base class for processing filters like renderers, reprojector, resampler etc. */ class CORE_EXPORT QgsRasterInterface +#ifdef SIP_RUN +// QgsRasterInterface subclasses +#include +#include +#include +#include +#include +#include +#include + +// QgsRasterRenderer subclasses +#include +#include +#include +#include +#include +#include +#endif { + +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsBrightnessContrastFilter; + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsHueSaturationFilter; + else if ( dynamic_cast( sipCpp ) ) + { + sipType = sipType_QgsRasterDataProvider; + // use static cast because QgsRasterDataProvider has multiple inheritance + // and we would end up with bad pointer otherwise! + *sipCppRet = static_cast( sipCpp ); + } + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsRasterNuller; + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsRasterProjector; + else if ( dynamic_cast( sipCpp ) ) + { + if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsHillshadeRenderer; + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsMultiBandColorRenderer; + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsPalettedRasterRenderer; + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsSingleBandColorDataRenderer; + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsSingleBandGrayRenderer; + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsSingleBandPseudoColorRenderer; + else + sipType = sipType_QgsRasterRenderer; + } + else if ( dynamic_cast( sipCpp ) ) + sipType = sipType_QgsRasterResampleFilter; + else + sipType = 0; + SIP_END +#endif + Q_DECLARE_TR_FUNCTIONS( QgsRasterInterface ) public: diff --git a/src/core/raster/qgsrasterresampler.h b/src/core/raster/qgsrasterresampler.h index e8805372d34f..8527e40955f4 100644 --- a/src/core/raster/qgsrasterresampler.h +++ b/src/core/raster/qgsrasterresampler.h @@ -27,7 +27,23 @@ class QImage; * Interface for resampling rasters (e.g. to have a smoother appearance) */ class QgsRasterResampler +#ifdef SIP_RUN +#include "qgsbilinearrasterresampler.h" +#include "qgscubicrasterresampler.h" +#endif { + +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsBilinearRasterResampler; + else if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsCubicRasterResampler; + else + sipType = 0; + SIP_END +#endif + public: virtual ~QgsRasterResampler() = default; virtual void resample( const QImage &srcImage, QImage &dstImage ) = 0; diff --git a/src/core/raster/qgsrastershaderfunction.h b/src/core/raster/qgsrastershaderfunction.h index f9ec1046b3f9..13135d7bfa14 100644 --- a/src/core/raster/qgsrastershaderfunction.h +++ b/src/core/raster/qgsrastershaderfunction.h @@ -31,8 +31,20 @@ email : ersts@amnh.org #include class CORE_EXPORT QgsRasterShaderFunction +#ifdef SIP_RUN +#include +#endif { +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsColorRampShader; + else + sipType = 0; + SIP_END +#endif + public: QgsRasterShaderFunction( double minimumValue = 0.0, double maximumValue = 255.0 ); virtual ~QgsRasterShaderFunction() = default; diff --git a/src/core/symbology-ng/qgsrenderer.h b/src/core/symbology-ng/qgsrenderer.h index dfb998eee234..d6c84b068390 100644 --- a/src/core/symbology-ng/qgsrenderer.h +++ b/src/core/symbology-ng/qgsrenderer.h @@ -86,6 +86,34 @@ typedef QList< QgsSymbolLevel > QgsSymbolLevelOrder; */ class CORE_EXPORT QgsFeatureRenderer { + +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + if ( sipCpp->type() == "singleSymbol" ) + sipType = sipType_QgsSingleSymbolRenderer; + else if ( sipCpp->type() == "categorizedSymbol" ) + sipType = sipType_QgsCategorizedSymbolRenderer; + else if ( sipCpp->type() == "graduatedSymbol" ) + sipType = sipType_QgsGraduatedSymbolRenderer; + else if ( sipCpp->type() == "RuleRenderer" ) + sipType = sipType_QgsRuleBasedRenderer; + else if ( sipCpp->type() == "heatmapRenderer" ) + sipType = sipType_QgsHeatmapRenderer; + else if ( sipCpp->type() == "invertedPolygonRenderer" ) + sipType = sipType_QgsInvertedPolygonRenderer; + else if ( sipCpp->type() == "pointCluster" ) + sipType = sipType_QgsPointClusterRenderer; + else if ( sipCpp->type() == "pointDisplacement" ) + sipType = sipType_QgsPointDisplacementRenderer; + else if ( sipCpp->type() == "25dRenderer" ) + sipType = sipType_Qgs25DRenderer; + else if ( sipCpp->type() == "nullSymbol" ) + sipType = sipType_QgsNullSymbolRenderer; + else + sipType = 0; + SIP_END +#endif + public: // renderer takes ownership of its symbols! diff --git a/src/core/symbology-ng/qgssymbol.h b/src/core/symbology-ng/qgssymbol.h index 0e70454a8e0d..0de148b49e37 100644 --- a/src/core/symbology-ng/qgssymbol.h +++ b/src/core/symbology-ng/qgssymbol.h @@ -59,6 +59,19 @@ typedef QList QgsSymbolLayerList; */ class CORE_EXPORT QgsSymbol { + +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + switch ( sipCpp->type() ) + { + case QgsSymbol::Marker: sipType = sipType_QgsMarkerSymbol; break; + case QgsSymbol::Line: sipType = sipType_QgsLineSymbol; break; + case QgsSymbol::Fill: sipType = sipType_QgsFillSymbol; break; + default: sipType = 0; break; + } + SIP_END +#endif + friend class QgsFeatureRenderer; public: diff --git a/src/core/symbology-ng/qgssymbollayer.h b/src/core/symbology-ng/qgssymbollayer.h index d4885046c07b..2af45a3f368d 100644 --- a/src/core/symbology-ng/qgssymbollayer.h +++ b/src/core/symbology-ng/qgssymbollayer.h @@ -50,7 +50,70 @@ class QgsPaintEffect; * \class QgsSymbolLayer */ class CORE_EXPORT QgsSymbolLayer +#ifdef SIP_RUN +#include +#endif { + +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + switch ( sipCpp->type() ) + { + case QgsSymbol::Marker: + if ( sipCpp->layerType() == "EllipseMarker" ) + sipType = sipType_QgsEllipseSymbolLayer; + else if ( sipCpp->layerType() == "FontMarker" ) + sipType = sipType_QgsFontMarkerSymbolLayer; + else if ( sipCpp->layerType() == "SimpleMarker" ) + sipType = sipType_QgsSimpleMarkerSymbolLayer; + else if ( sipCpp->layerType() == "FilledMarker" ) + sipType = sipType_QgsFilledMarkerSymbolLayer; + else if ( sipCpp->layerType() == "SvgMarker" ) + sipType = sipType_QgsSvgMarkerSymbolLayer; + else if ( sipCpp->layerType() == "VectorField" ) + sipType = sipType_QgsVectorFieldSymbolLayer; + else + sipType = sipType_QgsMarkerSymbolLayer; + break; + + case QgsSymbol::Line: + if ( sipCpp->layerType() == "MarkerLine" ) + sipType = sipType_QgsMarkerLineSymbolLayer; + else if ( sipCpp->layerType() == "SimpleLine" ) + sipType = sipType_QgsSimpleLineSymbolLayer; + else if ( sipCpp->layerType() == "ArrowLine" ) + sipType = sipType_QgsArrowSymbolLayer; + else + sipType = sipType_QgsLineSymbolLayer; + break; + + case QgsSymbol::Fill: + if ( sipCpp->layerType() == "SimpleFill" ) + sipType = sipType_QgsSimpleFillSymbolLayer; + else if ( sipCpp->layerType() == "LinePatternFill" ) + sipType = sipType_QgsLinePatternFillSymbolLayer; + else if ( sipCpp->layerType() == "PointPatternFill" ) + sipType = sipType_QgsPointPatternFillSymbolLayer; + else if ( sipCpp->layerType() == "SVGFill" ) + sipType = sipType_QgsSVGFillSymbolLayer; + else if ( sipCpp->layerType() == "RasterFill" ) + sipType = sipType_QgsRasterFillSymbolLayer; + else if ( sipCpp->layerType() == "CentroidFill" ) + sipType = sipType_QgsCentroidFillSymbolLayer; + else if ( sipCpp->layerType() == "GradientFill" ) + sipType = sipType_QgsGradientFillSymbolLayer; + else if ( sipCpp->layerType() == "ShapeburstFill" ) + sipType = sipType_QgsShapeburstFillSymbolLayer; + else + sipType = sipType_QgsFillSymbolLayer; + break; + + case QgsSymbol::Hybrid: + sipType = sipType_QgsGeometryGeneratorSymbolLayer; + break; + } + SIP_END +#endif public: /** diff --git a/src/gui/layertree/qgslayertreeview.h b/src/gui/layertree/qgslayertreeview.h index be593c8ce0b5..8ea2a638971f 100644 --- a/src/gui/layertree/qgslayertreeview.h +++ b/src/gui/layertree/qgslayertreeview.h @@ -47,6 +47,17 @@ class QgsMapLayer; */ class GUI_EXPORT QgsLayerTreeView : public QTreeView { + +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + if ( sipCpp->inherits( "QgsLayerTreeView" ) ) + sipType = sipType_QgsLayerTreeView; + else + sipType = 0; + SIP_END +#endif + + Q_OBJECT public: explicit QgsLayerTreeView( QWidget *parent SIP_TRANSFERTHIS = 0 ); diff --git a/src/gui/qgsmaptool.h b/src/gui/qgsmaptool.h index a34adde40c9e..5d4953f2948c 100644 --- a/src/gui/qgsmaptool.h +++ b/src/gui/qgsmaptool.h @@ -41,6 +41,18 @@ class QPoint; class QAction; class QAbstractButton; +#ifdef SIP_RUN +% ModuleHeaderCode +// fix to allow compilation with sip 4.7 that for some reason +// doesn't add these includes to the file where the code from +// ConvertToSubClassCode goes. +#include +#include +#include +#include +% End +#endif + /** \ingroup gui * Abstract base class for all map tools. * Map tools are user interactive tools for manipulating the @@ -50,6 +62,21 @@ class QAbstractButton; class GUI_EXPORT QgsMapTool : public QObject { +#ifdef SIP_RUN + SIP_CONVERT_TO_SUBCLASS_CODE + if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsMapToolZoom; + else if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsMapToolPan; + else if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsMapToolEmitPoint; + else if ( dynamic_cast( sipCpp ) != NULL ) + sipType = sipType_QgsMapToolIdentify; + else + sipType = NULL; + SIP_END +#endif + Q_OBJECT public: