private void tvModelDatasources_DragDrop(object sender, DragEventArgs e) { TreeNode treeNode = null; IBaseNode baseNode = null; IDataDefinitionExport export = null; eDropMode dropMode = DropStrategy(e, ref treeNode, ref baseNode, ref export); if (treeNode != null) { tvModelDatasources.SelectedNode = treeNode; switch (dropMode) { case eDropMode.DropBaseNode: TreeNode newBaseNode = TreeNodeFromBaseNode(baseNode); Root.Nodes.Add(newBaseNode); tvModelDatasources.SelectedNode = newBaseNode; break; case eDropMode.DropExportMethod: case eDropMode.DropExportVariable: TreeNode newExport = TreeNodeFromDataDefinitionExport(export); tvModelDatasources.SelectedNode.Nodes.Add(newExport); tvModelDatasources.SelectedNode = newExport; break; } } }
protected eDropMode DropStrategy(DragEventArgs e, ref TreeNode treeNode, ref IBaseNode baseNode, ref IDataDefinitionExport export) { Point targetPoint = tvModelDatasources.PointToClient(new Point(e.X, e.Y)); treeNode = tvModelDatasources.GetNodeAt(targetPoint); if (treeNode != null) { baseNode = getIBaseNode(e); if (baseNode != null) { if (TreeNodeContains(Root, baseNode)) { return(eDropMode.Undefined); } return(eDropMode.DropBaseNode); } export = getIDataDefinitionExport(e); eDropMode result = eDropMode.Undefined; if (export != null) { if (isDomainObject(treeNode) && export.ExportType == eExportType.Method) { result = eDropMode.DropExportMethod; } if (isVariableDef(treeNode) && export.ExportType == eExportType.Variable) { result = eDropMode.DropExportVariable; } } TreeNode tn = treeNode.Tag is IDataDefinitionExport ? treeNode.Parent : treeNode; if (TreeNodeContains(tn, export)) { result = eDropMode.Undefined; } return(result); } return(eDropMode.Undefined); }
private void tvModelDatasources_DragOver(object sender, DragEventArgs e) { TreeNode treeNode = null; IBaseNode baseNode = null; IDataDefinitionExport export = null; eDropMode dropMode = DropStrategy(e, ref treeNode, ref baseNode, ref export); e.Effect = DragDropEffects.None; if (treeNode != null) { tvModelDatasources.SelectedNode = treeNode; switch (dropMode) { case eDropMode.DropBaseNode: case eDropMode.DropExportMethod: case eDropMode.DropExportVariable: e.Effect = DragDropEffects.Copy; break; } } }