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):
if obj.removed:
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):
del self.__components[obj.name]
self.__del_component(obj)
......@@ -837,6 +843,11 @@ class kat(object):
if obj in self.__blocks[b].contents:
self.__blocks[b].contents.remove(obj)
if self.pykatgui != None:
self.pykatgui._onComponentRemoved(obj, nodes)
del nodes
import gc
print gc.get_referrers(obj)
......
......@@ -11,6 +11,7 @@ from PyQt4 import QtSvg
from PyQt4.QtSvg import QGraphicsSvgItem
import pykat.components
import exceptions
import weakref
nsize = 10
......@@ -143,10 +144,15 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem):
def __on_component_deleted(self, arg):
import gc
print gc.get_referrers(self)
def __init__(self, svgfile, component, nodes):
QGraphicsSvgItem.__init__(self,svgfile)
self.__nodeGraphics = []
self.__component = component
self.__component = weakref.ref(component, self.__on_component_deleted)
# this signals the itemChange() method when this item is moved
# used for refreshing the spaces between components
self.setFlags(QGraphicsItem.ItemSendsGeometryChanges)
......@@ -170,7 +176,7 @@ class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem):
self.setHandlesChildEvents(True)
@property
def component(self): return self.__component
def component(self): return self.__component()
def refresh(self):
for n in self.__nodeGraphics:
......@@ -179,10 +185,10 @@ class ComponentQGraphicsItem(QtSvg.QGraphicsSvgItem):
def itemChange(self, change, value):
# if the item is moved then update any spaces attached to it
if change == QGraphicsItem.ItemPositionHasChanged:
nodes = self.__component.nodes
nodes = self.component.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):
conn[1].getQGraphicsItem().refresh()
......
......@@ -71,6 +71,29 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
itm.setCacheMode(QGraphicsItem.NoCache)
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):
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