DatagridsManager : I can see the opened folders in the Treeview
This commit is contained in:
@@ -173,7 +173,7 @@ class TreeView(MultipleInstance):
|
||||
Format: {type: "provider.icon_name"}
|
||||
"""
|
||||
self._state.icon_config = config
|
||||
|
||||
|
||||
def add_node(self, node: TreeNode, parent_id: Optional[str] = None, insert_index: Optional[int] = None):
|
||||
"""
|
||||
Add a node to the tree.
|
||||
@@ -185,6 +185,9 @@ class TreeView(MultipleInstance):
|
||||
If None, appends to end. If provided, inserts at that position.
|
||||
"""
|
||||
self._state.items[node.id] = node
|
||||
if parent_id is None and node.parent is not None:
|
||||
parent_id = node.parent
|
||||
|
||||
node.parent = parent_id
|
||||
|
||||
if parent_id and parent_id in self._state.items:
|
||||
@@ -195,12 +198,66 @@ class TreeView(MultipleInstance):
|
||||
else:
|
||||
parent.children.append(node.id)
|
||||
|
||||
def ensure_path(self, path: str):
|
||||
"""Add a node to the tree based on a path string.
|
||||
|
||||
Args:
|
||||
path: Dot-separated path string (e.g., "folder1.folder2.file")
|
||||
|
||||
Raises:
|
||||
ValueError: If path contains empty parts after stripping
|
||||
"""
|
||||
if path is None:
|
||||
raise ValueError(f"Invalid path: path is None")
|
||||
|
||||
path = path.strip().strip(".")
|
||||
if path == "":
|
||||
raise ValueError(f"Invalid path: path is empty")
|
||||
|
||||
parent_id = None
|
||||
current_nodes = [node for node in self._state.items.values() if node.parent is None]
|
||||
|
||||
path_parts = path.split(".")
|
||||
for part in path_parts:
|
||||
part = part.strip()
|
||||
|
||||
# Validate that part is not empty after stripping
|
||||
if part == "":
|
||||
raise ValueError(f"Invalid path: path contains empty parts")
|
||||
|
||||
node = [node for node in current_nodes if node.label == part]
|
||||
if len(node) == 0:
|
||||
# create the node
|
||||
node = TreeNode(label=part, type="folder")
|
||||
self.add_node(node, parent_id=parent_id)
|
||||
else:
|
||||
node = node[0]
|
||||
|
||||
current_nodes = [self._state.items[node_id] for node_id in node.children]
|
||||
parent_id = node.id
|
||||
|
||||
return parent_id
|
||||
|
||||
def get_selected_id(self):
|
||||
if self._state.selected is None:
|
||||
return None
|
||||
return self._state.items[self._state.selected].id
|
||||
|
||||
def expand_all(self):
|
||||
"""Expand all nodes that have children."""
|
||||
for node_id, node in self._state.items.items():
|
||||
if node.children and node_id not in self._state.opened:
|
||||
self._state.opened.append(node_id)
|
||||
|
||||
def clear(self):
|
||||
state = self._state.copy()
|
||||
state.items = {}
|
||||
state.opened = []
|
||||
state.selected = None
|
||||
state.editing = None
|
||||
self._state.update(state)
|
||||
return self
|
||||
|
||||
def _toggle_node(self, node_id: str):
|
||||
"""Toggle expand/collapse state of a node."""
|
||||
if node_id in self._state.opened:
|
||||
|
||||
Reference in New Issue
Block a user