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())
|
ndata := (*navData)(node.Data())
|
||||||
|
|
||||||
if ndata.childrenLoaded {
|
err := f.NavLoadChildren(node, ndata)
|
||||||
|
if err != nil {
|
||||||
|
vcl.ShowMessage(err.Error())
|
||||||
|
*allowExpansion = false // Permanently block
|
||||||
return
|
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
|
// Find the child buckets from this point under the element
|
||||||
nextBucketNames, err := ndata.ld.NavChildren(ndata)
|
nextBucketNames, err := ndata.ld.NavChildren(ndata)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
vcl.ShowMessage(fmt.Sprintf("Failed to find child buckets under %q: %s", strings.Join(ndata.bucketPath, `/`), err.Error()))
|
return fmt.Errorf("Failed to find child buckets under %q: %w", strings.Join(ndata.bucketPath, `/`), err)
|
||||||
*allowExpansion = false
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ndata.childrenLoaded = true // don't repeat this work
|
ndata.childrenLoaded = true // don't repeat this work
|
||||||
|
|
||||||
if len(nextBucketNames) == 0 {
|
if len(nextBucketNames) == 0 {
|
||||||
node.SetHasChildren(false)
|
node.SetHasChildren(false)
|
||||||
*allowExpansion = false
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
node.SetHasChildren(true)
|
||||||
|
|
||||||
// Populate LCL child nodes
|
// Populate LCL child nodes
|
||||||
for _, bucketName := range nextBucketNames {
|
for _, bucketName := range nextBucketNames {
|
||||||
|
|
||||||
node := f.Buckets.Items().AddChild(node, formatUtf8([]byte(bucketName)))
|
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.SetImageIndex(imgTable)
|
||||||
node.SetSelectedIndex(imgTable)
|
node.SetSelectedIndex(imgTable)
|
||||||
navData := &navData{
|
navData := &navData{
|
||||||
@ -348,8 +358,11 @@ func (f *TMainForm) OnNavExpanding(sender vcl.IObject, node *vcl.TTreeNode, allo
|
|||||||
node.SetData(unsafe.Pointer(navData))
|
node.SetData(unsafe.Pointer(navData))
|
||||||
|
|
||||||
ndata.ld.Keepalive(navData)
|
ndata.ld.Keepalive(navData)
|
||||||
|
|
||||||
|
// Recurse to see if it has any children of its own
|
||||||
|
f.NavLoadChildren(node, ndata)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*allowExpansion = true
|
return nil
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user