private void treeFiles_AfterNodeDrop(object sender, TreeDragDropEventArgs e)
        {
            TagInfo ti = (TagInfo)e.Node.Tag;
            OutputFolder oldParentFolder = Project.Instance.FindFolder(((TagInfo)e.OldParentNode.Tag).Id);
            OutputFolder newParentFolder = Project.Instance.FindFolder(((TagInfo)e.NewParentNode.Tag).Id);
            Node prevNode = e.Node.PrevNode;

            if (prevNode != null && ((TagInfo)prevNode.Tag).FileType == TagInfo.FileTypes.Folder)
            {
                // The user dropped just below a folder, so meant to add to that folder, so we must make the dragged node a child node, not a sibling.
                e.Node.PrevNode.Nodes.Add(e.Node);
                newParentFolder = Project.Instance.FindFolder(((TagInfo)prevNode.Tag).Id);
            }
            switch (ti.FileType)
            {
                case TagInfo.FileTypes.Folder:
                    OutputFolder folder = Project.Instance.FindFolder(((TagInfo)e.Node.Tag).Id);
                    oldParentFolder.Folders.Remove(folder);
                    newParentFolder.Folders.Add(folder);
                    break;
                case TagInfo.FileTypes.NormalFile:
                case TagInfo.FileTypes.ScriptFile:
                    OutputFile normalFile = Project.Instance.FindFile(((TagInfo)e.Node.Tag).Id);
                    oldParentFolder.RemoveFile(normalFile);
                    newParentFolder.Files.Add(normalFile);
                    break;
                default:
                    throw new NotImplementedException("Not coded yet: " + ti.FileType);
            }
            Project.Instance.IsDirty = true;
        }
        private void advTree1_AfterNodeDrop(object sender, TreeDragDropEventArgs e)
        {
            IDesignerHost dh = (IDesignerHost)GetDesignService(typeof(IDesignerHost));
            DesignerTransaction dt = null;
            if (dh != null) dt = dh.CreateTransaction("Move items");

            IComponentChangeService cc = GetDesignService(typeof(IComponentChangeService)) as IComponentChangeService;

            try
            {
                RadialMenuItem movedItem = e.Node.Tag as RadialMenuItem;
                RadialMenuItem parent = movedItem.Parent as RadialMenuItem;
                
                if (cc != null)
                {
                    OnComponentChanging(parent, cc);
                }

                if (parent == null)
                {
                    if (_RadialMenu != null)
                        _RadialMenu.Items.Remove(movedItem);
                    else if (_RadialMenuContainer != null)
                        _RadialMenuContainer.SubItems.Remove(movedItem);
                }
                else
                    parent.SubItems.Remove(movedItem);

                if (cc != null)
                {
                    OnComponentChanged(parent, cc);
                }

                if (e.NewParentNode == null)
                {
                    int index = advTree1.Nodes.IndexOf(e.Node);
                    if (cc != null)
                    {
                        if (_RadialMenu != null)
                            cc.OnComponentChanging(_RadialMenu, TypeDescriptor.GetProperties(_RadialMenu)["Items"]);
                        else if (_RadialMenuContainer != null)
                            cc.OnComponentChanging(_RadialMenuContainer, TypeDescriptor.GetProperties(_RadialMenuContainer)["SubItems"]);
                    }

                    if (_RadialMenu != null)
                        _RadialMenu.Items.Insert(index, movedItem);
                    else if (_RadialMenuContainer != null)
                        _RadialMenuContainer.SubItems.Insert(index, movedItem);

                    if (cc != null)
                    {
                        if (_RadialMenu != null)
                            cc.OnComponentChanged(_RadialMenu, TypeDescriptor.GetProperties(_RadialMenu)["Items"], null, null);
                        else if (_RadialMenuContainer != null)
                            cc.OnComponentChanged(_RadialMenuContainer, TypeDescriptor.GetProperties(_RadialMenuContainer)["SubItems"], null, null);
                    }
                }
                else
                {
                    parent = e.NewParentNode.Tag as RadialMenuItem;
                    int index = e.NewParentNode.Nodes.IndexOf(e.Node);
                    if (cc != null) cc.OnComponentChanging(parent, TypeDescriptor.GetProperties(parent)["SubItems"]);
                    parent.SubItems.Insert(index, movedItem);
                    if (cc != null) cc.OnComponentChanged(parent, TypeDescriptor.GetProperties(parent)["SubItems"], null, null);
                }
            }
            catch
            {
                if (dt != null)
                    dt.Cancel();
                throw;
            }
            finally
            {
                if (dt != null && !dt.Canceled)
                    dt.Commit();
            }
        }