tangxu
2024-11-25 0a2c59670b82d61d3fa79f51a54e82e7bd0134c4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#region Imports
 
using DPumpHydr.WinFrmUI.RLT.Controls;
using DPumpHydr.WinFrmUI.RLT.Enum.Crown;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
#endregion
 
namespace DPumpHydr.WinFrmUI.RLT.Docking.Crown
{
    #region CrownDockTabAreaDocking
 
    internal class CrownDockTabArea
    {
        #region Field Region
 
        private readonly Dictionary<CrownDockContent, CrownDockTab> _tabs = new();
 
        private readonly List<ToolStripMenuItem> _menuItems = new();
        private readonly CrownContextMenuStrip _tabMenu = new();
 
        #endregion
 
        #region Property Region
 
        public DockArea DockArea { get; private set; }
 
        public Rectangle ClientRectangle { get; set; }
 
        public Rectangle DropdownRectangle { get; set; }
 
        public bool DropdownHot { get; set; }
 
        public int Offset { get; set; }
 
        public int TotalTabSize { get; set; }
 
        public bool Visible { get; set; }
 
        public CrownDockTab ClickedCloseButton { get; set; }
 
        #endregion
 
        #region Constructor Region
 
        public CrownDockTabArea(DockArea dockArea)
        {
            DockArea = dockArea;
        }
 
        #endregion
 
        #region Method Region
 
        public void ShowMenu(Control control, Point location)
        {
            _tabMenu.Show(control, location);
        }
 
        public void AddMenuItem(ToolStripMenuItem menuItem)
        {
            _menuItems.Add(menuItem);
            RebuildMenu();
        }
 
        public void RemoveMenuItem(ToolStripMenuItem menuItem)
        {
            _menuItems.Remove(menuItem);
            RebuildMenu();
        }
 
        public ToolStripMenuItem GetMenuItem(CrownDockContent content)
        {
            ToolStripMenuItem menuItem = null;
            foreach (ToolStripMenuItem item in _menuItems)
            {
                if (item.Tag is not CrownDockContent menuContent)
                {
                    continue;
                }
 
                if (menuContent == content)
                {
                    menuItem = item;
                }
            }
 
            return menuItem;
        }
 
        public void RebuildMenu()
        {
            _tabMenu.Items.Clear();
 
            List<ToolStripMenuItem> orderedItems = new();
 
            int index = 0;
            for (int i = 0; i < _menuItems.Count; i++)
            {
                foreach (ToolStripMenuItem item in _menuItems)
                {
                    CrownDockContent content = (CrownDockContent)item.Tag;
                    if (content.Order == index)
                    {
                        orderedItems.Add(item);
                    }
                }
                index++;
            }
 
            foreach (ToolStripMenuItem item in orderedItems)
            {
                _tabMenu.Items.Add(item);
            }
        }
 
        #endregion
    }
 
    #endregion
}