-
Notifications
You must be signed in to change notification settings - Fork 83
/
Copy pathapp.py
123 lines (104 loc) · 4.92 KB
/
app.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
import sys
import matplotlib.pyplot as plt
import matplotlib as mpl
from PyQt6.QtWidgets import QApplication, QMessageBox
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qt
import motorlib
from motorlib import simResult
from uilib import preferencesManager, propellantManager, simulationManager, fileManager, toolManager
from uilib import importExportManager
import uilib.widgets.mainWindow
from uilib.logger import logger
class App(QApplication):
def __init__(self, args):
super().__init__(args)
self.icon = QIcon('resources/oMIconCyclesSmall.png')
self.headless = '-h' in args
if not self.headless and self.isDarkMode():
# Change these settings before any graph widgets are built, so they apply everywhere
plt.style.use('dark_background')
mpl.rcParams['axes.facecolor'] = '1e1e1e'
mpl.rcParams['figure.facecolor'] = '1e1e1e'
self.preferencesManager = uilib.preferencesManager.PreferencesManager()
self.propellantManager = uilib.propellantManager.PropellantManager()
self.preferencesManager.preferencesChanged.connect(self.propellantManager.setPreferences)
self.simulationManager = uilib.simulationManager.SimulationManager()
self.preferencesManager.preferencesChanged.connect(self.simulationManager.setPreferences)
self.fileManager = uilib.fileManager.FileManager(self)
startupFileLoaded = False
if len(args) > 1 and args[-1][0] != '-':
startupFileLoaded = self.fileManager.load(args[-1])
self.propellantManager.updated.connect(self.fileManager.updatePropellant)
self.toolManager = uilib.toolManager.ToolManager(self)
self.preferencesManager.preferencesChanged.connect(self.toolManager.setPreferences)
self.importExportManager = uilib.importExportManager.ImportExportManager(self)
self.preferencesManager.preferencesChanged.connect(self.importExportManager.setPreferences)
self.simulationManager.newSimulationResult.connect(self.importExportManager.acceptSimRes)
self.fileManager.newMotor.connect(self.importExportManager.acceptNewMotor)
if self.headless:
if len(args) < 3:
print('Not enough arguments. Headless mode requires an input file.')
elif not startupFileLoaded:
print('Could not load motor file')
sys.exit(1)
else:
motor = self.fileManager.getCurrentMotor()
simulationResult = motor.runSimulation()
for alert in simulationResult.alerts:
print('{} ({}, {}): {}'.format(motorlib.simResult.alertLevelNames[alert.level],
motorlib.simResult.alertTypeNames[alert.type],
alert.location,
alert.description))
print()
if '-o' in args:
with open(args[args.index('-o') + 1], 'w') as outputFile:
outputFile.write(simulationResult.getCSV(self.preferencesManager.preferences))
else:
print(simulationResult.getCSV(self.preferencesManager.preferences))
sys.exit(0)
else:
logger.log('Opening window (dark mode: {})'.format(self.isDarkMode()))
self.window = uilib.widgets.mainWindow.Window(self)
self.preferencesManager.publishPreferences()
if startupFileLoaded:
self.fileManager.sendTitleUpdate()
self.window.show()
logger.log('Window opened')
def isDarkMode(self):
if self.headless:
return False
return self.styleHints().colorScheme() == Qt.ColorScheme.Dark
def outputMessage(self, content, title='openMotor'):
if self.headless:
print(content)
else:
logger.log(content)
msg = QMessageBox()
msg.setWindowIcon(self.icon)
msg.setText(content)
msg.setWindowTitle(title)
msg.exec()
def promptYesNo(self, content, title='openMotor'):
if self.headless:
return input('{} (y/n): '.format(content)) == 'y'
else:
logger.log(content)
msg = QMessageBox()
msg.setWindowIcon(self.icon)
msg.setText(content)
msg.setWindowTitle(title)
msg.setStandardButtons(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
return msg.exec() == QMessageBox.StandardButton.Yes
def outputException(self, exception, text, title='openMotor - Error'):
if self.headless:
print(text + " " + str(exception))
else:
logger.error(text)
logger.error(exception)
msg = QMessageBox()
msg.setWindowIcon(self.icon)
msg.setText(text)
msg.setInformativeText(str(exception))
msg.setWindowTitle(title)
msg.exec()