Denis, You were right, using selectionChanged on mapCanvas worked just fine.
Thanks! Alexandre Neto this worked just great. I guess I had been in the right direction before, but some how lost it. On Thu, Aug 22, 2013 at 1:37 PM, Denis Rouzaud <[email protected]>wrote: > 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 > [email protected]http://lists.osgeo.org/mailman/listinfo/qgis-developer > > >
_______________________________________________ Qgis-developer mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/qgis-developer
