using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OS.Spin.ViewModle.Models;
using OS.Spin.View.DefectPreviewArea;
using System.Windows.Controls;
namespace OS.Spin.View.Utils
{
///
/// 瑕疵预览区域管理工具类
///
public class DefectPreviewAreaUtil
{
private static List _defectPreviewAreas = null; //保存瑕疵预览区域数据用于动态刷新界面
private static object _object = new object(); //锁对象
private static DefectPreviewAreaUtil _defectPreviewAreaUtil = null; //管理其它对象的单例对象
private static List _defectSpanPreview = null; //已经添加的瑕疵点控件
private static DefectPreviewDelegateUtil _defectPreviewDelegateUtil = null; //委托实例
///
/// 无参构造函数初始化数据
///
public DefectPreviewAreaUtil()
{
_defectPreviewAreas = new List(); //创建瑕疵预览区域缓存区
_defectSpanPreview = new List();
_defectPreviewDelegateUtil = new DefectPreviewDelegateUtil(); //获取该委托实例
}
///
/// 返回瑕疵控件对象集合
///
///
public List getDefectSpanPreviews()
{
return _defectSpanPreview;
}
///
/// 添加该瑕疵控件到集合中管理
///
///
public void addDefectSpanPreview(DefectSpanPreview defectSpanPreview)
{
if (!_defectSpanPreview.Contains(defectSpanPreview)) //只有不存在该对象的时候才添加该对象
{
_defectSpanPreview.Add(defectSpanPreview);
}
}
public void removeDefectSpanPreview()
{
if (null != _defectSpanPreview && _defectSpanPreview.Count > 0)
{
_defectSpanPreview.Clear();
//for(int j = 0; j < _defectSpanPreview.Count; j++)
//{
// _defectSpanPreview.Remove(_defectSpanPreview[j]);
//}
}
}
///
/// 单例类实例化
///
///
public static DefectPreviewAreaUtil getInstance()
{
if (null == _defectPreviewAreaUtil)
{
lock (_object)
{
if (null == _defectPreviewAreaUtil)
{
_defectPreviewAreaUtil = new DefectPreviewAreaUtil();
}
}
}
return _defectPreviewAreaUtil;
}
///
/// 获取该委托实例
///
///
public DefectPreviewDelegateUtil getDefectPreviewDelegateUtil()
{
return _defectPreviewDelegateUtil;
}
///
/// 获取瑕疵预览区集合对象
///
///
public List getDefectPreviewAreas()
{
return _defectPreviewAreas;
}
///
/// 向瑕疵集合中添加数据
///
///
public void addDefectPreviewArea(OS.Spin.ViewModle.Models.DefectPreviewArea defectPreviewArea)
{
_defectPreviewAreas.Add(defectPreviewArea);
}
///
/// 从集合中删除某个瑕疵点
///
///
public void removeDefectDataImage(DefectDataImage defectDataImage)
{
//保证非空
if(null != _defectSpanPreview && _defectSpanPreview.Count > 0)
{
//找到该控件是否存在
for(int i = 0; i < _defectSpanPreview.Count; i++)
{
DefectSpanPreview defectSpanPreview = _defectSpanPreview[i];
StackPanel stack = defectSpanPreview.StackPanel;
Canvas canvas = (Canvas)stack.Children[4]; //瑕疵点显示区域数据
//List defectDataImages = (DefectDataImage)canvas.Children.OfType();
//最多四个
int len = canvas.Children.Count;
DefectDataImage defectDataImageOne = null;
for (int c = 0; c < len; c++) {
defectDataImageOne = (DefectDataImage)canvas.Children[c];
if (defectDataImageOne != null && defectDataImageOne.Equals(defectDataImage)) //找到了
{
canvas.Children.Remove(defectDataImageOne); //找到了就删除掉
StackPanel stackPanelOne = (StackPanel)defectDataImage.stackPanelFather;
TextBlock textBlockOne = (TextBlock)stackPanelOne.Children[0];
TextBlock textBlockTwo = (TextBlock)stackPanelOne.Children[1];
TextBlock textBlockThree = (TextBlock)stackPanelOne.Children[2];
string type = textBlockOne.Text; //类型
string length = textBlockTwo.Text; //长度
string score = textBlockThree.Text; //分数
//获取布匹编号
Border border = (Border)stack.Children[0];
TextBlock textBlock = (TextBlock)border.Child;
//TextBlock textBlock = (TextBlock)stack.Children[0];
string text = textBlock.Text;
//根据布匹编号找到该数据
for (int j = 0; j < _defectPreviewAreas.Count; j++)
{
OS.Spin.ViewModle.Models.DefectPreviewArea defectPreviewArea = _defectPreviewAreas[j];
String number = defectPreviewArea.DefectNumber;
if (text == number) //找到相同的编号了
{
List defectSpots = defectPreviewArea.DefectSpots;
for (int a = 0; a < defectSpots.Count; a++)
{
if (defectSpots[a].DefectType == type && defectSpots[a].DefectLength == length && defectSpots[a].DefectDeduct == score)
{
//到这一步终于让我给找到了,哈哈,找到了就直接删除了吧,这过程确实比较麻烦像爬虫一样
defectSpots.Remove(defectSpots[a]); //删除相同的元素
return; //我已经找到了,我还找毛线,直接return避免重复查找
}
}
}
}
}
}
}
}
}
}
}