Browse Source

第二窗口优化

loki.wu 2 years ago
parent
commit
33b21dfd15

+ 2 - 2
fis/App.axaml.cs

@@ -29,11 +29,11 @@ namespace fis
             base.OnFrameworkInitializationCompleted();
             Task.Run(async () => {
                 await Task.Delay(3000);
-                await initSlaveWindowsAsync();
+                await InitSlaveWindowsAsync();
             });
         }
 
-        private async Task initSlaveWindowsAsync() {
+        private async Task InitSlaveWindowsAsync() {
             try
             {
                 var manager = AppManager.Get<ISecondaryScreenManager>();

+ 2 - 0
fis/BaseWindow.cs

@@ -29,6 +29,8 @@ namespace fis.Win.Utilities
         /// </summary>
         public bool IsMainWindow = true;
 
+        public virtual string WindowName { get; set; }
+
         public static SynchronizationContext? MainThreadSyncContext;
 
         public BaseWindow() 

+ 7 - 2
fis/IPlatformService.cs

@@ -208,15 +208,20 @@ namespace fis
         void MaximizeWindow(string windowName);
 
         /// <summary>
-        /// Called when restore the shell window .
+        /// Called when restore the shell window.
         /// </summary>
         void RestoreWindow(string windowName);
 
         /// <summary>
-        /// Called when close the shell window .
+        /// Called when close the shell window.
         /// </summary>
         void CloseWindow(string windowName);
 
+
+        /// <summary>
+        /// Called when close the shell window .
+        /// </summary>
+        Task<int> GetWindowStateAsync(string windowName);
         #endregion
     }
 

+ 21 - 4
fis/MainWindow.axaml.cs

@@ -13,20 +13,32 @@ using fis.Managers.Interfaces;
 using Avalonia.Threading;
 using fis.Utilities;
 using fis.Win.Utilities;
+using System.Linq;
 
 namespace fis
 {
     public partial class MainWindow : BaseWindow
     {
         private const string ThisWindowName = "Main";
+        private WindowState _windowState = WindowState.Normal;
+
 
         public MainWindow()
         {
             AvaloniaXamlLoader.Load(this);
+            WindowName = "Main";
             InitializeComponent();
             InitializeMainComponent();
         }
 
+        
+        protected override void HandleWindowStateChanged(WindowState state) 
+        {
+            _windowState = state;
+            string[] list = { ((int)state).ToString() };
+            BrowserManager.ExecuteJS(TargetMethodName.OnWindowStateChange, list.ToList());
+        }
+
         private void InitializeMainComponent()
         {
             //Make cross domain work.
@@ -41,6 +53,7 @@ namespace fis
                 {
                     if (e == ThisWindowName)
                     {
+                        _windowState = WindowState.Normal;
                         WindowDragingHelper.BeginWindowDrag(e);
                     }
                 };
@@ -56,6 +69,12 @@ namespace fis
                 {
                     if (e == ThisWindowName)
                     {
+                        if (_windowState == WindowState.Maximized)
+                        {
+                            WindowDragingHelper.RestoreWindow(e);
+                            return;
+                        }
+                        _windowState = WindowState.Maximized;
                         WindowDragingHelper.MaximizeWindow(e);
                     }
                 };
@@ -63,6 +82,7 @@ namespace fis
                 {
                     if (e == ThisWindowName)
                     {
+                        _windowState = WindowState.Minimized;
                         WindowDragingHelper.MinimizeWindow(e);
                     }
                 };
@@ -70,17 +90,14 @@ namespace fis
                 {
                     if (e == ThisWindowName)
                     {
+                        _windowState = WindowState.Normal;
                         WindowDragingHelper.RestoreWindow(e);
                     }
                 };
                 winFisBrowser.WindowClosed += OnBrowserCloseTheWindow;
             }
             WindowStartupLocation = WindowStartupLocation.CenterScreen;
-#if DEBUG
-
-#else
             WindowState = WindowState.Maximized;
-#endif
             AppManager.ParentWindow = this;
             Closed += OnMainWindowClosed;
         }

+ 2 - 1
fis/Managers/AppManager.cs

@@ -5,6 +5,7 @@ using System;
 using System.Collections.Concurrent;
 using System.Data;
 using System.Linq;
+using fis.Win.Utilities;
 
 namespace fis.Managers
 {
@@ -23,7 +24,7 @@ namespace fis.Managers
             Initialize();
         }
 
-        public static Window ParentWindow { get; set; }
+        public static BaseWindow ParentWindow { get; set; }
 
         private static AppManager GetInstance()
         {

+ 45 - 2
fis/Managers/BrowserManager.cs

@@ -151,6 +151,51 @@ namespace fis.Managers
             }
         }
 
+        /// <summary>
+        /// 开始拖拽
+        /// </summary>
+        /// <param name="windowName"></param>
+        public static void BeginWindowDrag(string windowName)
+        {
+            _platformService.BeginWindowDrag(windowName);
+        }
+
+        /// <summary>
+        /// 结束拖拽
+        /// </summary>
+        /// <param name="windowName"></param>
+        public static void EndWindowDrag(string windowName)
+        {
+            _platformService.EndWindowDrag(windowName);
+        }
+
+        /// <summary>
+        /// 最小化窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public static void MinimizeWindow(string windowName)
+        {
+            _platformService.MinimizeWindow(windowName);
+        }
+
+        /// <summary>
+        /// 最大化窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public static void MaximizeWindow(string windowName)
+        {
+            _platformService.MaximizeWindow(windowName);
+        }
+
+        /// <summary>
+        /// 关闭窗口
+        /// </summary>
+        /// <param name="windowName"></param>
+        public static void CloseWindow(string windowName)
+        {
+            _platformService.CloseWindow(windowName);
+        }
+
         /// <summary>
         /// 执行Js方法
         /// </summary>
@@ -190,7 +235,5 @@ namespace fis.Managers
                 SlaveBrowser?.ExecuteJavaScript(callString, null, 0);
             }
         }
-
-
     }
 }

+ 5 - 0
fis/PlatformService.cs

@@ -231,6 +231,11 @@ namespace fis
         {
             //
         }
+
+        public virtual async Task<int> GetWindowStateAsync(string windowName)
+        {
+            return 0;
+        }
     }
 
     public class PlatFormHelper

+ 1 - 0
fis/SlaveWindow.axaml.cs

@@ -35,6 +35,7 @@ namespace fis
         public SlaveWindow()
         {
             IsMainWindow = false;
+            WindowName = "Slave";
             AvaloniaXamlLoader.Load(this);
             InitializeComponent();
             _browser = BrowserManager.SlaveBrowser;

+ 1 - 1
fis/Utilities/Entities/ExportRemedicalZipFileInfo.cs

@@ -52,7 +52,7 @@ namespace fis.Utilities.Entities
 
     public class ExportRemedicalZipFileInfo
     {
-        public List<String> SubFolders { get; set; }
+        public List<string> SubFolders { get; set; }
         
         public List<ReportData> ReportList { get; set; }
 

+ 50 - 4
fis/Utilities/FisBrowserScriptObject.cs

@@ -20,8 +20,8 @@ namespace fis.Utilities
 {
     internal class FisBrowserScriptObject
     {
-        String _platformName;
-        TextBlock _title;
+        private string _platformName;
+        private TextBlock _title;
         private string _lastClipData;
         private readonly SliceHelper _sliceHelper;
         public event EventHandler<bool> MeasureStateChanged;
@@ -66,6 +66,52 @@ namespace fis.Utilities
             BrowserManager.ExecuteJS( TargetMethodName.SaveReportTemplate, args);
         }
 
+        /// <summary>
+        /// 开始拖拽Window
+        /// </summary>
+        /// <param name="windowName"></param>
+        public void BeginWindowDrag(string windowName) 
+        {
+            BrowserManager.BeginWindowDrag(windowName);
+        }
+
+        /// <summary>
+        /// 结束拖拽Window
+        /// </summary>
+        /// <param name="windowName"></param>
+        public void EndWindowDrag(string windowName)
+        {
+            BrowserManager.EndWindowDrag(windowName);
+        }
+
+        /// <summary>
+        /// 最小化Window
+        /// </summary>
+        /// <param name="windowName"></param>
+        public void MinimizeWindow(string windowName)
+        {
+            BrowserManager.MinimizeWindow(windowName);
+        }
+
+        /// <summary>
+        /// 最大化Window
+        /// </summary>
+        /// <param name="windowName"></param>
+        public void MaximizeWindow(string windowName)
+        {
+            BrowserManager.MaximizeWindow(windowName);
+        }
+
+
+        /// <summary>
+        /// 关闭Window
+        /// </summary>
+        /// <param name="windowName"></param>
+        public void CloseWindow(string windowName)
+        {
+            BrowserManager.CloseWindow(windowName);
+        }
+
         /// <summary>
         /// 调节明暗度、对比度
         /// </summary>
@@ -335,7 +381,7 @@ namespace fis.Utilities
             }), this);
         }
 
-        public void CloseWindow()
+        public void CloseSlaveWindow(int WindowType = 0)
         {
             var manager = AppManager.Get<ISecondaryScreenManager>();
              Dispatcher.UIThread.InvokeAsync(() =>
@@ -348,7 +394,7 @@ namespace fis.Utilities
 
         public void RefershReports() 
         {
-            CloseWindow();
+            CloseSlaveWindow();
             BrowserManager.ExecuteJS(TargetMethodName.RefershReports, new List<string>());
         }
 

+ 18 - 0
fis/Win/WinService.cs

@@ -1,4 +1,8 @@
+using Avalonia.Controls;
+using Avalonia.Threading;
+using fis.Managers;
 using System;
+using System.Threading.Tasks;
 
 namespace fis.Win
 {
@@ -57,6 +61,20 @@ namespace fis.Win
         {
             WindowClosed?.Invoke(this, windowName);
         }
+
+
+        public override async Task<int> GetWindowStateAsync(string windowName)
+        {
+            var state = (int)WindowState.Normal;
+            await Dispatcher.UIThread.InvokeAsync(() =>
+            {
+                if (windowName == AppManager.ParentWindow.WindowName)
+                {
+                    state = (int)AppManager.ParentWindow.WindowState;
+                }
+            });
+            return state;
+        }
     }
 
 }

+ 1 - 28
fis/Win/WindowDragingHelper.cs

@@ -656,23 +656,6 @@ namespace fis.Win
             public int Bottom;
         }
 
-
-        public static WindowState WindowState 
-        {
-            get {
-                return _windowState;
-            }
-            set 
-            {
-                if (_windowState != value) 
-                {
-                    _windowState = value;
-                    string[] list = { ((int)_windowState).ToString() };
-                    BrowserManager.ExecuteJS(TargetMethodName.OnWindowStateChange, list.ToList());
-                }
-            }
-        }
-
         /// <summary>
         /// 声明鼠标钩子的封送结构类型
         /// </summary>
@@ -865,9 +848,6 @@ namespace fis.Win
         {
             if (_windowHandles.TryGetValue(windowName, out var windowHandle))
             {
-                if (WindowState == WindowState.Maximized) {
-                    WindowState = WindowState.Normal;
-                }
                 if (GetCursorPos(out var dragPoint))
                 {
                     if (GetWindowRect(windowHandle, out var rect))
@@ -909,7 +889,6 @@ namespace fis.Win
         {
             if (_windowHandles.TryGetValue(windowName, out var windowHandle))
             {
-                WindowState = WindowState.Minimized;
                 //SW_MINIMIZE = 6
                 //SW_SHOWMINIMIZED = 2
                 //SW_SHOWMINNOACTIVE = 7
@@ -924,12 +903,6 @@ namespace fis.Win
         {
             if (_windowHandles.TryGetValue(windowName, out var windowHandle))
             {
-                if (WindowState == WindowState.Maximized) 
-                {
-                    RestoreWindow(windowName);
-                    return;
-                }
-                WindowState = WindowState.Maximized;
                 //SW_MAXIMIZE = 3
                 ShowWindow(windowHandle, 3);
                 EndWindowDrag(windowName);
@@ -941,7 +914,7 @@ namespace fis.Win
         {
             if (_windowHandles.TryGetValue(windowName, out var windowHandle))
             {
-                WindowState = WindowState.Normal;
+               // WindowState = WindowState.Normal;
                 //SW_RESTORE = 9
                 ShowWindow(windowHandle, 9);
                 EndWindowDrag(windowName);