Skip to content
Permalink
Browse files

Merge remote-tracking branch 'origin'

  • Loading branch information
NathanW2 committed Aug 25, 2015
2 parents 2f60a5f + 039b4fb commit 01d635a9aef2a9d344c50510fd69336b21aff6d6
Showing with 4,544 additions and 2,842 deletions.
  1. +2 −1 debian/changelog
  2. +4 −4 debian/control.in
  3. +12 −2 debian/rules
  4. +2 −0 images/images.qrc
  5. BIN images/themes/default/mActionCircularStringCurvePoint.png
  6. BIN images/themes/default/mActionCircularStringRadius.png
  7. +1 −0 ms-windows/osgeo4w/package.cmd
  8. +1 −1 python/core/geometry/qgsabstractgeometryv2.sip
  9. +1 −1 python/core/geometry/qgscircularstringv2.sip
  10. +1 −1 python/core/geometry/qgscompoundcurvev2.sip
  11. +1 −1 python/core/geometry/qgscurvepolygonv2.sip
  12. +1 −1 python/core/geometry/qgsgeometrycollectionv2.sip
  13. +1 −1 python/core/geometry/qgslinestringv2.sip
  14. +4 −3 python/plugins/db_manager/db_plugins/data_model.py
  15. +43 −25 python/plugins/db_manager/dlg_import_vector.py
  16. +1 −6 python/plugins/processing/algs/otb/maintenance/OTBHelper.py
  17. +2 −0 resources/function_help/General
  18. +34 −0 resources/function_help/layer_property
  19. +1 −0 scripts/spelling.dat
  20. +5 −0 src/app/CMakeLists.txt
  21. +28 −5 src/app/qgisapp.cpp
  22. +6 −0 src/app/qgisapp.h
  23. +1 −1 src/app/qgsjoindialog.cpp
  24. +182 −0 src/app/qgsmaptooladdcircularstring.cpp
  25. +55 −0 src/app/qgsmaptooladdcircularstring.h
  26. +30 −37 src/app/qgsmaptooladdfeature.cpp
  27. +41 −20 src/app/qgsmaptooladdpart.cpp
  28. +19 −1 src/app/qgsmaptooladdring.cpp
  29. +95 −9 src/app/qgsmaptoolcapture.cpp
  30. +11 −6 src/app/qgsmaptoolcapture.h
  31. +87 −0 src/app/qgsmaptoolcircularstringcurvepoint.cpp
  32. +32 −0 src/app/qgsmaptoolcircularstringcurvepoint.h
  33. +170 −0 src/app/qgsmaptoolcircularstringradius.cpp
  34. +52 −0 src/app/qgsmaptoolcircularstringradius.h
  35. +16 −0 src/app/qgsmaptooledit.cpp
  36. +4 −0 src/app/qgsmaptooledit.h
  37. +1 −1 src/app/qgstipfactory.cpp
  38. +3 −1 src/core/geometry/qgsabstractgeometryv2.h
  39. +2 −2 src/core/geometry/qgscircularstringv2.cpp
  40. +5 −1 src/core/geometry/qgscircularstringv2.h
  41. +2 −2 src/core/geometry/qgscompoundcurvev2.cpp
  42. +5 −1 src/core/geometry/qgscompoundcurvev2.h
  43. +3 −3 src/core/geometry/qgscurvepolygonv2.cpp
  44. +5 −1 src/core/geometry/qgscurvepolygonv2.h
  45. +6 −0 src/core/geometry/qgsgeometry.cpp
  46. +2 −2 src/core/geometry/qgsgeometrycollectionv2.cpp
  47. +5 −1 src/core/geometry/qgsgeometrycollectionv2.h
  48. +2 −2 src/core/geometry/qgslinestringv2.cpp
  49. +6 −1 src/core/geometry/qgslinestringv2.h
  50. +2 −2 src/core/geometry/qgspointv2.cpp
  51. +6 −1 src/core/geometry/qgspointv2.h
  52. +86 −18 src/core/qgsexpression.cpp
  53. +2 −29 src/core/qgsexpressioncontext.cpp
  54. +3 −1 src/core/qgsvectordataprovider.h
  55. +49 −6 src/core/qgsvectorlayer.cpp
  56. +11 −0 src/core/qgsvectorlayer.h
  57. +40 −17 src/core/qgsvectorlayereditutils.cpp
  58. +13 −0 src/core/qgsvectorlayereditutils.h
  59. +17 −3 src/gui/qgsidentifymenu.cpp
  60. +2 −0 src/plugins/grass/CMakeLists.txt
  61. +2 −1 src/plugins/grass/modules/db.in.ogr.qgm
  62. +4 −2 src/plugins/grass/modules/db.out.ogr.qgm
  63. +6 −6 src/plugins/grass/modules/default.qgc
  64. +2 −1 src/plugins/grass/modules/g.region.multiple.raster.qgm
  65. +2 −1 src/plugins/grass/modules/g.region.multiple.vector.qgm
  66. +4 −2 src/plugins/grass/modules/i.in.spotvgt.qgm
  67. +0 −1 src/plugins/grass/modules/r.external.all.qgm
  68. +8 −5 src/plugins/grass/modules/r.in.ascii.qgm
  69. +19 −8 src/plugins/grass/modules/r.in.wms.qgm
  70. +2 −1 src/plugins/grass/modules/r.in.xyz.qgm
  71. +4 −2 src/plugins/grass/modules/r.out.ascii.qgm
  72. +2 −1 src/plugins/grass/modules/r.out.mpeg.qgm
  73. +4 −2 src/plugins/grass/modules/r.out.pov.qgm
  74. +2 −1 src/plugins/grass/modules/r.out.ppm.qgm
  75. +4 −2 src/plugins/grass/modules/r.out.vrml.qgm
  76. +6 −3 src/plugins/grass/modules/r.out.vtk.qgm
  77. +2 −1 src/plugins/grass/modules/r.out.xyz.qgm
  78. +4 −2 src/plugins/grass/modules/r.stats.qgm
  79. +2 −1 src/plugins/grass/modules/r.to.vect.area.qgm
  80. +2 −1 src/plugins/grass/modules/r.to.vect.line.qgm
  81. +2 −1 src/plugins/grass/modules/r.to.vect.point.qgm
  82. +2 −1 src/plugins/grass/modules/v.in.ascii.qgm
  83. +4 −2 src/plugins/grass/modules/v.in.e00.qgm
  84. +8 −2 src/plugins/grass/modules/v.in.ogr.all.loc.qgm
  85. +8 −2 src/plugins/grass/modules/v.in.ogr.all.qgm
  86. +8 −2 src/plugins/grass/modules/v.in.ogr.loc.qgm
  87. +8 −2 src/plugins/grass/modules/v.in.ogr.qgis.loc.qgm
  88. +11 −5 src/plugins/grass/modules/v.in.ogr.qgis.qgm
  89. +8 −2 src/plugins/grass/modules/v.in.ogr.qgm
  90. +2 −1 src/plugins/grass/modules/v.out.ascii.qgm
  91. +4 −2 src/plugins/grass/modules/v.out.ogr.gml.qgm
  92. +2 −1 src/plugins/grass/modules/v.out.ogr.mapinfo.qgm
  93. +4 −2 src/plugins/grass/modules/v.out.ogr.qgm
  94. +2 −1 src/plugins/grass/modules/v.out.vtk.qgm
  95. +2 −1 src/plugins/grass/modules/v.to.rast.attr.qgm
  96. +0 −25 src/plugins/grass/qgsgrassmodule.cpp
  97. +0 −3 src/plugins/grass/qgsgrassmodule.h
  98. +220 −1,871 src/plugins/grass/qgsgrassmoduleoptions.cpp
  99. +17 −607 src/plugins/grass/qgsgrassmoduleoptions.h
  100. +1,820 −0 src/plugins/grass/qgsgrassmoduleparam.cpp
  101. +650 −0 src/plugins/grass/qgsgrassmoduleparam.h
  102. +10 −1 src/plugins/grass/qgsgrassplugin.cpp
  103. +3 −1 src/plugins/grass/qgsgrassplugin.h
  104. +7 −1 src/plugins/grass/qgsgrasstools.cpp
  105. +3 −0 src/plugins/grass/qgsgrasstools.h
  106. +28 −15 src/providers/grass/qgsgrass.cpp
  107. +5 −1 src/providers/grass/qgsgrass.h
  108. +15 −9 src/providers/grass/qgsgrassprovider.cpp
  109. +2 −0 src/providers/grass/qgsgrassprovidermodule.cpp
  110. +3 −0 src/providers/mssql/qgsmssqlprovider.cpp
  111. +6 −0 src/providers/postgres/qgspostgresprovider.cpp
  112. +3 −0 src/providers/spatialite/qgsspatialiteprovider.cpp
  113. +27 −1 src/ui/qgisapp.ui
  114. +52 −0 tests/src/core/testqgsexpression.cpp
  115. +2 −2 tests/src/core/testqgsfeature.cpp
  116. +30 −0 tests/src/core/testqgsgeometry.cpp
  117. +14 −2 tests/src/core/testqgsmaprotation.cpp
  118. BIN .../control_images/maprotation/expected_lines-parallel-label+45/expected_lines-parallel-label+45.png
  119. BIN ...rol_images/maprotation/expected_lines-parallel-label+45/expected_lines-parallel-label+45_mask.png
  120. +247 −11 tests/testdata/lines_cardinals_arrowed_parallel_label.qml
@@ -2,8 +2,9 @@ qgis (2.11.0) UNRELEASED; urgency=medium

* New development version 2.11 after branch of 2.10
* moved grass default.qgc from config to modules
* include grass7 plugin

-- Jürgen E. Fischer <jef@norbit.de> Fri, 24 Jul 2015 08:37:55 +0200
-- Jürgen E. Fischer <jef@norbit.de> Tue, 25 Aug 2015 00:14:25 +0200

qgis (2.10.0) unstable; urgency=medium

@@ -9,7 +9,7 @@ Build-Depends:
#sid stretch jessie wheezy saucy sid-oracle trusty utopic vivid# debhelper (>= 9),
#precise# debhelper (>= 7),
flex,
grass-dev (<< 7),
grass-dev,
libexpat1-dev,
libfcgi-dev,
#sid stretch jessie sid-oracle trusty utopic vivid# libgdal-dev (>= 1.10.1-0~),
@@ -23,8 +23,8 @@ Build-Depends:
libqt4-dev (>= 4.7.0),
libqt4-opengl-dev,
libqtwebkit-dev,
#sid stretch jessie wheezy sid-oracle# libqwt-dev,
#precise saucy trusty utopic vivid# libqwt5-qt4-dev,
#stretch jessie wheezy sid-oracle# libqwt-dev,
#precise saucy trusty utopic vivid sid# libqwt5-qt4-dev,
libspatialite-dev,
libsqlite3-dev,
libspatialindex-dev,
@@ -273,7 +273,7 @@ Depends:
qgis-plugin-grass-common (= ${source:Version}),
${shlibs:Depends},
${misc:Depends},
#!precise# grass-core (<< 7)
#!precise# grass-core
#precise# grass (<< 7)
Description: GRASS plugin for QGIS
QGIS is a Geographic Information System (GIS) which manages, analyzes and
@@ -47,13 +47,11 @@ CMAKE_OPTS := \
-DBUILDNAME=$(DEB_BUILD_NAME) \
-DCMAKE_VERBOSE_MAKEFILE=1 \
-DCMAKE_INSTALL_PREFIX=/usr \
-DGRASS_PREFIX=/usr/lib/$(GRASS) \
-DBINDINGS_GLOBAL_INSTALL=TRUE \
-DPEDANTIC=TRUE \
-DWITH_QSPATIALITE=TRUE \
-DWITH_SERVER=TRUE \
-DWITH_SERVER_PLUGINS=TRUE \
-DWITH_GRASS7=FALSE \
-DSERVER_SKIP_ECW=TRUE \
-DQGIS_CGIBIN_SUBDIR=/usr/lib/cgi-bin \
-DWITH_APIDOC=TRUE \
@@ -107,6 +105,18 @@ else
CMAKE_OPTS += -DENABLE_TESTS=TRUE
endif

ifeq ($(GRASSVER),7)
CMAKE_OPTS += \
-DWITH_GRASS=FALSE \
-DWITH_GRASS7=TRUE \
-DGRASS_PREFIX7=/usr/lib/$(GRASS)
else
CMAKE_OPTS += \
-DWITH_GRASS=TRUE \
-DWITH_GRASS7=FALSE \
-DGRASS_PREFIX=/usr/lib/$(GRASS)
endif

ifneq (,$(findstring $(DISTRIBUTION),"wheezy jessie stretch trusty sid sid-oracle"))
CPPFLAGS := $(shell dpkg-buildflags --get CPPFLAGS)
CFLAGS := $(shell dpkg-buildflags --get CFLAGS) $(CPPFLAGS)
@@ -508,6 +508,8 @@
<file>themes/default/mIconClear.png</file>
<file>flags/zh.png</file>
<file>themes/default/mIconPaintEffects.svg</file>
<file>themes/default/mActionCircularStringCurvePoint.png</file>
<file>themes/default/mActionCircularStringRadius.png</file>
</qresource>
<qresource prefix="/images/tips">
<file alias="symbol_levels.png">qgis_tips/symbol_levels.png</file>
Binary file not shown.
Binary file not shown.
@@ -364,6 +364,7 @@ tar -C %OSGEO4W_ROOT% -cjf %ARCH%/release/qgis/%PACKAGENAME%/%PACKAGENAME%-%VERS
--exclude "apps/%PACKAGENAME%/python/qgis/server" ^
"bin/%PACKAGENAME%-browser-bin.exe" ^
"bin/%PACKAGENAME%-bin.exe" ^
"bin/python-%PACKAGENAME%.bat.tmpl" ^
"apps/%PACKAGENAME%/bin/qgis.reg.tmpl" ^
"apps/%PACKAGENAME%/i18n/" ^
"apps/%PACKAGENAME%/icons/" ^
@@ -90,7 +90,7 @@ class QgsAbstractGeometryV2
virtual QgsRectangle calculateBoundingBox() const;

//render pipeline
virtual void transform( const QgsCoordinateTransform& ct ) = 0;
virtual void transform( const QgsCoordinateTransform& ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform ) = 0;
virtual void transform( const QTransform& t ) = 0;
//virtual void clip( const QgsRectangle& rect );
virtual void draw( QPainter& p ) const = 0;
@@ -38,7 +38,7 @@ class QgsCircularStringV2: public QgsCurveV2
virtual QgsLineStringV2* curveToLine() const;

void draw( QPainter& p ) const;
void transform( const QgsCoordinateTransform& ct );
void transform( const QgsCoordinateTransform& ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform );
void transform( const QTransform& t );
//void clip( const QgsRectangle& rect );
void addToPainterPath( QPainterPath& path ) const;
@@ -45,7 +45,7 @@ class QgsCompoundCurveV2: public QgsCurveV2
void close();

void draw( QPainter& p ) const;
void transform( const QgsCoordinateTransform& ct );
void transform( const QgsCoordinateTransform& ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform );
void transform( const QTransform& t );
void addToPainterPath( QPainterPath& path ) const;
void drawAsPolygon( QPainter& p ) const;
@@ -49,7 +49,7 @@ class QgsCurvePolygonV2: public QgsSurfaceV2
bool removeInteriorRing( int nr );

virtual void draw( QPainter& p ) const;
void transform( const QgsCoordinateTransform& ct );
void transform( const QgsCoordinateTransform& ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform );
void transform( const QTransform& t );

virtual bool insertVertex( const QgsVertexId& position, const QgsPointV2& vertex );
@@ -23,7 +23,7 @@ class QgsGeometryCollectionV2: public QgsAbstractGeometryV2
virtual bool addGeometry( QgsAbstractGeometryV2* g /Transfer/ );
virtual bool removeGeometry( int nr );

virtual void transform( const QgsCoordinateTransform& ct );
virtual void transform( const QgsCoordinateTransform& ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform );
void transform( const QTransform& t );
//virtual void clip( const QgsRectangle& rect );
virtual void draw( QPainter& p ) const;
@@ -38,7 +38,7 @@ class QgsLineStringV2: public QgsCurveV2
void append( const QgsLineStringV2* line );

void draw( QPainter& p ) const;
void transform( const QgsCoordinateTransform& ct );
void transform( const QgsCoordinateTransform& ct, QgsCoordinateTransform::TransformDirection d = QgsCoordinateTransform::ForwardTransform );
void transform( const QTransform& t );

void addToPainterPath( QPainterPath& path ) const;
@@ -211,9 +211,8 @@ def headerData(self, section, orientation, role):

def flags(self, index):
flags = SimpleTableModel.flags(self, index)
if index.column() == 2: # set Null column as checkable
flags &= ~Qt.ItemIsEditable
flags |= Qt.ItemIsUserCheckable
if index.column() == 2 and flags & Qt.ItemIsEditable: # set Null column as checkable instead of editable
flags = flags & ~Qt.ItemIsEditable | Qt.ItemIsUserCheckable
return flags

def append(self, fld):
@@ -222,6 +221,8 @@ def append(self, fld):
row = self.rowCount() - 1
self.setData(self.index(row, 0), fld, Qt.UserRole)
self.setData(self.index(row, 1), fld.primaryKey, Qt.UserRole)
self.setData(self.index(row, 2), None, Qt.DisplayRole)
self.setData(self.index(row, 2), Qt.Unchecked if fld.notNull else Qt.Checked, Qt.CheckStateRole)

def _getNewObject(self):
from .plugin import TableField
@@ -71,31 +71,33 @@ def setupWorkingMode(self, mode):
QObject.connect(self.cboInputLayer, SIGNAL("editTextChanged(const QString &)"), self.inputPathChanged)
#QObject.connect( self.cboInputLayer, SIGNAL("currentIndexChanged(int)"), self.updateInputLayer )
QObject.connect(self.btnUpdateInputLayer, SIGNAL("clicked()"), self.updateInputLayer)

self.editPrimaryKey.setText(self.default_pk)
self.editGeomColumn.setText(self.default_geom)
else:
# set default values
pk = self.outUri.keyColumn()
self.editPrimaryKey.setText(pk if pk != "" else self.default_pk)
if self.inLayer.hasGeometryType():
geom = self.outUri.geometryColumn()
self.editGeomColumn.setText(geom if geom != "" else self.default_geom)

inCrs = self.inLayer.crs()
srid = inCrs.postgisSrid() if inCrs.isValid() else 4236
self.editSourceSrid.setText("%s" % srid)
self.editTargetSrid.setText("%s" % srid)

self.checkSupports()
self.updateInputLayer()

def checkSupports(self):
""" update options available for the current input layer """
allowSpatial = self.db.connector.hasSpatialSupport()
hasGeomType = self.inLayer and self.inLayer.hasGeometryType()
isShapefile = self.inLayer and self.inLayer.providerType() == "ogr" and self.inLayer.storageType() == "ESRI Shapefile"

self.chkGeomColumn.setEnabled(allowSpatial and hasGeomType)
if not self.chkGeomColumn.isEnabled(): self.chkGeomColumn.setChecked(False)

self.chkSourceSrid.setEnabled(allowSpatial and hasGeomType)
if not self.chkSourceSrid.isEnabled(): self.chkSourceSrid.setChecked(False)
self.chkTargetSrid.setEnabled(allowSpatial and hasGeomType)
if not self.chkTargetSrid.isEnabled(): self.chkTargetSrid.setChecked(False)

self.chkSinglePart.setEnabled(allowSpatial and hasGeomType and isShapefile)
if not self.chkSinglePart.isEnabled(): self.chkSinglePart.setChecked(False)

self.chkSpatialIndex.setEnabled(allowSpatial and hasGeomType)
if not self.chkSpatialIndex.isEnabled(): self.chkSpatialIndex.setChecked(False)

def populateLayers(self):
self.cboInputLayer.clear()
@@ -139,10 +141,10 @@ def inputPathChanged(self, path):
self.cboInputLayer.setEditText(path)
self.cboInputLayer.blockSignals(False)

def updateInputLayer(self):
def reloadInputLayer(self):
""" create the input layer and update available options """
if self.mode != self.ASK_FOR_INPUT_MODE:
return
return True

self.deleteInputLayer()

@@ -166,10 +168,27 @@ def updateInputLayer(self):
self.inLayer = iface.legendInterface().layers()[legendIndex]
self.inLayerMustBeDestroyed = False

# update the output table name
self.checkSupports()
return True

def updateInputLayer(self):
if not self.reloadInputLayer() or not self.inLayer:
return False

# update the output table name, pk and geom column
self.cboTable.setEditText(self.inLayer.name())

self.checkSupports()
srcUri = qgis.core.QgsDataSourceURI(self.inLayer.source())
pk = srcUri.keyColumn() if srcUri.keyColumn() else self.default_pk
self.editPrimaryKey.setText(pk)
geom = srcUri.geometryColumn() if srcUri.geometryColumn() else self.default_geom
self.editGeomColumn.setText(geom)

srcCrs = self.inLayer.crs()
srid = srcCrs.postgisSrid() if srcCrs.isValid() else 4326
self.editSourceSrid.setText("%s" % srid)
self.editTargetSrid.setText("%s" % srid)

return True

def populateSchemas(self):
@@ -221,13 +240,9 @@ def populateEncodings(self):
def accept(self):
if self.mode == self.ASK_FOR_INPUT_MODE:
# create the input layer (if not already done) and
# update available options w/o changing the tablename!
self.cboTable.blockSignals(True)
table = self.cboTable.currentText()
self.updateInputLayer()
self.cboTable.setEditText(table)
self.cboTable.blockSignals(False)

# update available options
self.reloadInputLayer()

# sanity checks
if self.inLayer is None:
QMessageBox.information(self, self.tr("Import to database"), self.tr("Input layer missing or not valid"))
@@ -265,11 +280,14 @@ def accept(self):

# get pk and geom field names from the source layer or use the
# ones defined by the user
pk = self.outUri.keyColumn() if not self.chkPrimaryKey.isChecked() else self.editPrimaryKey.text()
srcUri = qgis.core.QgsDataSourceURI(self.inLayer.source())

pk = srcUri.keyColumn() if not self.chkPrimaryKey.isChecked() else self.editPrimaryKey.text()
if not pk: pk = self.default_pk

if self.inLayer.hasGeometryType() and self.chkGeomColumn.isEnabled():
geom = self.outUri.geometryColumn() if not self.chkGeomColumn.isChecked() else self.editGeomColumn.text()
geom = geom if geom != "" else self.default_geom
geom = srcUri.geometryColumn() if not self.chkGeomColumn.isChecked() else self.editGeomColumn.text()
if not geom: geom = self.default_geom
else:
geom = None

@@ -515,15 +515,10 @@ def adapt_list_to_string(c_list):

a_list[1] = "-%s" % a_list[1]

def myunicode(par):
if isinstance(par, list):
return ";".join(par)
return unicode(par)

if a_list[-1] is None:
return ""

b_list = map(mystr, a_list)
b_list = map(lambda x: ";".join(x) if isinstance(x, list) else unicode(x), a_list)
b_list = [b_list[1], b_list[-1]]
res = " ".join(b_list)
return res
@@ -0,0 +1,2 @@
<h3>General</h3>
This group contains general assorted functions.
@@ -0,0 +1,34 @@
<h3>layer_property function</h3>
Returns a matching layer property or metadata value.

<h4>Syntax</h4>
<pre>layer_property(layer,property)</pre>

<h4>Arguments</h4>
layer &rarr; a string, representing either a layer name or layer ID<br />
property &rarr; a string corresponding to the property to return. Valid options are:<br />
<ul>
<li>name: layer name</li>
<li>id: layer ID</li>
<li>title: metadata title string</li>
<li>abstract: metadata abstract string</li>
<li>keywords: metadata keywords</li>
<li>data_url: metadata URL</li>
<li>attribution: metadata attribution string</li>
<li>attribution_url: metadata attribution URL</li>
<li>source: layer source</li>
<li>min_scale: minimum display scale for layer</li>
<li>max_scale: maximum display scale for layer</li>
<li>crs: layer CRS</li>
<li>crs_definition: layer CRS full definition</li>
<li>extent: layer extent (as a geometry object)</li>
<li>type: layer type, eg Vector or Raster</li>
<li>storage_type: storage format (vector layers only)</li>
<li>geometry_type: geometry type, eg Point (vector layers only)</li>
<li>feature_count: approximate feature count for layer (vector layers only)</li>
</ul>
<h4>Example</h4>
<pre> layer_property('streets','title') &rarr; 'Basemap Streets'</pre><br />
<pre> layer_property('airports','feature_count') &rarr; 120</pre><br />
<pre> layer_property('landsat','crs') &rarr;'EPSG:4326'</pre>

@@ -475,3 +475,4 @@ stoped:stopped
tranform:transform
wich:which
comparaison:comparison
sofware:software
@@ -119,6 +119,9 @@ SET(QGIS_APP_SRCS
qgsvectorlayerproperties.cpp
qgsvisibilitypresets.cpp
qgshandlebadlayers.cpp
qgsmaptooladdcircularstring.cpp
qgsmaptoolcircularstringcurvepoint.cpp
qgsmaptoolcircularstringradius.cpp

composer/qgsattributeselectiondialog.cpp
composer/qgscomposer.cpp
@@ -217,6 +220,7 @@ SET (QGIS_APP_MOC_HDRS

qgsmaptooladdfeature.h
qgsmaptoolcapture.h
qgsmaptoolcircularstringradius.h
qgsmaptooladdpart.h
qgsmaptooladdring.h
qgsmaptooledit.h
@@ -245,6 +249,7 @@ SET (QGIS_APP_MOC_HDRS
qgsmaptoolsimplify.h
qgsmaptoolsplitfeatures.h
qgsmaptoolsplitparts.h
qgsmaptooladdcircularstring.h

nodetool/qgsmaptoolnodetool.h
nodetool/qgsselectedfeature.h

0 comments on commit 01d635a

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