diff --git a/slic/gui/widgets/__init__.py b/slic/gui/widgets/__init__.py index 793539202..160859769 100644 --- a/slic/gui/widgets/__init__.py +++ b/slic/gui/widgets/__init__.py @@ -3,7 +3,7 @@ from .alarm import AlarmMixin from .boxes import EXPANDING, MINIMIZED, STRETCH, make_filled_vbox, make_filled_hbox from .checkbox import CheckBox from .completers import ContainsTextCompleter, FuzzyTextCompleter -from .entries import StepsRangeEntry, LabeledEntry, LabeledFilenameEntry, LabeledMathEntry, LabeledTweakEntry, LabeledValuesEntry +from .entries import StepsRangeEntry, StepsSequenceEntry, LabeledEntry, LabeledFilenameEntry, LabeledMathEntry, LabeledTweakEntry, LabeledValuesEntry from .lists import AutoWidthListCtrl, show_list, show_two_lists from .mods import MainPanel, NotebookDX from .nope import Nope diff --git a/slic/gui/widgets/entries.py b/slic/gui/widgets/entries.py index d5d69cd4f..72b9ca727 100644 --- a/slic/gui/widgets/entries.py +++ b/slic/gui/widgets/entries.py @@ -5,7 +5,7 @@ import wx from slic.utils import arithmetic_eval, typename, nice_arange from ..persist import PersistableWidget -from .boxes import make_filled_hbox +from .boxes import EXPANDING, STRETCH, make_filled_hbox, make_filled_vbox from .fname import increase, decrease from .labeled import make_labeled from .nope import Nope @@ -74,6 +74,50 @@ class StepsRangeEntry(wx.BoxSizer): +class StepsSequenceEntry(wx.BoxSizer): + + def __init__(self, parent): + super().__init__(wx.VERTICAL) + + self.steps = None + + self.values = values = LabeledValuesEntry(parent, label="Values") + + self.nsteps = nsteps = LabeledEntry(parent, label="#Steps") + + nsteps.Disable() + self.on_change(None) # initialize #Steps + + values.Bind(wx.EVT_TEXT, self.on_change) + + hb_values = wx.BoxSizer() + hb_values.Add(values, 1, wx.EXPAND) + + widgets = (STRETCH, STRETCH, STRETCH, nsteps) + hb_pos = make_filled_hbox(widgets, border=20, flag=wx.TOP) + + widgets = (EXPANDING, hb_values, hb_pos) + make_filled_vbox(widgets, box=self) + + + def on_change(self, _event): + try: + self.steps = steps = self.values.get_values() + except ValueError as e: + nsteps = "" + tooltip = str(e) + else: + nsteps = str(len(steps)) + tooltip = str(steps) + self.nsteps.SetValue(nsteps) + self.nsteps.SetToolTip(tooltip) + + + def get_values(self): + return self.steps + + + class LabeledTweakEntry(wx.BoxSizer): def __init__(self, parent, id=wx.ID_ANY, label="", value=""):