WIn_RustTools/RustTools/Views/CodeTablePage.xaml.cs

211 lines
7.1 KiB
C#
Raw Normal View History

2024-08-17 06:41:34 +00:00
using System;
using System.Collections.Generic;
2024-08-19 14:30:11 +00:00
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Diagnostics.Metrics;
2024-08-17 06:41:34 +00:00
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
2024-08-19 14:30:11 +00:00
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
using System.Xml.Linq;
2024-08-17 06:41:34 +00:00
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Navigation;
2024-08-19 14:30:11 +00:00
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;
2024-08-17 06:41:34 +00:00
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
namespace RustTools.Views;
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class CodeTablePage : Page
{
2024-08-19 14:30:11 +00:00
public ObservableCollection<CodeTable>? codeList = new();
public CodeTableViewModel ViewModel { get; set; }
public List<DataBaseManifest.Section.SectionData> section = new();
2024-08-17 06:41:34 +00:00
public CodeTablePage()
{
2024-08-19 14:30:11 +00:00
ViewModel = App.GetService<CodeTableViewModel>();
InitializeComponent();
try
{
var path = Path.Combine(CodeDataPage.codetable.Dir, CodeDataPage.codetable.tables.code);
var codeTable_Code = JsonConvert.DeserializeObject<CodeTable_Code>(File.ReadAllText(path));
var v1 = File.ReadAllText(Path.Combine(CodeDataPage.codetable.Dir, CodeDataPage.codetable.tables.section));
section = JsonConvert.DeserializeObject<DataBaseManifest.Section>(v1).data;
//gj.sc(v1);
foreach (var item in codeTable_Code.data)
{
#pragma warning disable SYSLIB1045 // ת<><D7AA>Ϊ<EFBFBD><CEAA>GeneratedRegexAttribute<74><65><EFBFBD><EFBFBD>
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<CodeTable_Data>()
};
codeTable1.Vaule.Add(item);
codeList.Add(codeTable1);
}
}
}
if (codeList.Count > 0)
{
//var firstEntry = codeList.FirstOrDefault();
keyListView.SelectedItem = codeList.FirstOrDefault(); // Ĭ<><C4AC>ѡ<EFBFBD>е<EFBFBD>һ<EFBFBD><D2BB>
}
}
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)
{
// <20><>ȡ<EFBFBD><C8A1>ѡ<EFBFBD>е<EFBFBD><D0B5><EFBFBD>
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;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7B5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ҳ<EFBFBD><EFBFBD><E6A1A2><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD>
}
//// <20><>ȡ<EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
//var removedItems = e.RemovedItems;
//foreach (var item in removedItems)
//{
// Debug.WriteLine($"Deselected item: {item}");
//}
}
/// <summary>
/// <20>˳<EFBFBD><CBB3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ֹ<EFBFBD>ڴ<EFBFBD>й©
/// </summary>
/// <param name="e"></param>
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<CodeTable_Data> 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<CodeTable_Data> 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<string>();
var splitText = sender.Text.ToLower().Split(" ");
if (valueListView.ItemsSource is not List<CodeTable_Data> 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;
}
2024-08-17 06:41:34 +00:00
}
}