using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace JYControl { /// /// Description of LBButton. /// public partial class LBButton : LBIndustrialCtrlBase { #region (* Enumeratives *) /// /// Button styles /// public enum ButtonStyle { Circular = 0, Rectangular = 1, Elliptical = 2, } /// /// Button states /// public enum ButtonState { Normal = 0, Pressed, } #endregion #region (* Properties variables *) private ButtonStyle buttonStyle = ButtonStyle.Circular; private ButtonState buttonState = ButtonState.Normal; private Color buttonColor = Color.Red; private string label = String.Empty; private bool enableRepeatState = false; private int startRepeatInterval = 500; private int repeatInterval = 100; #endregion #region (* Variables *) private Timer tmrRepeat = null; #endregion #region (* Constructor *) public LBButton() { // Initialization InitializeComponent(); // Properties initialization this.buttonColor = Color.Red; this.Size = new Size(50, 50); // Timer this.tmrRepeat = new Timer(); this.tmrRepeat.Enabled = false; this.tmrRepeat.Interval = this.startRepeatInterval; this.tmrRepeat.Tick += this.Timer_Tick; } #endregion #region (* Overrided methods *) protected override ILBRenderer CreateDefaultRenderer() { return new LBButtonRenderer(); } #endregion #region (* Properties *) [ Category("Button"), Description("Style of the button") ] public ButtonStyle Style { set { this.buttonStyle = value; this.CalculateDimensions(); } get { return this.buttonStyle; } } [ Category("Button"), Description("Color of the body of the button") ] public Color ButtonColor { get { return buttonColor; } set { buttonColor = value; Invalidate(); } } [ Category("Button"), Description("Label of the button"), ] public string Label { get { return this.label; } set { this.label = value; Invalidate(); } } [ Category("Button"), Description("State of the button") ] public ButtonState State { set { this.buttonState = value; this.Invalidate(); } get { return this.buttonState; } } [ Category("Button"), Description("Enable/Disable the repetition of the event if the button is pressed") ] public bool RepeatState { set { this.enableRepeatState = value; } get { return this.enableRepeatState; } } [ Category("Button"), Description("Interval to wait in ms for start the repetition") ] public int StartRepeatInterval { set { this.startRepeatInterval = value; } get { return this.startRepeatInterval; } } [ Category("Button"), Description("Interva in ms for the repetition") ] public int RepeatInterval { set { this.repeatInterval = value; } get { return this.repeatInterval; } } #endregion #region (* Events delegates *) /// /// Timer event /// /// /// void Timer_Tick(object sender, EventArgs e) { this.tmrRepeat.Enabled = false; // Update the interval if (tmrRepeat.Interval == this.startRepeatInterval) this.tmrRepeat.Interval = this.repeatInterval; // Call the delagate LBButtonEventArgs ev = new LBButtonEventArgs(); ev.State = this.State; this.OnButtonRepeatState(ev); this.tmrRepeat.Enabled = true; } /// /// Mouse down event /// /// /// void OnMouseDown(object sender, MouseEventArgs e) { // Change the state this.State = ButtonState.Pressed; this.Invalidate(); // Call the delagates LBButtonEventArgs ev = new LBButtonEventArgs(); ev.State = this.State; this.OnButtonChangeState(ev); // Enable the repeat timer if (this.RepeatState != false) { this.tmrRepeat.Interval = this.StartRepeatInterval; this.tmrRepeat.Enabled = true; } } /// /// Mouse up event /// /// /// void OnMuoseUp(object sender, MouseEventArgs e) { // Change the state this.State = ButtonState.Normal; this.Invalidate(); // Call the delagates LBButtonEventArgs ev = new LBButtonEventArgs(); ev.State = this.State; this.OnButtonChangeState(ev); // Disable the timer this.tmrRepeat.Enabled = false; } #endregion #region (* Fire events *) /// /// Event for the state changed /// public event ButtonChangeState ButtonChangeState; /// /// Method for call the delagetes /// /// protected virtual void OnButtonChangeState(LBButtonEventArgs e) { if (this.ButtonChangeState != null) this.ButtonChangeState(this, e); } /// /// Event for the repetition of state /// public event ButtonRepeatState ButtonRepeatState; /// /// Method for call the delagetes /// /// protected virtual void OnButtonRepeatState(LBButtonEventArgs e) { if (this.ButtonRepeatState != null) this.ButtonRepeatState(this, e); } #endregion } #region (* Classes for event and event delagates args *) #region (* Event args class *) /// /// Class for events delegates /// public class LBButtonEventArgs : EventArgs { private LBButton.ButtonState state; public LBButtonEventArgs() { } public LBButton.ButtonState State { get { return this.state; } set { this.state = value; } } } #endregion #region (* Delegates *) public delegate void ButtonChangeState(object sender, LBButtonEventArgs e); public delegate void ButtonRepeatState(object sender, LBButtonEventArgs e); #endregion #endregion }