You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.3 KiB

import wx # type: ignore
from gooey.gui import formatters
from gooey.gui.components.widgets.bases import TextContainer
from gooey.python_bindings import types as t
class IntegerField(TextContainer):
"""
An integer input field
"""
widget_class = wx.SpinCtrl
def getWidget(self, *args, **options):
widget = self.widget_class(self,
value='',
min=self._options.get('min', 0),
max=self._options.get('max', 100))
return widget
def getWidgetValue(self):
return self.widget.GetValue()
def setValue(self, value):
self.widget.SetValue(int(value))
def formatOutput(self, metatdata, value):
# casting to string so that the generic formatter
# doesn't treat 0 as false/None
return formatters.general(metatdata, str(value))
def getUiState(self) -> t.FormField:
widget: wx.SpinCtrl = self.widget
return t.IntegerField(
id=self._id,
type=self.widgetInfo['type'],
value=self.getWidgetValue(),
min=widget.GetMin(),
max=widget.GetMax(),
error=self.error.GetLabel() or None,
enabled=self.IsEnabled(),
visible=self.IsShown()
)
class DecimalField(IntegerField):
"""
A decimal input field
"""
widget_class = wx.SpinCtrlDouble
def getWidget(self, *args, **options):
widget = self.widget_class(self,
value='',
min=self._options.get('min', 0),
max=self._options.get('max', 100),
inc=self._options.get('increment', 0.01))
widget.SetDigits(self._options.get('precision', widget.GetDigits()))
return widget
def setValue(self, value):
self.widget.SetValue(value)
def getUiState(self) -> t.FormField:
widget: wx.SpinCtrlDouble = self.widget
return t.IntegerField(
id=self._id,
type=self.widgetInfo['type'],
value=self.getWidgetValue(),
min=widget.GetMin(),
max=widget.GetMax(),
error=self.error.GetLabel() or None,
enabled=self.IsEnabled(),
visible=self.IsShown()
)