2022-10-08 19:26:34 +03:00

121 lines
2.6 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TelegramBotBase.Base;
using TelegramBotBase.Form;
using TelegramBotBase.Localizations;
namespace TelegramBotBase.Controls.Inline;
public class TreeView : ControlBase
{
public TreeView()
{
Nodes = new List<TreeViewNode>();
Title = Default.Language["TreeView_Title"];
}
public List<TreeViewNode> Nodes { get; set; }
public TreeViewNode SelectedNode { get; set; }
public TreeViewNode VisibleNode { get; set; }
public string Title { get; set; }
private int? MessageId { get; set; }
public string MoveUpIcon { get; set; } = Default.Language["TreeView_LevelUp"];
public override async Task Action(MessageResult result, string value = null)
{
await result.ConfirmAction();
if (result.Handled)
{
return;
}
var val = result.RawData;
switch (val)
{
case "up":
case "parent":
VisibleNode = VisibleNode?.ParentNode;
result.Handled = true;
break;
default:
var n = VisibleNode != null
? VisibleNode.FindNodeByValue(val)
: Nodes.FirstOrDefault(a => a.Value == val);
if (n == null)
{
return;
}
if (n.ChildNodes.Count > 0)
{
VisibleNode = n;
}
else
{
SelectedNode = SelectedNode != n ? n : null;
}
result.Handled = true;
break;
}
}
public override async Task Render(MessageResult result)
{
var startnode = VisibleNode;
var nodes = startnode?.ChildNodes ?? Nodes;
var bf = new ButtonForm();
if (startnode != null)
{
bf.AddButtonRow(new ButtonBase(MoveUpIcon, "up"), new ButtonBase(startnode.Text, "parent"));
}
foreach (var n in nodes)
{
var s = n.Text;
if (SelectedNode == n)
{
s = "[ " + s + " ]";
}
bf.AddButtonRow(new ButtonBase(s, n.Value, n.Url));
}
if (MessageId != null)
{
var m = await Device.Edit(MessageId.Value, Title, bf);
}
else
{
var m = await Device.Send(Title, bf);
MessageId = m.MessageId;
}
}
public string GetPath()
{
return VisibleNode?.GetPath() ?? "\\";
}
}