123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- using System;
- using System.IO;
- using Avalonia;
- using Avalonia.Controls;
- using Avalonia.Markup.Xaml;
- using fis.Mac;
- using fis.Win;
- using fis.Log;
- using Xilium.CefGlue;
- using Xilium.CefGlue.Avalonia;
- using Xilium.CefGlue.Common.Handlers;
- using System.Globalization;
- using System.Reflection;
- using System.Threading;
- using System.Runtime.InteropServices;
- using fis.Managers;
- using fis.Win.Dev.Helpers;
- using fis.Win.Dev.Utilities;
- using System.Collections.Generic;
- using fis.Win.Dev.Managers.Interfaces;
- namespace fis
- {
- public partial class MainWindow : Window
- {
- public static SynchronizationContext? MainThreadSyncContext;
- private TextBlock? _title;
- private AvaloniaCefBrowser? _browser;
- public MainWindow()
- {
- InitializeComponent();
- ExtendClientAreaToDecorationsHint = true;
- ExtendClientAreaChromeHints = Avalonia.Platform.ExtendClientAreaChromeHints.NoChrome;
- ExtendClientAreaTitleBarHeightHint = -1;
- MainThreadSyncContext = SynchronizationContext.Current;
- #if DEBUG
- // this.AttachDevTools();
-
- #endif
- }
- private void InitializeComponent()
- {
- AvaloniaXamlLoader.Load(this);
- var browserContainer = this.FindControl<Border>("BrowserBorder");
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
- {
- this.FindControl<MacosTitleBar>("MacTitleBar").IsVisible = false;
- _title = this.FindControl<WindowsTitleBar>("WinTitleBar").FindControl<TextBlock>("WindowsTitle");
-
- }
- else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
- {
- this.FindControl<WindowsTitleBar>("WinTitleBar").IsVisible = false;
- _title = this.FindControl<MacosTitleBar>("MacTitleBar").FindControl<TextBlock>("MacosTitle");
-
- }
- else
- {
- throw new NotSupportedException($"Platform {Environment.OSVersion.Platform} is not suppoorted.");
- }
- AvaloniaCefBrowserHelper.title = _title;
- //Make cross domain work.
- _browser = AvaloniaCefBrowserHelper.browser;
- _browser.Address = "http://" + ShellConfig.Instance.AppHost + "/index.html";
- _browser.ContextMenuHandler = new TextContextMenuHandler(_browser);
- _browser.BrowserInitialized += () =>
- {
- #if DEBUG
- // _browser!.ShowDeveloperTools();
- #endif
- };
- browserContainer.Child = _browser;
- WindowStartupLocation = WindowStartupLocation.CenterScreen;
- //WindowState = WindowState.Maximized;
- MinWidth = 1366;
- MinHeight = 768;
- // Hide title bar
- //ExtendClientAreaToDecorationsHint = true;
- //ExtendClientAreaChromeHints = Avalonia.Platform.ExtendClientAreaChromeHints.NoChrome;
- //ExtendClientAreaTitleBarHeightHint = -1;
- var language = CultureInfo.CurrentCulture.Name;
- if (_title != null)
- {
- if (language == "zh-CN")
- {
- _title.Text = "杏聆荟";
- }
- else
- {
- _title.Text = "FLYINSONO";
- }
- }
- var assembly = Assembly.GetExecutingAssembly();
- Stream? resourceStream = null;
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
- {
- resourceStream = assembly.GetManifestResourceStream("fis.Win.flyinsono.ico");
- }
- else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
- {
- resourceStream = assembly.GetManifestResourceStream("fis.Mac.flyinsono.ico");
- }
- if (resourceStream != null)
- {
- Icon = new WindowIcon(resourceStream);
- }
- AppManager.ParentWindow = this;
- }
- }
- internal class FisBrowserScriptObject
- {
- IPlatformService _platformService;
- TextBlock _title;
- internal FisBrowserScriptObject(TextBlock title, IPlatformService platformService)
- {
- _title = title;
- _platformService = platformService;
- }
- /// <summary>
- /// 获取平台名
- /// </summary>
- /// <returns></returns>
- public string GetPlatformName() => _platformService.GetPlatformName();
- /// <summary>
- /// 写日志
- /// </summary>
- /// <param name="message"></param>
- /// <returns></returns>
- public void WriteLog(string message) => Logger.Write(message);
- /// <summary>
- /// 保存报告模板
- /// </summary>
- /// <param name="templateId"></param>
- /// <param name="name"></param>
- /// <param name="useObject"></param>
- /// <param name="templateJson"></param>
- public void SaveTemplate(string templateId, string name, string useObject, string templateJson)
- {
- List<string> args = new List<string>();
- args.Add(templateId);
- args.Add(name);
- args.Add(useObject);
- args.Add(templateJson);
- ExecuteJS("externalNotification", TargetMethodName.SaveReportTemplate, args);
- }
- /// <summary>
- /// 执行Js方法
- /// </summary>
- /// <param name="methodName"></param>
- /// <param name="targetMethodName"></param>
- /// <param name="arguments"></param>
- private void ExecuteJS(string methodName, TargetMethodName targetMethodName, List<string> arguments)
- {
- string callString = methodName + "(";
- if (arguments != null)
- {
- string comma = ", ";
- var argumentsStr = "";
- int index = 0;
- foreach (var e in arguments)
- {
- if (index == arguments.Count - 1)
- {
- argumentsStr += e;
- }
- else
- {
- argumentsStr += e + "&";
- }
- index++;
- }
- var escaped = System.Web.HttpUtility.JavaScriptStringEncode(argumentsStr, true);
- callString += (int)targetMethodName + comma + escaped;
- }
- callString += ");";
- AvaloniaCefBrowserHelper.browser?.ExecuteJavaScript(callString, null, 0);
- }
- /// <summary>
- /// 设置窗体标题
- /// </summary>
- /// <param name="title">标题</param>
- public void SetTitle(string title)
- {
- MainWindow.MainThreadSyncContext?.Send(new SendOrPostCallback((args) =>
- {
- if(_title != null)
- {
- _title.Text = title;
- }
- }), this);
- }
- public int Age { get; set; }
- }
- }
|