// 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 {
- // <summary>
- // Component class.
- // </summary>
- //
- // <remarks>
- // Longer description
- // </remarks>
- 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 ();
- // <summary>
- // Component Constructor
- // </summary>
public Component ()
{
event_handlers = null;
}
- // <summary>
- // Get IContainer of this Component
- // </summary>
+ [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;
}
}
// 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)\r
- {
+ 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; }
}
- [MonoTODO]
~Component()
{
- // FIXME: Not sure this is correct.
- Dispose(true);
+ Dispose (false);
}
- // <summary>
- // Dispose resources used by this component
- // </summary>
- [MonoTODO]
- public virtual void Dispose ()
+ public void Dispose ()
{
- // FIXME: Not sure this is correct.
- Dispose(false);
- if (Disposed != null)
- Disposed(this, EventArgs.Empty);
+ Dispose (true);
+ GC.SuppressFinalize (this);
}
// <summary>
// </remarks>
protected virtual void Dispose (bool release_all)
{
+ if (release_all) {
+ EventHandler eh = (EventHandler) Events [disposedEvent];
+ if (eh != null)
+ eh (this, EventArgs.Empty);
+ }
+ mySite = null;
}
- // <summary>
- // Implements the IServiceProvider interface
- // </summary>
- [MonoTODO]
protected virtual object GetService (Type service)
{
- // FIXME: Not sure what this should do.
- return null;
+ if (mySite != null) {
+ return mySite.GetService(service);
+ }
+ return null;
}
- // <summary>
- // FIXME: Figure out this one.
- // </summary>
- [MonoTODO ("Figure this out")]
- 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); }
+ }
}
}