Beispiel #1
0
    def _make_repr_parameter_slider(self):
        repr_checkbox = Checkbox(value=False, description='Parameters')

        vbox = VBox([repr_checkbox])

        def create_widget(change):
            if change['new']:
                # repr_name
                repr_info_box = get_widget_by_name(self.repr_widget,
                                                   'repr_info_box')
                repr_selection = get_widget_by_name(repr_info_box,
                                                    'repr_selection')
                component_slider = get_widget_by_name(self.repr_widget,
                                                      'component_slider')
                repr_slider = get_widget_by_name(self.repr_widget,
                                                 'repr_slider')
                widget = self._view._display_repr(
                    component=component_slider.value,
                    repr_index=repr_slider.value,
                    name=repr_selection.value)
                widget._ngl_name = 'repr_parameters'
                vbox.children = [repr_checkbox, widget]
            else:
                vbox.children = [
                    repr_checkbox,
                ]

        repr_checkbox.observe(create_widget, names='value')
        vbox._ngl_name = 'repr_parameters_box'
        return vbox
Beispiel #2
0
    def _make_repr_widget(self):
        button_refresh = Button(description='Refresh',
                                tooltip='Get representation info')
        button_update = Button(
            description='Update',
            tooltip='Update representation by updating rinfo box')
        button_remove = Button(description='Remove',
                               tooltip='Remove current representation')
        button_hide = Button(description='Hide',
                             tooltip='Hide/Show current representation')
        button_center_selection = Button(description='Center',
                                         tooltip='center selected atoms')
        button_center_selection._ngl_name = 'button_center_selection'

        bbox = HBox([
            button_refresh, button_center_selection, button_hide, button_remove
        ])

        repr_name_text = Text(value='', description='')
        repr_name_text._ngl_name = 'repr_name_text'
        repr_selection = Text(value='', description='')
        repr_selection._ngl_name = 'repr_selection'
        repr_selection.width = repr_name_text.width = DEFAULT_TEXT_WIDTH

        repr_info_box = VBox([repr_name_text, repr_selection])
        repr_info_box._ngl_name = 'repr_info_box'

        component_slider = IntSlider(value=0, description='component')
        component_slider._ngl_name = 'component_slider'
        component_slider.visible = False

        cvalue = ' '
        component_dropdown = Dropdown(value=cvalue,
                                      options=[
                                          cvalue,
                                      ],
                                      description='component')
        component_dropdown._ngl_name = 'component_dropdown'

        repr_slider = IntSlider(value=0,
                                description='representation',
                                width=DEFAULT_SLIDER_WIDTH)
        repr_slider._ngl_name = 'repr_slider'
        repr_slider.visible = True

        repr_text_info = Textarea(value='',
                                  description='representation parameters')
        repr_text_info.visible = False
        checkbox_repr_text = Checkbox(value=False,
                                      description='show parameters')
        checkbox_repr_text.visible = False
        repr_text_box = VBox([checkbox_repr_text, repr_text_info])
        repr_text_box._ngl_name = 'repr_text_box'

        checkbox_reprlist = Checkbox(value=False, description='reprlist')
        checkbox_reprlist._ngl_name = 'checkbox_reprlist'
        reprlist_choices = self._make_repr_name_choices(
            component_slider, repr_slider)
        reprlist_choices._ngl_name = 'reprlist_choices'

        def on_update_checkbox_reprlist(change):
            reprlist_choices.visible = change['new']

        checkbox_reprlist.observe(on_update_checkbox_reprlist, names='value')

        def on_click_refresh(button):
            self._view._request_repr_parameters(
                component=component_slider.value, repr_index=repr_slider.value)
            self._view._remote_call('requestReprInfo', target='Widget')

        button_refresh.on_click(on_click_refresh)

        def on_click_update(button):
            parameters = json.loads(
                repr_text_info.value.replace("False",
                                             "false").replace("True", "true"))
            self._view.update_representation(component=component_slider.value,
                                             repr_index=repr_slider.value,
                                             **parameters)
            self._view._set_selection(repr_selection.value,
                                      component=component_slider.value,
                                      repr_index=repr_slider.value)

        button_update.on_click(on_click_update)

        def on_click_remove(button_remove):
            self._view._remove_representation(component=component_slider.value,
                                              repr_index=repr_slider.value)
            self._view._request_repr_parameters(
                component=component_slider.value, repr_index=repr_slider.value)

        button_remove.on_click(on_click_remove)

        def on_click_hide(button_hide):
            component = component_slider.value
            repr_index = repr_slider.value

            if button_hide.description == 'Hide':
                hide = True
                button_hide.description = 'Show'
            elif button_hide.description == 'Show':
                hide = False
                button_hide.description = 'Hide'
            else:
                raise ValueError("must be Hide or Show")

            self._view._remote_call('setVisibilityForRepr',
                                    target='Widget',
                                    args=[component, repr_index, not hide])

        button_hide.on_click(on_click_hide)

        def on_click_center(center_selection):
            self._view.center_view(selection=repr_selection.value,
                                   component=component_slider.value)

        button_center_selection.on_click(on_click_center)

        def on_change_repr_name(change):
            name = change['new'].strip()
            old = change['old'].strip()

            should_update = (self._real_time_update and old and name
                             and name in REPR_NAMES
                             and name != change['old'].strip())

            if should_update:
                component = component_slider.value
                repr_index = repr_slider.value
                self._view._remote_call(
                    'setRepresentation',
                    target='Widget',
                    args=[change['new'], {}, component, repr_index])
                self._view._request_repr_parameters(component, repr_index)

        def update_slider_info(change):
            self._view._request_repr_parameters(
                component=component_slider.value, repr_index=repr_slider.value)
            component_dropdown.options = tuple(self._view._ngl_component_names)

        def on_change_selection(change):
            if self._real_time_update:
                component = component_slider.value
                repr_index = repr_slider.value
                self._view._set_selection(change['new'],
                                          component=component,
                                          repr_index=repr_index)

        def on_change_component_dropdown(change):
            choice = change['new']
            if choice:
                component_slider.value = self._view._ngl_component_names.index(
                    choice)

        component_dropdown.observe(on_change_component_dropdown, names='value')

        def on_change_checkbox_repr_text(change):
            repr_text_info.visible = change['new']

        repr_slider.observe(update_slider_info, names='value')
        component_slider.observe(update_slider_info, names='value')
        repr_name_text.observe(on_change_repr_name, names='value')
        repr_selection.observe(on_change_selection, names='value')
        checkbox_repr_text.observe(on_change_checkbox_repr_text, names='value')

        # HC
        repr_parameters_box = self._make_repr_parameter_slider()
        repr_parameters_box._ngl_name = 'repr_parameters_box'

        # NOTE: if you update below list, make sure to update _make_repr_parameter_slider
        # or refactor
        # try to "refresh"
        vbox = VBox([
            component_dropdown, bbox, repr_info_box, component_slider,
            repr_slider, reprlist_choices, repr_text_box, repr_parameters_box
        ])
        self._view._request_repr_parameters(component=component_slider.value,
                                            repr_index=repr_slider.value)
        return vbox