-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmainGui.py
149 lines (115 loc) · 6.58 KB
/
mainGui.py
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
from PySide6.QtGui import QColor
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QFileDialog, QMainWindow, QApplication
from gui.main_remaster_ui import Ui_MainWindow
from gui.DockWidget import *
from models import TrackPointsModel
from modules import MarkingDockWidget, ProcessingDockWidget
from loaders import TCXLoader
from internalWidgets import QtSliderFilterWidgetPlugin
from gui.StatusBar import StatusBarGroupBox
from StatusMessage import StatusMessage
from abstracts import AbstractNotificationWidget
from config import *
from delegates import *
import gpstracker_rc
gpstracker_rc.qInitResources()
class mainGUI(QMainWindow, Ui_MainWindow):
fileName = ''
tcx = None
def __init__(self, app:QApplication):
super().__init__()
self.setupUi(self)
self.app = app
self.actionSave.triggered.connect(self._onSaveFile)
self.actionOpen.triggered.connect(self._onOpenFile)
self.actionExit.triggered.connect(self._onExit)
self.actionClear.triggered.connect(self._onClear)
self.model = TrackPointsModel(palette=app.palette())
self.tableView.setModel(self.model)
self._settingsTable()
self._applyDelegates()
# adding statusBar ----------------------------------------
self.statusInfoBar = StatusBarGroupBox(parent=self.statusbar)
self.statusbar.addPermanentWidget(self.statusInfoBar, 1)
# adding fileLoader ---------------------------------------
self.tcxLoader = TCXLoader()
self.tcxLoader.trackPointsChanged.connect(self.model.loadData)
# adding slider -------------------------------------------
self.trimmerSlider = QtSliderFilterWidgetPlugin(self, self.model)
self.sliderLayout.addWidget(self.trimmerSlider)
# adding docks---------------------------------------------
self.mapWindow = MapDockWidget(self, self.model, self.tableView.selectionModel())
self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.mapWindow)
self.dockStatistics = StatisticsDockWidget(self, self.model)
self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.dockStatistics)
self.dockFileInfo = FileInfoDockWidget(self)
self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.dockFileInfo)
self.tcxLoader.fileDataChanged.connect(self.dockFileInfo.loadInfo)
self.dockFilter = FilterDockWidget(self, self.model)
self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.dockFilter)
self.dockProcessing = ProcessingDockWidget(self, self.model)
self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.dockProcessing)
self.dockMarking = MarkingDockWidget(self, self.model)
self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.dockMarking)
self.tabifyDockWidget(self.dockFileInfo, self.dockFilter)
self.tabifyDockWidget(self.dockFileInfo, self.dockProcessing)
self.tabifyDockWidget(self.dockFileInfo, self.dockMarking)
self.tabifyDockWidget(self.dockFileInfo, self.dockStatistics)
# connect signals -----------------------------------------
self.model.clearData()
self._connectSignalsToStatusBar()
def _onSaveFile(self):
self.statusInfoBar.updateMessage.emit(StatusMessage('Saving file...', QColor('green'), 10000))
# docks = [i for i in self.children() if isinstance(i, QDockWidget)][:]
# Config.setValueG(ConfigGroup.MainWindow, ConfigAttribute.State1, self.saveState())
# self.saveState()?
def _connectSignalsToStatusBar(self):
self.model.mainSeriesLengthChanged.connect(self.statusInfoBar.updateTackLen)
self.model.trimRangeChanged.connect(self.statusInfoBar.updateTrimmerLen)
self.model.statusMessage.connect(self.statusInfoBar.updateMessage)
self.model.workingProgress.connect(self.statusInfoBar.updateProgress)
self.model.mainSeriesChanged.connect(self.dockStatistics.calculateStatistics)
self.model.modelReset.connect(self._applyDelegates)
for _, item in vars(self).items():
if isinstance(item, AbstractNotificationWidget):
item.statusMessage.connect(self.statusInfoBar.updateMessage)
item.updateProgress.connect(self.statusInfoBar.updateProgress)
pass
def _onOpenFile(self):
self.statusInfoBar.updateMessage.emit(StatusMessage('Loading file...'))
file_dialog = QFileDialog()
file_name, _ = file_dialog.getOpenFileName(self, 'Open File', '', 'All Files (*.tcx)')
if not file_name:
return
self.fileName = file_name
self.model.sort(0, Qt.SortOrder.AscendingOrder)
self.tcxLoader.loadTCXAsync(file_name)
def _onExit(self):
self.app.exit()
pass
def _applyDelegates(self):
delegates = {
'time' : "DateTimeDelegate('dd-MM-yyyy HH:mm:ss.z t','%d-%m-%Y %H:%M:%S.%f %Z')",
'latitude' : "FloatDelegate(-90, 90, 8)",
'longitude' : "FloatDelegate(-180, 180, 8)",
'altitude' : "FloatDelegate(-200, 9000, 3)",
'hartRate' : "IntDelegate(0, 250)",
'distance' : "FloatDelegate(-20000, 20000, 16)",
'speed' : "FloatDelegate(0, 1000, 12)",
'sensorState' : "ListOfValuesDelegate(('Present', 'Present'), ('Absent','Absent'))",
'justDisplay' : "DisplayCalculatedColumn()"
}
for i, title in enumerate(self.model.allTrackPoints.columns.to_list()):
delegateInstance = eval(delegates[title]) if title in delegates else eval(delegates['justDisplay'])
delegateInstance.setParent(self.tableView)
self.tableView.setItemDelegateForColumn(i, delegateInstance)
def _onClear(self):
self.model.clearData()# = TrackPointsModel()
def _settingsTable(self):
self.tableView.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeMode.Fixed)
col, direction = Config.valueG(ConfigGroup.TrackGrid, ConfigAttribute.Sorting, (-1, Qt.SortOrder.AscendingOrder))
self.model.modelReset.connect(self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch))
self.tableView.verticalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Fixed)
self.tableView.horizontalHeader().setSortIndicator(col, direction)
self.tableView.horizontalHeader().sortIndicatorChanged.connect(lambda colNo, direction: Config.setValueG(ConfigGroup.TrackGrid, ConfigAttribute.Sorting, (colNo, direction)))