/*
© 2017 Altavant Technologies Inc.
Web: http://www.altavant.com
*/

namespace Altavant.Fusion.Layouting.Slot
{
	using System;
	using System.Collections.Generic;
	using Fusion.Layouting.Text;
	using Fusion.Layouting.Grid;
	using Fusion.Layouting.List;
	using Fusion.Layouting.Repeater;
	using Fusion.Layouting.Data;

	public interface ICell : IElement, IBindable
	{
		ISlot Slot { get; }
		Width Width { get; set; }
		Alignment Alignment { get; set; }
		Borders Borders { get; set; }
		Spacings Spacings { get; set; }
		Paddings Paddings { get; set; }
		Background Background { get; set; }
		Foreground Foreground { get; set; }
		ICaption AddCaption();
		IText AddText();
		IImage AddImage();
		IImage AddImage(Fusion.Graphics.Image image);
		IShape AddShape();
		IShape AddShape(Fusion.Shape.Shape shape);
		IGroup AddGroup();
		IContour AddContour();
		ISelector AddSelector();
		IRule AddRule();
		IStack AddStack();
		IBand AddBand();
		IGrid AddGrid();
		ISlot AddSlot();
		IList AddList();
		IRepeater AddRepeater();
		IPlace AddPlace();
		ISite AddSite();
		ICanvas AddCanvas();
		IPlaceholder AddPlaceholder();
		void Clear();
		void Remove(IElement element);
		IElement Find(Predicate<IElement> match);
		IElement Find(Func<IElement, int, bool> match);
		List<IElement> Select(Predicate<IElement> match);
		List<IElement> Select(Func<IElement, int, bool> match);
		void Perform(Predicate<IElement> match, Action<IElement> action);
		void Perform(Func<IElement, int, bool> match, Action<IElement> action);
	}
}