* X11Keyboard.cs: Detect and use the num lock mask.
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / GroupBox.cs
1 //
2 // System.Windows.Forms.GroupBox.cs
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 //
23 // Autors:
24 //              Jordi Mas i Hernandez, jordi@ximian.com
25 //
26 // TODO:
27 //
28 // Copyright (C) Novell Inc., 2004
29 //
30 //
31
32 // COMPLETE
33
34 using System.Drawing;
35 using System.ComponentModel;
36
37 namespace System.Windows.Forms
38 {
39         public class GroupBox : Control
40         {
41                 private FlatStyle flat_style;
42                 private Bitmap bmp_mem = null;
43                 private Graphics dc_mem = null;
44                 private Rectangle display_rectangle = new Rectangle ();
45
46                 #region Events
47                 public new event EventHandler Click;
48                 public new event EventHandler DoubleClick;
49                 public new event KeyEventHandler KeyDown;
50                 public new event KeyPressEventHandler KeyPress;
51                 public new event KeyEventHandler KeyUp;
52                 public new event MouseEventHandler MouseDown;
53                 public new event EventHandler MouseEnter;
54                 public new event EventHandler MouseLeave;
55                 public new event MouseEventHandler MouseMove;
56                 public new event MouseEventHandler MouseUp;
57                 public new event EventHandler TabStopChanged;
58                 #endregion Events
59
60                 public GroupBox ()
61                 {
62                         TabStop = false;
63                         flat_style = FlatStyle.Standard;
64                 }
65
66                 #region Public Properties
67                 public override bool AllowDrop {
68                         get { return base.AllowDrop;  }
69                         set { base.AllowDrop = value; }
70                 }
71
72                 protected override CreateParams CreateParams {
73                         get { return base.CreateParams; }
74                 }
75
76                 protected override Size DefaultSize {
77                         get { return ThemeEngine.Current.GroupBoxDefaultSize;}
78                 }
79
80                 public override Rectangle DisplayRectangle {
81                         get {
82                                 display_rectangle.X = 3;
83                                 display_rectangle.Y = Font.Height + 3;
84                                 display_rectangle.Width = Width - 6;
85                                 display_rectangle.Height = Height - Font.Height - 6;
86                                 return display_rectangle;
87                         }
88                 }
89
90                 public FlatStyle FlatStyle {
91                         get { return flat_style; }
92                         set {
93                                 if (!Enum.IsDefined (typeof (FlatStyle), value))
94                                          new InvalidEnumArgumentException (string.Format("Enum argument value '{0}' is not valid for FlatStyle", value));
95
96                                 if (flat_style == value)
97                                         return;
98                                         
99                                 flat_style = value;
100                                 Refresh ();
101                         }
102                 }
103
104                 public new bool TabStop {
105                         get { return base.TabStop;  }
106                         set { base.TabStop = value; }
107                 }
108
109                 public override string Text {
110                         get { return base.Text; }
111                         set {
112                                 if (base.Text == value)
113                                         return;
114
115                                 base.Text = value;
116                                 Refresh ();
117                         }
118                 }
119
120                 #endregion //Public Properties
121
122                 #region Public Methods
123                 protected override void OnFontChanged (EventArgs e)
124                 {
125                         base.OnFontChanged (e);
126                         Refresh ();
127                 }
128
129                 protected override void OnPaint (PaintEventArgs pevent)
130                 {
131                         Draw ();
132                         pevent.Graphics.DrawImage (ImageBuffer, 0, 0);
133                 }
134
135                 protected override bool ProcessMnemonic (char charCode)
136                 {
137                         return base.ProcessMnemonic(charCode);
138                 }
139
140                 public override string ToString()
141                 {
142                         return GetType ().FullName.ToString () + ", Text: " + Text;
143                 }
144
145                 protected override void WndProc(ref Message m) {
146                         switch ((Msg) m.Msg) {
147                                 case Msg.WM_ERASEBKGND:
148                                         m.Result = (IntPtr)1;
149                                         break;
150                                 default:
151                                         base.WndProc (ref m);
152                                         break;
153                         }
154                 }
155                                 
156                 #endregion Public Methods
157                 
158                 #region Private Methods
159
160                 private void Draw ()
161                 {                       
162                         ThemeEngine.Current.DrawGroupBox (DeviceContext, ClientRectangle, this);                        
163                 }
164                 
165                 #endregion // Private Methods
166         }
167 }