def _construct_logwindow(self):
        def cb_logwindow_hideshow(logwindow):
            action = self.uimanager.get_action("/MainMenu/ViewMenu/ToggleLogwindow")
            action.set_active(logwindow.get_property("visible"))

        # logwindow is hidden by default. See _construct_uimanager if
        # you want to change this default
        logwindow = LogWindow()
        logwindow.set_transient_for(self)
        logwindow.set_destroy_with_parent(True)
        logwindow.hide()

        # logwindow specific
        def cb_toggle_logwindow(action, logwindow):
            if action.get_active() is True:
                logwindow.show()
            else:
                logwindow.hide()

        t = gtk.ToggleAction("ToggleLogwindow", "Show debug window", None, None)
        t.connect("toggled", cb_toggle_logwindow, logwindow)
        uihelper.get_action_group(self.uimanager, "Application").add_action(t)

        logwindow.connect("hide", cb_logwindow_hideshow)
        logwindow.connect("show", cb_logwindow_hideshow)

        return logwindow
    def _construct_logwindow(self):

        def cb_logwindow_hideshow(window, action):
            action.set_active(window.get_property('visible'))

        # logwindow is hidden by default. See _construct_uimanager if
        # you want to change this default
        logwindow = LogWindow()
        logwindow.set_transient_for(self)
        logwindow.set_destroy_with_parent(True)
        logwindow.hide()

        # logwindow specific
        def cb_toggle_logwindow(action, logwindow):
            if action.get_active() is True: logwindow.show()
            else: logwindow.hide()

        t = gtk.ToggleAction('ToggleLogwindow', 'Show debug window', None, None)
        t.connect("toggled", cb_toggle_logwindow, logwindow)
        uihelper.get_action_group(self.uimanager, 'Application').add_action(t)

        logwindow.connect('hide', cb_logwindow_hideshow, t)
        logwindow.connect('show', cb_logwindow_hideshow, t)
        
        return logwindow
    def _construct_toolwindow(self):

        window = tools.ToolWindow(self.app, None)
        window.set_transient_for(self)
        window.set_destroy_with_parent(True)
        window.hide()

        def cb_toggle_window(action, window):
            if action.get_active() is True: window.show()
            else: window.hide()        
        t = gtk.ToggleAction('ToggleToolWindow', 'Show tools window', None, None)
        t.connect("toggled", cb_toggle_window, window)
        uihelper.get_action_group(self.uimanager, 'Application').add_action(t)

        def cb_window_hideshow(window):
            action = self.uimanager.get_action('/MainMenu/ViewMenu/ToggleToolWindow')
            action.set_active(window.get_property('visible'))
        window.connect('hide', cb_window_hideshow)
        window.connect('show', cb_window_hideshow)

        def on_notify_project(sender, project, toolwin):
            print "==> project = ", project
            print "==> toolwin = ", toolwin
            toolwin.set_project(project)
        Signals.connect(self.app, 'notify::project', on_notify_project, window)
        
        return window
    def _refresh_windowlist(self):

        # We are going to recreate the actiongroup 'WindowList'.
        # To avoid adding this actiongroup multiple times, we need
        # to remove it first.
        if self._windowlist_merge_id is not None:
            ag = uihelper.get_action_group(self.uimanager, "WindowList")
            self.uimanager.remove_action_group(ag)
            self.uimanager.remove_ui(self._windowlist_merge_id)

        # create action groups list from windowlist
        ag = gtk.ActionGroup("WindowList")
        for window in self._windows:
            title = window.get_title() or "noname"
            logger.debug("Window title is %s" % title)
            action = gtk.Action(id(window), title, None, None)
            action.connect("activate", self._cb_subwindow_present, window)
            ag.add_action(action)
        self.uimanager.insert_action_group(ag, 0)

        # create ui description from available actions
        ui = "<ui><menubar name='MainMenu'><menu action='ViewMenu'>\n"
        for window in self._windows:
            ui += "<menuitem action='%s'/>\n" % id(window)
        ui += "</menu></menubar></ui>"

        self._windowlist_merge_id = self.uimanager.add_ui_from_string(ui)
    def _refresh_windowlist(self):      

        # We are going to recreate the actiongroup 'WindowList'.
        # To avoid adding this actiongroup multiple times, we need
        # to remove it first.
        if self._windowlist_merge_id is not None:
            ag = uihelper.get_action_group(self.uimanager, "DynamicWindowList")
            self.uimanager.remove_action_group(ag)
            self.uimanager.remove_ui(self._windowlist_merge_id)
            
        # Create action groups list from windowlist.
        # The corresponding ui string is created as well.
        ui = ""
        ag =  gtk.ActionGroup('DynamicWindowList')
        for window in self._windows:            
            title = window.get_title() or "noname"
            logger.debug("Window title is %s" % title)
            action = gtk.Action(id(window), title, None, None)
            action.connect('activate', self._cb_subwindow_present, window)
            ag.add_action(action)
            ui+="<menuitem action='%s'/>\n" % id(window)
        self.uimanager.insert_action_group(ag,0)

        # Wrap UI description.
        ui="""
        <ui>
          <menubar name='MainMenu'>
            <menu action='ViewMenu'>
            %s
            </menu>
          </menubar>
        </ui>
        """ % ui
                       
        self._windowlist_merge_id = self.uimanager.add_ui_from_string(ui)                      
    def _construct_toolbox(self):

        window = tools.Toolbox(self.app, None)
        window.set_transient_for(self)
        window.set_destroy_with_parent(True)
        window.hide()

        def cb_toggle_window(action, window):
            if action.get_active() is True: window.show()
            else: window.hide()        
        t = gtk.ToggleAction('ToggleToolbox', 'Show tools window', None, None)
        t.connect("toggled", cb_toggle_window, window)
        uihelper.get_action_group(self.uimanager, 'Application').add_action(t)

        def on_window_visibility_toggled(window, action):
            action.set_active(window.get_property('visible'))
        window.connect('hide', on_window_visibility_toggled, t)
        window.connect('show', on_window_visibility_toggled, t)

        def on_notify_project(sender, project, toolwin):
            toolwin.set_project(project)
        self.app.sig_connect('notify::project', on_notify_project, window)
        
        return window
    def _refresh_recentfiles(self):
       
        # remove last recent files
        if self._recentfiles_merge_id is not None:
            ag = uihelper.get_action_group(self.uimanager, "DynamicRecentFiles")
            self.uimanager.remove_action_group(ag)
            self.uimanager.remove_ui(self._recentfiles_merge_id)

        # Create action group list from list of recent files.
        # The corresponding ui string is created as well.
        ui = ""
        n = 0
        ag = gtk.ActionGroup('DynamicRecentFiles')
        for file in self.app.recent_files:
            key = 'recent_files_%d' % n
            action = gtk.Action(key, '%d: %s' % (n, os.path.basename(file)), None, None)
            action.connect('activate',
                           (lambda sender, filename: self.app.load_project(filename)),
                           file)
            ag.add_action(action)
            
            ui+="<menuitem action='%s'/>\n" % key
            n += 1
            
        self.uimanager.insert_action_group(ag, 0)

        # Wrap UI description.
        ui="""
        <ui>
          <menubar name='MainMenu'>
            <menu action='FileMenu'>
              <menu action='RecentFilesMenu'>
                <placeholder name='RecentFilesList'>
                  %s
                </placeholder>
               </menu>
             </menu>
          </menubar>
        </ui>
        """ % ui
            
        self._recentfiles_merge_id = self.uimanager.add_ui_from_string(ui)
    def __init__(self, app, project, plot):

        gtk.Window.__init__(self)
        self.set_default_size(640,480)
        #self.set_transient_for(app.window)
        self.is_fullscreen = False
        self.app = app
        self.disabled_groups = list()
        
        self.mpl_widget = MatplotlibWidget(app, project, plot)
        
        # set up ui manager
        self.uimanager = gtk.UIManager()        

        # add undo/redo ui from application window
        ag = uihelper.get_action_group(self.app.window.uimanager, 'UndoRedo')
        self.uimanager.insert_action_group(ag,0)
        
        # add ui information from window
        for ag in uihelper.construct_actiongroups(self.actions_dict, map=self):
            self.uimanager.insert_action_group(ag,0)
        self.uimanager.add_ui_from_string(self.uistring)

        # add ui information from subwidget
        for ag in self.mpl_widget.get_actiongroups():
            self.uimanager.insert_action_group(ag,0)
        self.uimanager.add_ui_from_string(self.mpl_widget.get_uistring())

        # and set up accelerators for all of the above
        accel_group = self.uimanager.get_accel_group()
        self.add_accel_group(accel_group)

        # connect the ESC-key to the mpl widget's cancel button 
        key, modifier = gtk.accelerator_parse('Escape')
        self.mpl_widget.btn_cancel.add_accelerator("activate", accel_group, key, modifier, gtk.ACCEL_VISIBLE)
        
        # construct menubar 
        menubar = self.uimanager.get_widget('/MainMenu')
        menubar.show()

        # construct toolbar
        toolbar = self.uimanager.get_widget('/MainToolbar')
        toolbar.set_style(gtk.TOOLBAR_ICONS)
        toolbar.show()        

        # put everything in a vertical box
        vbox = gtk.VBox()
        vbox.pack_start(menubar, False, True)
        vbox.pack_start(toolbar, False, True)
        vbox.pack_start(self.mpl_widget, True, True)
        self.add(vbox)

        #self.set_title( "Plot: %s" % plot.key )
        
        self.mpl_widget.show()
        vbox.show()

        self.mpl_widget.connect("edit-mode-started", self.disable_interaction)
        self.mpl_widget.connect("edit-mode-ended", self.enable_interaction)
                                      
        self.connect("destroy", (lambda sender: self.destroy()))
        Signals.connect(self.mpl_widget, "closed", (lambda sender: self.destroy()))

        # TESTING
        self.connect("focus-in-event", (lambda a,b: app.set_current_plot(self.mpl_widget.plot)))
    def __init__(self, app, project, plot):

        gtk.Window.__init__(self)
        self.set_default_size(640,480)

        self.is_fullscreen = False
        self.app = app
        self.disabled_groups = list()
        
        self.mpl_widget = MatplotlibWidget(app, project, plot)
        
        # set up ui manager
        self.uimanager = gtk.UIManager()        
       
        # add undo/redo ui from application window
        ag = uihelper.get_action_group(self.app.window.uimanager, 'UndoRedo')
        self.uimanager.insert_action_group(ag,0)
        
        # add action group from window
        for ag in uihelper.construct_actiongroups(self.actions_dict, map=self):
            self.uimanager.insert_action_group(ag,0)

        # add action group for toolbox
        toolbox = self.app.window.toolbox
        def on_toggled(action, window):
            if action.get_active() is True:
                window.show()
            else:
                window.hide()
        t = gtk.ToggleAction('ToggleToolbox', 'Toolbox', 'ToggleToolbox visibility', gtk.STOCK_PROPERTIES)
        t.connect("toggled", on_toggled, toolbox)
        uihelper.get_action_group(self.uimanager, 'ViewMenu').add_action(t)
        t.set_active(toolbox.get_property('visible'))

        # ...and now that all action groups are created,
        # we can create the actual ui for the window 
        self.uimanager.add_ui_from_string(self.uistring)

        # add ui information from subwidget
        for ag in self.mpl_widget.get_actiongroups():
            self.uimanager.insert_action_group(ag,0)
        self.uimanager.add_ui_from_string(self.mpl_widget.get_uistring())

        # and set up accelerators for all of the above
        accel_group = self.uimanager.get_accel_group()
        self.add_accel_group(accel_group)

        # connect the ESC-key to the mpl widget's cancel button 
        key, modifier = gtk.accelerator_parse('Escape')
        self.mpl_widget.btn_cancel.add_accelerator("activate", accel_group, key, modifier, gtk.ACCEL_VISIBLE)
        
        # construct menubar 
        menubar = self.uimanager.get_widget('/MainMenu')
        menubar.show()

        # construct toolbar
        toolbar = self.uimanager.get_widget('/MainToolbar')
        toolbar.set_style(gtk.TOOLBAR_ICONS)
        toolbar.show()        

        # put everything in a vertical box
        vbox = gtk.VBox()
        vbox.pack_start(menubar, False, True)
        vbox.pack_start(toolbar, False, True)
        vbox.pack_start(self.mpl_widget, True, True)
        self.add(vbox)

        #self.set_title( "Plot: %s" % plot.key )
        
        self.mpl_widget.show()
        vbox.show()

        self.mpl_widget.connect("edit-mode-started", self.disable_interaction)
        self.mpl_widget.connect("edit-mode-ended", self.enable_interaction)
                                      
        self.connect("destroy", (lambda sender: self.destroy()))
        Signals.connect(self.mpl_widget, "closed", (lambda sender: self.destroy()))