using DataRWDAL;
|
using Microsoft.Win32;
|
using System;
|
using System.Collections.ObjectModel;
|
using System.Configuration;
|
using System.IO;
|
using System.Linq;
|
using System.Windows;
|
using System.Windows.Controls;
|
using System.Windows.Input;
|
using System.Windows.Media;
|
using System.Windows.Media.Imaging;
|
using XCommon;
|
using XCore;
|
using XHandler.Class;
|
using XHandler.Class.DataEx;
|
using XHandler.View.MethodProperty;
|
using XImagingXhandler.XDAL;
|
using static XHandler.Controls.MultiComboBox;
|
|
namespace XHandler.View
|
{
|
/// <summary>
|
/// BacteriaManagement.xaml 的交互逻辑
|
/// </summary>
|
public partial class BacteriaManagement : UserControl
|
{
|
ObservableCollection<MultiCbxBaseData> bacteriaShapeList = new ObservableCollection<MultiCbxBaseData>();
|
ObservableCollection<MultiCbxBaseData> bacteriaEdgeList = new ObservableCollection<MultiCbxBaseData>();
|
ObservableCollection<MultiCbxBaseData> bacteriaColorList = new ObservableCollection<MultiCbxBaseData>();
|
ObservableCollection<Bacteria> bacterias = new ObservableCollection<Bacteria>();
|
BacteriaBll bacteriaBll = new BacteriaBll();
|
Bacteria copyBacteria = null;
|
|
public Bacteria selectedBacteria { get; set; }
|
public BacteriaManagement()
|
{
|
InitializeComponent();
|
|
bacterias = DataModule.getInstance().GetBacterias();
|
listboxBacteria.ItemsSource = bacterias;
|
|
ObservableCollection<BacteriaShape> bacteriaShapes = BacteriaShapeDB.GetBacteriaShapeList();
|
foreach (BacteriaShape shape in bacteriaShapes)
|
{
|
MultiCbxBaseData data = new MultiCbxBaseData();
|
data.ID = shape.bacteria_shape_id;
|
data.ViewName = shape.bacteria_shape_name;
|
data.IsCheck = false;
|
bacteriaShapeList.Add(data);
|
}
|
mcbShape.ItemsSource = bacteriaShapeList;
|
|
ObservableCollection<BacteriaEdge> bacteriaEdges = BacteriaEdgeDB.GetBacteriaEdgeList();
|
foreach (BacteriaEdge edge in bacteriaEdges)
|
{
|
MultiCbxBaseData data = new MultiCbxBaseData();
|
data.ID = edge.bacteria_edge_id;
|
data.ViewName = edge.bacteria_edge_name;
|
data.IsCheck = false;
|
bacteriaEdgeList.Add(data);
|
}
|
mcbEdge.ItemsSource = bacteriaEdgeList;
|
|
ObservableCollection<BacteriaColor> bacteriaColors = BacteriaColorDB.GetBacteriaColorList();
|
foreach (BacteriaColor color in bacteriaColors)
|
{
|
MultiCbxBaseData data = new MultiCbxBaseData();
|
data.ID = color.bacteria_color_id;
|
data.ViewName = color.bacteria_color_name;
|
data.IsCheck = false;
|
bacteriaColorList.Add(data);
|
}
|
mcbColor.ItemsSource = bacteriaColorList;
|
|
ObservableCollection<string> pickPositionList = DataModule.getInstance().GetPickPosition();
|
cbBacteriaPosition.ItemsSource = pickPositionList;
|
|
ObservableCollection<string> coatingPositionList = DataModule.getInstance().GetCoatingPosition();
|
cbCoatingPosition.ItemsSource = coatingPositionList;
|
ObservableCollection<DropdownName> dropdownNamesOfLogic = bacteriaBll.GetBacteriaLogicValue();
|
cbMergemasks.ItemsSource = dropdownNamesOfLogic;
|
cbDraw_label.ItemsSource = dropdownNamesOfLogic;
|
cbMergemasks.SelectedIndex = 0;
|
cbDraw_label.SelectedIndex = 0;
|
|
// 模型类型: 1-微牧酵母;2-普通酵母;3-酵母背光01;4-链霉菌
|
ObservableCollection<DropdownName> choiceModelList = ComUtility.GetDropDownList(ConfigurationManager.AppSettings["ChoiceModelType"].ToString());
|
cbModeltype.ItemsSource = choiceModelList;
|
cbModeltype.SelectedIndex = 0;
|
|
// 通道颜色: 0-灰;1-红;2-绿;3-蓝
|
ObservableCollection<DropdownName> chanelColorList = ComUtility.GetDropDownList(ConfigurationManager.AppSettings["ChanelColor"].ToString());
|
cbChanel1Color.ItemsSource = chanelColorList;
|
cbChanel1Color.SelectedIndex = 0;
|
cbChanel2Color.ItemsSource = chanelColorList;
|
cbChanel2Color.SelectedIndex = 0;
|
|
tbxMark_color1.Text = "255";
|
tbxMark_color2.Text = "0";
|
tbxMark_color3.Text = "0";
|
tbxCaptureDs_ratio.Text = "0.25";
|
tbxMean_diam.Text = "120";
|
tbxFont_Size.Text = "30";
|
tbxDistToEdge.Text = "500";
|
}
|
|
private void btnUpload_Click(object sender, RoutedEventArgs e)
|
{
|
if (selectedBacteria == null)
|
return;
|
OpenFileDialog dlg = new OpenFileDialog();
|
dlg.Filter = "Image files(*.jpg,*.gif,*.png)|*.jpg;*.gif;*.png|All files|*.*";
|
dlg.FilterIndex = 1;
|
dlg.RestoreDirectory = true;
|
if (dlg.ShowDialog() == true)
|
{
|
string imgFile = dlg.FileNames[0];
|
string folder = ConfigurationManager.AppSettings["ImgPath"].ToString();
|
if (!Directory.Exists(folder))
|
Directory.CreateDirectory(folder);
|
|
string ext = System.IO.Path.GetExtension(imgFile);
|
string destName = DateTime.Now.ToString("yyyyMMddTHHmmssms") + ext;
|
string destFile = folder + "\\" + destName;
|
File.Copy(imgFile, destFile, true);
|
|
imageBacteria.Source = BitmapFrame.Create(new Uri(destFile), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
|
|
selectedBacteria.bacteria_picture = destName;
|
}
|
}
|
|
private void btnDelete_Click(object sender, RoutedEventArgs e)
|
{
|
if (selectedBacteria == null)
|
return;
|
selectedBacteria.bacteria_picture = "";
|
|
imageBacteria.Source = BitmapFrame.Create(new Uri("pack://application:,,,./Assets/Consumables/无图片.png"), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
|
}
|
|
private void mcbShape_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
{
|
if (selectedBacteria == null)
|
return;
|
if (mcbShape.ChekedItems.Count > 0)
|
{
|
string selection = "";
|
ObservableCollection<MultiCbxBaseData> selectedList = mcbShape.ChekedItems;
|
foreach (var data in selectedList)
|
{
|
if (string.IsNullOrEmpty(selection))
|
selection = data.ViewName;
|
else
|
selection += "," + data.ViewName;
|
}
|
selectedBacteria.bacteria_shape = selection;
|
}
|
}
|
|
private void mcbEdge_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
{
|
if (selectedBacteria == null)
|
return;
|
|
if (mcbEdge.ChekedItems.Count > 0)
|
{
|
string selection = "";
|
ObservableCollection<MultiCbxBaseData> selectedList = mcbEdge.ChekedItems;
|
foreach (var data in selectedList)
|
{
|
if (string.IsNullOrEmpty(selection))
|
selection = data.ViewName;
|
else
|
selection += "," + data.ViewName;
|
}
|
selectedBacteria.bacteria_edge = selection;
|
}
|
}
|
|
private void mcbColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
{
|
if (selectedBacteria == null)
|
return;
|
|
if (mcbColor.ChekedItems.Count > 0)
|
{
|
string selection = "";
|
ObservableCollection<MultiCbxBaseData> selectedList = mcbColor.ChekedItems;
|
foreach (var data in selectedList)
|
{
|
if (string.IsNullOrEmpty(selection))
|
selection = data.ViewName;
|
else
|
selection += "," + data.ViewName;
|
}
|
selectedBacteria.bacteria_color = selection;
|
}
|
}
|
|
private void cbBacteriaPosition_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
{
|
if (selectedBacteria == null)
|
return;
|
selectedBacteria.choice_position = cbBacteriaPosition.SelectedIndex + 1;
|
}
|
|
private void listboxBacteria_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
{
|
if (listboxBacteria.SelectedIndex < 0)
|
return;
|
|
Bacteria item = listboxBacteria.SelectedItem as Bacteria;
|
selectedBacteria = DeepCopyByReflection.Copy(item);
|
|
this.DataContext = selectedBacteria;
|
|
string folder = ConfigurationManager.AppSettings["ImgPath"].ToString();
|
string imgPath = folder + "\\" + selectedBacteria.bacteria_picture;
|
if (File.Exists(imgPath))
|
imageBacteria.Source = BitmapFrame.Create(new Uri(imgPath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
|
else
|
imageBacteria.Source = BitmapFrame.Create(new Uri("pack://application:,,,./Assets/Consumables/无图片.png"), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
|
|
if (string.IsNullOrEmpty(selectedBacteria.bacteria_shape))
|
mcbShape.ChekedItems.Clear();
|
else
|
{
|
mcbShape.ChekedItems.Clear();
|
string[] ary = selectedBacteria.bacteria_shape.Split(',');
|
foreach (var str in ary)
|
{
|
MultiCbxBaseData data = bacteriaShapeList.Where(s => s.ViewName == str).FirstOrDefault();
|
if (data != null)
|
mcbShape.AddSelectedItem(data);
|
}
|
|
}
|
|
if (string.IsNullOrEmpty(selectedBacteria.bacteria_edge))
|
mcbEdge.ChekedItems.Clear();
|
else
|
{
|
mcbEdge.ChekedItems.Clear();
|
string[] ary = selectedBacteria.bacteria_edge.Split(',');
|
foreach (var str in ary)
|
{
|
MultiCbxBaseData data = bacteriaEdgeList.Where(s => s.ViewName == str).FirstOrDefault();
|
if (data != null)
|
mcbEdge.AddSelectedItem(data);
|
}
|
|
}
|
|
if (string.IsNullOrEmpty(selectedBacteria.bacteria_color))
|
mcbColor.ChekedItems.Clear();
|
else
|
{
|
mcbColor.ChekedItems.Clear();
|
string[] ary = selectedBacteria.bacteria_color.Split(',');
|
foreach (var str in ary)
|
{
|
MultiCbxBaseData data = bacteriaColorList.Where(s => s.ViewName == str).FirstOrDefault();
|
if (data != null)
|
mcbColor.AddSelectedItem(data);
|
}
|
|
}
|
|
if (selectedBacteria.choice_position == 2)
|
cbBacteriaPosition.SelectedIndex = 1;
|
else
|
cbBacteriaPosition.SelectedIndex = 0;
|
|
cbCoatingPosition.SelectedIndex = 0;
|
|
//if (selectedBacteria.model_type == 1)
|
//{
|
// cbModeltype.SelectedIndex = 0;
|
//}
|
//else if (selectedBacteria.model_type == 1)
|
//{
|
// cbModeltype.SelectedIndex = 1;
|
//}
|
|
cbDraw_label.Text = selectedBacteria.draw_label;
|
cbMergemasks.Text = selectedBacteria.merge_masks;
|
|
if (!string.IsNullOrEmpty(selectedBacteria.mark_color))
|
{
|
string[] markColors = selectedBacteria.mark_color.Split(',');
|
|
tbxMark_color1.Text = markColors[0].Substring(1, markColors[0].Length - 1);
|
tbxMark_color2.Text = markColors[1];
|
tbxMark_color3.Text = markColors[2].Substring(0, markColors[2].Length - 1);
|
}
|
else
|
{
|
tbxMark_color1.Text = "0";
|
tbxMark_color2.Text = "0";
|
tbxMark_color3.Text = "0";
|
}
|
|
// 模型类型
|
cbModeltype.SelectedValue = selectedBacteria.model_type.ToString();
|
|
// 通道1、通道2
|
cbChanel1Color.SelectedValue = selectedBacteria.chanel1_color.ToString();
|
cbChanel2Color.SelectedValue = selectedBacteria.chanel2_color.ToString();
|
}
|
|
public void SaveBacteria()
|
{
|
if (selectedBacteria == null)
|
return;
|
if (selectedBacteria.is_default_type == 1)
|
return;
|
Bacteria bacteria = listboxBacteria.SelectedItem as Bacteria;
|
bacteria.Copy(selectedBacteria);
|
|
bacteria.mark_color = "(" + tbxMark_color1.Text + "," + tbxMark_color2.Text + "," + tbxMark_color3.Text + ")";
|
bacteria.bacteria_content = tbbacteria_content.Text;
|
|
DropdownName ddn = cbModeltype.SelectedItem as DropdownName;
|
bacteria.model_type = Convert.ToInt32(ddn.dropdown_id.ToString());
|
|
DropdownName ddn1 = cbMergemasks.SelectedItem as DropdownName;
|
bacteria.merge_masks = ddn1.dropdown_name.ToString();
|
|
DropdownName ddn2 = cbDraw_label.SelectedItem as DropdownName;
|
bacteria.draw_label = ddn2.dropdown_name.ToString();
|
|
// 通道1、通道2
|
DropdownName chanel1Color = cbChanel1Color.SelectedItem as DropdownName;
|
bacteria.chanel1_color = Convert.ToInt32(chanel1Color.dropdown_id);
|
DropdownName chanel2Color = cbChanel2Color.SelectedItem as DropdownName;
|
bacteria.chanel2_color = Convert.ToInt32(chanel2Color.dropdown_id); ;
|
|
int ret = BacteriaDB.UpdateBacteriaIntodb(bacteria);
|
if (ret > 0)
|
{
|
PlsSetProperty plsSetProperty = new PlsSetProperty($"菌落:{bacteria.bacteria_name} 保存成功", false);
|
plsSetProperty.closeEvent += PlsSetProperty_closeEvent;
|
System.Windows.Window wnd = Application.Current.MainWindow;
|
Grid parent = Utilities.FindVisualChild<Grid>(wnd);
|
parent.Children.Add(plsSetProperty);
|
}
|
else
|
{
|
PlsSetProperty plsSetProperty = new PlsSetProperty($"菌落:{bacteria.bacteria_name} 保存失败", false);
|
plsSetProperty.closeEvent += PlsSetProperty_closeEvent;
|
System.Windows.Window wnd = Application.Current.MainWindow;
|
Grid parent = Utilities.FindVisualChild<Grid>(wnd);
|
parent.Children.Add(plsSetProperty);
|
}
|
}
|
|
public Bacteria AddNewBacteria(string name)
|
{
|
Bacteria newBacteria = new Bacteria();
|
newBacteria.bacteria_id = Guid.NewGuid().ToString();
|
newBacteria.bacteria_name = name;
|
newBacteria.is_default_type = 0;
|
newBacteria.bacteria_status = 1;
|
newBacteria.timestamp = DateTime.Now;
|
|
// 模型类型
|
if (cbModeltype.ItemsSource != null)
|
{
|
ObservableCollection<DropdownName> dropdownNames = (ObservableCollection<DropdownName>)cbModeltype.ItemsSource;
|
newBacteria.model_type = Convert.ToInt32(dropdownNames[0].dropdown_id.ToString());
|
}
|
|
// 合并识别
|
if (cbMergemasks.ItemsSource != null)
|
{
|
ObservableCollection<DropdownName> dropdownNames = (ObservableCollection<DropdownName>)cbMergemasks.ItemsSource;
|
newBacteria.merge_masks = dropdownNames[0].dropdown_name.ToString();
|
}
|
|
// 菌标记序号
|
if (cbDraw_label.ItemsSource != null)
|
{
|
ObservableCollection<DropdownName> dropdownNames = (ObservableCollection<DropdownName>)cbDraw_label.ItemsSource;
|
newBacteria.draw_label = dropdownNames[0].dropdown_name.ToString();
|
}
|
|
int ret = BacteriaDB.AddBacteriaIntodb(newBacteria);
|
if (ret > 0)
|
{
|
bacterias.Add(newBacteria);
|
PlsSetProperty plsSetProperty = new PlsSetProperty($"菌落:{name} 添加成功", false);
|
plsSetProperty.closeEvent += PlsSetProperty_closeEvent;
|
System.Windows.Window wnd = Application.Current.MainWindow;
|
Grid parent = Utilities.FindVisualChild<Grid>(wnd);
|
parent.Children.Add(plsSetProperty);
|
}
|
else
|
{
|
newBacteria = null;
|
PlsSetProperty plsSetProperty = new PlsSetProperty($"菌落:{name} 添加失败", false);
|
plsSetProperty.closeEvent += PlsSetProperty_closeEvent;
|
System.Windows.Window wnd = Application.Current.MainWindow;
|
Grid parent = Utilities.FindVisualChild<Grid>(wnd);
|
parent.Children.Add(plsSetProperty);
|
}
|
|
return newBacteria;
|
}
|
|
private void menuCopy_Click(object sender, RoutedEventArgs e)
|
{
|
if (listboxBacteria.SelectedItem == null)
|
return;
|
|
copyBacteria = listboxBacteria.SelectedItem as Bacteria;
|
|
ContextMenu menu = FindResource("consumableMenu") as ContextMenu;
|
System.Windows.Controls.MenuItem mi = menu.Items[1] as System.Windows.Controls.MenuItem;
|
mi.IsEnabled = true;
|
}
|
|
private void menuPaste_Click(object sender, RoutedEventArgs e)
|
{
|
if (copyBacteria == null)
|
return;
|
|
Bacteria newBacteria = copyBacteria.Copy() as Bacteria;
|
newBacteria.bacteria_name = copyBacteria.bacteria_name + " " + Properties.Resources.strCopy;
|
newBacteria.is_default_type = 0;
|
newBacteria.bacteria_id = Guid.NewGuid().ToString();
|
bacterias.Add(newBacteria);
|
BacteriaDB.AddBacteriaIntodb(newBacteria);
|
}
|
|
private void menuDelete_Click(object sender, RoutedEventArgs e)
|
{
|
if (listboxBacteria.SelectedItem == null)
|
return;
|
PlsToolTipWin plsToolTipWin = new PlsToolTipWin("Do you want to delete this bacteria? ");
|
plsToolTipWin.Height = ActualHeight;
|
plsToolTipWin.Width = ActualWidth;
|
plsToolTipWin.btnClearData.Visibility = Visibility.Hidden;
|
plsToolTipWin.lauchView = null;
|
|
SolidColorBrush mybtn1_Brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(0, 0, 0, 0));
|
plsToolTipWin.Background = (System.Windows.Media.Brush)mybtn1_Brush;
|
plsToolTipWin.ShowDialog();
|
if (plsToolTipWin.DialogResult == true)
|
{
|
Bacteria lab = listboxBacteria.SelectedItem as Bacteria;
|
bacterias.Remove(lab);
|
lab.bacteria_status = 0;
|
int flag = BacteriaDB.UpdateBacteriaIntodb(lab);
|
if (flag > 0)
|
{
|
PlsSetProperty plsSetProperty = new PlsSetProperty($"菌落:{lab.bacteria_name} 删除成功", false);
|
plsSetProperty.closeEvent += PlsSetProperty_closeEvent;
|
System.Windows.Window wnd = Application.Current.MainWindow;
|
Grid parent = Utilities.FindVisualChild<Grid>(wnd);
|
parent.Children.Add(plsSetProperty);
|
}
|
else
|
{
|
PlsSetProperty plsSetProperty = new PlsSetProperty($"菌落:{lab.bacteria_name} 删除失败", false);
|
plsSetProperty.closeEvent += PlsSetProperty_closeEvent;
|
System.Windows.Window wnd = Application.Current.MainWindow;
|
Grid parent = Utilities.FindVisualChild<Grid>(wnd);
|
parent.Children.Add(plsSetProperty);
|
}
|
}
|
else
|
{
|
}
|
}
|
|
private void listboxBacteria_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
|
{
|
System.Windows.Controls.ListBoxItem listBoxItem = Utilities.FindVisualParent<System.Windows.Controls.ListBoxItem>(e.OriginalSource as DependencyObject) as System.Windows.Controls.ListBoxItem;
|
if (listBoxItem != null)
|
{
|
listBoxItem.Focus();
|
|
Bacteria bacteria = listBoxItem.DataContext as Bacteria;
|
listboxBacteria.SelectedItem = bacteria;
|
|
ContextMenu menu = FindResource("BacteriaMenu") as ContextMenu;
|
System.Windows.Controls.MenuItem mi = menu.Items[2] as System.Windows.Controls.MenuItem;
|
if (bacteria.is_default_type == 1)
|
mi.IsEnabled = false;
|
else
|
mi.IsEnabled = true;
|
|
e.Handled = true;
|
}
|
}
|
|
private void color_TextChanged(object sender, TextChangedEventArgs e)
|
{
|
System.Windows.Controls.TextBox text = ((System.Windows.Controls.TextBox)sender);
|
if (int.TryParse(text.Text, out int flag))
|
{
|
if (flag >= 0 && flag <= 255)
|
{
|
colorError.Text = "";
|
text.BorderThickness = new Thickness(0, 0, 0, 0);
|
return;
|
}
|
}
|
|
colorError.Text = "输入范围应在[0-255]的整数";
|
text.BorderThickness = new Thickness(1, 1, 1, 1);
|
text.BorderBrush = Brushes.Red;
|
}
|
|
private void PlsSetProperty_closeEvent(object sender, EventArgs e)
|
{
|
System.Windows.Window wnd = Application.Current.MainWindow;
|
Grid grid = Utilities.FindVisualChild<Grid>(wnd);
|
|
UIElement element = sender as UIElement;
|
grid.Children.Remove(element);
|
}
|
}
|
}
|