Browse Source

add table test

master
jkpete 2 months ago
parent
commit
9aa0561e75
  1. 38
      Example/SaveSystem/Script/ViewSaveSystem.cs
  2. 64
      addons/EGFramework/Module/GenerateTools/Templete/Godot/EGGodotUIGenerator.cs
  3. 66
      addons/EGFramework/Module/GenerateTools/Templete/Godot/EGodotTable.cs
  4. 50
      addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotSaveTable.cs
  5. 159
      addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs
  6. 30
      addons/EGFramework/Module/GenerateTools/Templete/Variant/EGDataStruct.cs
  7. 17
      addons/EGFramework/Module/GenerateTools/Templete/Variant/EGReadOnly.cs
  8. 33
      addons/EGFramework/Module/GenerateTools/Templete/Variant/EGVariantGenerator.cs

38
Example/SaveSystem/Script/ViewSaveSystem.cs

@ -13,38 +13,22 @@ namespace EGFramework.Examples.Test{ @@ -13,38 +13,22 @@ namespace EGFramework.Examples.Test{
public string[][] DataList2 { get; set; }
public override void _Ready()
{
DataList = new string[3][];
string[] a = { "Name", "Age" };
DataList[0] = a;
string[] b = { "Tom", "18" };
DataList[1] = b;
string[] c = { "Jerry", "20" };
DataList[2] = c;
this.GetNode<TabContainer>("TabContainer").CreateTable(DataList, "Student");
Container container = this.GetNode<TabContainer>("TabContainer");
DataStudent dataStudent = new DataStudent("S", 18);
DataStudent dataStudent2 = new DataStudent(null, 20);
DataStudent dataStudent2 = new DataStudent("F", 20);
List<DataStudent> dataStudents = new List<DataStudent>();
dataStudents.Add(dataStudent);
dataStudents.Add(dataStudent2);
EGodotTable table = this.GetNode<TabContainer>("TabContainer").CreateTable<DataStudent>(dataStudents, "Teacher");
// Button btn = this.CreateNode<Button>("Test");
// btn.Text = "Test";
// btn.Position = new Vector2(100,100);
// btn.Connect("pressed",Callable.From (() => {
// this.Alert("Test");
// }));
// EGodotEditDialog Edit = this.CreateNode<EGodotEditDialog>("Edit");
// Edit.InitDialog(new Dictionary<string, object>() {{"Name","Tom"},{"Age",18}},(data) => {
// GD.Print(data["Name"]);
// GD.Print(data["Age"]);
// });
EGodotTable table = container.CreateNode<EGodotTable>("Teacher");
table.InitData<DataStudent>(dataStudents);
EGodotTableRowData rowData = table.CreateNode<EGodotTableRowData>("RowData");
rowData.Init(new Dictionary<string, object>() { { "Name", "Tom" }, { "Age", 18 } });
EGodotRowData rowData2 = table.CreateNode<EGodotRowData>("RowData2");
rowData2.Init(new Dictionary<string, object>() { { "Name", "Z" }, { "Age", 1 } });
EGodotEditParam editParam = table.CreateNode<EGodotEditParam>("editParam");
editParam.Init(new KeyValuePair<string, object>("数量",1));
// EGodotTableRowData rowData = container.CreateNode<EGodotTableRowData>("RowData");
// rowData.Init(new Dictionary<string, object>() { { "Name", "Tom" }, { "Age", 18 } });
// EGodotRowData rowData2 = container.CreateNode<EGodotRowData>("RowData2");
// rowData2.Init(new Dictionary<string, object>() { { "Name", "Z" }, { "Age", 1 } });
// EGodotEditParam editParam = container.CreateNode<EGodotEditParam>("editParam");
// editParam.Init(new KeyValuePair<string, object>("数量",1));
}
public override void _ExitTree()

64
addons/EGFramework/Module/GenerateTools/Templete/Godot/EGGodotUIGenerator.cs

@ -1,64 +0,0 @@ @@ -1,64 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using EGFramework.UI;
using Godot;
namespace EGFramework{
public static class EGGodotTableGenerator {
public static HBoxContainer CreateRowData(this Node self,string[] titleList,string rowName = "RowData"){
HBoxContainer RowData = new HBoxContainer();
RowData.Name = rowName;
foreach(string s in titleList){
Label label = new Label();
if(s != null){
label.Name = s;
label.Text = s;
}else{
label.Name = "Null";
label.Text = "Null";
}
label.HorizontalAlignment = HorizontalAlignment.Center;
label.SizeFlagsHorizontal = Control.SizeFlags.ExpandFill;
RowData.AddChild(label);
}
self.AddChild(RowData);
return RowData;
}
public static VBoxContainer CreateTable(this Node self,string[][] tableStr,string tableName = "Table"){
VBoxContainer Table = new VBoxContainer();
Table.Name = tableName;
int dataPointer = 0;
foreach(string[] s in tableStr){
Table.CreateRowData(s,"tableRowData"+dataPointer);
dataPointer++;
}
self.AddChild(Table);
return Table;
}
public static EGodotTable CreateTable<T>(this Node self,IEnumerable<T> tableData,string tableName = "ObjectTable",int limit = 0){
EGodotTable Table = new EGodotTable();
Table.Name = tableName;
MemberInfo[] propertyNames = typeof(T).GetProperties();
MemberInfo[] fieldNames = typeof(T).GetFields();
MemberInfo[] memberInfos = propertyNames.Concat(fieldNames).ToArray();
string[] propertyName = new string[memberInfos.Length];
int dataPointer = 0;
for (int i = 0; i < memberInfos.Length; i++)
{
propertyName[i] = memberInfos[i].Name;
}
Table.CreateRowData(propertyName,"Title");
foreach (T t in tableData)
{
string[] s = t.GetType().GetProperties().Select(p => p.GetValue(t)?.ToString()).ToArray();
string[] a = t.GetType().GetFields().Select(p => p.GetValue(t)?.ToString()).ToArray();
string[] result = s.Concat(a).ToArray();
Table.CreateRowData(result, "tableRowData"+dataPointer);
dataPointer++;
}
self.AddChild(Table);
return Table;
}
}
}

66
addons/EGFramework/Module/GenerateTools/Templete/Godot/EGodotTable.cs

@ -1,66 +0,0 @@ @@ -1,66 +0,0 @@
using System.Collections.Generic;
using Godot;
namespace EGFramework.UI{
public partial class EGodotTable : VBoxContainer,IEGFramework
{
public HBoxContainer FunctionContainer { set; get; }
public HBoxContainer TitleContainer { set; get; }
public VBoxContainer RowDataContainer { set; get; }
public HBoxContainer PageContainer { set; get; }
public IEGSaveData SaveData { set; get; }
public Dictionary<string,string> TitleList { set; get; } = new Dictionary<string, string>();
private EGodotTablePageAdapter PageAdapter { set; get; }
private bool IsSearched { set; get; }
/// <summary>
/// The max data count for one page.
/// </summary>
/// <value></value>
[Export]
public int PageLimit { set; get; } = 10;
/// <summary>
/// Height mininum for RowDataContainer.
/// </summary>
/// <value></value>
[Export]
public int MinHeight { set; get; }
public void InitData<T>(IEGSaveData saveData,string key) where T: new(){
int count = saveData.GetDataCount(key);
if(PageAdapter == null){
PageAdapter = new EGodotTablePageAdapter(count,PageLimit);
}else{
PageAdapter.Reload(count,PageLimit);
}
}
public void InitReadOnlyData<T>(IEGSaveDataReadOnly saveData,string key)where T:new(){
}
}
public class EGodotTablePageAdapter{
public int DataLength { set; get; }
public int CurrentPage { set; get; }
public int MaxPage { set; get; }
public int PageLimit { set; get; }
public EasyEvent OnLoad = new EasyEvent();
public EGodotTablePageAdapter(int dataLength,int pageLimit = 10){
this.DataLength = dataLength;
this.PageLimit = pageLimit;
this.MaxPage = dataLength/PageLimit+1;
this.CurrentPage = 1;
}
public void Reload(int dataLength,int pageLimit = 10){
this.DataLength = dataLength;
this.PageLimit = pageLimit;
this.MaxPage = dataLength/PageLimit+1;
this.CurrentPage = 1;
OnLoad.Invoke();
}
}
}

50
addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotSaveTable.cs

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
using System.Collections.Generic;
using Godot;
namespace EGFramework.UI
{
public partial class EGodotSaveTable : VBoxContainer, IEGFramework
{
public HBoxContainer FunctionContainer { set; get; }
public HBoxContainer TitleContainer { set; get; }
public VBoxContainer RowDataContainer { set; get; }
public HBoxContainer PageContainer { set; get; }
public IEGSaveData SaveData { set; get; }
public Dictionary<string, string> TitleList { set; get; } = new Dictionary<string, string>();
private EGodotTablePageAdapter PageAdapter { set; get; }
private bool IsSearched { set; get; }
/// <summary>
/// The max data count for one page.
/// </summary>
/// <value></value>
[Export]
public int PageLimit { set; get; } = 10;
/// <summary>
/// Height mininum for RowDataContainer.
/// </summary>
/// <value></value>
[Export]
public int MinHeight { set; get; }
public void InitData<T>(IEGSaveData saveData, string key) where T : new()
{
int count = saveData.GetDataCount(key);
if (PageAdapter == null)
{
PageAdapter = new EGodotTablePageAdapter(count, PageLimit);
}
else
{
PageAdapter.Reload(count, PageLimit);
}
}
public void InitReadOnlyData<T>(IEGSaveDataReadOnly saveData, string key) where T : new()
{
}
}
}

159
addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs

@ -0,0 +1,159 @@ @@ -0,0 +1,159 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Godot;
namespace EGFramework.UI{
public interface IEGodotTable
{
}
public partial class EGodotTable : BoxContainer, IEGFramework, IEGodotTable
{
public BoxContainer FunctionContainer { set; get; }
public EGodotTableRowData Title { set; get; }
public BoxContainer RowDataContainer { set; get; }
public ScrollContainer RowDataScroll { set; get; }
public BoxContainer PageContainer { set; get; }
public IEGSaveData SaveData { set; get; }
public Dictionary<string, string> TitleList { set; get; } = new Dictionary<string, string>();
private EGodotTablePageAdapter PageAdapter { set; get; }
private bool IsSearched { set; get; }
/// <summary>
/// The max data count for one page.
/// </summary>
/// <value></value>
[Export]
public int PageLimit { set; get; } = 10;
public void InitData<T>(IEnumerable<T> tableData) where T : new()
{
int count = tableData.Count();
if (PageAdapter == null)
{
PageAdapter = new EGodotTablePageAdapter(count, PageLimit);
}
else
{
PageAdapter.Reload(count, PageLimit);
}
this.Vertical = true;
InitFunctionMenu();
InitTitle(typeof(T).EGenerateDictiontaryByType());
InitRowData(tableData.EGenerateDictionaryByGroup());
InitPageMenu();
}
public virtual void InitFunctionMenu()
{
if (FunctionContainer == null)
{
FunctionContainer = this.CreateNode<BoxContainer>("FunctionContainer");
FunctionContainer.Vertical = false;
}
}
public void InitTitle(Dictionary<string, object> titleData)
{
if (Title == null)
{
Title = this.CreateNode<EGodotTableRowData>("TitleContainer");
Title.Init(titleData);
}
else
{
Title.RefreshData(titleData);
}
}
public void InitRowData(List<Dictionary<string, object>> rowDataList)
{
int dataPointer = 0;
foreach (Dictionary<string, object> row in rowDataList)
{
EGodotTableRowData rowData = this.CreateNode<EGodotTableRowData>("row" + dataPointer);
rowData.Init(row);
dataPointer++;
}
}
public void InitPageMenu()
{
if (PageContainer == null)
{
PageContainer = this.CreateNode<BoxContainer>("PageContainer");
PageContainer.Vertical = false;
}
}
}
public static class EGGodotTableGenerator
{
// public static EGodotTable CreateTable(this Node self, string[][] tableStr, string tableName = "Table")
// {
// VBoxContainer Table = new VBoxContainer();
// Table.Name = tableName;
// int dataPointer = 0;
// foreach (string[] s in tableStr)
// {
// Table.CreateRowData(s, "tableRowData" + dataPointer);
// dataPointer++;
// }
// self.AddChild(Table);
// return Table;
// }
// public static EGodotTable CreateTable<T>(this Node self, IEnumerable<T> tableData, string tableName = "ObjectTable", int limit = 0)
// {
// EGodotTable Table = new EGodotTable();
// Table.Name = tableName;
// MemberInfo[] propertyNames = typeof(T).GetProperties();
// MemberInfo[] fieldNames = typeof(T).GetFields();
// MemberInfo[] memberInfos = propertyNames.Concat(fieldNames).ToArray();
// string[] propertyName = new string[memberInfos.Length];
// int dataPointer = 0;
// for (int i = 0; i < memberInfos.Length; i++)
// {
// propertyName[i] = memberInfos[i].Name;
// }
// Table.CreateRowData(propertyName, "Title");
// foreach (T t in tableData)
// {
// string[] s = t.GetType().GetProperties().Select(p => p.GetValue(t)?.ToString()).ToArray();
// string[] a = t.GetType().GetFields().Select(p => p.GetValue(t)?.ToString()).ToArray();
// string[] result = s.Concat(a).ToArray();
// Table.CreateRowData(result, "tableRowData" + dataPointer);
// dataPointer++;
// }
// self.AddChild(Table);
// return Table;
// }
}
public class EGodotTablePageAdapter
{
public int DataLength { set; get; }
public int CurrentPage { set; get; }
public int MaxPage { set; get; }
public int PageLimit { set; get; }
public EasyEvent OnLoad = new EasyEvent();
public EGodotTablePageAdapter(int dataLength, int pageLimit = 10)
{
this.DataLength = dataLength;
this.PageLimit = pageLimit;
this.MaxPage = dataLength / PageLimit + 1;
this.CurrentPage = 1;
}
public void Reload(int dataLength, int pageLimit = 10)
{
this.DataLength = dataLength;
this.PageLimit = pageLimit;
this.MaxPage = dataLength / PageLimit + 1;
this.CurrentPage = 1;
OnLoad.Invoke();
}
}
}

30
addons/EGFramework/Module/GenerateTools/Templete/Variant/EGDataStruct.cs

@ -1,22 +1,25 @@ @@ -1,22 +1,25 @@
using System.Collections.Generic;
namespace EGFramework{
public struct EGSelectParam{
namespace EGFramework
{
public struct EGSelectParam
{
public int SelectID { set; get; }
public Dictionary<int,string> SelectList { set; get; }
public EGSelectParam(int selectID, Dictionary<int,string> selectList)
public Dictionary<int, string> SelectList { set; get; }
public EGSelectParam(int selectID, Dictionary<int, string> selectList)
{
SelectID = selectID;
SelectList = selectList;
}
}
public struct EGRangeParam{
public struct EGRangeParam
{
public double Min { set; get; }
public double Max { set; get; }
public double Step { set; get; }
public double Value { set; get; }
public EGRangeParam(double min, double max, double step,double value)
public EGRangeParam(double min, double max, double step, double value)
{
Min = min;
Max = max;
@ -24,4 +27,19 @@ namespace EGFramework{ @@ -24,4 +27,19 @@ namespace EGFramework{
Value = value;
}
}
public interface IEGReadOnlyString{
public string GetString();
}
public struct EGReadOnlyString : IEGReadOnlyString{
public string Value { get; private set; }
public EGReadOnlyString(string value)
{
Value = value;
}
public string GetString()
{
return Value;
}
}
}

17
addons/EGFramework/Module/GenerateTools/Templete/Variant/EGReadOnly.cs

@ -1,17 +0,0 @@ @@ -1,17 +0,0 @@
namespace EGFramework{
public interface IEGReadOnlyString{
public string GetString();
}
public struct EGReadOnlyString : IEGReadOnlyString{
public string Value { get; private set; }
public EGReadOnlyString(string value)
{
Value = value;
}
public string GetString()
{
return Value;
}
}
}

33
addons/EGFramework/Module/GenerateTools/Templete/Variant/EGVariantGenerator.cs

@ -1,22 +1,39 @@ @@ -1,22 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace EGFramework{
public static class EGenerateVariant{
public static Dictionary<string,object> EGenerateDictiontaryByObject<T>(this T self){
public static Dictionary<string,object> EGenerateDictiontaryByType(this Type self){
PropertyInfo[] propertyNames = self.GetProperties();
FieldInfo[] fieldNames = self.GetFields();
Dictionary<string,object> result = new Dictionary<string, object>();
foreach(PropertyInfo pName in propertyNames){
result.Add(pName.Name,pName.Name);
}
foreach(FieldInfo fName in fieldNames){
result.Add(fName.Name,fName.Name);
}
return result;
}
public static Dictionary<string, object> EGenerateDictiontaryByObject<T>(this T self)
{
PropertyInfo[] propertyNames = typeof(T).GetProperties();
FieldInfo[] fieldNames = typeof(T).GetFields();
// object[] s = propertyNames.Select(p => p.GetValue(self)).ToArray();
// object[] a = fieldNames.Select(p => p.GetValue(self)).ToArray();
Dictionary<string,object> result = new Dictionary<string, object>();
foreach(PropertyInfo pName in propertyNames){
Dictionary<string, object> result = new Dictionary<string, object>();
foreach (PropertyInfo pName in propertyNames)
{
object p = pName.GetValue(self);
result.Add(pName.Name,p);
result.Add(pName.Name, p);
}
foreach(FieldInfo fName in fieldNames){
foreach (FieldInfo fName in fieldNames)
{
object p = fName.GetValue(self);
result.Add(fName.Name,p);
result.Add(fName.Name, p);
}
return result;
}
@ -28,11 +45,11 @@ namespace EGFramework{ @@ -28,11 +45,11 @@ namespace EGFramework{
foreach(T member in self){
Dictionary<string,object> mResult = new Dictionary<string, object>();
foreach(PropertyInfo pName in propertyNames){
object p = pName.GetValue(self);
object p = pName.GetValue(member);
mResult.Add(pName.Name,p);
}
foreach(FieldInfo fName in fieldNames){
object p = fName.GetValue(self);
object p = fName.GetValue(member);
mResult.Add(fName.Name,p);
}
result.Add(mResult);

Loading…
Cancel
Save