2008-03-27 Carlos Alberto Cortez <calberto.cortez@gmail.com>
[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                         public Form MdiForm {\r
94                                 get { return form; }\r
95                                 set { form = value; }\r
96                         }\r
97 \r
98                         private void RestoreItemHandler (object sender, EventArgs e)\r
99                         {\r
100                                 form.WindowState = FormWindowState.Normal;\r
101                         }\r
102 \r
103                         private void MinimizeItemHandler (object sender, EventArgs e)\r
104                         {\r
105                                 form.WindowState = FormWindowState.Minimized;\r
106                         }\r
107 \r
108                         private void CloseItemHandler (object sender, EventArgs e)\r
109                         {\r
110                                 form.Close ();\r
111                         }\r
112 \r
113                         private void NextItemHandler (object sender, EventArgs e)\r
114                         {\r
115                                 form.MdiParent.MdiContainer.ActivateNextChild ();\r
116                         }\r
117                 }\r
118                 \r
119                 public class ControlBoxMenuItem : ToolStripMenuItem\r
120                 {\r
121                         private Form form;\r
122                         private ControlBoxType type;\r
123                         \r
124                         public ControlBoxMenuItem (Form ownerForm, ControlBoxType type)\r
125                         {\r
126                                 form = ownerForm;\r
127                                 this.type = type;\r
128                                 \r
129                                 base.AutoSize = false;\r
130                                 base.Alignment = ToolStripItemAlignment.Right;\r
131                                 base.Size = new Size (20, 20);\r
132                                 base.MergeIndex = int.MaxValue;\r
133                                 base.DisplayStyle = ToolStripItemDisplayStyle.None;\r
134 \r
135                                 switch (type) {\r
136                                         case ControlBoxType.Close:\r
137                                                 this.Click += new EventHandler(CloseItemHandler);\r
138                                                 break;\r
139                                         case ControlBoxType.Min:\r
140                                                 this.Click += new EventHandler (MinimizeItemHandler);\r
141                                                 break;\r
142                                         case ControlBoxType.Max:\r
143                                                 this.Click += new EventHandler (RestoreItemHandler);\r
144                                                 break;\r
145                                 }\r
146                         }\r
147 \r
148                         protected override void OnPaint (PaintEventArgs e)\r
149                         {\r
150                                 base.OnPaint (e);\r
151                                 Graphics g = e.Graphics;\r
152                                 \r
153                                 switch (type) {\r
154                                         case ControlBoxType.Close:\r
155                                                 g.FillRectangle (Brushes.Black, 8, 8, 4, 4);\r
156                                                 g.FillRectangle (Brushes.Black, 6, 6, 2, 2);\r
157                                                 g.FillRectangle (Brushes.Black, 6, 12, 2, 2);\r
158                                                 g.FillRectangle (Brushes.Black, 12, 6, 2, 2);\r
159                                                 g.FillRectangle (Brushes.Black, 12, 12, 2, 2);\r
160                                                 g.DrawLine (Pens.Black, 8, 7, 8, 12);\r
161                                                 g.DrawLine (Pens.Black, 7, 8, 12, 8);\r
162                                                 g.DrawLine (Pens.Black, 11, 7, 11, 12);\r
163                                                 g.DrawLine (Pens.Black, 7, 11, 12, 11);\r
164                                                 break;\r
165                                         case ControlBoxType.Min:\r
166                                                 g.DrawLine (Pens.Black, 6, 12, 11, 12);\r
167                                                 g.DrawLine (Pens.Black, 6, 13, 11, 13);\r
168                                                 break;\r
169                                         case ControlBoxType.Max:\r
170                                                 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
171                                                 g.DrawLine (Pens.Black, 7, 6, 12, 6);\r
172                                                 \r
173                                                 g.DrawRectangle (Pens.Black, new Rectangle (5, 8, 6, 5));\r
174                                                 g.DrawLine (Pens.Black, 5, 9, 11, 9);\r
175                                                 \r
176                                                 break;\r
177                                 }\r
178                         }\r
179 \r
180                         public Form MdiForm {\r
181                                 get { return form; }\r
182                                 set { form = value; }\r
183                         }\r
184                         \r
185                         private void RestoreItemHandler (object sender, EventArgs e)\r
186                         {\r
187                                 form.WindowState = FormWindowState.Normal;\r
188                         }\r
189 \r
190                         private void MinimizeItemHandler (object sender, EventArgs e)\r
191                         {\r
192                                 form.WindowState = FormWindowState.Minimized;\r
193                         }\r
194 \r
195                         private void CloseItemHandler (object sender, EventArgs e)\r
196                         {\r
197                                 form.Close ();\r
198                         }\r
199                 }\r
200                 \r
201                 public enum ControlBoxType\r
202                 {\r
203                         Close,\r
204                         Min,\r
205                         Max\r
206                 }\r
207         }\r
208 }\r
209 #endif