Browse Source

fixed page

master
jkpete 2 months ago
parent
commit
570a28a3c5
  1. 10
      Example/SaveSystem/Script/ViewSaveSystem.cs
  2. 154
      addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTable.cs
  3. 1
      addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTableRowData.cs

10
Example/SaveSystem/Script/ViewSaveSystem.cs

@ -18,8 +18,14 @@ namespace EGFramework.Examples.Test{ @@ -18,8 +18,14 @@ namespace EGFramework.Examples.Test{
DataStudent dataStudent = new DataStudent(null, 18);
DataStudent dataStudent2 = new DataStudent("F", 20);
List<DataStudent> dataStudents = new List<DataStudent>();
dataStudents.Add(dataStudent);
dataStudents.Add(dataStudent2);
for (int stu = 0; stu < 10; stu++)
{
dataStudents.Add(new DataStudent("stu"+stu, 18));
}
for (int stu = 0; stu < 10; stu++)
{
dataStudents.Add(dataStudent2);
}
EGodotTable table = container.CreateNode<EGodotTable>("Teacher");
table.InitData<DataStudent>(dataStudents);

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

@ -4,10 +4,11 @@ using System.Reflection; @@ -4,10 +4,11 @@ using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using Godot;
namespace EGFramework.UI{
namespace EGFramework.UI
{
public interface IEGodotTable
{
}
public partial class EGodotTable : BoxContainer, IEGFramework, IEGodotTable
{
@ -19,12 +20,17 @@ namespace EGFramework.UI{ @@ -19,12 +20,17 @@ namespace EGFramework.UI{
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; }
public Color MainColor { 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>
/// The max data count for one page.
/// </summary>
@ -75,16 +81,50 @@ namespace EGFramework.UI{ @@ -75,16 +81,50 @@ namespace EGFramework.UI{
public void InitRowData(List<Dictionary<string, object>> rowDataList)
{
int dataPointer = 0;
foreach (Dictionary<string, object> row in rowDataList)
RowDataScroll = this.CreateNode<ScrollContainer>("Scroll");
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()
{
if (PageAdapter.CurrentPage <= 1)
{
EGodotTableRowData rowData = this.CreateNode<EGodotTableRowData>("row" + dataPointer);
rowData.Init(row);
rowData.OnModify.Register(data=>
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");
this.EGEditDialog(data, rowData.OnDataEdit, "Modify");
});
dataPointer++;
}
}
public void InitPageMenu()
@ -97,25 +137,30 @@ namespace EGFramework.UI{ @@ -97,25 +137,30 @@ namespace EGFramework.UI{
Label labelCount = PageContainer.CreateNode<Label>("to");
labelCount.Text = "Data count : "+PageAdapter.DataLength;
labelCount.Text = "Data count : " + PageAdapter.DataLength;
Control empty1 = PageContainer.CreateNode<Control>("empty1");
empty1.CustomMinimumSize = new Vector2(32, 0);
Button firstPage = PageContainer.CreateNode<Button>("firstPage");
firstPage.Text = "<<";
firstPage.Connect("pressed", Callable.From(ToFirstPage));
Button lastPage = PageContainer.CreateNode<Button>("lastPage");
lastPage.Text = "<";
lastPage.Connect("pressed", Callable.From(LastPage));
Label currentPage = PageContainer.CreateNode<Label>("currenLabel");
currentPage.Text = PageAdapter.CurrentPage.ToString();
Button nextPage = PageContainer.CreateNode<Button>("next");
nextPage.Text = ">";
nextPage.Connect("pressed", Callable.From(NextPage));
Button endPage = PageContainer.CreateNode<Button>("firstPage");
endPage.Text = ">>";
endPage.Connect("pressed", Callable.From(ToEndPage));
Control empty2 = PageContainer.CreateNode<Control>("empty2");
empty2.CustomMinimumSize = new Vector2(32, 0);
@ -124,17 +169,82 @@ namespace EGFramework.UI{ @@ -124,17 +169,82 @@ namespace EGFramework.UI{
labelTo.Text = "To";
SpinBox inputPage = PageContainer.CreateNode<SpinBox>("pageEdit");
inputPage.SetSize(new Vector2(120, 60));
inputPage.MinValue = 0;
inputPage.MinValue = 1;
inputPage.MaxValue = PageAdapter.MaxPage;
inputPage.Alignment = HorizontalAlignment.Center;
Label labelPage = PageContainer.CreateNode<Label>("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 EGodotTable CreateTable(this Node self, string[][] tableStr, string tableName = "Table")
@ -165,6 +275,10 @@ namespace EGFramework.UI{ @@ -165,6 +275,10 @@ namespace EGFramework.UI{
this.DataLength = dataLength;
this.PageLimit = pageLimit;
this.MaxPage = dataLength / PageLimit + 1;
if (dataLength % pageLimit == 0)
{
this.MaxPage -= 1;
}
this.CurrentPage = 1;
}
@ -176,5 +290,15 @@ namespace EGFramework.UI{ @@ -176,5 +290,15 @@ namespace EGFramework.UI{
this.CurrentPage = 1;
OnLoad.Invoke();
}
public bool IsFirstPage()
{
return this.CurrentPage == 1;
}
public bool IsLastPage()
{
return this.CurrentPage == MaxPage;
}
}
}

1
addons/EGFramework/Module/GenerateTools/Templete/Godot/UI/EGodotTableRowData.cs

@ -32,6 +32,7 @@ namespace EGFramework.UI{ @@ -32,6 +32,7 @@ namespace EGFramework.UI{
Operate.AddChild(Delete);
Modify.Connect("pressed", Callable.From(OnEdit));
Delete.Connect("pressed", Callable.From(OnDelete.Invoke));
this.CustomMinimumSize = new Vector2(0,32);
}
public void OnEdit(){
if(Data == null){

Loading…
Cancel
Save