Changeset 930
- Timestamp:
- 06/07/06 23:39:29 (2 years ago)
- Files:
-
- gaphor/trunk/ChangeLog (modified) (1 diff)
- gaphor/trunk/gaphor/UML/diagram.py (modified) (5 diffs)
- gaphor/trunk/gaphor/__init__.py (modified) (1 diff)
- gaphor/trunk/gaphor/diagram/placementactions.py (modified) (1 diff)
- gaphor/trunk/gaphor/misc/signal.py (modified) (1 diff)
- gaphor/trunk/gaphor/storage.py (modified) (3 diffs)
- gaphor/trunk/gaphor/ui/diagramactions.py (modified) (9 diffs)
- gaphor/trunk/gaphor/ui/diagramtab.py (modified) (6 diffs)
- gaphor/trunk/gaphor/ui/diagramview.py (modified) (2 diffs)
- gaphor/trunk/gaphor/ui/editoractions.py (modified) (1 diff)
- gaphor/trunk/gaphor/ui/mainwindow.py (modified) (1 diff)
- gaphor/trunk/gaphor/ui/stock.py (modified) (3 diffs)
- gaphor/trunk/setup.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphor/trunk/ChangeLog
r926 r930 1 2006-06-07 arjan <arjan at yirdis dot nl> 2 3 * Changed Canvas and View to Gaphas. Items should still be converted. 4 In other words, the application does nothing from this point. 5 1 6 2006-06-06 arjan <arjan at yirdis dot nl> 2 7 gaphor/trunk/gaphor/UML/diagram.py
r924 r930 9 9 10 10 import gobject 11 import diacanvas11 import gaphas 12 12 from gaphor.misc import uniqueid 13 13 from uml2 import Namespace, PackageableElement 14 14 15 class DiagramCanvas( diacanvas.Canvas):16 """Some additions to diacanvas.Canvas class.15 class DiagramCanvas(gaphas.Canvas): 16 """Some additions to gaphas.Canvas class. 17 17 Esp. load and save functionallity. 18 18 """ 19 # Most of those properties comefrom diacanvas.Canvas20 _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' ]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' ] 23 23 24 24 def __init__(self, diagram): 25 s elf.__gobject_init__()25 super(DiagramCanvas, self).__init__() 26 26 self._diagram = diagram 27 27 … … 29 29 30 30 def save(self, save_func): 31 for prop in DiagramCanvas._savable_canvas_properties:32 save_func(prop, self.get_property(prop))33 save_func('root_affine', self.root.get_property('affine'))31 #for prop in DiagramCanvas._savable_canvas_properties: 32 # save_func(prop, self.get_property(prop)) 33 #save_func('root_affine', self.root.get_property('affine')) 34 34 # Save child items: 35 for item in self. root.children:35 for item in self.get_root_items(): 36 36 save_func(None, item) 37 37 38 38 def postload(self): 39 self.set_property ("allow_undo", False)40 self.update_now()41 self.resolve_now()42 39 self.update_now() 43 40 44 # setting allow-undo to 1 here will cause update info from later 45 # created elements to be put on the undo stack. 46 #self.clear_undo() 47 #self.clear_redo() 48 self.set_property ("allow_undo", True) 49 50 def _select(self, item_list, expression=None): 51 l = [] 52 if expression is None: 53 expression = lambda e: 1 54 CanvasGroupable = diacanvas.CanvasGroupable 55 for item in item_list: 56 if expression(item): 57 l.append(item) 58 if isinstance(item, CanvasGroupable): 59 l.extend(self._select(item.groupable_iter(), expression)) 60 return l 61 62 def select(self, expression=None): 41 def select(self, expression=lambda e: True): 63 42 """Return a list of all canvas items that match expression. 64 43 """ 65 return self._select(self.root.children, expression) 66 67 gobject.type_register(DiagramCanvas) 44 return filter(expression, self.get_all_items()) 68 45 69 46 … … 75 52 super(Diagram, self).__init__(id, factory) 76 53 self.canvas = DiagramCanvas(self) 77 #self.canvas.set_undo_stack_depth(10)78 self.canvas.set_property ("allow_undo", 1)79 54 80 55 def save(self, save_func): … … 86 61 self.canvas.postload() 87 62 88 def create(self, type ):63 def create(self, type, parent=None): 89 64 """Create a new canvas item on the canvas. It is created with 90 65 a unique ID and it is attached to the diagram's root item. 91 66 """ 92 assert issubclass(type, diacanvas.CanvasItem)67 assert issubclass(type, gaphas.Item) 93 68 obj = type(uniqueid.generate_id()) 94 #obj.set_property('parent', self.canvas.root) 95 self.canvas.root.add(obj) 69 self.canvas.root.add(obj, parent) 96 70 return obj 97 71 98 # TODO: remove99 def substitute_item(self, item, new_item_type):100 """Create a new item and replace item with the new item.101 """102 103 72 def unlink(self): 104 self.canvas.set_property('allow_undo', False)105 73 # Make sure all canvas items are unlinked 106 74 for item in self.canvas.select(): … … 110 78 pass 111 79 112 #self.canvas.clear_undo() 113 #self.canvas.clear_redo() 114 115 Namespace.unlink(self) 80 super(Diagram, self).unlink() gaphor/trunk/gaphor/__init__.py
r897 r930 45 45 This involves importing plugins and creating the main window. 46 46 """ 47 # Import stuff here, since the user might not need all the GUI stuff47 # Import GUI stuff here, since the user might not need all the GUI stuff 48 48 import gtk 49 import diagram49 #import diagram 50 50 # Load plugin definitions: 51 51 import pluginmanager gaphor/trunk/gaphor/diagram/placementactions.py
r720 r930 24 24 else: 25 25 action.sensitive = True 26 tool = view.get_property('tool')26 tool = None #view.tool 27 27 if tool: 28 28 id = tool.action_id gaphor/trunk/gaphor/misc/signal.py
r465 r930 8 8 9 9 class Signal: 10 """The signal class is an implementation of the Observer pattern. It can be 11 used to send signals to every function or method that connected to the 12 signal object, with a variable amount of parameters. Note that the owner 13 of the Signal instance should define a protocol for notifying the observers. 14 The subject should provide methods for connecting and disconnecting 15 observers (preferably 'connect()' and 'disconnect()'. 10 """The signal class is an implementation of the Observer pattern. 11 12 It can be used to send signals to every function or method that connected 13 to the signal object, with a variable amount of parameters. Note that the 14 owner of the Signal instance should define a protocol for notifying the 15 observers. The subject should provide methods for connecting and 16 disconnecting observers (preferably 'connect()' and 'disconnect()'. 16 17 """ 17 18 gaphor/trunk/gaphor/storage.py
r589 r930 21 21 import gc 22 22 23 import diacanvas23 import gaphas 24 24 25 25 from gaphor import UML … … 95 95 A value may be a primitive (string, int), a gaphor.UML.collection 96 96 (which contains a list of references to other UML elements) or a 97 diacanvas.Canvas (which contains canvas items).97 gaphas.Canvas (which contains canvas items). 98 98 """ 99 if isinstance (value, (UML.Element, diacanvas.CanvasItem)):99 if isinstance (value, (UML.Element, gaphas.Item)): 100 100 save_reference(name, value) 101 101 elif isinstance(value, UML.collection): 102 102 save_collection(name, value) 103 elif isinstance(value, diacanvas.Canvas):103 elif isinstance(value, gaphas.Canvas): 104 104 writer.startElement('canvas', {}) 105 105 value.save(save_canvasitem) … … 117 117 elif isinstance(value, UML.collection): 118 118 save_collection(name, value) 119 elif isinstance(value, diacanvas.CanvasItem):119 elif isinstance(value, gaphas.Item): 120 120 writer.startElement('item', { 'id': value.id, 121 121 'type': value.__class__.__name__ }) gaphor/trunk/gaphor/ui/diagramactions.py
r897 r930 5 5 6 6 import gtk 7 import diacanvas7 import gaphas 8 8 9 9 from gaphor import resource … … 328 328 for item in value: 329 329 self._load_element(name, item) 330 elif isinstance(value, diacanvas.CanvasItem):330 elif isinstance(value, gaphas.Item): 331 331 self._load_element(name, value) 332 332 else: … … 355 355 for ci in copy_items: 356 356 self._new_items[ci.id] = diagram.create(type(ci)) 357 #self._new_items[ci.id].set_property('canvas', canvas)358 357 359 358 # Copy attributes and references. References should be … … 395 394 def execute(self): 396 395 view = self._window.get_current_diagram_view() 397 view.set_zoom(view.get_zoom() + 0.1) 396 view.zoom(1.2) 397 #view.set_zoom(view.get_zoom() + 0.1) 398 398 399 399 register_action(ZoomInAction) … … 416 416 def execute(self): 417 417 view = self._window.get_current_diagram_view() 418 view.set_zoom(view.get_zoom() - 0.1) 418 #view.set_zoom(view.get_zoom() - 0.1) 419 view.zoom(1 / 1.2) 419 420 420 421 register_action(ZoomOutAction) … … 456 457 diagram_tab.get_canvas().props.snap_to_grid = self.active 457 458 458 register_action(SnapToGridAction) 459 #register_action(SnapToGridAction) 460 459 461 460 462 class ShowGridAction(CheckAction): … … 474 476 if tab: 475 477 canvas = tab.get_canvas() 476 canvas.set_property('grid_color', self.active and 255 or canvas.get_property('grid_bg')) 477 478 register_action(ShowGridAction) 478 #canvas.set_property('grid_color', self.active and 255 or canvas.get_property('grid_bg')) 479 480 #register_action(ShowGridAction) 481 479 482 480 483 class ShowElementInTreeViewAction(Action): … … 487 490 def update(self): 488 491 diagram_tab = self._window.get_current_diagram_tab() 489 self.sensitive = diagram_tab and diagram_tab.get_view().focus_item and \ 490 diagram_tab.get_view().focus_item.item and \ 491 diagram_tab.get_view().focus_item.item.subject 492 self.sensitive = diagram_tab and diagram_tab.get_view().focused_item and \ 493 diagram_tab.get_view().focused_item.subject 492 494 493 495 def execute(self): … … 495 497 if tab: 496 498 view = tab.get_view() 497 fi = view.focus _item499 fi = view.focused_item 498 500 assert fi 499 self._window.select_element(fi. item.subject)501 self._window.select_element(fi.subject) 500 502 501 503 register_action(ShowElementInTreeViewAction) gaphor/trunk/gaphor/ui/diagramtab.py
r897 r930 6 6 from gaphor import UML 7 7 from gaphor import resource 8 from gaphor.i18n import _ 8 9 from gaphor.diagram.itemtool import ItemTool 9 10 from gaphor.diagram import get_diagram_item … … 22 23 def __init__(self, owning_window): 23 24 self.diagram = None 25 #self.view = None 24 26 self.owning_window = owning_window 25 27 … … 40 42 self.diagram = diagram 41 43 if diagram: 42 diagram.canvas.set_property ('allow_undo', 1)43 44 diagram.connect(('name', '__unlink__'), self.__on_diagram_event) 44 45 45 46 if hasattr(self, 'view'): 46 self.view. get_hadjustment().set_value(0.0)47 self.view. get_vadjustment().set_value(0.0)47 self.view.hadjustment.set_value(0.0) 48 self.view.vadjustment.set_value(0.0) 48 49 49 50 50 51 def construct(self): 51 title = self.diagram and self.diagram.name or '<None>'52 title = self.diagram and self.diagram.name or _('<None>') 52 53 53 54 table = gtk.Table(2,2, False) 54 #table.set_row_spacings (4)55 #table.set_col_spacings (4)55 #table.set_row_spacings(4) 56 #table.set_col_spacings(4) 56 57 57 58 frame = gtk.Frame() 58 frame.set_shadow_type (gtk.SHADOW_IN)59 table.attach (frame, 0, 1, 0, 1,60 gtk.EXPAND | gtk.FILL | gtk.SHRINK,61 gtk.EXPAND | gtk.FILL | gtk.SHRINK)59 frame.set_shadow_type(gtk.SHADOW_IN) 60 table.attach(frame, 0, 1, 0, 1, 61 gtk.EXPAND | gtk.FILL | gtk.SHRINK, 62 gtk.EXPAND | gtk.FILL | gtk.SHRINK) 62 63 63 view = DiagramView (diagram=self.diagram)64 view.set_scroll_region(0, 0, 600, 450)64 view = DiagramView(diagram=self.diagram) 65 #view.set_scroll_region(0, 0, 600, 450) 65 66 66 frame.add (view)67 frame.add(view) 67 68 68 sbar = gtk.VScrollbar(view. get_vadjustment())69 table.attach (sbar, 1, 2, 0, 1, gtk.FILL,70 gtk.EXPAND | gtk.FILL | gtk.SHRINK)69 sbar = gtk.VScrollbar(view.vadjustment) 70 table.attach(sbar, 1, 2, 0, 1, gtk.FILL, 71 gtk.EXPAND | gtk.FILL | gtk.SHRINK) 71 72 72 sbar = gtk.HScrollbar(view. get_hadjustment())73 table.attach (sbar, 0, 1, 1, 2, gtk.EXPAND | gtk.FILL | gtk.SHRINK,74 gtk.FILL)73 sbar = gtk.HScrollbar(view.hadjustment) 74 table.attach(sbar, 0, 1, 1, 2, gtk.EXPAND | gtk.FILL | gtk.SHRINK, 75 gtk.FILL) 75 76 76 view.connect('notify::tool', self.__on_view_notify_tool)77 #view.connect('notify::tool', self.__on_view_notify_tool) 77 78 view.connect_after('event-after', self.__on_view_event_after) 78 view.connect('focus- item', self.__on_view_focus_item)79 view.connect('select -item', self.__on_view_select_item)80 view.connect('unselect-item', self.__on_view_select_item)79 view.connect('focus-changed', self.__on_view_focus_changed) 80 view.connect('selection-changed', self.__on_view_selection_changed) 81 #view.connect('unselect-item', self.__on_view_selection_changed) 81 82 view.connect_after('key-press-event', self.__on_key_press_event) 82 view.connect('drag_data_received', self.__on_drag_data_received) 83 self.view = view 83 view.connect('drag-data-received', self.__on_drag_data_received) 84 84 85 85 item_tool = ItemTool(self.owning_window.get_action_pool()) 86 view.get_default_tool().set_item_tool(item_tool) 87 88 view.get_hadjustment().set_value(0.0) 89 view.get_vadjustment().set_value(0.0) 86 #view.get_default_tool().set_item_tool(item_tool) 87 self.view = view 90 88 91 89 table.show_all() … … 132 130 return False 133 131 134 def __on_view_focus_ item(self, view, focus_item):132 def __on_view_focus_changed(self, view, focus_item): 135 133 self.owning_window.execute_action('ItemFocus') 136 134 component.handle(DiagramItemFocused(focus_item)) 137 135 138 def __on_view_select _item(self, view, select_item):136 def __on_view_selection_changed(self, view, selection): 139 137 self.owning_window.execute_action('ItemSelect') 140 138 … … 172 170 ix, iy = item.affine_point_w2i(max(0, wx), max(0, wy)) 173 171 item.move(ix, iy) 174 item.s et_property ('subject', element)172 item.subject = element 175 173 get_undo_manager().commit_transaction() 176 174 view.unselect_all() … … 180 178 181 179 else: 182 log.warning ('No graphical representation for UML element %s' % type(element).__name__)180 log.warning('No graphical representation for UML element %s' % type(element).__name__) 183 181 context.finish(True, False, time) 184 182 else: gaphor/trunk/gaphor/ui/diagramview.py
r465 r930 1 # vim: sw=4 1 """ 2 """ 2 3 3 import gobject4 4 import gtk 5 from diacanvas import CanvasView 5 import gaphas 6 6 7 class DiagramView(CanvasView): 7 class DiagramView(gaphas.View): 8 """Displays a diagram (canvas) in a widget. 9 10 See also: DiagramTab 11 """ 12 8 13 TARGET_STRING = 0 9 14 TARGET_ELEMENT_ID = 1 … … 11 16 ('gaphor/element-id', 0, TARGET_ELEMENT_ID)] 12 17 18 __gtype_name__ = 'GaphorDiagramView' 19 13 20 def __init__(self, diagram=None): 14 self.__gobject_init__() 21 super(DiagramView, self).__init__(diagram and diagram.canvas) 22 self.diagram = diagram 15 23 16 if diagram:17 canvas = diagram.canvas18 else:19 canvas = None20 CanvasView.__init__(self, canvas)21 # self.diagram = diagram22 24 # Drop 23 25 self.drag_dest_set (gtk.DEST_DEFAULT_ALL, DiagramView.DND_TARGETS, 24 26 gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_LINK) 25 27 26 gobject.type_register(DiagramView) 28 29 # vim: sw=4:et gaphor/trunk/gaphor/ui/editoractions.py
r505 r930 7 7 from gaphor.misc.action import Action, CheckAction, RadioAction, register_action 8 8 import gtk 9 import diacanvas10 9 11 10 class RunAction(Action): gaphor/trunk/gaphor/ui/mainwindow.py
r897 r930 229 229 230 230 def show_diagram(self, diagram): 231 """Show a Diagram element in a new tab. If a tab is already open,232 show that one instead.231 """Show a Diagram element in a new tab. 232 If a tab is already open, show that one instead. 233 233 """ 234 234 # Try to find an existing window/tab and let it get focus: gaphor/trunk/gaphor/ui/stock.py
r543 r930 1 # vim:sw=42 1 """Icons that are used by Gaphor. 3 2 """ … … 111 110 self.data = self.data + content 112 111 112 113 113 def load_stock_icons(): 114 """ 114 """Load stock icon definitions from the DataDir location 115 (usually /usr/local/share/gaphor). 115 116 """ 116 117 from xml.sax import make_parser … … 131 132 load_stock_icons() 132 133 134 # vim:sw=4:et gaphor/trunk/setup.py
r924 r930 72 72 pygtk.require('2.0') 73 73 74 #self.pkg_config_check('gobject-2.0', '2.0.0')75 #self.pkg_config_check('gtk+-2.0', '2.0.0')76 #self.pkg_config_check('pygtk-2.0', '1.99.15')77 #self.pkg_config_check('gconf-2.0', '2.0.0')78 #self.pkg_config_check('libbonobo-2.0', '2.0.0')79 #self.pkg_config_check('libbonoboui-2.0', '2.0.0')80 #self.pkg_config_check('diacanvas2', '0.9.1')81 82 74 self.module_check('xml.parsers.expat') 83 #self.module_check('gobject', 'glib_version', (2, 8))84 75 self.module_check('gtk', ('gtk_version', (2, 8)), 85 76 ('pygtk_version', (2, 8))) 86 #self.module_check('gnome')87 self.module_check('gnomecanvas')88 #self.module_check('gconf')89 self.module_check('diacanvas', ('diacanvas_version', (0, 14, 3)))90 77 91 78 print ''
