[main] store recent files in settings, add constants.py for global
constants
This commit is contained in:
parent
dbea725e75
commit
a55a34f9f0
7
constants.py
Normal file
7
constants.py
Normal 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
|
@ -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 = []
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user