151 lines
3.3 KiB
Python
Executable File
151 lines
3.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import wx
|
|
|
|
#from cam_server_client import PipelineClient
|
|
from fake import PipelineClient
|
|
|
|
from tools import EXPANDING, STRETCH, make_filled_vbox, make_filled_hbox
|
|
from mathentry import MathEntry
|
|
from listentry import ListEntry
|
|
|
|
|
|
|
|
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="test"):
|
|
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.cb_pls = cb_pls = wx.ComboBox(self, choices=pls)
|
|
self.entries = entries = SettingsList(self)
|
|
self.btn_print = btn_print = wx.Button(self, label="Print")
|
|
|
|
cb_pls.Bind(wx.EVT_COMBOBOX, self.on_select)
|
|
btn_print.Bind(wx.EVT_BUTTON, self.on_print)
|
|
|
|
widgets = [cb_pls, entries, btn_print]
|
|
sizer = make_filled_vbox(widgets)
|
|
self.SetSizer(sizer)
|
|
|
|
|
|
def on_select(self, event):
|
|
instance = self.cb_pls.GetValue()
|
|
cfg = pc.get_instance_config(instance)
|
|
self.entries.update(cfg)
|
|
self._adjust_size()
|
|
|
|
|
|
def _adjust_size(self):
|
|
parent = self.GetParent()
|
|
parent.sizer.Layout()
|
|
parent.Fit()
|
|
|
|
|
|
def on_print(self, event):
|
|
data = self.entries.get()
|
|
print(data)
|
|
|
|
|
|
|
|
class SettingsList(wx.GridSizer):
|
|
|
|
def __init__(self, parent, hgap=5, vgap=5):
|
|
super().__init__(cols=2, hgap=hgap, vgap=vgap)
|
|
self.parent = parent
|
|
self.children = []
|
|
|
|
def update(self, cfg):
|
|
self.clear()
|
|
for k, v in sorted(cfg.items()):
|
|
self.add(k, v)
|
|
|
|
def clear(self):
|
|
self.Clear(True)
|
|
|
|
def add(self, *args):
|
|
new = Setting(self.parent, *args)
|
|
self.children.append(new)
|
|
self.Add(new.state)
|
|
self.Add(new.text, 0, wx.EXPAND|wx.ALL)
|
|
|
|
def get(self):
|
|
res = {}
|
|
for i in self.children:
|
|
name = i.get_name()
|
|
print(name)
|
|
if i.get_state():
|
|
value = i.get_value()
|
|
else:
|
|
value = None
|
|
res[name] = value
|
|
return res
|
|
|
|
|
|
|
|
class Setting:
|
|
|
|
def __init__(self, parent, label, value):
|
|
self.state = state = wx.CheckBox(parent, label=label)
|
|
|
|
if isinstance(value, list):
|
|
self.text = text = ListEntry(parent, style=wx.TE_RIGHT)
|
|
else:
|
|
self.text = text = MathEntry(parent, style=wx.TE_RIGHT)
|
|
|
|
state.Bind(wx.EVT_CHECKBOX, self.on_state_change)
|
|
|
|
if value is None:
|
|
state.SetValue(False)
|
|
text.Disable()
|
|
else:
|
|
state.SetValue(True)
|
|
text.SetValue(value)
|
|
|
|
|
|
def get_name(self):
|
|
return self.state.GetLabel()
|
|
|
|
def get_state(self):
|
|
return self.state.GetValue()
|
|
|
|
def get_value(self):
|
|
return self.text.GetValue()
|
|
|
|
|
|
def on_state_change(self, event):
|
|
if self.get_state():
|
|
self.text.Enable()
|
|
else:
|
|
self.text.Disable()
|
|
|
|
|
|
|
|
|
|
|
|
app = wx.App()
|
|
frame = MainFrame()
|
|
frame.Show()
|
|
app.MainLoop()
|
|
|
|
|
|
|