using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AutoTesting.DomainModel;
using AutoTesting.Models.TestCaseManageEntity;
namespace AutoTesting.ControlLibrary
{
public partial class SwitchFolder : Form
{
private List<TreeNode> selectedNodes = new List<TreeNode>();
public SwitchFolder()
{
InitializeComponent();
Init();
}
private void Init()
{
FolderDomain domain = new FolderDomain();
string Type = "'F', 'K'";
List<FolderStructure> folderNodeSource = domain.GetFolderNodeByTypes(Type);
List<StepImporting> steps = domain.GetKeywordsAndTestCase();
if (folderNodeSource == null || folderNodeSource.Count == 0)
{
return;
}
IEnumerable<FolderStructure> folderSource = folderNodeSource.Where(item => item.Type == "F");
treeView1.Nodes.Clear();
BindTreeTests(folderSource, steps.Where(item => item.Type == "F"), "Tests", "F");
}
private void BindTreeTests(IEnumerable<FolderStructure> source, IEnumerable<StepImporting> steps, string text, string tag)
{
TreeNode root = new TreeNode();
root.Text = text;
root.Tag = tag;
AddSecondChildNodes(source, steps, root, -1);
treeView1.Nodes.Add(root);
root.Expand();
}
private void AddSecondChildNodes(IEnumerable<FolderStructure> source, IEnumerable<StepImporting> steps, TreeNode node, object Pid)
{
TreeNode _node;
var _roots = source.Where(item => item.ParentID == int.Parse(Pid.ToString()));
foreach (FolderStructure item in _roots)
{
_node = new TreeNode();
_node.Text = item.Name;
_node.Tag = item.ID;
AddSecondChildNodes(source, steps, _node, _node.Tag);
// AddThirdChildNodes(steps, item.ID, _node);
node.Nodes.Add(_node);
}
}
private void AddThirdChildNodes(IEnumerable<StepImporting> steps, int functionID, TreeNode node)
{
IEnumerable<StepImporting> stepList = steps.Where(item => item.FunctionID == functionID);
TreeNode _node;
foreach (StepImporting item in stepList)
{
_node = new TreeNode();
_node.Text = "(" + item.ID.ToString() + ") " + item.Name;
_node.Tag = item.ID;
node.Nodes.Add(_node);
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void treeFunction_NodeMouseClick(object sender, System.Windows.Forms.TreeNodeMouseClickEventArgs e)
{
if (selectedNodes != null)
{
foreach (TreeNode item in selectedNodes)
{
item.BackColor = Color.Transparent;
item.ForeColor = Color.Black;
}
}
this.Cursor = Cursors.WaitCursor;
CheckChildNodes(e.Node, e.Node.Checked);
if (e.Node.Checked)
{
CheckParentNode(e.Node);
}
else
{
UncheckParentNode(e.Node);
}
this.Cursor = Cursors.Default;
}
/// <summary>
/// 勾选子节点
/// </summary>
/// <param name="node"></param>
/// <param name="isChecked"></param>
private void CheckChildNodes(TreeNode node, bool isChecked)
{
node.Checked = isChecked;
if (node.Nodes.Count > 0)
{
foreach (TreeNode item in node.Nodes)
{
CheckChildNodes(item, isChecked);
}
}
}
/// <summary>
/// 勾选父节点
/// </summary>
/// <param name="node"></param>
private void CheckParentNode(TreeNode node)
{
if (node.Parent != null)
{
node.Parent.Checked = true;
CheckParentNode(node.Parent);
}
}
/// <summary>
/// 取消父节点勾选
/// </summary>
/// <param name="node"></param>
private void UncheckParentNode(TreeNode node)
{
if (node.Parent != null)
{
if (CheckChildNodesStatus(node.Parent))
{
node.Parent.Checked = false;
UncheckParentNode(node.Parent);
}
}
}
/// <summary>
/// 获取子节点状态
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private bool CheckChildNodesStatus(TreeNode node)
{
foreach (TreeNode item in node.Nodes)
{
if (item.Checked == true)
{
return false;
}
}
return true;
}
}
}