using System;
using System.ComponentModel;
using System.Drawing.Design;
using DevComponents.DotNetBar.SuperGrid.Primitives;
namespace DevComponents.DotNetBar.SuperGrid
{
    /// 
    /// Represents the collection of grid cells.
    /// 
    [Editor("DevComponents.SuperGrid.Design.GridCellCollectionEditor, DevComponents.SuperGrid.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=26d81176cfa2b486", typeof(UITypeEditor))]
    public class GridCellCollection : CustomCollection
    {
        #region Indexer (string)
        /// 
        /// Gets or sets item at ColumnName index
        /// 
        /// Name of Column containing the cell
        public GridCell this[string columnName]
        {
            get
            {
                GridCell cell = FindCellItem(columnName);
                if (cell != null)
                    return (Items[cell.ColumnIndex]);
                return (null);
            }
            set
            {
                GridCell cell = FindCellItem(columnName);
                if (cell == null)
                    throw new Exception("Column \"" + columnName + "\" not found.");
                Items[cell.ColumnIndex] = value;
            }
        }
        #endregion
        #region Indexer (Column)
        /// 
        /// Gets or sets item at Column index
        /// 
        /// Column containing the cell
        public GridCell this[GridColumn column]
        {
            get { return (Items[column.ColumnIndex]); }
            set { Items[column.ColumnIndex] = value; }
        }
        #endregion
        #region FindCellItem
        private GridCell FindCellItem(string columnName)
        {
            if (string.IsNullOrEmpty(columnName) == true)
                throw new Exception("Invalid Column Name.");
            foreach (GridCell cell in Items)
            {
                GridColumn col = cell.GridColumn;
                if (col == null)
                    break;
                if (columnName.Equals(col.Name) == true)
                    return (cell);
            }
            return (null);
        }
        #endregion
    }
}