added quick protoype for persitence

This commit is contained in:
2021-05-10 14:58:53 +02:00
parent d79f87611d
commit be7c8a52e3
2 changed files with 104 additions and 0 deletions
+16
View File
@@ -3,6 +3,7 @@ import wx
from .daqpanels import ConfigPanel, StaticPanel, ScanPanel, TweakPanel
from .widgets import NotebookPanel
from .icon import get_wx_icon
from .persist import load, store
class DAQFrame(wx.Frame):
@@ -34,5 +35,20 @@ class DAQFrame(wx.Frame):
sizer.Add(panel_main, proportion=1, flag=wx.EXPAND)
self.SetSizerAndFit(sizer)
try:
load(".neatdaq", self)
except Exception as e:
en = type(e).__name__
print(f"skipped persist load as it caused: {en}: {e}")
self.Bind(wx.EVT_CLOSE, self.on_close)
def on_close(self, event):
try: # make sure the close event fires
store(".neatdaq", self)
finally:
event.Skip()
+88
View File
@@ -0,0 +1,88 @@
from pathlib import Path
from slic.gui import widgets as ws
PERSISTABLE_WIDGETS = (
ws.MathEntry,
ws.FilenameEntry
)
def store(*args):
p = Persistence(*args)
p.store()
def load(*args):
p = Persistence(*args)
p.load()
class Persistence:
def __init__(self, fname, managed):
home = Path.home()
self.fname = home / fname
self.managed = managed
self.values = []
def store(self):
self._get()
list_store(self.fname, self.values)
def load(self):
self.values = list_load(self.fname)
self._set()
def _get(self):
children = self.get_good_children()
for child in children:
value = child.GetValue()
self.values.append(value)
def _set(self):
children = self.get_good_children()
nchildren = len(children)
nvalues = len(self.values)
if nchildren != nvalues:
raise ValueError(f"got {nchildren} widgets vs. {nvalues} values mismatch")
for child, value in zip(children, self.values):
child.SetValue(value)
def get_good_children(self):
return list(c for c in recurse(self.managed) if isinstance(c, PERSISTABLE_WIDGETS))
def recurse_all(objs):
for obj in objs:
yield from recurse(obj)
def recurse(obj):
children = obj.GetChildren()
if children:
yield from recurse_all(children)
else:
yield obj
def list_store(fname, values):
print("store to", fname)
with open(fname, "w") as f:
for v in values:
f.write(f"{v}\n")
def list_load(fname):
print("load from", fname)
values = []
with open(fname, "r") as f:
for line in f:
value = line.strip()
values.append(value)
return values