186 lines
6.5 KiB
C#

using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Drawing.Text;
using System.Windows.Forms;
namespace DevComponents.DotNetBar.Layout
{
/// <summary>
/// Represents class with static functions that provide commonly used utility functions when working with
/// Bar objects and items hosted by Bar object.
/// </summary>
internal class BarUtilities
{
/// <summary>
/// Gets or sets whether StringFormat internally used by all DotNetBar controls to render text is GenericDefault. Default value is false
/// which indicates that GenericTypographic is used.
/// </summary>
public static bool UseGenericDefaultStringFormat
{
get { return TextDrawing.UseGenericDefault; }
set { TextDrawing.UseGenericDefault = value; }
}
/// <summary>
/// Gets or sets the anti-alias text rendering hint that will be used to render text on controls that have AntiAlias property set to true.
/// </summary>
public static TextRenderingHint AntiAliasTextRenderingHint
{
get
{
return DisplayHelp.AntiAliasTextRenderingHint;
}
set
{
DisplayHelp.AntiAliasTextRenderingHint = value;
}
}
#if FRAMEWORK20
/// <summary>
/// Gets or sets whether .NET Framework TextRenderer class is used for text rendering instead of Graphics.DrawString.
/// Default value is false.
/// Using TextRenderer will disable the Fade and Animation effects on controls because of issues in TextRenderer when drawing text on transparent
/// surfaces.
/// </summary>
public static bool UseTextRenderer
{
get { return TextDrawing.UseTextRenderer; }
set { TextDrawing.UseTextRenderer = value; }
}
#endif
private static bool _AlwaysGenerateAccessibilityFocusEvent = false;
/// <summary>
/// Gets or sets whether items always generate the Focus accessibility event when mouse enters the item. Default value is false which indicates
/// that focus event will be raised only when item is on menu bar.
/// </summary>
public static bool AlwaysGenerateAccessibilityFocusEvent
{
get { return _AlwaysGenerateAccessibilityFocusEvent; }
set
{
_AlwaysGenerateAccessibilityFocusEvent = value;
}
}
internal static bool IsModalFormOpen
{
get
{
#if (FRAMEWORK20)
for (int i = 0; i < System.Windows.Forms.Application.OpenForms.Count; i++)
{
System.Windows.Forms.Form form = System.Windows.Forms.Application.OpenForms[i];
if (form.Modal) return true;
}
#endif
return false;
}
}
private static bool _AutoRemoveMessageFilter = false;
/// <summary>
/// Gets or sets whether Application Message Filter that is registered by popup controls
/// is automatically unregistered when last control is disposed. Default value is false and
/// in most cases should not be changed.
/// </summary>
public static bool AutoRemoveMessageFilter
{
get { return _AutoRemoveMessageFilter; }
set { _AutoRemoveMessageFilter = value; }
}
private static int _TextMarkupCultureSpecific = 3;
/// <summary>
/// Get or sets the text-markup padding for text measurement when running on Japanese version of Windows.
/// </summary>
public static int TextMarkupCultureSpecificPadding
{
get { return _TextMarkupCultureSpecific; }
set
{
_TextMarkupCultureSpecific = value;
}
}
private static bool _DisposeItemImages = false;
/// <summary>
/// Gets or sets whether Image and Icon resources assigned to items and controls are automatically disposed when
/// control or item is disposed. Default value is false.
/// </summary>
public static bool DisposeItemImages
{
get
{
return _DisposeItemImages;
}
set
{
_DisposeItemImages = value;
}
}
/// <summary>
/// Disposes image reference and sets it to null.
/// </summary>
/// <param name="image">Reference to image to dispose.</param>
internal static void DisposeImage(ref System.Drawing.Image image)
{
if (image == null) return;
image.Dispose();
image = null;
}
/// <summary>
/// Disposes image reference and sets it to null.
/// </summary>
/// <param name="image">Reference to image to dispose.</param>
internal static void DisposeImage(ref System.Drawing.Icon icon)
{
if (icon == null) return;
icon.Dispose();
icon = null;
}
#region Delayed Invoke
/// <summary>
/// Invokes the method asynchronously using the WinForms Timer.
/// </summary>
/// <param name="method">Method to invoke.</param>
public static void InvokeDelayed(MethodInvoker method)
{
InvokeDelayed(method, 10);
}
/// <summary>
/// Invokes the method asynchronously using the WinForms Timer.
/// </summary>
/// <param name="method">Method to invoke.</param>
/// <param name="delayInterval">Time in milliseconds after which method is invoked.</param>
public static void InvokeDelayed(MethodInvoker method, int delayInterval)
{
Timer delayedInvokeTimer = new Timer();
delayedInvokeTimer = new Timer();
delayedInvokeTimer.Tag = method;
delayedInvokeTimer.Interval = delayInterval;
delayedInvokeTimer.Tick += new EventHandler(DelayedInvokeTimerTick);
delayedInvokeTimer.Start();
}
private static void DelayedInvokeTimerTick(object sender, EventArgs e)
{
Timer timer = (Timer)sender;
MethodInvoker method = (MethodInvoker)timer.Tag;
timer.Stop();
timer.Dispose();
method.Invoke();
}
#endregion
}
internal class BarPropertyBagKeys
{
public static string AutoHideSetting="autohide";
}
}