Newer
Older
Correlator / Correlator / View / HomePageProWindow.xaml.cs
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Input;
using Correlator.Util;
using GalaSoft.MvvmLight.Messaging;
using MathWorks.MATLAB.NET.Arrays;
using ScottPlot;
using ScottPlot.Plottable;
using MessageBox = HandyControl.Controls.MessageBox;

namespace Correlator.View
{
    public partial class HomePageProWindow : Window
    {
        private readonly Regex _regex = new Regex("[^0-9]+");

        public HomePageProWindow()
        {
            InitializeComponent();

            var scottPlot = ScottplotView.Plot;
            scottPlot.XLabel("频率(Hz)");
            scottPlot.YLabel("相关系数");
            ScottplotView.Refresh();

            #region 渲染、清空数据波形图

            Messenger.Default.Register<MWArray[]>(this, MessengerToken.RenderOscillogram, array =>
            {
                "HomePageProWindow".WriteLog("开始渲染波形图");
                //柱状图横坐标集合
                var xDoubles = ((MWNumericArray)array[5]).GetArray();
                //柱状图纵坐标集合
                var yDoubles = ((MWNumericArray)array[4]).GetArray();
                Application.Current.Dispatcher.Invoke(delegate
                {
                    //点如果较少,可以直接AddBar,但是超过一千个点,不能直接AddBar,否则Bar颜色会被边框覆盖从而呈现黑色
                    ScottplotView.Plot.Add(new BarPlot(DataGen.Consecutive(xDoubles.Length), yDoubles, null, null)
                    {
                        FillColor = Color.FromArgb(255, 49, 151, 36),
                        BorderColor = Color.FromArgb(255, 49, 151, 36),
                        BorderLineWidth = 0.1f
                    });
                    ScottplotView.Refresh();
                });
            });

            Messenger.Default.Register<string>(this, MessengerToken.ClearOscillogram, s =>
            {
                "HomePageProWindow".WriteLog("清空波形图");
                ScottplotView.Plot.Clear();
                ScottplotView.Refresh();
            });

            #endregion
            
            #region 退出应用

            CloseButton.Click += delegate
            {
                var result = MessageBox.Show("是否确认退出应用?", "温馨提示", MessageBoxButton.YesNo, MessageBoxImage.Question);
                if (result == MessageBoxResult.Yes)
                {
                    //注销串口数据监听
                    SerialPortManager.Get.UnRegisterSerialPort();
                    Close();
                }
            };

            #endregion

            #region 打开图片文件列表

            OpenImageFileButton.Click += delegate
            {
                var fileWindow = new PictureFileWindow
                {
                    Owner = GetWindow(this)
                };
                fileWindow.Show();
            };

            #endregion
            
            #region 打开音频文件列表

            OpenAudioFileButton.Click += delegate
            {
                var fileWindow = new AudioFileWindow
                {
                    Owner = GetWindow(this)
                };
                fileWindow.Show();
            };

            #endregion

            #region 打开听音界面

            ListenAudioButton.Click += delegate
            {
                if (!SerialPortManager.Get.Sp.IsOpen)
                {
                    MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                var auditionWindow = new AuditionWindow
                {
                    Owner = GetWindow(this)
                };
                auditionWindow.Show();
            };

            #endregion

            #region 管径输入监听

            PipeDiameterTextBox.PreviewTextInput += delegate(object sender, TextCompositionEventArgs e)
            {
                e.Handled = _regex.IsMatch(e.Text);
            };

            #endregion

            #region 管段长度输入监听

            PipeLengthTextBox.PreviewTextInput += delegate(object sender, TextCompositionEventArgs e)
            {
                e.Handled = _regex.IsMatch(e.Text);
            };

            #endregion

            #region 低频输入监听

            LowFrequencyTextBox.PreviewTextInput += delegate(object sender, TextCompositionEventArgs e)
            {
                e.Handled = _regex.IsMatch(e.Text);
            };

            #endregion

            #region 高频输入监听

            HighFrequencyTextBox.PreviewTextInput += delegate(object sender, TextCompositionEventArgs e)
            {
                e.Handled = _regex.IsMatch(e.Text);
            };

            #endregion
        }
    }
}