263 Commits

Author SHA1 Message Date
Nyall Dawson
b5ae888b60 Merge pull request #4478 from nyalldawson/layer_store
Split off map layer storage handling from QgsProject to QgsMapLayerStore
2017-05-06 13:00:05 +10:00
Martin Dobias
0a0c33dcf2 Remove QgsGeometryCache class
The geometry cache was only used for few geometry editing operations anyway. In earlier versions
of QGIS the geometry cache was also used by old snapping classes which have been replaced
by QgsPointLocator that also keeps a spatial index of geometries and it is not rebuilt on every re-render.

Reasons for removal:
- geometry cache was repopulated on every redraw of layers in editing mode, slowing down rendering
- data structure for the cache was a simple map with features accessed by their ID (no spatial index)
- the cache was only getting refreshed for the current view of the main map canvas (not a generic cache)
- not used for snapping anymore where caching was important to avoid roundtrips to data provider
2017-05-06 10:34:23 +08:00
Nyall Dawson
5600395e29 Add metadata validator
Adds a new abstract base class QgsMetadataValidator for validating
metadata against standard schemas.

Initially only QgsNativeMetadataValidator for validating against
the native QGIS metadata schema is implemented.

In future this could be extended with Dublin Core, ISO 19115
validators, etc...
2017-05-04 07:29:56 +10:00
Nyall Dawson
269bfe7bf7 Metadata class shell 2017-05-04 07:29:56 +10:00
Nyall Dawson
f9bd83c035 Split off map layer storage handling from QgsProject to QgsMapLayerStore
Turns out that there's valid use cases for having layer stores
outside of the cost of using a whole QgsProject.

Partially reverts the merger of QgsMapLayerRegistry into QgsProject,
except that there's no singletons here.
2017-05-03 07:09:44 +10:00
nirvn
295c21227c Add a QgsMapSettingsUtils::worldFileContent() function 2017-05-02 12:15:46 +07:00
lbartoletti
84471f2e6d New classes for circle and ellipse. 2017-04-27 10:25:29 +10:00
Nyall Dawson
241d283bb8 Create a context object for processing algorithm execution 2017-04-26 12:53:35 +10:00
Nyall Dawson
fea6bff707 Merge pull request #4389 from nyalldawson/scalebar
Refactor scalebar renderer, split from composer
2017-04-26 12:40:06 +10:00
Nyall Dawson
b40bc0c1f7 Refactor scale bar rendering
Move all scalebar rendering code out of composer and ensure that
all scalebar rendering is done independant of QgsComposerScaleBar

This allows scalebar rendering code to be reused by plugins
and by non-composer code.

Also rename QgsScaleBarStyle -> QgsScaleBarRenderer, (and all
subclasses too). This name better reflects what these classes do.
2017-04-26 11:46:51 +10:00
Nyall Dawson
363336394e Add a QgsFeatureSink interface for classes which accept adding features 2017-04-26 10:39:57 +10:00
Martin Dobias
25ed76b86e Move labeling engine config to a new class + QgsPalLabeling cleanup
Another bit to make core library independent from QgsProject::instance().
Until now labeling engine configuration was taken from project singleton.

Removed legacy methods from QgsPalLabeling - the class now does not have
any more member variables/methods, it is just a bunch of helper functions.

(PR #4384)
2017-04-21 18:04:09 +08:00
Mathieu Pellerin
e0d20e537d Update decorators to avoid relying on map canvas when rendering (#4388) 2017-04-21 12:06:24 +07:00
Mathieu Pellerin
db848a3f1a Upgrade the save as image function into a background task (#4382) 2017-04-21 11:47:37 +07:00
Denis Rouzaud
0b0e8a6a89 move QgsFieldModel and QgsFieldProxyModel to core and sipify 2017-04-19 16:44:36 +02:00
Martin Dobias
24c5b0326f Rewrite addTopologicalPoints() and remove legacy snapping code + unit test 2017-04-19 11:24:20 +08:00
Nyall Dawson
c4ea048e5b New QgsRange template based class for storing interval ranges
QgsRange classes represent a range of values of some element
type. For instance, ranges of QDateTime might be used to
represent the ranges of timestamp ranges.

Ranges can indicate whether the upper and lower values are
inclusive or exclusive. The inclusivity or exclusivity of
bounds is considered when determining things like whether
ranges overlap or during calculation of range intersections.

Includes typedefs for QgsDoubleRange, QgsIntRange, QgsDateRange.
2017-04-18 12:19:42 +10:00
Nyall Dawson
147bb7f1ed Move ellipsoid parameter retrieval to new QgsEllipsoidUtils class 2017-04-18 09:53:00 +10:00
Nyall Dawson
226bd9bb60 Move QgsRectangle and QgsBox3d to geometry folder
Since these are both geometry related classes, it's nicer to
keep these all together
2017-04-12 15:27:34 +10:00
Nyall Dawson
0d843ff4e6 Initial framework for 3D box class 2017-04-12 14:08:47 +10:00
Nyall Dawson
110828feab [FEATURE] Background saving of raster layers
Use the task manager framework to handle saving of raster layers
in the background
2017-04-07 08:18:57 +10:00
Nyall Dawson
8ffdb362cc Port some processing dataobjects routines to c++ 2017-04-05 15:27:17 +10:00
Nyall Dawson
52cc002990 Simple c++ base class for processing algorithms 2017-04-03 21:17:45 +10:00
Denis Rouzaud
a44eb4d7b0 use dedicated header for QgsAttributes 2017-03-30 15:13:01 +02:00
lbartoletti
fb3d07f3f5 [FEATURE] New class for triangle
Adds a new geometry class for Triangle geometries

Methods include orthocenter, bisectors, medians, medial, circumscribed (center,
radius), inscribed (center, radius)

Also adds make_triangle expression function for creating triangles
2017-03-21 18:50:47 +10:00
Nyall Dawson
3a1ac1a995 [composer] Attach compositions to QgsProject
This adds a new QgsLayoutManager class which is used for
storage and serializing/deserializing of compositions.

A QgsLayoutManager is attached to QgsProject. This allows
core code to access the compositions attached to a project.
The intention is to move all handling of compositions from
app to core, making it easy for server to access project
compositions without resorting to fragile xml parsing.
2017-03-21 10:32:52 +10:00
Matthias Kuhn
6f430a60a7 Move QgsAnimatedIcon to a generic implementation (#4272) 2017-03-19 12:52:35 +01:00
Matthias Kuhn
520e3c082e Move QgsVector to its own header 2017-02-24 16:02:25 +01:00
Alessandro Pasotti
e1ede700a8 [feature] QgsSettings QGIS QSettings replacement (#4160)
* [feature] QgsSettings QGIS QSettings replacement

This is the new QgsSettings class that adds an (optional)
Global Settings additional ini file where a system administrator
can store default values for the settings and provide
pre-configuration.

If an ini file named qgis_global_settings.ini is found
in the pkgDataPath directory it is automatically loaded,
this path can be overriden by a command line argument
( --globalsettingsfile path ) and through an environment
variable (QGIS_GLOBAL_SETTINGS_FILE).
2017-02-22 20:22:10 +10:00
Martin Dobias
5f5c1ddb15 Use a path resolver class instead of QgsProject::instance() in map layers
A new class QgsPathResolver is introduced for conversion between absolute
and relative paths when reading/writing XML.

Cleaned up code in layer definition file support (.qlr) to better handle
relative/absolute path conversion.
2017-02-16 09:56:11 +08:00
Nyall Dawson
d457a894b3 Remove QgsDataDefined
Now completely replaced by QgsProperty and the properties framework
2017-02-14 13:48:11 +10:00
Nyall Dawson
1b5bf1d289 Deprecate QgsScaleExpression
Has now been completely replaced by QgsSizeScalePropertyTransformer
2017-02-14 13:48:11 +10:00
Nyall Dawson
95d000f662 [FEATURE] Background saving of vector layers
Switches the vector layer save operation to a background task
using the task manager framework. Allows layers to saved without
blocking the interface.
2017-02-13 08:30:29 +10:00
Nyall Dawson
767e7a53c6 Expose QgsGeometryUtils to python bindings
Has some handy functions and there's no strong reason anymore
why these shouldn't be part of stable API
2017-02-12 13:01:24 +10:00
Martin Dobias
7683cfacd3 Rework vector joins so they do not use QgsProject::instance()
The basic idea is to split reading of XML definition and resolution of layer IDs into layers.

Also includes some cleanups in QgsProject and improvements in QgsVectorLayerJoinInfo.
2017-01-31 09:33:02 +08:00
Nyall Dawson
4058f4734b Annotations are now handled at a project level
This commit implements a new QgsAnnotationManager class, which
handles storage, writing and retrieval of annotations.

QgsProject has an annotationManager() attached to it. Map canvases
sync their visible QgsMapCanvasAnnotationItems to the annotations
contained within the project's annotation manager.

This moves all management, storage and retrieval of annotations
up to core and out of app/canvas.
2017-01-30 14:57:16 +10:00
Nyall Dawson
a7be9968b8 New class QgsMargins for storing margins (left/right/top/bottom)
Basically a direct port of QMarginF, but forced to always use
double values, and with added toString()/fromString() methods.
2017-01-30 10:50:48 +10:00
Nyall Dawson
c853f4fe89 Refactor annotations
Splits the rendering component of annotations out from map
canvas item component.

A new core abstract base class QgsAnnotation handles the
management of the common properties associated with an
annotation, and handles rendering the annotation onto a
QgsRenderContext destination.

Existing annotation classes have been ported to this, and
with the exception of the form annotation moved into core.
Form annotations are dependant on editor widgets and must
remain in GUI.

A new QgsMapCanvasAnnotationItem item class implements
a QgsMapCanvasItem which draws an annotation inside the
canvas, and handles synchronising the position and size
of the canvas item with the QgsAnnotation position/size.

This allows annotations to be safely used in a multi-canvas
environment, with a single QgsAnnotation being displayed
in multiple canvases (even if the canvases have different
extent/crs/etc).

Additionally it allows annotations to be directly rendered
to a map (eg in composer) without going through the
gui based Qt graphics scene framework.

Also removes lots of duplicate code, and adds some basic
unit tests for annotations.
2017-01-30 08:36:19 +10:00
Martin Dobias
0341478864 Remove code for reading of legacy (QGIS < 1.0) renderers
Also removes a bunch of unused old QMLs and upgrades one still in use
2017-01-27 16:02:48 +08:00
Juergen E. Fischer
6a56cb0dd0 updates and fixes for windows qt5/py3 build 2017-01-24 01:25:59 +01:00
Nyall Dawson
ffaa40edc4 Refactor properties
Remove QgsAbstractProperty and subclasses, and instead use a single
QgsProperty class which covers the use of QgsAbstractProperty
and its subclasses. This simplifies the API and avoids pointer
handling. QgsProperty is implicitly shared for memory efficiency
and inexpensive copies.
2017-01-23 12:45:21 +10:00
Nyall Dawson
53ba1a1f10 Add a common interface for QgsPropertyCollection/QgsPropertyCollectionStack 2017-01-23 12:45:21 +10:00
Nyall Dawson
f1c1589550 Initial implementation of property system 2017-01-23 12:45:21 +10:00
Nyall Dawson
ede452be85 [processing] Port feedback object to c++
Algorithms are now passed a QgsProcessingFeedback object
instead of the loosely defined progress parameter.
2017-01-11 11:11:10 +10:00
Nyall Dawson
dca697b427 [processing] New c++ QgsProcessingRegistry class
Intended as a registry for the various processing components,
including providers, algorithms and various parameters and outputs.

Currently handles only registration of providers, as a step toward
removing processing's algList (this requires first porting
the algorithm class to c++)

A QgsProcessingRegistry instance is attached to QgsApplication,
and is retrieved by QgsApplication::processingRegistry()
2017-01-11 10:55:15 +10:00
Nyall Dawson
bb24dfe245 [processing] c++ base class for providers
Nothing particularly exciting here yet, but this commit
moves the definition of the provider base class to a c++
QgsProcessingProvider abstract base class.

As part of this some existing python methods were renamed
to make their use clearer and to fit with the QGIS c++
api conventions:

- getName was renamed to id
- getDescription was renamed to name
- getIcon was renamed to icon

These API breaks are documented
2017-01-11 10:55:15 +10:00
Matthias Kuhn
0190e506a6 Move QgsConfigurationMap to QgsXmlUtils 2016-12-20 01:20:08 +01:00
Matthias Kuhn
22c492e6e5 Rename QgsFieldKit to QgsFieldFormatter 2016-12-20 01:20:08 +01:00
Matthias Kuhn
9fd0802939 Remove QgsEditorWidgetConfig
This is replaced with a QVariantMap. It was never really more than this in the
past and with the switch to QgsConfigurationProperties, there is really no
longer any reason to assume that this will change.
2016-12-20 01:20:08 +01:00
Matthias Kuhn
826c44092b Python bindings 2016-12-20 01:20:08 +01:00