WIn_RustTools/RustTools/Views/CodeTablePage.xaml.cs

211 lines
7.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Navigation;
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.
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
{
public ObservableCollection<CodeTable>? codeList = new();
public CodeTableViewModel ViewModel { get; set; }
public List<DataBaseManifest.Section.SectionData> section = new();
public CodeTablePage()
{
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 // ת»»Îª¡°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<CodeTable_Data>()
};
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}");
//}
}
/// <summary>
/// Í˳öµÄʱºòÇå¿Õ ·ÀÖ¹ÄÚ´æй©
/// </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;
}
}
}