- adding OpenModal/CloseModal features to leave a form open and "just" show a prompt and get back

- added new "ModalDialog" class to present modal forms
- updating examples for prompt dialog to use the modal feature
This commit is contained in:
FlorianDahn 2019-10-11 22:37:54 +02:00
parent 3bea2783b1
commit 9cbde4830e
5 changed files with 77 additions and 7 deletions

View File

@ -297,6 +297,53 @@ namespace TelegramBotBase.Form
await newForm.OnOpened(new EventArgs());
}
/// <summary>
/// Opens this form modal, but don't closes the original ones
/// </summary>
/// <param name="newForm"></param>
/// <returns></returns>
public async Task OpenModal(ModalDialog newForm, params object[] args)
{
DeviceSession ds = this.Device;
if (ds == null)
return;
var parentForm = this;
ds.FormSwitched = true;
ds.PreviousForm = ds.ActiveForm;
ds.ActiveForm = newForm;
newForm.Client = parentForm.Client;
newForm.Device = ds;
newForm.Closed += async (s, en) =>
{
await CloseModal(newForm, parentForm);
};
await newForm.OnInit(new InitEventArgs(args));
await newForm.OnOpened(new EventArgs());
}
public async Task CloseModal(ModalDialog modalForm, FormBase oldForm)
{
DeviceSession ds = this.Device;
if (ds == null)
return;
if (modalForm == null)
throw new Exception("No modal form");
ds.FormSwitched = true;
ds.PreviousForm = ds.ActiveForm;
ds.ActiveForm = oldForm;
}
/// <summary>
/// Adds a control to the formular and sets its ID and Device.
/// </summary>

View File

@ -8,7 +8,7 @@ using TelegramBotBase.Base;
namespace TelegramBotBase.Form
{
public class ConfirmDialog : FormBase
public class ConfirmDialog : ModalDialog
{
public String Message { get; set; }

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace TelegramBotBase.Form
{
public class ModalDialog : FormBase
{
/// <summary>
/// This is a modal only function and does everything to close this form.
/// </summary>
public async Task CloseForm()
{
await this.CloseControls();
await this.OnClosed(new EventArgs());
}
}
}

View File

@ -8,7 +8,7 @@ using TelegramBotBase.Base;
namespace TelegramBotBase.Form
{
public class PromptDialog : FormBase
public class PromptDialog : ModalDialog
{
public String Message { get; set; }
@ -53,6 +53,8 @@ namespace TelegramBotBase.Form
OnCompleted(new EventArgs());
await this.CloseForm();
}

View File

@ -31,7 +31,7 @@ namespace TelegramBaseTest.Tests
{
await this.Device.Send("Ciao from Form 2");
}
@ -84,12 +84,9 @@ namespace TelegramBaseTest.Tests
pd.Completed += async (s, en) =>
{
await this.Device.Send("Hello " + pd.Value);
var tf = new TestForm2();
await pd.NavigateTo(tf);
};
await this.NavigateTo(pd);
await this.OpenModal(pd);
}