fix(gui): Implement correct UX for discussion takes tabs and combo box

This commit is contained in:
2026-03-21 10:55:29 -04:00
parent dcf10a55b3
commit f770a4e093
3 changed files with 46 additions and 21 deletions

View File

@@ -2194,18 +2194,17 @@ class AppController:
def _branch_discussion(self, index: int) -> None:
self._flush_disc_entries_to_project()
# Generate a unique branch name
base_name = f"{self.active_discussion}_take"
base_name = self.active_discussion.split("_take_")[0]
counter = 1
new_name = f"{base_name}_{counter}"
new_name = f"{base_name}_take_{counter}"
disc_sec = self.project.get("discussion", {})
discussions = disc_sec.get("discussions", {})
while new_name in discussions:
counter += 1
new_name = f"{base_name}_{counter}"
new_name = f"{base_name}_take_{counter}"
project_manager.branch_discussion(self.project, self.active_discussion, new_name, index)
self._switch_discussion(new_name)
def _rename_discussion(self, old_name: str, new_name: str) -> None:
disc_sec = self.project.get("discussion", {})
discussions = disc_sec.get("discussions", {})

View File

@@ -2309,17 +2309,39 @@ def hello():
return
if not self.is_viewing_prior_session and imgui.collapsing_header("Discussions", imgui.TreeNodeFlags_.default_open):
names = self._get_discussion_names()
grouped_discussions = {}
for name in names:
base = name.split("_take_")[0]
grouped_discussions.setdefault(base, []).append(name)
active_base = self.active_discussion.split("_take_")[0]
if active_base not in grouped_discussions:
active_base = names[0] if names else ""
base_names = sorted(grouped_discussions.keys())
if imgui.begin_combo("##disc_sel", active_base):
for bname in base_names:
is_selected = (bname == active_base)
if imgui.selectable(bname, is_selected)[0]:
target = bname if bname in names else grouped_discussions[bname][0]
if target != self.active_discussion:
self._switch_discussion(target)
if is_selected:
imgui.set_item_default_focus()
imgui.end_combo()
current_takes = grouped_discussions.get(active_base, [])
if imgui.begin_tab_bar("discussion_takes_tabs"):
for name in names:
# Only force selection if active_discussion changed externally
flags = imgui.TabItemFlags_.set_selected if name == self.active_discussion else 0
opened, _ = imgui.begin_tab_item(name, None, flags)
for take_name in current_takes:
label = "Original" if take_name == active_base else take_name.replace(f"{active_base}_", "").replace("_", " ").title()
flags = imgui.TabItemFlags_.set_selected if take_name == self.active_discussion else 0
opened, _ = imgui.begin_tab_item(f"{label}###{take_name}", None, flags)
if opened:
if name != self.active_discussion:
self._switch_discussion(name)
if take_name != self.active_discussion:
self._switch_discussion(take_name)
imgui.end_tab_item()
if imgui.begin_tab_item("Synthesis")[0]:
if imgui.begin_tab_item("Synthesis###Synthesis"):
self._render_synthesis_panel()
imgui.end_tab_item()