recent file menu
This commit is contained in:
43
main.py
43
main.py
@@ -58,47 +58,68 @@ class MainWindow(QMainWindow):
|
|||||||
return menu_bar
|
return menu_bar
|
||||||
|
|
||||||
def file_menu(self) -> QMenu:
|
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 = QAction(self.tr("&Open..."), self)
|
||||||
open_file.triggered.connect(self._open_file)
|
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)
|
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.addAction(open_file)
|
||||||
|
file_menu.addMenu(self._menu_recent_files)
|
||||||
file_menu.addAction(close_action)
|
file_menu.addAction(close_action)
|
||||||
return file_menu
|
return file_menu
|
||||||
|
|
||||||
def help_menu(self) -> QMenu:
|
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)
|
about_action.triggered.connect(self._open_about_dialog)
|
||||||
help_menu.addAction(about_action)
|
help_menu.addAction(about_action)
|
||||||
|
|
||||||
return help_menu
|
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):
|
def _open_about_dialog(self):
|
||||||
dialog = AboutDialog()
|
dialog = AboutDialog()
|
||||||
dialog.exec()
|
dialog.exec()
|
||||||
|
|
||||||
def _open_file(self) -> None:
|
def _open_file_dialog(self) -> None:
|
||||||
dialog = QFileDialog(self)
|
dialog = QFileDialog(self)
|
||||||
(selected_file, _filter) = dialog.getOpenFileName(caption=self.tr("Open File"))
|
(selected_file, _filter) = dialog.getOpenFileName(caption=self.tr("Open File"))
|
||||||
self.tabs.create_tab(selected_file)
|
self.tabs.create_tab(selected_file)
|
||||||
self._remember_recent_file(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='')
|
recent_files = self.settings.session.get('general', 'recent_files', fallback='')
|
||||||
files = recent_files.split(os.pathsep)
|
files = recent_files.split(os.pathsep)
|
||||||
if file in files:
|
|
||||||
files.remove(file)
|
|
||||||
if "" in files:
|
if "" in files:
|
||||||
files.remove("")
|
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)
|
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.settings.set_session('general', 'recent_files', recent_files)
|
||||||
|
self._update_recent_files_menu()
|
||||||
|
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
self.destruct()
|
self.destruct()
|
||||||
|
|||||||
Reference in New Issue
Block a user