crude updater added; write_state uses plain text, not pickle; disallow invalid characters; T246

This commit is contained in:
Dominik Demuth
2023-01-05 15:27:33 +01:00
parent 2ed390ccae
commit 04eb83a19d
11 changed files with 273 additions and 131 deletions

View File

@ -8,15 +8,18 @@ from ..Qt import QtWidgets, QtCore
class FileDialog(QtWidgets.QFileDialog):
last_path = None
def __init__(self, directory=None, caption=None, filters='', parent=None):
def __init__(self, directory=None, caption=None, filter='', parent=None):
super().__init__(parent=parent)
self.setOption(QtWidgets.QFileDialog.DontUseNativeDialog, True)
self.setWindowTitle(caption)
if directory is not None:
if directory:
self.setDirectory(str(directory))
self.setNameFilters(filters.split(';;'))
elif self.last_path is not None:
self.setDirectory(str(FileDialog.last_path))
self.setNameFilters(filter.split(';;'))
file_tree = self.findChild(QtWidgets.QTreeView, 'treeView')
file_tree.setSortingEnabled(True)
@ -35,13 +38,30 @@ class FileDialog(QtWidgets.QFileDialog):
def save_file(self) -> pathlib.Path | None:
outfile = self.selectedFiles()
if outfile:
return pathlib.Path(outfile[0])
if self.is_valid(outfile[0]):
return pathlib.Path(outfile[0])
else:
_ = QtWidgets.QMessageBox.warning(self, 'Save file',
'Filename contains one or more invalid character: / * < > \\ | : "')
return
@staticmethod
def is_valid(filename: str):
bad_character = r'/*<>\|:"'
for c in bad_character:
if c in filename:
return False
return True
def close(self):
FileDialog.last_path = self.directory()
super().close()
class OpenFileDialog(FileDialog):
def __init__(self, directory=None, caption=None, filters='', parent=None):
super().__init__(directory=directory, caption=caption, filters=filters, parent=parent)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.setFileMode(QtWidgets.QFileDialog.ExistingFiles)
@ -81,8 +101,8 @@ class OpenFileDialog(FileDialog):
class SaveDirectoryDialog(FileDialog):
def __init__(self, directory=None, filters='', parent=None):
super().__init__(directory=directory, filters=filters, parent=parent)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.setOption(QtWidgets.QFileDialog.DontConfirmOverwrite, False)
self.setAcceptMode(QtWidgets.QFileDialog.AcceptSave)
@ -123,4 +143,3 @@ class SaveDirectoryDialog(FileDialog):
self.setWindowTitle('Save')
self.setNameFilters(['All files (*.*)', 'Session file (*.nmr)', 'Text file (*.dat)',
'HDF file (*.h5)', 'Grace files (*.agr)'])