diff --git a/README.md b/README.md index bd08923..fce8605 100644 --- a/README.md +++ b/README.md @@ -804,6 +804,8 @@ await this.NavigateTo(cd); ### Button Grid +#### Paging & Searching + ## Groups diff --git a/TelegramBotBase/Controls/ButtonGrid.cs b/TelegramBotBase/Controls/ButtonGrid.cs index aa6de7b..472d15d 100644 --- a/TelegramBotBase/Controls/ButtonGrid.cs +++ b/TelegramBotBase/Controls/ButtonGrid.cs @@ -188,6 +188,7 @@ namespace TelegramBotBase.Controls if (this.SearchQuery != null && this.SearchQuery != "") { + this.CurrentPageIndex = 0; this.Updated(); } @@ -480,7 +481,14 @@ namespace TelegramBotBase.Controls if (this.ButtonsForm.Count == 0) return 1; - return (int)Math.Ceiling((decimal)(this.ButtonsForm.Rows / (decimal)(MaximumRow - 3))); + var bf = this.ButtonsForm; + + if (this.EnableSearch && this.SearchQuery != null && this.SearchQuery != "") + { + bf = bf.FilterDuplicate(this.SearchQuery); + } + + return (int)Math.Ceiling((decimal)(bf.Rows / (decimal)(MaximumRow - 3))); } } diff --git a/TelegramBotBaseTest/Tests/Controls/ButtonGridForm.cs b/TelegramBotBaseTest/Tests/Controls/ButtonGridForm.cs index 82ed2cc..2158621 100644 --- a/TelegramBotBaseTest/Tests/Controls/ButtonGridForm.cs +++ b/TelegramBotBaseTest/Tests/Controls/ButtonGridForm.cs @@ -44,7 +44,7 @@ namespace TelegramBotBaseTest.Tests.Controls } - private async void Bg_ButtonClicked(object sender, ButtonClickedEventArgs e) + private async Task Bg_ButtonClicked(object sender, ButtonClickedEventArgs e) { if (e.Button == null) return; diff --git a/TelegramBotBaseTest/Tests/Controls/ButtonGridPagingForm.cs b/TelegramBotBaseTest/Tests/Controls/ButtonGridPagingForm.cs new file mode 100644 index 0000000..d7b5447 --- /dev/null +++ b/TelegramBotBaseTest/Tests/Controls/ButtonGridPagingForm.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TelegramBotBase.Args; +using TelegramBotBase.Controls; +using TelegramBotBase.Form; + +namespace TelegramBotBaseTest.Tests.Controls +{ + public class ButtonGridPagingForm : AutoCleanForm + { + + ButtonGrid m_Buttons = null; + + public ButtonGridPagingForm() + { + this.DeleteMode = TelegramBotBase.Enums.eDeleteMode.OnLeavingForm; + + this.Init += ButtonGridForm_Init; + } + + private async Task ButtonGridForm_Init(object sender, InitEventArgs e) + { + m_Buttons = new ButtonGrid(); + + m_Buttons.KeyboardType = TelegramBotBase.Enums.eKeyboardType.ReplyKeyboard; + + m_Buttons.EnablePaging = true; + m_Buttons.EnableSearch = true; + + m_Buttons.HeadLayoutButtonRow = new List() { new ButtonBase("Back", "back") }; + + var countries = CultureInfo.GetCultures(CultureTypes.SpecificCultures); + + ButtonForm bf = new ButtonForm(); + + foreach (var c in countries) + { + bf.AddButtonRow(new ButtonBase(c.EnglishName, c.EnglishName)); + } + + m_Buttons.ButtonsForm = bf; + + m_Buttons.ButtonClicked += Bg_ButtonClicked; + + this.AddControl(m_Buttons); + + + } + + private async Task Bg_ButtonClicked(object sender, ButtonClickedEventArgs e) + { + if (e.Button == null) + return; + + if (e.Button.Value == "back") + { + var start = new Menu(); + await this.NavigateTo(start); + } + else + { + + await this.Device.Send($"Button clicked with Text: {e.Button.Text} and Value {e.Button.Value}"); + } + + + } + } +} diff --git a/TelegramBotBaseTest/Tests/Menu.cs b/TelegramBotBaseTest/Tests/Menu.cs index eef19bf..f3f6de1 100644 --- a/TelegramBotBaseTest/Tests/Menu.cs +++ b/TelegramBotBaseTest/Tests/Menu.cs @@ -146,6 +146,16 @@ namespace TelegramBotBaseTest.Tests await this.NavigateTo(bg); + break; + + case "buttongridfilter": + + message.Handled = true; + + var bg2 = new Controls.ButtonGridPagingForm(); + + await this.NavigateTo(bg2); + break; } @@ -175,6 +185,8 @@ namespace TelegramBotBaseTest.Tests btn.AddButtonRow(new ButtonBase("#12 ButtonGrid", new CallbackData("a", "buttongrid").Serialize())); + btn.AddButtonRow(new ButtonBase("#13 ButtonGrid Paging & Filter", new CallbackData("a", "buttongridfilter").Serialize())); + await this.Device.Send("Choose your test:", btn); } diff --git a/images/buttongrid_pagingfilter.gif b/images/buttongrid_pagingfilter.gif new file mode 100644 index 0000000..e887288 Binary files /dev/null and b/images/buttongrid_pagingfilter.gif differ