Implement the drawing of mixed-mode check boxes
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / Panel.cs
index b48923a23b0abfad8a1bb3dd39bb58aedc84fc73..343925d61608d77f6b20e8c625d4bdd2b8d1e120 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-// Copyright (c) 2004 Novell, Inc.
+// Copyright (c) 2004-2005 Novell, Inc.
 //
 // Authors:
 //     Jackson Harper (jackson@ximian.com)
 //
 
-// NOT COMPLETE
+// COMPLETE
 
 using System;
+using System.ComponentModel;
+using System.ComponentModel.Design;
 using System.Drawing;
+using System.Runtime.InteropServices;
 
 namespace System.Windows.Forms {
-
+       [DefaultProperty("BorderStyle")]
+       [DefaultEvent("Paint")]
+       [Designer ("System.Windows.Forms.Design.PanelDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
+       [Docking (DockingBehavior.Ask)]
+       [ClassInterface (ClassInterfaceType.AutoDispatch)]
+       [ComVisible (true)]
        public class Panel : ScrollableControl {
-               private BorderStyle border_style;
-
                #region Constructors & Destructors
                public Panel () {
                        base.TabStop = false;
+                       SetStyle(ControlStyles.Selectable, false);
+                       SetStyle (ControlStyles.SupportsTransparentBackColor, true);
                }
                #endregion      // Constructors & Destructors
 
                #region Public Instance Properties
+               [Browsable (true)]
+               [EditorBrowsable (EditorBrowsableState.Always)]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
+               public override bool AutoSize {
+                       get { return base.AutoSize; }
+                       set { base.AutoSize = value; }
+               }
+               
+               [Browsable (true)]
+               [DefaultValue (AutoSizeMode.GrowOnly)]
+               [Localizable (true)]
+               public virtual AutoSizeMode AutoSizeMode {
+                       get { return base.GetAutoSizeMode (); }
+                       set { base.SetAutoSizeMode (value); }
+               }
+
+               [DefaultValue(BorderStyle.None)]
+               [DispId(-504)]
                public BorderStyle BorderStyle {
-                       get { return border_style; }
-                       set {
-                               if (value == border_style)
-                                       return;
-                               border_style = value;
-                               Refresh ();
-                       }
+                       get { return InternalBorderStyle; }
+                       set { InternalBorderStyle = value; }
                }
 
+               [DefaultValue(false)]
                public new bool TabStop {
                        get { return base.TabStop; }
                        set {
@@ -59,6 +81,9 @@ namespace System.Windows.Forms {
                        }
                }
 
+               [Bindable(false)]
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
                public override string Text {
                        get { return base.Text; }
                        set {
@@ -90,16 +115,71 @@ namespace System.Windows.Forms {
                #endregion      // Public Instance Methods
 
                #region Protected Instance Methods
-               protected override void OnResize(EventArgs e) {\r
-                       base.OnResize (e);\r
-               }\r
+               protected override void OnResize(EventArgs eventargs) {
+                       base.OnResize (eventargs);
+                       Invalidate(true);
+               }
 
                #endregion      // Protected Instance Methods
 
                #region Events
-               public event KeyEventHandler            KeyDown;
-               public event KeyPressEventHandler       KeyPress;
-               public event KeyEventHandler            KeyUp;
+               [Browsable (true)]
+               [EditorBrowsable (EditorBrowsableState.Always)]
+               public new event EventHandler AutoSizeChanged {
+                       add { base.AutoSizeChanged += value; }
+                       remove { base.AutoSizeChanged -= value; }
+               }
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
+               public new event KeyEventHandler KeyDown {
+                       add { base.KeyDown += value; }
+                       remove { base.KeyDown -= value; }
+               }
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
+               public new event KeyPressEventHandler KeyPress {
+                       add { base.KeyPress += value; }
+                       remove { base.KeyPress -= value; }
+               }
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
+               public new event KeyEventHandler KeyUp {
+                       add { base.KeyUp += value; }
+                       remove { base.KeyUp -= value; }
+               }
+
+               [Browsable(false)]
+               [EditorBrowsable(EditorBrowsableState.Never)]
+               public new event EventHandler TextChanged {
+                       add { base.TextChanged += value; }
+                       remove { base.TextChanged -= value; }
+               }
+               #endregion
+
+               #region Internal Methods
+               internal override Size GetPreferredSizeCore (Size proposedSize)
+               {
+                       Size retsize = Size.Empty;
+
+                       foreach (Control child in Controls) {
+                               if (child.Dock == DockStyle.Fill) {
+                                       if (child.Bounds.Right > retsize.Width)
+                                               retsize.Width = child.Bounds.Right;
+                               } else if (child.Dock != DockStyle.Top && child.Dock != DockStyle.Bottom && (child.Anchor & AnchorStyles.Right) == 0 && (child.Bounds.Right + child.Margin.Right) > retsize.Width)
+                                       retsize.Width = child.Bounds.Right + child.Margin.Right;
+
+                               if (child.Dock == DockStyle.Fill) {
+                                       if (child.Bounds.Bottom > retsize.Height)
+                                               retsize.Height = child.Bounds.Bottom;
+                               } else if (child.Dock != DockStyle.Left && child.Dock != DockStyle.Right && (child.Anchor & AnchorStyles.Bottom) == 0 && (child.Bounds.Bottom + child.Margin.Bottom) > retsize.Height)
+                                       retsize.Height = child.Bounds.Bottom + child.Margin.Bottom;
+                       }
+
+                       return retsize;
+               }
                #endregion
        }
 }