Exemplo n.º 1
0
        private void modifyingNode_Complete()
        {
            if (InvokeRequired)
            {
                Invoke(new WorkerDelegate(modifyingNode_Complete));
                return;
            }

            if (finishedModification.Count == 0)
            {
                return;
            }

            DBNode <T>          node     = finishedModification.Pop();
            TreeNode            treeNode = treeNodeLookup[node];
            NodeModifiedDetails details  = modificationDetails[node];

            rebuildingNode = false;

            // re-add the node
            try {
                if (details.Parent == null)
                {
                    treeView.Nodes.Insert(details.Index, treeNode);
                }
                else
                {
                    details.Parent.Nodes.Insert(details.Index, treeNode);
                }
            }
            catch (Exception e) {
                if (e is ThreadAbortException)
                {
                    throw e;
                }
            }

            treeView.SelectedNode = treeNode;
            modificationDetails.Remove(node);
        }
Exemplo n.º 2
0
        void nodeModified(IDBNode node)
        {
            if (modificationDetails.ContainsKey((DBNode <T>)node))
            {
                return;
            }

            if (treeNodeLookup.ContainsKey((DBNode <T>)node) && this.Visible)
            {
                // store modification details
                TreeNode            treeNode = treeNodeLookup[(DBNode <T>)node];
                NodeModifiedDetails details  = new NodeModifiedDetails();
                details.Index  = treeNode.Index;
                details.Parent = treeNode.Parent;
                modificationDetails[(DBNode <T>)node] = details;
                pendingModification.Push((DBNode <T>)node);

                // temporarily remove the node
                rebuildingNode = true;
                if (details.Parent == null)
                {
                    treeView.Nodes.Remove(treeNode);
                }
                else
                {
                    details.Parent.Nodes.Remove(treeNode);
                }

                // add a dummy node so the user doesnt freak out

                // update the node in a new thread while displaying a progress dialog
                ProgressPopup popup = new ProgressPopup(new WorkerDelegate(nodeModifiedWorker));
                popup.Owner         = FindForm();
                popup.Text          = "Updating Menu Items";
                popup.WorkComplete += new WorkCompleteDelegate(modifyingNode_Complete);
                popup.ShowDialogDelayed(300);
            }
        }