129 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using System.Text;
 | 
						|
using DevComponents.Editors.DateTimeAdv;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Rendering
 | 
						|
{
 | 
						|
    internal class OfficeListBoxItemPainter : ListBoxItemPainter
 | 
						|
    {
 | 
						|
        #region Implementation
 | 
						|
        /// <summary>
 | 
						|
        /// Paints StepItem.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Provides arguments for the operation.</param>
 | 
						|
        public override void Paint(ListBoxItemRendererEventArgs e)
 | 
						|
        {
 | 
						|
            Graphics g = e.ItemPaintArgs.Graphics;
 | 
						|
            ListBoxItem item = e.Item;
 | 
						|
            ListBoxAdv listBox = e.ItemPaintArgs.ContainerControl as ListBoxAdv;
 | 
						|
            bool checkBoxes = false;
 | 
						|
            bool useMnemonic = true;
 | 
						|
            if (listBox != null)
 | 
						|
            {
 | 
						|
                checkBoxes = listBox.CheckBoxesVisible;
 | 
						|
                useMnemonic = listBox.UseMnemonic;
 | 
						|
            }
 | 
						|
            OfficeListBoxItemColorTable table = ColorTable.ListBoxItem;
 | 
						|
            OfficeListBoxItemStateColorTable ct = item.IsSelected ? table.Selected : table.Default;
 | 
						|
            if (item.HotTracking && item.IsMouseOver)
 | 
						|
                ct = table.MouseOver;
 | 
						|
 | 
						|
            Rectangle r = item.Bounds;
 | 
						|
 | 
						|
            if (checkBoxes)
 | 
						|
            {
 | 
						|
                Office2007CheckBoxStateColorTable cbt = GetCheckBoxStateColorTable(item.CheckBoxMouseState);
 | 
						|
                Size checkBoxSize = Dpi.Size(item.CheckBoxSize);
 | 
						|
                Rectangle cbr = new Rectangle(r.X + 2, r.Y + (r.Height - checkBoxSize.Height) / 2, checkBoxSize.Width, checkBoxSize.Height);
 | 
						|
                _CheckBoxPainter.PaintCheckBox(g, cbr, cbt, item.CheckState);
 | 
						|
                int checkBoxTextSpacing = Dpi.Width(ListBoxItem.CheckBoxTextSpacing);
 | 
						|
                r.X += checkBoxSize.Width + checkBoxTextSpacing - 1;
 | 
						|
                r.Width -= checkBoxSize.Width + checkBoxTextSpacing - 1;
 | 
						|
                item.CheckBoxBounds = cbr;
 | 
						|
            }
 | 
						|
 | 
						|
            if (ct.BackColors != null && ct.BackColors.Length > 0 || item.BackColors != null && item.BackColors.Length > 0)
 | 
						|
            {
 | 
						|
                using (Brush brush = DisplayHelp.CreateBrush(r, (item.BackColors != null && item.BackColors.Length > 0) ? item.BackColors : ct.BackColors, ct.BackColorsGradientAngle, ct.BackColorsPositions))
 | 
						|
                {
 | 
						|
                    g.FillRectangle(brush, r);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            Color textColor = ct.TextColor;
 | 
						|
 | 
						|
            if (!string.IsNullOrEmpty(item.SymbolRealized))
 | 
						|
            {
 | 
						|
                Color symbolColor = item.SymbolColor;
 | 
						|
                if (symbolColor.IsEmpty) symbolColor = textColor;
 | 
						|
                TextDrawing.DrawStringLegacy(g, item.SymbolRealized, Symbols.GetFont(item.SymbolSize, item.SymbolSet), 
 | 
						|
                    symbolColor, new Rectangle(r.X, r.Y + r.Height / 2, 0, 0), eTextFormat.Default | eTextFormat.VerticalCenter);
 | 
						|
                int imageSize = item.ActualSymbolSize.Width + Dpi.Width(ListBoxItem.ImageTextSpacing);
 | 
						|
                r.Width -= imageSize;
 | 
						|
                r.X += imageSize;
 | 
						|
            }
 | 
						|
            else if (item.Image != null)
 | 
						|
            {
 | 
						|
                Size imgSize = Dpi.ImageSize(item.Image.Size);
 | 
						|
                g.DrawImage(item.Image, new Rectangle(r.X, r.Y + (r.Height - imgSize.Height) / 2, imgSize.Width, imgSize.Height));
 | 
						|
                int imageSize = imgSize.Width + Dpi.Width(ListBoxItem.ImageTextSpacing);
 | 
						|
                r.Width -= imageSize;
 | 
						|
                r.X += imageSize;
 | 
						|
            }
 | 
						|
                        
 | 
						|
            if (!string.IsNullOrEmpty(item.Text))
 | 
						|
            {
 | 
						|
                if (checkBoxes) { r.X += 1; r.Width -= 1; }
 | 
						|
                if (!item.TextColor.IsEmpty) textColor = item.TextColor;
 | 
						|
                Font font = e.ItemPaintArgs.Font;
 | 
						|
                if (item.TextMarkupBody == null)
 | 
						|
                {
 | 
						|
                    eTextFormat textFormat = eTextFormat.Default | eTextFormat.VerticalCenter;
 | 
						|
                    if (item.TextAlignment == eButtonTextAlignment.Center)
 | 
						|
                    {
 | 
						|
                        textFormat |= eTextFormat.HorizontalCenter;
 | 
						|
                    }
 | 
						|
                    else if (item.TextAlignment == eButtonTextAlignment.Right)
 | 
						|
                    {
 | 
						|
                        textFormat |= eTextFormat.Right;
 | 
						|
                    }
 | 
						|
                    if (!useMnemonic)
 | 
						|
                        textFormat |= eTextFormat.NoPrefix;
 | 
						|
                    TextDrawing.DrawString(g, item.Text, font, textColor, r, textFormat);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, font, textColor, e.ItemPaintArgs.RightToLeft);
 | 
						|
                    d.HotKeyPrefixVisible = false;
 | 
						|
                    d.ContextObject = item;
 | 
						|
                    Rectangle mr = new Rectangle(r.X, r.Y + (r.Height - item.TextMarkupBody.Bounds.Height) / 2, item.TextMarkupBody.Bounds.Width, item.TextMarkupBody.Bounds.Height);
 | 
						|
                    item.TextMarkupBody.Bounds = mr;
 | 
						|
                    item.TextMarkupBody.Render(d);
 | 
						|
                }
 | 
						|
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private Office2007CheckBoxStateColorTable GetCheckBoxStateColorTable(eMouseState state)
 | 
						|
        {
 | 
						|
            if (state == eMouseState.Down)
 | 
						|
                return ColorTable.CheckBoxItem.Pressed;
 | 
						|
            if (state == eMouseState.Hot)
 | 
						|
                return ColorTable.CheckBoxItem.MouseOver;
 | 
						|
            return ColorTable.CheckBoxItem.Default;
 | 
						|
        }
 | 
						|
 | 
						|
        private Office2007CheckBoxItemPainter _CheckBoxPainter;
 | 
						|
        public Office2007CheckBoxItemPainter CheckBoxPainter
 | 
						|
        {
 | 
						|
            get { return _CheckBoxPainter; }
 | 
						|
            set { _CheckBoxPainter = value; }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 | 
						|
 |