using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.ComponentModel; using System.Windows.Forms; namespace DevComponents.DotNetBar { /// /// Manages whether ambient property settings (BackColor, ForeColor etc.) are applied to child controls of the form when StyleManager component changes style. /// [ToolboxBitmap(typeof(StyleManagerAmbient), "StyleManager.ico"), ToolboxItem(true)] [ProvideProperty("EnableAmbientSettings", typeof(Control))] public class StyleManagerAmbient : Component, IExtenderProvider { #region Constructor /// /// Initializes a new instance of the StyleManagerAmbient class. /// public StyleManagerAmbient() { StyleManager.RegisterAmbientManager(this); } /// /// Initializes a new instance of the StyleManagerAmbient class with the specified container. /// /// An IContainer that represents the container for the command. 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 _Settings = new Dictionary(); /// /// Gets ambient settings StyleManager is allowed to change on the control. /// [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; } /// /// Sets the ambient settings StyleManager is allowed to change on component. /// /// Reference to supported component. /// Ambient settings that StyleManager may change. 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 } /// /// Specifies ambient settings enabled on the control for StyleManager. /// [Flags] public enum eAmbientSettings { /// /// All ambient settings are allowed to change. /// All = BackColor | ForeColor | ChildControls, /// /// StyleManager cannot change ambient settings. /// None = 0, /// /// StyleManager should process child controls. /// ChildControls = 1, /// /// StyleManager should change BackColor. /// BackColor = 2, /// /// StyleManager should change ForeColor. /// ForeColor = 4 } }