wenxiangchao
4 天以前 2e889843b4c171f2d6ad8e0d53084040703d11f6
WPFProject/PanuonWindow.xaml.cs
@@ -4,25 +4,42 @@
using HMI.Core.Setting;
using HMI.Core.Util;
using HMI.UI.Util;
using HMI.Util.Alarm;
using log4net;
using Panuon.WPF.UI;
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace WPFProject
{
    public class SimpleAlarm
    {
        public string Id { get; set; }
        public string Time { get; set; }
        public string Message { get; set; }
        public override string ToString()
        {
            return $"{Time} {Message}";
        }
    }
    /// <summary>
    /// PanuonWindow.xaml 的交互逻辑
    /// </summary>
    public partial class PanuonWindow : WindowX, IPluginContainer
    public partial class PanuonWindow : WindowX, IPluginContainer, IAlarmShow
    {
        private ILog log = LogManager.GetLogger("MainWindow");
        public PanuonWindow()
        {
            Loaded += PanuonWindow_Loaded;
            this.Loaded += PanuonWindow_Loaded;
            SoftwareVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
        }
        private UserInfo currentUser;
@@ -35,13 +52,83 @@
            }
        }
        private string welcomeTitle;
        public string WelcomeTitle
        {
            get => welcomeTitle;
            set
            {
                Set(ref welcomeTitle, value);
            }
        }
        private ObservableCollection<SimpleAlarm> alarms = new ObservableCollection<SimpleAlarm>();
        public ObservableCollection<SimpleAlarm> Alarms
        {
            get => alarms;
            set
            {
                Set(ref alarms, value);
            }
        }
        public int AlarmCount
        {
            get => Alarms?.Count ?? 0;
        }
        private string softwareVersion;
        public string SoftwareVersion
        {
            get => softwareVersion;
            set
            {
                Set(ref softwareVersion, value);
            }
        }
        private string pluginVersion;
        public string PluginVersion
        {
            get => pluginVersion;
            set
            {
                Set(ref pluginVersion, value);
            }
        }
        public ListBox sb
        {
            get; set;
        }
        private void PanuonWindow_Loaded(object sender, RoutedEventArgs e)
        {
            DataContext = this;
            RefrshConfig();
            InitializeComponent();
            userMenu.Header = this.lang("App.Welcome", UserInfo.User.Name);
            ShowMenu = true;
            try
            {
                DataContext = this;
                RefrshConfig();
                InitializeComponent();
                AlarmShowHelper.Register(this);
                WelcomeTitle = this.lang("App.Welcome", UserInfo.User.Name);
                ShowMenu = false;
                Application.Current.MainWindow = this;
                SystemSetting.SystemSettingChanged += SystemSetting_SystemSettingChanged;
                if (Environment.Is64BitProcess)
                {
                    Task.Run(() =>
                    {
                        ResourceListener.Instance.RefreshEvent += this.resourceUI.Refresh;
                        ResourceListener.Instance.Start();
                    });
                }
            }
            catch (Exception ex)
            {
                log.Error("Window Loaded Error.", ex);
            }
        }
        private void RefrshConfig()
@@ -90,23 +177,6 @@
            }
        }
        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            ShowMenu = !ShowMenu;
            //Button btn = (Button)sender;
            //double temp = btn.RenderTransform.Value.Determinant;
            //btn.RenderTransformOrigin = new Point(0.5, 0.5);
            //ScaleTransform verticalFlipTransform = new ScaleTransform(1, temp * -1);
            //btn.RenderTransform = verticalFlipTransform;
            //menuTab.ChangeItemVisibility();
        }
        private void window_Loaded(object sender, RoutedEventArgs e)
        {
            SystemSetting.SystemSettingChanged += SystemSetting_SystemSettingChanged;
        }
        private void SystemSetting_SystemSettingChanged(object sender, SystemSetting e)
        {
            RefrshConfig();
@@ -125,8 +195,10 @@
        }
        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {MenuItem mi = sender as MenuItem;
            switch (mi.Name) {
        {
            MenuItem mi = sender as MenuItem;
            switch (mi.Name)
            {
                case "MiLogout":
                    Logout();
                    break;
@@ -138,20 +210,37 @@
            }
        }
        private bool logoutAdded = false;
        private void Logout()
        {
            if (MsgBoxHelper.WarnMessage(this, this.lang("App.MakeSureLogout")) == MessageBoxResult.OK)
            {
                string path = Path.Combine(PathHelper.DatabaseFolder, "user.bin");
                if (File.Exists(path)) {
                if (File.Exists(path))
                {
                    File.Delete(path);
                }
                this.Closed -= window_Closed;
                if (!logoutAdded)
                {
                    this.Closed += Logout_PanuonWindow_Closed;
                    logoutAdded = true;
                }
                this.Close();
                PluginLoader.Reset();
                Login login = new Login();
                login.Show();
            }
        }
        private void Logout_PanuonWindow_Closed(object sender, EventArgs e)
        {
            AlarmUtil.Release();
            PluginLoader.Reset();
            UserInfo.Logout();
            AlarmShowHelper.UnRegister(this);
            Login login = new Login();
            login.Show();
            this.Closed -= Logout_PanuonWindow_Closed;
            logoutAdded = false;
        }
        private void RestartApp()
@@ -170,7 +259,104 @@
        private void window_Closed(object sender, EventArgs e)
        {
            Application.Current.Shutdown();
            try
            {
                ResourceListener.Instance.Stop();
                AlarmUtil.Release();
                PluginLoader.Reset();
                UserInfo.Logout();
                AlarmShowHelper.UnRegister(this);
            }
            catch (Exception ex)
            {
            }
            Application.Current.Shutdown(0);
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;
            switch (btn.Name)
            {
                case "minBtn":
                    this.Minimize();
                    break;
                case "maxBtn":
                    //var state = this.WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;
                    //SetCurrentValue(Window.WindowStateProperty, state);
                    if (this.WindowState == WindowState.Maximized)
                    {
                        this.Normalmize();
                    }
                    else
                    {
                        this.Maximize();
                    }
                    break;
                case "closeBtn":
                    this.Closed -= Logout_PanuonWindow_Closed;
                    this.Close();
                    break;
                case "BtnSwitchTheme":
                    ShowMenu = !ShowMenu;
                    //Button btn = (Button)sender;
                    //double temp = btn.RenderTransform.Value.Determinant;
                    //btn.RenderTransformOrigin = new Point(0.5, 0.5);
                    //ScaleTransform verticalFlipTransform = new ScaleTransform(1, temp * -1);
                    //btn.RenderTransform = verticalFlipTransform;
                    //menuTab.ChangeItemVisibility();
                    break;
                default:
                    break;
            }
        }
        public bool ShowAlarm(AlarmText alarm)
        {
            bool res = false;
            Dispatcher.Invoke(() =>
            {
                if (Alarms.FirstOrDefault(e => e.Id == alarm.VirtualId) == null)
                {
                    var data = new SimpleAlarm
                    {
                        Id = alarm.VirtualId,
                        Time = alarm.Time,
                        Message = alarm.AlarmInfo
                    };
                    Alarms.Add(data);
                    sb?.ScrollIntoView(data);
                    res = true;
                }
            });
            return res;
        }
        private void list_Loaded(object sender, RoutedEventArgs e)
        {
            sb = sender as ListBox;
            sb.Loaded -= list_Loaded;
        }
        private void Clear_AllAlarm_Click(object sender, RoutedEventArgs e)
        {
            Alarms?.Clear();
        }
        private void menuTab_TabChanged(object sender, Controls.TabChangedEventArg e)
        {
            Dispatcher.BeginInvoke(() =>
            {
                if (e.newValue == null)
                {
                    PluginVersion = string.Empty;
                }
                else
                {
                    PluginVersion = e.newValue.GetType().Assembly.GetName().Version.ToString();
                }
            }, System.Windows.Threading.DispatcherPriority.Normal);
        }
        //private void BaseWindow_Loaded(object sender, RoutedEventArgs e)