[main] store recent files in settings, add constants.py for global

constants
This commit is contained in:
Jan Grewe 2020-12-27 12:52:14 +01:00
parent dbea725e75
commit a55a34f9f0
3 changed files with 58 additions and 6 deletions

7
constants.py Normal file
View File

@ -0,0 +1,7 @@
organization = "nixio"
application = "nixview"
version = 0.1
settings_recent_files_key = "/".join([organization, application, "recent_files"])
settings_recent_file_max_count_key = "/".join([organization, application, "recent_files_max_count"])
settings_recent_file_max_count = 10

View File

@ -12,7 +12,6 @@ class Singleton(type):
class FileHandler(metaclass=Singleton): class FileHandler(metaclass=Singleton):
def __init__(self) -> None: def __init__(self) -> None:
print("Handler Init")
super().__init__() super().__init__()
self._nix_file = None self._nix_file = None
self._file_requests = [] self._file_requests = []

View File

@ -1,15 +1,19 @@
import sys import sys
import os
from typing import Hashable from typing import Hashable
from PyQt5.QtWidgets import QFileDialog, QFrame, QLabel, QListWidget, QMainWindow, QMenuBar, QStackedLayout, QToolBar, QAction, QStatusBar, QVBoxLayout, QWidget, QGridLayout, QSpacerItem, QSizePolicy from PyQt5.QtWidgets import QFileDialog, QFrame, QLabel, QListWidget, QMainWindow, QMenuBar, QStackedLayout, QToolBar, QAction, QStatusBar, QVBoxLayout, QWidget, QGridLayout, QSpacerItem, QSizePolicy
from PyQt5.QtGui import QIcon, QPixmap, QKeySequence from PyQt5.QtGui import QIcon, QPixmap, QKeySequence
from PyQt5.QtCore import Qt, QSize, QSettings from PyQt5.QtCore import Qt, QSize, QSettings
from numpy import unique
from file_handler import FileHandler from file_handler import FileHandler
import constants as cnst
class NixView(QMainWindow): class NixView(QMainWindow):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(NixView, self).__init__(*args, **kwargs) super(NixView, self).__init__(*args, **kwargs)
self.setWindowTitle("NixView") self.setWindowTitle("NixView")
self.setWindowIcon(QIcon('./icons/nixview.icns')) self.setWindowIcon(QIcon('./icons/nixview.icns'))
@ -58,16 +62,31 @@ class NixView(QMainWindow):
file_menu.addAction(self._quit_action) file_menu.addAction(self._quit_action)
self.setMenuBar(menu) self.setMenuBar(menu)
def _update_recent_files(self, filename):
settings = QSettings(cnst.organization, cnst.application)
recent_file_max_count = settings.value(cnst.settings_recent_file_max_count_key, 10, type=int)
filenames = settings.value(cnst.settings_recent_files_key, [])
new_filenames = [filename]
if len(filenames) < recent_file_max_count:
new_filenames.extend(filenames)
else:
new_filenames.extend(filenames[:-1])
new_filenames = list(unique(new_filenames))
settings.setValue(cnst.settings_recent_files_key, new_filenames)
del settings
def on_file_open(self, s): def on_file_open(self, s):
dlg = QFileDialog(self, 'Open nix data file', '', "NIX files (*.h5 *.nix)") dlg = QFileDialog(self, 'Open nix data file', '', "NIX files (*.h5 *.nix)")
dlg.setFileMode(QFileDialog.ExistingFile) dlg.setFileMode(QFileDialog.ExistingFile)
filenames = None filenames = None
if dlg.exec_(): if dlg.exec_():
filenames = dlg.selectedFiles() filenames = dlg.selectedFiles()
success, msg = self._file_handler.open("nix_test.h5") success, msg = self._file_handler.open(filenames[0])
self.statusBar().showMessage(msg, 5000) self.statusBar().showMessage(msg, 5000)
self._file_close_action.setEnabled(success) if success:
self._cw.show_file_content() self._file_close_action.setEnabled(success)
self._cw.show_file_content()
self._update_recent_files(filenames[0])
def on_file_close(self, s): def on_file_close(self, s):
self._file_handler.close() self._file_handler.close()
@ -136,7 +155,34 @@ class SplashScreen(QWidget):
frame = QFrame() frame = QFrame()
l = QVBoxLayout() l = QVBoxLayout()
l.addWidget(QLabel("Recently opened files:")) l.addWidget(QLabel("Recently opened files:"))
l.addWidget(QListWidget())
self._file_list = QListWidget(self)
self._file_list.itemClicked.connect(self._on_file_clicked)
self._file_list.itemDoubleClicked.connect(self._on_file_clicked)
l.addWidget(self._file_list)
frame.setLayout(l) frame.setLayout(l)
layout.addWidget(frame, 3, 1) layout.addWidget(frame, 3, 1)
self._file_map = {}
self._read_recent_files()
def _create_short_filename(original, max_len=40):
short = original
parts = original.split(os.sep)
print(parts)
return short
def _read_recent_files(self):
settings = QSettings(cnst.organization, cnst.application)
filenames = settings.value(cnst.settings_recent_files_key, [])
del settings
for f in filenames:
shortname = _create_short_filename(f, max_len=40)
self._file_map[f] =shortname
self._file_list.addItem(self._file_map[f])
def _on_file_clicked(self, s):
print(s)