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