Re: [QGIS-Developer] Replacing a dialogue with another at runtime with Python

2017-10-03 Thread Ricardo Filipe Soares Garcia da
Hi Dennis

On Tue, Oct 3, 2017 at 3:21 PM, Denis Rouzaud 
wrote:

> Hi Ricardo,
>
> Sorry to bother, but I think this kind of hack should be discouraged.
>


No bother at all :)

I am just playing around with some ideas for improving the WMS layer
support. The whole 'hijack QGIS native dialog' thing is just a sidetrack
that is not really my main goal. It just seemed like a wacky, fun idea to
try out. just to see if it is possible!




>
> This modifies QGIS behavior in a hidden way by replacing native dialogs.
> And as you pointed, there is probably no way of uninstalling your plugin
> properly. It will require QGIS to restart to work as expected, which is not
> that bad, but still.
>
> If you think current behavior is not optimal, I would suggest to either:
> * bring your improvements into master instead of a plugin
>


That might be the plan for the long run. For now I'm just having some fun
at lunch break ;)




> * create a dedicated button and menu entry in your plugin for your
> customized dialog
>
> With the latter option, I think it would be possible to add your menu
> entry and button in the layer menu and layer toolbar, respectively.
>


Yeah I am aware there is a proper way to do this, and this is not it. This
is just toying and poking at stuff to see what is possible.
On a more "serious" tone, I agree with you 100%. This is not something that
I'd be putting out there for the world to use.




>
> Just my two cents.
>
> Denis
>
>

Cheers



>
>
>
>
> Le mar. 3 oct. 2017 à 16:09, Ricardo Filipe Soares Garcia da <
> ricardo.garcia.si...@gmail.com> a écrit :
>
>> Hi all
>>
>> Answering my own question for posterity
>>
>> Turns out I can disconnect all slots from a signal by calling
>> `my_action.triggered.disconnect()` without any arguments. My goal of
>> replacing the native QGIS 'Add WMS/WMTS layer' dialogue with another one
>> can be achieved like this:
>>
>> ```python
>>
>> def my_handler():
>> print("Hello")
>>
>> action = iface.actionAddWmsLayer()
>> action.triggered.disconnect()
>> action.triggered.connect(my_handler)
>> ```
>>
>> This leaves another problem to be solved: How to restore the native QGIS
>> dialogue when my would-be plugin is deactivated by the user. The following
>> seems to work on QGIS 2.18:
>>
>> ```
>> provider_registry = qgis.core.QgsProviderRegistry.instance()
>> add_wms_dialog = provider_registry.selectWidget("wms")
>> action.triggered.disconnect()
>> action.triggered.connect(add_wms_dialog.show)
>>
>> ```
>>
>> Best regards
>>
>>
>>
>> On Mon, Oct 2, 2017 at 12:41 PM, Ricardo Filipe Soares Garcia da <
>> ricardo.garcia.si...@gmail.com> wrote:
>>
>>> Hi all
>>>
>>> Is it possible to replace one of QGIS' dialogues with a custom one
>>> during runtime by using Python?
>>>
>>> My concrete goal is to replace the dialogue that shows when clicking the
>>> 'Add WMS/WMTS Layer' with something custom. I'd like to enhance the native
>>> QGIS dialogue with additional elements for selecting additional dimensions,
>>> like time or elevation.
>>>
>>> Can this be done?
>>>
>>> I'm thinking that I'd only have to replace whatever slot is currently
>>> defined on the `iface.actionAddWmsLayer()` action with a custom function
>>> that would load my UI instead. The problem is that I can't seem to find
>>> where a signal's connected slots are stored with Qt.
>>>
>>> Ideally there would be some introspection mechanism by which I'd be able
>>> to retrieve which slots are associated with the action's `triggered` signal
>>> - I can't seem to find it though. After knowing which slot(s) were
>>> connected to the action's signal, I would presumably be able to
>>> `disconnect()` them and then connect my own.
>>>
>>> By looking at Qt's docs I thought that the QMetaObject class might be
>>> the place to look, but I still cannot find anything that looks seems to
>>> hold the registry of a signal's connected slots.
>>>
>>> Thanks in advance :)
>>>
>>>
>>>
>>> --
>>> ___ ___ __
>>> Ricardo Garcia Silva
>>>
>>
>>
>>
>> --
>> ___ ___ __
>> Ricardo Garcia Silva
>> ___
>> QGIS-Developer mailing list
>> QGIS-Developer@lists.osgeo.org
>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>
>


-- 
___ ___ __
Ricardo Garcia Silva
___
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Re: [QGIS-Developer] Replacing a dialogue with another at runtime with Python

2017-10-03 Thread Denis Rouzaud
Hi Ricardo,

Sorry to bother, but I think this kind of hack should be discouraged.

This modifies QGIS behavior in a hidden way by replacing native dialogs.
And as you pointed, there is probably no way of uninstalling your plugin
properly. It will require QGIS to restart to work as expected, which is not
that bad, but still.

If you think current behavior is not optimal, I would suggest to either:
* bring your improvements into master instead of a plugin
* create a dedicated button and menu entry in your plugin for your
customized dialog

With the latter option, I think it would be possible to add your menu entry
and button in the layer menu and layer toolbar, respectively.

Just my two cents.

Denis





Le mar. 3 oct. 2017 à 16:09, Ricardo Filipe Soares Garcia da <
ricardo.garcia.si...@gmail.com> a écrit :

> Hi all
>
> Answering my own question for posterity
>
> Turns out I can disconnect all slots from a signal by calling
> `my_action.triggered.disconnect()` without any arguments. My goal of
> replacing the native QGIS 'Add WMS/WMTS layer' dialogue with another one
> can be achieved like this:
>
> ```python
>
> def my_handler():
> print("Hello")
>
> action = iface.actionAddWmsLayer()
> action.triggered.disconnect()
> action.triggered.connect(my_handler)
> ```
>
> This leaves another problem to be solved: How to restore the native QGIS
> dialogue when my would-be plugin is deactivated by the user. The following
> seems to work on QGIS 2.18:
>
> ```
> provider_registry = qgis.core.QgsProviderRegistry.instance()
> add_wms_dialog = provider_registry.selectWidget("wms")
> action.triggered.disconnect()
> action.triggered.connect(add_wms_dialog.show)
>
> ```
>
> Best regards
>
>
>
> On Mon, Oct 2, 2017 at 12:41 PM, Ricardo Filipe Soares Garcia da <
> ricardo.garcia.si...@gmail.com> wrote:
>
>> Hi all
>>
>> Is it possible to replace one of QGIS' dialogues with a custom one during
>> runtime by using Python?
>>
>> My concrete goal is to replace the dialogue that shows when clicking the
>> 'Add WMS/WMTS Layer' with something custom. I'd like to enhance the native
>> QGIS dialogue with additional elements for selecting additional dimensions,
>> like time or elevation.
>>
>> Can this be done?
>>
>> I'm thinking that I'd only have to replace whatever slot is currently
>> defined on the `iface.actionAddWmsLayer()` action with a custom function
>> that would load my UI instead. The problem is that I can't seem to find
>> where a signal's connected slots are stored with Qt.
>>
>> Ideally there would be some introspection mechanism by which I'd be able
>> to retrieve which slots are associated with the action's `triggered` signal
>> - I can't seem to find it though. After knowing which slot(s) were
>> connected to the action's signal, I would presumably be able to
>> `disconnect()` them and then connect my own.
>>
>> By looking at Qt's docs I thought that the QMetaObject class might be the
>> place to look, but I still cannot find anything that looks seems to hold
>> the registry of a signal's connected slots.
>>
>> Thanks in advance :)
>>
>>
>>
>> --
>> ___ ___ __
>> Ricardo Garcia Silva
>>
>
>
>
> --
> ___ ___ __
> Ricardo Garcia Silva
> ___
> QGIS-Developer mailing list
> QGIS-Developer@lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
___
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Re: [QGIS-Developer] Replacing a dialogue with another at runtime with Python

2017-10-03 Thread Ricardo Filipe Soares Garcia da
Hi all

Answering my own question for posterity

Turns out I can disconnect all slots from a signal by calling
`my_action.triggered.disconnect()` without any arguments. My goal of
replacing the native QGIS 'Add WMS/WMTS layer' dialogue with another one
can be achieved like this:

```python

def my_handler():
print("Hello")

action = iface.actionAddWmsLayer()
action.triggered.disconnect()
action.triggered.connect(my_handler)
```

This leaves another problem to be solved: How to restore the native QGIS
dialogue when my would-be plugin is deactivated by the user. The following
seems to work on QGIS 2.18:

```
provider_registry = qgis.core.QgsProviderRegistry.instance()
add_wms_dialog = provider_registry.selectWidget("wms")
action.triggered.disconnect()
action.triggered.connect(add_wms_dialog.show)

```

Best regards



On Mon, Oct 2, 2017 at 12:41 PM, Ricardo Filipe Soares Garcia da <
ricardo.garcia.si...@gmail.com> wrote:

> Hi all
>
> Is it possible to replace one of QGIS' dialogues with a custom one during
> runtime by using Python?
>
> My concrete goal is to replace the dialogue that shows when clicking the
> 'Add WMS/WMTS Layer' with something custom. I'd like to enhance the native
> QGIS dialogue with additional elements for selecting additional dimensions,
> like time or elevation.
>
> Can this be done?
>
> I'm thinking that I'd only have to replace whatever slot is currently
> defined on the `iface.actionAddWmsLayer()` action with a custom function
> that would load my UI instead. The problem is that I can't seem to find
> where a signal's connected slots are stored with Qt.
>
> Ideally there would be some introspection mechanism by which I'd be able
> to retrieve which slots are associated with the action's `triggered` signal
> - I can't seem to find it though. After knowing which slot(s) were
> connected to the action's signal, I would presumably be able to
> `disconnect()` them and then connect my own.
>
> By looking at Qt's docs I thought that the QMetaObject class might be the
> place to look, but I still cannot find anything that looks seems to hold
> the registry of a signal's connected slots.
>
> Thanks in advance :)
>
>
>
> --
> ___ ___ __
> Ricardo Garcia Silva
>



-- 
___ ___ __
Ricardo Garcia Silva
___
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

[QGIS-Developer] Replacing a dialogue with another at runtime with Python

2017-10-02 Thread Ricardo Filipe Soares Garcia da
Hi all

Is it possible to replace one of QGIS' dialogues with a custom one during
runtime by using Python?

My concrete goal is to replace the dialogue that shows when clicking the
'Add WMS/WMTS Layer' with something custom. I'd like to enhance the native
QGIS dialogue with additional elements for selecting additional dimensions,
like time or elevation.

Can this be done?

I'm thinking that I'd only have to replace whatever slot is currently
defined on the `iface.actionAddWmsLayer()` action with a custom function
that would load my UI instead. The problem is that I can't seem to find
where a signal's connected slots are stored with Qt.

Ideally there would be some introspection mechanism by which I'd be able to
retrieve which slots are associated with the action's `triggered` signal -
I can't seem to find it though. After knowing which slot(s) were connected
to the action's signal, I would presumably be able to `disconnect()` them
and then connect my own.

By looking at Qt's docs I thought that the QMetaObject class might be the
place to look, but I still cannot find anything that looks seems to hold
the registry of a signal's connected slots.

Thanks in advance :)



-- 
___ ___ __
Ricardo Garcia Silva
___
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer