Files
SCam/scam.py
2021-09-30 10:47:21 +02:00

176 lines
4.4 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--all", dest="show_all_settings", action="store_true", help="show all settings")
clargs = parser.parse_args()
SHOWN_SETTINGS = {
"image_background": "Background",
"image_threshold": "image_threshold",
"project_axis": "Projection axis",
"roi_background": "ROI Background",
"roi_signal": "ROI Signal"
}
ENFORCED_SETTINGS = [
"image_background_enable"
]
import wx
try:
from cam_server_client import PipelineClient
except ImportError:
from fake import PipelineClient
from tools import EXPANDING, STRETCH, make_filled_vbox, make_filled_hbox
from entrybutton import EntryButton
from settings import SettingsList
pc = PipelineClient("http://sf-daqsync-01:8889")
si = pc.get_server_info()
ai = si["active_instances"]
pls = (i for i in ai if "psen_db" in i)
pls = sorted(pls)
class MainFrame(wx.Frame):
def __init__(self, parent=None, title="SCam"):
super().__init__(parent, title=title)
panel_main = MainPanel(self)
self.sizer = sizer = make_filled_vbox([panel_main])
self.SetSizerAndFit(sizer)
class MainPanel(wx.Panel):
def __init__(self, parent):
super().__init__(parent)
self.instance = None
self.camera = None
self.cb_pls = cb_pls = wx.ComboBox(self, choices=pls)
self.eb_bkg = eb_bkg = EntryButton(self, label="Background Images", value=100, button="Save Background")
eb_bkg.Disable()
self.entries = entries = SettingsList(self)
self.btn_print = btn_print = wx.Button(self, label="Print")
btn_print.Disable()
self.btn_save = btn_save = wx.Button(self, label="Save")
btn_save.Disable()
cb_pls.Bind(wx.EVT_COMBOBOX, self.on_select)
eb_bkg.button.Bind(wx.EVT_BUTTON, self.on_save_bkg)
btn_print.Bind(wx.EVT_BUTTON, self.on_print)
btn_save.Bind(wx.EVT_BUTTON, self.on_save_cfg)
widgets = [btn_print, btn_save]
btns_sizer = make_filled_hbox(widgets)
widgets = [cb_pls, STRETCH, eb_bkg, STRETCH, entries, btns_sizer]
sizer = make_filled_vbox(widgets, border=10)
self.SetSizer(sizer)
def on_save_bkg(self, event):
num = self.eb_bkg.GetValue()
bkgname = pc.collect_background(self.camera, num)
self.entries.set("image_background", bkgname)
print(bkgname)
def on_select(self, event):
self.instance = instance = self.cb_pls.GetValue()
cfg = pc.get_instance_config(instance)
print(cfg)
self.orig_cfg = cfg
self.camera = cfg["camera_name"]
if not clargs.show_all_settings:
check_incoming_cfg(cfg)
self.eb_bkg.Enable()
self.btn_print.Enable()
self.btn_save.Enable()
if clargs.show_all_settings:
self.entries.update(cfg)
else:
filtered_cfg = {k: v for k, v in cfg.items() if k in SHOWN_SETTINGS}
self.entries.update(filtered_cfg, SHOWN_SETTINGS)
self._adjust_size()
def _adjust_size(self):
parent = self.GetParent()
parent.sizer.Layout()
parent.Fit()
def make_cfg(self):
cfg = self.entries.get()
if not clargs.show_all_settings:
cfg = check_outgoing_cfg(cfg)
return cfg
def on_print(self, event):
new_cfg = self.make_cfg()
old_cfg = self.orig_cfg
if not clargs.show_all_settings:
old_cfg = {k: v for k, v in old_cfg.items() if k in list(SHOWN_SETTINGS) + ENFORCED_SETTINGS}
print("old config:", old_cfg)
print("new config:", new_cfg)
print("unchanged" if old_cfg == new_cfg else "changed")
def on_save_cfg(self, event):
new_cfg = self.make_cfg()
res = pc.set_instance_config(self.instance, new_cfg)
print(res)
def check_incoming_cfg(cfg):
bkg_enable = cfg.get("image_background_enable")
if bkg_enable not in (None, "passive"):
printable_bkg_enable = repr(bkg_enable).replace("'", '"')
print(f"Warning: found: image_background_enable = {printable_bkg_enable}, this will be set to None or \"passive\" upon saving")
def check_outgoing_cfg(cfg):
bkg = cfg["image_background"]
cfg["image_background_enable"] = "passive" if bkg else None
return cfg
app = wx.App()
frame = MainFrame()
frame.Show()
app.MainLoop()