优化标签页管理和事件处理逻辑
在 `EditorTreeView.cs` 文件中: - 增加了检查是否存在相同标签页的逻辑,并在存在时选中该标签页。 - 增加了 `SelectedItem` 事件,用于在标签页已经存在时触发。 - 在添加新的 `TabViewItem` 时,增加了 `Tag` 属性以存储文件路径。 在 `EditorWin.xaml.cs` 文件中: - 修改了 `TabViewList` 和 `DataSource` 的初始化方式,从 `new()` 改为 `[]`。 - 在 `EditorWin` 的构造函数中,增加了对 `treeView.SelectedItem` 事件的处理逻辑。 - 在 `TreeView_AddTabItem` 方法中,增加了对 `codeEditorControl.KeyDown` 事件的处理逻辑,当按下 `Ctrl + S` 时,保存当前文件内容并清空撤销缓冲区。 在 `wj.cs` 文件中: - 修改了 `xrwb` 方法的签名,将 `name` 参数改为可空类型,并增加了对 `name` 为空的检查逻辑,如果 `name` 为空则返回 `false`。 修复标签页选择逻辑并添加快捷键支持 在 `EditorTreeView.cs` 文件中: - 在 `else` 分支中添加了检查是否已存在标签页的逻辑,如果存在则选中该标签页并返回。 - 在 `AddTabItem` 事件后添加了 `SelectedItem` 事件。 在 `EditorWin.xaml.cs` 文件中: - 添加了 `Microsoft.UI.Input` 和 `Windows.System` 的引用。 - 将 `TabViewList` 和 `DataSource` 的初始化从 `new()` 改为 `[]`。 - 在 `treeView.SelectedItem` 事件中添加了选中标签页的逻辑。 - 在 `TreeView_AddTabItem` 方法中添加了对 `codeEditorControl.KeyDown` 事件的处理,支持 `Ctrl + S` 快捷键保存文件。 在 `wj.cs` 文件中: - 修改了 `xrwb` 方法的签名,参数 `name` 允许为空,并在方法内部添加了对 `name` 为空的检查。
This commit is contained in:
parent
e88ec9db04
commit
80e402e386
|
@ -30,6 +30,13 @@ public class EditorTreeView : Microsoft.UI.Xaml.Controls.TreeView
|
||||||
}
|
}
|
||||||
else
|
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}");
|
Debug.WriteLine($"File clicked: {invokedItem.Name}");
|
||||||
var wb = wj.dqwb(invokedItem.Dir);
|
var wb = wj.dqwb(invokedItem.Dir);
|
||||||
var codeEditorControl = new CodeEditorControl();
|
var codeEditorControl = new CodeEditorControl();
|
||||||
|
@ -40,7 +47,7 @@ public class EditorTreeView : Microsoft.UI.Xaml.Controls.TreeView
|
||||||
{
|
{
|
||||||
Header = invokedItem.Name,
|
Header = invokedItem.Name,
|
||||||
IconSource = new SymbolIconSource() { Symbol = Symbol.Document },
|
IconSource = new SymbolIconSource() { Symbol = Symbol.Document },
|
||||||
Content = codeEditorControl
|
Content = codeEditorControl,Tag=invokedItem.Dir
|
||||||
});
|
});
|
||||||
//codeEditorControl.Editor.CanUndo
|
//codeEditorControl.Editor.CanUndo
|
||||||
codeEditorControl.Editor.EmptyUndoBuffer();
|
codeEditorControl.Editor.EmptyUndoBuffer();
|
||||||
|
@ -57,6 +64,7 @@ public class EditorTreeView : Microsoft.UI.Xaml.Controls.TreeView
|
||||||
}
|
}
|
||||||
|
|
||||||
public event Action<TabViewItem,CodeEditorControl> AddTabItem;
|
public event Action<TabViewItem,CodeEditorControl> AddTabItem;
|
||||||
|
public event Action<TabViewItem> SelectedItem;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using Microsoft.UI;
|
using Microsoft.UI;
|
||||||
|
using Microsoft.UI.Input;
|
||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
using Microsoft.UI.Xaml.Controls;
|
using Microsoft.UI.Xaml.Controls;
|
||||||
using Microsoft.UI.Xaml.Input;
|
using Microsoft.UI.Xaml.Input;
|
||||||
using Microsoft.UI.Xaml.Media;
|
using Microsoft.UI.Xaml.Media;
|
||||||
using RustTools.muqing;
|
using RustTools.muqing;
|
||||||
|
using Windows.System;
|
||||||
|
using Windows.UI.Core;
|
||||||
using WinRT.Interop;
|
using WinRT.Interop;
|
||||||
using WinUIEditor;
|
using WinUIEditor;
|
||||||
namespace RustTools.Editor;
|
namespace RustTools.Editor;
|
||||||
|
@ -14,9 +17,9 @@ namespace RustTools.Editor;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed partial class EditorWin : WindowEx
|
public sealed partial class EditorWin : WindowEx
|
||||||
{
|
{
|
||||||
public static ObservableCollection<TabViewItem> TabViewList = new();
|
public static ObservableCollection<TabViewItem> TabViewList = [];
|
||||||
//Ŀ¼Áбí
|
//Ŀ¼Áбí
|
||||||
public ObservableCollection<FileItem> DataSource = new();
|
public ObservableCollection<FileItem> DataSource = [];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ±à¼Æ÷Ö÷´°¿Ú
|
/// ±à¼Æ÷Ö÷´°¿Ú
|
||||||
|
@ -49,6 +52,10 @@ public sealed partial class EditorWin : WindowEx
|
||||||
|
|
||||||
tabview.TabItemsSource = TabViewList;
|
tabview.TabItemsSource = TabViewList;
|
||||||
treeView.AddTabItem += TreeView_AddTabItem;
|
treeView.AddTabItem += TreeView_AddTabItem;
|
||||||
|
treeView.SelectedItem += (a) =>
|
||||||
|
{
|
||||||
|
tabview.SelectedItem = a;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TreeView_AddTabItem(TabViewItem obj,CodeEditorControl codeEditorControl){
|
private void TreeView_AddTabItem(TabViewItem obj,CodeEditorControl codeEditorControl){
|
||||||
|
@ -69,6 +76,26 @@ public sealed partial class EditorWin : WindowEx
|
||||||
}
|
}
|
||||||
Debug.WriteLine($"UpdateUI :" + a);
|
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 组合键对应的操作
|
||||||
|
//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; // 标记事件已处理
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,12 @@ public class wj
|
||||||
public const string UUID = "win.uuid";
|
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 currentDirectory = Directory.GetCurrentDirectory();
|
||||||
var filePath = Path.Combine(CD, name);
|
var filePath = Path.Combine(CD, name);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user