mirror of
https://github.com/jie65535/GrasscutterCommandGenerator.git
synced 2025-06-07 22:59:14 +08:00
184 lines
6.0 KiB
C#
184 lines
6.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using System.Windows.Forms;
|
|
|
|
using GrasscutterTools.Game;
|
|
using GrasscutterTools.Properties;
|
|
|
|
namespace GrasscutterTools
|
|
{
|
|
public partial class FormTextMapBrowser : Form
|
|
{
|
|
public FormTextMapBrowser()
|
|
{
|
|
InitializeComponent();
|
|
Icon = Resources.IconGrasscutter;
|
|
}
|
|
|
|
private void FormTextMapBrowser_Load(object sender, EventArgs e)
|
|
{
|
|
if (!string.IsNullOrEmpty(Settings.Default.ResourcesDirPath))
|
|
{
|
|
LoadResources(Settings.Default.ResourcesDirPath);
|
|
}
|
|
}
|
|
|
|
private TextMapData data;
|
|
|
|
private void LoadResources(string resourcesDirPath)
|
|
{
|
|
try
|
|
{
|
|
Cursor = Cursors.WaitCursor;
|
|
Application.DoEvents();
|
|
|
|
data = new TextMapData(resourcesDirPath);
|
|
LblResourcesPath.Text = resourcesDirPath;
|
|
if (Settings.Default.ResourcesDirPath != resourcesDirPath)
|
|
{
|
|
Settings.Default.ResourcesDirPath = resourcesDirPath;
|
|
Settings.Default.Save();
|
|
}
|
|
|
|
CmbLanguage.Items.Clear();
|
|
CmbLanguage.Items.AddRange(data.TextMapFiles);
|
|
if (!string.IsNullOrEmpty(Settings.Default.TextMapFileName))
|
|
{
|
|
var i = CmbLanguage.Items.IndexOf(Settings.Default.TextMapFileName);
|
|
if (i != -1)
|
|
CmbLanguage.SelectedIndex = i;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
finally
|
|
{
|
|
Cursor = Cursors.Default;
|
|
}
|
|
}
|
|
|
|
private void BtnSelectRecoursePath_Click(object sender, EventArgs e)
|
|
{
|
|
var dir = new FolderBrowserDialog()
|
|
{
|
|
ShowNewFolderButton = false,
|
|
Description = "./Gasscutter/resources",
|
|
};
|
|
if (dir.ShowDialog() == DialogResult.OK)
|
|
{
|
|
LoadResources(dir.SelectedPath);
|
|
}
|
|
}
|
|
|
|
private void CmbLanguage_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (CmbLanguage.SelectedIndex == -1 || data == null)
|
|
return;
|
|
try
|
|
{
|
|
Cursor = Cursors.WaitCursor;
|
|
Application.DoEvents();
|
|
data.LoadTextMap(data.TextMapFilePaths[CmbLanguage.SelectedIndex]);
|
|
|
|
GenLines();
|
|
Settings.Default.TextMapFileName = CmbLanguage.Text;
|
|
Settings.Default.Save();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
finally
|
|
{
|
|
Cursor = Cursors.Default;
|
|
}
|
|
}
|
|
|
|
private List<ListViewItem> Items;
|
|
|
|
private void GenLines()
|
|
{
|
|
List<ListViewItem> items = new List<ListViewItem>(data.TextMap.Count);
|
|
foreach (var kv in data.TextMap)
|
|
{
|
|
if (data.ManualTextMap.TryGetValue(kv.Key, out string id))
|
|
items.Add(new ListViewItem(new string[] { kv.Key, id, kv.Value }));
|
|
else
|
|
items.Add(new ListViewItem(new string[] { kv.Key, "", kv.Value }));
|
|
}
|
|
Items = items;
|
|
}
|
|
|
|
private void ChkTopMost_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
TopMost = ChkTopMost.Checked;
|
|
}
|
|
|
|
private void BtnSearch_Click(object sender, EventArgs e)
|
|
{
|
|
if (Items == null)
|
|
{
|
|
MessageBox.Show("请先选择资源目录,并选择对应语言文件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
var filter = TxtTextMapFilter.Text.Trim();
|
|
if (string.IsNullOrEmpty(filter))
|
|
return;
|
|
Regex r;
|
|
try
|
|
{
|
|
r = new Regex(filter, RegexOptions.IgnoreCase);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
Cursor = Cursors.WaitCursor;
|
|
Application.DoEvents();
|
|
|
|
var result = data.ManualTextMap.Where(kv => r.Match(kv.Value).Success)
|
|
.Select(kv => new { Hash = kv.Key, Id = kv.Value, Text = data.TextMap[kv.Key] })
|
|
.Concat(
|
|
data.TextMap.Where(kv => r.Match(kv.Key).Success || r.Match(kv.Value).Success)
|
|
.Select(kv => new {
|
|
Hash = kv.Key,
|
|
Id = data.ManualTextMap.TryGetValue(kv.Key, out string id) ? id : "",
|
|
Text = kv.Value
|
|
})
|
|
).ToList();
|
|
|
|
DGVTextMap.SuspendLayout();
|
|
DGVTextMap.Rows.Clear();
|
|
for (int i = 0; i < result.Count; i++)
|
|
{
|
|
DGVTextMap.Rows.Add();
|
|
DGVTextMap.Rows[i].Cells[0].Value = result[i].Hash;
|
|
DGVTextMap.Rows[i].Cells[1].Value = result[i].Id;
|
|
DGVTextMap.Rows[i].Cells[2].Value = result[i].Text;
|
|
}
|
|
DGVTextMap.ResumeLayout();
|
|
}
|
|
finally
|
|
{
|
|
Cursor = Cursors.Default;
|
|
}
|
|
}
|
|
|
|
private void TxtTextMapFilter_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter)
|
|
BtnSearch_Click(sender, e);
|
|
}
|
|
|
|
}
|
|
} |