Beispiel #1
0
    def __init__(self):
        self.components = get_components()

        self.w = gtk.Window()
        self.w.connect('destroy', self.quit_cb)
        self.w.set_size_request(700, 600)

        vbox = gtk.VBox(False, 0)

        # Create a UIManager instance
        self.uimanager = gtk.UIManager()
        self.merge_id = 0
        # Add the accelerator group to the toplevel window
        accelgroup = self.uimanager.get_accel_group()
        self.w.add_accel_group(accelgroup)

        # Create an ActionGroup
        self.actiongroup = gtk.ActionGroup('MMUIManager')

        # Create actions
        self.actiongroup.add_actions([('Quit', gtk.STOCK_QUIT, '_Quit', None,
                                       'Quit the Program', self.quit_cb),
                                      ('File', None, '_File'),
                                      ('Components', None, '_Components')])
        self.actiongroup.get_action('Quit').set_property(
            'short-label', '_Quit')

        # Add the actiongroup to the uimanager
        self.uimanager.insert_action_group(self.actiongroup, 0)
        # Add a UI description
        self.uimanager.add_ui_from_string(self.ui)
        # Create a MenuBar
        menubar = self.uimanager.get_widget('/MenuBar')
        vbox.pack_start(menubar, False)
        # Create a Toolbar
        toolbar = self.uimanager.get_widget('/Toolbar')
        vbox.pack_start(toolbar, False)

        self.new_component_id = 0
        for component_name, component_class in self.components.items():
            self.actiongroup.add_actions([
                (component_name, gtk.STOCK_NEW, '_' + component_name,
                 '<Control>%s' % component_name[0],
                 component_class.description, self.start_component_cb)
            ])
            self.uimanager.add_ui_from_string(self.component_ui %
                                              (component_name, component_name))

        self.notebook = NotebookWithCloseButtonOnTabs()
        self.notebook.set_scrollable(True)
        self.notebook.set_property('homogeneous', True)
        self.notebook.connect('switch-page', self.switch_page)
        #        self.notebook.connect('page-added', self.on_page_added)
        vbox.pack_start(self.notebook, True, True, 0)

        self.w.add(vbox)
        self.w.show_all()
        gtk.main()
Beispiel #2
0
    def __init__(self):
        self.components = get_components()

        self.w = gtk.Window()
        self.w.connect('destroy', self.quit_cb)
        self.w.set_size_request(700, 600)

        vbox = gtk.VBox(False, 0)

        # Create a UIManager instance
        self.uimanager = gtk.UIManager()
        self.merge_id = 0        
        # Add the accelerator group to the toplevel window
        accelgroup = self.uimanager.get_accel_group()
        self.w.add_accel_group(accelgroup)

        # Create an ActionGroup
        self.actiongroup = gtk.ActionGroup('MMUIManager')

        # Create actions
        self.actiongroup.add_actions([('Quit', gtk.STOCK_QUIT, '_Quit', None,
                                  'Quit the Program', self.quit_cb),
                                 ('File', None, '_File'),
                                 ('Components', None, '_Components')])
        self.actiongroup.get_action('Quit').set_property('short-label', '_Quit')

        # Add the actiongroup to the uimanager
        self.uimanager.insert_action_group(self.actiongroup, 0)
        # Add a UI description
        self.uimanager.add_ui_from_string(self.ui)
        # Create a MenuBar
        menubar = self.uimanager.get_widget('/MenuBar')
        vbox.pack_start(menubar, False)
        # Create a Toolbar
        toolbar = self.uimanager.get_widget('/Toolbar')
        vbox.pack_start(toolbar, False)

        self.new_component_id = 0
        for component_name, component_class in self.components.items():
            self.actiongroup.add_actions([(component_name, 
                                      gtk.STOCK_NEW, 
                                      '_' + component_name, 
                                      '<Control>%s' % component_name[0],
                                      component_class.description, 
                                      self.start_component_cb)])
            self.uimanager.add_ui_from_string(self.component_ui % (component_name, component_name))

        self.notebook = NotebookWithCloseButtonOnTabs()
        self.notebook.set_scrollable(True)
        self.notebook.set_property('homogeneous', True)
        self.notebook.connect('switch-page', self.switch_page)
#        self.notebook.connect('page-added', self.on_page_added)
        vbox.pack_start(self.notebook, True, True, 0)

        self.w.add(vbox)
        self.w.show_all()
        gtk.main()
Beispiel #3
0
class MainMachine(object):
    ui = '''<ui>
    <menubar name="MenuBar">
      <menu action="File">
        <menuitem action="Quit"/>
      </menu>
      <menu action="Components">
      </menu>
    </menubar>
    <toolbar name="Toolbar">
      <placeholder name="Components">
      </placeholder>
      <separator/>
      <placeholder name="Common Actions">
      </placeholder>
      <separator/>
      <placeholder name="Additional Actions">
      </placeholder>      
      <separator/>
      <toolitem action="Quit"/>
    </toolbar>
    </ui>'''

    component_ui = '''<ui>
    <menubar name="MenuBar">
      <menu action="Components">
        <menuitem action="%s"/>
      </menu>
    </menubar>
    <toolbar name="Toolbar">
      <placeholder name="Components">
        <toolitem action="%s"/>
      </placeholder>
    </toolbar>
    </ui>'''

    common_action_ui = '''<ui>
    <menubar name="MenuBar">
      <menu action="Components">
      </menu>
    </menubar>
    <toolbar name="Toolbar">
      <placeholder name="Common Actions">
        <toolitem action="%s"/>
      </placeholder>
    </toolbar>
    </ui>'''

    def __init__(self):
        self.components = get_components()

        self.w = gtk.Window()
        self.w.connect('destroy', self.quit_cb)
        self.w.set_size_request(700, 600)

        vbox = gtk.VBox(False, 0)

        # Create a UIManager instance
        self.uimanager = gtk.UIManager()
        self.merge_id = 0
        # Add the accelerator group to the toplevel window
        accelgroup = self.uimanager.get_accel_group()
        self.w.add_accel_group(accelgroup)

        # Create an ActionGroup
        self.actiongroup = gtk.ActionGroup('MMUIManager')

        # Create actions
        self.actiongroup.add_actions([('Quit', gtk.STOCK_QUIT, '_Quit', None,
                                       'Quit the Program', self.quit_cb),
                                      ('File', None, '_File'),
                                      ('Components', None, '_Components')])
        self.actiongroup.get_action('Quit').set_property(
            'short-label', '_Quit')

        # Add the actiongroup to the uimanager
        self.uimanager.insert_action_group(self.actiongroup, 0)
        # Add a UI description
        self.uimanager.add_ui_from_string(self.ui)
        # Create a MenuBar
        menubar = self.uimanager.get_widget('/MenuBar')
        vbox.pack_start(menubar, False)
        # Create a Toolbar
        toolbar = self.uimanager.get_widget('/Toolbar')
        vbox.pack_start(toolbar, False)

        self.new_component_id = 0
        for component_name, component_class in self.components.items():
            self.actiongroup.add_actions([
                (component_name, gtk.STOCK_NEW, '_' + component_name,
                 '<Control>%s' % component_name[0],
                 component_class.description, self.start_component_cb)
            ])
            self.uimanager.add_ui_from_string(self.component_ui %
                                              (component_name, component_name))

        self.notebook = NotebookWithCloseButtonOnTabs()
        self.notebook.set_scrollable(True)
        self.notebook.set_property('homogeneous', True)
        self.notebook.connect('switch-page', self.switch_page)
        #        self.notebook.connect('page-added', self.on_page_added)
        vbox.pack_start(self.notebook, True, True, 0)

        self.w.add(vbox)
        self.w.show_all()
        gtk.main()

    def new_tab(self, component):
        child = MMMainFrame(component)
        child.show_all()
        child.searchform.advancedbox.hide()

        #self.w.set_default(child.searchform.start_button) #FIXME: doesn't work

        # TODO: change tab label according to what user types in search
        tab_label = gtk.Label(component.name)
        tab_label.show()

        nbpages = self.notebook.get_n_pages()
        self.notebook.append_page(child, tab_label)
        self.notebook.set_current_page(nbpages)

    def start_component_cb(self, action):
        component = self.components[action.get_name()]()

        self.new_component_id += 1
        component.id = self.new_component_id
        self.new_tab(component)

        if component.has_additional_actions:
            logging.debug('Loading additional actions for %s component' %
                          component.name)
            component.set_additional_actions(self.actiongroup)

        current_searchform = self.notebook.get_nth_page(
            self.notebook.get_current_page()).searchform
        self.actiongroup.add_toggle_actions([
            ('ToggleAdvancedBox%i' % component.id, gtk.STOCK_PREFERENCES,
             '_Advanced options', '<Control>a', 'Show advanced options',
             current_searchform.toggle_show_advancedbox)
        ])

#    def on_page_added(self, notebook, child, page_num):
#        pass

    def switch_page(self, notebook, page, page_num):
        active_component = notebook.get_nth_page(page_num).component
        logging.debug('Selecting page %i (%s)' %
                      (page_num, active_component.name))

        # remove any previous left addictional actions
        if self.merge_id:
            self.uimanager.remove_ui(self.merge_id)
            self.merge_id = 0

        if active_component.has_additional_actions:
            # set additional actions if present and common actions
            # FIXME: common actions should be entirely handled here and not inside each
            # component
            self.merge_id = active_component.set_uimanager_for_additional_actions(
                self.uimanager)
        else:
            # set only common actions
            self.merge_id = self.uimanager.add_ui_from_string(
                self.common_action_ui %
                ('ToggleAdvancedBox%i' % active_component.id))

    def quit_cb(self, b):
        gtk.main_quit()
Beispiel #4
0
class MainMachine(object):
    ui = '''<ui>
    <menubar name="MenuBar">
      <menu action="File">
        <menuitem action="Quit"/>
      </menu>
      <menu action="Components">
      </menu>
    </menubar>
    <toolbar name="Toolbar">
      <placeholder name="Components">
      </placeholder>
      <separator/>
      <placeholder name="Common Actions">
      </placeholder>
      <separator/>
      <placeholder name="Additional Actions">
      </placeholder>      
      <separator/>
      <toolitem action="Quit"/>
    </toolbar>
    </ui>'''
    
    component_ui = '''<ui>
    <menubar name="MenuBar">
      <menu action="Components">
        <menuitem action="%s"/>
      </menu>
    </menubar>
    <toolbar name="Toolbar">
      <placeholder name="Components">
        <toolitem action="%s"/>
      </placeholder>
    </toolbar>
    </ui>'''

    common_action_ui = '''<ui>
    <menubar name="MenuBar">
      <menu action="Components">
      </menu>
    </menubar>
    <toolbar name="Toolbar">
      <placeholder name="Common Actions">
        <toolitem action="%s"/>
      </placeholder>
    </toolbar>
    </ui>'''

    def __init__(self):
        self.components = get_components()

        self.w = gtk.Window()
        self.w.connect('destroy', self.quit_cb)
        self.w.set_size_request(700, 600)

        vbox = gtk.VBox(False, 0)

        # Create a UIManager instance
        self.uimanager = gtk.UIManager()
        self.merge_id = 0        
        # Add the accelerator group to the toplevel window
        accelgroup = self.uimanager.get_accel_group()
        self.w.add_accel_group(accelgroup)

        # Create an ActionGroup
        self.actiongroup = gtk.ActionGroup('MMUIManager')

        # Create actions
        self.actiongroup.add_actions([('Quit', gtk.STOCK_QUIT, '_Quit', None,
                                  'Quit the Program', self.quit_cb),
                                 ('File', None, '_File'),
                                 ('Components', None, '_Components')])
        self.actiongroup.get_action('Quit').set_property('short-label', '_Quit')

        # Add the actiongroup to the uimanager
        self.uimanager.insert_action_group(self.actiongroup, 0)
        # Add a UI description
        self.uimanager.add_ui_from_string(self.ui)
        # Create a MenuBar
        menubar = self.uimanager.get_widget('/MenuBar')
        vbox.pack_start(menubar, False)
        # Create a Toolbar
        toolbar = self.uimanager.get_widget('/Toolbar')
        vbox.pack_start(toolbar, False)

        self.new_component_id = 0
        for component_name, component_class in self.components.items():
            self.actiongroup.add_actions([(component_name, 
                                      gtk.STOCK_NEW, 
                                      '_' + component_name, 
                                      '<Control>%s' % component_name[0],
                                      component_class.description, 
                                      self.start_component_cb)])
            self.uimanager.add_ui_from_string(self.component_ui % (component_name, component_name))

        self.notebook = NotebookWithCloseButtonOnTabs()
        self.notebook.set_scrollable(True)
        self.notebook.set_property('homogeneous', True)
        self.notebook.connect('switch-page', self.switch_page)
#        self.notebook.connect('page-added', self.on_page_added)
        vbox.pack_start(self.notebook, True, True, 0)

        self.w.add(vbox)
        self.w.show_all()
        gtk.main()

    def new_tab(self, component):
        child = MMMainFrame(component)
        child.show_all()
        child.searchform.advancedbox.hide()

        #self.w.set_default(child.searchform.start_button) #FIXME: doesn't work
        
        # TODO: change tab label according to what user types in search
        tab_label = gtk.Label(component.name)
        tab_label.show()

        nbpages = self.notebook.get_n_pages()
        self.notebook.append_page(child, tab_label)
        self.notebook.set_current_page(nbpages)

    def start_component_cb(self, action):
        component = self.components[action.get_name()]()

        self.new_component_id += 1
        component.id = self.new_component_id
        self.new_tab(component)

        if component.has_additional_actions:
            logging.debug('Loading additional actions for %s component' % component.name)
            component.set_additional_actions(self.actiongroup)

        current_searchform = self.notebook.get_nth_page(self.notebook.get_current_page()).searchform
        self.actiongroup.add_toggle_actions([('ToggleAdvancedBox%i' % component.id, 
                                              gtk.STOCK_PREFERENCES,
                                              '_Advanced options', 
                                              '<Control>a',
                                              'Show advanced options', 
                                              current_searchform.toggle_show_advancedbox)])

#    def on_page_added(self, notebook, child, page_num):
#        pass

    def switch_page(self, notebook, page, page_num):
        active_component = notebook.get_nth_page(page_num).component
        logging.debug('Selecting page %i (%s)' % (page_num, active_component.name))

        # remove any previous left addictional actions
        if self.merge_id:
            self.uimanager.remove_ui(self.merge_id)
            self.merge_id = 0
        
        if active_component.has_additional_actions:
            # set additional actions if present and common actions
            # FIXME: common actions should be entirely handled here and not inside each
            # component
            self.merge_id = active_component.set_uimanager_for_additional_actions(self.uimanager)
        else:
            # set only common actions
            self.merge_id = self.uimanager.add_ui_from_string(self.common_action_ui % ('ToggleAdvancedBox%i' % active_component.id))

    def quit_cb(self, b):
        gtk.main_quit()