using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using TelegramBotBase.Base; namespace TelegramBotBase.Form { public class ConfirmDialog : FormBase { public String Message { get; set; } public List Buttons { get; set; } private EventHandlerList __Events { get; set; } = new EventHandlerList(); private static object __evButtonClicked { get; } = new object(); public ConfirmDialog() { } public ConfirmDialog(String Message) { this.Message = Message; this.Buttons = new List(); } public ConfirmDialog(String Message, params ButtonBase[] Buttons) { this.Message = Message; this.Buttons = Buttons.ToList(); } /// /// Adds one Button /// /// public void AddButton(ButtonBase button) { this.Buttons.Add(button); } public override async Task Action(MessageResult message) { var call = message.GetData(); if (call == null) return; message.Handled = true; await message.ConfirmAction(); await message.DeleteMessage(); ButtonBase button = this.Buttons.FirstOrDefault(a => a.Value == call.Value); if (button == null) { return; } OnButtonClicked(new ButtonClickedEventArgs(button)); } public override async Task Render(MessageResult message) { ButtonForm btn = new ButtonForm(); var buttons = this.Buttons.Select(a => new ButtonBase(a.Text, CallbackData.Create("action", a.Value))).ToList(); btn.AddButtonRow(buttons); await this.Device.Send(this.Message, btn); } public event EventHandler ButtonClicked { add { this.__Events.AddHandler(__evButtonClicked, value); } remove { this.__Events.RemoveHandler(__evButtonClicked, value); } } public void OnButtonClicked(ButtonClickedEventArgs e) { (this.__Events[__evButtonClicked] as EventHandler)?.Invoke(this, e); } } }