Changeset 1836
- Timestamp:
- 08/03/07 21:19:08 (1 year ago)
- Files:
-
- gaphor/trunk/gaphor/adapters/propertypages.py (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphor/trunk/gaphor/adapters/propertypages.py
r1834 r1836 22 22 23 23 tree_tooltip = """\ 24 Use backspace key to remove %s\ 24 Press ENTER to edit item, backspace/DEL to remove item. 25 Use -/= to move up or move down.\ 25 26 """ 26 27 27 class UML Association(gtk.ListStore):28 class UMLCollection(gtk.ListStore): 28 29 """ 29 30 UML association GTK model. 30 31 """ 31 def __init__(self, data):32 def __init__(self, subject, attr, filter=None): 32 33 """ 33 34 Create GTK model from UML association. … … 37 38 data: iterator of UML properties 38 39 """ 39 super(UMLAssociation, self).__init__(str, object) 40 for item in data: 41 self.append([item.render(), item]) 40 super(UMLCollection, self).__init__(str, object) 41 self._subject = subject 42 self._attr = attr 43 if filter is None: 44 filter = lambda i: True 45 for item in self._collection(): 46 if filter(item): 47 self.append([item.render(), item]) 42 48 self.append(['', None]) 49 50 51 def _collection(self): 52 return getattr(self._subject, self._attr) 53 54 55 def swap(self, a, b): 56 """ 57 Swap two items. 58 """ 59 if not a or not b: 60 return 61 item1 = self[a][1] 62 item2 = self[b][1] 63 if self._collection().swap(item1, item2): 64 super(UMLCollection, self).swap(a, b) 65 66 67 def iter_prev(self, iter): 68 """ 69 Get previous GTK tree iterator. 70 """ 71 i = self.get_path(iter)[0] 72 if i == 0: 73 return None 74 return self.get_iter((i - 1,)) 43 75 44 76 … … 50 82 if item: 51 83 item.unlink() 52 super(UMLAssociation, self).remove(iter) 84 super(UMLCollection, self).remove(iter) 85 53 86 54 87 … … 58 91 """ 59 92 k = gtk.gdk.keyval_name(event.keyval).lower() 60 if k == 'backspace' :93 if k == 'backspace' or k == 'kp_delete': 61 94 model, iter = tree.get_selection().get_selected() 62 95 if iter: 63 96 model.remove(iter) 97 98 99 def swap_on_keypress(tree, event): 100 """ 101 Swap selected and previous (or next) items. 102 """ 103 k = gtk.gdk.keyval_name(event.keyval).lower() 104 if k == 'equal' or k == 'kp_add': 105 model, iter = tree.get_selection().get_selected() 106 model.swap(iter, model.iter_next(iter)) 107 return True 108 elif k == 'minus': 109 model, iter = tree.get_selection().get_selected() 110 model.swap(iter, model.iter_prev(iter)) 111 return True 64 112 65 113 … … 339 387 # Attributes list store: 340 388 attrs = self.context.subject.ownedAttribute 341 attributes = UML Association(a for a in attrs if not a.association)389 attributes = UMLCollection(self.context.subject, 'ownedAttribute', filter=lambda i: not i.association) 342 390 343 391 self.model = attributes … … 354 402 355 403 tooltips = gtk.Tooltips() 356 tooltips.set_tip(tree_view, tree_tooltip % 'attributes')404 tooltips.set_tip(tree_view, tree_tooltip) 357 405 358 406 tree_view.connect('key_press_event', remove_on_keypress) 407 tree_view.connect('key_press_event', swap_on_keypress) 359 408 360 409 page.pack_start(tree_view) … … 405 454 406 455 # Operations list store: 407 operations = UML Association(self.context.subject.ownedOperation)456 operations = UMLCollection(self.context.subject, 'ownedOperation') 408 457 self.model = operations 409 458 … … 419 468 420 469 tooltips = gtk.Tooltips() 421 tooltips.set_tip(tree_view, tree_tooltip % 'operations')470 tooltips.set_tip(tree_view, tree_tooltip) 422 471 423 472 tree_view.connect('key_press_event', remove_on_keypress) 473 tree_view.connect('key_press_event', swap_on_keypress) 424 474 425 475 page.pack_start(tree_view)
