3218 Commits

Author SHA1 Message Date
rldhont
7028eee198 Merge pull request #3809 from pblottiere/render
replace QgsMapRenderer
2016-12-12 14:07:37 +01:00
rldhont
29a05dfa9c Adapt WFS capabilties in server test for WMS 1.3.0 compliance 2016-12-12 14:06:14 +01:00
Nyall Dawson
7bc7647957 More flaky test disabling 2016-12-12 17:47:34 +10:00
Nyall Dawson
caa0d500af Fix spelling of orthoganilize 2016-12-12 17:47:12 +10:00
Blottiere Paul
8cda1bbb79 fix getLegendGraphics when BBox parameter is used 2016-12-12 08:16:18 +01:00
Blottiere Paul
f3a5c98178 remove QgsMapRenderer 2016-12-12 07:50:22 +01:00
Martin Dobias
5228cc5fb4 One more fix for doc test 2016-12-12 10:34:03 +08:00
Martin Dobias
d60f94bf5d Fix doc coverage test 2016-12-12 09:54:05 +08:00
Nyall Dawson
b4d49133df Temporarily disable flaky part of test 2016-12-12 09:19:46 +10:00
Martin Dobias
c783be1d04 Rename QgsComposerLegendStyle to QgsLegendStyle 2016-12-12 03:23:02 +08:00
Martin Dobias
3efc28d07b Remove legacy class QgsComposerLegendItem and subclasses 2016-12-12 02:42:04 +08:00
Martin Dobias
57ff36bc01 Make it possible to use project as non-singleton
This is just a first step - it will be a long way to get rid of all
the usages of singleton instance in QGIS code.
2016-12-11 17:49:24 +08:00
Martin Dobias
2c9f1ff579 Make map canvas independent from overview canvas, simplify QgsMapCanvas API 2016-12-11 16:41:07 +08:00
Martin Dobias
04f8704ebd Unit tests for utility methods from qgsmaplayerlistutils.h 2016-12-11 13:33:53 +08:00
Martin Dobias
1580f325c2 More test fixes 2016-12-11 00:47:30 +08:00
Martin Dobias
483c7f4b86 Test fixes and further QgsProject::instance() removals 2016-12-11 00:31:27 +08:00
Martin Dobias
5fc10d6207 Migrate QgsMapThemeCollection away from using layer IDs 2016-12-10 23:23:18 +08:00
Martin Dobias
c143be7a73 QgsMapSettings and QgsComposerMap store layers for rendering as weak pointers
... instead of using layer IDs which need to be resolved using QgsProject
2016-12-10 18:50:52 +08:00
Martin Dobias
d56a97d4fe Merge QgsMapLayerRegistry into QgsProject
All methods/signals of QgsMapLayerRegistry moved verbatim to QgsProject.
2016-12-10 15:18:12 +08:00
Matthias Kuhn
48f43b0862 Fix map canvas test 2016-12-09 11:00:17 +01:00
Nyall Dawson
4b6f3a3ee5 [FEATURE][processing] New algorithm to orthagonalize geometries
Adds a new QgsGeometry::orthagonalize method which tries to make
angles in geometries either right angles or straight lines

Also adds a processing algorithm exposing this feature.
2016-12-09 09:41:56 +10:00
Nyall Dawson
379e7a42e6 Add some more QgsVector operators, allow use of QgsVector with QgsPointV2 2016-12-09 08:13:48 +10:00
Nyall Dawson
77a8e18ec1 Add methods to add/subtract QgsVectors 2016-12-09 08:13:48 +10:00
Nyall Dawson
37edb69c21 Merge pull request #3843 from nyalldawson/oriented
Port minimum oriented bounding box to QgsGeometry
2016-12-08 05:52:59 +10:00
Nyall Dawson
8a3c1efefe Merge pull request #3840 from DelazJ/selectedfeaturesids
Replace selectedFeaturesIds by selectedFeatureIds
2016-12-07 21:44:24 +10:00
Nyall Dawson
c975764c12 Port processing oriented minimum bounding box alg to QgsGeometry 2016-12-07 20:13:29 +10:00
nirvn
9afb48eccd fix snapping test 2016-12-07 15:29:19 +07:00
Harrissou Sant-anna
f9578bf60b Replace selectedFeaturesIds by selectedFeatureIds 2016-12-07 00:19:11 +01:00
Nyall Dawson
adff069d5a Cleanup QgsTask API for dependent layers 2016-12-06 20:02:34 +10:00
Nyall Dawson
6f9292a75d Reenable all task manager tests 2016-12-06 14:22:03 +10:00
Alessandro Pasotti
3ec5f92f0f Replaced the expired SSL certificate and re-enabled OWS PKI test 2016-12-05 10:31:10 +01:00
Alessandro Pasotti
b92cf53cad Typo in comment 2016-12-05 10:31:10 +01:00
Nyall Dawson
e35420a8d9 Force QgsTask::run() to fully complete
Remove support for signal based completion/termination

Also unfortunately disable a lot of the test suite as a result,
since it's not easily translatable
2016-12-05 14:08:12 +10:00
Nyall Dawson
297b5724df QgsTask is no longer a QRunnable
Instead use a private wrapper class to make QgsTask compatible
with QThreadPool
2016-12-05 14:08:12 +10:00
Nyall Dawson
619381c0ad Call QgsTaskWrapper.on_finished with exception rather than result 2016-12-05 14:08:11 +10:00
Nyall Dawson
fded1a1f39 Don't explode returned values in QgsTaskWrapper
Breaks returning list values
2016-12-05 14:08:11 +10:00
Nyall Dawson
f73f3c14f5 Remove outdated flaky test ifdefs 2016-12-05 14:08:11 +10:00
Nyall Dawson
0dcff4491e Respect QgsTask::CanCancel flag in gui 2016-12-05 14:08:11 +10:00
Nyall Dawson
466b0b96b7 Tasks are treated as progressless until they first report a progress 2016-12-05 14:08:11 +10:00
Nyall Dawson
5216220872 Fix more racy conditions
Switch from QtConcurrent::run to QThreadPool::start

QtConcurrent doesn't give us anyway to cancel queued but not
started tasks. QThreadPool does (and also allows us to specify
task priority)
2016-12-05 14:08:11 +10:00
Nyall Dawson
01d6afaf2c Avoid recursive locks 2016-12-05 14:08:11 +10:00
Nyall Dawson
14b6b3f6ee Harden everything up
And finally fix a racy condition which has been plaguing me for
ages
2016-12-05 14:08:11 +10:00
Nyall Dawson
32a9e1e9d6 QgsTasks can have subtasks
Now, a QgsTask can have subtask QgsTasks set by calling
QgsTask::addSubTask. Sub tasks can have their own set of
dependent tasks.

Subtasks are not visible to users, and users only see the overall
progress and status of the parent task.

This allows creation of tasks which are themselves built off
many smaller component tasks. The task manager will still handle
firing up and scheduling the subtasks, so eg subtasks can run
in parallel (if their dependancies allow this).

Subtasks can themselves have subtasks.

This change is designed to allow the processing concept of
algorithms and modeller algorithms to be translatable
directly to the task manager architecture.
2016-12-05 14:08:11 +10:00
Nyall Dawson
3999a3710f Remove QgsTaskManager singleton, and instead attach an instance
to QgsApplication.

ie instead of QgsTaskManager.instance(), use
QgsApplication.taskManager()
2016-12-05 14:08:11 +10:00
Nyall Dawson
b6b7a7f8c6 Remove delete* methods from QgsTaskManager API
On further consideration allowing external control of task
deletion is a bad idea.
2016-12-05 14:08:11 +10:00
Nyall Dawson
ad71dc443d Fix failing tests 2016-12-05 14:08:11 +10:00
Nyall Dawson
6d4392a0f7 Allow QgsTask subclasses to defined a finished function, which is
called when the task has completed (successfully or otherwise).

This allows for simpler task design when the signal/slot
based approach is not required. Just implement run() with your
heavy lifting, and finished() to do whatever follow up stuff
should happen after the task is complete. finished is always
called from the main thread, so it's safe to do GUI operations
here.

Python based tasks using the simplified QgsTask.fromFunction
approach can now set a on_finished argument to a function
to call when the task is complete.

eg:

def calculate(task):
    # pretend this is some complex maths and stuff we want
    # to run in the background
    return 5*6

def calculation_finished(result, value=None):
    if result == QgsTask.ResultSuccess:
	iface.messageBar().pushMessage(
            'the magic number is {}'.format(value))
    elif result == QgsTask.ResultFail:
        iface.messageBar().pushMessage(
            'couldn\'t work it out, sorry')

task = QgsTask.fromFunction('my task', calculate,
		on_finished=calculation_finished)
QgsTaskManager.instance().addTask(task)

Multiple values can also be returned, eg:

def calculate(task):
    return (4, 8, 15)

def calculation_finished(result, count=None, max=None, sum=None):
    # here:
    # count = 4
    # max = 8
    # sum = 15

task = QgsTask.fromFunction('my task', calculate,
		on_finished=calculation_finished)
QgsTaskManager.instance().addTask(task)
2016-12-05 14:08:11 +10:00
Nyall Dawson
252f2e1102 Rename overloaded signal, flip remaining connects to new style 2016-12-05 14:08:11 +10:00
Nyall Dawson
f71c78e14f Rename stopped to terminated for consistency 2016-12-05 14:08:11 +10:00
Nyall Dawson
e01c306edb Simplify reporting completion of tasks
QgsTask subclasses can now return a result (success or fail)
directly from QgsTask::run. If they do so then there's no
need for them to manually call completed() or stopped()
to report their completion.

Alternatively, tasks can also return the ResultPending value
to indicate that the task is still operating and will
manually report its completion by calling completed() or
stopped(). This may be useful for tasks which rely on external
events for completion, eg downloading a file. In this case
Qt slots could be created which are connected to the download
completion or termination and which call completed() or
stopped() to indicate the task has finished operations.
2016-12-05 14:08:11 +10:00