Skip to content
Permalink
Browse files

Revived globe, compatible with OsgEarth 2.7

  • Loading branch information
manisandro committed May 26, 2016
1 parent ed1235d commit 90887f460f9f1285632ab55859d469acd4188419
Showing with 14,541 additions and 6,434 deletions.
  1. +3 −0 cmake/FindOSGEARTH.cmake
  2. +1 −0 images/images.qrc
  3. +151 −0 images/themes/default/sync_views.svg
  4. +1 −0 python/core/core.sip
  5. +5 −0 python/core/qgsmapsettings.sip
  6. +25 −0 python/core/qgsplugininterface.sip
  7. +1 −1 python/core/qgsrectangle.sip
  8. +2 −0 python/gui/gui.sip
  9. +6 −0 python/gui/qgisinterface.sip
  10. +15 −0 python/gui/qgsmaplayerpropertiesfactory.sip
  11. +15 −0 python/gui/qgsvectorlayerpropertiespage.sip
  12. +14 −0 src/app/qgisapp.cpp
  13. +9 −0 src/app/qgisapp.h
  14. +10 −0 src/app/qgisappinterface.cpp
  15. +6 −0 src/app/qgisappinterface.h
  16. +21 −0 src/app/qgsvectorlayerproperties.cpp
  17. +8 −0 src/app/qgsvectorlayerproperties.h
  18. +2 −0 src/core/CMakeLists.txt
  19. +6 −0 src/core/qgsmapsettings.h
  20. 0 src/core/qgsplugininterface.cpp
  21. +29 −0 src/core/qgsplugininterface.h
  22. +1 −1 src/core/qgsrectangle.cpp
  23. +1 −1 src/core/qgsrectangle.h
  24. +5 −0 src/gui/CMakeLists.txt
  25. +7 −0 src/gui/qgisinterface.h
  26. +48 −0 src/gui/qgsbillboardregistry.cpp
  27. +54 −0 src/gui/qgsbillboardregistry.h
  28. +20 −0 src/gui/qgsmaplayerpropertiesfactory.cpp
  29. +32 −0 src/gui/qgsmaplayerpropertiesfactory.h
  30. +22 −0 src/gui/qgsvectorlayerpropertiespage.cpp
  31. +35 −0 src/gui/qgsvectorlayerpropertiespage.h
  32. +59 −58 src/plugins/globe/CMakeLists.txt
  33. +11 −0 src/plugins/globe/CMakeModules/ModuleInstallOsgEarthDriverIncludes.cmake
  34. +361 −0 src/plugins/globe/CMakeModules/OsgEarthMacroUtils.cmake
  35. +50 −0 src/plugins/globe/featuresource/CMakeLists.txt
  36. +66 −0 src/plugins/globe/featuresource/qgsglobefeaturecursor.h
  37. +81 −0 src/plugins/globe/featuresource/qgsglobefeatureoptions.h
  38. +145 −0 src/plugins/globe/featuresource/qgsglobefeaturesource.cpp
  39. +48 −0 src/plugins/globe/featuresource/qgsglobefeaturesource.h
  40. +254 −0 src/plugins/globe/featuresource/qgsglobefeatureutils.h
  41. +902 −997 src/plugins/globe/globe_plugin.cpp
  42. +123 −207 src/plugins/globe/globe_plugin.h
  43. +2 −2 src/plugins/globe/globe_plugin.qrc
  44. +0 −700 src/plugins/globe/globe_plugin_dialog.cpp
  45. +0 −104 src/plugins/globe/globe_plugin_dialog.h
  46. +0 −782 src/plugins/globe/globe_plugin_dialog_guibase.ui
  47. BIN src/plugins/globe/images/gui/button-background-single.png
  48. BIN src/plugins/globe/images/gui/button-background.png
  49. BIN src/plugins/globe/images/gui/settings.png
  50. BIN src/plugins/globe/images/gui/zoom-in.png
  51. BIN src/plugins/globe/images/gui/zoom-out.png
  52. +143 −0 src/plugins/globe/images/icon.svg
  53. +0 −92 src/plugins/globe/osgEarthQt/Common
  54. +0 −91 src/plugins/globe/osgEarthQt/ViewerWidget
  55. +0 −167 src/plugins/globe/osgEarthQt/ViewerWidget.cpp
  56. +0 −693 src/plugins/globe/osgEarthUtil/Controls
  57. +0 −2,227 src/plugins/globe/osgEarthUtil/Controls.cpp
  58. +119 −0 src/plugins/globe/python/CMakeLists.txt
  59. +24 −0 src/plugins/globe/python/__init__.py
  60. +22 −0 src/plugins/globe/python/globe.sip
  61. +655 −0 src/plugins/globe/python/osg/osg/Camera.sip
  62. +779 −0 src/plugins/globe/python/osg/osg/Drawable.sip
  63. +168 −0 src/plugins/globe/python/osg/osg/Group.sip
  64. +431 −0 src/plugins/globe/python/osg/osg/Node.sip
  65. +253 −0 src/plugins/globe/python/osg/osg/Object.sip
  66. +60 −0 src/plugins/globe/python/osg/osg/RenderInfo.sip
  67. +100 −0 src/plugins/globe/python/osg/osg/Vec2d.sip
  68. +94 −0 src/plugins/globe/python/osg/osg/Vec2f.sip
  69. +101 −0 src/plugins/globe/python/osg/osg/Vec3d.sip
  70. +93 −0 src/plugins/globe/python/osg/osg/Vec3f.sip
  71. +178 −0 src/plugins/globe/python/osg/osg/View.sip
  72. +17 −0 src/plugins/globe/python/osg/osg/osg.sip
  73. +55 −0 src/plugins/globe/python/osg/osg/stdstring.sip
  74. +111 −0 src/plugins/globe/python/osg/osgGA/GUIEventHandler.sip
  75. +7 −0 src/plugins/globe/python/osg/osgGA/osgGA.sip
  76. +251 −0 src/plugins/globe/python/osg/osgViewer/View.sip
  77. +123 −0 src/plugins/globe/python/osg/osgViewer/Viewer.sip
  78. +9 −0 src/plugins/globe/python/osg/osgViewer/osgViewer.sip
  79. +52 −0 src/plugins/globe/python/osgEarth/Bounds.sip
  80. +25 −0 src/plugins/globe/python/osgEarth/Common.sip
  81. +502 −0 src/plugins/globe/python/osgEarth/Config.sip
  82. +234 −0 src/plugins/globe/python/osgEarth/Features/Feature.sip
  83. +153 −0 src/plugins/globe/python/osgEarth/Features/FeatureSourceIndexNode.sip
  84. +8 −0 src/plugins/globe/python/osgEarth/Features/Features.sip
  85. +57 −0 src/plugins/globe/python/osgEarth/GeoCommon.sip
  86. +482 −0 src/plugins/globe/python/osgEarth/GeoData.sip
  87. +268 −0 src/plugins/globe/python/osgEarth/ImageLayer.sip
  88. +47 −0 src/plugins/globe/python/osgEarth/Layer.sip
  89. +361 −0 src/plugins/globe/python/osgEarth/Map.sip
  90. +202 −0 src/plugins/globe/python/osgEarth/MapNode.sip
  91. +192 −0 src/plugins/globe/python/osgEarth/ModelLayer.sip
  92. +154 −0 src/plugins/globe/python/osgEarth/ModelSource.sip
  93. +169 −0 src/plugins/globe/python/osgEarth/Revisioning.sip
  94. +325 −0 src/plugins/globe/python/osgEarth/SpatialReference.sip
  95. +357 −0 src/plugins/globe/python/osgEarth/Symbology/Geometry.sip
  96. +7 −0 src/plugins/globe/python/osgEarth/Symbology/Symbology.sip
  97. +263 −0 src/plugins/globe/python/osgEarth/Terrain.sip
  98. +917 −0 src/plugins/globe/python/osgEarth/Util/EarthManipulator.sip
  99. +155 −0 src/plugins/globe/python/osgEarth/Util/FeatureQueryTool.sip
  100. +11 −0 src/plugins/globe/python/osgEarth/Util/Util.sip
  101. +97 −0 src/plugins/globe/python/osgEarth/optional.sip
  102. +22 −0 src/plugins/globe/python/osgEarth/osgEarth.sip
  103. +16 −0 src/plugins/globe/python/qgsglobefeatureutils.sip
  104. +44 −0 src/plugins/globe/python/qgsglobeinterface.sip
  105. +85 −0 src/plugins/globe/qgsglobefeatureidentify.cpp
  106. +48 −0 src/plugins/globe/qgsglobefeatureidentify.h
  107. +59 −0 src/plugins/globe/qgsglobefrustumhighlight.cpp
  108. +44 −0 src/plugins/globe/qgsglobefrustumhighlight.h
  109. +48 −0 src/plugins/globe/qgsglobeinterface.cpp
  110. +46 −0 src/plugins/globe/qgsglobeinterface.h
  111. +532 −0 src/plugins/globe/qgsglobeplugindialog.cpp
  112. +83 −0 src/plugins/globe/qgsglobeplugindialog.h
  113. +665 −0 src/plugins/globe/qgsglobeplugindialog.ui
  114. +301 −0 src/plugins/globe/qgsglobetilesource.cpp
  115. +138 −0 src/plugins/globe/qgsglobetilesource.h
  116. +288 −0 src/plugins/globe/qgsglobevectorlayerproperties.cpp
  117. +121 −0 src/plugins/globe/qgsglobevectorlayerproperties.h
  118. +272 −0 src/plugins/globe/qgsglobevectorlayerpropertiespage.ui
  119. +153 −0 src/plugins/globe/qgsglobewidget.cpp
  120. +43 −0 src/plugins/globe/qgsglobewidget.h
  121. +0 −225 src/plugins/globe/qgsosgearthtilesource.cpp
  122. +0 −86 src/plugins/globe/qgsosgearthtilesource.h
  123. +20 −0 src/plugins/globe/qgsosgfeature.cpp
  124. +25 −0 src/plugins/globe/qgsosgfeature.h
@@ -96,6 +96,9 @@ FIND_OSGEARTH_LIBRARY( OSGEARTHSYMBOLOGY_LIBRARY_DEBUG osgEarthSymbologyd )
FIND_OSGEARTH_LIBRARY( OSGEARTHQT_LIBRARY osgEarthQt )
FIND_OSGEARTH_LIBRARY( OSGEARTHQT_LIBRARY_DEBUG osgEarthQtd )

FIND_OSGEARTH_LIBRARY( OSGEARTHANNOTATION_LIBRARY osgEarthAnnotation )
FIND_OSGEARTH_LIBRARY( OSGEARTHANNOTATION_LIBRARY_DEBUG osgEarthAnnotationd )


SET( OSGEARTH_FOUND "NO" )
IF( OSGEARTH_LIBRARY AND OSGEARTH_INCLUDE_DIR )
@@ -522,6 +522,7 @@
<file>themes/default/symbologyRemove.svg</file>
<file>themes/default/symbologyUp.png</file>
<file>themes/default/symbologyUp.svg</file>
<file>themes/default/sync_views.svg</file>
<file>themes/default/text.png</file>
<file>themes/default/tracking.png</file>
<file>themes/default/transformed.png</file>
@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 16 16"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="sync_views.svg">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient4158">
<stop
style="stop-color:#0000ff;stop-opacity:1"
offset="0"
id="stop4160" />
<stop
style="stop-color:#0000a9;stop-opacity:1"
offset="1"
id="stop4162" />
</linearGradient>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Mend"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path4171"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(0.6) rotate(180) translate(0,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-8"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path4171-2"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4158"
id="radialGradient4178"
cx="7.9999766"
cy="1040.8622"
fx="7.9999766"
fy="1040.8622"
r="6.9999766"
gradientTransform="matrix(1,0,0,0.49999621,0,520.43504)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4158"
id="radialGradient4178-3"
cx="7.9999766"
cy="1040.8622"
fx="7.9999766"
fy="1040.8622"
r="6.9999766"
gradientTransform="matrix(-1,0,0,0.49999621,16,527.43502)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="18.5"
inkscape:cx="0.59568033"
inkscape:cy="10.721345"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true"
inkscape:window-width="1600"
inkscape:window-height="829"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid4136" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<g
id="g4865">
<path
style="fill:url(#radialGradient4178);fill-opacity:1;fill-rule:evenodd;stroke:#0000a9;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 1.5,1040.8622 0,1 8,0 0,2 5,-3 -5,-3 0,2 -8,0 z"
id="path4156"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:url(#radialGradient4178-3);fill-opacity:1;fill-rule:evenodd;stroke:#0000a9;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 14.5,1047.8622 0,1 -7.9999996,0 0,2 -5,-3 5,-3 0,2 7.9999996,0 z"
id="path4156-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
</g>
</g>
</svg>
@@ -103,6 +103,7 @@
%Include qgsowsconnection.sip
%Include qgspaintenginehack.sip
%Include qgspallabeling.sip
%Include qgsplugininterface.sip
%Include qgspluginlayer.sip
%Include qgspluginlayerregistry.sip
%Include qgspoint.sip
@@ -60,6 +60,11 @@ class QgsMapSettings
//! @note added in 2.8
void setLayerStyleOverrides( const QMap<QString, QString>& overrides );

//! Get custom rendering flags, separated by ';'. Layers might honour these to alter their rendering.
const QString& customRenderFlags() const;
//! Set custom rendering flags, separated by ';'. Layers might honour these to alter their rendering.
void setCustomRenderFlags( const QString& customRenderFlags );

//! sets whether to use projections for this layer set
void setCrsTransformEnabled( bool enabled );
//! returns true if projections are enabled for this layer set
@@ -0,0 +1,25 @@
/***************************************************************************
qgsplugininterface.sip
--------------------------------------
Date : 21.8.2013
Copyright : (C) 2013 Matthias Kuhn
Email : matthias dot kuhn at gmx dot ch
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/

class QgsPluginInterface : QObject
{
%TypeHeaderCode
#include "qgsplugininterface.h"
%End

// Should only be instantiated from subclasses
private:
QgsPluginInterface( QObject* parent = 0 );
};
@@ -74,7 +74,7 @@ class QgsRectangle
//! return true when rectangle contains a point
bool contains( const QgsPoint &p ) const;
//! expand the rectangle so that covers both the original rectangle and the given rectangle
void combineExtentWith( QgsRectangle *rect );
void combineExtentWith( const QgsRectangle *rect );
//! expand the rectangle so that covers both the original rectangle and the given point
void combineExtentWith( double x, double y );
//! test if rectangle is empty.
@@ -102,6 +102,7 @@
%Include qgsmaplayeractionregistry.sip
%Include qgsmaplayercombobox.sip
%Include qgsmaplayermodel.sip
%Include qgsmaplayerpropertiesfactory.sip
%Include qgsmaplayerproxymodel.sip
%Include qgsmapmouseevent.sip
%Include qgsmapoverviewcanvas.sip
@@ -155,6 +156,7 @@
%Include qgsunitselectionwidget.sip
%Include qgsuserinputdockwidget.sip
%Include qgsvariableeditorwidget.sip
%Include qgsvectorlayerpropertiespage.sip
%Include qgsvectorlayertools.sip
%Include qgsvertexmarker.sip

@@ -279,6 +279,12 @@ class QgisInterface : QObject
/** Unregister a previously registered action. (e.g. when plugin is going to be unloaded) */
virtual bool unregisterMainWindowAction( QAction* action ) = 0;

/** Register a new tab in the vector layer properties dialog */
virtual void registerMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory ) = 0;

/** Unregister a previously registered tab in the layer properties dialog */
virtual void unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory ) = 0;

// @todo is this deprecated in favour of QgsContextHelp?
/** Open a url in the users browser. By default the QGIS doc directory is used
* as the base for the URL. To open a URL that is not relative to the installed
@@ -0,0 +1,15 @@
/** \ingroup gui
* \note added in 2.1
*/
class QgsMapLayerPropertiesFactory
{
%TypeHeaderCode
#include <qgsmaplayerpropertiesfactory.h>
%End

public:
QgsMapLayerPropertiesFactory();

virtual QgsVectorLayerPropertiesPage* createVectorLayerPropertiesPage( QgsVectorLayer* layer, QWidget* parent ) = 0;
virtual QListWidgetItem* createVectorLayerPropertiesItem( QgsVectorLayer* layer, QListWidget* view ) = 0;
};
@@ -0,0 +1,15 @@
/** \ingroup gui
* \note added in 2.1
*/
class QgsVectorLayerPropertiesPage : QWidget
{
%TypeHeaderCode
#include <qgsvectorlayerpropertiespage.h>
%End

public:
explicit QgsVectorLayerPropertiesPage( QWidget *parent = 0 );

public slots:
virtual void apply() = 0;
};
@@ -8841,6 +8841,16 @@ void QgisApp::openURL( QString url, bool useQgisDocDirectory )
#endif
}

void QgisApp::registerMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory )
{
mMapLayerPropertiesFactories << factory;
}

void QgisApp::unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory )
{
mMapLayerPropertiesFactories.removeAll( factory );
}

/** Get a pointer to the currently selected map layer */
QgsMapLayer *QgisApp::activeLayer()
{
@@ -11052,6 +11062,10 @@ void QgisApp::showLayerProperties( QgsMapLayer *ml )
#else
QgsVectorLayerProperties *vlp = new QgsVectorLayerProperties( vlayer, this );
#endif
foreach ( QgsMapLayerPropertiesFactory* factory, mMapLayerPropertiesFactories )
{
vlp->addPropertiesPageFactory( factory );
}

if ( vlp->exec() )
{
@@ -55,6 +55,7 @@ class QgsLayerTreeMapCanvasBridge;
class QgsLayerTreeView;
class QgsMapCanvas;
class QgsMapLayer;
class QgsMapLayerPropertiesFactory;
class QgsMapTip;
class QgsMapTool;
class QgsMapToolAdvancedDigitizing;
@@ -502,6 +503,12 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow

void parseVersionInfo( QNetworkReply* reply, int& latestVersion, QStringList& versionInfo );

/** Register a new tab in the layer properties dialog */
void registerMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory );

/** Unregister a previously registered tab in the layer properties dialog */
void unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory );

public slots:
void layerTreeViewDoubleClicked( const QModelIndex& index );
//! Make sure the insertion point for new layers is up-to-date with the current item in layer tree view
@@ -1753,6 +1760,8 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow

QgsSnappingUtils* mSnappingUtils;

QList<QgsMapLayerPropertiesFactory*> mMapLayerPropertiesFactories;

QDateTime mProjectLastModified;

QgsWelcomePage* mWelcomePage;
@@ -475,6 +475,16 @@ bool QgisAppInterface::unregisterMainWindowAction( QAction* action )
return QgsShortcutsManager::instance()->unregisterAction( action );
}

void QgisAppInterface::registerMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory )
{
qgis->registerMapLayerPropertiesFactory( factory );
}

void QgisAppInterface::unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory )
{
qgis->unregisterMapLayerPropertiesFactory( factory );
}

//! Menus
Q_DECL_DEPRECATED QMenu *QgisAppInterface::fileMenu() { return qgis->projectMenu(); }
QMenu *QgisAppInterface::projectMenu() { return qgis->projectMenu(); }
@@ -288,6 +288,12 @@ class APP_EXPORT QgisAppInterface : public QgisInterface
/** Unregister a previously registered action. (e.g. when plugin is going to be unloaded. */
virtual bool unregisterMainWindowAction( QAction* action ) override;

/** Register a new tab in the layer properties dialog */
virtual void registerMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory ) override;

/** Unregister a previously registered tab in the layer properties dialog */
virtual void unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory ) override;

/** Accessors for inserting items into menus and toolbars.
* An item can be inserted before any existing action.
*/

0 comments on commit 90887f4

Please sign in to comment.
You can’t perform that action at this time.