main: recursively load all nav state at connection time
This commit is contained in:
parent
3d185033f3
commit
a817e5fa21
29
main.go
29
main.go
@ -311,31 +311,41 @@ func (f *TMainForm) OnNavExpanding(sender vcl.IObject, node *vcl.TTreeNode, allo
|
||||
|
||||
ndata := (*navData)(node.Data())
|
||||
|
||||
if ndata.childrenLoaded {
|
||||
err := f.NavLoadChildren(node, ndata)
|
||||
if err != nil {
|
||||
vcl.ShowMessage(err.Error())
|
||||
*allowExpansion = false // Permanently block
|
||||
return
|
||||
}
|
||||
|
||||
*allowExpansion = node.HasChildren()
|
||||
}
|
||||
|
||||
func (f *TMainForm) NavLoadChildren(node *vcl.TTreeNode, ndata *navData) error {
|
||||
|
||||
if ndata.childrenLoaded {
|
||||
return nil // Nothing to do
|
||||
}
|
||||
|
||||
// Find the child buckets from this point under the element
|
||||
nextBucketNames, err := ndata.ld.NavChildren(ndata)
|
||||
if err != nil {
|
||||
vcl.ShowMessage(fmt.Sprintf("Failed to find child buckets under %q: %s", strings.Join(ndata.bucketPath, `/`), err.Error()))
|
||||
*allowExpansion = false
|
||||
return
|
||||
return fmt.Errorf("Failed to find child buckets under %q: %w", strings.Join(ndata.bucketPath, `/`), err)
|
||||
}
|
||||
|
||||
ndata.childrenLoaded = true // don't repeat this work
|
||||
|
||||
if len(nextBucketNames) == 0 {
|
||||
node.SetHasChildren(false)
|
||||
*allowExpansion = false
|
||||
|
||||
} else {
|
||||
node.SetHasChildren(true)
|
||||
|
||||
// Populate LCL child nodes
|
||||
for _, bucketName := range nextBucketNames {
|
||||
|
||||
node := f.Buckets.Items().AddChild(node, formatUtf8([]byte(bucketName)))
|
||||
node.SetHasChildren(true) // dynamically populate in OnNavExpanding
|
||||
// node.SetHasChildren(true) // dynamically populate in OnNavExpanding
|
||||
node.SetImageIndex(imgTable)
|
||||
node.SetSelectedIndex(imgTable)
|
||||
navData := &navData{
|
||||
@ -348,8 +358,11 @@ func (f *TMainForm) OnNavExpanding(sender vcl.IObject, node *vcl.TTreeNode, allo
|
||||
node.SetData(unsafe.Pointer(navData))
|
||||
|
||||
ndata.ld.Keepalive(navData)
|
||||
}
|
||||
|
||||
*allowExpansion = true
|
||||
// Recurse to see if it has any children of its own
|
||||
f.NavLoadChildren(node, ndata)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user