Changeset 7877:f10c697598ae in orange


Ignore:
Timestamp:
04/22/11 15:18:20 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
5a24ba28b828fea6b4b1021c58f9c4dfe4c5290a
Message:

Remove references to the widget instance after deleting it. Allows the gc to reclaim the memory.

Location:
orange/OrangeCanvas
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeCanvas/orngCanvasItems.py

    r7117 r7877  
    8787    def remove(self): 
    8888        self.hide() 
     89        self.startWidget = None 
     90        self.endWidget = None  
     91        self.scene().removeItem(self) 
    8992 
    9093# ####################################### 
     
    129132        QObject.connect(self.outWidget.instance, SIGNAL("dynamicLinkEnabledChanged(PyQt_PyObject, bool)"), self.updateDynamicEnableState) 
    130133 
    131     def remove(self):         
     134    def remove(self): 
    132135        self.hide() 
    133136        self.setToolTip("") 
     137        self.outWidget = None 
     138        self.inWidget = None 
     139        self.scene().removeItem(self) 
    134140         
    135141    def getEnabled(self): 
     
    348354            self.instance.linksOut.clear()      # this helps python to more quickly delete the unused objects 
    349355            self.instance.linksIn.clear() 
     356            self.instance.setProgressBarHandler(None)   # set progress bar event handler 
     357            self.instance.setProcessingHandler(None) 
     358            self.instance.setWidgetStateHandler(None) 
     359            self.instance.setEventHandler(None) 
    350360            self.instance.onDeleteWidget()      # this is a cleanup function that can take care of deleting some unused objects 
    351361            try: 
    352362                import sip 
    353363                sip.delete(self.instance) 
    354             except: 
    355                 pass 
     364            except Exception, ex: 
     365                print >> sys.stderr, "Error deleting the widget: \n%s" % str(ex) 
     366            self.instance = None 
     367             
     368            import gc 
     369            gc.collect() 
     370             
     371            self.scene().removeItem(self) 
     372                 
    356373 
    357374    def savePosition(self): 
  • orange/OrangeCanvas/orngDoc.py

    r7788 r7877  
    127127            if dialog.exec_() == QDialog.Rejected: 
    128128                return None 
     129        else: 
     130            dialog.deleteLater() # Dialog must be deleted 
    129131 
    130132#        self.signalManager.setFreeze(1) 
     
    182184         
    183185        if saveTempDoc: 
    184             self.saveTempDoc()  
     186            self.saveTempDoc() 
    185187 
    186188 
  • orange/OrangeCanvas/orngSignalManager.py

    r7717 r7877  
    260260        self.addEvent("Remove widget " + widget.captionTitle, eventVerbosity = 2) 
    261261        self.widgets.remove(widget) 
     262        if widget in self.links: 
     263            del self.links[widget] 
    262264 
    263265    def getLinks(self, widgetFrom=None, widgetTo=None, signalNameFrom=None, signalNameTo=None): 
  • orange/OrangeCanvas/orngView.py

    r7117 r7877  
    326326            start = self.tempLine.startWidget or self.tempLine.widget 
    327327            end = self.tempLine.endWidget or self.tempLine.widget 
    328             self.tempLine.hide() 
     328#            self.tempLine.hide() 
     329            self.tempLine.remove() 
    329330            self.tempLine = None 
    330331 
Note: See TracChangeset for help on using the changeset viewer.