using OTS.WinFormsUI.Docking;
using OTSIncAReportApp.OTSDataMgrFunction;
using OTSIncAReportApp.OTSSampleReportInfo;
using OTSIncAReportApp.SysMgrTools;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Xml;
namespace OTSIncAReportApp
{
///
/// 显示测量结果树控件主窗体
///
public partial class frmMeasureRstMgr : DockContent
{
#region 变量定义
///
/// 主框架窗体,全局变量
///
private frmReportApp m_ReportApp = null;
///
/// 树窗口类
///
private OTSTreeViewData m_TreeViewData = null;
///
/// 测量结果样品节点
///
public TreeNode m_WorkSampleNode = null;
///
/// 工作样品属性参数
///
public CTreeSampleParam m_WorkSampleParam = new CTreeSampleParam();
///
/// 当前工作样品名
///
private String m_WorkSampleName = "";
///
/// 当前鼠标点击节点
///
int treeNodeSample = -1;
Hashtable table;
#endregion
#region 构造函数和窗体加载
///
/// 构造函数
///
///
public frmMeasureRstMgr(frmReportApp reportApp)
{
InitializeComponent();
m_ReportApp = reportApp;
m_TreeViewData = new OTSTreeViewData(this);
#region 国际化语言
Language lan = new Language(this);
table = lan.GetNameTable(this.Name);
#endregion
}
///
/// 窗体加载
///
///
///
private void OTSMeasureRetMgrWindow_Load(object sender, EventArgs e)
{
treeView1.LabelEdit = true;//TreeView可编辑状态。
}
#endregion
#region 外部接口函数及相关常量定义
///
/// 发送消息
///
///
///
///
///
///
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref TVITEM lParam);
private const int TVIF_STATE = 0x8;
private const int TVIS_STATEIMAGEMASK = 0xF000;
private const int TV_FIRST = 0x1100;
private const int TVM_SETITEM = TV_FIRST + 63;
[StructLayout(LayoutKind.Sequential, Pack = 8, CharSet = CharSet.Auto)]
private struct TVITEM
{
public int mask;
public IntPtr hItem;
public int state;
public int stateMask;
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszText;
public int cchTextMax;
public int iImage;
public int iSelectedImage; public int cChildren; public IntPtr lParam;
}
#endregion
#region 树控件相关事件
///
/// 树控件点击是否选择右键
///
///
///
private void treeView1_Click(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)//判断你点的是不是右键
{
contextMenuStrip1.Show();
}
}
///
/// 左键选择树节点事件
///
///
///
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
//鼠标选中
if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard)
{
if (e.Node.IsSelected)
{
//判断的选中的CHECKBOX和焦点都在当前被选择的节点上,切换当前工作样品
m_WorkSampleNode = e.Node;
treeView1.SelectedNode = e.Node; //当前被选中
treeView1.Refresh();
}
}
}
///
/// 当Checkbox的状态发生变化时,响应事件
///
///
///
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action == TreeViewAction.ByMouse)
{ //判断是否由鼠标触发的
TreeNode TN = e.Node;//点击的节点
if (TN.Checked)
{ //若是选中,遍历父节点,所属的父节点应为选中 {
if (TN.Parent != null)
{
TN.Parent.Checked = true;
if (TN.Parent.Parent != null)
{
TN.Parent.Parent.Checked = true;
}
}
DG_Check(TN, true); //本身节点之下还有子节点,遍历,全选中
}
else
{ //若是取消选中
DG_Check(TN, false);//本身节点之下还有子节点,遍历,全取消选中
if (TN.Parent != null)
{
//若有父节点,判断此次取消选中后,是否兄弟节点也是没选中
TreeNode TNP = TN.Parent;
bool YXZ = false;//有选中的,以此来判断否兄弟节点也是没选中
foreach (TreeNode childTN in TNP.Nodes)
{
if (childTN.Checked)
{
YXZ = true;//还有选中的兄弟节点
break;
}
}
TNP.Checked = YXZ;//将遍历结果赋给父节点
}
}
}
}
///
/// 删除测量结果事件
///
///
///
private void RDeleteNode_Click(object sender, EventArgs e)
{
TreeNode tn = new TreeNode();
tn = treeView1.SelectedNode;
tn.Remove();
}
///
/// 显示树节点
///
///
///
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
e.DrawDefault = true;
}
///
/// 当鼠标点击选择了
///
///
///
public void TreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode tn = (TreeNode)e.Node;
treeNodeSample = e.Node.Index;
string treeNodeName = e.Node.Text;
//正常indexadd值应该哪个为true哪个给它
int indexadd = e.Node.Index;
string checkednode = "";
foreach (TreeNode item in treeView1.Nodes)
{
if (item.Checked)
{
checkednode = checkednode + "+" + item.Text;
}
}
if (checkednode.LastIndexOf("+") > 1)
{
checkednode = checkednode.Substring(1);
}
else
{
checkednode = "";
}
OTSSampleMeaInfo SMeasureInfo = m_ReportApp.SourceGridData;
for (int i = 0; i < 3; i++)
{
int idx = m_ReportApp.m_DataMgrFun.GetSampleIndexByPropItemName(m_ReportApp.SourceGridData.SampleDataList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE);
int n = m_ReportApp.SourceGridDataListLog[i].SampleDataList[idx].comboDownList.Count;
for (int j = 0; j < n; j++)
{
if (m_ReportApp.SourceGridDataListLog[i].SampleDataList[idx].comboDownList[j].Contains("+"))
{
m_ReportApp.SourceGridDataListLog[i].SampleDataList[idx].comboDownList.RemoveAt(j);
break;
}
}
}
//插入多数据源选项
m_ReportApp.MoreSource = checkednode;
if (m_ReportApp.MoreSource != "")
{
for (int i = 0; i < 3; i++)
{
m_ReportApp.SourceGridDataListLog[i].SampleDataList[0].comboDownList.Insert(0, checkednode);
}
}
m_ReportApp.m_PropWindow.DisProperyWindow(SMeasureInfo);//刷新
if (e.Button == MouseButtons.Right)//判断按下鼠标右键
{
Point ClickPoint = new Point(e.X, e.Y);
TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint);
if (CurrentNode == null && null == CurrentNode.Parent)//判断选择的是不是一个节点
{
CurrentNode.ContextMenuStrip = contextMenuStrip2;
}
else
{
CurrentNode.ContextMenuStrip = contextMenuStrip1;
m_WorkSampleNode = CurrentNode;
}
}
this.Focus();
}
public void AddSampleClick(string str_path)
{
if (str_path == "")
{
return;
}
//为了使用国标,保留clr向底层加载的代码部份-----------------------------------------------
//m_ReportApp.m_ReportProjFileMgr.AddASmplMsrResultMgr(str_path);
//m_ReportApp.m_ReportProjFileMgr.SetSelectedPicture(1);
//-----------------------------------------------------------------------------------------
m_ReportApp.OriginalPoint= ReadXML(str_path);
//加载测量结果文件
Dictionary suggestions = DataOperation.DataAccess.XMLoperate.GetXMLAllInfo(str_path);
string name = System.IO.Path.GetFileName(str_path);
int workingid = (this.m_ReportApp.ResultFileId++);
string path = System.IO.Path.GetDirectoryName(str_path);
if (m_ReportApp.resultFilesList.Find(s => s.FileName == name) != null)
{
MessageBox.Show("已经加载同名文件,请重新选择!");
return;
}
//添加启动系统界面显示
string SystemMode = ((Dictionary)((Dictionary)((Dictionary)suggestions["Sample"])["Members"])["MsrParams"])["SysType"].ToString();
if (SystemMode == "IncA")
{
m_ReportApp.Text = m_ReportApp.Text.Split(' ')[0] + " -- Inclusion Analysis System";
}
else if (SystemMode == "CleanlinessA")
{
m_ReportApp.Text = m_ReportApp.Text.Split(' ')[0] + " -- Cleanliness Analysis System";
}
DataOperation.Model.ResultFile result = new DataOperation.Model.ResultFile()
{
FileId = workingid.ToString(),
FileName = name,
FilePath = path,
ResultInfo = suggestions
};
this.m_ReportApp.resultFilesList.Add(result);
int index = m_ReportApp.resultFilesList.IndexOf(result);
if (this.m_ReportApp.WorkingResult == -1)
{
OTSSampleMeaInfo SMeasureInfo = new OTSSampleMeaInfo();
this.m_ReportApp.WorkingResult = index;
m_ReportApp.m_DataMgrFun.GetWorkSamplePropertyVal(ref SMeasureInfo);
m_ReportApp.m_PropWindow.DisProperyWindow(SMeasureInfo);//刷新
m_ReportApp.m_RstWindow.Show(m_ReportApp.DockWindowPanel);
//把样品测量结果文件名加入树中
CTreeSampleParam TreeSampleParam = new CTreeSampleParam();
//在treeview上添加测量结果
m_TreeViewData.DisplayWorkSampleTree(this.m_ReportApp.resultFilesList, TreeSampleParam);
//在grid上添加测量结果
m_ReportApp.DisCurrentPicProperty();
//根据标签索引 显示默认的数据图表for test
m_ReportApp.m_DataMgrFun.ShowsTheDefaultPic();//显示图表
}
else
{
//把样品测量结果文件名加入树中
CTreeSampleParam TreeSampleParam = new CTreeSampleParam();
//在treeview上添加测量结果
m_TreeViewData.DisplayWorkSampleTree(this.m_ReportApp.resultFilesList, TreeSampleParam);
//在grid中添加新增的测量结果名称
OTSSampleMeaInfo SMeasureInfo = m_ReportApp.SourceGridData;
for (int i = 0; i < 3; i++)
{
int idx = m_ReportApp.m_DataMgrFun.GetSampleIndexByPropItemName(m_ReportApp.SourceGridData.SampleDataList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE);
m_ReportApp.SourceGridDataListLog[i].SampleDataList[idx].comboDownList.Add(name);
}
m_ReportApp.m_PropWindow.DisProperyWindow(SMeasureInfo);//刷新
}
}
///
/// 树节点删除事件
///
///
///
private void RDeleteNode_Click_1(object sender, EventArgs e)
{
string str1 = table["str1"].ToString();
string str2 = table["str2"].ToString();
string sDeleteSampleName = str1;
sDeleteSampleName += this.treeView1.SelectedNode.Text;
sDeleteSampleName += str2;
if (DialogResult.OK == MessageBox.Show(sDeleteSampleName, "Tip", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning))
{
//删除当前选中的节点
DeletSample_Event(treeView1.SelectedNode.Text);
//当节点全部删除完时刷新树以及主窗口的控件
if (treeView1.Nodes.Count == 0)
{
treeView1.Nodes.Clear();
//如果已经没有测量结果,则将报告程序初始化到刚打开的状态
m_ReportApp.InitReportProState();
}
else
{
//重新加载grid窗口
m_ReportApp.DisCurrentPicProperty();
//删除树上的节点
m_WorkSampleName = m_ReportApp.m_DataMgrFun.GetSampleName();
m_TreeViewData.GetTreeWorkSampleNode(m_WorkSampleName);
}
}
}
//ReportApp窗口给 RetMgrWindow 发送窗口删除样品回复
public void DeletSample_Event(string sDeletSName)
{
treeView1.Nodes.Remove(m_WorkSampleNode); //移除当前工作样品
if ("" == sDeletSName)
{
return;
}
//重新获取Treeview上的工作样品节点
this.m_TreeViewData.GetTreeWorkSampleNode(sDeletSName);
//设置工作样品焦点
this.m_TreeViewData.ReSetWorkSampleFoucs();
}
//切换当前工作样品
//string sNewWorkSample : 新的工作样品名
public void MeasureApp_SwitchSample(string sNewName)
{
m_TreeViewData.SetNewWorkSample(sNewName);
}
#endregion
#region 相关树控件方法
//是否为选择工作样品的节点(窗口切换)
public void SelectWorkSampleNode()
{
try
{
//是否添加结果文件
if (m_ReportApp.resultFilesList.Count != 0)
{
if (m_ReportApp.WorkingResult != -1)
if (m_ReportApp.resultFilesList[m_ReportApp.WorkingResult] != null)
{
string workSampleName = m_ReportApp.resultFilesList[m_ReportApp.WorkingResult].FileName;
//设置工作样品
if (m_ReportApp.m_RstWindow.treeView1.Nodes.Count > 0)
{
foreach (TreeNode item in m_ReportApp.m_RstWindow.treeView1.Nodes)
{
//设置选择TreeNode
if (item.Text == workSampleName)
{
m_ReportApp.m_RstWindow.treeView1.SelectedNode = item;
break;
}
}
}
}
}
}
catch (Exception)
{
}
}
///
/// 设置树控件各节点的状态
///
///
///
private void DG_Check(TreeNode TN, bool flag)
{
if (TN.Nodes.Count > 0)
{
foreach (TreeNode childTN in TN.Nodes)
{
childTN.Checked = flag; DG_Check(childTN, flag);
}
}
}
///
/// 隐藏树节点,复选框
///
///
///
public void HideCheckBox(TreeView tvw, TreeNode node)
{
TVITEM tvi = new TVITEM();
tvi.hItem = node.Handle;
tvi.mask = TVIF_STATE;
tvi.stateMask = TVIS_STATEIMAGEMASK;
tvi.state = 0;
SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);
}
///
/// 树添加测量结果文件样品进行显示
///
///
///
public void AddResultSample(CTreeSampleParam TSampleParam)
{
//在treeview上添加测量结果
m_TreeViewData.DisplayWorkSampleTree(this.m_ReportApp.resultFilesList, TSampleParam);
//在grid上添加测量结果
m_ReportApp.DisCurrentPicProperty();
}
#endregion
#region 多数据源操作部份相关
private void button1_Click(object sender, EventArgs e)
{
}
///
/// 取消多数据源选择
///
public void UnplugMultipleDataDataSources()
{
//int iselectcount = 0;
////查找是否已经有超过2个以上的数据源被选择上
//for (int i = 0; i < this.treeView1.Nodes.Count; i++)
//{
// this.treeView1.Nodes[i].Checked = this.treeView1.Nodes[i].Checked;
// if (this.treeView1.Nodes[i].Checked == true)
// {
// iselectcount++;
// }
//}
////已经有两个以上的数据源被选择上,进行取消操作
//if (iselectcount >= 2)
//{
// //先取消所有的treeview节点的选择
// for (int i = 0; i < this.treeView1.Nodes.Count; i++)
// {
// this.treeView1.Nodes[i].Checked = false;
// //更新底层及属性窗口
// m_ReportApp.m_DataMgrFun.m_ReportProjFileMgr.SetSwitchForSmlResultFile(i, this.treeView1.Nodes[i].Checked);
// }
// //获取
// OTSSampleMeaInfo SMInfo = new OTSSampleMeaInfo();
// DataMgrFun dataMgr = m_ReportApp.m_DataMgrFun;
// dataMgr.SetSampleParamVal(OTS_RETORT_PROP_GRID_ITEMS.DATA_SOURCE, OTS_ITEM_TYPES.COMBO, 0);
// //获取属性窗口更新显示
// dataMgr.GetWorkSamplePropertyVal(ref SMInfo);
// //显示默认的图表
// m_ReportApp.m_PropWindow.m_SampleGrid.ShowDataDiagram();
//}
}
#endregion
//读取rst文件中的帧图位置信息
private DataTable ReadXML(string a_position)
{
//创建空列
DataTable dt = new DataTable();
dt.TableName = "Fields";
dt.Columns.Add("FieldX");
dt.Columns.Add("FieldY");
dt.Columns.Add("ID");
XmlDocument doc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里的注释
XmlReader reader = XmlReader.Create(a_position, settings);
doc.Load(reader);
//得到根结点
XmlNode xn = doc.SelectSingleNode("XMLData");
//得到根结点的所有子节点
XmlNodeList xnl = xn.ChildNodes;
foreach (XmlNode xml in xnl)
{
if (xml.Name.ToString() == "Collection")
{
for (int i = 0; i < xml.ChildNodes.Count; i++)
{
if (xml.ChildNodes[i].Name.ToLower() == "member")
{
DataRow dr = dt.NewRow();
dr["FieldX"] = xml.ChildNodes[i].Attributes.GetNamedItem("FieldX").Value;
dr["FieldY"] = xml.ChildNodes[i].Attributes.GetNamedItem("FieldY").Value;
dr["ID"] = xml.ChildNodes[i].Attributes.GetNamedItem("ID").Value;
dt.Rows.Add(dr);
}
}
}
}
return dt;
}
}
}