[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):
def __init__(self) -> None:
print("Handler Init")
super().__init__()
self._nix_file = None
self._file_requests = []

View File

@ -1,15 +1,19 @@
import sys
import os
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.QtGui import QIcon, QPixmap, QKeySequence
from PyQt5.QtCore import Qt, QSize, QSettings
from numpy import unique
from file_handler import FileHandler
import constants as cnst
class NixView(QMainWindow):
def __init__(self, *args, **kwargs):
super(NixView, self).__init__(*args, **kwargs)
self.setWindowTitle("NixView")
self.setWindowIcon(QIcon('./icons/nixview.icns'))
@ -58,16 +62,31 @@ class NixView(QMainWindow):
file_menu.addAction(self._quit_action)
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):
dlg = QFileDialog(self, 'Open nix data file', '', "NIX files (*.h5 *.nix)")
dlg.setFileMode(QFileDialog.ExistingFile)
filenames = None
if dlg.exec_():
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._file_close_action.setEnabled(success)
self._cw.show_file_content()
if success:
self._file_close_action.setEnabled(success)
self._cw.show_file_content()
self._update_recent_files(filenames[0])
def on_file_close(self, s):
self._file_handler.close()
@ -136,7 +155,34 @@ class SplashScreen(QWidget):
frame = QFrame()
l = QVBoxLayout()
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)
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)