Example #1
0
 private void DisposeDataNodes()
 {
     lock ( _dataNodes )
     {
         foreach (IntHashTable.Entry e in _dataNodes)
         {
             ResourceTreeDataNode node = (ResourceTreeDataNode)e.Value;
             node.Dispose();
         }
         _dataNodes.Clear();
     }
 }
Example #2
0
 private void RemoveNode(JetListViewNode parentNode, IResource resource)
 {
     if (parentNode.Nodes.Contains(resource))
     {
         parentNode.Nodes.Remove(resource);
     }
     if (!_listView.NodeCollection.Contains(resource))
     {
         ResourceTreeDataNode dataNode = (ResourceTreeDataNode)_dataNodes [resource.Id];
         if (dataNode != null)
         {
             dataNode.Dispose();
             lock ( _dataNodes )
             {
                 _dataNodes.Remove(resource.Id);
             }
         }
     }
 }
Example #3
0
        /// <summary>
        /// For an existing tree node (incl. the originaly-present root), sets up the sorting for that node,
        /// and expands it by adding all the "child" resources as child nodes.
        /// </summary>
        private void ExpandResource(JetListViewNode parentNode, IResource parentResource)
        {
            //////////////////
            // Apply sorting
            UserOrderSortSettings settings = null;

            // Get the per-property sort settings as a string (written to each node)
            string nodeSort = Core.ResourceTreeManager.GetResourceNodeSort(parentResource);

            if (nodeSort != null)        // Apply, if available
            {
                settings = UserOrderSortSettings.Parse(Core.ResourceStore, nodeSort);
            }
            else
            {
                settings = new UserOrderSortSettings();
            }

            // Apply the user-order sorting (it's writter as a property on the parent with an ordered list of child resources)
            settings.SetUserOrder(parentResource);

            // Submit the sorting order to the node
            _listView.NodeCollection.SetItemComparer(
                parentNode.Data
                , new ResourceComparer(null, new UserOrderResourceComparer(settings), true));

            /////////////////
            // Get Children
            ResourceTreeDataNode dataNode;

            lock ( _dataNodes )
            {
                dataNode = (ResourceTreeDataNode)_dataNodes [parentResource.Id];
                if (dataNode == null)
                {
                    IResourceList childResources = null;
                    int           parentProp     = _parentProp;
                    if (_resourceChildProvider != null)
                    {
                        childResources = _resourceChildProvider.GetChildResources(parentResource);
                    }
                    if (childResources == null)
                    {
                        childResources = parentResource.GetLinksToLive(null, _parentProp);
                    }
                    else
                    {
                        parentProp = 0;
                    }

                    dataNode = new ResourceTreeDataNode(this, _listView, parentResource, parentProp, childResources);
                    _dataNodes [parentResource.Id] = dataNode;
                }
            }

            ////////////////////
            // Submit Children
            lock (dataNode.ChildResources)
            {
                // Add 'em!
                foreach (IResource res in dataNode.ChildResources.ValidResources)
                {
                    AddNode(parentNode, res);   // This also calls an ExpandResource for that node
                }
                // Listen for changes to the children resources of the node (not to the node resource itself)
                dataNode.AttachHandlers();
            }
        }