root/gaphor/trunk/gaphor/diagram/elementitem.py

Revision 2205, 2.5 kB (checked in by arj..@yirdis.nl, 10 months ago)

ElementItem now unlinks itself if the UML model element is deleted.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 """
2 Abstract classes for element-like Diagram items.
3 """
4
5 import gobject
6 import gaphas
7 from zope import component
8 from gaphor.application import Application
9 from gaphor.UML.event import ElementDeleteEvent
10 from diagramitem import DiagramItem
11 from gaphor.diagram.style import get_text_point
12
13 __version__ = '$Revision$'
14
15 class ElementItem(gaphas.Element, DiagramItem):
16     __style__ = {
17         'min-size': (0, 0),
18         'stereotype-padding': (5, 10, 5, 10),
19     }
20
21     def __init__(self, id=None):
22         gaphas.Element.__init__(self)
23         DiagramItem.__init__(self, id)
24
25         self.min_width   = self.style.min_size[0]
26         self.min_height  = self.style.min_size[1]
27         self.auto_resize = 0
28
29
30     def save(self, save_func):
31         save_func('matrix', tuple(self.matrix))
32         for prop in ('width', 'height'):
33             self.save_property(save_func, prop)
34         DiagramItem.save(self, save_func)
35
36
37     def load(self, name, value):
38         if name == 'matrix':
39             self.matrix = eval(value)
40         else:
41             DiagramItem.load(self, name, value)
42
43
44     def setup_canvas(self):
45         gaphas.Element.setup_canvas(self)
46         self.register_handlers()
47
48
49     def teardown_canvas(self):
50         gaphas.Element.teardown_canvas(self)
51         self.unregister_handlers()
52
53
54     def register_handlers(self):
55         super(ElementItem, self).register_handlers()
56         Application.register_handler(self._on_element_delete)
57
58
59     def unregister_handlers(self):
60         super(ElementItem, self).unregister_handlers()
61         Application.unregister_handler(self._on_element_delete)
62
63
64     @component.adapter(ElementDeleteEvent)
65     def _on_element_delete(self, event):
66         """
67         Delete the item if the subject is deleted.
68         """
69         if event and event.element is self.subject:
70             self.unlink()
71
72
73     def pre_update(self, context):
74         #super(ElementItem, self).pre_update(context)
75         self.update_stereotype()
76         DiagramItem.pre_update(self, context)
77         gaphas.Element.pre_update(self, context)
78
79
80     def point(self, x, y):
81         d1 = gaphas.Element.point(self, x, y)
82         d2 = DiagramItem.point(self, x, y)
83         return min(d1, d2)
84
85
86     def post_update(self, context):
87         gaphas.Element.post_update(self, context)
88         DiagramItem.post_update(self, context)
89
90
91     def draw(self, context):
92         gaphas.Element.draw(self, context)
93         DiagramItem.draw(self, context)
94
95
96     def text_align(self, extents, align, padding, outside):
97         x, y = get_text_point(extents, self.width, self.height,
98                 align, padding, outside)
99
100         return x, y
101
102
103 # vim:sw=4
Note: See TracBrowser for help on using the browser.