Changeset 1097
- Timestamp:
- 12/05/06 12:29:08 (2 years ago)
- Files:
-
- gaphor/branches/new-canvas/gaphor/UML/umllex.py (modified) (21 diffs)
- gaphor/branches/new-canvas/gaphor/adapters/editors.py (modified) (2 diffs)
- gaphor/branches/new-canvas/gaphor/diagram/association.py (modified) (4 diffs)
- gaphor/branches/new-canvas/gaphor/diagram/feature.py (modified) (3 diffs)
- gaphor/branches/new-canvas/gaphor/diagram/objectnode.py (modified) (11 diffs)
- gaphor/branches/new-canvas/gaphor/ui/mainwindow.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphor/branches/new-canvas/gaphor/UML/umllex.py
r599 r1097 92 92 93 93 def parse_attribute(self, s): 94 """Parse string s in the property. Tagged values, multiplicity and stuff 94 """ 95 Parse string s in the property. Tagged values, multiplicity and stuff 95 96 like that is altered to reflect the data in the property string. 96 97 """ … … 131 132 self.defaultValue = create(LiteralSpecification) 132 133 self.defaultValue.value = g('default') 133 #if not self.taggedValue:134 # self.taggedValue = create(LiteralSpecification)135 #self.taggedValue.value = g('tags')136 134 while self.taggedValue: 137 135 self.taggedValue[0].unlink() … … 142 140 tv.value = t 143 141 self.taggedValue = tv 144 #print g('vis'), g('derived'), g('name'), g('type'), g('mult_l'), g('mult_u'), g('default'), g('tags') 142 145 143 146 144 def parse_association_end(self, s): 147 """Parse the text at one end of an association. The association end holds 145 """ 146 Parse the text at one end of an association. The association end holds 148 147 two strings. It is automattically figured out which string is fed to the 149 148 parser. … … 153 152 m = association_end_mult_pat.match(s) 154 153 if m and m.group('mult_u') or m.group('tags'): 155 #print 'multmatch'156 154 g = m.group 157 155 if not self.lowerValue: … … 161 159 self.upperValue = create(LiteralSpecification) 162 160 self.upperValue.value = g('mult_u') 163 #if not self.taggedValue:164 # self.taggedValue = create(LiteralSpecification)165 #self.taggedValue.value = g('tags')166 161 while self.taggedValue: 167 162 self.taggedValue[0].unlink() … … 172 167 tv.value = t 173 168 self.taggedValue = tv 174 # We have multiplicity 175 else: 176 #print 'namematch' 169 else: 177 170 m = association_end_name_pat.match(s) 178 171 g = m.group … … 196 189 self.upperValue = create(LiteralSpecification) 197 190 self.upperValue.value = g('mult_u') 198 #if g('tags'):199 # if not self.taggedValue:200 # self.taggedValue = create(LiteralSpecification)201 # self.taggedValue.value = g('tags')202 191 tags = g('tags') 203 192 if tags: … … 216 205 217 206 def parse_operation(self, s): 218 """Parse string s in the operation. Tagged values, parameters and 207 """ 208 Parse string s in the operation. Tagged values, parameters and 219 209 visibility is altered to reflect the data in the operation string. 220 210 """ … … 282 272 p.defaultValue = create(LiteralSpecification) 283 273 p.defaultValue.value = g('default') 284 #if not p.taggedValue:285 # p.taggedValue = create(LiteralSpecification)286 #p.taggedValue.value = g('tags')287 274 while self.taggedValue: 288 275 self.taggedValue[0].unlink() … … 294 281 self.formalParameter = p 295 282 296 #print ' ', g('dir') or 'in', g('name'), g('type'), g('mult_l'), g('mult_u'), g('default'), g('tags')297 298 283 # Do the next parameter: 299 284 params = g('rest') … … 305 290 306 291 def parse_lifeline(self, s): 307 """Parse string s in a lifeline. If a class is defined and can be found 292 """ 293 Parse string s in a lifeline. If a class is defined and can be found 308 294 in the datamodel, then a class is connected to the lifelines 'represents' 309 property.""" 295 property. 296 """ 310 297 m = lifeline_pat.match(s) 311 298 g = m.group … … 332 319 } 333 320 321 334 322 def render_attribute(self, visibility=False, is_derived=False, type=False, 335 323 multiplicity=False, default=False, tags=False): 336 """Create a OCL representation of the attribute, 324 """ 325 Create a OCL representation of the attribute, 337 326 Returns the attribute as a string. 338 327 If one or more of the parameters (visibility, is_derived, type, … … 378 367 s.write(' = %s' % self.defaultValue.value) 379 368 380 #if tags and self.taggedValue and self.taggedValue.value:381 # s.write(' { %s }' % self.taggedValue.value)382 369 if self.taggedValue: 383 370 tvs = ', '.join(filter(None, map(getattr, self.taggedValue, … … 387 374 s.reset() 388 375 return s.read() 376 389 377 390 378 def render_association_end(self): … … 406 394 if self.upperValue and self.upperValue.value: 407 395 if self.lowerValue and self.lowerValue.value: 408 #print 'render_association_end:', self.lowerValue.value, self.upperValue.value409 396 m.write('%s..%s' % (self.lowerValue.value, self.upperValue.value)) 410 397 else: 411 398 m.write('%s' % self.upperValue.value) 412 #if self.taggedValue and self.taggedValue.value:413 # m.write(' {%s}' % self.taggedValue.value)414 399 if self.taggedValue: 415 400 tvs = ',\n '.join(filter(None, map(getattr, self.taggedValue, … … 420 405 mult = m.read() 421 406 422 #print 'render_association_end', name, mult423 407 return name, mult 424 408 409 425 410 def render_property(self, *args, **kwargs): 426 """Render a gaphor.UML.Property either as an attribute or as a 411 """ 412 Render a gaphor.UML.Property either as an attribute or as a 427 413 (name, multiplicity) tuple for association ends. 428 414 … … 434 420 return render_attribute(self, *args, **kwargs) 435 421 422 436 423 def render_operation(self, visibility=False, type=False, multiplicity=False, 437 424 default=False, tags=False, direction=False): 438 """Create a OCL representation of the operation, 425 """ 426 Create a OCL representation of the operation, 439 427 Returns the operation as a string. 440 428 """ … … 458 446 459 447 for p in self.formalParameter: 460 #print p # direction, name, type, mult, default, tags461 448 if direction: 462 449 s.write(p.direction) … … 472 459 if default and p.defaultValue and p.defaultValue.value: 473 460 s.write(' = %s' % p.defaultValue.value) 474 #if tags and p.taggedValue and p.taggedValue.value:475 # s.write(' { %s }' % p.taggedValue.value)476 461 if p.taggedValue: 477 462 tvs = ', '.join(filter(None, map(getattr, p.taggedValue, … … 492 477 else: 493 478 s.write('[%s]' % rr.upperValue.value) 494 #if tags and rr.taggedValue and rr.taggedValue.value:495 # s.write(' { %s }' % rr.taggedValue.value)496 479 if rr.taggedValue: 497 480 tvs = ', '.join(filter(None, map(getattr, rr.taggedValue, … … 502 485 return s.read() 503 486 487 504 488 def render_lifeline(self): 505 489 """ gaphor/branches/new-canvas/gaphor/adapters/editors.py
r1093 r1097 9 9 from gaphas import constraint 10 10 from gaphor import UML 11 from gaphor.UML.umllex import render_attribute 11 12 from gaphor.diagram.interfaces import IEditor 12 13 from gaphor.diagram import items … … 144 145 if self._edit is self._item: 145 146 return self._edit.subject.name 146 if self._edit.get_mult(): 147 return self._edit.get_name() + '[' + self._edit.get_mult() + ']' 148 return self._edit.get_name() 147 return render_attribute(self._edit.subject) 149 148 150 149 def get_bounds(self): gaphor/branches/new-canvas/gaphor/diagram/association.py
r1091 r1097 245 245 if self.tail_end.subject is self.subject.memberEnd[0]: 246 246 self._dir_angle += pi 247 else: 248 self.draw_head = self.draw_head_undefined 249 self.draw_tail = self.draw_tail_undefined 247 250 248 251 # update relationship after self.set calls to avoid circural updates … … 292 295 cr.stroke() 293 296 294 def draw_head_composite(self, context): 295 """Draw a closed diamond on the line end. 296 """ 297 self.draw_head_shared(context) 298 context.cairo.fill_preserve() 299 300 def draw_tail_composite(self, context): 301 """Draw a closed diamond on the line end. 302 """ 303 self.draw_tail_shared(context) 304 cr = context.cairo 305 cr.fill_preserve() 306 cr.stroke() 307 308 def draw_head_shared(self, context): 309 """Draw an open diamond on the line end. 310 """ 311 cr = context.cairo 297 def _draw_diamond(self, cr): 312 298 cr.move_to(20, 0) 313 299 cr.line_to(10, -6) 314 300 cr.line_to(0, 0) 315 301 cr.line_to(10, 6) 302 #cr.line_to(20, 0) 303 cr.close_path() 304 305 def draw_head_composite(self, context): 306 """Draw a closed diamond on the line end. 307 """ 308 cr = context.cairo 309 self._draw_diamond(cr) 310 context.cairo.fill_preserve() 311 cr.stroke() 312 cr.move_to(20, 0) 313 314 def draw_tail_composite(self, context): 315 """Draw a closed diamond on the line end. 316 """ 317 cr = context.cairo 316 318 cr.line_to(20, 0) 319 cr.stroke() 320 self._draw_diamond(cr) 321 cr.fill_preserve() 322 cr.stroke() 323 324 def draw_head_shared(self, context): 325 """Draw an open diamond on the line end. 326 """ 327 cr = context.cairo 328 self._draw_diamond(cr) 329 cr.move_to(20, 0) 317 330 318 331 def draw_tail_shared(self, context): … … 321 334 cr = context.cairo 322 335 cr.line_to(20, 0) 323 #cr.stroke() 324 cr.line_to(10, -6) 325 cr.line_to(0, 0) 326 cr.line_to(10, 6) 327 cr.line_to(20, 0) 336 cr.stroke() 337 self._draw_diamond(cr) 338 cr.stroke() 328 339 329 340 def draw_head_navigable(self, context): … … 342 353 cr = context.cairo 343 354 cr.line_to(0, 0) 355 cr.stroke() 344 356 cr.move_to(15, -6) 345 357 cr.line_to(0, 0) 346 358 cr.line_to(15, 6) 347 cr.stroke()348 359 349 360 def draw_head_undefined(self, context): gaphor/branches/new-canvas/gaphor/diagram/feature.py
r1093 r1097 9 9 from gaphor.undomanager import undoable 10 10 from gaphor.diagram import DiagramItemMeta 11 from gaphas.util import text_extents 11 from gaphas.util import text_extents, text_set_font 12 import font 12 13 13 14 class FeatureItem(DiagramItem): … … 124 125 def draw(self, context): 125 126 cr = context.cairo 127 text_set_font(cr, font.FONT) 126 128 cr.show_text(self.subject.render() or '') 127 129 … … 174 176 def draw(self, context): 175 177 cr = context.cairo 178 text_set_font(cr, font.FONT) 176 179 cr.show_text(self.subject.render() or '') 177 180 gaphor/branches/new-canvas/gaphor/diagram/objectnode.py
r958 r1097 5 5 import itertools 6 6 7 import gobject 8 import pango 7 from gaphor import UML 9 8 10 #import diacanvas 11 from gaphor import UML 12 from gaphor import resource 13 14 from gaphor.diagram import TextElement 15 from gaphor.diagram.align import V_ALIGN_MIDDLE 9 #from gaphor.diagram import TextElement 10 #from gaphor.diagram.align import V_ALIGN_MIDDLE 16 11 #from gaphor.diagram.groupable import GroupBase 17 12 from gaphor.diagram.nameditem import NamedItem 18 13 19 14 20 #class ObjectNodeItem(NamedItem, GroupBase):21 15 class ObjectNodeItem(NamedItem): 22 16 """ … … 29 23 __uml__ = UML.ObjectNode 30 24 31 __s_valign__ = V_ALIGN_MIDDLE 32 33 FONT = 'sans 10' 34 MARGIN = 10 25 __style__ = { 26 'margin': (10, 10, 10, 10) 27 } 35 28 36 29 popup_menu = NamedItem.popup_menu + ( … … 44 37 ) 45 38 46 __gproperties__ = {47 'show-ordering': (gobject.TYPE_BOOLEAN, 'show ordering',48 'show ordering of object node', False,49 gobject.PARAM_READWRITE),50 }51 52 39 def __init__(self, id = None): 53 GroupBase.__init__(self)54 40 NamedItem.__init__(self, id) 55 41 … … 58 44 59 45 self._ordering = diacanvas.shape.Text() 60 self._ordering.set_font_description(pango.FontDescription( self.FONT))46 self._ordering.set_font_description(pango.FontDescription(font.FONT)) 61 47 self._ordering.set_alignment(pango.ALIGN_CENTER) 62 48 self._ordering.set_markup(False) 63 49 64 50 self._show_ordering = False 65 self.set_prop_persistent('show-ordering')66 51 52 def save(self, save_func): 53 save_func('show-ordering', self._show_ordering) 54 super(ObjectNodeItem, self).save(save_func) 55 56 def load(self, name, value): 57 if name == 'show-ordering': 58 self._show_ordering = eval(value) 59 else: 60 super(ObjectNodeItem, self).load(name, value) 67 61 68 62 def on_subject_notify(self, pspec, notifiers = ()): … … 73 67 NamedItem.on_subject_notify(self, pspec, notifiers) 74 68 if self.subject: 75 factory = resource(UML.ElementFactory)69 factory = UML 76 70 if not self.subject.upperBound: 77 71 self.subject.upperBound = factory.create(UML.LiteralSpecification) … … 102 96 103 97 104 def set_ordering(self, ordering):98 def _set_ordering(self, ordering): 105 99 """ 106 100 Set ordering of object node. … … 110 104 111 105 112 def get_ordering(self): 113 """ 114 Determine ordering of object node. 115 """ 116 return self.subject.ordering 106 ordering = property(lambda s: s.subject.ordering, _set_ordering) 117 107 118 119 def on_update(self, affine): 108 def update(self, context): 120 109 """ 121 110 Update object node, its ordering and upper bound specification. 122 111 """ 123 NamedItem. on_update(self, affine)112 NamedItem.update(self, context) 124 113 125 114 if self.subject: … … 135 124 ord_width, ord_height = self._ordering.to_pango_layout(True).get_pixel_size() 136 125 x = (self.width - ord_width) / 2 137 self._ordering.set_pos((x, self.height + self. MARGIN))126 self._ordering.set_pos((x, self.height + self.style.margin[0])) 138 127 139 128 self._ordering.set_max_width(ord_width) … … 141 130 142 131 self.set_bounds((min(0, x), 0, 143 max(self.width, ord_width), self.height + self. MARGIN+ ord_height))132 max(self.width, ord_width), self.height + self.style.margin[0] + ord_height)) 144 133 else: 145 134 ord_width, ord_height = 0, 0 … … 150 139 ub_width, ub_height = self._upper_bound.get_size() 151 140 x = (self.width - ub_width) / 2 152 y = self.height + ord_height + self. MARGIN141 y = self.height + ord_height + self.style.margin[0] 153 142 self._upper_bound.update_label(x, y) 154 143 155 GroupBase.on_update(self, affine)156 144 145 146 def draw(self, context): 147 super(ObjectNodeItem, self).draw(context) 157 148 158 149 def on_shape_iter(self): … … 162 153 else: 163 154 return it 155 156 157 # vim:sw=4:et:ai gaphor/branches/new-canvas/gaphor/ui/mainwindow.py
r1068 r1097 110 110 'ViewZoom100', 111 111 'separator', 112 'SnapToGrid',113 'ShowGrid',114 'separator',112 #'SnapToGrid', 113 #'ShowGrid', 114 #'separator', 115 115 'CreateDiagram', 116 116 'DeleteDiagram',
