File: System\Windows\Forms\Design\SplitContainerDesigner.OrientationActionList.cs
Web Access
Project: src\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design)
// 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.ComponentModel.Design;
 
namespace System.Windows.Forms.Design;
 
internal partial class SplitContainerDesigner
{
    /// <summary>
    ///  This class is used to provide the horizontal or vertical splitter orientation action items.
    /// </summary>
    private class OrientationActionList : DesignerActionList
    {
        private string? _actionName;
        private readonly SplitContainerDesigner _owner;
        private readonly Component? _ownerComponent;
 
        public OrientationActionList(SplitContainerDesigner owner)
            : base(owner.Component)
        {
            _owner = owner;
            _ownerComponent = owner.Component as Component;
 
            if (_ownerComponent is not null)
            {
                PropertyDescriptor? orientationProp = TypeDescriptor.GetProperties(_ownerComponent)["Orientation"];
                if (orientationProp is not null)
                {
                    bool needsVertical = ((Orientation)orientationProp.GetValue(_ownerComponent)!) == Orientation.Horizontal;
                    _actionName = needsVertical ? SR.DesignerShortcutVerticalOrientation : SR.DesignerShortcutHorizontalOrientation;
                }
            }
        }
 
        private void OnOrientationActionClick(object? sender, EventArgs e)
        {
            if (sender is not DesignerVerb verb)
            {
                return;
            }
 
            Orientation orientation = verb.Text.Equals(SR.DesignerShortcutHorizontalOrientation) ? Orientation.Horizontal : Orientation.Vertical;
 
            // switch the text of the orientation action from vertical to horizontal or visa-versa
            _actionName = (orientation == Orientation.Horizontal) ? SR.DesignerShortcutVerticalOrientation : SR.DesignerShortcutHorizontalOrientation;
 
            // get the prop and actually modify the orientation
            PropertyDescriptor? orientationProp = TypeDescriptor.GetProperties(_ownerComponent!)["Orientation"];
            if (orientationProp is not null && ((Orientation)orientationProp.GetValue(_ownerComponent)!) != orientation)
            {
                orientationProp.SetValue(_ownerComponent, orientation);
            }
 
            DesignerActionUIService actionUIService = _owner.GetRequiredService<DesignerActionUIService>();
            actionUIService.Refresh(_ownerComponent);
        }
 
        public override DesignerActionItemCollection GetSortedActionItems() =>
        [
            new DesignerActionVerbItem(new DesignerVerb(_actionName!, OnOrientationActionClick))
        ];
    }
}