X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FManaged.Windows.Forms%2FSystem.Windows.Forms%2FContainerControl.cs;h=276f9baf6f894482157fed955b0d5ea7764b79cd;hb=948dbf8d4581ac17f5420cc4f7dc375e3c502576;hp=55aacaa5dfd70e666ae1d5f7b176ae1293ebb6ac;hpb=a6bce082e4da5a3f144b7ae8974819a88efb6817;p=mono.git diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ContainerControl.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ContainerControl.cs index 55aacaa5dfd..276f9baf6f8 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ContainerControl.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ContainerControl.cs @@ -29,18 +29,28 @@ using System.ComponentModel; using System.ComponentModel.Design; +using System.Drawing; namespace System.Windows.Forms { public class ContainerControl : ScrollableControl, IContainerControl { - private Control active_control; - private Control focused_control; - private Control unvalidated_control; + private Control active_control; + private Control focused_control; + private Control unvalidated_control; +#if NET_2_0 + private SizeF auto_scale_dimensions; + private AutoScaleMode auto_scale_mode; +#endif #region Public Constructors public ContainerControl() { active_control = null; focused_control = null; unvalidated_control = null; + ControlRemoved += new ControlEventHandler(OnControlRemoved); +#if NET_2_0 + auto_scale_dimensions = SizeF.Empty; + auto_scale_mode = AutoScaleMode.None; +#endif } #endregion // Public Constructors @@ -63,6 +73,9 @@ namespace System.Windows.Forms { throw new ArgumentException("Not a child control"); } + if (this is Form) + CheckAcceptButton(); + // Scroll control into view // Let the control know it's selected @@ -70,6 +83,43 @@ namespace System.Windows.Forms { } } +#if NET_2_0 + public SizeF AutoScaleDimensions { + get { + return auto_scale_dimensions; + } + + set { + auto_scale_dimensions = value; + } + } + + public SizeF AutoScaleFactor { + get { + if (auto_scale_dimensions.IsEmpty) { + return new SizeF(1f, 1f); + } + return new SizeF(CurrentAutoScaleDimensions.Width / auto_scale_dimensions.Width, + CurrentAutoScaleDimensions.Height / auto_scale_dimensions.Height); + } + } + + + [MonoTODO("Call scaling method")] + public virtual AutoScaleMode AutoScaleMode { + get { + return auto_scale_mode; + } + set { + if (auto_scale_mode != value) { + auto_scale_mode = value; + + // Trigger scaling + } + } + } +#endif // NET_2_0 + [Browsable (false)] public override BindingContext BindingContext { get { @@ -84,6 +134,36 @@ namespace System.Windows.Forms { } } +#if NET_2_0 + [MonoTODO("Revisit when System.Drawing.GDI.WindowsGraphics.GetTextMetrics is done or come up with other cross-plat avg. font width calc method")] + public SizeF CurrentAutoScaleDimensions { + get { + switch(auto_scale_mode) { + case AutoScaleMode.Dpi: { + Bitmap bmp; + Graphics g; + SizeF size; + + bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + size = new SizeF(g.DpiX, g.DpiY); + g.Dispose(); + bmp.Dispose(); + return size; + } + + case AutoScaleMode.Font: { + // http://msdn2.microsoft.com/en-us/library/system.windows.forms.containercontrol.currentautoscaledimensions(VS.80).aspx + // Implement System.Drawing.GDI.WindowsGraphics.GetTextMetrics first... + break; + } + } + + return auto_scale_dimensions; + } + } +#endif + [Browsable (false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Form ParentForm { @@ -114,8 +194,14 @@ namespace System.Windows.Forms { #region Public Instance Methods [MonoTODO] + static bool ValidateWarned; public bool Validate() { - throw new NotImplementedException(); + //throw new NotImplementedException(); + if (!ValidateWarned) { + Console.WriteLine("ContainerControl.Validate is not yet implemented"); + ValidateWarned = true; + } + return true; } bool IContainerControl.ActivateControl(Control control) { @@ -133,8 +219,11 @@ namespace System.Windows.Forms { base.Dispose(disposing); } - [EditorBrowsable (EditorBrowsableState.Advanced)] - protected override void OnControlRemoved(ControlEventArgs e) { + // LAMESPEC This used to be documented, but it's not in code + // and no longer listed in MSDN2 + // [EditorBrowsable (EditorBrowsableState.Advanced)] + // protected override void OnControlRemoved(ControlEventArgs e) { + private void OnControlRemoved(object sender, ControlEventArgs e) { if (e.Control == this.unvalidated_control) { this.unvalidated_control = null; } @@ -143,7 +232,7 @@ namespace System.Windows.Forms { this.unvalidated_control = null; } - base.OnControlRemoved(e); + // base.OnControlRemoved(e); } protected override void OnCreateControl() { @@ -245,5 +334,10 @@ namespace System.Windows.Forms { base.WndProc(ref m); } #endregion // Protected Instance Methods + + internal virtual void CheckAcceptButton() + { + // do nothing here, only called if it is a Form + } } }