diff --git a/main.py b/main.py index 00d6fc0..e2a615b 100644 --- a/main.py +++ b/main.py @@ -58,47 +58,68 @@ class MainWindow(QMainWindow): return menu_bar def file_menu(self) -> QMenu: - file_menu = QMenu(self.tr("File", "name of the file menu"), self) + file_menu = QMenu(self.tr("&File", "name of the file menu"), self) - open_file = QAction(self.tr("Open..."), self) - open_file.triggered.connect(self._open_file) + open_file = QAction(self.tr("&Open..."), self) + open_file.triggered.connect(self._open_file_dialog) - close_action = QAction(self.tr("Close", "menu item to close the application"), self) + close_action = QAction(self.tr("E&xit", "menu item to close the application"), self) close_action.triggered.connect(self.destruct) + self._menu_recent_files = QMenu(self.tr("Open &Recent"), self) + self._update_recent_files_menu() + file_menu.addAction(open_file) + file_menu.addMenu(self._menu_recent_files) file_menu.addAction(close_action) return file_menu def help_menu(self) -> QMenu: - help_menu = QMenu(self.tr("Help", "name of the help menu"), self) + help_menu = QMenu(self.tr("&Help", "name of the help menu"), self) - about_action = QAction(self.tr("About"), self) + about_action = QAction(self.tr("&About"), self) about_action.triggered.connect(self._open_about_dialog) help_menu.addAction(about_action) return help_menu + def _update_recent_files_menu(self): + self._menu_recent_files.clear() + files = self._get_recent_files() + for file in files: + action = QAction(os.path.basename(file), self) + action.triggered.connect(lambda x, f=file: self._open_file(f)) + self._menu_recent_files.addAction(action) + def _open_about_dialog(self): dialog = AboutDialog() dialog.exec() - def _open_file(self) -> None: + def _open_file_dialog(self) -> None: dialog = QFileDialog(self) (selected_file, _filter) = dialog.getOpenFileName(caption=self.tr("Open File")) self.tabs.create_tab(selected_file) self._remember_recent_file(selected_file) - def _remember_recent_file(self, file: str): + def _open_file(self, file: str) -> None: + self.tabs.create_tab(file) + self._remember_recent_file(file) + + def _get_recent_files(self) -> [str]: recent_files = self.settings.session.get('general', 'recent_files', fallback='') files = recent_files.split(os.pathsep) - if file in files: - files.remove(file) if "" in files: files.remove("") + return files + + def _remember_recent_file(self, file: str): + files = self._get_recent_files() + if file in files: + files.remove(file) files.insert(0, file) - recent_files = os.pathsep.join(files[:5]) + recent_files = os.pathsep.join(files[:10]) self.settings.set_session('general', 'recent_files', recent_files) + self._update_recent_files_menu() def closeEvent(self, event): self.destruct()