private static void AddDrawablesToNode(NapaArrangementBrowserViewModel vm,
                                               ObjectBrowserNodeViewModel nodeViewModel, string[] names)
        {
            var method = vm.GetType().GetMethod("AddDrawablesToNode", BindingFlags.NonPublic | BindingFlags.Instance);

            method.Invoke(vm, new object[] { nodeViewModel, names });
        }
        private static void PopulateArrangement(NapaArrangementBrowserViewModel vm,
                                                IHierarchicalArrangement arrangement, ObjectBrowserNodeViewModel parent)
        {
            var method = vm.GetType().GetMethod("PopulateArrangement", BindingFlags.NonPublic | BindingFlags.Instance);

            method.Invoke(vm, new object[] { arrangement, parent });
        }
        private static ObjectBrowserNodeViewModel GetNode(IProjectVersion version, NapaArrangementBrowserViewModel vm,
                                                          ObjectBrowserNodeViewModel root, IEnumerable <string> path)
        {
            if (!path.Any())
            {
                return(root);
            }

            var children = GetChildren(root);
            ObjectBrowserItemViewModel node;

            if (children.TryGetValue(path.First(), out node))
            {
                return(GetNode(version, vm, node as ObjectBrowserNodeViewModel, path.Skip(1)));
            }

            var arr = version.GetArrangement(root.Name);

            Napa.Alfred.EventProxy.WithDelayedEvents(() => {
                Napa.Alfred.EventProxy.WithDelayedGMEvents(() => {
                    var subArr = GetSubArr(version, arr, path.First());
                    if (subArr == null)
                    {
                        throw new InvalidOperationException("Cannot create STR path " + string.Join(":", path));
                    }
                    PopulateArrangement(vm, subArr, root);
                });
            });
            return(GetNode(version, vm, root, path));
        }