-
Notifications
You must be signed in to change notification settings - Fork 126
Expand file tree
/
Copy pathapp.py
More file actions
136 lines (117 loc) · 5.84 KB
/
Copy pathapp.py
File metadata and controls
136 lines (117 loc) · 5.84 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import sys
import os
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
from uilib.fileIO import appVersionStr
class App(QApplication):
def __init__(self, args):
super().__init__(args)
self.icon = QIcon(os.path.join(os.path.dirname(sys.argv[0]), '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:
usingDarkMode = self.isDarkMode()
currentTheme = self.style().objectName()
logger.log('openMotor version "{}"'.format(appVersionStr))
logger.log('Opening window (dark mode: {}, default theme: "{}")'.format(usingDarkMode, currentTheme))
if startupFileLoaded:
logger.log('Loaded startup file from "{}"'.format(args[-1]))
# Windows 10 and before don't have dark mode versions of their themes, so if the user wants dark mode, we have to switch to fusion
if usingDarkMode and currentTheme in ['windows', 'windowsvista']:
logger.log('Overriding theme to fusion to get dark mode')
self.setStyle('fusion')
self.window = uilib.widgets.mainWindow.Window(self)
self.preferencesManager.publishPreferences()
if startupFileLoaded:
self.fileManager.sendTitleUpdate()
self.window.getQuickResults(self.fileManager.getCurrentMotor())
self.window.ui.resultsWidget.setupGrainChecks(len(self.fileManager.getCurrentMotor().grains), False)
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()