using OTSCommon.Model;
using OTSIncAReportApp.OTSSampleReportInfo;
//using OTSINTERFACE;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace OTSIncAReportApp.OTSDataMgrFunction
{
///
/// 树控件操作类
///
public class OTSTreeViewData
{
#region 变量定义
///
/// 测量结果主窗口对象
///
frmMeasureRstMgr m_RstWindow = null;
///
/// 控制插入测量结果标识,全局变量
///
bool m_bSetFlag = false;
///
/// 切换测量结果是否成功的标志
///
bool m_bSwichFlag = false;
#endregion
#region 构造函数及初始化
///
/// 构造函数
///
///
public OTSTreeViewData(frmMeasureRstMgr RstWindow)
{
//主窗口数据源
m_RstWindow = RstWindow;
}
#endregion
#region 树控件操作相关函数
///
/// 在树控件上显示相关测量结果
///
///
///
public void DisplayWorkSampleTree(List ResultFileList)
{
if (ResultFileList != null && ResultFileList.Count > 0)
{
m_RstWindow.treeView1.Nodes.Clear(); //清除Treeview所有节点
if (ResultFileList.Count > 0)
{
for (int i = 0; i < ResultFileList.Count; i++)
{
//从底层获取到测量结果的名称
string SampleName = ResultFileList[i].anotherFileName;
TreeNode node = new TreeNode();
node.Text = SampleName;
//将获取到的测量结果名称,添加到树控件上
m_RstWindow.treeView1.Nodes.Add(node);
node.NodeFont = new Font("宋体", 10, FontStyle.Regular);
}
}
}
else
{
#region 右键添加结果文件显示树
if (0 == m_RstWindow.treeView1.Nodes.Count)
{
TreeNode node = new TreeNode();
node.Text = "";
m_RstWindow.treeView1.Nodes.Add(node);
node.NodeFont = new Font("宋体", 10, FontStyle.Regular);
//设置工作样品的CheckBox 值
node.Checked = false;
m_RstWindow.treeView1.SelectedNode = node;
m_RstWindow.treeView1.Focus();
m_RstWindow.m_WorkSampleNode = node;
}
else
{
for (int iTNodeCount = 0; iTNodeCount < m_RstWindow.treeView1.Nodes.Count; iTNodeCount++)
{
m_bSetFlag = false;
InsertNewSampleNode(m_RstWindow.treeView1.Nodes[iTNodeCount]);
}
}
#endregion
}
//根据样品属性数据中的SWITCH状态来设定Treeview的checkbox状态 和工作样品焦点
m_RstWindow.treeView1.ExpandAll(); //展开Treeview 树形节点
m_RstWindow.treeView1.Refresh();
m_RstWindow.treeView1.Scrollable = true;
m_RstWindow.Refresh();//刷新一下,防止在加载功能模块时界面卡住树控件会显示出根节点
}
///
/// 插入测量结果
///
///
private void InsertNewSampleNode(TreeNode node)
{
if (m_bSetFlag)
{
return;
}
if (null != node.Parent)
{
TreeNode NewNode = new TreeNode();
node.Parent.Nodes.Add(NewNode);
if (m_RstWindow.m_WorkSampleParam.bSwitch)
{
node.Parent.LastNode.Checked = true;
}
else
{
node.Parent.LastNode.Checked = false;
}
node.Parent.LastNode.NodeFont = new Font("宋体", 10, FontStyle.Regular);
m_RstWindow.treeView1.SelectedNode = NewNode;
m_RstWindow.treeView1.Focus();
m_bSetFlag = true;
m_RstWindow.m_WorkSampleNode = NewNode;
return;
}
if (node.Nodes.Count != 0)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
InsertNewSampleNode(node.Nodes[i]);
}
}
}
///
/// 切换测量结果状态
///
///
public void SetNewWorkSample(string sNewWSampleName)
{
for (int iTNodeCount = 0; iTNodeCount < m_RstWindow.treeView1.Nodes.Count; iTNodeCount++)
{
m_bSwichFlag = false;
GetTreeNextNode(m_RstWindow.treeView1.Nodes[iTNodeCount], sNewWSampleName);
}
}
///
/// 根据工作样品名称查找TREEVIEW 中工作样品节点
///
///
public void GetTreeWorkSampleNode(string sWorkSampleName)
{
for (int iTNodeCount = 0; iTNodeCount < m_RstWindow.treeView1.Nodes.Count; iTNodeCount++)
{
//改变选中的树节点状态
FindTreeWorkSampleNode(m_RstWindow.treeView1.Nodes[iTNodeCount], sWorkSampleName);
}
}
///
/// 重新设置TREEVIEW的工作样品焦点
///
public void ReSetWorkSampleFoucs()
{
if (0 == this.m_RstWindow.treeView1.Nodes.Count)
{
return;
}
for (int i = 0; i < this.m_RstWindow.treeView1.Nodes.Count; i++)
{
SetTreeNodeFocus_ByWorkingIndex(m_RstWindow.treeView1.Nodes[i]);
}
m_RstWindow.treeView1.Refresh();
}
#endregion
#region 遍历树控件相关方法
///
/// 遍历树节点,根据底层数据判断,是否对该节点进行选中操作
///
///
///
private void GetTreeNextNode(TreeNode node, string sNewWSampleName)
{
if (m_bSwichFlag) //已经切换成功
{
return;
}
if (sNewWSampleName == node.Text)
{
m_RstWindow.treeView1.SelectedNode = node;
m_RstWindow.treeView1.Focus();
m_RstWindow.m_WorkSampleNode = node;
m_bSwichFlag = true;
}
if (node.Nodes.Count != 0)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
//遍历下一个树的节点
GetTreeNextNode(node.Nodes[i], sNewWSampleName);
}
}
}
///
/// 递归调用,查找树节点,找到为后该节点设置为选择节点,并设置焦点
///
///
///
private void FindTreeWorkSampleNode(TreeNode Tnode, string sWorkSampleName)
{
if (Tnode.Text == sWorkSampleName)
{
m_RstWindow.m_WorkSampleNode = Tnode;
m_RstWindow.treeView1.SelectedNode = Tnode;
m_RstWindow.treeView1.Focus();
return;
}
if (Tnode.Nodes.Count != 0)
{
for (int i = 0; i < Tnode.Nodes.Count; i++)
{
FindTreeWorkSampleNode(Tnode.Nodes[i], sWorkSampleName);
}
}
}
///
/// 递归遍历树节点,找到后,设置树节点的选中状态
///
///
private void SetTreeNodeFocus_ByWorkingIndex(TreeNode node)
{
if (node.Text == m_RstWindow.treeView1.SelectedNode.Text)
{
m_RstWindow.treeView1.SelectedNode = m_RstWindow.m_WorkSampleNode;
m_RstWindow.treeView1.Focus();
m_RstWindow.treeView1.Refresh();
}
if (node.Nodes.Count != 0)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
SetTreeNodeFocus_ByWorkingIndex(node.Nodes[i]);
}
}
}
#endregion
}
}