CPF/CPF.ReoGrid/CellTypes/ButtonCell.cs
2024-06-24 10:15:59 +08:00

181 lines
3.6 KiB
C#

using System;
using System.Diagnostics;
using CPF.Drawing;
using CPF.ReoGrid.Events;
using CPF.ReoGrid.Graphics;
using CPF.ReoGrid.Interaction;
using CPF.ReoGrid.Rendering;
using CPF.ReoGrid.Utility;
namespace CPF.ReoGrid.CellTypes
{
[Serializable]
public class ButtonCell : CellBody
{
public ButtonCell()
{
}
public ButtonCell(string defaultText)
{
this.defaultText = defaultText;
}
public override void OnSetup(Cell cell)
{
bool flag = cell != null;
if (flag)
{
bool flag2 = cell.Worksheet != null;
if (flag2)
{
cell.Worksheet.SetRangeStyles(cell.PositionAsRange, new WorksheetRangeStyle
{
Flag = PlainStyleFlag.AlignAll,
HAlign = ReoGridHorAlign.Center,
VAlign = ReoGridVerAlign.Middle
});
}
bool flag3 = !string.IsNullOrEmpty(this.defaultText);
if (flag3)
{
cell.Data = this.defaultText;
}
}
}
public override void OnPaint(CellDrawingContext dc)
{
bool flag = base.Cell != null;
if (flag)
{
this.DrawButton(dc);
}
dc.DrawCellText();
}
protected virtual void DrawButton(CellDrawingContext dc)
{
IGraphics graphics = dc.Graphics;
Rect bounds = this.Bounds;
graphics.DrawRectangle(bounds, ColorUtility.ChangeColorBrightness(StaticResources.SystemColor_ControlDark, -0.3f));
float num = bounds.X + 1f;
float num2 = bounds.Y + 1f;
float num3 = bounds.Width - 2f;
float num4 = bounds.Height - 2f;
Rect rect = new Rect(ref num, ref num2, ref num3, ref num4);
graphics.FillRectangle(rect, StaticResources.SystemColor_Control);
bool isPressed = this.IsPressed;
if (isPressed)
{
num = bounds.X + 1f;
num2 = bounds.Y + 1f;
num3 = bounds.Width - 2f;
num4 = bounds.Height - 2f;
Rect rect2 = new Rect(ref num, ref num2, ref num3, ref num4);
graphics.DrawRectangle(rect2, ColorUtility.ChangeColorBrightness(StaticResources.SystemColor_ControlDark, -0.3f));
}
}
public override bool OnMouseDown(CellMouseEventArgs e)
{
Rect bounds = this.Bounds;
Point relativePosition = e.RelativePosition;
bool flag = bounds.Contains(relativePosition);
bool result;
if (flag)
{
this.IsPressed = true;
result = true;
}
else
{
result = false;
}
return result;
}
public override bool OnMouseUp(CellMouseEventArgs e)
{
bool isPressed = this.IsPressed;
bool result;
if (isPressed)
{
Rect bounds = this.Bounds;
Point relativePosition = e.RelativePosition;
bool flag = bounds.Contains(relativePosition);
if (flag)
{
this.PerformClick();
}
this.IsPressed = false;
result = true;
}
else
{
result = false;
}
return result;
}
public override bool OnKeyDown(KeyCode keyCode)
{
bool flag = keyCode == KeyCode.Space;
bool result;
if (flag)
{
this.IsPressed = true;
result = true;
}
else
{
result = false;
}
return result;
}
public override bool OnKeyUp(KeyCode keyCode)
{
bool flag = keyCode == KeyCode.Space && this.IsPressed;
bool result;
if (flag)
{
this.IsPressed = false;
this.PerformClick();
result = true;
}
else
{
result = false;
}
return result;
}
public override bool OnStartEdit()
{
return false;
}
public bool IsPressed { get; set; }
public virtual void PerformClick()
{
EventHandler click = this.Click;
if (click != null)
{
click(this, null);
}
}
//[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event EventHandler Click;
public override ICellBody Clone()
{
return new ButtonCell(base.Cell.DisplayText);
}
private string defaultText;
}
}