Merge branch 'dev' into search-proclamations
This commit is contained in:
@@ -110,13 +110,19 @@ func (p *ProclamationOptions) Init(ctx *PageCtx) error {
|
|||||||
|
|
||||||
func (p *ProclamationOptions) createFlatItem(name, id string, isCat bool, depth int) *FlatItem {
|
func (p *ProclamationOptions) createFlatItem(name, id string, isCat bool, depth int) *FlatItem {
|
||||||
text := name
|
text := name
|
||||||
if isCat {
|
if isCat && depth == 0 {
|
||||||
text = "[+] " + name
|
text = "[+] " + name
|
||||||
}
|
}
|
||||||
itemScale := float32(32) / float32(p.Context.CfgPtr.StandardFontSize)
|
itemScale := float32(32) / float32(p.Context.CfgPtr.StandardFontSize)
|
||||||
lbl, _ := NewStringItem(text, p.font, colors.White)
|
lbl, _ := NewStringItem(text, p.font, colors.White)
|
||||||
lbl.Scale(itemScale)
|
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() {
|
func (p *ProclamationOptions) layout() {
|
||||||
@@ -143,8 +149,8 @@ func (p *ProclamationOptions) layout() {
|
|||||||
|
|
||||||
func (p *ProclamationOptions) toggleExpansion(index int) {
|
func (p *ProclamationOptions) toggleExpansion(index int) {
|
||||||
item := p.allItems[index]
|
item := p.allItems[index]
|
||||||
if !item.IsCategory {
|
if !item.IsCategory || item.IsSubCategory {
|
||||||
return
|
return // Subcategories are never manually toggled
|
||||||
}
|
}
|
||||||
|
|
||||||
pureName := item.Label.content[4:]
|
pureName := item.Label.content[4:]
|
||||||
@@ -171,7 +177,9 @@ func (p *ProclamationOptions) expand(index int) {
|
|||||||
var cats []db.ProclamationCategory
|
var cats []db.ProclamationCategory
|
||||||
p.Context.DbPtr.Where("parent_id = ?", parentID).Find(&cats)
|
p.Context.DbPtr.Where("parent_id = ?", parentID).Find(&cats)
|
||||||
for _, c := range 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
|
var procs []db.Proclamation
|
||||||
@@ -182,6 +190,16 @@ func (p *ProclamationOptions) expand(index int) {
|
|||||||
|
|
||||||
tail := append([]*FlatItem{}, p.allItems[index+1:]...)
|
tail := append([]*FlatItem{}, p.allItems[index+1:]...)
|
||||||
p.allItems = append(p.allItems[:index+1], append(newItems, tail...)...)
|
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) {
|
func (p *ProclamationOptions) collapse(index int) {
|
||||||
@@ -235,7 +253,7 @@ func (p *ProclamationOptions) HandleEvent(event *sdl.Event) error {
|
|||||||
item := p.allItems[p.highlightIndex]
|
item := p.allItems[p.highlightIndex]
|
||||||
if !item.IsCategory {
|
if !item.IsCategory {
|
||||||
p.activeMap[item.ID] = !p.activeMap[item.ID]
|
p.activeMap[item.ID] = !p.activeMap[item.ID]
|
||||||
} else {
|
} else if !item.IsSubCategory {
|
||||||
p.toggleExpansion(p.highlightIndex)
|
p.toggleExpansion(p.highlightIndex)
|
||||||
}
|
}
|
||||||
case sdl.K_BACKSPACE, sdl.K_ESCAPE:
|
case sdl.K_BACKSPACE, sdl.K_ESCAPE:
|
||||||
|
|||||||
Reference in New Issue
Block a user