Alexandre,

I have included your tool in the DigitizingTools plugin [1] as I have told you the other day. DigitizingTools is already QGIS 2.0 ready (though still marked as experimental). Feel free to join this effort.

Concerning your problem I reckon you have the same signal connected many times thus slowing down QGIS. See the enable method in any of the digitizing tools, e.g. [2] how I solved it.

regards

Bernhard

[1] http://plugins.qgis.org/plugins/DigitizingTools/
[2] https://github.com/bstroebl/DigitizingTools/blob/master/tools/dtprolongline.py

Am 22.08.2013 14:11, schrieb Alexandre Neto:
Hello all,

I'm updating the Multipart split plugin
<http://plugins.qgis.org/plugins/splitmultipart/> to make it work with
the 2.0 API.

Has I have successfully updated the plugin to make it work in 2.0, I
would like to improve it's button behavior to work like the rest of the
advanced editing toolbar. I am able to enable and disable it if the
current layer is editable.

Now I'm trying to get the same behavior if there are selected features.
I have made it work, but QGIS starts to get really slow... I found out
that's because lots of connections are being created to
SIGNAL("selectionChanged()").

Can someone please, point me in the right direction, or tell me where
can I find some code example doing this?

Thank you very much,

Alexandre Neto

Part of the code bellow:

def initGui(self):
         # Create action that will start plugin configuration
         self.action = QAction(
             QIcon(":/plugins/splitmultipart/icon.svg"),
             QCoreApplication.translate('Multipart split', u"Split
Selected Multipart features"), self.iface.mainWindow())
         self.action.setEnabled(False)
         # connect to signals for button behavior
         QObject.connect(self.action, SIGNAL("triggered()"), self.run)
         QObject.connect(self.iface,
SIGNAL("currentLayerChanged(QgsMapLayer*)"), self.toggle)
         #QObject.connect(self.iface,
SIGNAL("selectionChanged(QgsMapLayer *)"), self.toggle)

         # Add toolbar button and menu item
         self.iface.advancedDigitizeToolBar().addAction(self.action)
         self.iface.editMenu().addAction(self.action)
     def toggle(self):
         mc = self.canvas
         layer = mc.currentLayer()
         # Decide whether the plugin button is enable or disable
         if layer <> None:
             # set enable
             if layer.isEditable():

QObject.connect(layer,SIGNAL("editingStopped()"),self.toggle)
                 QObject.connect(layer, SIGNAL("selectionChanged()"),
self.toggle)

QObject.disconnect(layer,SIGNAL("editingStarted()"),self.toggle)
                 self.iface.messageBar().pushMessage("Debug"," Connect
SIGNAL(selectionChanged()",0)
                 if layer.selectedFeatureCount() > 0:
                     self.action.setEnabled(True)
                 else:
                     self.action.setEnabled(False)
             # set disable
             else:
                 self.action.setEnabled(False)

QObject.connect(layer,SIGNAL("editingStarted()"),self.toggle)

QObject.disconnect(layer,SIGNAL("editingStopped()"),self.toggle)
                 QObject.disconnect(layer, SIGNAL("selectionChanged()"),
self.toggle)
                 self.iface.messageBar().pushMessage("Debug","
Disconnect SIGNAL(selectionChanged()",0)


_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer



__________ Information from ESET Mail Security, version of virus signature 
database 8715 (20130822) __________

The message was checked by ESET Mail Security.
http://www.eset.com




__________ Information from ESET Mail Security, version of virus signature 
database 8715 (20130822) __________

The message was checked by ESET Mail Security.
http://www.eset.com


_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to