- Implement 2.0 image key feature.
[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                                 this.renderer = value;
164                                 this.OnRendererChanged (EventArgs.Empty);
165                         }
166                 }
167
168                 public ToolStripRenderMode RenderMode {
169                         get { return this.render_mode; }
170                         set {
171                                 if (!Enum.IsDefined (typeof (ToolStripRenderMode), value))
172                                         throw new InvalidEnumArgumentException (string.Format ("Enum argument value '{0}' is not valid for ToolStripRenderMode", value));
173
174                                 if (value == ToolStripRenderMode.Custom && this.renderer == null)
175                                         throw new NotSupportedException ("Must set Renderer property before setting RenderMode to Custom");
176                                 if (value == ToolStripRenderMode.Professional || value == ToolStripRenderMode.System)
177                                         this.renderer = new ToolStripProfessionalRenderer ();
178
179                                 this.render_mode = value;
180                         }
181                 }
182
183                 [Browsable (false)]
184                 [EditorBrowsable (EditorBrowsableState.Never)]
185                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
186                 public new int TabIndex {
187                         get { return base.TabIndex; }
188                         set { base.TabIndex = value; }
189                 }
190                 
191                 [Browsable (false)]
192                 [EditorBrowsable (EditorBrowsableState.Never)]
193                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
194                 public new bool TabStop {
195                         get { return base.TabStop; }
196                         set { base.TabStop = value; }
197                 }
198                 #endregion
199
200                 #region Protected Methods
201                 protected override void OnHandleCreated (EventArgs e)
202                 {
203                         base.OnHandleCreated (e);
204                 }
205
206                 [EditorBrowsable (EditorBrowsableState.Advanced)]
207                 protected virtual void OnLoad (EventArgs e)
208                 {
209                         EventHandler eh = (EventHandler)(Events [LoadEvent]);
210                         if (eh != null)
211                                 eh (this, e);
212                 }
213
214                 [EditorBrowsable (EditorBrowsableState.Advanced)]
215                 protected override void OnPaintBackground (PaintEventArgs pevent)
216                 {
217                         base.OnPaintBackground (pevent);
218                 }
219                 
220                 protected virtual void OnRendererChanged (EventArgs e)
221                 {
222                         EventHandler eh = (EventHandler)(Events [RendererChangedEvent]);
223                         if (eh != null)
224                                 eh (this, e);
225                 }
226                 #endregion
227
228                 #region Public Events
229                 static object LoadEvent = new object ();
230                 static object RendererChangedEvent = new object ();
231
232                 [Browsable (false)]
233                 [EditorBrowsable (EditorBrowsableState.Never)]
234                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
235                 public new event EventHandler AutoSizeChanged {
236                         add { base.AutoSizeChanged += value; }
237                         remove { base.AutoSizeChanged -= value; }
238                 }
239
240                 [Browsable (false)]
241                 [EditorBrowsable (EditorBrowsableState.Never)]
242                 public new event EventHandler CausesValidationChanged {
243                         add { base.CausesValidationChanged += value; }
244                         remove { base.CausesValidationChanged -= value; }
245                 }
246
247                 [Browsable (false)]
248                 [EditorBrowsable (EditorBrowsableState.Never)]
249                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
250                 public new event EventHandler DockChanged {
251                         add { base.DockChanged += value; }
252                         remove { base.DockChanged -= value; }
253                 }
254
255                 public event EventHandler Load {
256                         add { Events.AddHandler (LoadEvent, value); }
257                         remove { Events.RemoveHandler (LoadEvent, value); }
258                 }
259
260                 [Browsable (false)]
261                 [EditorBrowsable (EditorBrowsableState.Never)]
262                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
263                 public new event EventHandler LocationChanged {
264                         add { base.LocationChanged += value; }
265                         remove { base.LocationChanged -= value; }
266                 }
267
268                 public event EventHandler RendererChanged {
269                         add { Events.AddHandler (RendererChangedEvent, value); }
270                         remove { Events.RemoveHandler (RendererChangedEvent, value); }
271                 }
272
273                 [Browsable (false)]
274                 [EditorBrowsable (EditorBrowsableState.Never)]
275                 public new event EventHandler TabIndexChanged {
276                         add { base.TabIndexChanged += value; }
277                         remove { base.TabIndexChanged -= value; }
278                 }
279
280                 [Browsable (false)]
281                 [EditorBrowsable (EditorBrowsableState.Never)]
282                 public new event EventHandler TabStopChanged {
283                         add { base.TabStopChanged += value; }
284                         remove { base.TabStopChanged -= value; }
285                 }
286                 #endregion
287         }
288 }
289 #endif