Implement the drawing of mixed-mode check boxes
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / Panel.cs
index 092470403acb673d4e6e1226149da888254aaddb..343925d61608d77f6b20e8c625d4bdd2b8d1e120 100644 (file)
@@ -35,6 +35,9 @@ 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 {
                #region Constructors & Destructors
                public Panel () {
@@ -45,6 +48,22 @@ namespace System.Windows.Forms {
                #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 {
@@ -96,29 +115,71 @@ namespace System.Windows.Forms {
                #endregion      // Public Instance Methods
 
                #region Protected Instance Methods
-               protected override void OnResize(EventArgs e) {
-                       base.OnResize (e);
+               protected override void OnResize(EventArgs eventargs) {
+                       base.OnResize (eventargs);
                        Invalidate(true);
                }
 
                #endregion      // Protected Instance Methods
 
                #region Events
+               [Browsable (true)]
+               [EditorBrowsable (EditorBrowsableState.Always)]
+               public new event EventHandler AutoSizeChanged {
+                       add { base.AutoSizeChanged += value; }
+                       remove { base.AutoSizeChanged -= value; }
+               }
+
                [Browsable(false)]
                [EditorBrowsable(EditorBrowsableState.Never)]
-               public event KeyEventHandler            KeyDown;
+               public new event KeyEventHandler KeyDown {
+                       add { base.KeyDown += value; }
+                       remove { base.KeyDown -= value; }
+               }
 
                [Browsable(false)]
                [EditorBrowsable(EditorBrowsableState.Never)]
-               public event KeyPressEventHandler       KeyPress;
+               public new event KeyPressEventHandler KeyPress {
+                       add { base.KeyPress += value; }
+                       remove { base.KeyPress -= value; }
+               }
 
                [Browsable(false)]
                [EditorBrowsable(EditorBrowsableState.Never)]
-               public event KeyEventHandler            KeyUp;
+               public new event KeyEventHandler KeyUp {
+                       add { base.KeyUp += value; }
+                       remove { base.KeyUp -= value; }
+               }
 
                [Browsable(false)]
                [EditorBrowsable(EditorBrowsableState.Never)]
-               public event EventHandler               TextChanged;
+               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
        }
 }