cleaner app starting, new application settings class
This commit is contained in:
123
app_config.py
123
app_config.py
@@ -1,4 +1,3 @@
|
||||
|
||||
#TODO:
|
||||
# currently 2 settings/configs are used
|
||||
# QSettings -> cat ~/.config/Paul\ Scherrer\ Institut/SwissMX.conf
|
||||
@@ -6,54 +5,102 @@
|
||||
# QSettings are changed by program
|
||||
# #yaml is fixed and not altened by program
|
||||
|
||||
import yaml
|
||||
from PyQt5.QtCore import QSettings
|
||||
from pathlib import Path
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
_log = logging.getLogger(__name__)
|
||||
|
||||
import os
|
||||
from PyQt5.QtCore import QSettings
|
||||
#import yaml
|
||||
#from pathlib import Path
|
||||
|
||||
class AppCfg(QSettings):
|
||||
SKIP_ESCAPE_TRANSITIONS_IF_SAFE="escape/skip_transitions_if_safe"
|
||||
|
||||
BEAM_MARKER_POSITIONS="beam/marker_positions"
|
||||
BEAM_SIZE="beam/size"
|
||||
|
||||
CRYOJET_MOTION_ENABLED="cryojet/motion_enabled"
|
||||
CRYOJET_NOZZLE_OUT="cryojet/nozzle_out"
|
||||
CRYOJET_NOZZLE_IN="cryojet/nozzle_in"
|
||||
|
||||
DELTATAU_SHOW_PLOTS="deltatau/show_plots"
|
||||
DELTATAU_OMEGACOS="deltatau/omegacos"
|
||||
DELTATAU_SORT_POINTS="deltatau/sort_points"
|
||||
DELTATAU_VELOCITY_SCALE="deltatau/velocity_scale"
|
||||
|
||||
CAMERA_TRANSFORMATIONS="camera/transformations"
|
||||
CAMERA_ZOOM_TO_PPM="camera/zoom_to_ppm"
|
||||
|
||||
EXPERIMENT_PGROUP="experiment/pgroup"
|
||||
EXPERIMENT_UID="experiment/uid"
|
||||
|
||||
ACTIVATE_PULSE_PICKER="scanning/activate_pulse_picker"
|
||||
|
||||
def __init__(self):
|
||||
super(AppCfg, self).__init__("PSI", "SwissMX")
|
||||
keys = self.allKeys()
|
||||
if AppCfg.ACTIVATE_PULSE_PICKER not in keys:
|
||||
self.setValue(AppCfg.ACTIVATE_PULSE_PICKER, False)
|
||||
|
||||
if AppCfg.SKIP_ESCAPE_TRANSITIONS_IF_SAFE not in keys:
|
||||
self.setValue(AppCfg.SKIP_ESCAPE_TRANSITIONS_IF_SAFE, False)
|
||||
|
||||
if "hits/marker_size" not in keys:
|
||||
self.setValue("hits/marker_size", 10)
|
||||
|
||||
if "graphs/show_auxiliary" not in keys:
|
||||
self.setValue("graphs/show_auxiliary", False)
|
||||
|
||||
if "graphs/auxiliary_graph_index" not in keys:
|
||||
self.setValue("graphs/auxiliary_graph_index", 0)
|
||||
|
||||
if "scan_request/last_location" not in keys:
|
||||
d10 = os.path.join(os.path.expanduser("~"), "Data10")
|
||||
self.setValue("scan_request/last_location", d10)
|
||||
|
||||
if AppCfg.BEAM_SIZE in keys:
|
||||
_log.info("setting beamsize from stored settings: {}".format(self.value(AppCfg.BEAM_SIZE)))
|
||||
else:
|
||||
_log.warning("beam size may not reflect reality, please check")
|
||||
self.setValue(AppCfg.BEAM_SIZE, (40, 20))
|
||||
|
||||
|
||||
settings = QSettings("PSI", "SwissMX")
|
||||
def option(self,key: str) -> bool:
|
||||
try:
|
||||
return self.value(key, type=bool)
|
||||
except:
|
||||
_log.error(f"option {key} not known")
|
||||
return False
|
||||
|
||||
inst_folder = Path(__file__).absolute().parent
|
||||
def toggle_option(self,key: str):
|
||||
v = self.value(key, type=bool)
|
||||
self.setValue(key, not v)
|
||||
self.sync()
|
||||
|
||||
config_file = inst_folder / "swissmx.yaml"
|
||||
configs = yaml.load(config_file.read_text(),Loader=yaml.FullLoader)
|
||||
endstation = configs["configure_for"]
|
||||
appsconf = configs[endstation]
|
||||
|
||||
simulated = appsconf.get("simulate", False)
|
||||
#inst_folder = Path(__file__).absolute().parent
|
||||
#config_file = inst_folder / "swissmx.yaml"
|
||||
#configs = yaml.load(config_file.read_text(),Loader=yaml.FullLoader)
|
||||
#endstation = configs["configure_for"]
|
||||
#appsconf = configs[endstation]
|
||||
#simulated = appsconf.get("simulate", False)
|
||||
#logger.info(f"configuring for endstation: {endstation.upper()}")
|
||||
|
||||
logger.info(f"configuring for endstation: {endstation.upper()}")
|
||||
|
||||
if simulated:
|
||||
logger.warning("SIMULATION is ACTIVE")
|
||||
css_file = inst_folder / "swissmx.css"
|
||||
#if simulated:
|
||||
# logger.warning("SIMULATION is ACTIVE")
|
||||
#css_file = inst_folder / "swissmx.css"
|
||||
|
||||
|
||||
|
||||
def font(name: str) -> str:
|
||||
p = Path(__file__).absolute().parent / "fonts" / name
|
||||
return str(p)
|
||||
#def font(name: str) -> str:
|
||||
# p = Path(__file__).absolute().parent / "fonts" / name
|
||||
# return str(p)
|
||||
|
||||
|
||||
def logo(size: int = 0) -> str:
|
||||
p = Path(__file__).absolute().parent / "logos" / "logo.png"
|
||||
if size:
|
||||
p = Path(__file__).absolute().parent / "logos" / f"tell_logo_{size}x{size}.png"
|
||||
return str(p)
|
||||
#def logo(size: int = 0) -> str:
|
||||
# p = Path(__file__).absolute().parent / "logos" / "logo.png"
|
||||
# if size:
|
||||
# p = Path(__file__).absolute().parent / "logos" / f"tell_logo_{size}x{size}.png"
|
||||
# return str(p)
|
||||
|
||||
|
||||
def option(key: str) -> bool:
|
||||
try:
|
||||
return settings.value(key, type=bool)
|
||||
except:
|
||||
logger.error(f"option {key} not known")
|
||||
return False
|
||||
|
||||
|
||||
def toggle_option(key: str):
|
||||
v = settings.value(key, type=bool)
|
||||
settings.setValue(key, not v)
|
||||
settings.sync()
|
||||
|
||||
Reference in New Issue
Block a user