Source code for shyft.dashboard.examples.selector_views

from typing import List, Optional, Dict, Any
from shyft.dashboard.base.ports import connect_ports, Receiver
from shyft.dashboard.base.selector_presenter import SelectorPresenter
from shyft.dashboard.base.selector_views import (TextInput, AutocompleteInput,
                                                 FilterMultiSelect,
                                                 MultiSelect,
                                                 TwoSelect,
                                                 Select,
                                                 CheckboxButtonGroup,
                                                 CheckboxGroup,
                                                 RadioGroup,
                                                 RadioButtonGroup)
from shyft.dashboard.widgets.logger_box import LoggerBox

from shyft.dashboard.widgets.selector_models import LabelDataSelector

from bokeh.io import curdoc
from bokeh.layouts import row, column
from shyft.dashboard.base.app import AppBase


[docs] class CompSelectorViewsExample(AppBase):
[docs] def __init__(self, thread_pool, app_kwargs: Optional[Dict[str, Any]]=None): super().__init__(thread_pool=thread_pool)
@property def name(self) -> str: """ This property returns the name of the app """ return "comp_selector_views_example"
[docs] def get_layout(self, doc: "bokeh.document.Document", logger: Optional[LoggerBox]=None) -> "bokeh.layouts.LayoutDOM": """ This function returns the full page layout for the app """ # not we need some fruits known_fruits = ["Banana", "Apple", "Kiwi", "Dragon Fruit", 'Gava', 'Orange', 'Watermelon', 'Melon'] # print port to print the selection def _receive_selection_to_print(tags: List[str]): if tags: print("selected fruit(s) ", ', '.join(tags)) if logger: logger.info("selected fruit(s) ", ', '.join(tags)) # create print port receive_selection_to_print = Receiver(parent='parent', name='print', func=_receive_selection_to_print, signal_type=List[str]) # Select select_view = Select(title='Fruit select', logger=logger) select_presenter = SelectorPresenter(name='Fruits', view=select_view, logger=logger) select_selector = LabelDataSelector(presenter=select_presenter, logger=logger) # Two Select two_select_view = TwoSelect(title='Fruit two select', logger=logger) two_select_presenter = SelectorPresenter(name='Fruits', view=two_select_view, logger=logger) two_select_selector = LabelDataSelector(presenter=two_select_presenter, logger=logger) # Multi Select multi_select_view = MultiSelect(title='Fruit select', size=4, logger=logger) multi_select_presenter = SelectorPresenter(name='Fruits', view=multi_select_view, logger=logger) multi_select_selector = LabelDataSelector(presenter=multi_select_presenter, logger=logger) # FilterMulti Select filter_multi_select_view = FilterMultiSelect(title='Fruit filter select', size=len(known_fruits), logger=logger) filter_multi_select_presenter = SelectorPresenter(name='Fruits', view=filter_multi_select_view, logger=logger) filter_multi_select_selector = LabelDataSelector(presenter=filter_multi_select_presenter, logger=logger) # Autocomplete Input auto_complete_view = AutocompleteInput(title='Fruit autocomplete input', placeholder="enter fruits name", logger=logger) auto_complete_presenter = SelectorPresenter(name='Fruits', view=auto_complete_view, logger=logger) auto_complete_selector = LabelDataSelector(presenter=auto_complete_presenter, logger=logger) # Checkbox group checkboxgroup_view = CheckboxGroup(title='CheckboxGroup', logger=logger) checkboxgroup_presenter = SelectorPresenter(name='CheckboxGroup Labels', view=checkboxgroup_view, logger=logger) checkboxgroup_selector = LabelDataSelector(presenter=checkboxgroup_presenter, logger=logger) # Checkboxbutton group checkbox_button_group_view = CheckboxButtonGroup(title='CheckboxButtonGroup', width=550, logger=logger) checkbox_button_group_presenter = SelectorPresenter(name='CheckboxButtonGroup Labels', view=checkbox_button_group_view, logger=logger) checkbox_button_group_selector = LabelDataSelector(presenter=checkbox_button_group_presenter, logger=logger) # radio group radio_group_view = RadioGroup(title='RadioGroup', logger=logger) radio_group_presenter = SelectorPresenter(name='RadioGroup Labels', view=radio_group_view, logger=logger) radio_group_selector = LabelDataSelector(presenter=radio_group_presenter, logger=logger) # radio button group radio_button_group_view = RadioButtonGroup(title='RadioButtonGroup', width=550, logger=logger) radio_button_group_presenter = SelectorPresenter(name='RadioGroup Labels', view=radio_button_group_view, logger=logger) radio_button_group_selector = LabelDataSelector(presenter=radio_button_group_presenter, logger=logger) # connect console print function to selector model connect_ports(select_selector.send_selected_labels, receive_selection_to_print) connect_ports(two_select_selector.send_selected_labels, receive_selection_to_print) connect_ports(multi_select_selector.send_selected_labels, receive_selection_to_print) connect_ports(auto_complete_selector.send_selected_labels, receive_selection_to_print) connect_ports(checkboxgroup_selector.send_selected_labels, receive_selection_to_print) connect_ports(checkbox_button_group_selector.send_selected_labels, receive_selection_to_print) connect_ports(radio_group_selector.send_selected_labels, receive_selection_to_print) connect_ports(radio_button_group_selector.send_selected_labels, receive_selection_to_print) # fill auto complete input with available tags select_selector.receive_labels(known_fruits) two_select_selector.receive_labels(known_fruits) multi_select_selector.receive_labels(known_fruits) filter_multi_select_selector.receive_labels(known_fruits) auto_complete_selector.receive_labels(known_fruits) checkboxgroup_selector.receive_labels(known_fruits) checkbox_button_group_selector.receive_labels(known_fruits) radio_group_selector.receive_labels(known_fruits) radio_button_group_selector.receive_labels(known_fruits) # add views to bokeh document return row(row(TextInput().layout, select_view.layout, two_select_view.layout, multi_select_view.layout, filter_multi_select_view.layout, column(auto_complete_view.layout)), row( checkboxgroup_view.layout, checkbox_button_group_view.layout, radio_group_view.layout, radio_button_group_view.layout), spacing=40)