SquareBoxUtils.cs 13.7 KB
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<ControlUserOne> _userControlFathers = null;      //控制父模板数据的存储
        private static List<DefectShowData> _defectShowDatas = null;        //控制父模板数据
        private static SquareBoxDelegateUtil _squareBoxDelegateUtil = null;  //创建委托实例
        private static SquareBoxDefectDelegateUtil _squareBoxDefectDelegateUtil = null; //创建瑕疵点状态改变父模板控件委托
        private static DefectShowDelegateUtil _defectShowDelegateUtil = null;   //委托瑕疵点状态改变
        private static DefectShowData _defectShowData = null;   //保存之前选中状态的数据
        /// <summary>
        /// 无参构造函数
        /// </summary>
        public SquareBoxUtils()
        {
            _userControlFathers = new List<ControlUserOne>();
            _squareBoxDefectDelegateUtil = new SquareBoxDefectDelegateUtil();
            _defectShowDatas = new List<DefectShowData>();
            _squareBoxDelegateUtil = new SquareBoxDelegateUtil();
            _defectShowDelegateUtil = new DefectShowDelegateUtil();
            _defectShowData = new DefectShowData();
        }

        /// <summary>
        /// 返回选中状态的瑕疵对象
        /// </summary>
        /// <returns></returns>
        public DefectShowData getDefect()
        {
            return _defectShowData;
        }

        /// <summary>
        /// 选中其它的之后这个状态也要清楚,否则出现两个选中状态
        /// </summary>
        public void clearOneDefectShowData()
        {
            _defectShowData = null;
        }

        /// <summary>
        /// 返回委托瑕疵点实例
        /// </summary>
        /// <returns></returns>
        public DefectShowDelegateUtil getDefectShowDelegateUtil()
        {
            return _defectShowDelegateUtil;
        }

        /// <summary>
        /// 返回父模板瑕疵点状态改变的控件集合
        /// </summary>
        /// <returns></returns>
        public SquareBoxDefectDelegateUtil getSquareBoxDefectDelegateUtil()
        {
            return _squareBoxDefectDelegateUtil;
        }
        /// <summary>
        /// 返回瑕疵点父模板控件集合
        /// </summary>
        /// <returns></returns>
        public List<ControlUserOne> getControlUserOnes()
        {
            return _userControlFathers;
        }

        /// <summary>
        /// 清空之前先查找是哪个被选中的
        /// </summary>
        /// <returns></returns>
        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
        }
        /// <summary>
        /// 清空父模板
        /// </summary>
        public void clearControlUserOnes()
        {
            if (null != _userControlFathers && _userControlFathers.Count > 0)
            {
                _userControlFathers.Clear();
            }
        }
        /// <summary>
        /// 返回委托实例
        /// </summary>
        /// <returns></returns>
        public SquareBoxDelegateUtil getSquareBoxDelegateUtil()
        {
            return _squareBoxDelegateUtil;
        }

        /// <summary>
        /// 主界面添加瑕疵
        /// </summary>
        /// <param name="defectShowData"></param>
        public void addDefectShowData(DefectShowData defectShowData)
        {
            if (null != _defectShowDatas && !_defectShowDatas.Contains(defectShowData))
            {
                _defectShowDatas.Add(defectShowData);
            }
        }

        /// <summary>
        /// 清空所有的瑕疵图片
        /// </summary>
        public void clearDefectShowData()
        {
            //非空才能清空该集合
            if (null != _defectShowDatas && _defectShowDatas.Count > 0)
            {
                _defectShowDatas.Clear();
            }
        }
        /// <summary>
        /// 获取单列实例
        /// </summary>
        /// <returns></returns>
        public static SquareBoxUtils getInstance()
        {
            if (_squareBoxUtils == null)
            {
                lock (_lock)
                {
                    if (_squareBoxUtils == null)
                    {
                        _squareBoxUtils = new SquareBoxUtils();
                    }
                }
            }
            return _squareBoxUtils;
        }

        /// <summary>
        /// 数据赋值操作
        /// </summary>
        /// <param name="defectShowDatas"></param>
        public void setDefectShowDatas(List<DefectShowData> defectShowDatas)
        {
            _defectShowDatas = defectShowDatas;
        }

        /// <summary>
        /// 获取数据
        /// </summary>
        /// <returns></returns>
        public List<DefectShowData> getDefectShowDatas()
        {
            return _defectShowDatas;
        }

        /// <summary>
        /// 父模板赋值操作
        /// </summary>
        /// <param name="userControlFathers"></param>
        public void setUserControlFathers(List<ControlUserOne> userControlFathers)
        {
            _userControlFathers = userControlFathers;
        }

        /// <summary>
        /// 获取界面显示的集合
        /// </summary>
        /// <returns></returns>
        public List<ControlUserOne> getUserControlFathers()
        {
            return _userControlFathers;
        }

        /// <summary>
        /// 点击更新该元素的背景图片状态并且消除其它元素的状态
        /// </summary>
        /// <param name="userControl4"></param>
        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));
            }
        }

        /// <summary>
        /// 先判断一下该元素在集合中是否存在
        /// </summary>
        /// <param name="userControl4"></param>
        /// <returns></returns>
        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;
            }
        }

        /// <summary>
        /// 从集合总删除该元素
        /// </summary>
        /// <param name="userControl2"></param>
        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));
            }
        }

        /// <summary>
        /// 点击移除按钮删除显示区域选中的该瑕疵
        /// </summary>
        /// <param name="userControl2"></param>
        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));
            }
        }
    }
}