feat(ui): add batch operations to context composition panel

This commit is contained in:
2026-05-10 13:09:15 -04:00
parent cba79350de
commit 51f804debc
+72 -1
View File
@@ -204,6 +204,7 @@ class App:
self.node_editor_ctx = ed.create_editor(self.node_editor_config)
self.ui_selected_ticket_id: Optional[str] = None
self.ui_selected_tickets: set[str] = set()
self.ui_selected_context_files: set[str] = set()
self.ui_new_ticket_priority: str = 'medium'
self._autofocus_response_tab = False
gui_cfg = self.config.get("gui", {})
@@ -2527,6 +2528,64 @@ class App:
def _render_context_composition_panel(self) -> None:
imgui.text("Context Composition")
imgui.separator()
# Batch Action Bar
imgui.text("Batch:")
imgui.same_line()
if imgui.button("Full##batch"):
for f in self.files:
f_path = f.path if hasattr(f, "path") else str(f)
if f_path in self.ui_selected_context_files:
f.force_full = True
f.auto_aggregate = False
if hasattr(f, "ast_signatures"):
f.ast_signatures = False
f.ast_definitions = False
imgui.same_line()
if imgui.button("Agg##batch"):
for f in self.files:
f_path = f.path if hasattr(f, "path") else str(f)
if f_path in self.ui_selected_context_files:
f.auto_aggregate = True
f.force_full = False
if hasattr(f, "ast_signatures"):
f.ast_signatures = False
f.ast_definitions = False
imgui.same_line()
if imgui.button("Sig##batch"):
for f in self.files:
f_path = f.path if hasattr(f, "path") else str(f)
if f_path in self.ui_selected_context_files:
if hasattr(f, "ast_signatures"):
f.ast_signatures = True
f.force_full = False
f.auto_aggregate = False
f.ast_definitions = False
imgui.same_line()
if imgui.button("Def##batch"):
for f in self.files:
f_path = f.path if hasattr(f, "path") else str(f)
if f_path in self.ui_selected_context_files:
if hasattr(f, "ast_definitions"):
f.ast_definitions = True
f.force_full = False
f.auto_aggregate = False
f.ast_signatures = False
imgui.same_line()
if imgui.button("Remove##batch"):
new_files = []
for f in self.files:
f_path = f.path if hasattr(f, "path") else str(f)
if f_path not in self.ui_selected_context_files:
new_files.append(f)
self.files = new_files
self.ui_selected_context_files.clear()
imgui.same_line()
if imgui.button("Clear Selection"):
self.ui_selected_context_files.clear()
imgui.dummy(imgui.ImVec2(0, 4))
if imgui.begin_table("ctx_comp_table", 2, imgui.TableFlags_.resizable | imgui.TableFlags_.borders):
imgui.table_setup_column("File", imgui.TableColumnFlags_.width_stretch)
imgui.table_setup_column("Flags", imgui.TableColumnFlags_.width_fixed, 200)
@@ -2534,7 +2593,19 @@ class App:
for i, f_item in enumerate(self.files):
imgui.table_next_row()
imgui.table_set_column_index(0)
imgui.text(f_item.path if hasattr(f_item, "path") else str(f_item))
# Checkbox for selection
f_path = f_item.path if hasattr(f_item, "path") else str(f_item)
is_sel = f_path in self.ui_selected_context_files
changed_sel, is_sel = imgui.checkbox(f"##sel{i}", is_sel)
if changed_sel:
if is_sel:
self.ui_selected_context_files.add(f_path)
else:
self.ui_selected_context_files.discard(f_path)
imgui.same_line()
imgui.text(f_path)
imgui.table_set_column_index(1)
if hasattr(f_item, "auto_aggregate"):
changed_agg, f_item.auto_aggregate = imgui.checkbox(f"Agg##cc{i}", f_item.auto_aggregate)