| | 99 | |
|---|
| | 100 | |
|---|
| | 101 | |
|---|
| | 102 | class 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 | |
|---|
| 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) |
|---|
| | 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] |
|---|