Changeset 1068

Show
Ignore:
Timestamp:
11/07/06 23:34:37 (2 years ago)
Author:
arjanmol
Message:

more updates on loading code

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/branches/new-canvas/gaphor/UML/diagram.py

    r1019 r1068  
    11# vim: sw=4 
    2 '''diagram.py 
     2""" 
    33This module contains a model elements (!) Diagram which is the abstract 
    4 representation of a UML diagram. Diagrams can be visualized and edited.''' 
     4representation of a UML diagram. Diagrams can be visualized and edited. 
     5""" 
    56 
    67__author__ = 'Arjan Molenaar' 
     
    1718    Esp. load and save functionallity. 
    1819    """ 
    19     # TODO: save or ignore properties coming from diacanvas.Canvas 
    20     #_savable_canvas_properties = [ 'extents', 'static_extents', 
    21     #        'snap_to_grid', 'grid_int_x', 'grid_int_y', 'grid_ofs_x', 
    22     #        'grid_ofs_y', 'grid_color', 'grid_bg' ] 
    2320 
    2421    def __init__(self, diagram): 
    2522        super(DiagramCanvas, self).__init__() 
    2623        self._diagram = diagram 
     24        self._block_updates = False 
    2725 
    28     diagram = property(lambda d: d._diagram) 
     26    diagram = property(lambda s: s._diagram) 
     27 
     28    def _set_block_updates(self, block): 
     29        self._block_updates = block 
     30        if not block: 
     31            self.update_now() 
     32 
     33    block_updates = property(lambda s: s._block_updates, _set_block_updates) 
     34 
     35    def update_now(self): 
     36        if self._block_updates: 
     37            log.debug('Update blocked for canvas %s' % self) 
     38            return 
     39        super(DiagramCanvas, self).update_now() 
    2940 
    3041    def save(self, save_func): 
     
    3748 
    3849    def postload(self): 
    39         self.update_now() 
     50        self.block_updates = False 
    4051 
    4152    def select(self, expression=lambda e: True): 
  • gaphor/branches/new-canvas/gaphor/diagram/diagramitem.py

    r1057 r1068  
    7878    def load(self, name, value): 
    7979        if name == 'subject': 
    80             #print 'loading subject', value 
     80            print self, 'loading subject', value 
    8181            type(self).subject.load(self, value) 
     82            print self, 'subject =', self.subject 
    8283        else: 
    8384            #log.debug('Setting unknown property "%s" -> "%s"' % (name, value)) 
    8485            try: 
    85                 self.set_property(name, eval(value)) 
     86                setattr(self, name, eval(value)) 
    8687            except: 
    8788                log.warning('%s has no property named %s (value %s)' % (self, name, value)) 
  • gaphor/branches/new-canvas/gaphor/diagram/tool.py

    r1023 r1068  
    7474        is called for (glued_item, item). 
    7575        """ 
    76         #print 'handle connect' 
    7776        glue_item = self.glue(view, item, handle, wx, wy) 
    7877 
    7978        if glue_item: 
    80             #print 'handle connect', glue_item 
    8179            adapter = component.queryMultiAdapter((glue_item, item), IConnect) 
    8280            x, y = view.canvas.get_matrix_w2i(glue_item).transform_point(wx, wy) 
    83             #print 'connecting:', adapter 
    8481            adapter.connect(handle, x, y) 
    8582 
     
    124121        #window.move(int(x), int(y)) 
    125122        cursor_pos = view.get_toplevel().get_screen().get_display().get_pointer() 
    126         #print 'cursor_pos', cursor_pos 
    127123        window.move(cursor_pos[1], cursor_pos[2]) 
    128124        window.connect('focus-out-event', self._on_focus_out_event, 
     
    163159        #self. 
    164160        if event.keyval == gtk.keysyms.Return: 
    165             print 'Enter!' 
     161            pass 
    166162            #widget.get_toplevel().destroy() 
    167163        elif event.keyval == gtk.keysyms.Escape: 
    168             print 'Escape!' 
    169164            widget.get_toplevel().destroy() 
    170165 
     
    191186        view = context.view #resource('MainWindow').get_current_diagram_view() 
    192187        view.unselect_all() 
    193         #print 'Gaphor: on_button_press event: %s' % self.__dict__ 
    194188        get_undo_manager().begin_transaction() 
    195189        if gaphas.tool.PlacementTool.on_button_press(self, context, event): 
     
    212206            pool.get_action('Pointer').active = True 
    213207        get_undo_manager().commit_transaction() 
    214         #print 'Gaphor: do_button_release event: %s' % self.__dict__ 
    215208        return gaphas.tool.PlacementTool.on_button_release(self, context, event) 
    216209 
  • gaphor/branches/new-canvas/gaphor/storage.py

    r1066 r1068  
    9898        gaphas.Canvas (which contains canvas items). 
    9999        """ 
    100         log.debug('saving element: %s|%s %s' % (name, value, type(value))) 
     100        #log.debug('saving element: %s|%s %s' % (name, value, type(value))) 
    101101        if isinstance (value, (UML.Element, gaphas.Item)): 
    102102            save_reference(name, value) 
     
    114114        The extra attribute reference can be used to force UML  
    115115        """ 
    116         log.debug('saving canvasitem: %s|%s %s' % (name, value, type(value))) 
     116        #log.debug('saving canvasitem: %s|%s %s' % (name, value, type(value))) 
    117117        if reference: 
    118118            save_reference(name, value) 
     
    161161    Exceptions: IOError, ValueError. 
    162162    """ 
    163  
     163    # TODO: restructure loading code, first load model, then add canvas items 
    164164    log.debug(_('Loading %d elements...') % len(elements)) 
    165     from pprint import pprint 
    166     pprint(elements) 
    167165 
    168166    # The elements are iterated three times: 
     
    179177    version_0_7_2(elements, factory, gaphor_version) 
    180178 
    181     log.debug("Still have %d elements" % len(elements)) 
     179    #log.debug("Still have %d elements" % len(elements)) 
    182180 
    183181    # First create elements and canvas items in the factory 
     
    187185        if isinstance(elem, parser.element): 
    188186            cls = getattr(UML, elem.type) 
    189             log.debug('Creating UML element for %s (%s)' % (elem, elem.id)) 
     187            #log.debug('Creating UML element for %s (%s)' % (elem, elem.id)) 
    190188            elem.element = factory.create_as(cls, id) 
     189            if elem.canvas: 
     190                elem.element.canvas.block_updates = True 
    191191        elif isinstance(elem, parser.canvasitem): 
    192192            cls = getattr(items, elem.type) 
    193             log.debug('Creating canvas item for %s (%s)' % (elem, elem.id)) 
     193            #log.debug('Creating canvas item for %s (%s)' % (elem, elem.id)) 
    194194            elem.element = diagram.create_as(cls, id) 
    195195        else: 
     
    198198    #log.info('0% ... 33%') 
    199199 
    200     log.debug("Still have %d elements" % len(elements)) 
     200    #log.debug("Still have %d elements" % len(elements)) 
    201201 
    202202    # load attributes and create references: 
     
    211211                assert item in elements.values(), 'Item %s (%s) is a canvas item, but it is not in the parsed objects table' % (item, item.id) 
    212212                #item.element.set_property('parent', elem.element.canvas.root) 
     213                elem.element.canvas.add(item.element) 
     214 
     215        # Also create nested canvas items: 
    213216        if isinstance(elem, parser.canvasitem): 
    214217            for item in elem.canvasitems: 
    215218                assert item in elements.values(), 'Item %s (%s) is a canvas item, but it is not in the parsed objects table' % (item, item.id) 
    216219                #item.element.set_property('parent', elem.element) 
     220                elem.element.canvas.add(item.element, parent=elem.element) 
    217221 
    218222        # load attributes and references: 
     
    295299        for percentage in parser.parse_generator(filename, loader): 
    296300            pass 
    297 ##            if percentage: 
    298 ##                yield percentage / 2 
    299 ##            else: 
    300 ##                yield percentage 
     301            if percentage: 
     302                yield percentage / 2 
     303            else: 
     304                yield percentage 
    301305        elements = loader.elements 
    302306        gaphor_version = loader.gaphor_version 
     
    315319        for percentage in load_elements_generator(elements, factory, gaphor_version): 
    316320            pass 
    317 ##            if percentage: 
    318 ##                yield percentage / 2 + 50 
    319 ##            else: 
    320 ##                yield percentage 
     321            if percentage: 
     322                yield percentage / 2 + 50 
     323            else: 
     324                yield percentage 
    321325        gc.collect() 
    322326        yield 100 
     
    346350                    if tv.value: 
    347351                        for t in map(str.strip, str(tv.value).split(',')): 
    348                             log.debug("Tagged value: %s" % t) 
     352                            #log.debug("Tagged value: %s" % t) 
    349353                            newtv = parser.element(generate_id(), 
    350354                                                   'LiteralSpecification') 
  • gaphor/branches/new-canvas/gaphor/tests/test_storage.py

    r1066 r1068  
    88from gaphor.misc.xmlwriter import XMLWriter 
    99from gaphor.diagram import items 
     10 
     11__module__ = 'test_storage' 
    1012 
    1113class PseudoFile(object): 
     
    6365        """Test loading of a freshly saved model. 
    6466        """ 
    65         filename = os.tmpnam() 
     67        filename = '%s.gaphor' % __module__ 
    6668 
    6769        UML.create(UML.Package) 
     
    8991        """Test loading of a freshly saved model. 
    9092        """ 
    91         filename = os.tmpnam() 
     93        filename = '%s.gaphor' % __module__ 
    9294 
    9395        UML.create(UML.Package) 
     
    9597        diagram.create(items.CommentItem, subject=UML.create(UML.Comment)) 
    9698        diagram.create(items.ClassItem, subject=UML.create(UML.Class)) 
    97   
     99        iface = diagram.create(items.InterfaceItem, subject=UML.create(UML.Interface)) 
     100        iface.subject.name = 'Circus' 
     101        iface.matrix.translate(10, 10) 
     102 
    98103        fd = open(filename, 'w') 
    99104        storage.save(XMLWriter(fd)) 
     
    105110        storage.load(filename) 
    106111 
    107         assert len(UML.lselect()) == 4 
     112        assert len(UML.lselect()) == 5 
    108113        assert len(UML.lselect(lambda e: e.isKindOf(UML.Package))) == 1 
    109114        assert len(UML.lselect(lambda e: e.isKindOf(UML.Diagram))) == 1 
     115        d = UML.lselect(lambda e: e.isKindOf(UML.Diagram))[0] 
    110116        assert len(UML.lselect(lambda e: e.isKindOf(UML.Comment))) == 1 
    111117        assert len(UML.lselect(lambda e: e.isKindOf(UML.Class))) == 1 
     118        assert len(UML.lselect(lambda e: e.isKindOf(UML.Interface))) == 1 
     119 
     120        iface = UML.lselect(lambda e: e.isKindOf(UML.Interface))[0] 
     121        assert iface.name == 'Circus' 
     122        assert len(iface.presentation) == 1 
     123        assert tuple(iface.presentation[0].matrix) == (1, 0, 0, 1, 10, 10), tuple(iface.presentation[0].matrix) 
    112124         
    113         # TODO: check load/save of other canvas items. 
     125        # Check load/save of other canvas items. 
     126        assert len(d.canvas.get_all_items()) == 3 
     127        for item in d.canvas.get_all_items(): 
     128            assert item.subject, 'No subject for %s' % item  
     129        d1 = d.canvas.select(lambda e: isinstance(e, items.ClassItem))[0] 
     130        assert d1 
     131        print d1, d1.subject 
    114132 
    115     def test_load_x_gaphor(self): 
    116         storage.load('x.gaphor') 
    117  
     133# vim:sw=4:et:ai 
  • gaphor/branches/new-canvas/gaphor/ui/mainwindow.py

    r1026 r1068  
    432432        self._check_state(AbstractWindow.STATE_ACTIVE) 
    433433        self.execute_action('OpenModelElement') 
     434        # Set the pointer tool as default tool. 
     435        self.execute_action('Pointer') 
    434436 
    435437    def on_view_cursor_changed(self, view):