From 582f4f2652e98587b0cd6f7eb333193bf04f211a Mon Sep 17 00:00:00 2001 From: muqing <1966944300@qq.com> Date: Mon, 19 Aug 2024 22:30:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9D=A1=E8=A7=89=E4=BA=86QWQ=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A1=A8=E5=92=8C=E4=BB=A3=E7=A0=81=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RustTools/App.xaml.cs | 76 ++++++++- RustTools/Assets/RustCode.zip | Bin 0 -> 68155 bytes RustTools/DataList/CodeTable.cs | 81 ++++++++++ RustTools/DataList/DataBaseManifest.cs | 104 ++++++++++++ RustTools/Helpers/NotOfficialConverter.cs | 22 +++ RustTools/RustTools.csproj | 10 +- RustTools/Services/PageService.cs | 2 + RustTools/Strings/zh-cn/Resources.resw | 8 +- RustTools/ViewModels/CodeDataViewModel.cs | 13 ++ RustTools/ViewModels/UserViewModel.cs | 2 - RustTools/Views/CodeDataPage.xaml | 96 +++++++++++ RustTools/Views/CodeDataPage.xaml.cs | 140 ++++++++++++++++ RustTools/Views/CodeTablePage.xaml | 118 +++++++++++++- RustTools/Views/CodeTablePage.xaml.cs | 187 +++++++++++++++++++++- RustTools/Views/ShellPage.xaml | 16 ++ RustTools/Views/ShellPage.xaml.cs | 5 +- RustTools/muqing/Dialog.cs | 49 ++++++ RustTools/muqing/IniHelper.cs | 2 +- RustTools/muqing/wj.cs | 23 ++- 19 files changed, 927 insertions(+), 27 deletions(-) create mode 100644 RustTools/Assets/RustCode.zip create mode 100644 RustTools/DataList/CodeTable.cs create mode 100644 RustTools/DataList/DataBaseManifest.cs create mode 100644 RustTools/Helpers/NotOfficialConverter.cs create mode 100644 RustTools/ViewModels/CodeDataViewModel.cs create mode 100644 RustTools/Views/CodeDataPage.xaml create mode 100644 RustTools/Views/CodeDataPage.xaml.cs create mode 100644 RustTools/muqing/Dialog.cs diff --git a/RustTools/App.xaml.cs b/RustTools/App.xaml.cs index 5c06b34..243700f 100644 --- a/RustTools/App.xaml.cs +++ b/RustTools/App.xaml.cs @@ -1,10 +1,15 @@  +using System.Diagnostics; +using System.IO.Compression; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.UI.Xaml; using Microsoft.Windows.AppLifecycle; +using Newtonsoft.Json; using RustTools.Activation; using RustTools.Contracts.Services; +using RustTools.DataList; +using RustTools.Helpers; using RustTools.Models; using RustTools.muqing; using RustTools.Services; @@ -12,6 +17,7 @@ using RustTools.ViewModels; using RustTools.Views; using RustTools.WindowUI; using Windows.ApplicationModel.Activation; +using Windows.Storage; namespace RustTools; @@ -77,16 +83,19 @@ public partial class App : Microsoft.UI.Xaml.Application services.AddTransient(); services.AddTransient(); - services.AddTransient(); + //services.AddTransient(); services.AddTransient(); - services.AddTransient(); + //services.AddTransient(); services.AddTransient(); - services.AddTransient(); + //services.AddTransient(); services.AddTransient(); - services.AddTransient(); + //services.AddTransient(); //模组碎片 services.AddTransient(); - services.AddTransient(); + //services.AddTransient(); + + services.AddTransient(); + //services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -97,6 +106,63 @@ public partial class App : Microsoft.UI.Xaml.Application Build(); UnhandledException += App_UnhandledException; + var path = ApplicationData.Current.LocalFolder.Path; + var v = Path.Combine(path, "CodeTable"); + gj.sc(path); + if (Directory.Exists(v) == false) + { + Directory.CreateDirectory(v); + } + var RustCode = Path.Combine(v, "RustCode"); + if (Directory.Exists(RustCode) == false) + { + new Thread(() => + { + var zipFilePath = Path.Combine(AppContext.BaseDirectory, "Assets\\RustCode.zip"); + gj.sc(zipFilePath); + try + { + ZipFile.ExtractToDirectory(zipFilePath, RustCode); + var iniHelper = new IniHelper(IniHelper.FILE.Config); + iniHelper.SetValue("CodeTable", "Dir", RustCode); + iniHelper.Save(); + var vr = Path.Combine(RustCode, "DataBaseManifest.json"); + if (File.Exists(vr)) + { + var json = JsonConvert.DeserializeObject(File.ReadAllText(vr)); + json.Dir = RustCode; + CodeDataPage.codetable = json; + } + Debug.WriteLine("ZIP文件已成功解压缩并复制到目标目录。"); + } + catch (FileNotFoundException) + { + Debug.WriteLine("源文件未找到。"); + } + catch (IOException ex) + { + Debug.WriteLine("发生IO异常: " + ex.Message); + } + catch (Exception ex) + { + + Debug.WriteLine("发生未知错误: " + ex.Message); + } + }).Start(); + } + else + { + var iniHelper = new IniHelper(IniHelper.FILE.Config); + var v1 = iniHelper.GetValue("CodeTable", "Dir"); + if (string.IsNullOrEmpty(v1)) { v1 = RustCode; } + var vr = Path.Combine(v1, "DataBaseManifest.json"); + if (File.Exists(vr)) + { + var json = JsonConvert.DeserializeObject(File.ReadAllText(vr)); + json.Dir = v1; + CodeDataPage.codetable = json; + } + } } private void App_UnhandledException(object sender, Microsoft.UI.Xaml.UnhandledExceptionEventArgs e) diff --git a/RustTools/Assets/RustCode.zip b/RustTools/Assets/RustCode.zip new file mode 100644 index 0000000000000000000000000000000000000000..ddfe4c44781822e26032ce62d97ba8057c9591a2 GIT binary patch literal 68155 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%0A-6YWJ{!Y2hMO?~;KqA?1KwRszTuxS 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⪻=@2dLlxb=*Z0=UU(wC`MKQ6Acw+L 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 HEP%fOm*wHO literal 0 HcmV?d00001 diff --git a/RustTools/DataList/CodeTable.cs b/RustTools/DataList/CodeTable.cs new file mode 100644 index 0000000..b091708 --- /dev/null +++ b/RustTools/DataList/CodeTable.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RustTools.Helpers; + +namespace RustTools.DataList; +#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。 +/// +/// 加载 节与表 +/// +public class CodeTable +{ + public string CnKey + { + get; set; + } + public string Key + { + get; set; + } + public List Vaule + { + get; set; + } +} + +/// +/// 加载代码表文件 +/// +public class CodeTable_Code +{ + public string name + { + get; set; + } + public List data + { + get; set; + } = new List(); +} + +public class CodeTable_Data +{ + //英文 + public string code + { + get; set; + } + //中文 + public string translate + { + get; set; + } + //简单的对代码进行解释 + public string description + { + get; set; + } + //声明这是个什么类型 例如 string 字符串 可自定义 + public string type + { + get; set; + } + //添加在哪一个版本 默认为最低版本 "1.12" + public string addVersion + { + get; set; + } + //存在与哪一个节 用,隔开 + public string section + { + get; set; + } + //更详的解释 和 例子 + public string demo + { + get; set; + } +} \ No newline at end of file diff --git a/RustTools/DataList/DataBaseManifest.cs b/RustTools/DataList/DataBaseManifest.cs new file mode 100644 index 0000000..c5fd7fb --- /dev/null +++ b/RustTools/DataList/DataBaseManifest.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RustTools.DataList; +/// +/// 数据集 +/// +#pragma warning disable IDE1006 // 命名样式 +#pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。 +public class DataBaseManifest +{ + public string id + { + get; set; + }//数据集标识 不能重复 + public string name + { + get; set; + }//代码表名称 + public string author + { + get; set; + }//作者 + public string describe + { + get; set; + } + public string versionName + { + get; set; + }//版本 规范 int.int.int + public List updateLog + { + get; set; + } + + public Data tables + { + get; set; + } + public string Dir + { + get; set; + } = string.Empty; + + public class Data + { + // 代码表配置文件 "/tables/code.json", 可自定义 + public string code + { + get; set; + } + public string chain_inspection + { + get; set; + } + public string section + { + get; set; + } + //节 翻译 对应 配置文件 "/tables/value_type.json",可自定义 + public string value_type + { + get; set; + } + //版本号对应配置文件 "/tables/game_version.json" 可自定义 + public string game_version + { + get; set; + } + } + public class GameVersion + { + + } + public class Section + { + public string name + { + get; set; + } + public List data + { + + get; set; + } + + public class SectionData + { + public string code + { + get; set; + } + public string translate + { + get; set; + } + } + + } +} diff --git a/RustTools/Helpers/NotOfficialConverter.cs b/RustTools/Helpers/NotOfficialConverter.cs new file mode 100644 index 0000000..4ddb464 --- /dev/null +++ b/RustTools/Helpers/NotOfficialConverter.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RustTools.muqing; + +namespace RustTools.Helpers; +public class NotOfficialConverter +{ + public object Convert(object value, Type targetType, object parameter, string language) + { + var id = value as string; + gj.sc(id); + return id=="aa"; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } +} diff --git a/RustTools/RustTools.csproj b/RustTools/RustTools.csproj index 0e04d26..85cb98b 100644 --- a/RustTools/RustTools.csproj +++ b/RustTools/RustTools.csproj @@ -30,13 +30,6 @@ Never D:\RustTools - - - - - - - @@ -76,5 +69,4 @@ - \ No newline at end of file diff --git a/RustTools/Services/PageService.cs b/RustTools/Services/PageService.cs index 34d37d5..1a7ca83 100644 --- a/RustTools/Services/PageService.cs +++ b/RustTools/Services/PageService.cs @@ -21,6 +21,8 @@ public class PageService : IPageService Configure(); Configure(); Configure(); + Configure(); + Configure(); Configure(); } diff --git a/RustTools/Strings/zh-cn/Resources.resw b/RustTools/Strings/zh-cn/Resources.resw index 8f606d6..49dfccb 100644 --- a/RustTools/Strings/zh-cn/Resources.resw +++ b/RustTools/Strings/zh-cn/Resources.resw @@ -145,7 +145,7 @@ 关于软件 - 开发中,铁锈助手的Win端助手,采用WinUI3开发构建,主要开发语言C#,仅支持win10+,如果你在测试中遇到BUG请在群里反馈 + 开发中,Windows端助手,采用WinUI3开发构建,主要开发语言C#,本项目只是作为铁锈助手PC端中的一个测试项目 隐私声明 @@ -177,4 +177,10 @@ 用户 + + 代码表 + + + 代码集 + \ No newline at end of file diff --git a/RustTools/ViewModels/CodeDataViewModel.cs b/RustTools/ViewModels/CodeDataViewModel.cs new file mode 100644 index 0000000..af7675a --- /dev/null +++ b/RustTools/ViewModels/CodeDataViewModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management; +using System.Text; +using System.Threading.Tasks; +using CommunityToolkit.Mvvm.ComponentModel; + +namespace RustTools.ViewModels; + +public class CodeDataViewModel :ObservableRecipient +{ +} diff --git a/RustTools/ViewModels/UserViewModel.cs b/RustTools/ViewModels/UserViewModel.cs index 7d69ff9..326b8be 100644 --- a/RustTools/ViewModels/UserViewModel.cs +++ b/RustTools/ViewModels/UserViewModel.cs @@ -1,6 +1,4 @@ using CommunityToolkit.Mvvm.ComponentModel; -using RustTools.DataList; - namespace RustTools.ViewModels; public partial class UserViewModel : ObservableRecipient diff --git a/RustTools/Views/CodeDataPage.xaml b/RustTools/Views/CodeDataPage.xaml new file mode 100644 index 0000000..97b6d54 --- /dev/null +++ b/RustTools/Views/CodeDataPage.xaml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RustTools/Views/CodeDataPage.xaml.cs b/RustTools/Views/CodeDataPage.xaml.cs new file mode 100644 index 0000000..7cedb22 --- /dev/null +++ b/RustTools/Views/CodeDataPage.xaml.cs @@ -0,0 +1,140 @@ + +using System.Collections.ObjectModel; + +using Microsoft.UI.Xaml.Controls; +using Newtonsoft.Json; +using RustTools.DataList; +using RustTools.Helpers; +using RustTools.muqing; +using RustTools.ViewModels; +using Windows.Storage; +using Windows.UI.Popups; +namespace RustTools.Views; + +/// +/// ݼƬ +/// +public sealed partial class CodeDataPage : Page +{ + public CodeDataViewModel ViewModel + { + get; set; + } + public ObservableCollection DataConfig { get; set; } = new(); + public static DataBaseManifest codetable = new(); + public CodeDataPage() + { + ViewModel = new CodeDataViewModel(); + InitializeComponent(); + + var filePath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "CodeTable"); + if (!Directory.Exists(filePath)) { return; } + var directoryInfo = new DirectoryInfo(filePath); + var directoryInfos = directoryInfo.GetDirectories(); + foreach (var item in directoryInfos) + { + var v = Path.Combine(item.FullName, "DataBaseManifest.json"); + if (File.Exists(v)) + { + var json = JsonConvert.DeserializeObject(File.ReadAllText(v)); + json.Dir = item.FullName; + //gj.sc(json.Dir); + DataConfig.Add(json); + + } + } + var FirstOrDefault = DataConfig.FirstOrDefault(any => any.id == "official"); + if (FirstOrDefault != null) + { + DataConfig.Remove(FirstOrDefault); + DataConfig.Insert(0, FirstOrDefault); + } + var aa = DataConfig.FirstOrDefault(any => any.Dir == codetable.Dir); + if (aa?.Dir == codetable.Dir) + { + listview.SelectedItem = aa; + } + } + + private void listview_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (e.AddedItems[0] is DataBaseManifest item) + { + var iniHelper = new IniHelper(IniHelper.FILE.Config); + iniHelper.SetValue("CodeTable", "Dir", item.Dir ?? string.Empty); + iniHelper.Save(); + gj.sc(item.Dir); + codetable = item; + } + + } + private async void MenuFlyoutItem_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) + { + if (sender is MenuFlyoutItem item) + { + if (item.DataContext is DataBaseManifest data) + { + var str = item.Text; + if (str == "༭") + { + //ϵͳļûԼѡJson + wj.OpenFileExplorer(data.Dir); + } + else if (str == "ɾ") + { + var contentDialog = new ContentDialog() + { + XamlRoot = Content.XamlRoot, + Title = "ʾ", + Content = $"Ƿɾ {data.name}\nλ {data.Dir}", + CloseButtonText = "ȡ" + }; + if (data.id == "official") + { + contentDialog.Title = ""; + contentDialog.Content = "޷ɾٷݼ"; + } + else + { + contentDialog.PrimaryButtonText = "ȷ"; + } + var contentDialogResult = await contentDialog.ShowAsync(); + if (contentDialogResult == ContentDialogResult.Primary) + { + gj.sc("ɾļ" + data.Dir); + } + } + } + } + + } + + private async void AppBarButton_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) + { + if (sender is AppBarButton item) + { + var v = item.Tag.ToString(); + if (v == "0") + { + //½ + } + else if (v == "1") + { + // + var v1 = Path.Combine(wj.LocalFolder, "CodeTable"); + if (Directory.Exists(v1)) + { + wj.OpenFileExplorer(v1); + } + else + { + await Dialog.DialogWarn("ļ", XamlRoot); + } + } + else if (v == "2") + { + + } + } + } +} diff --git a/RustTools/Views/CodeTablePage.xaml b/RustTools/Views/CodeTablePage.xaml index 6e48266..2506809 100644 --- a/RustTools/Views/CodeTablePage.xaml +++ b/RustTools/Views/CodeTablePage.xaml @@ -3,11 +3,125 @@ x:Class="RustTools.Views.CodeTablePage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:controls="using:CommunityToolkit.WinUI.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:datalist="using:RustTools.DataList" xmlns:local="using:RustTools.Views" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" + xmlns:themes="using:RustTools.Themes" mc:Ignorable="d"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RustTools/Views/CodeTablePage.xaml.cs b/RustTools/Views/CodeTablePage.xaml.cs index 9370ed2..c50d97e 100644 --- a/RustTools/Views/CodeTablePage.xaml.cs +++ b/RustTools/Views/CodeTablePage.xaml.cs @@ -1,8 +1,14 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Diagnostics.Metrics; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; +using System.Text.Json.Serialization; +using System.Text.RegularExpressions; +using System.Xml.Linq; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls.Primitives; @@ -10,8 +16,13 @@ using Microsoft.UI.Xaml.Data; using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media; using Microsoft.UI.Xaml.Navigation; -using Windows.Foundation; -using Windows.Foundation.Collections; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using RustTools.DataList; +using RustTools.muqing; +using RustTools.ViewModels; +using static System.Collections.Specialized.BitVector32; +using static RustTools.DataList.DataBaseManifest; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. @@ -22,8 +33,178 @@ namespace RustTools.Views; /// public sealed partial class CodeTablePage : Page { + public ObservableCollection? codeList = new(); + public CodeTableViewModel ViewModel { get; set; } + public List section = new(); public CodeTablePage() { - this.InitializeComponent(); + ViewModel = App.GetService(); + InitializeComponent(); + try + { + var path = Path.Combine(CodeDataPage.codetable.Dir, CodeDataPage.codetable.tables.code); + + var codeTable_Code = JsonConvert.DeserializeObject(File.ReadAllText(path)); + + var v1 = File.ReadAllText(Path.Combine(CodeDataPage.codetable.Dir, CodeDataPage.codetable.tables.section)); + section = JsonConvert.DeserializeObject(v1).data; + //gj.sc(v1); + foreach (var item in codeTable_Code.data) + { +#pragma warning disable SYSLIB1045 // תΪGeneratedRegexAttribute + foreach (var parts in Regex.Split(item.section, ",")) + { + var FirstOrDefault = codeList.FirstOrDefault(any => any.Key == parts); + if (FirstOrDefault != null) + { + FirstOrDefault.Vaule.Add(item); + } + else + { + var sectionData = section.FirstOrDefault(any => any.code == parts); + var translate = "Null"; + if (sectionData != null) + { + translate = sectionData.translate; + } + sectionData = null; + var codeTable1 = new CodeTable + { + Key = parts, + CnKey = translate, + Vaule = new List() + }; + codeTable1.Vaule.Add(item); + codeList.Add(codeTable1); + } + } + } + if (codeList.Count > 0) + { + //var firstEntry = codeList.FirstOrDefault(); + keyListView.SelectedItem = codeList.FirstOrDefault(); // Ĭѡеһ + } + + } + catch (Exception ex) + { + Task.Run(async () => { await Dialog.DialogWarn(ex.Message, XamlRoot); }); + } + + //var textBlock = new TextBlock(); + //textBlock.IsTextSelectionEnabled + } + + + private void keyListView_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + + // ȡѡе + var addedItems = e.AddedItems; + foreach (var item in addedItems) + { + Debug.WriteLine($"Selected item: {item}"); + if (item is CodeTable a) + { + gj.sc(a); + valueList = a.Vaule; + valueListView.ItemsSource = a.Vaule; + } + // 絼һҳ桢Ի + } + + //// ȡƳ + //var removedItems = e.RemovedItems; + //foreach (var item in removedItems) + //{ + // Debug.WriteLine($"Deselected item: {item}"); + //} + } + + /// + /// ˳ʱ ֹڴй© + /// + /// + protected override void OnNavigatedFrom(NavigationEventArgs e) + { + base.OnNavigatedFrom(e); + codeList?.Clear(); + codeList = null; + } + + + private void List_ButtonIcon_Click(object sender, RoutedEventArgs e) + { + var button = sender as Button; + if (button != null) { + if (button.DataContext is not CodeTable_Data codeTable_Data) { return; } + if (ToggleThemeTeachingTip1.IsOpen==false) + { + ToggleThemeTeachingTip1.Target = button; + ToggleThemeTeachingTip1.IsOpen = true; + } + else + { + ToggleThemeTeachingTip1.IsOpen = false; + } + ToastTextBlock.Text =codeTable_Data.demo; + gj.sc(codeTable_Data); + } + } + + private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args) + { + var str = args.SelectedItem.ToString(); + search.Text = str; + if (str == null) { return; } + var a=str.Split(' '); + List itemsSource = new(); + + foreach (var item in valueList) + { + if (item.code.Contains(a[0]) || item.translate.Contains(a[1])) + { + itemsSource.Add(item); + gj.sc(item.code); + } + } + gj.sc(itemsSource.Count); + valueListView.ItemsSource=itemsSource; + //valueListView.ItemsSource=search.ItemsSource; + } + + private List valueList = new (); + private void search_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) + { + + if (string.IsNullOrEmpty(search.Text)) + { + valueListView.ItemsSource = valueList; return; } + // Since selecting an item will also change the text, + // only listen to changes caused by user entering text. + if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) + { + var suitableItems = new List(); + var splitText = sender.Text.ToLower().Split(" "); + if (valueListView.ItemsSource is not List itemsSource) { return; } + foreach (var cat in itemsSource) + { + var found = splitText.All((key) => + { + if (string.IsNullOrEmpty(key)) { return false; } + return cat.code.Contains(key)||cat.translate.Contains(key); + }); + if (found) + { + suitableItems.Add(cat.code+" "+cat.translate); + } + } + if (suitableItems.Count == 0) + { + suitableItems.Add("No results found"); + } + sender.ItemsSource = suitableItems; + } + } } diff --git a/RustTools/Views/ShellPage.xaml b/RustTools/Views/ShellPage.xaml index 77fc499..1b0b348 100644 --- a/RustTools/Views/ShellPage.xaml +++ b/RustTools/Views/ShellPage.xaml @@ -67,6 +67,22 @@ + + + + + + + + + + diff --git a/RustTools/Views/ShellPage.xaml.cs b/RustTools/Views/ShellPage.xaml.cs index 1bc454e..6a6c00e 100644 --- a/RustTools/Views/ShellPage.xaml.cs +++ b/RustTools/Views/ShellPage.xaml.cs @@ -1,7 +1,6 @@ -using System; + using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Input; using RustTools.Contracts.Services; @@ -38,7 +37,7 @@ public sealed partial class ShellPage : Page App.MainWindow.SetTitleBar(AppTitleBar); App.MainWindow.Activated += MainWindow_Activated; } - //AppTitleBarText.Text = "app_name".GetLocalized() + " " + "app_version".GetLocalized(); + AppTitleBarText.Text = "app_name".GetLocalized() + " " + "app_version".GetLocalized(); //NavigationViewControl.SelectedItem = NavigationViewControl.MenuItems[0]; //NavigationViewControl.SelectionChanged += NavigationViewControl_SelectionChanged; //NavigateToPage("Home"); diff --git a/RustTools/muqing/Dialog.cs b/RustTools/muqing/Dialog.cs new file mode 100644 index 0000000..b75d383 --- /dev/null +++ b/RustTools/muqing/Dialog.cs @@ -0,0 +1,49 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; +using Windows.UI.Popups; + +namespace RustTools.muqing; +public class Dialog +{ + //WinRT 信息: 此 API 必须由具有 CoreWindow 的线程或已进行显式设置的窗口来调用。 + public static async Task windowDialog(string title) + { + + var messageDialog = new MessageDialog("No internet connection has been found.","title"); + //messageDialog.set + //// Add commands and set their callbacks; both buttons use the same callback function instead of inline event handlers + //messageDialog.Commands.Add(new UICommand( + // "确定")); + //messageDialog.Commands.Add(new UICommand( + // "取消")); + + //// Set the command that will be invoked by default + //messageDialog.DefaultCommandIndex = 0; + + //// Set the command to be invoked when escape is pressed + //messageDialog.CancelCommandIndex = 1; + + // Show the message dialog + await messageDialog.ShowAsync(); + } + + public const string warning = "警告"; + public const string Close = "取消"; + public static async Task DialogWarn(string sub, XamlRoot xamlRoot) + { + var contentDialog = new ContentDialog() + { + XamlRoot = xamlRoot, + Title = warning, + Content = sub, + CloseButtonText = Close + }; + return await contentDialog.ShowAsync(); + } +} diff --git a/RustTools/muqing/IniHelper.cs b/RustTools/muqing/IniHelper.cs index fe0c761..49c2416 100644 --- a/RustTools/muqing/IniHelper.cs +++ b/RustTools/muqing/IniHelper.cs @@ -1,5 +1,6 @@ using Windows.Storage; +#pragma warning disable CA1050 // 在命名空间中声明类型 public class IniHelper { private readonly Dictionary> _sections = new(); @@ -74,7 +75,6 @@ public class IniHelper /// public void Load(string a) { - filePath = Path.Combine(ApplicationData.Current.LocalFolder.Path, a); if (!File.Exists(filePath)) {// 使用 File.Create 创建文件并立即关闭 diff --git a/RustTools/muqing/wj.cs b/RustTools/muqing/wj.cs index 5b8ffd8..f8babad 100644 --- a/RustTools/muqing/wj.cs +++ b/RustTools/muqing/wj.cs @@ -1,5 +1,6 @@ using System.Diagnostics; using System.IO.Compression; +using Windows.Storage; namespace RustTools.muqing; #pragma warning disable CS8981 // 该类型名称仅包含小写 ascii 字符。此类名称可能会成为该语言的保留值。 @@ -11,6 +12,9 @@ public class wj //缓存路径 public const string Cache = ""; + public static string LocalFolder = ApplicationData.Current.LocalFolder.Path; + //ApplicationData.Current.LocalFolder.Path + //不知道为什么会保存到这里的路径 废弃了 , 找到了新的文件夹路径 //public const string CachePath= "C:/Users/19669/AppData/Local/VirtualStore/Windows/SysWOW64"; @@ -130,5 +134,22 @@ public class wj return string.Empty; } } - + public static void OpenFileExplorer(string path) + { + try + { + Process.Start("explorer.exe", path); + } + catch (System.ComponentModel.Win32Exception noBrowser) + { + if (noBrowser.ErrorCode == -2147467259) + throw new Exception("There is no default browser configured."); + else + throw; + } + catch (System.Exception other) + { + throw other; + } + } }