From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点

---
 WPFProject/PanuonWindow.xaml.cs |  375 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 375 insertions(+), 0 deletions(-)

diff --git a/WPFProject/PanuonWindow.xaml.cs b/WPFProject/PanuonWindow.xaml.cs
new file mode 100644
index 0000000..7dceeff
--- /dev/null
+++ b/WPFProject/PanuonWindow.xaml.cs
@@ -0,0 +1,375 @@
+锘縰sing HMI.Base;
+using HMI.Core.Api;
+using HMI.Core.Entity;
+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.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, IAlarmShow
+    {
+        private ILog log = LogManager.GetLogger("MainWindow");
+        public PanuonWindow()
+        {
+            this.Loaded += PanuonWindow_Loaded;
+            SoftwareVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
+        }
+
+        private UserInfo currentUser;
+        public UserInfo CurrentUser
+        {
+            get => currentUser;
+            set
+            {
+                Set(ref currentUser, value);
+            }
+        }
+
+        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)
+        {
+            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()
+        {
+            WindowTitle = SystemSetting.Instance.WindowTitle;
+            try
+            {
+                WindowLogo = new BitmapImage(new Uri(Path.Combine(PathHelper.IconFolder,
+                    SystemSetting.Instance.LogoPath)));
+            }
+            catch (Exception ex)
+            {
+                WindowLogo = null;
+            }
+        }
+
+        private string windowTitle;
+
+        public string WindowTitle
+        {
+            get { return windowTitle; }
+            set { Set(ref windowTitle, value); }
+        }
+
+        private BitmapImage windowLogo;
+
+        public BitmapImage WindowLogo
+        {
+            get { return windowLogo; }
+            set { Set(ref windowLogo, value); }
+        }
+
+        private bool showMenu;
+
+        public event CancelEventHandler OnCloseEvent;
+        public event EventHandler DoCloseEvent;
+        public event EventHandler LoadComplateEvent;
+
+        public bool ShowMenu
+        {
+            get { return showMenu; }
+            set
+            {
+                Set(ref showMenu, value);
+                menuTab.ChangeItemVisibility(value);
+            }
+        }
+
+        private void SystemSetting_SystemSettingChanged(object sender, SystemSetting e)
+        {
+            RefrshConfig();
+        }
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            OnCloseEvent?.Invoke(this, e);
+            base.OnClosing(e);
+        }
+
+        protected override void OnClosed(EventArgs e)
+        {
+            DoCloseEvent?.Invoke(this, e);
+            base.OnClosed(e);
+        }
+
+        private void MenuItem_Click(object sender, RoutedEventArgs e)
+        {
+            MenuItem mi = sender as MenuItem;
+            switch (mi.Name)
+            {
+                case "MiLogout":
+                    Logout();
+                    break;
+                case "MiRestart":
+                    RestartApp();
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        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))
+                {
+                    File.Delete(path);
+                }
+                this.Closed -= window_Closed;
+                if (!logoutAdded)
+                {
+                    this.Closed += Logout_PanuonWindow_Closed;
+                    logoutAdded = true;
+                }
+                this.Close();
+            }
+        }
+
+        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()
+        {
+            if (MsgBoxHelper.WarnMessage(this, this.lang("App.MakeSureRestartApp")) == MessageBoxResult.OK)
+            {
+                Application.Current.Exit += Current_Exit;
+                this.Close();
+            }
+        }
+
+        private void Current_Exit(object sender, ExitEventArgs e)
+        {
+            System.Windows.Forms.Application.Restart();
+        }
+
+        private void window_Closed(object sender, EventArgs e)
+        {
+            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)
+        //{
+        //    var s = (Style)this.Resources["WindowButton"];
+        //    Button button = new Button
+        //    {
+        //        Content = "\ue60e",
+        //        Style = (Style)this.Resources["WindowButton"]
+        //    };
+        //    WindowChrome.SetIsHitTestVisibleInChrome(button, true);
+        //    button.Click += Button_Click_2;
+        //    this.InsertButton(button, 0);
+        //}
+    }
+}

--
Gitblit v1.9.1