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
 | |
|     }
 | |
| }
 | |
| 
 |