|
|
@ -4,7 +4,8 @@ using System.Reflection; |
|
|
|
using System.Security.Cryptography.X509Certificates; |
|
|
|
using System.Security.Cryptography.X509Certificates; |
|
|
|
using Godot; |
|
|
|
using Godot; |
|
|
|
|
|
|
|
|
|
|
|
namespace EGFramework.UI{ |
|
|
|
namespace EGFramework.UI |
|
|
|
|
|
|
|
{ |
|
|
|
public interface IEGodotTable |
|
|
|
public interface IEGodotTable |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
@ -19,12 +20,17 @@ namespace EGFramework.UI{ |
|
|
|
|
|
|
|
|
|
|
|
public IEGSaveData SaveData { set; get; } |
|
|
|
public IEGSaveData SaveData { set; get; } |
|
|
|
public Dictionary<string, string> TitleList { set; get; } = new Dictionary<string, string>(); |
|
|
|
public Dictionary<string, string> TitleList { set; get; } = new Dictionary<string, string>(); |
|
|
|
private EGodotTablePageAdapter PageAdapter { set; get; } |
|
|
|
|
|
|
|
private bool IsSearched { set; get; } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Color MainColor { set; get; } = new Color(); |
|
|
|
public Color MainColor { set; get; } = new Color(); |
|
|
|
public Color MinorColor { set; get; } = new Color(); |
|
|
|
public Color MinorColor { set; get; } = new Color(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private EGodotTablePageAdapter PageAdapter { set; get; } |
|
|
|
|
|
|
|
private bool IsSearched { set; get; } |
|
|
|
|
|
|
|
private EasyEvent OnPageChanged { set; get; } = new EasyEvent(); |
|
|
|
|
|
|
|
private IUnRegister PageChangedRealease { set; get; } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<Dictionary<string, object>> TableData { set; get; } |
|
|
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// <summary> |
|
|
|
/// The max data count for one page. |
|
|
|
/// The max data count for one page. |
|
|
|
/// </summary> |
|
|
|
/// </summary> |
|
|
@ -75,16 +81,50 @@ namespace EGFramework.UI{ |
|
|
|
|
|
|
|
|
|
|
|
public void InitRowData(List<Dictionary<string, object>> rowDataList) |
|
|
|
public void InitRowData(List<Dictionary<string, object>> rowDataList) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int dataPointer = 0; |
|
|
|
RowDataScroll = this.CreateNode<ScrollContainer>("Scroll"); |
|
|
|
foreach (Dictionary<string, object> row in rowDataList) |
|
|
|
RowDataScroll.SizeFlagsVertical = SizeFlags.ExpandFill; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RowDataContainer = RowDataScroll.CreateNode<BoxContainer>("RowData"); |
|
|
|
|
|
|
|
RowDataContainer.SizeFlagsHorizontal = SizeFlags.ExpandFill; |
|
|
|
|
|
|
|
RowDataContainer.Vertical = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.TableData = rowDataList; |
|
|
|
|
|
|
|
ToFirstPage(); |
|
|
|
|
|
|
|
// int dataPointer = 0; |
|
|
|
|
|
|
|
// foreach (Dictionary<string, object> row in rowDataList) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// EGodotTableRowData rowData = RowDataContainer.CreateNode<EGodotTableRowData>("row" + dataPointer); |
|
|
|
|
|
|
|
// rowData.Init(row); |
|
|
|
|
|
|
|
// rowData.OnModify.Register(data => |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// this.EGEditDialog(data, rowData.OnDataEdit, "Modify"); |
|
|
|
|
|
|
|
// }); |
|
|
|
|
|
|
|
// dataPointer++; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
InitPageData(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void InitPageData() |
|
|
|
{ |
|
|
|
{ |
|
|
|
EGodotTableRowData rowData = this.CreateNode<EGodotTableRowData>("row" + dataPointer); |
|
|
|
if (PageAdapter.CurrentPage <= 1) |
|
|
|
rowData.Init(row); |
|
|
|
|
|
|
|
rowData.OnModify.Register(data=> |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
this.EGEditDialog(data,rowData.OnDataEdit,"Modify"); |
|
|
|
PageAdapter.CurrentPage = 1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
int dataPointer = (PageAdapter.CurrentPage - 1) * PageAdapter.PageLimit; |
|
|
|
|
|
|
|
int dataEndPointer = dataPointer + PageAdapter.PageLimit; |
|
|
|
|
|
|
|
if (dataEndPointer >= PageAdapter.DataLength) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
dataEndPointer = PageAdapter.DataLength; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int dataId = dataPointer; dataId < dataEndPointer; dataId++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
EGodotTableRowData rowData = RowDataContainer.CreateNode<EGodotTableRowData>("row" + dataPointer); |
|
|
|
|
|
|
|
rowData.Init(TableData[dataId]); |
|
|
|
|
|
|
|
rowData.OnModify.Register(data => |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.EGEditDialog(data, rowData.OnDataEdit, "Modify"); |
|
|
|
}); |
|
|
|
}); |
|
|
|
dataPointer++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
public void InitPageMenu() |
|
|
|
public void InitPageMenu() |
|
|
@ -97,25 +137,30 @@ namespace EGFramework.UI{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Label labelCount = PageContainer.CreateNode<Label>("to"); |
|
|
|
Label labelCount = PageContainer.CreateNode<Label>("to"); |
|
|
|
labelCount.Text = "Data count : "+PageAdapter.DataLength; |
|
|
|
labelCount.Text = "Data count : " + PageAdapter.DataLength; |
|
|
|
|
|
|
|
|
|
|
|
Control empty1 = PageContainer.CreateNode<Control>("empty1"); |
|
|
|
Control empty1 = PageContainer.CreateNode<Control>("empty1"); |
|
|
|
empty1.CustomMinimumSize = new Vector2(32, 0); |
|
|
|
empty1.CustomMinimumSize = new Vector2(32, 0); |
|
|
|
|
|
|
|
|
|
|
|
Button firstPage = PageContainer.CreateNode<Button>("firstPage"); |
|
|
|
Button firstPage = PageContainer.CreateNode<Button>("firstPage"); |
|
|
|
firstPage.Text = "<<"; |
|
|
|
firstPage.Text = "<<"; |
|
|
|
|
|
|
|
firstPage.Connect("pressed", Callable.From(ToFirstPage)); |
|
|
|
|
|
|
|
|
|
|
|
Button lastPage = PageContainer.CreateNode<Button>("lastPage"); |
|
|
|
Button lastPage = PageContainer.CreateNode<Button>("lastPage"); |
|
|
|
lastPage.Text = "<"; |
|
|
|
lastPage.Text = "<"; |
|
|
|
|
|
|
|
lastPage.Connect("pressed", Callable.From(LastPage)); |
|
|
|
|
|
|
|
|
|
|
|
Label currentPage = PageContainer.CreateNode<Label>("currenLabel"); |
|
|
|
Label currentPage = PageContainer.CreateNode<Label>("currenLabel"); |
|
|
|
currentPage.Text = PageAdapter.CurrentPage.ToString(); |
|
|
|
currentPage.Text = PageAdapter.CurrentPage.ToString(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Button nextPage = PageContainer.CreateNode<Button>("next"); |
|
|
|
Button nextPage = PageContainer.CreateNode<Button>("next"); |
|
|
|
nextPage.Text = ">"; |
|
|
|
nextPage.Text = ">"; |
|
|
|
|
|
|
|
nextPage.Connect("pressed", Callable.From(NextPage)); |
|
|
|
|
|
|
|
|
|
|
|
Button endPage = PageContainer.CreateNode<Button>("firstPage"); |
|
|
|
Button endPage = PageContainer.CreateNode<Button>("firstPage"); |
|
|
|
endPage.Text = ">>"; |
|
|
|
endPage.Text = ">>"; |
|
|
|
|
|
|
|
endPage.Connect("pressed", Callable.From(ToEndPage)); |
|
|
|
|
|
|
|
|
|
|
|
Control empty2 = PageContainer.CreateNode<Control>("empty2"); |
|
|
|
Control empty2 = PageContainer.CreateNode<Control>("empty2"); |
|
|
|
empty2.CustomMinimumSize = new Vector2(32, 0); |
|
|
|
empty2.CustomMinimumSize = new Vector2(32, 0); |
|
|
@ -124,15 +169,80 @@ namespace EGFramework.UI{ |
|
|
|
labelTo.Text = "To"; |
|
|
|
labelTo.Text = "To"; |
|
|
|
SpinBox inputPage = PageContainer.CreateNode<SpinBox>("pageEdit"); |
|
|
|
SpinBox inputPage = PageContainer.CreateNode<SpinBox>("pageEdit"); |
|
|
|
inputPage.SetSize(new Vector2(120, 60)); |
|
|
|
inputPage.SetSize(new Vector2(120, 60)); |
|
|
|
inputPage.MinValue = 0; |
|
|
|
inputPage.MinValue = 1; |
|
|
|
inputPage.MaxValue = PageAdapter.MaxPage; |
|
|
|
inputPage.MaxValue = PageAdapter.MaxPage; |
|
|
|
inputPage.Alignment = HorizontalAlignment.Center; |
|
|
|
inputPage.Alignment = HorizontalAlignment.Center; |
|
|
|
Label labelPage = PageContainer.CreateNode<Label>("page"); |
|
|
|
Label labelPage = PageContainer.CreateNode<Label>("page"); |
|
|
|
labelPage.Text = "page"; |
|
|
|
labelPage.Text = "page"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PageChangedRealease = this.OnPageChanged.Register(() => |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
labelCount.Text = "Data count : " + PageAdapter.DataLength + " Page : " + PageAdapter.CurrentPage; |
|
|
|
|
|
|
|
currentPage.Text = PageAdapter.CurrentPage.ToString(); |
|
|
|
|
|
|
|
if (PageAdapter.IsFirstPage()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
firstPage.Disabled = true; |
|
|
|
|
|
|
|
lastPage.Disabled = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
firstPage.Disabled = false; |
|
|
|
|
|
|
|
lastPage.Disabled = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (PageAdapter.IsLastPage()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
endPage.Disabled = true; |
|
|
|
|
|
|
|
nextPage.Disabled = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
endPage.Disabled = false; |
|
|
|
|
|
|
|
nextPage.Disabled = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
InitPageData(); |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void ToFirstPage() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.PageAdapter.CurrentPage = 1; |
|
|
|
|
|
|
|
OnPageChanged.Invoke(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public void ToEndPage() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.PageAdapter.CurrentPage = this.PageAdapter.MaxPage; |
|
|
|
|
|
|
|
OnPageChanged.Invoke(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public void LastPage() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (this.PageAdapter.CurrentPage > 1) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.PageAdapter.CurrentPage--; |
|
|
|
|
|
|
|
OnPageChanged.Invoke(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public void NextPage() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (this.PageAdapter.CurrentPage < this.PageAdapter.MaxPage) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.PageAdapter.CurrentPage++; |
|
|
|
|
|
|
|
OnPageChanged.Invoke(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public void ToPage(int pageId) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (pageId > 1 && this.PageAdapter.CurrentPage < pageId) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.PageAdapter.CurrentPage = pageId; |
|
|
|
|
|
|
|
OnPageChanged.Invoke(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public override void _ExitTree() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.PageChangedRealease.UnRegister(); |
|
|
|
|
|
|
|
base._ExitTree(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static class EGGodotTableGenerator |
|
|
|
public static class EGGodotTableGenerator |
|
|
@ -165,6 +275,10 @@ namespace EGFramework.UI{ |
|
|
|
this.DataLength = dataLength; |
|
|
|
this.DataLength = dataLength; |
|
|
|
this.PageLimit = pageLimit; |
|
|
|
this.PageLimit = pageLimit; |
|
|
|
this.MaxPage = dataLength / PageLimit + 1; |
|
|
|
this.MaxPage = dataLength / PageLimit + 1; |
|
|
|
|
|
|
|
if (dataLength % pageLimit == 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.MaxPage -= 1; |
|
|
|
|
|
|
|
} |
|
|
|
this.CurrentPage = 1; |
|
|
|
this.CurrentPage = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -176,5 +290,15 @@ namespace EGFramework.UI{ |
|
|
|
this.CurrentPage = 1; |
|
|
|
this.CurrentPage = 1; |
|
|
|
OnLoad.Invoke(); |
|
|
|
OnLoad.Invoke(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public bool IsFirstPage() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return this.CurrentPage == 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public bool IsLastPage() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return this.CurrentPage == MaxPage; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |