#TODO: # currently 2 settings/configs are used # QSettings -> cat ~/.config/Paul\ Scherrer\ Institut/SwissMX.conf # yaml -> swissmx.yaml # QSettings are changed by program # #yaml is fixed and not altened by program import logging _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)) def option(self,key: str) -> bool: try: return self.value(key, type=bool) except: _log.error(f"option {key} not known") return False def toggle_option(self,key: str): v = self.value(key, type=bool) self.setValue(key, not v) self.sync() #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()}") #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 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)