Changeset 1260

Show
Ignore:
Timestamp:
05/08/07 03:24:46 (2 years ago)
Author:
arj..@yirdis.nl
Message:

Some more work on new GUI management

Files:

Legend:

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

    r1244 r1260  
    22""" 
    33 
     4import pkg_resources 
    45from zope import interface 
    56from gaphor.interfaces import IService 
     
    1920 
    2021        #self.init_pygtk() 
     22        self.init_ui_manager() 
    2123        self.init_stock_icons() 
    2224        self.init_actions() 
     25        self.init_ui_components() 
    2326        self.init_main_window() 
    2427 
     
    3134        del pygtk 
    3235 
     36    def init_ui_manager(self): 
     37        import gtk 
     38        self.ui_manager = gtk.UIManager() 
     39 
    3340    def init_stock_icons(self): 
    3441        # Load stock items 
    3542        import gaphor.ui.stock 
    3643        gaphor.ui.stock.load_stock_icons() 
     44 
     45    def init_ui_components(self): 
     46        from gaphor.ui.interfaces import IUIComponent 
     47        for ep in pkg_resources.iter_entry_points('gaphor.uicomponents'): 
     48            log.debug('found entry point uicomponent.%s' % ep.name) 
     49            cls = ep.load() 
     50            if not IUIComponent.implementedBy(cls): 
     51                raise 'MisConfigurationException', 'Entry point %s doesn''t provide IUIComponent' % ep.name 
     52            uicomp = cls() 
     53            uicomp.ui_manager = self.ui_manager 
     54            self._ui_components[ep.name] = uicomp 
    3755 
    3856    def init_main_window(self): 
  • gaphor/trunk/gaphor/ui/consolewindow.py

    r1258 r1260  
    66import gaphor 
    77from gaphor.interfaces import IActionProvider 
     8from gaphor.ui.interfaces import IUIComponent 
    89from gaphor.action import action, build_action_group 
    910from gaphor.misc.console import GTKInterpreterConsole 
     
    1213class ConsoleWindow(object): 
    1314     
    14     interface.implements(IActionProvider
     15    interface.implements(IActionProvider, IUIComponent
    1516 
    1617    menu_xml = """ 
    1718        <ui> 
     19          <menubar action="mainwindow"> 
     20            <menu name="_Window" action="Menu"> 
     21              <menuitem name='_Console' action="ConsoleWindow:open" /> 
     22            </menu> 
     23          </menubar> 
    1824          <menubar action="consolewindow"> 
    19             <menu name="_File" action="FileMenu"> 
    20               <menuitem name='_Close' action="ConsoleWindow_close" /> 
     25            <menu name="_File" action="Menu"> 
     26              <menuitem name='_Close' action="ConsoleWindow:close" /> 
    2127            </menu> 
    2228          </menubar> 
     
    2430        """ 
    2531 
    26     #action_group = property(lambda s: s._action_group) 
     32    title = 'Gaphor Console' 
     33    size = (400, 400) 
     34    menubar_path = '/consolewindow' 
     35    toolbar_path = '' 
    2736 
    2837    def __init__(self): 
    2938        self.action_group = build_action_group(self) 
     39        self.window = None 
     40        self.ui_manager = None # injected 
     41 
     42    def ui_component(self): 
     43        console = GTKInterpreterConsole() 
     44        console.show() 
     45        return console 
    3046 
    3147    def construct(self): 
    32         console = GTKInterpreterConsole() 
    33         console.show() 
    34  
    35         #self._construct_window(name='console', 
    36         #                       title='Gaphor Console', 
    37         #                       size=(400, 400), 
    38         #                       contents=console) 
    3948        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    40         self.window.set_title('Gaphor Console'
    41         self.window.set_size_request(400, 400
     49        self.window.set_title(self.title
     50        self.window.set_size_request(*self.size
    4251        self.window.set_resizable(True) 
    43  
    44         self.ui_manager = gtk.UIManager() 
    45         self.ui_manager.insert_action_group(self.action_group, 0) 
    46         self.ui_manager.add_ui_from_string(self.menu_xml) 
    47  
    48         menubar = self.ui_manager.get_widget('/consolewindow') 
    4952 
    5053        vbox = gtk.VBox() 
     
    5255        vbox.show() 
    5356 
     57        self.ui_manager.insert_action_group(self.action_group, 0) 
     58        self.ui_manager.add_ui_from_string(self.menu_xml) 
     59 
     60        self.window.add_accel_group(self.ui_manager.get_accel_group()) 
     61 
     62        menubar = self.ui_manager.get_widget(self.menubar_path) 
    5463        vbox.pack_start(menubar, expand=False) 
    55         vbox.pack_end(console, expand=True) 
     64         
     65        if self.toolbar_path: 
     66            toolbar = self.ui_manager.get_widget(self.toolbar_path) 
     67            vbox.pack_start(toolbar, expand=False) 
     68 
     69        vbox.pack_end(self.ui_component(), expand=True) 
    5670 
    5771        # TODO: add statusbar 
    5872        self.window.show_all() 
    5973 
    60     @action(name='FileMenu', label='_File') 
     74    @action(name='Menu', label='_File') 
    6175    def dummy(self): pass 
    6276 
    63     @action(name='ConsoleWindow_close', label='_Close', stock_id='gtk-close') 
     77    @action(name='ConsoleWindow:open', label='Console') 
     78    def open(self): 
     79        if not self.window: 
     80            self.construct() 
     81        else: 
     82            self.window.show_all() 
     83 
     84    @action(name='ConsoleWindow:close', stock_id='gtk-close') 
    6485    def close(self): 
    6586        self.window.destroy() 
    66          
    67     def _on_window_destroy(): 
    68         pass 
     87        self.window = None 
    6988 
  • gaphor/trunk/gaphor/ui/interfaces.py

    r1170 r1260  
    1414    """A user interface component""" 
    1515     
     16    ui_manager = interface.Attribute("The gtk.UIManager, set after construction") 
     17    def construct(self): 
     18        """ 
     19        Create and display the UI components (windows). 
     20        """ 
     21 
     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 
     30 
    1631class IDetailsPage(IUIComponent): 
    1732    """A property page which can display itself in a notebook""" 
  • gaphor/trunk/gaphor/ui/tests/test_consolewindow.py

    r1258 r1260  
    66 
    77    def test1(self): 
     8        import gtk 
     9        ui_manager = gtk.UIManager() 
    810        window = ConsoleWindow() 
    9         assert len(window.action_group.list_actions()) == 2 
     11        window.ui_manager = ui_manager 
     12        assert len(window.action_group.list_actions()) == 3 
    1013        window.construct() 
    1114        window.close() 
  • gaphor/trunk/setup.py

    r1250 r1260  
    8686            'element_factory = gaphor.UML.elementfactory:ElementFactory', 
    8787        ], 
    88         'gaphor.adapters': [ 
    89             'connectors = gaphor.adapters.connectors', 
    90             'editors = gaphor.adapters.editors', 
     88        'gaphor.uicomponents': [ 
     89            'mainwindow = gaphor.ui.mainwindow:MainWindow', 
     90            'consolewindow = gaphor.ui.consolewindow:ConsoleWindow', 
    9191        ], 
    9292    },