Ejemplo n.º 1
0
    def _make_button_repr_control(self, component_slider, repr_slider, repr_selection):
        button_refresh = Button(description=' Refresh', tooltip='Get representation info', icon='fa-refresh')
        button_center_selection = Button(description=' Center', tooltip='center selected atoms',
                icon='fa-bullseye')
        button_center_selection._ngl_name = 'button_center_selection'
        button_hide = Button(description=' Hide',
                icon='fa-eye-slash',
                tooltip='Hide/Show current representation')
        button_remove = Button(description=' Remove',
                icon='fa-trash',
                tooltip='Remove current representation')
        button_repr_parameter_dialog = Button(description=' Dialog',
                tooltip='Pop up representation parameters control dialog')

        @button_refresh.on_click
        def on_click_refresh(button):
            self._refresh(component_slider, repr_slider)

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

        @button_hide.on_click
        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'
            else:
                hide = False
                button_hide.description = 'Hide'

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

        @button_remove.on_click
        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_repr_parameter_dialog.on_click
        def on_click_repr_dialog(_):
            from nglview.widget_box import DraggableBox
            if self.widget_repr_parameters is not None and self.widget_repr_choices:
                self.widget_repr_parameters_dialog = DraggableBox([self.widget_repr_choices,
                                     self.widget_repr_parameters])
                self.widget_repr_parameters_dialog._ipython_display_()
                self.widget_repr_parameters_dialog._dialog = 'on'

        bbox = _make_autofit(HBox([button_refresh, button_center_selection,
                                   button_hide, button_remove,
                                   button_repr_parameter_dialog]))
        return bbox
Ejemplo n.º 2
0
    def _make_button_repr_control(self, component_slider, repr_slider,
                                  repr_selection):
        button_refresh = Button(description=' Refresh',
                                tooltip='Get representation info',
                                icon='fa-refresh')
        button_center_selection = Button(description=' Center',
                                         tooltip='center selected atoms',
                                         icon='fa-bullseye')
        button_center_selection._ngl_name = 'button_center_selection'
        button_hide = Button(description=' Hide',
                             icon='fa-eye-slash',
                             tooltip='Hide/Show current representation')
        button_remove = Button(description=' Remove',
                               icon='fa-trash',
                               tooltip='Remove current representation')

        @button_refresh.on_click
        def on_click_refresh(button):
            self._refresh(component_slider, repr_slider)

        @button_center_selection.on_click
        def on_click_center(center_selection):
            self._view.center(selection=repr_selection.value,
                              component=component_slider.value)

        @button_hide.on_click
        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'
            else:
                hide = False
                button_hide.description = 'Hide'

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

        @button_remove.on_click
        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)

        bbox = _make_autofit(
            HBox([
                button_refresh, button_center_selection, button_hide,
                button_remove
            ]))
        return bbox
Ejemplo n.º 3
0
    def _make_button_repr_control(self, component_slider, repr_slider,
                                  repr_selection):
        button_refresh = Button(
            description=' Refresh',
            tooltip='Get representation info',
            icon='fa-refresh')
        button_center_selection = Button(
            description=' Center',
            tooltip='center selected atoms',
            icon='fa-bullseye')
        button_center_selection._ngl_name = 'button_center_selection'
        button_hide = Button(
            description=' Hide',
            icon='fa-eye-slash',
            tooltip='Hide/Show current representation')
        button_remove = Button(
            description=' Remove',
            icon='fa-trash',
            tooltip='Remove current representation')
        button_repr_parameter_dialog = Button(
            description=' Dialog',
            tooltip='Pop up representation parameters control dialog')

        @button_refresh.on_click
        def on_click_refresh(button):
            self._refresh(component_slider, repr_slider)

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

        @button_hide.on_click
        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'
            else:
                hide = False
                button_hide.description = 'Hide'

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

        @button_remove.on_click
        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_repr_parameter_dialog.on_click
        def on_click_repr_dialog(_):
            from nglview.widget_box import DraggableBox
            if self.widget_repr_parameters is not None and self.widget_repr_choices:
                self.widget_repr_parameters_dialog = DraggableBox(
                    [self.widget_repr_choices, self.widget_repr_parameters])
                self.widget_repr_parameters_dialog._ipython_display_()
                self.widget_repr_parameters_dialog._dialog = 'on'

        bbox = _make_autofit(
            HBox([
                button_refresh, button_center_selection, button_hide,
                button_remove, button_repr_parameter_dialog
            ]))
        return bbox
Ejemplo n.º 4
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