| File: System\Windows\Forms\Controls\ToolStrips\ToolStripStatusLabel.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; using System.Drawing; using System.Windows.Forms.Automation; using System.Windows.Forms.Design; using System.Windows.Forms.Layout; namespace System.Windows.Forms; /// <summary> /// A non selectable ToolStrip item /// </summary> [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.StatusStrip)] public partial class ToolStripStatusLabel : ToolStripLabel, IAutomationLiveRegion { private Padding _defaultMargin = ScaleHelper.ScaleToDpi(new Padding(0, 3, 0, 2), ScaleHelper.InitialSystemDpi); private Border3DStyle _borderStyle = Border3DStyle.Flat; private ToolStripStatusLabelBorderSides _borderSides = ToolStripStatusLabelBorderSides.None; private bool _spring; private AutomationLiveSetting _liveSetting; public ToolStripStatusLabel() { } public ToolStripStatusLabel(string? text) : base(text, image: null, isLink: false, onClick: null) { } public ToolStripStatusLabel(Image? image) : base(text: null, image, isLink: false, onClick: null) { } public ToolStripStatusLabel(string? text, Image? image) : base(text, image, isLink: false, onClick: null) { } public ToolStripStatusLabel(string? text, Image? image, EventHandler? onClick) : base(text, image, isLink: false, onClick, name: null) { } public ToolStripStatusLabel(string? text, Image? image, EventHandler? onClick, string? name) : base(text, image, isLink: false, onClick, name) { } /// <summary> /// Creates a new AccessibleObject for this ToolStripStatusLabel instance. /// The AccessibleObject instance returned by this method supports UIA Live Region feature. /// </summary> /// <returns> /// AccessibleObject for this ToolStripStatusLabel instance. /// </returns> protected override AccessibleObject CreateAccessibilityInstance() { return new ToolStripStatusLabelAccessibleObject(this); } /// <summary> /// Creates an instance of the object that defines how image and text /// gets laid out in the ToolStripItem /// </summary> private protected override ToolStripItemInternalLayout CreateInternalLayout() { return new ToolStripStatusLabelLayout(this); } [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] public new ToolStripItemAlignment Alignment { get => base.Alignment; set => base.Alignment = value; } [DefaultValue(Border3DStyle.Flat)] [SRDescription(nameof(SR.ToolStripStatusLabelBorderStyleDescr))] [SRCategory(nameof(SR.CatAppearance))] public Border3DStyle BorderStyle { get { return _borderStyle; } set { SourceGenerated.EnumValidator.Validate(value); if (_borderStyle != value) { _borderStyle = value; Invalidate(); } } } [DefaultValue(ToolStripStatusLabelBorderSides.None)] [SRDescription(nameof(SR.ToolStripStatusLabelBorderSidesDescr))] [SRCategory(nameof(SR.CatAppearance))] public ToolStripStatusLabelBorderSides BorderSides { get { return _borderSides; } set { // no Enum.IsDefined as this is a flags enum. if (_borderSides != value) { _borderSides = value; LayoutTransaction.DoLayout(Owner, this, PropertyNames.BorderStyle); Invalidate(); } } } protected internal override Padding DefaultMargin => _defaultMargin; [DefaultValue(false)] [SRDescription(nameof(SR.ToolStripStatusLabelSpringDescr))] [SRCategory(nameof(SR.CatAppearance))] public bool Spring { get { return _spring; } set { if (_spring != value) { _spring = value; if (ParentInternal is not null) { LayoutTransaction.DoLayout(ParentInternal, this, PropertyNames.Spring); } } } } /// <summary> /// Indicates the "politeness" level that a client should use /// to notify the user of changes to the live region. /// </summary> [SRCategory(nameof(SR.CatAccessibility))] [DefaultValue(AutomationLiveSetting.Off)] [SRDescription(nameof(SR.LiveRegionAutomationLiveSettingDescr))] [Browsable(true)] [EditorBrowsable(EditorBrowsableState.Always)] public AutomationLiveSetting LiveSetting { get { return _liveSetting; } set { SourceGenerated.EnumValidator.Validate(value); _liveSetting = value; } } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); if (IsParentAccessibilityObjectCreated && LiveSetting != AutomationLiveSetting.Off) { AccessibilityObject.RaiseLiveRegionChanged(); } } public override Size GetPreferredSize(Size constrainingSize) { if (BorderSides != ToolStripStatusLabelBorderSides.None) { return base.GetPreferredSize(constrainingSize) + new Size(4, 4); } else { return base.GetPreferredSize(constrainingSize); } } /// <summary> /// Inheriting classes should override this method to handle this event. /// </summary> protected override void OnPaint(PaintEventArgs e) { if (Owner is not null) { ToolStripRenderer renderer = Renderer!; renderer.DrawToolStripStatusLabelBackground(new ToolStripItemRenderEventArgs(e.Graphics, this)); if ((DisplayStyle & ToolStripItemDisplayStyle.Image) == ToolStripItemDisplayStyle.Image) { renderer.DrawItemImage(new ToolStripItemImageRenderEventArgs(e.Graphics, this, InternalLayout.ImageRectangle)); } PaintText(e.Graphics); } } }