Changeset 1836

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

- ressurected moving up/down class attributes and operations

Files:

Legend:

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

    r1834 r1836  
    2222 
    2323tree_tooltip = """\ 
    24 Use backspace key to remove %s\ 
     24Press ENTER to edit item, backspace/DEL to remove item. 
     25Use -/= to move up or move down.\ 
    2526""" 
    2627 
    27 class UMLAssociation(gtk.ListStore): 
     28class UMLCollection(gtk.ListStore): 
    2829    """ 
    2930    UML association GTK model.  
    3031    """ 
    31     def __init__(self, data): 
     32    def __init__(self, subject, attr, filter=None): 
    3233        """ 
    3334        Create GTK model from UML association. 
     
    3738            data: iterator of UML properties 
    3839        """ 
    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]) 
    4248        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,)) 
    4375 
    4476 
     
    5082        if item: 
    5183            item.unlink() 
    52             super(UMLAssociation, self).remove(iter) 
     84            super(UMLCollection, self).remove(iter) 
     85 
    5386 
    5487 
     
    5891    """ 
    5992    k = gtk.gdk.keyval_name(event.keyval).lower() 
    60     if k == 'backspace'
     93    if k == 'backspace' or k == 'kp_delete'
    6194        model, iter = tree.get_selection().get_selected() 
    6295        if iter: 
    6396            model.remove(iter) 
     97 
     98 
     99def 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 
    64112         
    65113 
     
    339387        # Attributes list store: 
    340388        attrs = self.context.subject.ownedAttribute 
    341         attributes = UMLAssociation(a for a in attrs if not a.association) 
     389        attributes = UMLCollection(self.context.subject, 'ownedAttribute', filter=lambda i: not i.association) 
    342390 
    343391        self.model = attributes 
     
    354402 
    355403        tooltips = gtk.Tooltips() 
    356         tooltips.set_tip(tree_view, tree_tooltip % 'attributes'
     404        tooltips.set_tip(tree_view, tree_tooltip
    357405 
    358406        tree_view.connect('key_press_event', remove_on_keypress) 
     407        tree_view.connect('key_press_event', swap_on_keypress) 
    359408         
    360409        page.pack_start(tree_view) 
     
    405454 
    406455        # Operations list store: 
    407         operations = UMLAssociation(self.context.subject.ownedOperation
     456        operations = UMLCollection(self.context.subject, 'ownedOperation'
    408457        self.model = operations 
    409458         
     
    419468 
    420469        tooltips = gtk.Tooltips() 
    421         tooltips.set_tip(tree_view, tree_tooltip % 'operations'
     470        tooltips.set_tip(tree_view, tree_tooltip
    422471 
    423472        tree_view.connect('key_press_event', remove_on_keypress) 
     473        tree_view.connect('key_press_event', swap_on_keypress) 
    424474         
    425475        page.pack_start(tree_view)