diff --git a/Editor/EditorTreeView.cs b/Editor/EditorTreeView.cs index f673778..2ccdc7c 100644 --- a/Editor/EditorTreeView.cs +++ b/Editor/EditorTreeView.cs @@ -30,6 +30,13 @@ public class EditorTreeView : Microsoft.UI.Xaml.Controls.TreeView } else { + //检查是否存在此标签了 + var a = EditorWin.TabViewList.FirstOrDefault(tabItem => tabItem.Tag != null && tabItem.Tag.ToString().Equals(invokedItem.Dir)); + if (a!=null) + { + SelectedItem?.Invoke(a); + return; + } Debug.WriteLine($"File clicked: {invokedItem.Name}"); var wb = wj.dqwb(invokedItem.Dir); var codeEditorControl = new CodeEditorControl(); @@ -40,7 +47,7 @@ public class EditorTreeView : Microsoft.UI.Xaml.Controls.TreeView { Header = invokedItem.Name, IconSource = new SymbolIconSource() { Symbol = Symbol.Document }, - Content = codeEditorControl + Content = codeEditorControl,Tag=invokedItem.Dir }); //codeEditorControl.Editor.CanUndo codeEditorControl.Editor.EmptyUndoBuffer(); @@ -57,6 +64,7 @@ public class EditorTreeView : Microsoft.UI.Xaml.Controls.TreeView } public event Action AddTabItem; + public event Action SelectedItem; diff --git a/Editor/EditorWin.xaml.cs b/Editor/EditorWin.xaml.cs index 9ef4f1f..637e032 100644 --- a/Editor/EditorWin.xaml.cs +++ b/Editor/EditorWin.xaml.cs @@ -1,11 +1,14 @@ using System.Collections.ObjectModel; using System.Diagnostics; using Microsoft.UI; +using Microsoft.UI.Input; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media; using RustTools.muqing; +using Windows.System; +using Windows.UI.Core; using WinRT.Interop; using WinUIEditor; namespace RustTools.Editor; @@ -14,9 +17,9 @@ namespace RustTools.Editor; /// public sealed partial class EditorWin : WindowEx { - public static ObservableCollection TabViewList = new(); + public static ObservableCollection TabViewList = []; //Ŀ¼б - public ObservableCollection DataSource = new(); + public ObservableCollection DataSource = []; /// /// ༭ @@ -49,6 +52,10 @@ public sealed partial class EditorWin : WindowEx tabview.TabItemsSource = TabViewList; treeView.AddTabItem += TreeView_AddTabItem; + treeView.SelectedItem += (a) => + { + tabview.SelectedItem = a; + }; } private void TreeView_AddTabItem(TabViewItem obj,CodeEditorControl codeEditorControl){ @@ -69,6 +76,26 @@ public sealed partial class EditorWin : WindowEx } Debug.WriteLine($"UpdateUI :" + a); }; + codeEditorControl.KeyDown+= (sender, e) => + { + // Ƿ Ctrl + var isCtrlPressed = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control) == CoreVirtualKeyStates.Down; + // Ƿ J + if (e.Key == VirtualKey.S && isCtrlPressed) + { + // ִ Ctrl + S ϼӦIJ + //Debug.WriteLine("Ctrl + S pressed"); + if (obj==null||string.IsNullOrEmpty(obj.Tag.ToString())) + { + return; + } + //Debug.WriteLine($"ļ {codeEditorControl.Editor.GetText(codeEditorControl.Editor.Length)}"); + wj.xrwb(obj.Tag.ToString(), codeEditorControl.Editor.GetText(codeEditorControl.Editor.Length)); + codeEditorControl.Editor.EmptyUndoBuffer(); + obj.Header = title; + e.Handled = true; // ¼Ѵ + } + }; } diff --git a/muqing/wj.cs b/muqing/wj.cs index af515af..0ebaae4 100644 --- a/muqing/wj.cs +++ b/muqing/wj.cs @@ -31,8 +31,12 @@ public class wj public const string UUID = "win.uuid"; } - public static bool xrwb(string name, string str) + public static bool xrwb(string? name, string str) { + if (string.IsNullOrEmpty(name)) + { + return false; + } // 获取当前执行文件的目录 //var currentDirectory = Directory.GetCurrentDirectory(); var filePath = Path.Combine(CD, name);