X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem%2FSystem.ComponentModel%2FComponent.cs;h=e370a6aa6834ae328c4237904f1ffb104f5e3012;hb=c39145af2464b19374fac41b252e07480ae1a197;hp=58eb4d0ac31b833bac5f41807d65676a9a877daa;hpb=f201bea0411ccdc5bd4274237581670fcf9b8010;p=mono.git diff --git a/mcs/class/System/System.ComponentModel/Component.cs b/mcs/class/System/System.ComponentModel/Component.cs index 58eb4d0ac31..e370a6aa683 100644 --- a/mcs/class/System/System.ComponentModel/Component.cs +++ b/mcs/class/System/System.ComponentModel/Component.cs @@ -2,45 +2,66 @@ // System.ComponentModel.Component.cs // // Author: -// Miguel de Icaza (miguel@ximian.com) +// Miguel de Icaza (miguel@ximian.com) +// Andreas Nahr (ClassDevelopment@A-SoftTech.com) // // (C) Ximian, Inc. http://www.ximian.com +// (C) 2003 Andreas Nahr +// + +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // using System; +using System.ComponentModel; namespace System.ComponentModel { - // - // Component class. - // - // - // - // Longer description - // - public class Component : MarshalByRefObject, IComponent, IDisposable { + [DesignerCategory ("Component")] + public class Component : MarshalByRefObject, IComponent, IDisposable + { - EventHandlerList event_handlers; - ISite mySite; + private EventHandlerList event_handlers; + private ISite mySite; + private object disposedEvent = new object (); - // - // Component Constructor - // public Component () { + event_handlers = null; } - // - // Get IContainer of this Component - // + [Browsable (false), DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] public IContainer Container { get { + if (mySite == null) + return null; return mySite.Container; } } + [Browsable (false), DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] protected bool DesignMode { get { + if (mySite == null) + return false; return mySite.DesignMode; } } @@ -53,39 +74,28 @@ namespace System.ComponentModel { // determine whether we need to create the object, which increases overhead. // We could put the creation in the contructor, but that would waste space // if it were never used. However, accessing this property would be faster. - if (null == event_handlers) - { + if (null == event_handlers) event_handlers = new EventHandlerList(); - } + return event_handlers; } } + [Browsable (false), DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] public virtual ISite Site { - get { - return mySite; - } - - set { - mySite = value; - } + get { return mySite; } + set { mySite = value; } } - ~Component() + ~Component() { - // FIXME: Not sure this is correct. - Dispose(true); - Disposed(this, EventArgs.Empty); + Dispose (false); } - // - // Dispose resources used by this component - // - public virtual void Dispose () + public void Dispose () { - // FIXME: Not sure this is correct. - Dispose(false); - Disposed(this, EventArgs.Empty); + Dispose (true); + GC.SuppressFinalize (this); } // @@ -101,21 +111,34 @@ namespace System.ComponentModel { // protected virtual void Dispose (bool release_all) { + if (release_all) { + EventHandler eh = (EventHandler) Events [disposedEvent]; + if (eh != null) + eh (this, EventArgs.Empty); + } + mySite = null; } - // - // Implements the IServiceProvider interface - // protected virtual object GetService (Type service) { - // FIXME: Not sure what this should do. - return null; + if (mySite != null) { + return mySite.GetService(service); + } + return null; } - // - // FIXME: Figure out this one. - // - public event EventHandler Disposed; + public override string ToString () + { + if (mySite == null) + return GetType ().ToString (); + return String.Format ("{0} [{1}]", mySite.Name, GetType ().ToString ()); + } + + [Browsable (false), EditorBrowsable (EditorBrowsableState.Advanced)] + public event EventHandler Disposed { + add { Events.AddHandler (disposedEvent, value); } + remove { Events.RemoveHandler (disposedEvent, value); } + } } }