Changeset 1276
- Timestamp:
- 05/13/07 23:50:45 (2 years ago)
- Files:
-
- gaphor/trunk/gaphor/application.py (modified) (1 diff)
- gaphor/trunk/gaphor/services/filemanager.py (modified) (1 diff)
- gaphor/trunk/gaphor/services/undomanager.py (modified) (1 diff)
- gaphor/trunk/gaphor/ui/diagramtab.py (modified) (6 diffs)
- gaphor/trunk/gaphor/ui/mainwindow.py (modified) (14 diffs)
- gaphor/trunk/gaphor/ui/tests/test_mainwindow.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphor/trunk/gaphor/application.py
r1268 r1276 64 64 else: 65 65 log.info('initializing service service.%s' % name) 66 # TODO: do init() before provideUtility!67 66 srv.init(self) 68 67 component.provideUtility(srv, IService, name) gaphor/trunk/gaphor/services/filemanager.py
r1275 r1276 44 44 <toolitem action="file-save" /> 45 45 <toolitem action="file-save-as" /> 46 <separator /> 46 47 </toolbar> 47 48 </ui> gaphor/trunk/gaphor/services/undomanager.py
r1272 r1276 94 94 </menu> 95 95 </menubar> 96 <toolbar action="mainwindow-toolbar"> 97 <toolitem action="edit-undo" /> 98 <toolitem action="edit-redo" /> 99 <separator /> 100 </toolbar> 96 101 </ui> 97 102 """ gaphor/trunk/gaphor/ui/diagramtab.py
r1258 r1276 5 5 6 6 from gaphor import UML 7 from gaphor.core import inject 8 from gaphor.i18n import _ 7 from gaphor.core import _, inject, action, build_action_group 9 8 from gaphor.diagram.interfaces import IPopupMenu 10 9 from gaphor.diagram import get_diagram_item … … 19 18 action_manager = inject('action_manager') 20 19 20 menu_xml = """ 21 <ui> 22 <menubar action="mainwindow"> 23 <menu name="diagram" action="diagram"> 24 <menuitem action="diagram-zoom-in" /> 25 <menuitem action="diagram-zoom-out" /> 26 <menuitem action="diagram-zoom-100" /> 27 <separator /> 28 <menuitem action="diagram-close" /> 29 </menu> 30 </menubar> 31 <toolbar name='mainwindow-toolbar'> 32 <separator /> 33 <toolitem action="diagram-zoom-in" /> 34 <toolitem action="diagram-zoom-out" /> 35 <toolitem action="diagram-zoom-100" /> 36 </toolbar> 37 </ui> 38 """ 39 21 40 def __init__(self, owning_window): 22 41 self.diagram = None 23 42 #self.view = None 24 43 self.owning_window = owning_window 44 self.action_group = build_action_group(self) 45 46 title = property(lambda s: s.diagram and s.diagram.name or _('<None>')) 25 47 26 48 def get_diagram(self): … … 48 70 49 71 def construct(self): 50 title = self.diagram and self.diagram.name or _('<None>')72 #title = self.diagram and self.diagram.name or _('<None>') 51 73 52 74 table = gtk.Table(2,2, False) … … 73 95 gtk.FILL) 74 96 75 #view.connect('notify::tool', self._on_view_notify_tool)76 97 view.connect('focus-changed', self._on_view_focus_changed) 77 98 view.connect('selection-changed', self._on_view_selection_changed) 78 #view.connect('unselect-item', self._on_view_selection_changed)79 99 view.connect_after('key-press-event', self._on_key_press_event) 80 100 view.connect('drag-data-received', self._on_drag_data_received) 81 101 82 #item_tool = ItemTool(self.owning_window.get_action_pool())83 #view.get_default_tool().set_item_tool(item_tool)84 102 self.view = view 85 103 86 104 table.show_all() 87 105 88 self.owning_window. new_tab(self, table,title)106 self.owning_window.add_tab(self, table, self.title) 89 107 108 @action(name='diagram-close', stock_id='gtk-close') 90 109 def close(self): 91 """Tab is destroyed. Do the same thing that would 110 """ 111 Tab is destroyed. Do the same thing that would 92 112 be done if File->Close was pressed. 93 113 """ … … 99 119 del self.view 100 120 del self.diagram 121 122 @action(name='diagram-zoom-in', stock_id='gtk-zoom-in') 123 def zoom_in(self): 124 self.view.zoom(1.2) 125 126 @action(name='diagram-zoom-out', stock_id='gtk-zoom-out') 127 def zoom_out(self): 128 self.view.zoom(1 / 1.2) 129 130 @action(name='diagram-zoom-100', stock_id='gtk-zoom-100') 131 def zoom_100(self): 132 zx = self.view.matrix[0] 133 self.view.zoom(1 / zx) 134 101 135 102 136 def _on_key_press_event(self, view, event): … … 112 146 113 147 def _on_view_focus_changed(self, view, focus_item): 114 self.action_manager.execute('ItemFocus')115 148 component.handle(DiagramItemFocused(focus_item)) 116 149 117 150 def _on_view_selection_changed(self, view, selection): 118 151 self.action_manager.execute('ItemSelect') 119 120 def _on_view_notify_tool(self, view, pspec):121 self.action_manager.execute('ToolChange')122 152 123 153 def _on_diagram_event(self, element, pspec): gaphor/trunk/gaphor/ui/mainwindow.py
r1275 r1276 255 255 ToplevelWindow.__init__(self) 256 256 self._filename = None 257 # Map tab contents to DiagramTab 257 258 self.notebook_map = {} 258 259 # Tree view: 259 self._model = None 260 self._view = None 260 self._tree_view = None 261 261 262 262 self.action_group = build_action_group(self) … … 269 269 a.set_property('is-important', True) 270 270 self.action_group.add_action(a) 271 self._tab_ui_settings = None 271 272 272 273 def get_model(self): … … 275 276 (shown on the left side in a TreeView). 276 277 """ 277 return self._ model278 279 tree_model = property(lambda s: s. _model)278 return self._tree_view.get_model() 279 280 tree_model = property(lambda s: s.tree_view.get_model()) 280 281 281 282 def get_tree_view(self): … … 284 285 See also get_model(). 285 286 """ 286 return self._ view287 288 tree_view = property(lambda s: s._ view)287 return self._tree_view 288 289 tree_view = property(lambda s: s._tree_view) 289 290 290 291 def set_filename(self, filename): … … 372 373 scrolled_window.add(view) 373 374 374 view.connect_after('event-after', self. on_view_event)375 view.connect('row-activated', self. on_view_row_activated)376 view.connect_after('cursor-changed', self.on_view_cursor_changed)375 view.connect_after('event-after', self._on_view_event) 376 view.connect('row-activated', self._on_view_row_activated) 377 #view.connect_after('cursor-changed', self._on_view_cursor_changed) 377 378 378 379 vbox = gtk.VBox() … … 389 390 #notebook.set_size_request(-1, 10000) 390 391 391 notebook.connect_after('switch-page', self. on_notebook_switch_page)392 notebook.connect_after('switch-page', self._on_notebook_switch_page) 392 393 393 394 self.objectInspector = ObjectInspector() … … 408 409 409 410 second_paned.connect('notify::position', 410 self. on_object_inspector_notify_position)411 self._on_object_inspector_notify_position) 411 412 412 413 self.notebook = notebook 413 self._model = model 414 self._view = view 414 self._tree_view = view 415 415 416 416 vbox.set_border_width(3) … … 432 432 # We want to store the window size, so it can be reloaded on startup 433 433 self.window.set_property('allow-shrink', True) 434 self.window.connect('size-allocate', self. on_window_size_allocate)435 self.window.connect('destroy', self. on_window_destroy)434 self.window.connect('size-allocate', self._on_window_size_allocate) 435 self.window.connect('destroy', self._on_window_destroy) 436 436 437 437 # TODO: add action_groups and menu_xml from NamespaceView … … 447 447 # Notebook methods: 448 448 449 def new_tab(self, window, contents, label):449 def add_tab(self, tab_id, contents, label): 450 450 """ 451 451 Create a new tab on the notebook with window as its contents. 452 452 Returns: The page number of the tab. 453 453 """ 454 self.notebook_map[contents] = tab_id 454 455 l = gtk.Label(label) 456 # Note: append_page() emits switch-page event 455 457 self.notebook.append_page(contents, l) 456 458 page_num = self.notebook.page_num(contents) 457 self.notebook.set_current_page(page_num) 458 self.notebook_map[contents] = window 459 #self.action_manager.execute('TabChange') 459 #self.notebook.set_current_page(page_num) 460 460 return page_num 461 461 … … 499 499 self.notebook.remove_page(num) 500 500 del self.notebook_map[p] 501 #self.action_manager.execute('TabChange') 501 if self._tab_ui_settings: 502 action_group, ui_id = self._tab_ui_settings 503 self.ui_manager.remove_action_group(action_group) 504 self.ui_manager.remove_ui(ui_id) 502 505 return 503 506 … … 525 528 Window is destroyed... Quit the application. 526 529 """ 527 self._model = None 528 self._view = None 530 self._tree_view = None 529 531 self.window = None 530 532 gtk.main_quit() … … 533 535 return not self.ask_to_close() 534 536 535 def on_view_event(self, view, event):537 def _on_view_event(self, view, event): 536 538 """ 537 539 Show a popup menu if button3 was pressed on the TreeView. … … 543 545 544 546 545 def on_view_row_activated(self, view, path, column):547 def _on_view_row_activated(self, view, path, column): 546 548 """ 547 549 Double click on an element in the tree view. 548 550 """ 549 #self.action_manager.execute('OpenModelElement') 550 # Set the pointer tool as default tool. 551 #self.action_manager.execute('Pointer') 552 pass 553 554 def on_view_cursor_changed(self, view): 555 """ 556 Another row is selected, execute a dummy action. 557 """ 558 #self.action_manager.execute('SelectRow') 559 pass 560 561 def on_notebook_switch_page(self, notebook, tab, page_num): 551 self.action_manager.execute('tree-view-open') 552 553 #def _on_view_cursor_changed(self, view): 554 # """ 555 # Another row is selected, execute a dummy action. 556 # """ 557 # #self.action_manager.execute('SelectRow') 558 # pass 559 560 def _on_notebook_switch_page(self, notebook, tab, page_num): 562 561 """ 563 562 Another page (tab) is put on the front of the diagram notebook. 564 563 A dummy action is executed. 565 564 """ 566 #self.action_manager.execute('TabChange') 567 pass 568 569 def on_window_size_allocate(self, window, allocation): 565 if self._tab_ui_settings: 566 action_group, ui_id = self._tab_ui_settings 567 self.ui_manager.remove_action_group(action_group) 568 self.ui_manager.remove_ui(ui_id) 569 570 content = self.notebook.get_nth_page(page_num) 571 tab = self.notebook_map.get(content) 572 assert isinstance(tab, DiagramTab), str(tab) 573 574 self.ui_manager.insert_action_group(tab.action_group, -1) 575 ui_id = self.ui_manager.add_ui_from_string(tab.menu_xml) 576 self._tab_ui_settings = tab.action_group, ui_id 577 578 def _on_window_size_allocate(self, window, allocation): 570 579 self.properties.set('ui.window-size', (allocation.width, allocation.height)) 571 580 572 def on_window_destroy(self, window):581 def _on_window_destroy(self, window): 573 582 self.quit() 574 583 575 def on_object_inspector_notify_position(self, paned, arg):584 def _on_object_inspector_notify_position(self, paned, arg): 576 585 self.properties.set('ui.object-inspector-position', 577 586 paned.get_position()) … … 590 599 @action(name='tree-view-open', label='_Open') 591 600 def tree_view_open_selected(self): 592 element = self._ view.get_selected_element()601 element = self._tree_view.get_selected_element() 593 602 if isinstance(element, UML.Diagram): 594 603 self.show_diagram(element) gaphor/trunk/gaphor/ui/tests/test_mainwindow.py
r1262 r1276 3 3 import unittest 4 4 5 from gaphor.application import restart, Application 5 6 from gaphor.ui.mainwindow import MainWindow 6 7 from gaphor import UML 7 8 8 9 class MainWindowTestCase(unittest.TestCase): 9 10 10 11 def setUp(self): 11 from gaphor.application import restart, Application12 12 restart() 13 13 Application.init(services=['element_factory', 'properties', 'action_manager']) … … 22 22 23 23 24 def test_show_diagram(self): 25 main_w = MainWindow() 26 element_factory = Application.get_service('element_factory') 27 diagram = element_factory.create(UML.Diagram) 28 ui_manager = gtk.UIManager() 29 main_w.ui_manager = ui_manager 30 main_w.construct() 31 self.assertEqual(main_w.get_current_diagram(), None) 32 33 main_w.show_diagram(diagram) 34 24 35 # vim:sw=4:et:ai
