using System; using System.Collections.Generic; using System.Windows.Controls; using OS.Spin.View.SquareBox; using OS.Spin.ViewModle.Models; using OS.Spin.Common; namespace OS.Spin.View.Utils { public class SquareBoxUtils { private static SquareBoxUtils _squareBoxUtils = null; private static object _lock = new object(); private static List _userControlFathers = null; //控制父模板数据的存储 private static List _defectShowDatas = null; //控制父模板数据 private static SquareBoxDelegateUtil _squareBoxDelegateUtil = null; //创建委托实例 private static SquareBoxDefectDelegateUtil _squareBoxDefectDelegateUtil = null; //创建瑕疵点状态改变父模板控件委托 private static DefectShowDelegateUtil _defectShowDelegateUtil = null; //委托瑕疵点状态改变 private static DefectShowData _defectShowData = null; //保存之前选中状态的数据 /// /// 无参构造函数 /// public SquareBoxUtils() { _userControlFathers = new List(); _squareBoxDefectDelegateUtil = new SquareBoxDefectDelegateUtil(); _defectShowDatas = new List(); _squareBoxDelegateUtil = new SquareBoxDelegateUtil(); _defectShowDelegateUtil = new DefectShowDelegateUtil(); _defectShowData = new DefectShowData(); } /// /// 返回选中状态的瑕疵对象 /// /// public DefectShowData getDefect() { return _defectShowData; } /// /// 选中其它的之后这个状态也要清楚,否则出现两个选中状态 /// public void clearOneDefectShowData() { _defectShowData = null; } /// /// 返回委托瑕疵点实例 /// /// public DefectShowDelegateUtil getDefectShowDelegateUtil() { return _defectShowDelegateUtil; } /// /// 返回父模板瑕疵点状态改变的控件集合 /// /// public SquareBoxDefectDelegateUtil getSquareBoxDefectDelegateUtil() { return _squareBoxDefectDelegateUtil; } /// /// 返回瑕疵点父模板控件集合 /// /// public List getControlUserOnes() { return _userControlFathers; } /// /// 清空之前先查找是哪个被选中的 /// /// public UserControOne findSelectedControOne() { try { for (int i = 0; i < _userControlFathers.Count; i++) { if (_userControlFathers[i].ground == 1) //找到为选中状态的那个 { return _userControlFathers[i].userControOne; //找到了直接返回 } } } catch (Exception ex) { LogisTrac.WriteLog(string.Format("findSelectedControOne:{0}", ex.Message)); } return null; //没有找到直接返回Null } /// /// 清空父模板 /// public void clearControlUserOnes() { if (null != _userControlFathers && _userControlFathers.Count > 0) { _userControlFathers.Clear(); } } /// /// 返回委托实例 /// /// public SquareBoxDelegateUtil getSquareBoxDelegateUtil() { return _squareBoxDelegateUtil; } /// /// 主界面添加瑕疵 /// /// public void addDefectShowData(DefectShowData defectShowData) { if (null != _defectShowDatas && !_defectShowDatas.Contains(defectShowData)) { _defectShowDatas.Add(defectShowData); } } /// /// 清空所有的瑕疵图片 /// public void clearDefectShowData() { //非空才能清空该集合 if (null != _defectShowDatas && _defectShowDatas.Count > 0) { _defectShowDatas.Clear(); } } /// /// 获取单列实例 /// /// public static SquareBoxUtils getInstance() { if (_squareBoxUtils == null) { lock (_lock) { if (_squareBoxUtils == null) { _squareBoxUtils = new SquareBoxUtils(); } } } return _squareBoxUtils; } /// /// 数据赋值操作 /// /// public void setDefectShowDatas(List defectShowDatas) { _defectShowDatas = defectShowDatas; } /// /// 获取数据 /// /// public List getDefectShowDatas() { return _defectShowDatas; } /// /// 父模板赋值操作 /// /// public void setUserControlFathers(List userControlFathers) { _userControlFathers = userControlFathers; } /// /// 获取界面显示的集合 /// /// public List getUserControlFathers() { return _userControlFathers; } /// /// 点击更新该元素的背景图片状态并且消除其它元素的状态 /// /// public void updateUserControlFathers(UserControl4 userControl4) { try { if (null != _userControlFathers && _userControlFathers.Count > 0) { if (isExitUserControl4(userControl4)) { for (var i = 0; i < _userControlFathers.Count; i++) { ControlUserOne controlUserOne = _userControlFathers[i]; if (userControl4.Equals(controlUserOne.userControl4)) //这个操作是为了避免删除的时候,将其它为已选状态的元素给重置了 { controlUserOne.ground = 1; //clearOneDefectShowData(); //清空选中状态 } else { controlUserOne.ground = 0; } } } } } catch (Exception ex) { LogisTrac.WriteLog(string.Format("updateUserControlFathers:{0}", ex.Message)); } } /// /// 先判断一下该元素在集合中是否存在 /// /// /// public bool isExitUserControl4(UserControl4 userControl4) { try { bool a = false; if (null != _userControlFathers && _userControlFathers.Count > 0) { for (var i = 0; i < _userControlFathers.Count; i++) { ControlUserOne controlUserOne = _userControlFathers[i]; if (userControl4.Equals(controlUserOne.userControl4)) //如果包含该元素则改变为ture { a = true; } } } return a; } catch (Exception ex) { LogisTrac.WriteLog(string.Format("isExitUserControl4:{0}", ex.Message)); return false; } } /// /// 从集合总删除该元素 /// /// public void removeUserControlFathers(OS.Spin.View.SquareBox.UserControl2 userControl2) { try { if (null != _userControlFathers && _userControlFathers.Count > 0) { for (var i = 0; i < _userControlFathers.Count; i++) { ControlUserOne controlUserOne = _userControlFathers[i]; OS.Spin.View.SquareBox.UserControl4 userControl4 = controlUserOne.userControl4; Canvas canvas = userControl4.Canvas; //获取canvas对象 OS.Spin.View.SquareBox.UserControl2 user2 = (OS.Spin.View.SquareBox.UserControl2)canvas.Children[1]; //从集合中找到了该UserControl2 if (userControl2.Equals(user2)) //找到该对象 { _userControlFathers.Remove(_userControlFathers[i]); //找到的话就删除该对象 } } } } catch (Exception ex) { LogisTrac.WriteLog(string.Format("removeUserControlFathers:{0}", ex.Message)); } } /// /// 点击移除按钮删除显示区域选中的该瑕疵 /// /// public void removeDefectShowDatas(OS.Spin.View.SquareBox.UserControl2 userControl2) { try { OS.Spin.View.SquareBox.UserControOne userControOne = null; DefectShowData defectShowData = null; if (null != _userControlFathers && _userControlFathers.Count > 0) { for (var i = 0; i < _userControlFathers.Count; i++) { ControlUserOne controlUserOne = _userControlFathers[i]; OS.Spin.View.SquareBox.UserControl4 userControl4 = controlUserOne.userControl4; Canvas canvas = userControl4.Canvas; //获取canvas对象 OS.Spin.View.SquareBox.UserControl2 user2 = (OS.Spin.View.SquareBox.UserControl2)canvas.Children[1]; //从集合中找到了该UserControl2 if (userControl2.Equals(user2)) //找到该对象 { // _userControlFathers.Remove(_userControlFathers[i]); //找到的话就删除该对象 userControOne = controlUserOne.userControOne; StackPanel stackPanel = userControOne.StackPanel; //找到下面显示数据的用户控件 OS.Spin.View.SquareBox.UserControl1 userControl1 = (OS.Spin.View.SquareBox.UserControl1)stackPanel.Children[2]; //UserControl1的父StackPanel StackPanel stackFather = userControl1.StackPanel; StackPanel stackOne = (StackPanel)stackFather.Children[0]; //破洞 TextBlock textOne = (TextBlock)stackOne.Children[1]; String hole = textOne.Text; // 取role值 StackPanel stackTwo = (StackPanel)stackFather.Children[1]; //尺寸 TextBlock textTwo = (TextBlock)stackTwo.Children[1]; String size = textTwo.Text; //取size值 StackPanel stackThree = (StackPanel)stackFather.Children[2]; //属性 TextBlock textThree = (TextBlock)stackThree.Children[1]; String attribute = textThree.Text; //能够比较的前提是瑕疵点照片没有重复的两张照片 defectShowData = new DefectShowData(hole, size, attribute); } } } if (null != defectShowData) //如果不为空,则证明找到了 { //循环找到要移除的瑕疵点数 if (null != _defectShowDatas && _defectShowDatas.Count != 0) { for (var a = 0; a < _defectShowDatas.Count; a++) { if (defectShowData.hole.Equals(_defectShowDatas[a].hole) && defectShowData.size.Equals(_defectShowDatas[a].size) && defectShowData.attribute.Equals(_defectShowDatas[a].attribute)) { _defectShowDatas.Remove(_defectShowDatas[a]); } } } } } catch (Exception ex) { LogisTrac.WriteLog(string.Format("removeDefectShowDatas:{0}", ex.Message)); } } } }