private void addDynamicNode(DBField field, DBRelation relation, bool forceRoot) { if (_menu == null) { return; } SuspendLayout(); // build internal node object DBNode <T> newNode = new DBNode <T>(); newNode.Name = field.FriendlyName; newNode.BasicFilteringField = field; newNode.BasicFilteringRelation = relation; newNode.DynamicNode = true; newNode.DBManager = DBManager; count++; // build treenode object (for the UI) asyncInput = newNode; forceNewNodeRoot = forceRoot; ProgressPopup p = new ProgressPopup(new WorkerDelegate(createTreeNodeAsyncWorker)); p.Owner = FindForm(); p.Text = "Building Menu Tree"; p.WorkComplete += new WorkCompleteDelegate(addDynamicNode_TreeNodeCreated); p.ShowDialogDelayed(300); }
private void treeView_DragDrop(object sender, DragEventArgs e) { clearDragDropMarkup(); if (dropPosition == DropPositionEnum.None) { return; } // grab the item being moved movingNode = (TreeNode)e.Data.GetData(typeof(TreeNode)); if (movingNode == null) { return; } // grab the target node Point pt = treeView.PointToClient(new Point(e.X, e.Y)); targetNode = treeView.GetNodeAt(pt); // grab the old parent TreeNode oldParent = movingNode.Parent; // remove node from treeview and internal menu system if (oldParent != null) { oldParent.Nodes.Remove(movingNode); ((DBNode <T>)oldParent.Tag).Children.Remove((DBNode <T>)movingNode.Tag); updateFilteredItems(oldParent, false); setVisualProperties(oldParent); } else { treeView.Nodes.Remove(movingNode); _menu.RootNodes.Remove((DBNode <T>)movingNode.Tag); } // do the heavy lifting in a new thread while displaying a progress dialog ProgressPopup popup = new ProgressPopup(new WorkerDelegate(updateMovedNodeDragDrop)); popup.Owner = FindForm(); popup.Text = "Updating Moved Menu Item"; // node will be reinserted by the callback method when work is complete popup.WorkComplete += new WorkCompleteDelegate(updateMovedNode_Complete); popup.ShowDialogDelayed(300); }
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); } }