-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCbFileSaveWidget.py
More file actions
113 lines (99 loc) · 4.06 KB
/
CbFileSaveWidget.py
File metadata and controls
113 lines (99 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QMessageBox
from Ui_CbFileSaveWidget import Ui_CbFileSaveWidget
from VtxEngineParams import FileSaveConfig
from typing import Tuple
class CbFileSaveWidget(QWidget, Ui_CbFileSaveWidget):
def __init__(self, saveDataType: str, parent: QWidget=None, filename: str=''):
super().__init__(parent)
self.setupUi(self)
self._filename = filename
self._extension = ''
self._saveDataType = saveDataType
# text
self._cb.setText("Save {0:s} data".format(self._saveDataType))
# callbacks
self._cb.toggled.connect(self.__cbToggled)
self._pb.clicked.connect(self.__selectFileClicked)
# enable/disable
self.__enableDisable()
def getFileSaveConfig(self):
cfg = FileSaveConfig(self._saveDataType)
cfg.save = self._cb.isChecked()
cfg.filename = self._filename
cfg.extension = self._extension
return cfg
def __enableDisable(self):
if self._cb.isChecked():
if self._filename:
self._pb.setEnabled(True)
self._label.setText(self._filename)
else:
self._cb.setChecked(False)
self._label.setText("not saving data")
else:
self._pb.setEnabled(False)
self._label.setText("not saving data")
def __cbToggled(self, bChecked):
if bChecked:
# See if filename selected. If not, open dialog.
if not self._filename:
filename, extension = self.__getFileNameExt(self._filename)
if filename:
self._filename = filename
self._extension = extension
self.__enableDisable()
def __getFileNameExt(self, filename: str='') -> Tuple[str,str]:
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
selectedFileName = ''
selectedFileExtension = ''
bTryAgain = True
while bTryAgain:
fileName, _ = QFileDialog.getSaveFileName(self,"Select filename for {0:s}".format(self._saveDataType),filename,"MATLAB (*.mat);;HD5 (*.h5);;Numpy (*.npy)", options=options)
if fileName:
d = os.path.dirname(fileName)
b = os.path.basename(fileName)
n,ext = os.path.splitext(b)
if ext:
match ext.lower():
case '.mat':
selectedFileExtension = 'mat'
bTryAgain = False
case '.h5':
selectedFileExtension = 'h5'
bTryAgain = False
case '.npy':
selectedFileExtension = 'npy'
bTryAgain = False
else:
bTryAgain = True
else:
bTryAgain = False
if bTryAgain:
QMessageBox.information(self, "Oops", "Cannot determine file type. Please choose a file with extension \".mat\", \".h5\", or \".npy\".")
else:
selectedFileName = fileName
return selectedFileName, selectedFileExtension
def __selectFileClicked(self):
filename, extension = self.__getFileNameExt(self._filename)
if filename:
self._filename = filename
self._extension = extension
self.__enableDisable()
class CbAscansFileSaveWidget(CbFileSaveWidget):
def __init__(self, parent: QWidget=None, filename: str=''):
super().__init__('ascans', parent, filename)
class CbSpectraFileSaveWidget(CbFileSaveWidget):
def __init__(self, parent: QWidget=None, filename: str=''):
super().__init__('spectra', parent, filename)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
w = CbFileSaveWidget()
ui = Ui_CbFileSaveWidget()
w.show()
app.exec()
print("w._filename {0:s}\nw._extension {1:s}".format(w._filename, w._extension))
sys.exit()