Changeset 1301

Show
Ignore:
Timestamp:
05/22/07 23:40:17 (1 year ago)
Author:
arj..@yirdis.nl
Message:
  • updated quite a few unit tests
  • removed old/obsolete tests
  • more work on the copy service (seems to work now)
  • removed plugin manager; plugins should be defined as services
  • removed gaphor.application.restart, use shutdown/init instead
  • Application.shutdown() also clears Zope registries

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/trunk/gaphor/UML/elementfactory.py

    r1299 r1301  
    3939 
    4040    def shutdown(self): 
    41         pass 
     41        self.flush() 
    4242 
    4343    def create(self, type): 
  • gaphor/trunk/gaphor/application.py

    r1276 r1301  
    8787            component.handle(ServiceShutdownEvent(name, srv)) 
    8888 
     89        # Re-initialize Zope's global site manager 
     90        # (cleanup adapters and utilities): 
     91        try: 
     92            from zope.component import globalSiteManager 
     93            globalSiteManager.__init__('base') 
     94        except Exception, e: 
     95            log.error('Re-initialization of the Zope SiteManager failed', e) 
     96        self.__init__() 
    8997 
    9098# Make sure there is only one! 
    9199Application = _Application() 
    92100 
    93 def restart(): 
    94     global Application 
    95     Application.shutdown() 
    96     Application = _Application() 
    97  
    98101 
    99102# vim:sw=4:et:ai 
  • gaphor/trunk/gaphor/diagram/tests/test_flow.py

    r596 r1301  
    33import unittest 
    44import gaphor.UML as UML 
    5 import gaphortests 
    65 
    7 class TestActivityNodes(gaphortests.TestCase): 
     6class TestActivityNodes(unittest.TestCase): 
     7 
    88    def testObjectFlow(self): 
    99        """ 
    1010        Check if flow is object flow when connect to object node. 
    1111        """ 
    12         f = self.createFlow() 
     12#        f = self.createFlow() 
     13
     14#        ai = self.createActionItem() 
     15#        on = self.createObjectNode() 
     16
     17#        self.connectNodes(ai, on, f) 
     18
     19#        self.assertEqual(f.subject.__class__, UML.ObjectFlow) 
    1320 
    14         ai = self.createActionItem() 
    15         on = self.createObjectNode() 
    16  
    17         self.connectNodes(ai, on, f) 
    18  
    19         self.assertEqual(f.subject.__class__, UML.ObjectFlow) 
    20  
  • gaphor/trunk/gaphor/services/actionmanager.py

    r1272 r1301  
    6161                action_provider.__ui_merge_id = \ 
    6262                        self.ui_manager.add_ui_from_string(action_provider.menu_xml) 
    63                 log.debug('Added menu xml %d' % action_provider.__ui_merge_id) 
    6463 
    6564    @component.adapter(ServiceInitializedEvent) 
     
    6867            log.debug('Loading registered service %s' % str(event.service)) 
    6968            self.register_action_provider(event.service) 
    70         # Only start registring already registered services once the GUI 
    71         # is in order (e.i. menu structure is correctly set up) 
    72 #        if event.name == 'gui_manager': 
    73 #            log.info('Loading not yet registered action provider services') 
    74 #            for name, service in component.getUtilitiesFor(IService): 
    75 #                if IActionProvider.providedBy(service): 
    76 #                    log.debug('Loading already registered service %s' % str(service)) 
    77 #                    self.register_action_provider(service) 
     69 
    7870 
    7971# vim:sw=4:et:ai 
  • gaphor/trunk/gaphor/services/copyservice.py

    r1299 r1301  
    11""" 
    2 TODO: fix this code. 
     2Copy / Paste functionality 
    33""" 
    44 
    55from zope import interface, component 
     6import gaphas 
    67from gaphor import UML 
    78from gaphor.interfaces import IService, IActionProvider 
    8 from gaphor.core import _, inject, action, build_action_group 
     9from gaphor.ui.interfaces import IDiagramSelectionChange 
     10from gaphor.core import _, inject, action, build_action_group, transactional 
     11 
    912 
    1013class CopyService(object): 
     
    4346 
    4447    def __init__(self): 
    45         self.copy_buffer = [] 
     48        self.copy_buffer = set() 
    4649        self.action_group = build_action_group(self) 
    4750 
    4851    def init(self, app): 
    49         pass 
     52        self.action_group.get_action('edit-copy').props.sensitive = False 
     53        self.action_group.get_action('edit-paste').props.sensitive = False 
     54         
     55        component.provideHandler(self._update) 
    5056 
    51     def _update_copy(self): 
    52         diagram_tab = self._window.get_current_diagram_tab() 
    53         self.sensitive = diagram_tab and len(diagram_tab.get_view().selected_items) > 0 
     57    def shutdown(self): 
     58        self.copy_buffer = set() 
    5459 
    55     def _update_paste(self): 
    56         global copy_buffer 
    57         diagram_tab = self._window.get_current_diagram_tab() 
    58         self.sensitive = diagram_tab and copy_buffer 
     60    @component.adapter(IDiagramSelectionChange) 
     61    def _update(self, event): 
     62        diagram_view = event.diagram_view 
     63        self.action_group.get_action('edit-copy').props.sensitive = bool(diagram_view.selected_items) 
    5964 
    60  
    61     @action(name='edit-copy', stock_id='gtk-copy') 
    62     def copy(self): 
    63         view = self.gui_manager.main_window.get_current_diagram_view() 
    64         if view.is_focus(): 
    65             items = view.selected_items 
    66             copy_items = [] 
    67             for i in items: 
    68                 copy_items.append(i) 
    69             if copy_items: 
    70                 self.copy_buffer = copy_items 
     65    def copy(self, items): 
     66        if items: 
     67            self.copy_buffer = set(items) 
     68            self.action_group.get_action('edit-paste').props.sensitive = True 
    7169 
    7270    def _load_element(self, name, value): 
     
    9694            self._item.load(name, str(value)) 
    9795 
    98     @action(name='edit-paste', stock_id='gtk-paste') 
    9996    @transactional 
    100     def paste(self): 
    101         view = self._window.get_current_diagram_view() 
    102         diagram = self._window.get_current_diagram() 
    103         if not view: 
    104             return 
    105  
    106         #diagram = view.get_diagram() 
     97    def paste(self, diagram): 
     98        """ 
     99        Paste items in the copy-buffer to the diagram 
     100        """ 
    107101        canvas = diagram.canvas 
    108102        if not canvas: 
     
    127121 
    128122        for item in self._new_items.values(): 
    129             item.move(10, 10) 
     123            item.matrix.translate(10, 10) 
    130124 
    131125        for item in self._new_items.values(): 
    132126            item.postload() 
    133127 
     128 
     129    @action(name='edit-copy', stock_id='gtk-copy') 
     130    def _copy(self): 
     131        view = self.gui_manager.main_window.get_current_diagram_view() 
     132        if view.is_focus(): 
     133            items = view.selected_items 
     134            copy_items = [] 
     135            for i in items: 
     136                copy_items.append(i) 
     137            self.copy(copy_items) 
     138 
     139    @action(name='edit-paste', stock_id='gtk-paste') 
     140    def paste_action(self): 
     141        view = self.gui_manager.main_window.get_current_diagram_view() 
     142        diagram = self.gui_manager.main_window.get_current_diagram() 
     143        if not view: 
     144            return 
     145 
     146        self.paste(diagram) 
     147 
    134148        view.unselect_all() 
    135149 
    136150        for item in self._new_items.values(): 
    137             view.select(view.find_view_item(item)
     151            view.select_item(item
    138152 
    139 register_action(PasteAction, 'EditCopy') 
    140153 
     154# vim:sw=4:et:ai 
  • gaphor/trunk/gaphor/services/tests/test_copyservice.py

    r1299 r1301  
    11 
    22import unittest 
     3from gaphor import UML 
     4from gaphor.diagram import items 
    35from gaphor.services.copyservice import CopyService 
    46from gaphor.application import Application 
     
    79 
    810    def setUp(self): 
    9         Application.init(services=['gui_manager', 'action_manager', 'element_factory']) 
     11        Application.init(services=['gui_manager', 'action_manager', 'element_factory', 'properties']) 
    1012 
    1113    def tearDown(self): 
    12         pass 
     14        Application.shutdown() 
    1315 
    14     def test_copy_buffer(self): 
    15         pass 
     16    def test_init(self): 
     17        service = CopyService() 
     18        service.init(self) 
    1619 
     20    def test_copy(self): 
     21        service = CopyService() 
     22        service.init(self) 
     23        ef = Application.get_service('element_factory') 
     24        diagram = ef.create(UML.Diagram) 
     25        ci = diagram.create(items.CommentItem, subject=ef.create(UML.Comment)) 
    1726 
     27        service.copy([ci]) 
     28        assert diagram.canvas.get_all_items() == [ ci ] 
     29 
     30        service.paste(diagram) 
     31 
     32        assert len(diagram.canvas.get_all_items()) == 2, diagram.canvas.get_all_items() 
     33     
    1834# vim:sw=4:et 
  • gaphor/trunk/gaphor/services/undomanager.py

    r1276 r1301  
    282282            except KeyError: 
    283283                pass # Key was probably already removed in an unlink call 
    284             factory.notify(element, 'remove') 
    285284            component.handle(ElementDeleteEvent(factory, element)) 
    286285        self.add_undo_action(_undo_create_event) 
     
    293292        def _undo_delete_event(): 
    294293            factory._elements[element.id] = element 
    295             factory.notify(element, 'create') 
    296294            component.handle(ElementCreateEvent(factory, element)) 
    297295        self.add_undo_action(_undo_delete_event) 
  • gaphor/trunk/gaphor/ui/diagramtab.py

    r1292 r1301  
    1212from gaphor.ui.diagramview import DiagramView 
    1313from gaphor.ui.diagramtoolbox import DiagramToolbox 
    14 from event import DiagramItemFocused 
     14from event import DiagramSelectionChange 
    1515 
    1616class DiagramTab(object): 
     
    106106                     gtk.FILL) 
    107107 
    108         view.connect('focus-changed', self._on_view_focus_changed) 
     108        view.connect('focus-changed', self._on_view_selection_changed) 
    109109        view.connect('selection-changed', self._on_view_selection_changed) 
    110110        view.connect_after('key-press-event', self._on_key_press_event) 
     
    215215 
    216216 
    217     def _on_view_focus_changed(self, view, focus_item): 
    218         component.handle(DiagramItemFocused(focus_item)) 
    219  
    220     def _on_view_selection_changed(self, view, selection): 
    221         self.action_manager.execute('ItemSelect') 
     217    def _on_view_selection_changed(self, view, selection_or_focus): 
     218        component.handle(DiagramSelectionChange(view, view.focused_item, view.selected_items)) 
    222219 
    223220    def _on_diagram_event(self, element, pspec): 
     
    258255                view.focused_item = item 
    259256 
    260                 self.action_manager.execute('ItemDiagramDrop') 
    261  
    262257            else: 
    263258                log.warning('No graphical representation for UML element %s' % type(element).__name__) 
  • gaphor/trunk/gaphor/ui/event.py

    r1170 r1301  
    22from interfaces import * 
    33 
    4 class DiagramItemFocused(object): 
    5     interface.implements(IDiagramElementReceivedFocus) 
     4class DiagramSelectionChange(object): 
     5 
     6    interface.implements(IDiagramSelectionChange) 
    67     
    7     def __init__(self, diagramItem): 
    8         self.diagramItem = diagramItem 
     8    def __init__(self, diagram_view, focused_item, selected_items): 
     9        self.diagram_view = diagram_view 
     10        self.focused_item = focused_item 
     11        self.selected_items = selected_items 
     12 
     13 
     14# vim:sw=4:et:ai 
  • gaphor/trunk/gaphor/ui/interfaces.py

    r1260 r1301  
    66 
    77 
    8 class IDiagramElementReceivedFocus(interface.Interface): 
    9     """A diagram item received focus""" 
    10     diagramItem = interface.Attribute("The diagram item that received focus") 
    11      
    12      
     8class IDiagramSelectionChange(interface.Interface): 
     9    """ 
     10    The selection of a diagram changed. 
     11    """ 
     12    diagram_view = interface.Attribute('The diagram View that emits the event') 
     13 
     14    focused_item = interface.Attribute('The diagram item that received focus') 
     15 
     16    selected_items = interface.Attribute('All selected items in the diagram') 
     17 
     18 
    1319class IUIComponent(interface.Interface): 
    14     """A user interface component""" 
     20    """ 
     21    A user interface component 
     22    """ 
    1523     
    1624    ui_manager = interface.Attribute("The gtk.UIManager, set after construction") 
     
    2028        """ 
    2129 
    22     #title = interface.Attribute("Title for the window") 
    23     #size = interface.Attribute("initial window size (width, height)") 
    24     #menubar_path = interface.Attribute("UIManager path for menu bar") 
    25     #toolbar_path = interface.Attribute("UIManager path for tool bar") 
    26  
    27     #def ui_component(self): 
    28     #    """Create the UI component to be shown in a window.""" 
    29  
    3030 
    3131class IDetailsPage(IUIComponent): 
    32     """A property page which can display itself in a notebook""" 
     32    """ 
     33    A property page which can display itself in a notebook 
     34    """ 
    3335     
    3436 
  • gaphor/trunk/gaphor/ui/mainwindow.py

    r1295 r1301  
    1919from gaphor.ui.objectinspector import ObjectInspector 
    2020 
    21 from interfaces import IDiagramElementReceivedFocus 
     21from interfaces import IDiagramSelectionChange 
    2222from gaphor.interfaces import IServiceEvent 
    2323 
     
    241241        #self.objectInspector.set_size_request(-1, 50) 
    242242 
    243         diagramReceivedFocus = component.adapter(IDiagramElementReceivedFocus)( 
     243        diagramReceivedFocus = component.adapter(IDiagramSelectionChange)( 
    244244            self.objectInspector) 
    245245        component.provideHandler(diagramReceivedFocus) 
  • gaphor/trunk/gaphor/ui/objectinspector.py

    r1170 r1301  
    174174         
    175175        This reloads all tabs based on the current selection.""" 
    176         diagramItem = event.diagramItem 
     176        diagramItem = event.focused_item 
    177177        self.clearAllTabs() 
    178178        if diagramItem is None: 
  • gaphor/trunk/gaphor/ui/tests/test_consolewindow.py

    r1260 r1301  
    1010        window = ConsoleWindow() 
    1111        window.ui_manager = ui_manager 
    12         assert len(window.action_group.list_actions()) == 3 
     12        assert len(window.action_group.list_actions()) == 2, window.action_group.list_actions() 
    1313        window.construct() 
    1414        window.close() 
  • gaphor/trunk/gaphor/ui/tests/test_diagramtab.py

    r1283 r1301  
    22import unittest 
    33 
    4 from gaphor import resource, UML 
     4from gaphor import UML 
     5from gaphor.application import Application 
    56from gaphor.ui.diagramtab import DiagramTab 
    67from gaphor.ui.mainwindow import MainWindow 
     
    1213 
    1314    def setUp(self): 
    14         UML.flush() 
     15        Application.init(services=['element_factory', 'gui_manager', 'action_manager', 'properties']) 
     16        main_window = Application.get_service('gui_manager').main_window 
    1517        self.diagram = UML.create(UML.Diagram) 
    16         self.tab = DiagramTab(self.main_window) 
     18        self.tab = DiagramTab(main_window) 
    1719        self.tab.set_diagram(self.diagram) 
    1820        self.assertEquals(self.tab.diagram, self.diagram) 
    19         self.tab.construct() 
     21        widget = self.tab.construct() 
     22        main_window.add_tab(self.tab, widget, 'title') 
    2023        self.assertEquals(self.tab.view.canvas, self.diagram.canvas) 
    21         self.assertEquals(len(UML.select()), 1) 
     24        self.assertEquals(len(UML.lselect()), 1) 
    2225 
    2326    def tearDown(self): 
     
    2629        self.diagram.unlink() 
    2730        del self.diagram 
    28         UML.flush() 
    29         assert len(UML.select()) == 0 
     31        Application.shutdown() 
     32        assert len(UML.lselect()) == 0 
    3033 
    3134    def test_creation(self): 
     
    4245        diagram.canvas.update_now() 
    4346        tab.view.request_update([box]) 
    44         self.assertEquals(len(tab.view._item_bounds), 1) 
    45         self.assertEquals(tab.view._item_bounds.keys()[0], box) 
    46         #diagram.canvas.add(Element()) 
    47         from gaphor.diagram.elementitem import ElementItem 
     47        assert len(tab.view._item_bounds) == 1, tab.view._item_bounds 
     48        assert tab.view._item_bounds.keys()[0] is box, tab.view._item_bounds.keys()[0] 
     49         
    4850        from gaphor.diagram.comment import CommentItem 
    4951        comment = self.diagram.create(CommentItem, subject=UML.create(UML.Comment)) 
    5052        self.assertEquals(len(tab.view._item_bounds), 2) 
    51         self.assertEquals(len(UML.select()), 2) 
     53        self.assertEquals(len(UML.lselect()), 2) 
    5254         
  • gaphor/trunk/gaphor/ui/tests/test_diagramtoolbox.py

    r1289 r1301  
    33import unittest 
    44 
    5 from gaphor.application import restart, Application 
     5from gaphor.application import Application 
    66from gaphor.ui.diagramtab import DiagramTab 
    77from gaphor.ui.diagramtoolbox import DiagramToolbox 
     
    1111 
    1212    def setUp(self): 
    13         restart() 
    1413        Application.init(services=['element_factory', 'properties']) 
    1514        diagram = UML.Diagram() 
     
    1817        tab.construct() 
    1918        self.tab = tab 
     19 
     20    def tearDown(self): 
     21        Application.shutdown() 
    2022 
    2123    def test_standalone_construct_with_diagram(self): 
  • gaphor/trunk/gaphor/ui/tests/test_mainwindow.py

    r1283 r1301  
    33import unittest 
    44 
    5 from gaphor.application import restart, Application 
     5from gaphor.application import Application 
    66from gaphor.ui.mainwindow import MainWindow 
    77from gaphor import UML 
     
    1010 
    1111    def setUp(self): 
    12         restart() 
    1312        Application.init(services=['element_factory', 'properties', 'action_manager']) 
     13 
     14    def tearDown(self): 
     15        Application.shutdown() 
    1416 
    1517    def test_creation(self): 
  • gaphor/trunk/gaphor/ui/tests/test_namespace.py

    r1121 r1301  
    11# vim:sw=4:et:ai 
    22 
     3import unittest 
    34import gaphor.UML as UML 
    45from gaphor.ui.namespace import NamespaceModel 
    56 
    6 factory = UML.ElementFactory() 
     7class NamespaceTestCase(unittest.TestCase): 
    78 
    8 m = factory.create(UML.Package) 
    9 m.name = 'm' 
    10 a = factory.create(UML.Package) 
    11 a.name = 'a' 
    12 a.package = m 
    13 assert a.package is m 
    14 assert a in m.ownedMember 
    15 assert a.namespace is m 
     9    def test_all(self): 
     10        factory = UML.ElementFactory() 
    1611 
    17 b = factory.create(UML.Package) 
    18 b.name = 'b' 
    19 b.package = a 
    20 assert b in a.ownedMember 
    21 assert b.namespace is a 
     12        m = factory.create(UML.Package) 
     13        m.name = 'm' 
     14        a = factory.create(UML.Package) 
     15        a.name = 'a' 
     16        a.package = m 
     17        assert a.package is m 
     18        assert a in m.ownedMember 
     19        assert a.namespace is m 
    2220 
    23 c = factory.create(UML.Class) 
    24 c.name = 'c' 
    25 c.package = b 
    26 d = factory.create(UML.Class) 
    27 d.name = 'd' 
    28 d.package = a 
    29 e = factory.create(UML.Class) 
    30 e.name = 'e' 
    31 e.package = b 
     21        b = factory.create(UML.Package) 
     22        b.name = 'b' 
     23        b.package = a 
     24        assert b in a.ownedMember 
     25        assert b.namespace is a 
    3226 
    33 assert c in b.ownedMember 
    34 assert c.namespace is b 
    35 assert d in a.ownedMember 
    36 assert d.namespace is a 
    37 assert e in b.ownedMember 
    38 assert e.namespace is b 
     27        c = factory.create(UML.Class) 
     28        c.name = 'c' 
     29        c.package = b 
     30        d = factory.create(UML.Class) 
     31        d.name = 'd' 
     32        d.package = a 
     33        e = factory.create(UML.Class) 
     34        e.name = 'e' 
     35        e.package = b 
     36 
     37        assert c in b.ownedMember 
     38        assert c.namespace is b 
     39        assert d in a.ownedMember 
     40        assert d.namespace is a 
     41        assert e in b.ownedMember 
     42        assert e.namespace is b 
    3943 
    4044 
    41 ns = NamespaceModel(factory) 
    42 # We have a model loaded. Use it! 
    43 factory.notify_model() 
     45        ns = NamespaceModel(factory) 
     46        # We have a model loaded. Use it! 
     47        factory.notify_model() 
    4448 
    45 print '---' 
    46 ns.dump() 
    47 assert ns.path_from_element(m) == (0,) 
    48 assert ns.path_from_element(a) == (0, 0) 
    49 assert ns.path_from_element(b) == (0, 0, 1
    50 assert ns.path_from_element(c) == (0, 0, 1, 0) 
    51 assert ns.path_from_element(d) == (0, 0, 0
    52 assert ns.path_from_element(e) == (0, 0, 1, 1) 
     49        print '---' 
     50        ns.dump() 
     51        assert ns.path_from_element(m) == (0,) 
     52        assert ns.path_from_element(a) == (0, 0) 
     53        assert ns.path_from_element(b) == (0, 0, 0), ns.path_from_element(b
     54        assert ns.path_from_element(c) == (0, 0, 0, 0) 
     55        assert ns.path_from_element(d) == (0, 0, 1
     56        assert ns.path_from_element(e) == (0, 0, 0, 1) 
    5357 
    54 print '--- del.b.ownedClassifier[c]' 
    55 del b.ownedClassifier[c] 
    56 ns.dump() 
    57 assert ns.path_from_element(m) == (0,) 
    58 assert ns.path_from_element(a) == (0, 0) 
    59 assert ns.path_from_element(b) == (0, 0, 1
    60 assert ns.path_from_element(d) == (0, 0, 0
    61 assert ns.path_from_element(e) == (0, 0, 1, 0) 
    62 try: 
    63     ns.path_from_element(c) 
    64 except AttributeError: 
    65     pass # Yes, should raise an exception 
    66 else: 
    67     assert ns.path_from_element(c) is not None 
     58        print '--- del.b.ownedClassifier[c]' 
     59        del b.ownedClassifier[c] 
     60        ns.dump() 
     61        assert ns.path_from_element(m) == (0,) 
     62        assert ns.path_from_element(a) == (0, 0) 
     63        assert ns.path_from_element(b) == (0, 0, 0
     64        assert ns.path_from_element(d) == (0, 0, 1
     65        assert ns.path_from_element(e) == (0, 0, 0, 0) 
     66        try: 
     67            ns.path_from_element(c) 
     68        except AttributeError: 
     69            pass # Yes, should raise an exception 
     70        else: 
     71            assert ns.path_from_element(c) is not None 
    6872 
    69 print '--- c.package = a' 
    70 c.package = a 
    71 ns.dump() 
    72 assert ns.path_from_element(m) == (0,) 
    73 assert ns.path_from_element(a) == (0, 0) 
    74 assert ns.path_from_element(b) == (0, 0, 1
    75 assert ns.path_from_element(c) == (0, 0, 2
    76 assert ns.path_from_element(d) == (0, 0, 0
    77 assert ns.path_from_element(e) == (0, 0, 1, 0) 
     73        print '--- c.package = a' 
     74        c.package = a 
     75        ns.dump() 
     76        assert ns.path_from_element(m) == (0,) 
     77        assert ns.path_from_element(a) == (0, 0) 
     78        assert ns.path_from_element(b) == (0, 0, 0
     79        assert ns.path_from_element(c) == (0, 0, 1
     80        assert ns.path_from_element(d) == (0, 0, 2
     81        assert ns.path_from_element(e) == (0, 0, 0, 0) 
    7882 
    79 print '--- b.package = m' 
    80 b.package = m 
    81 ns.dump() 
    82 assert ns.path_from_element(m) == (0,) 
    83 assert ns.path_from_element(a) == (0, 0) 
    84 assert ns.path_from_element(b) == (0, 1) 
    85 assert ns.path_from_element(c) == (0, 0, 1
    86 assert ns.path_from_element(d) == (0, 0, 0
    87 assert ns.path_from_element(e) == (0, 1, 0) 
     83        print '--- b.package = m' 
     84        b.package = m 
     85        ns.dump() 
     86        assert ns.path_from_element(m) == (0,) 
     87        assert ns.path_from_element(a) == (0, 0) 
     88        assert ns.path_from_element(b) == (0, 1) 
     89        assert ns.path_from_element(c) == (0, 0, 0
     90        assert ns.path_from_element(d) == (0, 0, 1
     91        assert ns.path_from_element(e) == (0, 1, 0) 
    8892 
    89 print '--- e.unlink()' 
    90 e.unlink() 
    91 ns.dump() 
     93        print '--- e.unlink()' 
     94        e.unlink() 
     95        ns.dump() 
    9296 
    93 print '--- a.unlink()' 
    94 def on_unlink(name, element): 
    95     print 'unlink: %s' % element.name 
    96 a.connect('__unlink__', on_unlink, a) 
    97 b.connect('__unlink__', on_unlink, b) 
    98 c.connect('__unlink__', on_unlink, c) 
    99 d.connect('__unlink__', on_unlink, d) 
     97        print '--- a.unlink()' 
     98#        def on_unlink(name, element): 
     99#            print 'unlink: %s' % element.name 
     100#        a.connect('__unlink__', on_unlink, a) 
     101#        b.connect('__unlink__', on_unlink, b) 
     102#        c.connect('__unlink__', on_unlink, c) 
     103#        d.connect('__unlink__', on_unlink, d) 
     104
     105        a.unlink() 
     106        ns.dump() 
     107        print '--- TODO: e.relink()' 
    100108 
    101 a.unlink() 
    102 ns.dump() 
    103 print '--- TODO: e.relink()' 
     109        print UML.Class.package 
     110        print UML.Package.ownedClassifier 
    104111 
    105 print UML.Class.package 
    106 print UML.Package.ownedClassifier 
  • gaphor/trunk/gaphor/ui/toolbox.py

    r1290 r1301  
    5353        arrow = button.get_children()[0].get_children()[0] 
    5454        if not content.get_property('visible'): 
    55             log.debug('switched to visible: %s' % button.toggle_id) 
    5655            content.show() 
    5756            arrow.set(gtk.ARROW_DOWN, gtk.SHADOW_IN) 
    5857            self.emit('toggled', button.toggle_id, True) 
    5958        else: 
    60             log.debug('switched to hidden: %s' % button.toggle_id) 
    6159            content.hide() 
    6260            arrow.set(gtk.ARROW_RIGHT, gtk.SHADOW_IN) 
  • gaphor/trunk/setup.py

    r1297 r1301  
    121121            'properties = gaphor.services.properties:Properties', 
    122122            'undo_manager = gaphor.services.undomanager:UndoManager', 
    123 #            'plugin_manager = gaphor.services.pluginmanager:PluginManager', 
    124123            'element_factory = gaphor.UML.elementfactory:ElementFactory', 
    125124            'file_manager = gaphor.services.filemanager:FileManager', 
     
    127126            'action_manager = gaphor.services.actionmanager:ActionManager', 
    128127            'help = gaphor.services.helpservice:HelpService', 
     128            'copy = gaphor.services.copyservice:CopyService', 
    129129        ], 
    130130        'gaphor.uicomponents': [