10626 Commits

Author SHA1 Message Date
Etienne Trimaille
ba81068f49 [FEATURE] [needs-docs] Metadata editor
Adds a new metadata tab to layer properties, representing the new metadata model from QEP #91
2017-09-23 14:08:32 +10:00
Muhammad Yarjuna Rohmat
e2678936df [FEATURE][geonode] integration - copy style action
Allows copying styles directly from geonode layers for pasting into project layers.
2017-09-23 13:36:57 +10:00
Matthias Kuhn
6dfe44f72b Merge pull request #5179 from vmora/listen_notify
[FEATURE] layer refresh and trigger actions on provider notification
2017-09-22 19:32:46 +02:00
Vincent Mora
02e3916bf5 [FEATURE] layer refresh and trigger actions on provider notification
[needs-docs]

In vector layer properties (only usefull for postgres datasources)

**in the rendering tab**

A "Refresh layer on notification" checkbox has been added to refresh layer
on provider notification.

For a postgres datasource, if a `NOTIFY qgis;` command is issued by one of the database clients,
a refresh of the layer will occur.

If the "Only if message is" checkbox is checked, the notification will trigger the refresh only
if the message contend is the one specified, e.g. if the user enters
"refresh" in the box right next to the "Only if message is" checkbox,
then a `NOTIFY qgis, 'refresh';` command in the datatabase will trigger
a layer refresh, but `NOTIFY qgis;` or `NOTIFY qgis, 'something else';`
won't.

**in the actions tab**

A column "On notification" has been added, the action editor widget
a has text field "Execute if notification message matches" to
specify a filter for notification from the provider. The filter is a
Perl-type regex.

Note that, as opposed to the "layer refresh" that

Exemple:
  - QGIS side "Execute if notification message matches" `^trigger my action`
  - Postgres side: `NOTIFY qgis, 'trigger my action'` will trigger the action
  - Postgres side: `NOTIFY qgis, 'trigger my action some additional data'` will trigger the action
  - Postgres side: `NOTIFY qgis, 'do not trigger my action some additional data'` will NOT trigger the action

Please note that if the `^`, which means "starts with",  in `^trigger my action` had been ommited,
the last notification would have triggered the action because the
notification message contains the `trigger my action`

A new qgis variable `notification_message` is available for use in
actions, it holds the contend of the notification message. To continue
with the previous exemple, if the action is of python type with the code:

```python
print('[% @notification_message %]')
```

The three notifictions above will result in two printed lines
```
trigger my action
trigger my action some additional data
```

User Warning:

For postgres providers, if the "Refresh layer on notification" is checked, or if one layer action has
"On notification" specified, a new connection to the database is made to
listen to postgres notifications. This olds even if transaction groups
are enabled at the project level.

Note that once the notification mechanism is started in a QGIS
session, it will not stop, even if there is no more need for it (Refresh
layer on notification" unchecked and no "On notification" in any
action). Consequently the connection listening to notification will
remain open.

IMPLEMENTATION DETAILS:

A notify signal has been added to the abstract QgsVectorDataProvider
along with a setListening function that enables/disble the notification
mechanism.

For the moment only the postgres provider implements the notification.

QgsAction has a notificationMessage member function that holds the regex
to match to trigger action

QgsActionManager becomes a QObject and is doing the filtering and execute actions on
notifications.

The notification notion extends beyond SRGBD servers (postgres and oracle at
least have the notify) and the "watch file" in the delimitedtext
provider could also benefit from this interface.

For the postgres provider a thread is created with a second connection
to the database. This thread is responsible for listening postgres
notifications.

It would be nice to avoid the creation of one listening chanel per
provider in the case transaction groups are enabled.

Please note that when listening starts (a thread and connection is
created in the postgres provider) it cannot be stopped by removing the
connected actions or unchecking the refresh check box. Indeed, since we
don't know who needs the signals, we dont't want to stop the service.

The service will not restart in the next qgis session though.

If this behavior is not deemed appropriate, we could use
```
int QObject::receivers ( const char * signal ) const
```
and have QgsDataProvider::setListening return a bool to tell the caller
if the signal has actually been closed.
2017-09-22 12:51:51 +02:00
Juergen E. Fischer
8b32d8d949 translation string fixes 2017-09-22 11:38:42 +02:00
Nyall Dawson
22eddfd4c0 Merge pull request #5238 from nyalldawson/geometry_coverage
Geometry unit test coverage + fixes
2017-09-22 17:18:39 +10:00
Nyall Dawson
a6b1c3ee9f Merge pull request #5237 from nyalldawson/port_algs
[processing] Port line intersection and split with lines to c++
2017-09-22 17:18:05 +10:00
Nyall Dawson
db738f65e6 Merge pull request #5234 from nyalldawson/action_lifetime
Fix browser action item lifetime
2017-09-22 16:11:42 +10:00
Nyall Dawson
57b76920d6 Expand docs 2017-09-22 15:22:01 +10:00
Nyall Dawson
21f92a6fb2 Port line intersection and split with lines to c++ 2017-09-22 15:19:32 +10:00
Nyall Dawson
c41dca937c Port processing combineFields to c++ 2017-09-22 15:19:32 +10:00
Nyall Dawson
33d2d1119c Update sip 2017-09-22 12:50:47 +10:00
Nyall Dawson
6afe25ef0f [processing] Proper progress reports during model execution
Instead of showing the progress reports for each child algorithm
individually, which leads to repeated 0->100% progress for every
step of a model, we proxy the progress reports and account for the
overall progress through a model as well. This means that
the progress accounts for both the progress within the current
model step AND the total number of steps left to execute.
2017-09-22 10:32:17 +10:00
Nyall Dawson
e7b08d520e Expand geometry test coverage 2017-09-22 09:54:23 +10:00
Nyall Dawson
7c53dc1574 Correctly parent browser item actions to transient menu instance
Currently most browser item actions are parented to the item
itself, which is often long-lived (e.g. connection items
which last for the duration of the qgis session). This
commit adds an explicit parent widget parameter to
QgsDataItem::actions to ensure that the newly created actions
are correctly parented to the menu, and deleted after the
menu is removed.
2017-09-22 09:32:54 +10:00
Matthias Kuhn
9caa7224cd Merge pull request #5230 from m-kuhn/taskWaitForFinished
QgsTask::waitForFinished without event loop
2017-09-21 18:35:43 +02:00
Matthias Kuhn
88fcbb0aac
QgsTask::waitForFinished without event loop
because the old approach with using signals, using deleteLater and using
an internal event loop is a very good recipe for big troubles.
2017-09-21 14:16:37 +02:00
Matthias Kuhn
846fef2013
Doxygen 2017-09-21 10:04:26 +02:00
Nyall Dawson
15e650d624 Merge pull request #5221 from nyalldawson/browser_awesome
Add QLR, processing models to browser
2017-09-21 05:20:07 +10:00
Matthias Kuhn
b1b21ed25f Merge pull request #5143 from m-kuhn/nulldatasetparams
QgsVectorFilewriter skip default null options
2017-09-20 11:44:57 +02:00
Nyall Dawson
a67dab52d2 Spelling 2017-09-20 18:45:59 +10:00
Nyall Dawson
ef97063029 Identation 2017-09-20 18:41:42 +10:00
Matthias Kuhn
a6dc600784
[processing] Fix single sided buffer multiline (bevel) 2017-09-20 08:51:43 +02:00
Nyall Dawson
6e1c5c4d75 [FEATURE] Show processing models in browser
And allow them to be executed and edited directly from there
2017-09-20 14:09:03 +10:00
Nyall Dawson
253c4c7a42 Add a Custom item type for QgsDataItem 2017-09-20 14:09:03 +10:00
Nyall Dawson
8bce7a62a7 Allow QgsDataItems to override default double click behavior 2017-09-20 14:09:03 +10:00
Nyall Dawson
6ce3c6100d [FEATURE] Add 'open directory' action to right click menu for
folders in browser dock

Opens the folder in the OS' file explorer
2017-09-20 09:24:02 +10:00
Matthias Kuhn
d1c73504a5
Remove leftover files 2017-09-19 17:43:57 +02:00
Matthias Kuhn
f638023b9d
[processing] Fix test "Polygon buffer with dissolve" 2017-09-19 15:35:42 +02:00
Matthias Kuhn
6cde4a626d
[processing] Fix test "Single sided buffer multiline (bevel)" 2017-09-19 15:31:20 +02:00
Matthias Kuhn
9b213b6a73
[processing] Fix test "variable buffer on points with dissolve option" 2017-09-19 15:30:19 +02:00
Matthias Kuhn
973dba0d59
[processing] Update python field calculator test results 2017-09-19 15:01:54 +02:00
Matthias Kuhn
0ac02497b9
[processing] Make python field calculator support LongLong 2017-09-19 15:01:54 +02:00
Matthias Kuhn
506b35a75d
[processing] Fix type resolving in python field calculator 2017-09-19 15:01:54 +02:00
Matthias Kuhn
cfabd10b7e
Fix qgis:lineintersections test 2017-09-19 15:01:53 +02:00
Nyall Dawson
20e1d72007 Merge pull request #5209 from nyalldawson/geometry_coverage
[WIP] Extend geometry classes unit test coverage
2017-09-19 22:15:14 +10:00
Matthias Kuhn
8d34023d6e Merge pull request #5216 from m-kuhn/vectorFileWriter
Make error message accessible for python in vector file writer
2017-09-19 13:17:09 +02:00
Alessandro Pasotti
b0892488be Merge pull request #5212 from boundlessgeo/browser_homogenize
Geopackage: browser homogenize
2017-09-19 13:15:32 +02:00
Nyall Dawson
9e61cd63df Move overriden methods from headers to cpp files
Since they can't be inlined anyway
2017-09-19 17:22:33 +10:00
Nyall Dawson
f387210e4a Move QgsPolygonV2 equality operators up to QgsCurvePolygon 2017-09-19 17:22:33 +10:00
Nyall Dawson
bb425e4540 Cleaner signature for QgsAbstractGeometry::closestSegment 2017-09-19 17:22:33 +10:00
Nyall Dawson
54c988f918 Make QgsAbstractGeometry::toCurveType pure virtual, and implement
for all geometry types

Previously this method would return nullptrs for many geometry
types
2017-09-19 17:22:33 +10:00
Nyall Dawson
5bb359db90 Boost test coverage of geometry classes 2017-09-19 17:22:33 +10:00
Nyall Dawson
9b6e79cd18 Expand QgsTriangle test coverage 2017-09-19 17:22:32 +10:00
Nyall Dawson
a15340fc2c Extend geometry test coverage 2017-09-19 17:22:32 +10:00
Nyall Dawson
d3db082cd2 Extend unit tests for QgsPolygonV2, QgsPoint 2017-09-19 17:22:32 +10:00
Nyall Dawson
328fc9cb8d Consistently use unsigned int for QgsRegularPolygon 2017-09-19 17:22:32 +10:00
Nyall Dawson
92d739619d Fix memory leak in QgsEllipse 2017-09-19 17:22:32 +10:00
Nyall Dawson
a6b6892454 Allow data item providers to override default directory handling 2017-09-19 08:06:09 +02:00
rldhont
f88af6d55f QgsVectorLayer, countSymbolFeatures return QgsVectorLayerFeatureCounter 2017-09-19 07:34:35 +02:00