using MeterVision.Config;
using MeterVision.model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace MeterVision.Dlg
{
///
/// EditStandValueDlg.xaml 的交互逻辑
///
public partial class EditStandValueDlg : Window
{
public StandValueModel mStandValueModel { get; private set; }
private string CurImagePath = string.Empty;
public event Action OnEditStandValue;
public EditStandValueDlg(StandValueModel standValueModel)
{
InitializeComponent();
int width = CfginiItem.GetConfigItem().DialogStandSize_Width;
int height = CfginiItem.GetConfigItem().DialogStandSize_Height;
if (width != 0 && height != 0)
{
this.Width = width;
this.Height = height;
}
mStandValueModel = standValueModel;
InitUIValue(standValueModel);
CurImagePath = "";
if (standValueModel.ModelType == 2)
{
CurImagePath = mStandValueModel.SrcImage; //让界面线显示结果图片
}
LoadImage();
}
private void InitUIValue(StandValueModel standValueModel)
{
//ModelType = 1 模板标准值修改, = 2任务标准值修改;
pnlLeft.Visibility = pnlRight.Visibility = pnlFinalValue.Visibility =
(standValueModel.ModelType == 1 ? Visibility.Collapsed : Visibility.Visible);
txtFinalValue.Text = standValueModel.FinalValue;
txtStandValue.Text = standValueModel.StandValue;
}
private void LoadImage()
{
if (CurImagePath.Equals(mStandValueModel.SrcImage))
{
ucImage.ImageSource = mStandValueModel.DstImage;
ucImage.ImageName = "结果图片";
CurImagePath = mStandValueModel.DstImage;
}
else
{
ucImage.ImageSource = mStandValueModel.SrcImage;
ucImage.ImageName = "原始图片";
CurImagePath = mStandValueModel.SrcImage;
}
}
private void BtnRight_Click(object sender, RoutedEventArgs e)
{
LoadImage();
}
private void BtnLeft_Click(object sender, RoutedEventArgs e)
{
LoadImage();
}
private void BtnCopy_Click(object sender, RoutedEventArgs e)
{
txtStandValue.Text = txtFinalValue.Text;
}
private void BtnOk_Click(object sender, RoutedEventArgs e)
{
string standValue = txtStandValue.Text.Trim();
if (string.IsNullOrWhiteSpace(standValue))
{
MessageBox.Show("请输入标准值。", "提示",
MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
if (!IsPositiveNumber(standValue))
{
MessageBox.Show("请输入正确的值。", "提示",
MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
mStandValueModel.StandValue = standValue;
//DialogResult = true;
this.Close();
OnEditStandValue?.Invoke(mStandValueModel);
}
private void BtnClose_Click(object sender, RoutedEventArgs e)
{
//DialogResult = false;
this.Close();
}
private void TxtStandValue_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
//string input = e.Text;
//// 检查是否输入的是有效的数字或小数点
//// 1. 只允许数字、英文小数点
//// 2. 禁止输入任何中文字符
//if (Regex.IsMatch(input, @"[^0-9.]") || (input == "." && txtStandValue.Text.Contains(".")))
//{
// e.Handled = true; // 阻止非法字符
//}
}
private void TxtStandValue_TextChanged(object sender, TextChangedEventArgs e)
{
//string text = txtStandValue.Text;
//// 如果输入为空或者不是合法的正数或小数
//if (!string.IsNullOrEmpty(text) && !IsValidNumber(text))
//{
// // 可以根据需求重置文本或者给出提示
// txtStandValue.Text = "0"; // 默认值为 0
// txtStandValue.SelectionStart = txtStandValue.Text.Length; // 保证光标位置在文本末尾
//}
}
private bool IsValidNumber(string text)
{
// 正则表达式:仅允许正整数或一个小数点的数字
Regex regex = new Regex(@"^\d+(\.\d+)?$");
return regex.IsMatch(text);
}
public bool IsPositiveNumber(string input)
{
// 使用 double.TryParse 判断是否为数字
if (double.TryParse(input, out double result))
{
// 判断是否为正数
return result >= 0;
}
return false;
}
private void Window_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (Keyboard.Modifiers == ModifierKeys.Control)
{
//if (e.Delta > 0)
//{
// ZoomFactor *= 1.1; // Zoom in
//}
//else
//{
// ZoomFactor /= 1.1; // Zoom out
//}
//// Optionally, center the zoom around the mouse cursor
//Point mousePosition = e.GetPosition(imgViewer);
//double prevZoomFactor = 1 / ZoomFactor;
//double offsetX = (mousePosition.X * ZoomFactor - mousePosition.X * prevZoomFactor) / prevZoomFactor;
//double offsetY = (mousePosition.Y * ZoomFactor - mousePosition.Y * prevZoomFactor) / prevZoomFactor;
//scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + offsetX);
//scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + offsetY);
ucImage.ImageZoom(e.Delta > 0,e);
}
}
private void Window_Closed(object sender, EventArgs e)
{
if (WindowState != WindowState.Maximized)
{
int width = (int)this.Width;
int height = (int)this.Height;
string dialogSize = $"{width},{height}";
CfginiItem.GetConfigItem().DialogStandSize = dialogSize;
}
}
//----------------------------------------------------------------
}
}