Changeset 1971

Show
Ignore:
Timestamp:
08/19/07 08:31:52 (1 year ago)
Author:
wrobe..@pld-linux.org
Message:

- allow to add more messages to message item on communication diagram (nfy)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/trunk/gaphor/adapters/propertypages.py

    r1951 r1971  
    4242class UMLCollection(gtk.ListStore): 
    4343    """ 
    44     UML association GTK model.  
     44    GTK tree model for UML collection. 
    4545    """ 
    4646    def __init__(self, subject, attr, filter=None): 
    4747        """ 
    48         Create GTK model from UML association. 
     48        Create GTK tree model for UML collection. 
    4949 
    5050        Parameters: 
     
    9797            item.unlink() 
    9898            super(UMLCollection, self).remove(iter) 
     99 
     100 
     101 
     102class CommunicationMessageModel(gtk.ListStore): 
     103    """ 
     104    GTK tree model for list of messages on communication diagram. 
     105    """ 
     106    def __init__(self, item): 
     107        """ 
     108        Create GTK model from UML association. 
     109 
     110        Parameters: 
     111 
     112            item: message item on communication diagram 
     113        """ 
     114        super(CommunicationMessageModel, self).__init__(str, bool, object) 
     115        self._item = item 
     116        subject = item.subject 
     117 
     118        def is_inverted(message): 
     119            return message.sendEvent is subject.sendEvent \ 
     120                    or message.receiveEvent is subject.receiveEvent 
     121 
     122        for message in item._messages: 
     123            data = [message.name, is_inverted(message), message] 
     124            self.append(data) 
     125        self.append(['', False, None]) 
     126 
     127 
     128    def remove(self, iter): 
     129        """ 
     130        Remove message from message item and destroy it. 
     131        """ 
     132        item = self._item 
     133        path = self.get_path(iter) 
     134        message = self[path][-1] 
     135 
     136        if message: 
     137            super(CommunicationMessageModel, self).remove(iter) 
     138 
     139            item.remove_message(message) 
     140            message.unlink() 
     141            item.request_update(matrix=False) 
     142 
    99143 
    100144 
     
    11581202    component.adapts(items.MessageItem) 
    11591203 
     1204    element_factory = inject('element_factory') 
     1205 
    11601206    MESSAGE_SORT = ( 
    11611207        ('Call', 'synchCall'), 
     
    11761222 
    11771223        if context.is_communication(): 
    1178             pass 
     1224            self._messages = CommunicationMessageModel(context) 
     1225 
     1226            tree_view = gtk.TreeView(self._messages) 
     1227            tree_view.set_rules_hint(True) 
     1228             
     1229            renderer = gtk.CellRendererText() 
     1230            renderer.set_property('editable', True) 
     1231            renderer.connect('edited', self._on_message_edited) 
     1232            col = gtk.TreeViewColumn('Message', renderer, text=0) 
     1233            tree_view.append_column(col) 
     1234 
     1235            renderer = gtk.CellRendererToggle() 
     1236            renderer.set_property('activatable', True) 
     1237            renderer.connect('toggled', self._on_message_reverted) 
     1238            col = gtk.TreeViewColumn('Inverted', renderer, active=1) 
     1239            tree_view.append_column(col) 
     1240 
     1241            tree_view.connect('key_press_event', remove_on_keypress) 
     1242 
     1243            page.pack_start(tree_view) 
    11791244        else: 
    11801245            hbox = create_hbox_label(self, page, _('Message sort')) 
     
    12251290        subject.messageSort = ms 
    12261291        context.request_update() 
     1292 
     1293 
     1294    @transactional 
     1295    def _on_message_edited(self, renderer, path, name): 
     1296        """ 
     1297        """ 
     1298        context = self.context 
     1299        subject = context.subject 
     1300 
     1301        data = self._messages[path] 
     1302        data[0] = name 
     1303        message = data[2] 
     1304        if name and not message: 
     1305            # add message to communication diagram 
     1306            new_message = self.element_factory.create(UML.Message) 
     1307            new_message.name = name 
     1308            new_message.sendEvent = subject.sendEvent 
     1309            new_message.receiveEvent = subject.receiveEvent 
     1310            context.add_message(new_message) 
     1311 
     1312            # update gtk tree datamodel 
     1313            data[0] = name 
     1314            data[2] = new_message 
     1315 
     1316            # allow to add another message 
     1317            self._messages.append(['', False, None]) 
     1318 
     1319        elif not name and message: 
     1320            # remove message from communication diagram 
     1321            iter = self._messages.get_iter(path) 
     1322            self._messages.remove(iter) 
     1323 
     1324        elif message: 
     1325            # just edit message name 
     1326            message.name = name 
     1327            context.set_message_text(message, name) 
     1328 
     1329        context.request_update(matrix=False) 
     1330 
     1331 
     1332    @transactional 
     1333    def _on_message_reverted(self, renderer, path): 
     1334        """ 
     1335        """ 
     1336        data = self._messages[path] 
     1337        if data[2]: 
     1338            data[1] = not data[1] 
    12271339          
    12281340 
  • gaphor/trunk/gaphor/diagram/message.py

    r1968 r1971  
    5353from gaphor import UML 
    5454from gaphor.diagram.diagramline import NamedLine 
     55from gaphor.misc.odict import odict 
    5556 
    5657 
     
    7374        self._arrow_pos = 0, 0 
    7475        self._arrow_angle = 0 
     76        self._messages = odict() 
    7577 
    7678 
     
    201203 
    202204 
     205    def add_message(self, message): 
     206        txt = self.add_text('name', 
     207            style={'text-align-group': 'stereotype'}) 
     208        txt.text = message.name 
     209        self._messages[message] = txt 
     210 
     211    def remove_message(self, message): 
     212        txt = self._messages[message] 
     213        self.remove_text(txt) 
     214        del self._messages[message] 
     215 
     216    def set_message_text(self, message, text): 
     217        self._messages[message].text = text 
     218 
     219 
    203220# vim:sw=4:et