On 12.08.2014 06:34, Nyall Dawson wrote: > On 12 August 2014 01:25, Matthias Kuhn <[email protected]> wrote: > >> While working on this, I stumbled upon the class QgsMapLayerAction which >> I am having a hard time to understand the purpose of. >> >> Some comments in qgsdualview.cpp suggest that it is related to user >> defined actions vs standard actions [1]. I wondered also if it is >> related to vector layer vs raster layer (as QgsMapLayer is a common base >> class of the two and QgsMapLayerAction therefore might be interpreted as >> "also valid for raster layers"). > I can help you out here - QgsMapLayerActions are built-in c++ actions, > or actions which are defined by a python plugin. Unlike the standard > vector layer actions, these are not editable by users, and are not > listed in the vector layer properties dialog. As far as I'm aware, > there's only a single implementation currently in QGIS: > https://github.com/qgis/QGIS/blob/master/src/app/composer/qgscomposer.cpp#L3566 > This action allows users to jump directly to a specific atlas feature, > and is only shown for vector layers which are set as the coverage > layer for a composition. > > There's also some useful sample python code on how these actions can > be used here: > http://gis.stackexchange.com/a/94665/28443 > > Nyall Thank you for the explanation.
I also figured out, that they can be layer independent in contrast to the attribute actions which are always defined for a specific layer. As I am working on a menu, I am more interested in listing/triggering the action than creating a new one (like the one in your link). >From this point (usage/triggering) there is not much difference as far as I can tell. So I think that it would be good to be able to query them in one particular place. Therefore I wondered, what you think about also exposing the attribute actions (custom) in the MapLayerActionRegistry? I also have noticed, that the MapLayerActions are a subclass of the type QAction, but I don't think they can be used like that (I did not test, so please correct me if I am wrong. I just noticed that the trigger method is not connected, so if you add them to a menu there is not much happening I think). If this is true, I think it would not be nice to get a fully functional QAction similar to QgsAttributeTableMapLayerAction, that adds exactly this functionality around QgsMapLayerAction. Then there is only one small bit left - as far as I can tell - that is different between the two action types, which is that the custom actions support a type of "parameter" by substitution which allows to run them for a certain attribute or coordinate. Do you have any comments on these thoughts? Matthias _______________________________________________ Qgis-developer mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/qgis-developer
