Loading src/nova/trame/view/components/data_selector.py +43 −22 Original line number Diff line number Diff line Loading @@ -101,9 +101,13 @@ class DataSelector(datagrid.VGrid): self._v_model_name_in_state = v_model.split(".")[0] else: self._v_model_name_in_state = v_model[0].split(".")[0] self._directory = directory self._last_directory = self._directory self._extensions = extensions if extensions is not None else [] self._last_extensions = self._extensions self._prefix = prefix self._last_prefix = self._prefix self._refresh_rate = refresh_rate self._select_strategy = select_strategy Loading Loading @@ -267,8 +271,11 @@ class DataSelector(datagrid.VGrid): if isinstance(self._directory, tuple): @self.state.change(self._directory[0]) def on_directory_change(*args: Any, **kwargs: Any) -> None: @self.state.change(self._directory[0].split(".")[0]) def on_directory_change(**kwargs: Any) -> None: directory = rgetdictvalue(kwargs, self._directory[0]) if directory != self._last_directory: self._last_directory = directory self._vm.set_binding_parameters( get_state_param(self.state, self._directory), get_state_param(self.state, self._extensions), Loading @@ -277,8 +284,11 @@ class DataSelector(datagrid.VGrid): if isinstance(self._extensions, tuple): @self.state.change(self._extensions[0]) def on_extensions_change(*args: Any, **kwargs: Any) -> None: @self.state.change(self._extensions[0].split(".")[0]) def on_extensions_change(**kwargs: Any) -> None: extensions = rgetdictvalue(kwargs, self._extensions[0]) if extensions != self._last_extensions: self._last_extensions = extensions self._vm.set_binding_parameters( get_state_param(self.state, self._directory), get_state_param(self.state, self._extensions), Loading @@ -287,8 +297,11 @@ class DataSelector(datagrid.VGrid): if isinstance(self._prefix, tuple): @self.state.change(self._prefix[0]) def on_prefix_change(*args: Any, **kwargs: Any) -> None: @self.state.change(self._prefix[0].split(".")[0]) def on_prefix_change(**kwargs: Any) -> None: prefix = rgetdictvalue(kwargs, self._prefix) if prefix != self._last_prefix: self._last_prefix = prefix self._vm.set_binding_parameters( get_state_param(self.state, self._directory), get_state_param(self.state, self._extensions), Loading @@ -297,12 +310,20 @@ class DataSelector(datagrid.VGrid): async def _refresh_loop(self) -> None: refresh_rate: int = set_state_param(self.state, self._refresh_rate) skip = False if refresh_rate > 0: while True: await sleep(refresh_rate) if skip: continue self.refresh_contents() self.state.dirty(self._datafiles_name) refresh_rate = get_state_param(self.state, self._refresh_rate) try: refresh_rate = int(get_state_param(self.state, self._refresh_rate)) skip = False except TypeError: refresh_rate = 1 skip = True tests/gallery/models/data_selector.py +2 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,8 @@ from pydantic import BaseModel, Field class DataSelectorBindingTest(BaseModel): """Model for testing binding parameters for DataSelector.""" prefix: str = Field(default="") directory: str = Field(default="") refresh_rate: int = Field(default=0) class DataSelectorState(BaseModel): Loading tests/gallery/view_models/data_selector.py +1 −2 Original line number Diff line number Diff line Loading @@ -17,8 +17,7 @@ class DataSelectorVM: self.parameter_bind = binding.new_bind(self.binding_test, callback_after_update=self.on_parameter_update) def on_update(self, data: Dict[str, Any]) -> None: print("selected files:", self.model.selected_files) print("selected neutron datafiles:", self.model.selected_neutron_files) print(data, self.model) def on_parameter_update(self, data: Dict[str, Any]) -> None: print(data, self.binding_test) tests/gallery/views/app.py +6 −4 Original line number Diff line number Diff line Loading @@ -343,20 +343,22 @@ class App(ThemedApp): vuetify.VBtn("Tooltip", v_bind="props") vuetify.VCardTitle("Navigation Components") with GridLayout(classes="mb-4", columns=1, halign="center", valign="center"): with GridLayout(classes="mb-4", columns=1, valign="center"): with vuetify.VTabs(): vuetify.VTab("Tab 1") vuetify.VTab("Tab 2") vuetify.VTab("Tab 3") vuetify.VCardTitle("Data Selection Widgets") with GridLayout(classes="mb-1", columns=2, valign="center", width=600): InputField(v_model="ds_params.directory") InputField(v_model="ds_params.refresh_rate") with html.Div(classes="border-md text-left", style="height: 650px; width: 600px;"): DataSelector( v_model="data_selector.selected_files", chips=True, directory="/", prefix=("ds_params.prefix",), refresh_rate=0, directory=("ds_params.directory", "/"), refresh_rate=("ds_params.refresh_rate", 15), ) with html.Div(classes="border-md text-left", style="height: 650px; width: 600px;"): pass Loading Loading
src/nova/trame/view/components/data_selector.py +43 −22 Original line number Diff line number Diff line Loading @@ -101,9 +101,13 @@ class DataSelector(datagrid.VGrid): self._v_model_name_in_state = v_model.split(".")[0] else: self._v_model_name_in_state = v_model[0].split(".")[0] self._directory = directory self._last_directory = self._directory self._extensions = extensions if extensions is not None else [] self._last_extensions = self._extensions self._prefix = prefix self._last_prefix = self._prefix self._refresh_rate = refresh_rate self._select_strategy = select_strategy Loading Loading @@ -267,8 +271,11 @@ class DataSelector(datagrid.VGrid): if isinstance(self._directory, tuple): @self.state.change(self._directory[0]) def on_directory_change(*args: Any, **kwargs: Any) -> None: @self.state.change(self._directory[0].split(".")[0]) def on_directory_change(**kwargs: Any) -> None: directory = rgetdictvalue(kwargs, self._directory[0]) if directory != self._last_directory: self._last_directory = directory self._vm.set_binding_parameters( get_state_param(self.state, self._directory), get_state_param(self.state, self._extensions), Loading @@ -277,8 +284,11 @@ class DataSelector(datagrid.VGrid): if isinstance(self._extensions, tuple): @self.state.change(self._extensions[0]) def on_extensions_change(*args: Any, **kwargs: Any) -> None: @self.state.change(self._extensions[0].split(".")[0]) def on_extensions_change(**kwargs: Any) -> None: extensions = rgetdictvalue(kwargs, self._extensions[0]) if extensions != self._last_extensions: self._last_extensions = extensions self._vm.set_binding_parameters( get_state_param(self.state, self._directory), get_state_param(self.state, self._extensions), Loading @@ -287,8 +297,11 @@ class DataSelector(datagrid.VGrid): if isinstance(self._prefix, tuple): @self.state.change(self._prefix[0]) def on_prefix_change(*args: Any, **kwargs: Any) -> None: @self.state.change(self._prefix[0].split(".")[0]) def on_prefix_change(**kwargs: Any) -> None: prefix = rgetdictvalue(kwargs, self._prefix) if prefix != self._last_prefix: self._last_prefix = prefix self._vm.set_binding_parameters( get_state_param(self.state, self._directory), get_state_param(self.state, self._extensions), Loading @@ -297,12 +310,20 @@ class DataSelector(datagrid.VGrid): async def _refresh_loop(self) -> None: refresh_rate: int = set_state_param(self.state, self._refresh_rate) skip = False if refresh_rate > 0: while True: await sleep(refresh_rate) if skip: continue self.refresh_contents() self.state.dirty(self._datafiles_name) refresh_rate = get_state_param(self.state, self._refresh_rate) try: refresh_rate = int(get_state_param(self.state, self._refresh_rate)) skip = False except TypeError: refresh_rate = 1 skip = True
tests/gallery/models/data_selector.py +2 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,8 @@ from pydantic import BaseModel, Field class DataSelectorBindingTest(BaseModel): """Model for testing binding parameters for DataSelector.""" prefix: str = Field(default="") directory: str = Field(default="") refresh_rate: int = Field(default=0) class DataSelectorState(BaseModel): Loading
tests/gallery/view_models/data_selector.py +1 −2 Original line number Diff line number Diff line Loading @@ -17,8 +17,7 @@ class DataSelectorVM: self.parameter_bind = binding.new_bind(self.binding_test, callback_after_update=self.on_parameter_update) def on_update(self, data: Dict[str, Any]) -> None: print("selected files:", self.model.selected_files) print("selected neutron datafiles:", self.model.selected_neutron_files) print(data, self.model) def on_parameter_update(self, data: Dict[str, Any]) -> None: print(data, self.binding_test)
tests/gallery/views/app.py +6 −4 Original line number Diff line number Diff line Loading @@ -343,20 +343,22 @@ class App(ThemedApp): vuetify.VBtn("Tooltip", v_bind="props") vuetify.VCardTitle("Navigation Components") with GridLayout(classes="mb-4", columns=1, halign="center", valign="center"): with GridLayout(classes="mb-4", columns=1, valign="center"): with vuetify.VTabs(): vuetify.VTab("Tab 1") vuetify.VTab("Tab 2") vuetify.VTab("Tab 3") vuetify.VCardTitle("Data Selection Widgets") with GridLayout(classes="mb-1", columns=2, valign="center", width=600): InputField(v_model="ds_params.directory") InputField(v_model="ds_params.refresh_rate") with html.Div(classes="border-md text-left", style="height: 650px; width: 600px;"): DataSelector( v_model="data_selector.selected_files", chips=True, directory="/", prefix=("ds_params.prefix",), refresh_rate=0, directory=("ds_params.directory", "/"), refresh_rate=("ds_params.refresh_rate", 15), ) with html.Div(classes="border-md text-left", style="height: 650px; width: 600px;"): pass Loading