Changeset 1276

Show
Ignore:
Timestamp:
05/13/07 23:50:45 (2 years ago)
Author:
arj..@yirdis.nl
Message:

Added some actions to DiagramTab?

Files:

Legend:

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

    r1268 r1276  
    6464        else: 
    6565            log.info('initializing service service.%s' % name) 
    66             # TODO: do init() before provideUtility! 
    6766            srv.init(self) 
    6867            component.provideUtility(srv, IService, name) 
  • gaphor/trunk/gaphor/services/filemanager.py

    r1275 r1276  
    4444          <toolitem action="file-save" /> 
    4545          <toolitem action="file-save-as" /> 
     46          <separator /> 
    4647        </toolbar> 
    4748      </ui> 
  • gaphor/trunk/gaphor/services/undomanager.py

    r1272 r1276  
    9494          </menu> 
    9595        </menubar> 
     96        <toolbar action="mainwindow-toolbar"> 
     97          <toolitem action="edit-undo" /> 
     98          <toolitem action="edit-redo" /> 
     99          <separator /> 
     100        </toolbar> 
    96101      </ui> 
    97102    """ 
  • gaphor/trunk/gaphor/ui/diagramtab.py

    r1258 r1276  
    55 
    66from gaphor import UML 
    7 from gaphor.core import inject 
    8 from gaphor.i18n import _ 
     7from gaphor.core import _, inject, action, build_action_group 
    98from gaphor.diagram.interfaces import IPopupMenu 
    109from gaphor.diagram import get_diagram_item 
     
    1918    action_manager = inject('action_manager') 
    2019 
     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 
    2140    def __init__(self, owning_window): 
    2241        self.diagram = None 
    2342        #self.view = None 
    2443        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>')) 
    2547 
    2648    def get_diagram(self): 
     
    4870 
    4971    def construct(self): 
    50         title = self.diagram and self.diagram.name or _('<None>') 
     72        #title = self.diagram and self.diagram.name or _('<None>') 
    5173 
    5274        table = gtk.Table(2,2, False) 
     
    7395                     gtk.FILL) 
    7496 
    75         #view.connect('notify::tool', self._on_view_notify_tool) 
    7697        view.connect('focus-changed', self._on_view_focus_changed) 
    7798        view.connect('selection-changed', self._on_view_selection_changed) 
    78         #view.connect('unselect-item', self._on_view_selection_changed) 
    7999        view.connect_after('key-press-event', self._on_key_press_event) 
    80100        view.connect('drag-data-received', self._on_drag_data_received) 
    81101 
    82         #item_tool = ItemTool(self.owning_window.get_action_pool()) 
    83         #view.get_default_tool().set_item_tool(item_tool) 
    84102        self.view = view 
    85103 
    86104        table.show_all() 
    87105 
    88         self.owning_window.new_tab(self, table, title) 
     106        self.owning_window.add_tab(self, table, self.title) 
    89107 
     108    @action(name='diagram-close', stock_id='gtk-close') 
    90109    def close(self): 
    91         """Tab is destroyed. Do the same thing that would 
     110        """ 
     111        Tab is destroyed. Do the same thing that would 
    92112        be done if File->Close was pressed. 
    93113        """ 
     
    99119        del self.view 
    100120        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 
    101135 
    102136    def _on_key_press_event(self, view, event): 
     
    112146 
    113147    def _on_view_focus_changed(self, view, focus_item): 
    114         self.action_manager.execute('ItemFocus') 
    115148        component.handle(DiagramItemFocused(focus_item)) 
    116149 
    117150    def _on_view_selection_changed(self, view, selection): 
    118151        self.action_manager.execute('ItemSelect') 
    119  
    120     def _on_view_notify_tool(self, view, pspec): 
    121         self.action_manager.execute('ToolChange') 
    122152 
    123153    def _on_diagram_event(self, element, pspec): 
  • gaphor/trunk/gaphor/ui/mainwindow.py

    r1275 r1276  
    255255        ToplevelWindow.__init__(self) 
    256256        self._filename = None 
     257        # Map tab contents to DiagramTab 
    257258        self.notebook_map = {} 
    258259        # Tree view: 
    259         self._model = None 
    260         self._view = None  
     260        self._tree_view = None  
    261261 
    262262        self.action_group = build_action_group(self) 
     
    269269            a.set_property('is-important', True) 
    270270            self.action_group.add_action(a) 
     271        self._tab_ui_settings = None 
    271272 
    272273    def get_model(self): 
     
    275276        (shown on the left side in a TreeView). 
    276277        """ 
    277         return self._model 
    278  
    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()
    280281 
    281282    def get_tree_view(self): 
     
    284285        See also get_model(). 
    285286        """ 
    286         return self._view 
    287  
    288     tree_view = property(lambda s: s._view) 
     287        return self._tree_view 
     288 
     289    tree_view = property(lambda s: s._tree_view) 
    289290 
    290291    def set_filename(self, filename): 
     
    372373        scrolled_window.add(view) 
    373374         
    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) 
    377378 
    378379        vbox = gtk.VBox() 
     
    389390        #notebook.set_size_request(-1, 10000) 
    390391 
    391         notebook.connect_after('switch-page', self.on_notebook_switch_page) 
     392        notebook.connect_after('switch-page', self._on_notebook_switch_page) 
    392393 
    393394        self.objectInspector = ObjectInspector() 
     
    408409 
    409410        second_paned.connect('notify::position', 
    410                             self.on_object_inspector_notify_position) 
     411                            self._on_object_inspector_notify_position) 
    411412 
    412413        self.notebook = notebook 
    413         self._model = model 
    414         self._view = view 
     414        self._tree_view = view 
    415415 
    416416        vbox.set_border_width(3) 
     
    432432        # We want to store the window size, so it can be reloaded on startup 
    433433        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) 
    436436 
    437437        # TODO: add action_groups and menu_xml from NamespaceView 
     
    447447    # Notebook methods: 
    448448 
    449     def new_tab(self, window, contents, label): 
     449    def add_tab(self, tab_id, contents, label): 
    450450        """ 
    451451        Create a new tab on the notebook with window as its contents. 
    452452        Returns: The page number of the tab. 
    453453        """ 
     454        self.notebook_map[contents] = tab_id 
    454455        l = gtk.Label(label) 
     456        # Note: append_page() emits switch-page event 
    455457        self.notebook.append_page(contents, l) 
    456458        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) 
    460460        return page_num 
    461461 
     
    499499                self.notebook.remove_page(num) 
    500500                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) 
    502505                return 
    503506 
     
    525528        Window is destroyed... Quit the application. 
    526529        """ 
    527         self._model = None 
    528         self._view = None 
     530        self._tree_view = None 
    529531        self.window = None 
    530532        gtk.main_quit() 
     
    533535        return not self.ask_to_close() 
    534536 
    535     def on_view_event(self, view, event): 
     537    def _on_view_event(self, view, event): 
    536538        """ 
    537539        Show a popup menu if button3 was pressed on the TreeView. 
     
    543545 
    544546 
    545     def on_view_row_activated(self, view, path, column): 
     547    def _on_view_row_activated(self, view, path, column): 
    546548        """ 
    547549        Double click on an element in the tree view. 
    548550        """ 
    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): 
    562561        """ 
    563562        Another page (tab) is put on the front of the diagram notebook. 
    564563        A dummy action is executed. 
    565564        """ 
    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): 
    570579        self.properties.set('ui.window-size', (allocation.width, allocation.height)) 
    571580 
    572     def on_window_destroy(self, window): 
     581    def _on_window_destroy(self, window): 
    573582        self.quit() 
    574583 
    575     def on_object_inspector_notify_position(self, paned, arg): 
     584    def _on_object_inspector_notify_position(self, paned, arg): 
    576585        self.properties.set('ui.object-inspector-position', 
    577586                     paned.get_position()) 
     
    590599    @action(name='tree-view-open', label='_Open') 
    591600    def tree_view_open_selected(self): 
    592         element = self._view.get_selected_element() 
     601        element = self._tree_view.get_selected_element() 
    593602        if isinstance(element, UML.Diagram): 
    594603            self.show_diagram(element) 
  • gaphor/trunk/gaphor/ui/tests/test_mainwindow.py

    r1262 r1276  
    33import unittest 
    44 
     5from gaphor.application import restart, Application 
    56from gaphor.ui.mainwindow import MainWindow 
    6  
     7from gaphor import UML 
    78 
    89class MainWindowTestCase(unittest.TestCase): 
    910 
    1011    def setUp(self): 
    11         from gaphor.application import restart, Application 
    1212        restart() 
    1313        Application.init(services=['element_factory', 'properties', 'action_manager']) 
     
    2222 
    2323 
     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         
    2435# vim:sw=4:et:ai