protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.SmoothingMode = SmoothingMode.AntiAlias;
            Rectangle rc = ClientRectangle;

            //Fill the entire client with the border color brush
            RoundRectPath path = new RoundRectPath(rc, mRounding, mRounding);
            Color grad = Color.FromArgb((mBorderColor.R + 100) <= 255 ? mBorderColor.R + 100 : 255, (mBorderColor.G + 100) <= 255 ? mBorderColor.G + 100 : 255, (mBorderColor.B + 100) <= 255 ? mBorderColor.B + 100 : 255);
            using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(rc.X, rc.Y, rc.Width, rc.Height), grad, mBorderColor, LinearGradientMode.ForwardDiagonal)) {
                b.WrapMode = WrapMode.TileFlipX;
                g.FillPath(b, path);
            }

            //Deflate the rect and now draw the button
            rc.Inflate(-1, -1);
            path.Dispose();
            path = new RoundRectPath(rc, mRounding, mRounding);
            grad = Color.FromArgb((mBackColor.R + 150) <= 255 ? mBackColor.R + 100 : 255, (mBackColor.G + 150) <= 255 ? mBackColor.G + 150 : 255, (mBackColor.B + 150) <= 255 ? mBackColor.B + 150 : 255);
            using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(rc.X, rc.Y - (rc.Height / 2), rc.Width, rc.Height + (rc.Height / 2)), grad, mBackColor, LinearGradientMode.Vertical)) {
                b.WrapMode = WrapMode.TileFlipX;
                g.FillPath(b, path);
            }
            path.Dispose();
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.SmoothingMode = SmoothingMode.AntiAlias;
            Rectangle rc = ClientRectangle;

            //Fill the entire client with the border color brush
            RoundRectPath path = new RoundRectPath(rc, mRounding, mRounding);
            Color grad = Color.FromArgb((mBorderColor.R + 100) <= 255 ? mBorderColor.R + 100 : 255, (mBorderColor.G + 100) <= 255 ? mBorderColor.G + 100 : 255, (mBorderColor.B + 100) <= 255 ? mBorderColor.B + 100 : 255);
            using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(rc.X, rc.Y, rc.Width, rc.Height), grad, mBorderColor, LinearGradientMode.ForwardDiagonal)) {
                b.WrapMode = WrapMode.TileFlipX;
                g.FillPath(b, path);
            }

            Color backColor = mBackColor;
            Color foreColor = ForeColor;
            if (!Enabled) {
                backColor = Color.FromArgb(0xbb,0xbb,0xbb);
                foreColor = Color.Gray;
            }

            //Deflate the rect and now draw the button
            rc.Inflate(-1, -1);
            path.Dispose();
            path = new RoundRectPath(rc, mRounding, mRounding);
            if (this.Capture) {
                using (Brush b = new SolidBrush(backColor)) {
                    g.FillPath(b, path);
                }
            } else {
                grad = Color.FromArgb((backColor.R + 100) <= 255 ? backColor.R + 100 : 255, (backColor.G + 100) <= 255 ? backColor.G + 100 : 255, (backColor.B + 100) <= 255 ? backColor.B + 100 : 255);
                using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(rc.X, rc.Y - (rc.Height / 2), rc.Width, rc.Height + (rc.Height / 2)), grad, backColor, LinearGradientMode.Vertical)) {
                    b.WrapMode = WrapMode.TileFlipX;
                    g.FillPath(b, path);
                }
            }

            //Draw the text
            using (Brush b = new SolidBrush(foreColor)) {
                g.DrawString(Text, Font, b, rc, mFormat);
            }
            path.Dispose();
        }
 protected virtual void DrawItem(ListItemPaintArgs args)
 {
     Graphics g = args.Graphics;
     Rectangle rcItem = args.ItemRectangle;
     RoundRectPath path = new RoundRectPath(rcItem, mRounding, mRounding);
     using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(rcItem.X, rcItem.Y - (rcItem.Height / 2), rcItem.Width, rcItem.Height + (rcItem.Height / 2)), Color.White, Color.LightGray, LinearGradientMode.Vertical)) {
         b.WrapMode = WrapMode.TileFlipX;
         g.FillPath(b, path);
     }
     using (Pen p = new Pen(mBorderColor, 1)) {
         g.DrawPath(p, path);
     }
     using (Brush b = new SolidBrush(Color.Black)) {
         g.DrawString(args.Item.Text, Font, b, args.TextRectangle, mFormat);
     }
     if (args.Item.Icon != null) {
         g.DrawIcon(args.Item.Icon, args.IconRectangle);
     }
     path.Dispose();
 }
        protected override void OnPaint(PaintEventArgs e)
        {
            Rectangle rc = ClientRectangle;

            Graphics g = e.Graphics;

            g.SmoothingMode = SmoothingMode.AntiAlias;
            Color backColor;
            Color borderColor;
            Color foreColor;
            backColor = mBackColor;
            borderColor = mBorderColor;
            foreColor = ForeColor;
            Brush backBrush = new SolidBrush(backColor);
            Pen borderPen = new Pen(borderColor);
            Brush foreBrush = new SolidBrush(foreColor);

            switch (mIndicatorShape) {
                case IndicatorShape.Rectangle:
                    e.Graphics.FillRectangle(foreBrush, rc);
                    e.Graphics.DrawRectangle(borderPen, rc);
                    break;
                case IndicatorShape.RoundedRectangle:
                    e.Graphics.FillRectangle(backBrush, rc);
                    RoundRectPath path = new RoundRectPath(rc, mRounding, mRounding);
                    e.Graphics.FillPath(foreBrush, path);
                    e.Graphics.DrawPath(borderPen, path);
                    path.Dispose();

                    break;
                case IndicatorShape.Round:
                    e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(0, backColor.R,backColor.G,backColor.B)), rc);
                    rc = new Rectangle(rc.Left + 1, rc.Top + 1, rc.Width - 2, rc.Height - 2);
                    e.Graphics.FillEllipse(foreBrush, rc);
                    e.Graphics.DrawEllipse(borderPen, rc);
                    break;
            }

            g.DrawString(Text,Font, Brushes.Black,ClientRectangle,mFormat);
            backBrush.Dispose();
            borderPen.Dispose();
            foreBrush.Dispose();
        }
        protected override void DrawItem(ListItemPaintArgs args)
        {
            Graphics g = args.Graphics;
            Rectangle rcItem = args.ItemRectangle;
            RoundRectPath path = new RoundRectPath(rcItem, mRounding, mRounding);
            ProcessListItem item = args.Item as ProcessListItem;

            using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(rcItem.X, rcItem.Y - (rcItem.Height / 2), rcItem.Width, rcItem.Height + (rcItem.Height / 2)), Color.White, item.BackColor, LinearGradientMode.Vertical)) {
                b.WrapMode = WrapMode.TileFlipX;
                g.FillPath(b, path);
            }
            if (item.Selected) {
                using (Pen p = new Pen(mBorderColor, 2)) {
                    g.DrawPath(p, path);
                }
            } else {
                using (Pen p = new Pen(mBorderColor, 1)) {
                    g.DrawPath(p, path);
                }
            }
            using (Brush b = new SolidBrush(item.ForeColor)) {
                g.DrawString(args.Item.Text, Font, b, args.TextRectangle, mFormat);
            }

            if (item.Icon != null && item.Status != ProcessStatusType.New) {
                g.DrawIcon(item.Icon, args.IconRectangle);
            }
            path.Dispose();
        }
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            base.OnPaint(e);
            StringFormat format = new StringFormat();
            format.LineAlignment = StringAlignment.Center;

            Graphics g = e.Graphics;
            //Deflat rect for body
            Rectangle rcClient = ClientRectangle;
            rcClient.Width -= 3;
            rcClient.Height -= 3;
            rcClient.Offset(1, 1);

            if (g.Clip != null) g.Clip.Dispose();
            g.Clip = new Region(rcClient);

            g.SmoothingMode = SmoothingMode.AntiAlias;

            if (mHeaderFont == null) {
                mHeaderFont = new Font(Font, FontStyle.Bold);
            }

            Rectangle rcHeader = new Rectangle(rcClient.X, rcClient.Y, rcClient.Width, mHeaderFont.Height + 10);
            Rectangle rcText = new Rectangle(0, 0, 1, rcHeader.Height);

            //Draw header background
            RoundRectPath path = new RoundRectPath(rcHeader, mRounding, mRounding);
            Color grad = Color.FromArgb((Color.LightGray.R + 150) <= 255 ? Color.LightGray.R + 100 : 255, (Color.LightGray.G + 150) <= 255 ? Color.LightGray.G + 150 : 255, (Color.LightGray.B + 150) <= 255 ? Color.LightGray.B + 150 : 255);
            using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(rcHeader.X, rcHeader.Y - (rcHeader.Height / 2), rcHeader.Width, rcHeader.Height + (rcHeader.Height / 2)), grad, Color.LightGray, LinearGradientMode.Vertical)) {
                b.WrapMode = WrapMode.TileFlipX;
                g.FillPath(b, path);
            }

            using (Pen p = new Pen(Color.DarkGray, 1)) {
                //g.DrawLine(p, new Point(rcHeader.Left, rcHeader.Bottom), new Point(rcHeader.Right, rcHeader.Bottom));
                g.DrawPath(p, path);
            }
            path.Dispose();

            //Draw header text
            rcText = rcHeader;
            foreach (GridColumn col in mColumns) {
                rcText.Width = col.Width;
                format.Alignment = col.Alignment;
                g.DrawString(col.HeaderText, mHeaderFont, Brushes.Black, rcText, format);
                rcText.Offset(col.Width, 0);
            }

            rcClient.Inflate(-1, -1);
            if (g.Clip != null) g.Clip.Dispose();
            g.Clip = new Region(rcClient);

            rcClient.Y = rcHeader.Bottom;
            rcClient.Height = ClientRectangle.Height - (rcHeader.Height + 1);
            if (g.Clip != null) g.Clip.Dispose();
            g.Clip = new Region(rcClient);

            int height = ((rcHeader.Height - 8) * (mRows.Count)) + 4;
            rcText.Height = mHeaderFont.Height + 2;
            mMaxScroll = rcClient.Height - height;
            if (mMaxScroll > 0) { // No scrolling needed
                mMaxScroll = 0;
                mScrollBar = new Rectangle(0, 0, 0, 0);
            } else {
                mScrollBar = new Rectangle(rcClient.Right - 33, rcClient.Y + 3, 30, rcClient.Height - 6);

                RoundRectPath thumbPath = new RoundRectPath(mScrollBar, mRounding, mRounding);
                using (LinearGradientBrush b = new LinearGradientBrush(mScrollBar, Color.White, Color.LightGray, LinearGradientMode.Vertical)) {
                    b.WrapMode = WrapMode.TileFlipX;
                    g.FillPath(b, thumbPath);
                }

                using (Pen p = new Pen(Color.DarkGray, 3)) {
                    p.SetLineCap(LineCap.Round, LineCap.Round, DashCap.Round);
                    g.DrawLine(p, new Point(mScrollBar.X + 6, mScrollBar.Y + 18), new Point(mScrollBar.X + 15, mScrollBar.Y + 8));
                    g.DrawLine(p, new Point(mScrollBar.X + 24, mScrollBar.Y + 18), new Point(mScrollBar.X + 15, mScrollBar.Y + 8));
                    g.DrawLine(p, new Point(mScrollBar.X + 6, mScrollBar.Bottom - 18), new Point(mScrollBar.X + 15, mScrollBar.Bottom - 8));
                    g.DrawLine(p, new Point(mScrollBar.X + 24, mScrollBar.Bottom - 18), new Point(mScrollBar.X + 15, mScrollBar.Bottom - 8));
                }

                for (int l = mScrollBar.Y + 24; l < mScrollBar.Bottom - 24; l += 4) {
                    g.DrawLine(Pens.DarkGray, new Point(mScrollBar.Location.X + 6, l), new Point(mScrollBar.Location.X + 24, l));
                }
                g.DrawPath(Pens.Black, thumbPath);

                rcClient.Width = rcClient.Width - (mScrollBar.Width + 6);
                if (g.Clip != null) g.Clip.Dispose();
                g.Clip = new Region(rcClient);
                thumbPath.Dispose();
                if (g.Clip != null) g.Clip.Dispose();
            }

            Brush bActive = new SolidBrush(Color.FromArgb(0xBC, 0xC9, 0xFE));
            Brush bError = new SolidBrush(Color.Pink);
            Brush bSuccess = new SolidBrush(Color.LightGreen);
            Brush bCustom = new SolidBrush(mCustomBackColor);

            //Fill Row back colors
            Rectangle rcRow = new Rectangle(rcClient.X, rcClient.Y + mCurrentY, rcClient.Width, mHeaderFont.Height + 2);
            for (int row = 0; row < mRows.Count; row++) {
                if (rcRow.Bottom > rcClient.Bottom) break;
                if (mSelectMode) {
                    if (row == mSelecedIndex) g.FillRectangle(bActive, rcRow);
                } else if (mRows[row].Style == GridRowStyle.Active) {
                    g.FillRectangle(bActive, rcRow);
                } else if (mRows[row].Style == GridRowStyle.Success) {
                    g.FillRectangle(bSuccess, rcRow);
                } else if (mRows[row].Style == GridRowStyle.Error) {
                    g.FillRectangle(bError, rcRow);
                } else if (mRows[row].Style == GridRowStyle.Custom) {
                    g.FillRectangle(bCustom, rcRow);
                }
                rcRow.Offset(0, rcRow.Height);
            }

            Brush textBrush = null;
            Brush customForeBrush = new SolidBrush(mCustomForeColor);
            rcRow = new Rectangle(rcClient.X, rcClient.Y + mCurrentY, rcClient.Width, mHeaderFont.Height + 2);
            foreach (GridRow row in mRows) {
                if (rcRow.Bottom > rcClient.Bottom)
                    break;
                rcText.X = rcRow.X;
                rcText.Y = rcRow.Y;
                for(int i = 0; i < mColumns.Count; i++) {
                    if (i < row.Values.Count) {
                        rcText.Width = mColumns[i].Width;
                        format.Alignment = mColumns[i].Alignment;
                        switch (row.Style) {
                            case GridRowStyle.Inactive:
                                textBrush = Brushes.Gray;
                                break;
                            case GridRowStyle.Custom:
                                textBrush = customForeBrush;
                                break;
                            default:
                                textBrush = Brushes.Black;
                                break;
                        }
                        format.FormatFlags = StringFormatFlags.NoWrap;
                        g.DrawString(row.Values[i], Font, textBrush, rcText, format);
                        rcText.Offset(mColumns[i].Width, 0);
                    }
                }

                rcRow.Offset(0, rcRow.Height);
            }
            bActive.Dispose();
            bError.Dispose();
            bSuccess.Dispose();
            bCustom.Dispose();
            customForeBrush.Dispose();
            format.Dispose();
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            Graphics g = e.Graphics;
            Rectangle rcClient = ClientRectangle;
            rcClient.Inflate(-4, -4);

            Region originalClip = g.Clip;
            g.Clip = new Region(rcClient);
            g.SmoothingMode = SmoothingMode.AntiAlias;

            Size szSpace = new Size(4, 3);
            Rectangle rcItem;
            Rectangle rcText = new Rectangle(0, 0, 0, 0);
            Rectangle rcIcon = new Rectangle(0, 0, 0, 0);

            StringFormat iconTextFormat = new StringFormat();
            iconTextFormat.Alignment = StringAlignment.Center;
            iconTextFormat.LineAlignment = StringAlignment.Center;

            Color color1 = Color.White;
            Color color2 = Color.White;
            Brush textBrush = Brushes.Black;
            Brush iconBrush = Brushes.White;

            //First determine if the data will fit without the scrollbar
            rcItem = new Rectangle(rcClient.X, rcClient.Y + mCurrentY, rcClient.Width - szSpace.Width, 0);
            for (int i = 0; i < Items.Count; i++) {
                ListItem item = Items[i];
                if (item.Icon != null) {
                    rcIcon = new Rectangle(ItemPadding.Left + rcItem.X, 0, item.Icon.Width, item.Icon.Height);
                    rcText.X = rcIcon.Right + szSpace.Width;
                    rcText.Width = rcItem.Width - (szSpace.Width + rcIcon.Width + ItemPadding.Left + ItemPadding.Right);
                } else {
                    rcIcon = new Rectangle(0, 0, 0, 0);
                    rcText.X = ItemPadding.Left + rcItem.X;
                    rcText.Width = rcItem.Width - (ItemPadding.Left + ItemPadding.Right);
                }

                Size sz = g.MeasureString(item.Text, Font, rcText.Width).ToSize();
                rcItem.Height = ((item.Icon != null && sz.Height < rcIcon.Height) ? rcIcon.Height : sz.Height) + (szSpace.Height * 2) + ItemPadding.Top + ItemPadding.Bottom;
                item.Size = rcItem.Size;
                item.Location.X = rcItem.Location.X;
                item.Location.Y = rcItem.Location.Y + mCurrentY;
                rcText.Height = rcItem.Height;
                rcText.Y = rcItem.Y;
                rcIcon.Y = rcItem.Y + ((rcItem.Height - rcIcon.Height) / 2);

                rcItem.Offset(0, rcItem.Height + szSpace.Height);
            }

            mMaxScroll = ((rcItem.Bottom + mDefaultY) - (Height + mCurrentY));
            if (mMaxScroll < 0) { // No scrolling needed
                mMaxScroll = 0;
                mCurrentY = mDefaultY;
                mScrollBar = new Rectangle(0, 0, 0, 0);
            } else {
                mScrollBar = new Rectangle(rcClient.Right - 30, rcClient.Y, 30, rcClient.Height);
                RoundRectPath thumbPath = new RoundRectPath(mScrollBar, mRounding, mRounding);
                using (LinearGradientBrush b = new LinearGradientBrush(mScrollBar, Color.White, Color.LightGray, LinearGradientMode.Vertical)) {
                    b.WrapMode = WrapMode.TileFlipX;
                    g.FillPath(b, thumbPath);
                }

                using (Pen p = new Pen(Color.DarkGray, 3)) {
                    p.SetLineCap(LineCap.Round, LineCap.Round, DashCap.Round);
                    g.DrawLine(p, new Point(mScrollBar.X + 6, 18), new Point(mScrollBar.X + 15, 8));
                    g.DrawLine(p, new Point(mScrollBar.X + 24, 18), new Point(mScrollBar.X + 15, 8));
                    g.DrawLine(p, new Point(mScrollBar.X + 6, mScrollBar.Bottom - 18), new Point(mScrollBar.X + 15, mScrollBar.Bottom - 8));
                    g.DrawLine(p, new Point(mScrollBar.X + 24, mScrollBar.Bottom - 18), new Point(mScrollBar.X + 15, mScrollBar.Bottom - 8));
                }

                for (int l = 24; l < rcClient.Height - 24; l += 4) {
                    g.DrawLine(Pens.DarkGray, new Point(mScrollBar.Location.X + 6, l), new Point(mScrollBar.Location.X + 24, l));
                }
                g.DrawPath(Pens.Black, thumbPath);
                thumbPath.Dispose();
            }

            rcItem = new Rectangle(rcClient.X, rcClient.Y + mCurrentY, rcClient.Width - ((mScrollBar.Width > 0) ? mScrollBar.Width + szSpace.Width : 0), 0);
            for (int i = 0; i < Items.Count; i++) {
                ListItem item = Items[i];

                if (item.Icon != null) {
                    rcIcon = new Rectangle(ItemPadding.Left + rcItem.X, 0, item.Icon.Width, item.Icon.Height);
                    rcText.X = rcIcon.Right + szSpace.Width;
                    rcText.Width = rcItem.Width - (szSpace.Width + rcIcon.Width + ItemPadding.Left + ItemPadding.Right);
                } else {
                    rcIcon = new Rectangle(0, 0, 0, 0);
                    rcText.X = ItemPadding.Left + rcItem.X;
                    rcText.Width = rcItem.Width - (ItemPadding.Left + ItemPadding.Right);
                }

                Size sz = g.MeasureString(item.Text, Font, rcText.Width).ToSize();
                rcItem.Height = ((item.Icon != null && sz.Height < rcIcon.Height) ? rcIcon.Height : sz.Height) + (szSpace.Height * 2) + ItemPadding.Top + ItemPadding.Bottom;
                item.Size = rcItem.Size;
                item.Location.X = rcItem.Location.X;
                item.Location.Y = rcItem.Location.Y + mCurrentY;
                rcText.Height = rcItem.Height;
                rcText.Y = rcItem.Y;
                rcIcon.Y = rcItem.Y + ((rcItem.Height - rcIcon.Height) / 2);

                DrawItem(new ListItemPaintArgs(g, item, rcItem, rcText, rcIcon));
                rcItem.Offset(0, rcItem.Height + szSpace.Height);
            }

            iconTextFormat.Dispose();
            g.Clip.Dispose();
            g.Clip = originalClip;
        }