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
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