202 lines
5.8 KiB
C#

#if FRAMEWORK20
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
namespace DevComponents.Editors
{
public class VisualButtonBase : VisualItem
{
#region Private Variables
#endregion
#region Events
#endregion
#region Constructor
#endregion
#region Internal Implementation
private bool _ClickAutoRepeat = false;
/// <summary>
/// Gets or sets whether button automatically gets Click events repeated when mouse is kept pressed on the button. Default value is false.
/// </summary>
[DefaultValue(false)]
public bool ClickAutoRepeat
{
get { return _ClickAutoRepeat; }
set
{
_ClickAutoRepeat = value;
}
}
private Timer _ClickTimer = null;
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && this.GetIsEnabled() && _ClickAutoRepeat)
{
if (_ClickTimer == null)
_ClickTimer = new Timer();
_ClickTimer.Interval = ClickRepeatInterval;
_ClickTimer.Tick += new EventHandler(this.ClickTimerTick);
_ClickTimer.Start();
}
base.OnMouseDown(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
DisposeAutoClickTimer();
base.OnMouseUp(e);
}
protected override void OnMouseLeave()
{
HideTooltip();
DisposeAutoClickTimer();
base.OnMouseLeave();
}
private void DisposeAutoClickTimer()
{
if (_ClickTimer != null)
{
Timer t = _ClickTimer;
_ClickTimer = null;
t.Stop();
t.Tick -= new EventHandler(this.ClickTimerTick);
t.Dispose();
}
}
private void ClickTimerTick(object sender, EventArgs e)
{
this.ProcessClick();
this.OnClickAutoRepeat();
}
protected virtual void OnClickAutoRepeat()
{
}
private int _ClickRepeatInterval = 300;
/// <summary>
/// Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item.
/// </summary>
[Browsable(true), DefaultValue(300), Category("Behavior"), Description("Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item.")]
public virtual int ClickRepeatInterval
{
get
{
return _ClickRepeatInterval;
}
set
{
_ClickRepeatInterval = value;
}
}
private bool _RenderDefaultBackground = true;
/// <summary>
/// Gets or sets whether default button background is rendered when mouse is not over the host control. Default value is true.
/// </summary>
public bool RenderDefaultBackground
{
get { return _RenderDefaultBackground; }
set
{
if (_RenderDefaultBackground != value)
{
_RenderDefaultBackground = value;
this.InvalidateRender();
}
}
}
private DevComponents.DotNetBar.eShortcut _Shortcut = DevComponents.DotNetBar.eShortcut.None;
/// <summary>
/// Gets or sets the shortcut key which when pressed triggers button click event or its default function.
/// </summary>
[DefaultValue(DevComponents.DotNetBar.eShortcut.None), Description("Indicates shortcut key which when pressed triggers button click event or its default function.")]
public DevComponents.DotNetBar.eShortcut Shortcut
{
get { return _Shortcut; }
set
{
_Shortcut = value;
}
}
protected override bool OnCmdKey(ref Message msg, Keys keyData)
{
if (_Shortcut != DevComponents.DotNetBar.eShortcut.None)
{
if (keyData == (Keys)_Shortcut)
{
OnClick(new KeyEventArgs(keyData));
return true;
}
}
return base.OnCmdKey(ref msg, keyData);
}
private string _Tooltip = "";
/// <summary>
/// Gets or sets the button tooltip.
/// </summary>
public string Tooltip
{
get { return _Tooltip; }
set
{
_Tooltip = value;
}
}
private DevComponents.DotNetBar.ToolTip _TooltipWnd = null;
protected override void OnMouseHover(EventArgs e)
{
ShowTooltip();
base.OnMouseHover(e);
}
private void ShowTooltip()
{
if (!string.IsNullOrEmpty(_Tooltip))
{
if (_TooltipWnd == null)
_TooltipWnd = new DevComponents.DotNetBar.ToolTip();
_TooltipWnd.Style = DevComponents.DotNetBar.StyleManager.GetEffectiveStyle();
_TooltipWnd.Text = _Tooltip;
_TooltipWnd.ShowToolTip();
}
}
private void HideTooltip()
{
if (_TooltipWnd != null)
{
try
{
if (_TooltipWnd != null)
{
_TooltipWnd.Hide();
_TooltipWnd.Dispose();
_TooltipWnd = null;
ResetHover();
}
}
catch { }
}
}
#endregion
}
}
#endif