2007-03-28 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / ToolStripContentPanel.cs
1 //
2 // ToolStripContentPanel.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 // Copyright (c) 2006 Jonathan Pobst
24 //
25 // Authors:
26 //      Jonathan Pobst (monkey@jpobst.com)
27 //
28
29 #if NET_2_0
30 using System.Drawing;
31 using System.Runtime.InteropServices;
32 using System.Windows.Forms.Layout;
33 using System.ComponentModel;
34
35 namespace System.Windows.Forms
36 {
37         [ComVisible(true)]
38         [ClassInterface(ClassInterfaceType.AutoDispatch)]
39         [DefaultEvent ("Load")]
40         [ToolboxItem (false)]
41         [Docking (DockingBehavior.Never)]
42         [InitializationEvent ("Load")]
43         public class ToolStripContentPanel : Panel
44         {
45                 private ToolStripRenderMode render_mode;
46                 private ToolStripRenderer renderer;
47
48                 #region Public Constructors
49                 public ToolStripContentPanel () : base ()
50                 {
51                         this.renderer = null;
52                         this.render_mode = ToolStripRenderMode.ManagerRenderMode;
53                 }
54                 #endregion
55
56                 #region Public Properties
57                 [Browsable (false)]
58                 [EditorBrowsable (EditorBrowsableState.Never)]
59                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
60                 public override AnchorStyles Anchor {
61                         get { return base.Anchor; }
62                         set { base.Anchor = value; }
63                 }
64                 
65                 [Browsable (false)]
66                 [EditorBrowsable (EditorBrowsableState.Never)]
67                 public override bool AutoScroll {
68                         get { return base.AutoScroll; }
69                         set { base.AutoScroll = value; }
70                 }
71                 
72                 [Browsable (false)]
73                 [EditorBrowsable (EditorBrowsableState.Never)]
74                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
75                 public new Size AutoScrollMargin {
76                         get { return base.AutoScrollMargin; }
77                         set { base.AutoScrollMargin = value; }
78                 }
79                 
80                 [Browsable (false)]
81                 [EditorBrowsable (EditorBrowsableState.Never)]
82                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
83                 public new Size AutoScrollMinSize {
84                         get { return base.AutoScrollMinSize; }
85                         set { base.AutoScrollMinSize = value; }
86                 }
87                 
88                 [Browsable (false)]
89                 [EditorBrowsable (EditorBrowsableState.Never)]
90                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
91                 public override bool AutoSize {
92                         get { return base.AutoSize; }
93                         set { base.AutoSize = value; }
94                 }
95
96                 public override Color BackColor {
97                         get { return base.BackColor; }
98                         set { base.BackColor = value; 
99                                 
100                                 if (this.Parent != null)
101                                         this.Parent.BackColor = value;
102                         }
103                 }
104                 
105                 [Browsable (false)]
106                 [EditorBrowsable (EditorBrowsableState.Never)]
107                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
108                 public new bool CausesValidation {
109                         get { return base.CausesValidation; }
110                         set { base.CausesValidation = value; }
111                 }
112                 
113                 [Browsable (false)]
114                 [EditorBrowsable (EditorBrowsableState.Never)]
115                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
116                 public override DockStyle Dock {
117                         get { return base.Dock; }
118                         set { base.Dock = value; }
119                 }
120                 
121                 [Browsable (false)]
122                 [EditorBrowsable (EditorBrowsableState.Never)]
123                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
124                 public new Point Location {
125                         get { return base.Location; }
126                         set { base.Location = value; }
127                 }
128
129                 [Browsable (false)]
130                 [EditorBrowsable (EditorBrowsableState.Never)]
131                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
132                 public override Size MaximumSize {
133                         get { return base.MaximumSize; }
134                         set { base.MaximumSize = value; }
135                 }
136                 
137                 [Browsable (false)]
138                 [EditorBrowsable (EditorBrowsableState.Never)]
139                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
140                 public override Size MinimumSize {
141                         get { return base.MinimumSize; }
142                         set { base.MinimumSize = value; }
143                 }
144                 
145                 [Browsable (false)]
146                 [EditorBrowsable (EditorBrowsableState.Never)]
147                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
148                 public new string Name {
149                         get { return base.Name; }
150                         set { base.Name = value; }
151                 }
152
153                 [Browsable (false)]
154                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
155                 public ToolStripRenderer Renderer {
156                         get {
157                                 if (this.render_mode == ToolStripRenderMode.ManagerRenderMode)
158                                         return ToolStripManager.Renderer;
159
160                                 return this.renderer;
161                         }
162                         set {
163                                 if (this.renderer != value) {
164                                         this.renderer = value;
165                                         this.render_mode = ToolStripRenderMode.Custom;
166                                         this.OnRendererChanged (EventArgs.Empty);
167                                 }
168                         }
169                 }
170
171                 public ToolStripRenderMode RenderMode {
172                         get { return this.render_mode; }
173                         set {
174                                 if (!Enum.IsDefined (typeof (ToolStripRenderMode), value))
175                                         throw new InvalidEnumArgumentException (string.Format ("Enum argument value '{0}' is not valid for ToolStripRenderMode", value));
176
177                                 if (value == ToolStripRenderMode.Custom && this.renderer == null)
178                                         throw new NotSupportedException ("Must set Renderer property before setting RenderMode to Custom");
179                                 if (value == ToolStripRenderMode.Professional || value == ToolStripRenderMode.System)
180                                         this.renderer = new ToolStripProfessionalRenderer ();
181
182                                 this.render_mode = value;
183                         }
184                 }
185
186                 [Browsable (false)]
187                 [EditorBrowsable (EditorBrowsableState.Never)]
188                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
189                 public new int TabIndex {
190                         get { return base.TabIndex; }
191                         set { base.TabIndex = value; }
192                 }
193                 
194                 [Browsable (false)]
195                 [EditorBrowsable (EditorBrowsableState.Never)]
196                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
197                 public new bool TabStop {
198                         get { return base.TabStop; }
199                         set { base.TabStop = value; }
200                 }
201                 #endregion
202
203                 #region Protected Methods
204                 protected override void OnHandleCreated (EventArgs e)
205                 {
206                         base.OnHandleCreated (e);
207                 }
208
209                 [EditorBrowsable (EditorBrowsableState.Advanced)]
210                 protected virtual void OnLoad (EventArgs e)
211                 {
212                         EventHandler eh = (EventHandler)(Events [LoadEvent]);
213                         if (eh != null)
214                                 eh (this, e);
215                 }
216
217                 [EditorBrowsable (EditorBrowsableState.Advanced)]
218                 protected override void OnPaintBackground (PaintEventArgs pevent)
219                 {
220                         base.OnPaintBackground (pevent);
221                 }
222                 
223                 protected virtual void OnRendererChanged (EventArgs e)
224                 {
225                         EventHandler eh = (EventHandler)(Events [RendererChangedEvent]);
226                         if (eh != null)
227                                 eh (this, e);
228                 }
229                 #endregion
230
231                 #region Public Events
232                 static object LoadEvent = new object ();
233                 static object RendererChangedEvent = new object ();
234
235                 [Browsable (false)]
236                 [EditorBrowsable (EditorBrowsableState.Never)]
237                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
238                 public new event EventHandler AutoSizeChanged {
239                         add { base.AutoSizeChanged += value; }
240                         remove { base.AutoSizeChanged -= value; }
241                 }
242
243                 [Browsable (false)]
244                 [EditorBrowsable (EditorBrowsableState.Never)]
245                 public new event EventHandler CausesValidationChanged {
246                         add { base.CausesValidationChanged += value; }
247                         remove { base.CausesValidationChanged -= value; }
248                 }
249
250                 [Browsable (false)]
251                 [EditorBrowsable (EditorBrowsableState.Never)]
252                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
253                 public new event EventHandler DockChanged {
254                         add { base.DockChanged += value; }
255                         remove { base.DockChanged -= value; }
256                 }
257
258                 public event EventHandler Load {
259                         add { Events.AddHandler (LoadEvent, value); }
260                         remove { Events.RemoveHandler (LoadEvent, value); }
261                 }
262
263                 [Browsable (false)]
264                 [EditorBrowsable (EditorBrowsableState.Never)]
265                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
266                 public new event EventHandler LocationChanged {
267                         add { base.LocationChanged += value; }
268                         remove { base.LocationChanged -= value; }
269                 }
270
271                 public event EventHandler RendererChanged {
272                         add { Events.AddHandler (RendererChangedEvent, value); }
273                         remove { Events.RemoveHandler (RendererChangedEvent, value); }
274                 }
275
276                 [Browsable (false)]
277                 [EditorBrowsable (EditorBrowsableState.Never)]
278                 public new event EventHandler TabIndexChanged {
279                         add { base.TabIndexChanged += value; }
280                         remove { base.TabIndexChanged -= value; }
281                 }
282
283                 [Browsable (false)]
284                 [EditorBrowsable (EditorBrowsableState.Never)]
285                 public new event EventHandler TabStopChanged {
286                         add { base.TabStopChanged += value; }
287                         remove { base.TabStopChanged -= value; }
288                 }
289                 #endregion
290         }
291 }
292 #endif