126 lines
4.2 KiB
C#
126 lines
4.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.ComponentModel;
|
|
using System.Windows.Forms;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
/// <summary>
|
|
/// Manages whether ambient property settings (BackColor, ForeColor etc.) are applied to child controls of the form when StyleManager component changes style.
|
|
/// </summary>
|
|
[ToolboxBitmap(typeof(StyleManagerAmbient), "StyleManager.ico"), ToolboxItem(true)]
|
|
[ProvideProperty("EnableAmbientSettings", typeof(Control))]
|
|
public class StyleManagerAmbient : Component, IExtenderProvider
|
|
{
|
|
#region Constructor
|
|
/// <summary>
|
|
/// Initializes a new instance of the StyleManagerAmbient class.
|
|
/// </summary>
|
|
public StyleManagerAmbient()
|
|
{
|
|
StyleManager.RegisterAmbientManager(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the StyleManagerAmbient class with the specified container.
|
|
/// </summary>
|
|
/// <param name="container">An IContainer that represents the container for the command.</param>
|
|
public StyleManagerAmbient(IContainer container)
|
|
: this()
|
|
{
|
|
container.Add(this);
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
StyleManager.UnregisterAmbientManager(this);
|
|
base.Dispose(disposing);
|
|
}
|
|
#endregion
|
|
|
|
#region Implementation
|
|
private Dictionary<Control, eAmbientSettings> _Settings = new Dictionary<Control, eAmbientSettings>();
|
|
/// <summary>
|
|
/// Gets ambient settings StyleManager is allowed to change on the control.
|
|
/// </summary>
|
|
[DefaultValue(eAmbientSettings.All), Description("Indicates ambient settings StyleManager is allowed to change on the control.")]
|
|
[System.ComponentModel.Editor("DevComponents.DotNetBar.Design.FlagEnumUIEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))]
|
|
public eAmbientSettings GetEnableAmbientSettings(Control c)
|
|
{
|
|
eAmbientSettings settings = eAmbientSettings.All;
|
|
if (_Settings.TryGetValue(c, out settings))
|
|
return settings;
|
|
|
|
return eAmbientSettings.All;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sets the ambient settings StyleManager is allowed to change on component.
|
|
/// </summary>
|
|
/// <param name="c">Reference to supported component.</param>
|
|
/// <param name="ambientSettings">Ambient settings that StyleManager may change.</param>
|
|
public void SetEnableAmbientSettings(Control c, eAmbientSettings ambientSettings)
|
|
{
|
|
if (_Settings.ContainsKey(c))
|
|
{
|
|
if (ambientSettings == eAmbientSettings.All)
|
|
_Settings.Remove(c);
|
|
else
|
|
_Settings[c] = ambientSettings;
|
|
}
|
|
else if (ambientSettings != eAmbientSettings.All)
|
|
{
|
|
_Settings.Add(c, ambientSettings);
|
|
}
|
|
}
|
|
|
|
internal bool Contains(Control c)
|
|
{
|
|
return _Settings.ContainsKey(c);
|
|
}
|
|
#endregion
|
|
|
|
#region IExtenderProvider Members
|
|
|
|
public bool CanExtend(object extendee)
|
|
{
|
|
if (extendee is Control)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Specifies ambient settings enabled on the control for StyleManager.
|
|
/// </summary>
|
|
[Flags]
|
|
public enum eAmbientSettings
|
|
{
|
|
/// <summary>
|
|
/// All ambient settings are allowed to change.
|
|
/// </summary>
|
|
All = BackColor | ForeColor | ChildControls,
|
|
/// <summary>
|
|
/// StyleManager cannot change ambient settings.
|
|
/// </summary>
|
|
None = 0,
|
|
/// <summary>
|
|
/// StyleManager should process child controls.
|
|
/// </summary>
|
|
ChildControls = 1,
|
|
/// <summary>
|
|
/// StyleManager should change BackColor.
|
|
/// </summary>
|
|
BackColor = 2,
|
|
/// <summary>
|
|
/// StyleManager should change ForeColor.
|
|
/// </summary>
|
|
ForeColor = 4
|
|
}
|
|
}
|