mirror of https://github.com/chriskiehl/Gooey.git
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.
54 lines
1.8 KiB
54 lines
1.8 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 Listbox(TextContainer):
|
|
|
|
def getWidget(self, parent, *args, **options):
|
|
height = self._options.get('height', 60)
|
|
return wx.ListBox(
|
|
parent=parent,
|
|
choices=self._meta['choices'],
|
|
size=(-1, height),
|
|
style=wx.LB_MULTIPLE
|
|
)
|
|
|
|
def setOptions(self, options):
|
|
self.widget.Clear()
|
|
for option in options:
|
|
self.widget.Append(option)
|
|
|
|
def setValue(self, values):
|
|
for string in values:
|
|
self.widget.SetStringSelection(string)
|
|
|
|
def getWidgetValue(self):
|
|
return [self.widget.GetString(index)
|
|
for index in self.widget.GetSelections()]
|
|
|
|
def formatOutput(self, metadata, value):
|
|
return formatters.listbox(metadata, value)
|
|
|
|
def getUiState(self) -> t.FormField:
|
|
widget: wx.ComboBox = self.widget
|
|
return t.Listbox(
|
|
id=self._id,
|
|
type=self.widgetInfo['type'],
|
|
selected=self.getWidgetValue(),
|
|
choices=self._meta['choices'],
|
|
error=self.error.GetLabel() or None,
|
|
enabled=self.IsEnabled(),
|
|
visible=self.IsShown()
|
|
)
|
|
|
|
def syncUiState(self, state: t.Listbox): # type: ignore
|
|
widget: wx.ComboBox = self.widget
|
|
widget.Clear()
|
|
widget.AppendItems(state.get('choices', []))
|
|
for string in state['selected']:
|
|
widget.SetStringSelection(string)
|
|
self.error.SetLabel(state['error'] or '')
|
|
self.error.Show(state['error'] is not None and state['error'] is not '')
|