From 2287ee65a677ed983b4f07b81b07a83f7f5ec85b Mon Sep 17 00:00:00 2001 From: NeilClack Date: Tue, 31 Mar 2026 09:13:50 -0500 Subject: [PATCH] Force sub-categories to be expanded always --- internal/page/proclamationOptions.go | 30 ++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/internal/page/proclamationOptions.go b/internal/page/proclamationOptions.go index 11f7155..9958526 100644 --- a/internal/page/proclamationOptions.go +++ b/internal/page/proclamationOptions.go @@ -107,13 +107,19 @@ func (p *ProclamationOptions) Init(ctx *PageCtx) error { func (p *ProclamationOptions) createFlatItem(name, id string, isCat bool, depth int) *FlatItem { text := name - if isCat { + if isCat && depth == 0 { text = "[+] " + name } itemScale := float32(32) / float32(p.Context.CfgPtr.StandardFontSize) lbl, _ := NewStringItem(text, p.font, colors.White) lbl.Scale(itemScale) - return &FlatItem{Label: lbl, ID: id, IsCategory: isCat, Depth: depth} + return &FlatItem{ + Label: lbl, + ID: id, + IsCategory: isCat, + IsSubCategory: isCat && depth > 0, + Depth: depth, + } } func (p *ProclamationOptions) layout() { @@ -140,8 +146,8 @@ func (p *ProclamationOptions) layout() { func (p *ProclamationOptions) toggleExpansion(index int) { item := p.allItems[index] - if !item.IsCategory { - return + if !item.IsCategory || item.IsSubCategory { + return // Subcategories are never manually toggled } pureName := item.Label.content[4:] @@ -168,7 +174,9 @@ func (p *ProclamationOptions) expand(index int) { var cats []db.ProclamationCategory p.Context.DbPtr.Where("parent_id = ?", parentID).Find(&cats) for _, c := range cats { - newItems = append(newItems, p.createFlatItem(c.Name, fmt.Sprint(c.ID), true, parent.Depth+1)) + fi := p.createFlatItem(c.Name, fmt.Sprint(c.ID), true, parent.Depth+1) + fi.Expanded = true // Mark expanded so collapse state is consistent + newItems = append(newItems, fi) } var procs []db.Proclamation @@ -179,6 +187,16 @@ func (p *ProclamationOptions) expand(index int) { tail := append([]*FlatItem{}, p.allItems[index+1:]...) p.allItems = append(p.allItems[:index+1], append(newItems, tail...)...) + + // Auto-expand any subcategories just inserted + // Walk forward: for each newly inserted category, expand it in-place + i := index + 1 + for i < len(p.allItems) && p.allItems[i].Depth > parent.Depth { + if p.allItems[i].IsCategory && p.allItems[i].Depth > 0 { + p.expand(i) // Recurse — inserts children in-place, loop will walk into them + } + i++ + } } func (p *ProclamationOptions) collapse(index int) { @@ -232,7 +250,7 @@ func (p *ProclamationOptions) HandleEvent(event *sdl.Event) error { item := p.allItems[p.highlightIndex] if !item.IsCategory { p.activeMap[item.ID] = !p.activeMap[item.ID] - } else { + } else if !item.IsSubCategory { p.toggleExpansion(p.highlightIndex) } case sdl.K_BACKSPACE, sdl.K_ESCAPE: