using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Drawing;
namespace DevComponents.DotNetBar.Metro
{
    /// 
    /// Represents panel for Metro Tiles.
    /// 
    [ToolboxBitmap(typeof(MetroTilePanel), "Metro.MetroTilePanel.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.MetroTilePanelDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf"), System.Runtime.InteropServices.ComVisible(false)]
    public class MetroTilePanel : ItemPanel
    {
        #region Events
        #endregion
        #region Constructor
        /// 
        /// Initializes a new instance of the MetroTilePanel class.
        /// 
        public MetroTilePanel()
        {
            this.ResizeItemsToFit = false;
            this.ItemSpacing = DefaultItemSpacing;
            this.AutoScroll = true;
        }
        #endregion
        #region Implementation
        protected override void OnHandleCreated(EventArgs e)
        {
            if (!this.DesignMode)
                this.GetBaseItemContainer().AllowDrop = false;
            base.OnHandleCreated(e);
        }
        protected override void OnDragInProgressChanged()
        {
            if (!this.DragInProgress)
                AnimateNextPaintRequest = true;
            this.Invalidate();
            base.OnDragInProgressChanged();
        }
        /// 
        /// Gets or sets a value indicating whether the control enables the user to scroll to items placed outside of its visible boundaries.
        /// 
        [Browsable(true), DefaultValue(true)]
        public new virtual bool AutoScroll
        {
            get { return base.AutoScroll; }
            set { base.AutoScroll = value; }
        }
        private const int DefaultItemSpacing = 32;
        /// 
        /// Gets or sets spacing in pixels between items. Default value is 1.
        /// 
        [Browsable(true), DefaultValue(DefaultItemSpacing), Category("Layout"), Description("Indicates spacing in pixels between items.")]
        public override int ItemSpacing
        {
            get { return base.ItemSpacing; }
            set
            {
                base.ItemSpacing = value;
            }
        }
        /// 
        /// Gets or sets whether items contained by container are resized to fit the container bounds. When container is in horizontal
        /// layout mode then all items will have the same height. When container is in vertical layout mode then all items
        /// will have the same width. Default value is true.
        /// 
        [Browsable(false), DefaultValue(false), Category("Layout")]
        public override bool ResizeItemsToFit
        {
            get { return base.ResizeItemsToFit; }
            set
            {
                base.ResizeItemsToFit = value;
            }
        }
        protected override Size DefaultSize
        {
            get
            {
                return new Size(600, 400);
            }
        }
        protected override void OnMouseDragOverProcessed(int x, int y, System.Windows.Forms.DragEventArgs dragArgs)
        {
            base.OnMouseDragOverProcessed(x, y, dragArgs);
            this.Invalidate();
        }
        #endregion
    }
}