mattercontrol/CustomWidgets/ClickWidget.cs
2014-01-29 19:09:30 -08:00

100 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MatterHackers.Agg;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.UI;
using MatterHackers.Agg.OpenGlGui;
using MatterHackers.PolygonMesh;
using MatterHackers.RenderOpenGl;
using MatterHackers.VectorMath;
using MatterHackers.Agg.VertexSource;
namespace MatterHackers.MatterControl
{
// A clickable GuiWidget
public class ClickWidget : GuiWidget
{
public delegate void ButtonEventHandler(object sender, MouseEventArgs mouseEvent);
private event ButtonEventHandler PrivateClick;
private int borderWidth = 0;
private RGBA_Bytes borderColor = RGBA_Bytes.Black;
public int BorderWidth
{
get { return borderWidth; }
set
{
this.borderWidth = value;
this.Invalidate();
}
}
public RGBA_Bytes BorderColor
{
get { return borderColor; }
set
{
this.borderColor = value;
this.Invalidate();
}
}
List<ButtonEventHandler> ClickEventDelegates = new List<ButtonEventHandler>();
public event ButtonEventHandler Click
{
//Wraps the PrivateClick event delegate so that we can track which events have been added and clear them if necessary
add
{
PrivateClick += value;
ClickEventDelegates.Add(value);
}
remove
{
PrivateClick -= value;
ClickEventDelegates.Remove(value);
}
}
public void UnbindClickEvents()
{
//Clears all event handlers from the Click event
foreach (ButtonEventHandler eh in ClickEventDelegates)
{
PrivateClick -= eh;
}
ClickEventDelegates.Clear();
}
public void ClickButton(MouseEventArgs mouseEvent)
{
if (PrivateClick != null)
{
PrivateClick(this, mouseEvent);
}
}
override public void OnMouseUp(MouseEventArgs mouseEvent)
{
if (PositionWithinLocalBounds(mouseEvent.X, mouseEvent.Y))
{
ClickButton(mouseEvent);
}
base.OnMouseUp(mouseEvent);
}
public override void OnDraw(Graphics2D graphics2D)
{
RectangleDouble borderRectangle = LocalBounds;
RoundedRect rectBorder = new RoundedRect(borderRectangle, 0);
graphics2D.Render(new Stroke(rectBorder, BorderWidth), BorderColor);
base.OnDraw(graphics2D);
}
}
}