From fca9392f6534fb2762da52fa9a458f55377be62f Mon Sep 17 00:00:00 2001 From: Ed_ Date: Sun, 10 May 2026 18:36:01 -0400 Subject: [PATCH] trying ot make files & media less shit --- src/gui_2.py | 77 +++++++++++++++++++++++++++++++++++++++++---------- src/models.py | 1 + 2 files changed, 64 insertions(+), 14 deletions(-) diff --git a/src/gui_2.py b/src/gui_2.py index b594d99..520056b 100644 --- a/src/gui_2.py +++ b/src/gui_2.py @@ -876,20 +876,69 @@ class App: if opened: if exp: avail = imgui.get_content_region_avail().y - files_hdr = imgui.collapsing_header("Files") - shots_hdr = imgui.collapsing_header("Screenshots") - num_open = (1 if files_hdr else 0) + (1 if shots_hdr else 0) - section_h = avail / max(num_open, 1) if num_open > 0 else avail - section_h = max(section_h, 100) - # BEGIN Files section - if files_hdr: - self._render_files_panel(section_h - 80) - # END Files section - # BEGIN Screenshots section - if shots_hdr: - self._render_screenshots_panel(section_h - 80) - # END Screenshots section - imgui.end() + if not hasattr(self, 'files_screenshots_split'): + self.files_screenshots_split = 0.65 + split_y = int(avail * self.files_screenshots_split) + if imgui.collapsing_header("Files", imgui.TreeNodeFlags_.default_open): + imgui.begin_child("Files_child", imgui.ImVec2(-1, split_y), True) + if not hasattr(self, 'files_last_selected'): + self.files_last_selected = -1 + if imgui.begin_table("files_table", 4, imgui.TableFlags_.resizable | imgui.TableFlags_.borders): + imgui.table_setup_column("", imgui.TableColumnFlags_.width_fixed, 25) + imgui.table_setup_column("Path", imgui.TableColumnFlags_.width_stretch) + imgui.table_setup_column("Agg", imgui.TableColumnFlags_.width_fixed, 50) + imgui.table_setup_column("Full", imgui.TableColumnFlags_.width_fixed, 50) + imgui.table_headers_row() + self.files.sort(key=lambda f: f.path.lower() if hasattr(f, 'path') else str(f).lower()) + for i, f_item in enumerate(self.files): + imgui.table_next_row() + imgui.table_set_column_index(0) + clicked, f_item.selected = imgui.checkbox(f"##{i}", f_item.selected) + if clicked: + if imgui.is_key_down(imgui.Key.shift) and self.files_last_selected >= 0: + start_i = min(self.files_last_selected, i) + end_i = max(self.files_last_selected, i) + for j in range(start_i, end_i + 1): + self.files[j].selected = True + self.files_last_selected = i + imgui.table_set_column_index(1) + imgui.text(f_item.path if hasattr(f_item, 'path') else str(f_item)) + imgui.table_set_column_index(2) + if hasattr(f_item, 'auto_aggregate'): + changed_agg, f_item.auto_aggregate = imgui.checkbox(f"##agg{i}", f_item.auto_aggregate) + imgui.table_set_column_index(3) + if hasattr(f_item, 'force_full'): + changed_full, f_item.force_full = imgui.checkbox(f"##full{i}", f_item.force_full) + imgui.end_table() + if imgui.button("Add Files##addf"): + r = hide_tk_root() + paths = filedialog.askopenfilenames() + r.destroy() + for p in paths: + if p not in [f.path if hasattr(f, 'path') else f for f in self.files]: + self.files.append(models.FileItem(path=p)) + imgui.same_line() + if imgui.button("Del Selected##dels"): + self.files = [f for f in self.files if not f.selected] + imgui.end_child() + imgui.separator() + if imgui.collapsing_header("Screenshots", imgui.TreeNodeFlags_.default_open): + imgui.begin_child("Shots_child", imgui.ImVec2(-1, -1), True) + for i, s in enumerate(self.screenshots): + if imgui.button(f"x##s{i}"): + self.screenshots.pop(i) + break + imgui.same_line() + imgui.text(s) + if imgui.button("Add Screenshots##adds"): + r = hide_tk_root() + paths = filedialog.askopenfilenames(filetypes=[("Images", "*.png *.jpg *.jpeg *.gif *.bmp *.webp"), ("All", "*.*")]) + r.destroy() + for p in paths: + if p not in self.screenshots: + self.screenshots.append(p) + imgui.end_child() + imgui.end() # END Files & Media window if self.show_windows.get("AI Settings", False): exp, opened = imgui.begin("AI Settings", self.show_windows["AI Settings"]) diff --git a/src/models.py b/src/models.py index 66bc4ca..957ea82 100644 --- a/src/models.py +++ b/src/models.py @@ -495,6 +495,7 @@ class FileItem: path: str auto_aggregate: bool = True force_full: bool = False + selected: bool = False ast_signatures: bool = False ast_definitions: bool = False ast_mask: dict[str, str] = field(default_factory=dict)