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