示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
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);
            }
        }