* ListView.cs: When doing layout calculations don't use a ref
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / MdiControlStrip.cs
1 //\r
2 // MdiControlStrip.cs\r
3 //\r
4 // Permission is hereby granted, free of charge, to any person obtaining\r
5 // a copy of this software and associated documentation files (the\r
6 // "Software"), to deal in the Software without restriction, including\r
7 // without limitation the rights to use, copy, modify, merge, publish,\r
8 // distribute, sublicense, and/or sell copies of the Software, and to\r
9 // permit persons to whom the Software is furnished to do so, subject to\r
10 // the following conditions:\r
11 // \r
12 // The above copyright notice and this permission notice shall be\r
13 // included in all copies or substantial portions of the Software.\r
14 // \r
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
22 //\r
23 // Copyright (c) 2006 Novell, Inc.\r
24 //\r
25 // Authors:\r
26 //      Jonathan Pobst (monkey@jpobst.com)\r
27 //\r
28 \r
29 #if NET_2_0\r
30 using System;\r
31 using System.Runtime.InteropServices;\r
32 using System.ComponentModel;\r
33 using System.Drawing;\r
34 using System.Windows.Forms.Layout;\r
35 using System.Collections.Generic;\r
36 using System.ComponentModel.Design.Serialization;\r
37 \r
38 namespace System.Windows.Forms\r
39 {\r
40         internal class MdiControlStrip\r
41         {\r
42                 public class SystemMenuItem : ToolStripMenuItem\r
43                 {\r
44                         private Form form;\r
45                         \r
46                         public SystemMenuItem (Form ownerForm)\r
47                         {\r
48                                 form = ownerForm;\r
49                                 \r
50                                 base.AutoSize = false;\r
51                                 base.Size = new Size (20, 20);\r
52                                 base.Image = ownerForm.Icon.ToBitmap ();\r
53                                 base.MergeIndex = int.MinValue;\r
54                                 base.DisplayStyle = ToolStripItemDisplayStyle.Image;\r
55 \r
56                                 DropDownItems.Add ("&Restore", null, RestoreItemHandler);\r
57                                 ToolStripMenuItem tsiMove = (ToolStripMenuItem)DropDownItems.Add ("&Move");\r
58                                 tsiMove.Enabled = false;\r
59                                 ToolStripMenuItem tsiSize = (ToolStripMenuItem)DropDownItems.Add ("&Size");\r
60                                 tsiSize.Enabled = false;\r
61                                 DropDownItems.Add ("Mi&nimize", null, MinimizeItemHandler);\r
62                                 ToolStripMenuItem tsiMaximize = (ToolStripMenuItem)DropDownItems.Add ("Ma&ximize");\r
63                                 tsiMaximize.Enabled = false;\r
64                                 DropDownItems.Add ("-");\r
65                                 ToolStripMenuItem tsiClose = (ToolStripMenuItem)DropDownItems.Add ("&Close", null, CloseItemHandler);\r
66                                 tsiClose.ShortcutKeys = Keys.Control | Keys.F4;\r
67                                 DropDownItems.Add ("-");\r
68                                 ToolStripMenuItem tsiNext = (ToolStripMenuItem)DropDownItems.Add ("Nex&t", null, NextItemHandler);\r
69                                 tsiNext.ShortcutKeys = Keys.Control | Keys.F6;\r
70                         }\r
71 \r
72                         protected override void OnPaint (PaintEventArgs e)\r
73                         {\r
74                                 // Can't render without an owner\r
75                                 if (this.Owner == null)\r
76                                         return;\r
77 \r
78                                 // If DropDown.ShowImageMargin is false, we don't display the image\r
79                                 Image draw_image = this.Image;\r
80 \r
81                                 // Figure out where our text and image go\r
82                                 Rectangle text_layout_rect;\r
83                                 Rectangle image_layout_rect;\r
84 \r
85                                 this.CalculateTextAndImageRectangles (out text_layout_rect, out image_layout_rect);\r
86 \r
87                                 if (image_layout_rect != Rectangle.Empty)\r
88                                         this.Owner.Renderer.DrawItemImage (new ToolStripItemImageRenderEventArgs (e.Graphics, this, draw_image, image_layout_rect));\r
89 \r
90                                 return;\r
91                         }\r
92 \r
93                         private void RestoreItemHandler (object sender, EventArgs e)\r
94                         {\r
95                                 form.WindowState = FormWindowState.Normal;\r
96                         }\r
97 \r
98                         private void MinimizeItemHandler (object sender, EventArgs e)\r
99                         {\r
100                                 form.WindowState = FormWindowState.Minimized;\r
101                         }\r
102 \r
103                         private void CloseItemHandler (object sender, EventArgs e)\r
104                         {\r
105                                 form.Close ();\r
106                         }\r
107 \r
108                         private void NextItemHandler (object sender, EventArgs e)\r
109                         {\r
110                                 form.MdiParent.MdiContainer.ActivateNextChild ();\r
111                         }\r
112                 }\r
113                 \r
114                 public class ControlBoxMenuItem : ToolStripMenuItem\r
115                 {\r
116                         private Form form;\r
117                         private ControlBoxType type;\r
118                         \r
119                         public ControlBoxMenuItem (Form ownerForm, ControlBoxType type)\r
120                         {\r
121                                 form = ownerForm;\r
122                                 this.type = type;\r
123                                 \r
124                                 base.AutoSize = false;\r
125                                 base.Alignment = ToolStripItemAlignment.Right;\r
126                                 base.Size = new Size (20, 20);\r
127                                 base.MergeIndex = int.MaxValue;\r
128                                 base.DisplayStyle = ToolStripItemDisplayStyle.None;\r
129 \r
130                                 switch (type) {\r
131                                         case ControlBoxType.Close:\r
132                                                 this.Click += new EventHandler(CloseItemHandler);\r
133                                                 break;\r
134                                         case ControlBoxType.Min:\r
135                                                 this.Click += new EventHandler (MinimizeItemHandler);\r
136                                                 break;\r
137                                         case ControlBoxType.Max:\r
138                                                 this.Click += new EventHandler (RestoreItemHandler);\r
139                                                 break;\r
140                                 }\r
141                         }\r
142 \r
143                         protected override void OnPaint (PaintEventArgs e)\r
144                         {\r
145                                 base.OnPaint (e);\r
146                                 Graphics g = e.Graphics;\r
147                                 \r
148                                 switch (type) {\r
149                                         case ControlBoxType.Close:\r
150                                                 g.FillRectangle (Brushes.Black, 8, 8, 4, 4);\r
151                                                 g.FillRectangle (Brushes.Black, 6, 6, 2, 2);\r
152                                                 g.FillRectangle (Brushes.Black, 6, 12, 2, 2);\r
153                                                 g.FillRectangle (Brushes.Black, 12, 6, 2, 2);\r
154                                                 g.FillRectangle (Brushes.Black, 12, 12, 2, 2);\r
155                                                 g.DrawLine (Pens.Black, 8, 7, 8, 12);\r
156                                                 g.DrawLine (Pens.Black, 7, 8, 12, 8);\r
157                                                 g.DrawLine (Pens.Black, 11, 7, 11, 12);\r
158                                                 g.DrawLine (Pens.Black, 7, 11, 12, 11);\r
159                                                 break;\r
160                                         case ControlBoxType.Min:\r
161                                                 g.DrawLine (Pens.Black, 6, 12, 11, 12);\r
162                                                 g.DrawLine (Pens.Black, 6, 13, 11, 13);\r
163                                                 break;\r
164                                         case ControlBoxType.Max:\r
165                                                 g.DrawLines (Pens.Black, new Point[] {new Point (7, 8), new Point (7, 5), new Point (13, 5), new Point (13, 10), new Point (11, 10)});\r
166                                                 g.DrawLine (Pens.Black, 7, 6, 12, 6);\r
167                                                 \r
168                                                 g.DrawRectangle (Pens.Black, new Rectangle (5, 8, 6, 5));\r
169                                                 g.DrawLine (Pens.Black, 5, 9, 11, 9);\r
170                                                 \r
171                                                 break;\r
172                                 }\r
173                         }\r
174 \r
175                         private void RestoreItemHandler (object sender, EventArgs e)\r
176                         {\r
177                                 form.WindowState = FormWindowState.Normal;\r
178                         }\r
179 \r
180                         private void MinimizeItemHandler (object sender, EventArgs e)\r
181                         {\r
182                                 form.WindowState = FormWindowState.Minimized;\r
183                         }\r
184 \r
185                         private void CloseItemHandler (object sender, EventArgs e)\r
186                         {\r
187                                 form.Close ();\r
188                         }\r
189                 }\r
190                 \r
191                 public enum ControlBoxType\r
192                 {\r
193                         Close,\r
194                         Min,\r
195                         Max\r
196                 }\r
197         }\r
198 }\r
199 #endif