using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Windows;
using InABox.Core;
namespace InABox.DynamicGrid;
public enum PageType
{
Editor,
Other
}
public interface IDynamicEditorPage
{
DynamicEditorGrid EditorGrid { get; set; }
PageType PageType { get; }
bool Ready { get; set; }
///
/// Is this page visible?
///
///
/// Based on security tokens and the likes.
///
bool Visible { get; }
bool ReadOnly { get; set; }
int Order { get; set; }
void Load(object item, Func? PageDataHandler);
///
/// Called when the "OK" button is clicked on an editor, and before the item is saved.
///
///
void BeforeSave(object item);
///
/// Called when the "OK" button is clicked on an editor, and after the item is saved.
///
///
/// Generally used to save any child entities that need to be saved, since now the parent has a valid .
///
///
void AfterSave(object item);
event EventHandler OnChanged;
void DoChanged();
void Cancel();
Size MinimumSize();
string Caption();
}
public class DynamicEditorPages : List
{
public DynamicEditorPages() : base()
{
}
public DynamicEditorPages(IEnumerable pages) : this()
{
foreach (var page in pages)
Add(page);
}
public bool TryGetPage([NotNullWhen(true)] out T? page)
where T : IDynamicEditorPage
{
page = this.OfType().FirstOrDefault();
return page is not null;
}
}