Beispiel #1
0
        private AssetTreeNode ConvertDiskNode(AssetTreeNode tn)
        {
            AssetTreeNode newNode = new AssetTreeNode(tn.Text);

            newNode.InSelectedTree = true;
            newNode.ForeColor      = Color.Red;

            newNode.IsAFile           = tn.IsAFile;
            newNode.IsAFolder         = tn.IsAFolder;
            newNode.IsAnAssetFilename = tn.IsAnAssetFilename;
            newNode.MasterNode        = tn.MasterNode;
            newNode.DiskNode          = tn.DiskNode;
            newNode.SelectedNode      = tn.SelectedNode;
            newNode.FileFullPath      = tn.FileFullPath;
            newNode.RelativePath      = tn.RelativePath;

            if (newNode.IsAFolder)
            {
                newNode.ImageIndex         = CLOSEDFOLDER_INDEX;
                newNode.SelectedImageIndex = CLOSEDFOLDER_INDEX;
            }
            else
            {
                newNode.ImageIndex         = QUESTION_INDEX;
                newNode.SelectedImageIndex = QUESTION_INDEX;
            }

            // link everything together
            newNode.DiskNode   = tn;
            newNode.MasterNode = tn.MasterNode;
            tn.SelectedNode    = newNode;

            return(newNode);
        }
Beispiel #2
0
        private AssetTreeNode CreateTreeFromDisk(string rootPath, string path, BackgroundWorker worker)
        {
            if (Directory.Exists(path))
            {
                // Show the relative path so we have more real estate in the progress dialog
                string relativePath = DosUtils.PathMakeRelativePath(rootPath, path);
                worker.ReportProgress(0, "Loading:\n" + relativePath);

                AssetTreeNode node = CreateFolderNode(path);

                //Add subdirectories
                foreach (string subdir in Directory.GetDirectories(path))
                {
                    node.Nodes.Add(CreateTreeFromDisk(rootPath, subdir, worker));
                }

                //Add files
                foreach (string file in Directory.GetFiles(path))
                {
                    node.Nodes.Add(CreateFileNode(file, path));
                }

                return(node);
            }

            return(null);
        }
Beispiel #3
0
        private void SelectedTreeView_DragDrop(object sender, DragEventArgs args)
        {
            AssetTreePlacerDragObject dragObj = args.Data.GetData(typeof(AssetTreePlacerDragObject)) as AssetTreePlacerDragObject;

            if (dragObj == null)
            {
                return;
            }

            Cursor.Current = Cursors.WaitCursor;

            if (dragObj.source == AssetTreePlacerDragObject.DragObjectSource.DISKTREEVIEW)
            {
                // place nodes in selected tree
                ArrayList roots = AssetTreeNode.GetUniqueRootNodes(dragObj.nodeList);

                foreach (TreeNode root in roots)
                {
                    if (!root.Checked)
                    {
                        root.Checked = true;
                    }
                }
            }
        }
Beispiel #4
0
        private classTreeNode EncodeTree(AssetTreeNode tn, MOG_Properties props, int dialogId)
        {
            classTreeNode classNode = new classTreeNode(tn.Text);

            classNode.ImageIndex         = BLUEDOT_INDEX;
            classNode.SelectedImageIndex = BLUEDOT_INDEX;

            // Get a local handle for our progress dialog
            MOG_Progress.ProgressUpdate(dialogId, tn.FullPath);

            // if this is an asset filename node?
            if (tn.IsAnAssetFilename)
            {
                classNode.Text                = classNode.Text;
                classNode.ForeColor           = Color.Blue;
                classNode.ImageIndex          = ARROW_INDEX;
                classNode.SelectedImageIndex  = ARROW_INDEX;
                classNode.IsAssetFilenameNode = true;

                // Inherit Properties from parent
                // 'props' needs to be cloned or else all of these children assets will share the same Properties!!!
                classNode.props = props;

                // Make list o' children
                foreach (AssetTreeNode fileNode in tn.fileNodes)
                {
                    if (fileNode.IsAFile)
                    {
                        classNode.importFiles.Add(fileNode.FileFullPath);
                    }
                }

                // setup gamedatapath
                string assetDirectoryPath = MOG.CONTROLLER.CONTROLLERASSET.MOG_ControllerAsset.GetCommonDirectoryPath(this.projectRootPath, classNode.importFiles);
                string relativePath       = "";
                if (assetDirectoryPath.Length > this.projectRootPath.Length)
                {
                    relativePath = assetDirectoryPath.Substring(this.projectRootPath.Length + 1);
                }
                classNode.props.SyncTargetPath = relativePath;

                // add it to the list of asset filename nodes for later processing
                this.assetFilenameNodes.Add(classNode);

                return(classNode);                              // don't do children of an asset filename node
            }

            // Use our properties to pass along to our children
            props = MOG_ControllerProject.GetClassificationProperties(tn.FullPath.Replace(tn.TreeView.PathSeparator, "~"));
            props.SetImmeadiateMode(true);
            classNode.props = props;

            // Loop through all of our children nodes sending them our Properties
            foreach (AssetTreeNode subNode in tn.Nodes)
            {
                classNode.Nodes.Add(EncodeTree(subNode, props, dialogId));
            }

            return(classNode);
        }
Beispiel #5
0
        public void AddTreeFromDisk(string path)
        {
            if (Directory.Exists(path))
            {
// Removed because this double progress dialog was crashing us...besides, reporting path to user is progress enough for now
//				ProgressDialog progress = new ProgressDialog("Counting Subdirectories", "Calculating...", CountSubdirs_Worker, path, false);
//				if (progress.ShowDialog(this) == DialogResult.OK)
//				{
//					int subdirs = (int)progress.WorkerResult;

                List <object> args = new List <object>();
                args.Add(path);
//					args.Add(subdirs);

                ProgressDialog progress = new ProgressDialog("Loading Folders", "Please wait while MOG loads the directory tree", CreateTreeFromDisk_Worker, args, true);
                if (progress.ShowDialog(this) == DialogResult.OK)
                {
                    // Build the list of children nodes under the root directory
                    AssetTreeNode parentnode = progress.WorkerResult as AssetTreeNode;
                    // Bring in all of the children nodes so the root directory node won't confuse the user
                    foreach (AssetTreeNode node in parentnode.Nodes)
                    {
                        Nodes.Add(node);
                    }
                }
//				}
            }
        }
        void Add(Asset resource, TreeNodeCollection nodes, Action <double> progressUpdateCallback, double percentOffset, double percentPart)
        {
            if (progressUpdateCallback != null)
            {
                progressUpdateCallback(percentOffset);
            }

            TreeNode node = new AssetTreeNode(resource);

            nodes.Add(node);

            if (resource is FolderAsset)
            {
                if (resource.Children.Count == 1)
                {
                    node.Expand();
                }

                double childPercentOffset = 0, childPercentPart = percentPart / resource.Children.Count;
                foreach (Asset child in resource.Children)
                {
                    Add(child, node.Nodes, progressUpdateCallback, percentOffset + childPercentOffset, percentPart);
                    childPercentOffset += childPercentPart;
                }
            }
        }
Beispiel #7
0
 private void PropagateCheckStateDown(AssetTreeNode tn)
 {
     foreach (AssetTreeNode subNode in tn.Nodes)
     {
         subNode.Checked = tn.Checked;
         PropagateCheckStateDown(subNode);
     }
 }
Beispiel #8
0
        private classTreeNode EncodeNode(AssetTreeNode atn, MOG_Properties props)
        {
            classTreeNode classNode = new classTreeNode(atn.Text);

            classNode.ImageIndex         = BLUEDOT_INDEX;
            classNode.SelectedImageIndex = BLUEDOT_INDEX;
            classNode.props = null;

            // if this is an asset filename node?
            if (atn.IsAnAssetFilename)
            {
                classNode.Text                = classNode.Text;
                classNode.ForeColor           = Color.Blue;
                classNode.ImageIndex          = ARROW_INDEX;
                classNode.SelectedImageIndex  = ARROW_INDEX;
                classNode.IsAssetFilenameNode = true;

                // Make list o' children
                foreach (AssetTreeNode fileNode in atn.fileNodes)
                {
                    if (fileNode.IsAFile)
                    {
                        classNode.importFiles.Add(fileNode.FileFullPath);
                    }
                }

                // Check if we have a props?
                if (classNode.props != null)
                {
                    // Setup SyncTargetPath Property
                    string relativePath       = "";
                    string assetDirectoryPath = MOG.CONTROLLER.CONTROLLERASSET.MOG_ControllerAsset.GetCommonDirectoryPath(this.projectRootPath, classNode.importFiles);
                    if (assetDirectoryPath.Length > this.projectRootPath.Length)
                    {
                        relativePath = assetDirectoryPath.Substring(this.projectRootPath.Length + 1);
                    }

                    // Set our SyncTargetPath
                    classNode.props.SyncTargetPath = relativePath;
                }

                // add it to the list of asset filename nodes for later processing
                this.assetFilenameNodes.Add(classNode);

                return(classNode);                              // don't do children of an asset filename node
            }

            classNode.FilledIn      = false;
            classNode.assetTreeNode = atn;

            // add a dummy child node if necessary
            if (atn.Nodes.Count > 0)
            {
                classNode.Nodes.Add(new classTreeNode("DUMMY_NODE"));
            }

            return(classNode);
        }
Beispiel #9
0
        private void DeleteAssetNodes(AssetTreeNode tn)
        {
            DeleteAssetNodes(tn.Nodes);

            if (tn.IsAFile && tn.AssetNode != null)
            {
                ((AssetTreeView)tn.AssetNode.TreeView).RemoveNode(tn.AssetNode);
            }
        }
Beispiel #10
0
        private AssetTreeNode CreateFolderNode(string path)
        {
            AssetTreeNode node = new AssetTreeNode(Path.GetFileName(path), CLOSEDFOLDER_INDEX, Color.DarkGoldenrod);

            node.FileFullPath = path;
            node.InDiskTree   = true;
            node.IsAFolder    = true;
            return(node);
        }
Beispiel #11
0
        private void miExpandToRed_Click(object sender, EventArgs args)
        {
            AssetTreeNode targetNode = GetNodeAt(PointToClient(new Point(Cursor.Position.X, Cursor.Position.Y))) as AssetTreeNode;

            ShowUnplaced(targetNode);
            if (targetNode != null)
            {
                targetNode.EnsureVisible();
            }
        }
Beispiel #12
0
        private AssetTreeNode CreateFileNode(string path, string basePath)
        {
            AssetTreeNode node = new AssetTreeNode(Path.GetFileName(path), FILE_INDEX, Color.DarkMagenta);

            node.InDiskTree   = true;
            node.FileFullPath = path;
            node.RelativePath = path.ToLower().Replace(basePath.ToLower(), "").Trim("\\".ToCharArray());
            node.IsAFile      = true;
            return(node);
        }
Beispiel #13
0
        public void PropagateCheckStateUp(AssetTreeNode tn)
        {
            AssetTreeNode parentNode = tn.Parent as AssetTreeNode;

            while (parentNode != null)
            {
                parentNode.Checked = tn.Checked;
                parentNode         = parentNode.Parent as AssetTreeNode;
            }
        }
Beispiel #14
0
        private void DeleteNode(AssetTreeNode selectNode)
        {
            if (selectNode == null)
            {
                return;
            }

            // recurse first
            foreach (AssetTreeNode tn in selectNode.Nodes)
            {
                DeleteNode(tn);
            }

            try
            {
                // now do me
                if (selectNode.AssetNode != null)
                {
                    // deal with the asset node
                    if (selectNode.AssetNode.IsAFile)
                    {
                        selectNode.AssetNode.AssetFilenameNode.fileNodes.Remove(selectNode.AssetNode);
                        if (this.assetTreeView != null)
                        {
                            this.assetTreeView.RebuildSubStructure(selectNode.AssetNode.AssetFilenameNode);
                        }

                        if (selectNode.AssetNode.AssetFilenameNode.fileNodes.Count == 0 && selectNode.AssetNode.AssetFilenameNode.TreeView != null)
                        {
                            selectNode.AssetNode.AssetFilenameNode.Remove();
                        }
                    }
                    else if (selectNode.AssetNode.IsAnAssetFilename && selectNode.AssetNode.fileNodes.Count == 0 && selectNode.AssetNode.TreeView != null)
                    {
                        selectNode.AssetNode.Remove();
                    }
                    else if (selectNode.AssetNode.IsAClassification && selectNode.AssetNode.Nodes.Count == 0 && selectNode.AssetNode.AutoGenerated && selectNode.AssetNode.TreeView != null)
                    {
                        selectNode.AssetNode.Remove();
                    }
                }

                selectNode.DiskNode.SelectedNode = null;
            }
            catch (Exception e)
            {
                MOG_Prompt.PromptResponse("Error", e.Message, e.StackTrace, MOGPromptButtons.OK, MOG_ALERT_LEVEL.CRITICAL);
            }
        }
Beispiel #15
0
        private ArrayList GetSelectedRoots()
        {
            ArrayList selectedRoots = new ArrayList();

            foreach (AssetTreeNode tn in this.SelectedNodes)
            {
                AssetTreeNode selectedRoot = FindSelectedRoot(tn);
                if (!selectedRoots.Contains(selectedRoot))
                {
                    selectedRoots.Add(selectedRoot);
                }
            }

            return(selectedRoots);
        }
Beispiel #16
0
        private void tvDisk_AfterCollapse(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            if (!this.diskSelectedMirroringEnabled)
            {
                return;
            }

            AssetTreeNode tn = e.Node as AssetTreeNode;

            if (tn != null && tn.SelectedNode != null)
            {
                tn.SelectedNode.EnsureVisible();
                tn.SelectedNode.Collapse();
            }
        }
Beispiel #17
0
        private AssetTreeNode FindSelectedRoot(AssetTreeNode tn)
        {
            if (!this.SelectedNodes.Contains(tn))
            {
                return(null);
            }

            AssetTreeNode selectedParent = tn;

            while (selectedParent.Parent != null && selectedParent.Parent.IsSelected)
            {
                selectedParent = selectedParent.Parent as AssetTreeNode;
            }

            return(selectedParent);
        }
Beispiel #18
0
        private int CalculateRootInsertionIndex(AssetTreeNode diskRootNode, AssetTreeNode selectedRootNode)
        {
            DiskTreeView diskTV = diskRootNode.TreeView as DiskTreeView;

            foreach (AssetTreeNode selNode in this.Nodes)
            {
                if (selNode.DiskNode != null)
                {
                    if (diskRootNode.Index < selNode.DiskNode.Index)
                    {
                        return(selNode.Index);
                    }
                }
            }

            return(-1);
        }
Beispiel #19
0
        public void RefreshTree(TreeNodeCollection nodes)
        {
            if (nodes != null)
            {
                this.Nodes.Clear();

                foreach (AssetTreeNode tn in nodes)
                {
                    AssetTreeNode newNode = EncodeDiskNodeToSelected(tn);
                    if (newNode != null)
                    {
                        this.Nodes.Add(newNode);
                    }
                }

                ExpandAll();
            }
        }
        void Add(Asset resource, TreeNodeCollection nodes, Action<double> progressUpdateCallback, double percentOffset, double percentPart)
        {
            if (progressUpdateCallback != null)
                progressUpdateCallback(percentOffset);

            TreeNode node = new AssetTreeNode(resource);

            nodes.Add(node);

            if (resource is FolderAsset) {
                if (resource.Children.Count == 1)
                    node.Expand();

                double childPercentOffset = 0, childPercentPart = percentPart / resource.Children.Count;
                foreach (Asset child in resource.Children) {
                    Add(child, node.Nodes, progressUpdateCallback, percentOffset + childPercentOffset, percentPart);
                    childPercentOffset += childPercentPart;
                }
            }
        }
Beispiel #21
0
        private void ShowUnplaced(AssetTreeNode targetNode)
        {
            // assume global unless instructed otherwise
            TreeNodeCollection nodes = this.Nodes;

            if (targetNode != null)
            {
                nodes = targetNode.Nodes;
            }

            foreach (AssetTreeNode tn in nodes)
            {
                if (tn.ForeColor == Color.Red)
                {
                    tn.EnsureVisible();
                }

                // recurse
                ShowUnplaced(tn);
            }
        }
Beispiel #22
0
        public void RefreshColorStatusAboveNode(AssetTreeNode tn)
        {
            // unselect
            if (this.SelectedNodes.Contains(tn))
            {
                this.SelectedNodes.Remove(tn);
            }

            // Check if we have a parent?
            if (tn.Parent != null)
            {
                // Default the desired color to our node's color
                Color desiredColor = tn.ForeColor;

                // Check if we are not red?
                if (desiredColor != Color.Red)
                {
                    // Check if anybody is red?
                    foreach (AssetTreeNode subNode in tn.Nodes)
                    {
                        if (subNode.ForeColor == Color.Red)
                        {
                            // Indicate our new desired color is Red
                            desiredColor = Color.Red;
                            break;
                        }
                    }
                }

                // Check if our Parent needs a color change?
                if (tn.Parent.ForeColor != desiredColor)
                {
                    // Force our Parent to match our color
                    tn.Parent.ForeColor = desiredColor;
                    // Have our parent check their parent
                    RefreshColorStatusAboveNode(tn.Parent as AssetTreeNode);
                }
            }
        }
Beispiel #23
0
        private AssetTreeNode EncodeDiskNodeToSelected(AssetTreeNode tn)
        {
            if (!tn.Checked)
            {
                return(null);
            }

            AssetTreeNode newNode = new AssetTreeNode(tn.Text);

            newNode.InSelectedTree = true;
            newNode.ForeColor      = Color.Red;

            if (newNode.IsAFolder)
            {
                newNode.ImageIndex         = CLOSEDFOLDER_INDEX;
                newNode.SelectedImageIndex = CLOSEDFOLDER_INDEX;
            }
            else
            {
                newNode.ImageIndex         = QUESTION_INDEX;
                newNode.SelectedImageIndex = QUESTION_INDEX;
            }

            foreach (AssetTreeNode subNode in tn.Nodes)
            {
                TreeNode newSubNode = EncodeDiskNodeToSelected(subNode);
                if (newSubNode != null)
                {
                    newNode.Nodes.Add(newSubNode);
                }
            }

            newNode.DiskNode   = tn;
            newNode.MasterNode = tn.MasterNode;
            tn.SelectedNode    = newNode;

            return(newNode);
        }
Beispiel #24
0
        internal void RemoveNode(AssetTreeNode tn)
        {
            if (tn == null || tn.SelectedNode == null)
            {
                return;
            }

            AssetTreeNode selectedNode = tn.SelectedNode;

            DeleteNode(selectedNode);

            if (selectedNode.TreeView != null)
            {
                selectedNode.Remove();
            }

//			if (tn.SelectedNode != null  &&  tn.SelectedNode.TreeView != null)
//			{
//				DeleteAssetNodes(tn);
//				tn.SelectedNode.Remove();
//				tn.SetSelectedNode_Recursive(null);
//			}
        }
Beispiel #25
0
        private void tvDisk_AfterExpand(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            if (!this.diskSelectedMirroringEnabled)
            {
                return;
            }

            AssetTreeNode tn = e.Node as AssetTreeNode;

            if (tn != null && tn.SelectedNode != null)
            {
// JohnRen - Removed because this was seriously slowing down the importation of larger 100k+ file projects
//				this.tvDisk.BeginUpdate();
//				this.tvSelected.BeginUpdate();
                Cursor.Current = Cursors.WaitCursor;
                Application.DoEvents();

                tn.SelectedNode.EnsureVisible();
                tn.SelectedNode.Expand();

                // Check if we are checked?
// JohnRen - Removed because this was seriously slowing down the importation of larger projects
//				if (tn.Checked)
//				{
//					// Propagate the check down to this node's children
//					foreach (AssetTreeNode subNode in tn.Nodes)
//					{
//						subNode.Checked = tn.Checked;
//					}
//				}

                Cursor.Current = Cursors.Default;
// JohnRen - Removed because this was seriously slowing down the importation of larger 100k+ file projects
//				this.tvDisk.EndUpdate();
//				this.tvSelected.EndUpdate();
            }
        }
Beispiel #26
0
        private AssetTreeNode EncodeDirectoryTree(string path)
        {
            if (Directory.Exists(path))
            {
                AssetTreeNode tn = new AssetTreeNode(Path.GetFileName(path));
                tn.IsAFolder = true;

                foreach (string subdirPath in Directory.GetDirectories(path))
                {
                    tn.Nodes.Add(EncodeDirectoryTree(subdirPath));
                }

                foreach (string filePath in Directory.GetFiles(path))
                {
                    AssetTreeNode fileNode = new AssetTreeNode(Path.GetFileName(filePath));
                    fileNode.IsAFile = true;
                    tn.Nodes.Add(fileNode);
                }

                return(tn);
            }

            return(null);
        }
Beispiel #27
0
        private void RefreshRedStatus(AssetTreeNode tn)
        {
            // unselect
            if (this.SelectedNodes.Contains(tn))
            {
                this.SelectedNodes.Remove(tn);
            }

            foreach (AssetTreeNode subNode in tn.Nodes)
            {
                RefreshRedStatus(subNode);
            }

            if (tn.IsAFolder)
            {
                bool allGreen = true;

                foreach (AssetTreeNode subNode in tn.Nodes)
                {
                    if (subNode.ForeColor != Color.Green)
                    {
                        allGreen = false;
                        break;
                    }
                }

                if (allGreen)
                {
                    tn.ForeColor = Color.Green;
                }
                else
                {
                    tn.ForeColor = Color.Red;
                }
            }
        }
Beispiel #28
0
        private void FillInSubTree(AssetTreeNode selectNode)
        {
            AssetTreeNode diskNode = selectNode.DiskNode;

            if (diskNode != null)
            {
                foreach (AssetTreeNode subDiskNode in diskNode.Nodes)
                {
                    selectNode.Nodes.Add(ConvertDiskNode(subDiskNode));
                }

                foreach (AssetTreeNode subSelectNode in selectNode.Nodes)
                {
                    FillInSubTree(subSelectNode);
                }

                if (diskNode.IsExpanded)
                {
                    selectNode.Expand();
                }
//				else
//					selectNode.Collapse();
            }
        }
Beispiel #29
0
        public string FindCommonSyncTarget(AssetTreeNode classification)
        {
            bool   bAssetFilenameExists    = false;
            bool   bCommonSyncTargetExists = false;
            string commonSyncTarget        = "";

            //Find out if we have at least one asset filename node in this tree
            foreach (AssetTreeNode assetnode in classification.Nodes)
            {
                if (assetnode.IsAnAssetFilename)
                {
                    bAssetFilenameExists = true;
                    break;
                }
            }

            if (bAssetFilenameExists)
            {
                //There is at least one asset filename node, so let's see if they all share a sync target
                commonSyncTarget        = null;
                bCommonSyncTargetExists = true;

                foreach (AssetTreeNode assetnode in classification.Nodes)
                {
                    if (!bCommonSyncTargetExists)
                    {
                        //There is no hope of findong a common sync target
                        break;
                    }

                    if (assetnode.IsAnAssetFilename)
                    {
                        //Check all the file nodes in the asset node
                        foreach (AssetTreeNode filenode in assetnode.fileNodes)
                        {
                            try
                            {
                                string testSyncTarget = Path.GetDirectoryName(filenode.FileFullPath);

                                if (commonSyncTarget != null)
                                {
                                    if (String.Compare(testSyncTarget, commonSyncTarget, true) != 0)
                                    {
                                        //The sync target is different, no commonality, no fun, let's go
                                        bCommonSyncTargetExists = false;
                                        break;
                                    }
                                }

                                commonSyncTarget = testSyncTarget;
                            }
                            catch
                            {
                                bCommonSyncTargetExists = false;
                                break;
                            }
                        }
                    }
                }
            }

            if (bCommonSyncTargetExists)
            {
                //we got a common sync target!
                return(commonSyncTarget);
            }
            else
            {
                //"" means there is nothing common
                return("");
            }
        }
Beispiel #30
0
        internal void NewNode(AssetTreeNode tn)
        {
            if (tn == null || tn.SelectedNode != null)
            {
                return;
            }

            AssetTreeNode newNode = ConvertDiskNode(tn);

            AssetTreeNode parentNode = tn.Parent as AssetTreeNode;
            AssetTreeNode curNode    = newNode;

            while (parentNode != null)
            {
                // if parentNode has a corresponding selected node in this treeview already
                if (parentNode.SelectedNode != null)
                {
                    // add curNode tree to it
                    parentNode.SelectedNode.Nodes.Add(curNode);
                    if (parentNode.IsExpanded)
                    {
                        parentNode.SelectedNode.Expand();
                    }
//					else
//					{
//						parentNode.SelectedNode.Collapse();
//					}

                    break;
                }
                else
                {
                    // make new and chain up
                    parentNode.SelectedNode = ConvertDiskNode(parentNode);
                    parentNode.SelectedNode.Nodes.Add(curNode);
                    if (parentNode.IsExpanded)
                    {
                        parentNode.SelectedNode.Expand();
                    }
//					else
//						parentNode.SelectedNode.Collapse();

                    curNode    = parentNode.SelectedNode;
                    parentNode = parentNode.Parent as AssetTreeNode;
                }
            }

            // no parent node?  just add it to the tree view itself
            if (parentNode == null)
            {
                // insert it in the right place
                int index = CalculateRootInsertionIndex(Utils.GetRootNode(tn) as AssetTreeNode, curNode);
                if (index == -1)
                {
                    this.Nodes.Add(curNode);
                }
                else
                {
                    this.Nodes.Insert(index, curNode);
                }
            }
            //FillInSubTree(newNode);
        }