Skip to content

Commit 20a07ab

Browse files
committed
Fix explorer database labels and expansion
1 parent 8fe6f5d commit 20a07ab

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

sqlit/domains/explorer/ui/mixins/tree.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,16 @@ def _schedule_timer(self: TreeMixinHost, delay_s: float, callback: Any) -> Any |
6262
pass
6363
return None
6464

65+
def _collapse_other_database_nodes(self: TreeMixinHost, node: Any) -> None:
66+
parent = getattr(node, "parent", None)
67+
if not parent:
68+
return
69+
for sibling in list(parent.children):
70+
if sibling is node:
71+
continue
72+
if self._get_node_kind(sibling) == "database" and getattr(sibling, "is_expanded", False):
73+
sibling.collapse()
74+
6575
def on_tree_node_collapsed(self: TreeMixinHost, event: Tree.NodeCollapsed) -> None:
6676
"""Save state when a node is collapsed."""
6777
tree_expansion_state.update_expanded_state(self, event.node, expanded=False)
@@ -80,6 +90,7 @@ def on_tree_node_expanded(self: TreeMixinHost, event: Tree.NodeExpanded) -> None
8090
data = node.data
8191

8292
if self._get_node_kind(node) == "database":
93+
self._collapse_other_database_nodes(node)
8394
self._ensure_database_connection_async(data.name)
8495

8596
if self._get_node_kind(node) == "connection":

sqlit/domains/explorer/ui/tree/builder.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,10 @@ def _find_connection_folder_child(host: TreeMixinHost, parent: Any, name: str) -
6262

6363
def _ensure_connection_folder_path(host: TreeMixinHost, folder_parts: list[str]) -> Any:
6464
parent = host.object_tree.root
65-
primary = getattr(getattr(host, "current_theme", None), "primary", "#7E9CD8")
6665
for part in folder_parts:
6766
node = _find_connection_folder_child(host, parent, part)
6867
if node is None:
69-
node = parent.add(f"[{primary}]📁 {part}[/]")
68+
node = parent.add(f"📁 {escape_markup(part)}")
7069
node.data = ConnectionFolderNode(name=part)
7170
node.allow_expand = True
7271
parent = node
@@ -683,10 +682,9 @@ def add_database_object_nodes(host: TreeMixinHost, parent_node: Any, database: s
683682
caps = host.current_provider.capabilities
684683
node_provider = host.current_provider.explorer_nodes
685684

686-
primary = getattr(getattr(host, "current_theme", None), "primary", "#7E9CD8")
687685
for folder in node_provider.get_root_folders(caps):
688686
if folder.requires(caps):
689-
folder_node = parent_node.add(f"[{primary}]{folder.label}[/]")
687+
folder_node = parent_node.add(escape_markup(folder.label))
690688
folder_node.data = FolderNode(folder_type=folder.kind, database=database)
691689
folder_node.allow_expand = True
692690
else:

sqlit/domains/explorer/ui/tree/expansion_state.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ def update_expanded_state(host: TreeMixinHost, node: Any, expanded: bool) -> Non
6767
expanded_paths = getattr(host, "_expanded_paths", set())
6868
if expanded:
6969
expanded_paths.add(path)
70+
if host._get_node_kind(node) == "database":
71+
parent_path = path.rsplit("/", 1)[0] if "/" in path else ""
72+
prefix = f"{parent_path}/db:" if parent_path else "db:"
73+
for item in list(expanded_paths):
74+
if item == path or item.startswith(f"{path}/"):
75+
continue
76+
if item.startswith(prefix):
77+
expanded_paths.discard(item)
7078
host._expanded_paths = expanded_paths
7179
return
7280
expanded_paths.discard(path)

sqlit/domains/explorer/ui/tree/loaders.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,12 @@ def on_folder_loaded(
276276
active_db = None
277277
if hasattr(host, "_get_effective_database"):
278278
active_db = host._get_effective_database()
279-
primary = getattr(getattr(host, "current_theme", None), "primary", "#7E9CD8")
280279
for db in items:
281280
if active_db and str(db).lower() == str(active_db).lower():
282-
db_label = f"[#4ADE80]* {escape_markup(str(db))}[/]"
281+
primary = getattr(getattr(host, "current_theme", None), "primary", "#7E9CD8")
282+
db_label = f"[{primary}]* {escape_markup(str(db))}[/]"
283283
else:
284-
db_label = f"[{primary}]{escape_markup(str(db))}[/]"
284+
db_label = escape_markup(str(db))
285285
db_node = node.add(db_label)
286286
db_node.data = DatabaseNode(name=str(db))
287287
db_node.allow_expand = True

0 commit comments

Comments
 (0)