using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Reflection.Metadata;
using Microsoft.UI;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Documents;
using Microsoft.UI.Xaml.Input;
using RustTools.muqing;
using Windows.ApplicationModel.DataTransfer;
using WinRT.Interop;
namespace RustTools.Editor;
///
/// 编辑器主窗口
///
public sealed partial class EditorWin : WindowEx
{
private readonly ObservableCollection TabViewList = new();
//目录列表
public ObservableCollection DataSource=new ();
public EditorWin()
{
InitializeComponent();
gj.SetBackTheme(this);
ExtendsContentIntoTitleBar = true;
var frame = App.AppTitlebar as FrameworkElement;
if (frame != null)
{
gj.UpdateTitleBar(this, frame.ActualTheme);
page.RequestedTheme = frame.ActualTheme;
}
//new CodeEditorControl();
//new Editor.
//WindowManager.Get(this).IsMinimizable = false;
//app = GetAppWindowForCurrentWindow();
//app.Closing += OnClosing;
//Closed += EditorWin_Closed;
var directoryInfo = new DirectoryInfo("D:\\steam\\steamapps\\common\\Rusted Warfare\\mods\\units\\赤道·联合进攻0.9补丁版0.2");
DataSource = new EditorLoad().GetData(directoryInfo.FullName);
Title=directoryInfo.Name;
TitleText.Text = directoryInfo.Name;
Closed += EditorWin_Closed;
}
//用户有没有保存
private bool IsSave = true;
private ContentDialog? ClosedDialog = null;
private async void EditorWin_Closed(object sender, WindowEventArgs e)
{
if (IsSave == false)
{
// 防止窗口关闭
e.Handled = true;
}
if (ClosedDialog != null) {
return;
}
// 显示一个对话框,告知用户窗口不能关闭
ClosedDialog = new ContentDialog
{
XamlRoot = page.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);
}
///
/// 选中事件
///
///
///
private void TreeView_ItemInvoked(TreeView sender, TreeViewItemInvokedEventArgs e)
{
// 获取当前选中的项
// 获取被点击的项
var invokedItem = e.InvokedItem;
// 检查是否重复选择
if (sender.SelectedItem is ExplorerItem selectedItem && invokedItem != null && selectedItem == invokedItem)
{
// 如果是同一个项,直接返回,不进行进一步处理
return;
}
if (invokedItem is not ExplorerItem explorerItem)
{
return;
}
if (explorerItem.Type == ExplorerItem.ExplorerItemType.Folder)
{
var directoryInfo = new DirectoryInfo(explorerItem.Dir);
}
}
private void TabView_TabCloseRequested(TabView sender, TabViewTabCloseRequestedEventArgs args)
{
TabViewList.Remove(args.Tab);
}
///
/// 双击事件
///
///
///
private void treeView_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
gj.sc(e.OriginalSource);
var treeViewItem = e.OriginalSource as Grid;
if (treeViewItem == null) { return; }
if (treeViewItem.DataContext is not ExplorerItem explorerItem) { return; }
if (explorerItem.Type == ExplorerItem.ExplorerItemType.File)
{
// 查找特定的 TabViewItem
var tabViewItemToFind = TabViewList.FirstOrDefault(item => (item as TabViewItem)?.Tag.ToString() == explorerItem.Dir) as TabViewItem;
// 获取 TabViewItem 的索引位置
if (tabViewItemToFind != null)
{
tabview.SelectedIndex = TabViewList.IndexOf(tabViewItemToFind);
return;
}
var fileInfo = new FileInfo(explorerItem.Dir);
//var name = Path.GetFileNameWithoutExtension(fileInfo.FullName);
var newItem = new TabViewItem()
{
Tag = explorerItem.Dir,
// 获取文件名,不包含扩展名
Header = fileInfo.Name,
IconSource = new Microsoft.UI.Xaml.Controls.SymbolIconSource() { Symbol = Symbol.Document }
};
//if(tabview.TabItems.)
var v = wj.dqwb(explorerItem.Dir);
var textControlBox = new RichEditBox();
//textControlBox.Height = Height;
textControlBox.Document.SetText(Microsoft.UI.Text.TextSetOptions.None, v);
newItem.Content = textControlBox;
TabViewList.Insert(0, newItem);
tabview.SelectedIndex = 0;
}
}
}