using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using DevComponents.DotNetBar.Controls;
using DevComponents.DotNetBar.Metro;
using DevComponents.DotNetBar.Metro.Rendering;
namespace DevComponents.DotNetBar.Rendering
{
    internal abstract class TabFormPainter
    {
        public abstract void Paint(TabFormPainterArgs args);
    }
    internal class OfficeTabFormPainter : TabFormPainter, IOffice2007Painter
    {
        #region IOffice2007Painter
        private Office2007ColorTable _ColorTable = null;
        /// 
        /// Gets or sets color table used by renderer.
        /// 
        public Office2007ColorTable ColorTable
        {
            get { return _ColorTable; }
            set { _ColorTable = value; }
        }
        #endregion
        public override void Paint(TabFormPainterArgs args)
        {
            TabParentForm form = args.TabParentForm;
            Graphics g = args.Graphics;
            TabFormColorTable colorTable = GetFormColorTable();
            if (form.FormTabsControl != null && form.FormTabsControl.ColorTable != null)
                colorTable = form.FormTabsControl.ColorTable;
            Thickness borderThickness = form.BorderThickness;
            BorderColors colors = form.BorderColor;
            if (borderThickness.IsZero && colors.IsEmpty)
            {
                // Get it from table
                borderThickness = colorTable.BorderThickness;
                colors = form.IsActive ? colorTable.Active.BorderColors : colorTable.Inactive.BorderColors;
            }
            using (SolidBrush brush = new SolidBrush(colorTable.BackColor.IsEmpty ? form.BackColor : colorTable.BackColor))
                g.FillRectangle(brush, new Rectangle(0, 0, form.Width, form.Height));
            if (!borderThickness.IsZero && !colors.IsEmpty)
            {
                RectangleF br = new RectangleF(0, 0, form.Width, form.Height);
                DrawingHelpers.DrawBorder(g, br, borderThickness, colors);
            }
        }
        private TabFormColorTable GetFormColorTable()
        {
            return _ColorTable.TabForm;
        }
    }
    public class TabFormPainterArgs : EventArgs
    {
        /// 
        /// Gets or sets Graphics object group is rendered on.
        /// 
        public Graphics Graphics = null;
        /// 
        /// Gets or sets the reference to TabParentForm being rendered.
        /// 
        public TabParentForm TabParentForm = null;
        /// 
        /// Indicates whether to cancel system rendering of the item.
        /// 
        public bool Cancel = false;
        public TabFormPainterArgs(TabParentForm form, Graphics graphics)
        {
            Graphics = graphics;
            TabParentForm = form;
        }
    }
}