一个编译器的地基写了一下午QWQ

This commit is contained in:
muqing 2024-08-08 17:29:19 +08:00
parent a1f19d5d86
commit 0ddd8fdbc7
6 changed files with 136 additions and 37 deletions

View File

@ -1,8 +1,7 @@
using System.Threading;

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.UI.Xaml;
using RustTools.Contracts.Services;
using RustTools.Models;
using RustTools.Services;
@ -10,14 +9,10 @@ using RustTools.ViewModels;
using RustTools.Views;
using RustTools.muqing;
using RustTools.Activation;
using System.Diagnostics;
using RustTools.WindowUI;
using Windows.ApplicationModel.Activation;
using Windows.Storage;
using Microsoft.UI.Xaml.Controls;
using Microsoft.Windows.AppLifecycle;
using Windows.ApplicationModel;
using Windows.Management.Core;
using WinUIEx;
namespace RustTools;
@ -47,7 +42,7 @@ public partial class App : Microsoft.UI.Xaml.Application
public static UIElement? AppTitlebar { get; set; }
public static WindowEx MainWindow { get; } = new MainWindow();
public static WindowEx? MainWindow;
public App()
{
@ -116,7 +111,6 @@ public partial class App : Microsoft.UI.Xaml.Application
protected async override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
base.OnLaunched(args);
var activatedEventArgs = Microsoft.Windows.AppLifecycle.AppInstance.GetCurrent().GetActivatedEventArgs();
if (activatedEventArgs.Kind == Microsoft.Windows.AppLifecycle.ExtendedActivationKind.File)
{
@ -158,7 +152,10 @@ public partial class App : Microsoft.UI.Xaml.Application
else
{
//MainWindow.Activate();
await App.GetService<IActivationService>().ActivateAsync(args);
//MainWindow = new MainWindow();
var editor=new Editor.EditorWin();
editor.Activate();
//await App.GetService<IActivationService>().ActivateAsync(args);
}
}
}

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" ?>
<windowex:WindowEx
x:Class="RustTools.Editor.EditorWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:RustTools"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:windowex="using:WinUIEx"
MinWidth="500"
MinHeight="500"
mc:Ignorable="d">
<Grid Name="grid">
<Grid Padding="9" Visibility="Visible">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="这是模组名称" />
</Grid>
</Grid>
</windowex:WindowEx>

View File

@ -0,0 +1,99 @@
using System.ComponentModel;
using System.Runtime.InteropServices;
using Microsoft.UI;
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using RustTools.muqing;
using Windows.ApplicationModel.Core;
using Windows.Foundation;
using Windows.UI.Core.Preview;
using Windows.UI.Popups;
using Windows.UI.WindowManagement;
using WinRT.Interop;
namespace RustTools.Editor;
/// <summary>
/// 编辑器主窗口
/// </summary>
public sealed partial class EditorWin : WindowEx
{
private Microsoft.UI.Windowing.AppWindow? app;
public EditorWin()
{
InitializeComponent();
gj.SetBackTheme(this);
ExtendsContentIntoTitleBar = true;
var frame = App.AppTitlebar as FrameworkElement;
if (frame != null)
{
gj.UpdateTitleBar(this, frame.ActualTheme);
grid.RequestedTheme = frame.ActualTheme;
}
//WindowManager.Get(this).IsMinimizable = false;
//WindowManager.Get(this).IsMaximizable = false;
//WindowManager.Get(this).IsResizable = false;
//WindowManager.Get(this).IsAlwaysOnTop = false;
//WindowManager.Get(this).IsTitleBarVisible = false;
//app = GetAppWindowForCurrentWindow();
//app.Closing += OnClosing;
//Closed += EditorWin_Closed;
Closed += EditorWin_Closed;
}
private async Task SaveDataAsync()
{
}
//用户有没有保存
private bool IsSave = false;
private ContentDialog? ClosedDialog;
private async void EditorWin_Closed(object sender, WindowEventArgs e)
{
if (IsSave == false)
{
// 防止窗口关闭
e.Handled = true;
}
if (ClosedDialog != null) {
return;
}
// 显示一个对话框,告知用户窗口不能关闭
ClosedDialog = new ContentDialog
{
XamlRoot = grid.XamlRoot,
Title = "警告",
Content = "你还有未保存的文件在编译器中。",
PrimaryButtonText = "保存关闭",
PrimaryButtonStyle = Application.Current.Resources["AccentButtonStyle"] as Style,
SecondaryButtonText = "直接关闭",
CloseButtonText = "取消"
};
var result = await ClosedDialog.ShowAsync();
if (result == ContentDialogResult.Primary)
{
IsSave = true;
Application.Current.Exit();
return;
}
else if (result == ContentDialogResult.Secondary)
{
IsSave = true;
Application.Current.Exit();
return;
}
ClosedDialog = null;
}
private Microsoft.UI.Windowing.AppWindow GetAppWindowForCurrentWindow()
{
var hWnd = WindowNative.GetWindowHandle(this);
var myWndId = Win32Interop.GetWindowIdFromWindow(hWnd);
return Microsoft.UI.Windowing.AppWindow.GetFromWindowId(myWndId);
}
}

View File

@ -2,6 +2,7 @@
using Microsoft.UI.Xaml;
using RustTools.Helpers;
using RustTools.muqing;
using RustTools.WindowUI;
using Windows.Storage;
using Windows.UI.ViewManagement;
@ -26,6 +27,7 @@ public sealed partial class MainWindow : WindowEx
dispatcherQueue = Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();
settings.ColorValuesChanged += Settings_ColorValuesChanged;
// cannot use FrameworkElement.ActualThemeChanged event
//var editorWin = new Editor.EditorWin();
}
// this handles updating the caption button colors correctly when indows system theme is changed

View File

@ -31,13 +31,16 @@ public sealed partial class ModuleInfoWin : WindowEx
InitializeComponent();
ExtendsContentIntoTitleBar = true;
gj.SetBackTheme(this);
init(v);
var frame = App.AppTitlebar as FrameworkElement;
if (frame != null)
{
gj.UpdateTitleBar(this, frame.ActualTheme);
grid.RequestedTheme = frame.ActualTheme;
}
if (v != string.Empty)
{
init(v);
}
// ÉèÖô°¿Ú±³¾°ÑÕÉ«
}
private async void init(string v)
@ -185,7 +188,6 @@ public sealed partial class ModuleInfoWin : WindowEx
private void DownloadDialog_Closing(ContentDialog sender, ContentDialogClosingEventArgs args)
{
// Prevent the dialog from closing
if (args.Result != ContentDialogResult.Secondary)
{

View File

@ -85,31 +85,6 @@ public class gj
}
}
public static void SetBackColor(WindowEx windowEx)
{
var uISettings = new UISettings();
// 获取当前的背景颜色
var backgroundColor = uISettings.GetColorValue(UIColorType.Background);
// 判断主题模式
if (backgroundColor == Colors.Black)
{
// 设置背景色为黑色
//uISettings.SetColorValue(UIColorType.Background, Colors.Black);
//uISettings.SetColorValue(UIColorType.Foreground, Colors.White);
}
else if (backgroundColor == Colors.White)
{
// 设置背景色为白色
//uISettings.SetColorValue(UIColorType.Background, Colors.White);
//uISettings.SetColorValue(UIColorType.Foreground, Colors.Black);
}
else
{
Console.WriteLine("Current theme mode is unknown.");
}
}
private const int WAINACTIVE = 0x00;
private const int WAACTIVE = 0x01;