Skip to content
Snippets Groups Projects
Commit ad82f792 authored by Daniel Brown's avatar Daniel Brown
Browse files

updating gui on object removal

parent fde8c507
No related branches found
No related tags found
No related merge requests found
...@@ -822,6 +822,12 @@ class kat(object): ...@@ -822,6 +822,12 @@ class kat(object):
if obj.removed: if obj.removed:
raise pkex.BasePyKatException("{0} has already been removed".format(obj.name)) raise pkex.BasePyKatException("{0} has already been removed".format(obj.name))
nodes = None
# store nodes that this componet is attached to as a reference for gui
if isinstance(obj, Component):
nodes = self.nodes.getComponentNodes(obj)
if isinstance(obj, Component): if isinstance(obj, Component):
del self.__components[obj.name] del self.__components[obj.name]
self.__del_component(obj) self.__del_component(obj)
...@@ -837,6 +843,11 @@ class kat(object): ...@@ -837,6 +843,11 @@ class kat(object):
if obj in self.__blocks[b].contents: if obj in self.__blocks[b].contents:
self.__blocks[b].contents.remove(obj) self.__blocks[b].contents.remove(obj)
if self.pykatgui != None:
self.pykatgui._onComponentRemoved(obj, nodes)
del nodes
import gc import gc
print gc.get_referrers(obj) print gc.get_referrers(obj)
......
...@@ -11,6 +11,7 @@ from PyQt4 import QtSvg ...@@ -11,6 +11,7 @@ from PyQt4 import QtSvg
from PyQt4.QtSvg import QGraphicsSvgItem from PyQt4.QtSvg import QGraphicsSvgItem
import pykat.components import pykat.components
import exceptions import exceptions
import weakref
nsize = 10 nsize = 10
...@@ -143,10 +144,15 @@ class SpaceQGraphicsItem(QGraphicsLineItem): ...@@ -143,10 +144,15 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem): class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem):
def __on_component_deleted(self, arg):
import gc
print gc.get_referrers(self)
def __init__(self, svgfile, component, nodes): def __init__(self, svgfile, component, nodes):
QGraphicsSvgItem.__init__(self,svgfile) QGraphicsSvgItem.__init__(self,svgfile)
self.__nodeGraphics = [] self.__nodeGraphics = []
self.__component = component self.__component = weakref.ref(component, self.__on_component_deleted)
# this signals the itemChange() method when this item is moved # this signals the itemChange() method when this item is moved
# used for refreshing the spaces between components # used for refreshing the spaces between components
self.setFlags(QGraphicsItem.ItemSendsGeometryChanges) self.setFlags(QGraphicsItem.ItemSendsGeometryChanges)
...@@ -170,7 +176,7 @@ class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem): ...@@ -170,7 +176,7 @@ class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem):
self.setHandlesChildEvents(True) self.setHandlesChildEvents(True)
@property @property
def component(self): return self.__component def component(self): return self.__component()
def refresh(self): def refresh(self):
for n in self.__nodeGraphics: for n in self.__nodeGraphics:
...@@ -179,10 +185,10 @@ class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem): ...@@ -179,10 +185,10 @@ class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem):
def itemChange(self, change, value): def itemChange(self, change, value):
# if the item is moved then update any spaces attached to it # if the item is moved then update any spaces attached to it
if change == QGraphicsItem.ItemPositionHasChanged: if change == QGraphicsItem.ItemPositionHasChanged:
nodes = self.__component.nodes nodes = self.component.nodes
for n in nodes: for n in nodes:
conn = n.amIConnected(self.__component) conn = n.amIConnected(self.component)
if conn[0] and isinstance(conn[1], pykat.components.space): if conn[0] and isinstance(conn[1], pykat.components.space):
conn[1].getQGraphicsItem().refresh() conn[1].getQGraphicsItem().refresh()
......
...@@ -71,6 +71,29 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow): ...@@ -71,6 +71,29 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
itm.setCacheMode(QGraphicsItem.NoCache) itm.setCacheMode(QGraphicsItem.NoCache)
self.__scene.addItem(itm) self.__scene.addItem(itm)
def _onComponentRemoved(self, comp, nodes):
"""
When a component has been removed from the kat object this function should update
all gui objects.
comp - object that is removed
nodes - nodes that this comp was attached too, as that information may no longer be accessible
"""
itm = comp.getQGraphicsItem()
if itm != None:
itm.refresh()
self.__scene.removeItem(itm)
for n in nodes:
for cc in self._kat.nodes.getNodeComponents(n):
print "refresh", cc
if cc != None:
ccitm = cc.getQGraphicsItem()
if ccitm != None:
ccitm.refresh()
def exportToSVG(self): def exportToSVG(self):
self.statusbar.showMessage("Saving to 'output.svg'...") self.statusbar.showMessage("Saving to 'output.svg'...")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment