Hi Alexandre,
Why don't you use selectionChanged on mapCanvas?
You have a line commented, I suppose this was it.
Mainly, I suppose the problem is that you never disconnect you layer
from the signals since you always call the method for the current
layer....so the previous current is never disconnected....
Hope this helps,
Cheers,
Denis
On 08/22/2013 02:11 PM, Alexandre Neto wrote:
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
_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer