Changeset 1097

Show
Ignore:
Timestamp:
12/05/06 12:29:08 (2 years ago)
Author:
arjanmol
Message:
  • fixed editing of association ends
  • attributes and operations no longer bold
  • cleanup
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/branches/new-canvas/gaphor/UML/umllex.py

    r599 r1097  
    9292 
    9393def 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 
    9596    like that is altered to reflect the data in the property string. 
    9697    """ 
     
    131132            self.defaultValue = create(LiteralSpecification) 
    132133        self.defaultValue.value = g('default') 
    133         #if not self.taggedValue: 
    134         #    self.taggedValue = create(LiteralSpecification) 
    135         #self.taggedValue.value = g('tags') 
    136134        while self.taggedValue: 
    137135            self.taggedValue[0].unlink() 
     
    142140                tv.value = t 
    143141                self.taggedValue = tv 
    144         #print g('vis'), g('derived'), g('name'), g('type'), g('mult_l'), g('mult_u'), g('default'), g('tags') 
     142 
    145143 
    146144def 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 
    148147    two strings. It is automattically figured out which string is fed to the 
    149148    parser. 
     
    153152    m = association_end_mult_pat.match(s) 
    154153    if m and m.group('mult_u') or m.group('tags'): 
    155         #print 'multmatch' 
    156154        g = m.group 
    157155        if not self.lowerValue: 
     
    161159            self.upperValue = create(LiteralSpecification) 
    162160        self.upperValue.value = g('mult_u') 
    163         #if not self.taggedValue: 
    164         #    self.taggedValue = create(LiteralSpecification) 
    165         #self.taggedValue.value = g('tags') 
    166161        while self.taggedValue: 
    167162            self.taggedValue[0].unlink() 
     
    172167                tv.value = t 
    173168                self.taggedValue = tv 
    174         # We have multiplicity 
    175     else: 
    176         #print 'namematch' 
     169    else: 
    177170        m = association_end_name_pat.match(s) 
    178171        g = m.group 
     
    196189                    self.upperValue = create(LiteralSpecification) 
    197190                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') 
    202191            tags = g('tags') 
    203192            if tags: 
     
    216205 
    217206def 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 
    219209    visibility is altered to reflect the data in the operation string. 
    220210    """ 
     
    282272                p.defaultValue = create(LiteralSpecification) 
    283273            p.defaultValue.value = g('default') 
    284             #if not p.taggedValue: 
    285             #    p.taggedValue = create(LiteralSpecification) 
    286             #p.taggedValue.value = g('tags') 
    287274            while self.taggedValue: 
    288275                self.taggedValue[0].unlink() 
     
    294281            self.formalParameter = p 
    295282 
    296             #print ' ', g('dir') or 'in', g('name'), g('type'), g('mult_l'), g('mult_u'), g('default'), g('tags') 
    297  
    298283            # Do the next parameter: 
    299284            params = g('rest') 
     
    305290 
    306291def 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 
    308294    in the datamodel, then a class is connected to the lifelines 'represents' 
    309     property.""" 
     295    property. 
     296    """ 
    310297    m = lifeline_pat.match(s) 
    311298    g = m.group 
     
    332319} 
    333320 
     321 
    334322def render_attribute(self, visibility=False, is_derived=False, type=False, 
    335323                           multiplicity=False, default=False, tags=False): 
    336     """Create a OCL representation of the attribute, 
     324    """ 
     325    Create a OCL representation of the attribute, 
    337326    Returns the attribute as a string. 
    338327    If one or more of the parameters (visibility, is_derived, type, 
     
    378367        s.write(' = %s' % self.defaultValue.value) 
    379368 
    380     #if tags and self.taggedValue and self.taggedValue.value: 
    381     #    s.write(' { %s }' % self.taggedValue.value) 
    382369    if self.taggedValue: 
    383370        tvs = ', '.join(filter(None, map(getattr, self.taggedValue, 
     
    387374    s.reset() 
    388375    return s.read() 
     376 
    389377 
    390378def render_association_end(self): 
     
    406394    if self.upperValue and self.upperValue.value:   
    407395        if self.lowerValue and self.lowerValue.value: 
    408             #print 'render_association_end:', self.lowerValue.value, self.upperValue.value 
    409396            m.write('%s..%s' % (self.lowerValue.value, self.upperValue.value)) 
    410397        else: 
    411398            m.write('%s' % self.upperValue.value) 
    412     #if self.taggedValue and self.taggedValue.value: 
    413     #    m.write(' {%s}' % self.taggedValue.value) 
    414399    if self.taggedValue: 
    415400        tvs = ',\n '.join(filter(None, map(getattr, self.taggedValue, 
     
    420405    mult = m.read() 
    421406 
    422     #print 'render_association_end', name, mult 
    423407    return name, mult 
    424408 
     409 
    425410def 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 
    427413    (name, multiplicity) tuple for association ends. 
    428414 
     
    434420        return render_attribute(self, *args, **kwargs) 
    435421 
     422 
    436423def render_operation(self, visibility=False, type=False, multiplicity=False, 
    437424                           default=False, tags=False, direction=False): 
    438     """Create a OCL representation of the operation, 
     425    """ 
     426    Create a OCL representation of the operation, 
    439427    Returns the operation as a string. 
    440428    """ 
     
    458446 
    459447    for p in self.formalParameter: 
    460         #print p # direction, name, type, mult, default, tags 
    461448        if direction: 
    462449            s.write(p.direction) 
     
    472459        if default and p.defaultValue and p.defaultValue.value: 
    473460            s.write(' = %s' % p.defaultValue.value) 
    474         #if tags and  p.taggedValue and p.taggedValue.value: 
    475         #    s.write(' { %s }' % p.taggedValue.value) 
    476461        if p.taggedValue: 
    477462             tvs = ', '.join(filter(None, map(getattr, p.taggedValue, 
     
    492477            else: 
    493478                s.write('[%s]' % rr.upperValue.value) 
    494         #if tags and rr.taggedValue and rr.taggedValue.value: 
    495         #    s.write(' { %s }' % rr.taggedValue.value) 
    496479        if rr.taggedValue: 
    497480            tvs = ', '.join(filter(None, map(getattr, rr.taggedValue, 
     
    502485    return s.read() 
    503486 
     487 
    504488def render_lifeline(self): 
    505489    """ 
  • gaphor/branches/new-canvas/gaphor/adapters/editors.py

    r1093 r1097  
    99from gaphas import constraint 
    1010from gaphor import UML 
     11from gaphor.UML.umllex import render_attribute 
    1112from gaphor.diagram.interfaces import IEditor 
    1213from gaphor.diagram import items 
     
    144145        if self._edit is self._item: 
    145146            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) 
    149148 
    150149    def get_bounds(self): 
  • gaphor/branches/new-canvas/gaphor/diagram/association.py

    r1091 r1097  
    245245                if self.tail_end.subject is self.subject.memberEnd[0]: 
    246246                    self._dir_angle += pi 
     247        else: 
     248            self.draw_head = self.draw_head_undefined 
     249            self.draw_tail = self.draw_tail_undefined 
    247250 
    248251        # update relationship after self.set calls to avoid circural updates 
     
    292295        cr.stroke() 
    293296 
    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): 
    312298        cr.move_to(20, 0) 
    313299        cr.line_to(10, -6) 
    314300        cr.line_to(0, 0) 
    315301        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 
    316318        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) 
    317330 
    318331    def draw_tail_shared(self, context): 
     
    321334        cr = context.cairo 
    322335        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() 
    328339 
    329340    def draw_head_navigable(self, context): 
     
    342353        cr = context.cairo 
    343354        cr.line_to(0, 0) 
     355        cr.stroke() 
    344356        cr.move_to(15, -6) 
    345357        cr.line_to(0, 0) 
    346358        cr.line_to(15, 6) 
    347         cr.stroke() 
    348359 
    349360    def draw_head_undefined(self, context): 
  • gaphor/branches/new-canvas/gaphor/diagram/feature.py

    r1093 r1097  
    99from gaphor.undomanager import undoable 
    1010from gaphor.diagram import DiagramItemMeta 
    11 from gaphas.util import text_extents 
     11from gaphas.util import text_extents, text_set_font 
     12import font 
    1213 
    1314class FeatureItem(DiagramItem): 
     
    124125    def draw(self, context): 
    125126        cr = context.cairo 
     127        text_set_font(cr, font.FONT) 
    126128        cr.show_text(self.subject.render() or '') 
    127129 
     
    174176    def draw(self, context): 
    175177        cr = context.cairo 
     178        text_set_font(cr, font.FONT) 
    176179        cr.show_text(self.subject.render() or '') 
    177180 
  • gaphor/branches/new-canvas/gaphor/diagram/objectnode.py

    r958 r1097  
    55import itertools 
    66 
    7 import gobject 
    8 import pango 
     7from gaphor import UML 
    98 
    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 
    1611#from gaphor.diagram.groupable import GroupBase 
    1712from gaphor.diagram.nameditem import NamedItem 
    1813 
    1914 
    20 #class ObjectNodeItem(NamedItem, GroupBase): 
    2115class ObjectNodeItem(NamedItem): 
    2216    """ 
     
    2923    __uml__      = UML.ObjectNode 
    3024 
    31     __s_valign__ = V_ALIGN_MIDDLE 
    32  
    33     FONT = 'sans 10' 
    34     MARGIN = 10 
     25    __style__ = { 
     26        'margin': (10, 10, 10, 10) 
     27    } 
    3528 
    3629    popup_menu = NamedItem.popup_menu + ( 
     
    4437    ) 
    4538 
    46     __gproperties__ = { 
    47         'show-ordering': (gobject.TYPE_BOOLEAN, 'show ordering', 
    48             'show ordering of object node', False, 
    49             gobject.PARAM_READWRITE), 
    50     } 
    51  
    5239    def __init__(self, id = None): 
    53         GroupBase.__init__(self) 
    5440        NamedItem.__init__(self, id) 
    5541 
     
    5844 
    5945        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)) 
    6147        self._ordering.set_alignment(pango.ALIGN_CENTER) 
    6248        self._ordering.set_markup(False) 
    6349 
    6450        self._show_ordering = False 
    65         self.set_prop_persistent('show-ordering') 
    6651 
     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) 
    6761 
    6862    def on_subject_notify(self, pspec, notifiers = ()): 
     
    7367        NamedItem.on_subject_notify(self, pspec, notifiers) 
    7468        if self.subject: 
    75             factory = resource(UML.ElementFactory) 
     69            factory = UML 
    7670            if not self.subject.upperBound: 
    7771                self.subject.upperBound = factory.create(UML.LiteralSpecification) 
     
    10296 
    10397 
    104     def set_ordering(self, ordering): 
     98    def _set_ordering(self, ordering): 
    10599        """ 
    106100        Set ordering of object node. 
     
    110104 
    111105 
    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) 
    117107 
    118  
    119     def on_update(self, affine): 
     108    def update(self, context): 
    120109        """ 
    121110        Update object node, its ordering and upper bound specification. 
    122111        """ 
    123         NamedItem.on_update(self, affine
     112        NamedItem.update(self, context
    124113 
    125114        if self.subject: 
     
    135124            ord_width, ord_height = self._ordering.to_pango_layout(True).get_pixel_size() 
    136125            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])) 
    138127 
    139128            self._ordering.set_max_width(ord_width) 
     
    141130 
    142131            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)) 
    144133        else: 
    145134            ord_width, ord_height = 0, 0 
     
    150139        ub_width, ub_height = self._upper_bound.get_size() 
    151140        x = (self.width - ub_width) / 2 
    152         y = self.height + ord_height + self.MARGIN 
     141        y = self.height + ord_height + self.style.margin[0] 
    153142        self._upper_bound.update_label(x, y) 
    154143 
    155         GroupBase.on_update(self, affine) 
    156144 
     145 
     146    def draw(self, context): 
     147        super(ObjectNodeItem, self).draw(context) 
    157148 
    158149    def on_shape_iter(self): 
     
    162153        else: 
    163154            return it 
     155 
     156 
     157# vim:sw=4:et:ai 
  • gaphor/branches/new-canvas/gaphor/ui/mainwindow.py

    r1068 r1097  
    110110                'ViewZoom100', 
    111111                'separator', 
    112                 'SnapToGrid', 
    113                 'ShowGrid', 
    114                 'separator', 
     112                #'SnapToGrid', 
     113                #'ShowGrid', 
     114                #'separator', 
    115115                'CreateDiagram', 
    116116                'DeleteDiagram',