File: System\ComponentModel\Design\DesignerActionPanel.Line.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.Drawing;
using System.Windows.Forms;
 
namespace System.ComponentModel.Design;
 
internal sealed partial class DesignerActionPanel
{
    private abstract class Line
    {
        protected readonly List<Control> AddedControls = [];
 
        protected Line(IServiceProvider serviceProvider, DesignerActionPanel actionPanel)
        {
            ServiceProvider = serviceProvider;
            ActionPanel = actionPanel.OrThrowIfNull();
        }
 
        protected DesignerActionPanel ActionPanel { get; }
 
        public abstract string FocusId
        {
            get;
        }
 
        protected IServiceProvider ServiceProvider { get; }
 
        internal List<Control> GetControls()
        {
            // Tag all the controls with the Line so we know who owns it
            foreach (Control c in AddedControls)
            {
                c.Tag = this;
            }
 
            return AddedControls;
        }
 
        public abstract void Focus();
 
        public abstract Size LayoutControls(int top, int width, bool measureOnly);
 
        public virtual void PaintLine(Graphics g, int lineWidth, int lineHeight)
        {
        }
 
        protected internal virtual bool ProcessDialogKey(Keys keyData) => false;
 
        internal void RemoveControls(ControlCollection controls)
        {
            foreach (Control c in AddedControls)
            {
                c.Tag = null;
                controls.Remove(c);
            }
        }
 
        internal abstract void UpdateActionItem(LineInfo lineInfo, ToolTip toolTip, ref int currentTabIndex);
    }
}