class ReferenceWidget: "Dropdown for choosing the reference" __files: FileList __theme: ReferenceWidgetTheme __widget: Dropdown def __init__(self, ctrl, model) -> None: self.__theme = ctrl.theme.swapmodels(ReferenceWidgetTheme()) self.__model = model self.__files = FileList(ctrl) def addtodoc(self, mainview, ctrl, *_) -> List[Widget]: "creates the widget" self.__widget = Dropdown(name='HS:reference', width=self.__theme.width, height=self.__theme.height, **self.__data()) @mainview.actionifactive(ctrl) def _py_cb(new): inew = int(new.item) val = None if inew < 0 else [i for _, i in self.__files()][inew] self.__model.fittoreference.reference = val def _observe(old=None, **_): if 'reference' in old and mainview.isactive(): data = self.__data() mainview.calllater(lambda: self.__widget.update(**data)) ctrl.display.observe(FitToReferenceStore().name, _observe) self.__widget.on_click(_py_cb) return [self.__widget] def reset(self, resets): "updates the widget" resets[self.__widget].update(**self.__data()) @property def widget(self): "returns the widget" return self.__widget def __data(self) -> dict: lst = list(self.__files()) menu: list = [(j, str(i)) for i, j in enumerate(i for i, _ in lst)] menu += [None, (self.__theme.title, '-1')] key = self.__model.fittoreference.reference index = -1 if key is None else [i for _, i in lst].index(key) return dict(menu=menu, label=menu[index][0], value=str(index))