Loading src/nova/trame/view/components/data_selector.py +6 −5 Original line number Diff line number Diff line Loading @@ -101,10 +101,10 @@ class DataSelector(datagrid.VGrid): with HBoxLayout(valign="center"): self._layout.filter = html.Div(classes="flex-1-1") with vuetify.VBtn( classes="mx-1", density="compact", icon=True, variant="text", click=self.refresh_file_list classes="mx-1", density="compact", icon=True, variant="text", click=self.refresh_contents ): vuetify.VIcon("mdi-refresh") vuetify.VTooltip("Refresh file list", activator="parent") vuetify.VTooltip("Refresh Contents", activator="parent") with GridLayout(columns=2, classes="flex-1-0 h-0", valign="start"): if not self._prefix: Loading Loading @@ -196,8 +196,8 @@ class DataSelector(datagrid.VGrid): self._vm.update_view() def refresh_file_list(self) -> None: self._vm.update_view() def refresh_contents(self) -> None: self._vm.update_view(refresh_directories=True) def reset(self, _: Any = None) -> None: self._reset_state() Loading @@ -212,5 +212,6 @@ class DataSelector(datagrid.VGrid): async def _refresh_loop(self) -> None: while True: await sleep(self.REFRESH_RATE) self.refresh_file_list() self.refresh_contents() self.state.dirty(self._datafiles_name) src/nova/trame/view_model/data_selector.py +12 −4 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ class DataSelectorViewModel: self.datafiles: List[Dict[str, Any]] = [] self.directories: List[Dict[str, Any]] = [] self.expanded: List[str] = [] self.expanded: Dict[str, List[str]] = {} self.state_bind = binding.new_bind(self.model.state, callback_after_update=self.on_state_updated) self.directories_bind = binding.new_bind() Loading Loading @@ -44,9 +44,16 @@ class DataSelectorViewModel: current_level["children"] = new_directories # Mark this directory as expanded and display the new content self.expanded.append(paths[-1]) self.expanded[paths[-1]] = paths self.directories_bind.update_in_view(self.directories) def reexpand_directories(self) -> None: paths_to_expand = self.expanded.values() self.expanded = {} for paths in paths_to_expand: self.expand_directory(paths) def on_state_updated(self, results: Dict[str, Any]) -> None: pass Loading @@ -54,10 +61,11 @@ class DataSelectorViewModel: self.model.set_subdirectory(subdirectory_path) self.update_view() def update_view(self) -> None: def update_view(self, refresh_directories: bool = False) -> None: self.state_bind.update_in_view(self.model.state) if not self.directories: if not self.directories or refresh_directories: self.directories = self.model.get_directories() self.reexpand_directories() self.directories_bind.update_in_view(self.directories) self.datafiles = [ Loading src/nova/trame/view_model/ornl/neutron_data_selector.py +2 −2 Original line number Diff line number Diff line Loading @@ -43,9 +43,9 @@ class NeutronDataSelectorViewModel(DataSelectorViewModel): self.reset() self.update_view() def update_view(self) -> None: def update_view(self, refresh_directories: bool = False) -> None: self.facilities_bind.update_in_view(self.model.get_facilities()) self.instruments_bind.update_in_view(self.model.get_instruments()) self.experiments_bind.update_in_view(self.model.get_experiments()) super().update_view() super().update_view(refresh_directories) Loading
src/nova/trame/view/components/data_selector.py +6 −5 Original line number Diff line number Diff line Loading @@ -101,10 +101,10 @@ class DataSelector(datagrid.VGrid): with HBoxLayout(valign="center"): self._layout.filter = html.Div(classes="flex-1-1") with vuetify.VBtn( classes="mx-1", density="compact", icon=True, variant="text", click=self.refresh_file_list classes="mx-1", density="compact", icon=True, variant="text", click=self.refresh_contents ): vuetify.VIcon("mdi-refresh") vuetify.VTooltip("Refresh file list", activator="parent") vuetify.VTooltip("Refresh Contents", activator="parent") with GridLayout(columns=2, classes="flex-1-0 h-0", valign="start"): if not self._prefix: Loading Loading @@ -196,8 +196,8 @@ class DataSelector(datagrid.VGrid): self._vm.update_view() def refresh_file_list(self) -> None: self._vm.update_view() def refresh_contents(self) -> None: self._vm.update_view(refresh_directories=True) def reset(self, _: Any = None) -> None: self._reset_state() Loading @@ -212,5 +212,6 @@ class DataSelector(datagrid.VGrid): async def _refresh_loop(self) -> None: while True: await sleep(self.REFRESH_RATE) self.refresh_file_list() self.refresh_contents() self.state.dirty(self._datafiles_name)
src/nova/trame/view_model/data_selector.py +12 −4 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ class DataSelectorViewModel: self.datafiles: List[Dict[str, Any]] = [] self.directories: List[Dict[str, Any]] = [] self.expanded: List[str] = [] self.expanded: Dict[str, List[str]] = {} self.state_bind = binding.new_bind(self.model.state, callback_after_update=self.on_state_updated) self.directories_bind = binding.new_bind() Loading Loading @@ -44,9 +44,16 @@ class DataSelectorViewModel: current_level["children"] = new_directories # Mark this directory as expanded and display the new content self.expanded.append(paths[-1]) self.expanded[paths[-1]] = paths self.directories_bind.update_in_view(self.directories) def reexpand_directories(self) -> None: paths_to_expand = self.expanded.values() self.expanded = {} for paths in paths_to_expand: self.expand_directory(paths) def on_state_updated(self, results: Dict[str, Any]) -> None: pass Loading @@ -54,10 +61,11 @@ class DataSelectorViewModel: self.model.set_subdirectory(subdirectory_path) self.update_view() def update_view(self) -> None: def update_view(self, refresh_directories: bool = False) -> None: self.state_bind.update_in_view(self.model.state) if not self.directories: if not self.directories or refresh_directories: self.directories = self.model.get_directories() self.reexpand_directories() self.directories_bind.update_in_view(self.directories) self.datafiles = [ Loading
src/nova/trame/view_model/ornl/neutron_data_selector.py +2 −2 Original line number Diff line number Diff line Loading @@ -43,9 +43,9 @@ class NeutronDataSelectorViewModel(DataSelectorViewModel): self.reset() self.update_view() def update_view(self) -> None: def update_view(self, refresh_directories: bool = False) -> None: self.facilities_bind.update_in_view(self.model.get_facilities()) self.instruments_bind.update_in_view(self.model.get_instruments()) self.experiments_bind.update_in_view(self.model.get_experiments()) super().update_view() super().update_view(refresh_directories)