using 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}"; } } /// /// PanuonWindow.xaml 的交互逻辑 /// 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 alarms = new ObservableCollection(); public ObservableCollection 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; 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": 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); //} } }