Btw, I have created a pull request for this. Hopefully, it will be in core for 2.1 !

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

Reply via email to