def other_language(language):
     change_language(language)
     assert(get_current_language() == language)
     self.app.update_language()
    def construct_menu_bar(self):
        bar = QMenuBar()
        
        # Project menu:
        self.projectmenuactions = dict()
        projectmenu = QMenu(l("projwin_menu_project"))
        self.projectmenuactions["new"] = \
            projectmenu.addAction(QIcon.fromTheme("document-new"),
            l("projwin_menu_project_new"), self.new_project_window)
        self.projectmenuactions["open"] = \
            projectmenu.addAction(QIcon.fromTheme("document-open"),
            l("projwin_menu_project_open"), self.open_project_window)
        projectmenu.addSeparator()
        self.projectmenuactions["save"] = \
            projectmenu.addAction(QIcon.fromTheme("document-save"),
            l("projwin_menu_project_saveall"))
        self.projectmenuactions["save"].setShortcut(
            QKeySequence.Save)
        self.projectmenuactions["saveas"] = \
            projectmenu.addAction(
            l("projwin_menu_project_saveas"))
        projectmenu.addSeparator()
        if self.project != None:
            self.projectmenuactions["close"] = \
                projectmenu.addAction(
                l("projwin_menu_project_close"), self.close_window)
        else:
            self.projectmenuactions["close"] = \
                projectmenu.addAction(
                l("projwin_menu_project_closewindow"), self.close_window)
        self.projectmenuactions["quit"] = \
            projectmenu.addAction(QIcon.fromTheme("application-exit"),
            l("projwin_menu_project_quit"), self.app.close_all)
        
        # File menu:
        filemenu = QMenu(l("projwin_menu_file"))
        self.filemenu = filemenu
        self.filemenuactions = dict()
        
        self.filemenuactions["new"] = \
            filemenu.addAction(QIcon.fromTheme("document-new"),
                l("projwin_menu_file_new"))
        self.filemenuactions["add"] = \
            filemenu.addAction(l("projwin_menu_file_add"))
        self.filemenuactions["addfolder"] = \
            filemenu.addAction(QIcon.fromTheme("folder-new"),
            l("projwin_menu_file_addfolder"))
        filemenu.addSeparator()
        self.filemenuactions["save"] = \
            filemenu.addAction(QIcon.fromTheme("document-save"),
                l("projwin_menu_file_save"))
        self.filemenuactions["rename"] = \
            filemenu.addAction(l("projwin_menu_file_rename"))
        filemenu.addSeparator()
        self.filemenuactions["remove"] = \
            filemenu.addAction(QIcon.fromTheme("edit-delete"),
            l("projwin_menu_file_remove"))
        
        # Edit menu:
        editmenu = QMenu(l("projwin_menu_edit"))
        self.editmenu = editmenu
        self.editmenu.aboutToShow.connect(self.update_menu)
        self.editmenuactions = dict()

        self.editmenuactions["undo"] = \
            editmenu.addAction(QIcon.fromTheme("edit-undo"),
            "undo_local", self.do_edit_undo_local)
        self.editmenuactions["undo"].setShortcut(
            QKeySequence.Undo)
        self.editmenuactions["redo"] = \
            editmenu.addAction(QIcon.fromTheme("edit-redo"),
            "redo_local", self.do_edit_redo_local)
        self.editmenuactions["redo"].setShortcut(
            QKeySequence.Redo)
        editmenu.addSeparator()
        self.editmenuactions["undo_global"] = \
            editmenu.addAction(QIcon.fromTheme("edit-undo"),
            "undo_global")
        self.editmenuactions["redo_global"] = \
            editmenu.addAction(QIcon.fromTheme("edit-redo"),
            "redo_global")
        self.update_undo()
        editmenu.addSeparator()
        self.editmenuactions["cut"] = \
            editmenu.addAction(QIcon.fromTheme("edit-cut"),
            l("projwin_menu_edit_cut"), self.do_edit_cut)
        self.editmenuactions["cut"].setShortcut(
            QKeySequence.Cut)
        self.editmenuactions["copy"] = \
            editmenu.addAction(QIcon.fromTheme("edit-copy"),
            l("projwin_menu_edit_copy"), self.do_edit_copy)
        self.editmenuactions["copy"].setShortcut(
            QKeySequence.Copy)
        self.editmenuactions["paste"] = \
            editmenu.addAction(QIcon.fromTheme("edit-paste"),
            l("projwin_menu_edit_paste"), self.do_edit_paste)
        self.editmenuactions["paste"].setShortcut(
            QKeySequence.Paste)
        editmenu.addSeparator()
        self.editmenuactions["select_all"] = \
            editmenu.addAction(
            l("projwin_menu_edit_select_all"), self.do_edit_select_all)
        self.editmenuactions["select_all"].setShortcut(
                    QKeySequence.SelectAll)
        # Run menu
        runmenu = QMenu(l("projwin_menu_run"))
        self.runmenu = runmenu
        self.runmenuactions = dict()
        
        self.runmenuactions["run_in_editor"] = \
            runmenu.addAction(QIcon.fromTheme("media-playback-start"),
            l("projwin_menu_run_in_editor"))
        runmenu.addSeparator()
        self.runmenuactions["run_in_editor_from_start"] = \
            runmenu.addAction(
            l("projwin_menu_run_in_editor_from_start"))
        self.runmenuactions["run_external"] = \
            runmenu.addAction(QIcon.fromTheme("go-jump"),
            l("projwin_menu_run_external"))
        runmenu.addSeparator()
        self.runmenuactions["run_pause"] = \
            runmenu.addAction(QIcon.fromTheme("media-playback-pause"),
            l("projwin_menu_run_pause"))
        runmenu.addSeparator()
        self.runmenuactions["run_stop"] = \
            runmenu.addAction(QIcon.fromTheme("process-stop"),
            l("projwin_menu_run_stop"))

        # Settings > Language menu
        languagesmenu = QMenu(l("projwin_menu_settings_language"))
        languagesmenu.setIcon(QIcon.fromTheme("preferences-desktop-locale"))
        def other_language(language):
            change_language(language)
            assert(get_current_language() == language)
            self.app.update_language()
        for (id, name) in list_languages():
            a = languagesmenu.addAction(
                name,
                lambda id=id: other_language(id)
                )
            if id == get_current_language():
                a.setCheckable(True)
                a.setChecked(True)
        # Settings menu
        self.settingsmenuactions = dict()
        settingsmenu = QMenu(l("projwin_menu_settings"))
        settingsmenu.addMenu(languagesmenu)
        
        # Window menu
        self.windowmenuactions = dict()
        windowmenu = QMenu(l("projwin_menu_window"))
        self.windowmenuactions["new"] = \
            windowmenu.addAction(QIcon.fromTheme("window-new"),
            l("projwin_menu_window_new"),
            self.new_window)
        windowmenu.addSeparator()
        self.windowmenuactions["dock_filelist"] = \
            windowmenu.addAction(
            l("projwin_menu_window_dock_filelist"),
            lambda: self.contentwidget.toggle_dock_visible("filelist")) 
        self.windowmenuactions["dock_filelist"].setCheckable(True)
        windowmenu.addSeparator()
        self.windowmenuactions["close"] = \
            windowmenu.addAction(l("projwin_menu_window_close"),
            self.close_window)
        
        # About menu
        self.aboutmenuactions = dict()
        aboutmenu = QMenu(l("projwin_menu_about"))
            
        self.aboutmenuactions["new"] = \
            aboutmenu.addAction(QIcon.fromTheme("help-about"),
            l("projwin_menu_about_about"),
            lambda pwin=self: pwin.open_about_dlg())
            
        bar.addMenu(projectmenu)
        bar.addMenu(self.filemenu)
        bar.addMenu(self.editmenu)
        bar.addMenu(self.runmenu)
        bar.addMenu(settingsmenu)
        bar.addMenu(windowmenu)
        bar.addMenu(aboutmenu)
        return bar