implement readonly ExcelEditorForm
This commit is contained in:
parent
c2da3d21d2
commit
4d74a64180
|
@ -30,14 +30,14 @@
|
||||||
{
|
{
|
||||||
downloadButton = new Button();
|
downloadButton = new Button();
|
||||||
reloadButton = new Button();
|
reloadButton = new Button();
|
||||||
propertyGrid1 = new PropertyGrid();
|
propGrid = new PropertyGrid();
|
||||||
splitContainer1 = new SplitContainer();
|
splitContainer1 = new SplitContainer();
|
||||||
splitContainer2 = new SplitContainer();
|
splitContainer2 = new SplitContainer();
|
||||||
tableListView = new ListView();
|
tableListView = new ListView();
|
||||||
columnHeader1 = new ColumnHeader();
|
columnHeader1 = new ColumnHeader();
|
||||||
itemListView = new ListView();
|
itemListView = new ListView();
|
||||||
button1 = new Button();
|
|
||||||
columnHeader2 = new ColumnHeader();
|
columnHeader2 = new ColumnHeader();
|
||||||
|
button1 = new Button();
|
||||||
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
|
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
|
||||||
splitContainer1.Panel1.SuspendLayout();
|
splitContainer1.Panel1.SuspendLayout();
|
||||||
splitContainer1.Panel2.SuspendLayout();
|
splitContainer1.Panel2.SuspendLayout();
|
||||||
|
@ -68,13 +68,13 @@
|
||||||
reloadButton.UseVisualStyleBackColor = true;
|
reloadButton.UseVisualStyleBackColor = true;
|
||||||
reloadButton.Click += reloadButton_Click;
|
reloadButton.Click += reloadButton_Click;
|
||||||
//
|
//
|
||||||
// propertyGrid1
|
// propGrid
|
||||||
//
|
//
|
||||||
propertyGrid1.Dock = DockStyle.Fill;
|
propGrid.Dock = DockStyle.Fill;
|
||||||
propertyGrid1.Location = new Point(0, 0);
|
propGrid.Location = new Point(0, 0);
|
||||||
propertyGrid1.Name = "propertyGrid1";
|
propGrid.Name = "propGrid";
|
||||||
propertyGrid1.Size = new Size(695, 831);
|
propGrid.Size = new Size(695, 831);
|
||||||
propertyGrid1.TabIndex = 4;
|
propGrid.TabIndex = 4;
|
||||||
//
|
//
|
||||||
// splitContainer1
|
// splitContainer1
|
||||||
//
|
//
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
//
|
//
|
||||||
// splitContainer1.Panel2
|
// splitContainer1.Panel2
|
||||||
//
|
//
|
||||||
splitContainer1.Panel2.Controls.Add(propertyGrid1);
|
splitContainer1.Panel2.Controls.Add(propGrid);
|
||||||
splitContainer1.Size = new Size(1048, 831);
|
splitContainer1.Size = new Size(1048, 831);
|
||||||
splitContainer1.SplitterDistance = 349;
|
splitContainer1.SplitterDistance = 349;
|
||||||
splitContainer1.TabIndex = 5;
|
splitContainer1.TabIndex = 5;
|
||||||
|
@ -142,9 +142,12 @@
|
||||||
itemListView.TabIndex = 0;
|
itemListView.TabIndex = 0;
|
||||||
itemListView.UseCompatibleStateImageBehavior = false;
|
itemListView.UseCompatibleStateImageBehavior = false;
|
||||||
itemListView.View = View.Details;
|
itemListView.View = View.Details;
|
||||||
|
itemListView.SelectedIndexChanged += itemListView_SelectedIndexChanged;
|
||||||
//
|
//
|
||||||
// button1
|
// button1
|
||||||
//
|
//
|
||||||
|
button1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||||
|
button1.Enabled = false;
|
||||||
button1.Location = new Point(872, 12);
|
button1.Location = new Point(872, 12);
|
||||||
button1.Name = "button1";
|
button1.Name = "button1";
|
||||||
button1.Size = new Size(188, 44);
|
button1.Size = new Size(188, 44);
|
||||||
|
@ -179,7 +182,7 @@
|
||||||
|
|
||||||
private Button downloadButton;
|
private Button downloadButton;
|
||||||
private Button reloadButton;
|
private Button reloadButton;
|
||||||
private PropertyGrid propertyGrid1;
|
private PropertyGrid propGrid;
|
||||||
private SplitContainer splitContainer1;
|
private SplitContainer splitContainer1;
|
||||||
private SplitContainer splitContainer2;
|
private SplitContainer splitContainer2;
|
||||||
private ListView tableListView;
|
private ListView tableListView;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
@ -27,6 +28,7 @@ namespace SCHALE.Toolbox.Forms
|
||||||
private readonly ExcelTableService _tableService;
|
private readonly ExcelTableService _tableService;
|
||||||
private readonly ILogger<ExcelEditorForm> _logger;
|
private readonly ILogger<ExcelEditorForm> _logger;
|
||||||
private string _excelDirectory;
|
private string _excelDirectory;
|
||||||
|
private IList? _currentExcelTable = null;
|
||||||
|
|
||||||
public ExcelEditorForm()
|
public ExcelEditorForm()
|
||||||
{
|
{
|
||||||
|
@ -60,7 +62,63 @@ namespace SCHALE.Toolbox.Forms
|
||||||
|
|
||||||
private void tableListView_SelectedIndexChanged(object sender, EventArgs e)
|
private void tableListView_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
var selectedItems = tableListView.SelectedItems;
|
||||||
|
if (selectedItems.Count < 1) return;
|
||||||
|
|
||||||
|
var type = selectedItems[0].Tag as Type;
|
||||||
|
if (type == null) return;
|
||||||
|
|
||||||
|
var fbPath = Path.Join(_excelDirectory, $"{type.Name.ToLower()}.fb");
|
||||||
|
if (!File.Exists(fbPath))
|
||||||
|
{
|
||||||
|
_logger.LogError("Decrypted flatbuffer for {Type} not found", type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var bytes = File.ReadAllBytes(fbPath);
|
||||||
|
var inst = type.GetMethod($"GetRootAs{type.Name}", BindingFlags.Static | BindingFlags.Public,
|
||||||
|
[typeof(ByteBuffer)])!.Invoke(null, [new ByteBuffer(bytes)]);
|
||||||
|
var obj = type.GetMethod("UnPack", BindingFlags.Instance | BindingFlags.Public)!.Invoke(inst, null);
|
||||||
|
var dataList =
|
||||||
|
obj!.GetType().GetProperty("DataList", BindingFlags.Instance | BindingFlags.Public)!.GetMethod!.Invoke(obj, null)!;
|
||||||
|
Type? itemType = null;
|
||||||
|
foreach (var iType in dataList!.GetType().GetInterfaces())
|
||||||
|
{
|
||||||
|
if (iType.IsGenericType && iType.GetGenericTypeDefinition() == typeof(IList<>))
|
||||||
|
{
|
||||||
|
itemType = iType.GetGenericArguments()[0];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (itemType == null)
|
||||||
|
{
|
||||||
|
_logger.LogError("Unknown type error");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_currentExcelTable = dataList as IList;
|
||||||
|
_logger.LogInformation("{Count} {TypeName} found", _currentExcelTable!.Count, itemType.Name);
|
||||||
|
|
||||||
|
itemListView.Items.Clear();
|
||||||
|
for (var i = 0; i < _currentExcelTable!.Count; i++)
|
||||||
|
{
|
||||||
|
var listItem = new ListViewItem($"{i}");
|
||||||
|
listItem.Tag = _currentExcelTable[i];
|
||||||
|
itemListView.Items.Add(listItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
itemListView.Columns[0].Width = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void itemListView_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var selectedItems = itemListView.SelectedItems;
|
||||||
|
if (selectedItems.Count < 1) return;
|
||||||
|
|
||||||
|
var obj = selectedItems[0].Tag;
|
||||||
|
if (obj == null) return;
|
||||||
|
|
||||||
|
propGrid.SelectedObject = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReloadExcels()
|
private void ReloadExcels()
|
||||||
|
|
|
@ -94,6 +94,7 @@
|
||||||
// exportButton
|
// exportButton
|
||||||
//
|
//
|
||||||
exportButton.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
exportButton.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
exportButton.Enabled = false;
|
||||||
exportButton.Location = new Point(289, 3);
|
exportButton.Location = new Point(289, 3);
|
||||||
exportButton.Name = "exportButton";
|
exportButton.Name = "exportButton";
|
||||||
exportButton.Size = new Size(280, 59);
|
exportButton.Size = new Size(280, 59);
|
||||||
|
|
Loading…
Reference in New Issue