Files
OpticsTools/OpticsTools.py
2026-01-26 12:51:49 +01:00

89 lines
3.1 KiB
Python

import sys
import json
from datetime import datetime
import time
from PyQt5 import QtWidgets,QtGui
from ui.OpticsToolsGui import Ui_OpticsGUI
from OpticsPlot import OpticsPlot
from OpticsModel import Model
from OpticsMachine import Machine
from reference import ReferenceManager
from sandbox import Sandbox
class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
def __init__(self,phase=0, office = False):
super(OpticsTools, self).__init__()
self.setupUi(self)
self.version = '1.0.1'
self.setWindowIcon(QtGui.QIcon("rsc/iconoptics.png"))
self.setWindowTitle("SwissFEL Optics Tools")
self.plot = OpticsPlot()
self.plot.show()
# initialize online model
self.model = Model(phase=phase,parent=self)
if phase == 0 and office == False:
self.machine = Machine()
else:
self.machine = None
self.reference = ReferenceManager(parent = self)
self.sandbox = Sandbox(parent = self, machine = self.machine)
self.loadSettingsdirect("/sf/data/applications/BD-OpticsTools/reference/settings/ReferenceSetting.json")
# events handling
self.actionOpen_2.triggered.connect(self.loadSettings)
self.actionSave.triggered.connect(self.saveSettings)
def closeEvent(self, event):
self.plot.close()
event.accept()
def saveSettings(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save Settings",
"/sf/data/applications/BD-OpticsTools/saved_settings/newSetting.json",
"Json Files (*.json)", options=options)
if not fileName:
return
settings=self.model.getSettings()
with open(fileName, 'w', encoding='utf-8') as f:
json.dump(settings, f, ensure_ascii=False, indent=4)
def loadSettings(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open Settings",
"/sf/data/applications/BD-OpticsTools/saved_settings/newSetting.json",
"Json Files (*.json)", options=options)
if not fileName:
return
self.loadSettingsdirect(fileName)
def loadSettingsdirect(self,fileName):
with open(fileName, 'r', encoding='utf-8') as f:
settings = json.load(f)
self.model.loadSettings(settings)
# --------------------------------
# Main routine
if __name__ == '__main__':
QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create("plastique"))
app = QtWidgets.QApplication(sys.argv)
if len(sys.argv) > 1:
arg=int(sys.argv[1])
else:
arg=0
main = OpticsTools(phase = 0 , office = True)
main.show()
sys.exit(app.exec_())