[Monodevelop-patches-list] r2413 - in trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn: . Gui

Chris Toshok toshok at mono-cvs.ximian.com
Fri Apr 1 18:21:10 EST 2005


Author: toshok
Date: 2005-04-01 18:21:09 -0500 (Fri, 01 Apr 2005)
New Revision: 2413

Added:
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/LocalsPad.cs
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/StackTracePad.cs
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/ThreadPad.cs
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/VariablePad.cs
Removed:
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerLocalsPad.cs
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerStackTracePad.cs
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerThreadPad.cs
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerVariablePad.cs
Modified:
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/ChangeLog
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Makefile.am
   trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/MonoDevelopDebugger.addin.xml
Log:
2005-04-01  Chris Toshok  <toshok at ximian.com>

        * Gui/Debugger*Pad.cs: rename to Gui/*Pad.cs (drop the
        "Debugger").
        
        * Makefile.am (FILES): track Pad filename changes.

        * MonoDevelopDebugger.addin.xml: same.

2005-03-31  Chris Toshok  <toshok at ximian.com>



Modified: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/ChangeLog
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/ChangeLog	2005-04-01 23:00:27 UTC (rev 2412)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/ChangeLog	2005-04-01 23:21:09 UTC (rev 2413)
@@ -1,3 +1,12 @@
+2005-04-01  Chris Toshok  <toshok at ximian.com>
+
+	* Gui/Debugger*Pad.cs: rename to Gui/*Pad.cs (drop the
+	"Debugger").
+	
+	* Makefile.am (FILES): track Pad filename changes.
+
+	* MonoDevelopDebugger.addin.xml: same.
+
 2005-03-31  Chris Toshok  <toshok at ximian.com>
 
 	* Gui/DebuggerVariablePad.cs: use Runtime.Gui.Icons and

Deleted: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerLocalsPad.cs
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerLocalsPad.cs	2005-04-01 23:00:27 UTC (rev 2412)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerLocalsPad.cs	2005-04-01 23:21:09 UTC (rev 2413)
@@ -1,65 +0,0 @@
-using System;
-using MonoDevelop.Gui;
-
-namespace MonoDevelop.Debugger
-{
-	public class DebuggerLocalsPad : DebuggerVariablePad, IPadContent
-	{
-
-		public DebuggerLocalsPad () : base (true)
-		{
-		}
-
-		public Gtk.Widget Control {
-			get {
-				return this;
-			}
-		}
-
-		public string Id {
-			get { return "MonoDevelop.Debugger.DebuggerLocalsPad"; }
-		}
-
-		public string DefaultPlacement {
-			get { return "Bottom"; }
-		}
-
-		public string Title {
-			get {
-				return "Locals";
-			}
-		}
-
-		public string Icon {
-			get {
-				return MonoDevelop.Gui.Stock.OutputIcon;
-			}
-		}
-
-		public void RedrawContent ()
-		{
-			UpdateDisplay ();
-		}
-
-		public void BringToFront ()
-		{
-		}
-
-                protected virtual void OnTitleChanged(EventArgs e)
-                {
-                        if (TitleChanged != null) {
-                                TitleChanged(this, e);
-                        }
-                }
-                protected virtual void OnIconChanged(EventArgs e)
-                {
-                        if (IconChanged != null) {
-                                IconChanged(this, e);
-                        }
-                }
-                public event EventHandler TitleChanged;
-                public event EventHandler IconChanged;
-
-
-	}
-}

Deleted: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerStackTracePad.cs
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerStackTracePad.cs	2005-04-01 23:00:27 UTC (rev 2412)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerStackTracePad.cs	2005-04-01 23:21:09 UTC (rev 2413)
@@ -1,145 +0,0 @@
-using GLib;
-using Gtk;
-using GtkSharp;
-using System;
-using System.IO;
-using System.Collections;
-using System.Globalization;
-using System.Runtime.InteropServices;
-using Mono.Debugger;
-using Mono.Debugger.Languages;
-
-using MonoDevelop.Core.Services;
-using MonoDevelop.Services;
-using MonoDevelop.Gui;
-
-namespace MonoDevelop.Debugger
-{
-	public class DebuggerStackTracePad : Gtk.ScrolledWindow, IPadContent
-	{
-		StackFrame current_frame;
-
-		Gtk.TreeView tree;
-		Gtk.TreeStore store;
-
-		public DebuggerStackTracePad ()
-		{
-			this.ShadowType = ShadowType.In;
-
-			store = new TreeStore (typeof (string));
-
-			tree = new TreeView (store);
-			tree.RulesHint = true;
-			tree.HeadersVisible = true;
-
-			TreeViewColumn FrameCol = new TreeViewColumn ();
-			CellRenderer FrameRenderer = new CellRendererText ();
-			FrameCol.Title = "Frame";
-			FrameCol.PackStart (FrameRenderer, true);
-			FrameCol.AddAttribute (FrameRenderer, "text", 0);
-			FrameCol.Resizable = true;
-			FrameCol.Alignment = 0.0f;
-			tree.AppendColumn (FrameCol);
-
-			Add (tree);
-			ShowAll ();
-
-			Runtime.DebuggingService.PausedEvent += new EventHandler (OnPausedEvent);
-			Runtime.DebuggingService.ResumedEvent += new EventHandler (OnResumedEvent);
-			Runtime.DebuggingService.StoppedEvent += new EventHandler (OnStoppedEvent);
-		}
-
-		public void UpdateDisplay ()
-		{
-			if ((current_frame == null) || (current_frame.Method == null))
-				return;
-
-			string[] trace = Runtime.DebuggingService.Backtrace;
-
-			TreeIter it;
-			if (!store.GetIterFirst (out it)) {
-				foreach (string frame in trace) {
-					store.Append (out it);
-					store.SetValue (it, 0, frame);
-				}
-			}
-			else {
-				for (int i = 0; i < trace.Length; i ++) {
-					store.SetValue (it, 0, trace[i]);
-					if (i < trace.Length - 1 && !store.IterNext (ref it))
-						store.Append (out it);
-				}
-				/* clear any remaining rows */
-				if (store.IterNext (ref it))
-					do { } while (store.Remove (ref it));
-			}
-		}
-
-		protected void OnStoppedEvent (object o, EventArgs args)
-		{
-			UpdateDisplay ();
-		}
-
-		protected void OnResumedEvent (object o, EventArgs args)
-		{
-			UpdateDisplay ();
-		}
-
-		protected void OnPausedEvent (object o, EventArgs args)
-		{
-			current_frame = (StackFrame)Runtime.DebuggingService.CurrentFrame;
-			UpdateDisplay ();
-		}
-
-		public Gtk.Widget Control {
-			get {
-				return this;
-			}
-		}
-
-		public string Id {
-			get { return "MonoDevelop.Debugger.DebuggerStackTracePad"; }
-		}
-
-		public string DefaultPlacement {
-			get { return "Bottom"; }
-		}
-
-		public string Title {
-			get {
-				return "Call Stack";
-			}
-		}
-
-		public string Icon {
-			get {
-				return MonoDevelop.Gui.Stock.OutputIcon;
-			}
-		}
-
-		public void RedrawContent ()
-		{
-			UpdateDisplay ();
-		}
-
-		public void BringToFront ()
-		{
-		}
-
-                protected virtual void OnTitleChanged(EventArgs e)
-                {
-                        if (TitleChanged != null) {
-                                TitleChanged(this, e);
-                        }
-                }
-                protected virtual void OnIconChanged(EventArgs e)
-                {
-                        if (IconChanged != null) {
-                                IconChanged(this, e);
-                        }
-                }
-                public event EventHandler TitleChanged;
-                public event EventHandler IconChanged;
-	  
-	}
-}

Deleted: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerThreadPad.cs
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerThreadPad.cs	2005-04-01 23:00:27 UTC (rev 2412)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerThreadPad.cs	2005-04-01 23:21:09 UTC (rev 2413)
@@ -1,217 +0,0 @@
-using GLib;
-using Gtk;
-using GtkSharp;
-using System;
-using System.IO;
-using System.Collections;
-using System.Globalization;
-using System.Runtime.InteropServices;
-using Mono.Debugger;
-using Mono.Debugger.Languages;
-
-using MonoDevelop.Core.Services;
-using MonoDevelop.Services;
-using MonoDevelop.Gui;
-
-namespace MonoDevelop.Debugger
-{
-	public class DebuggerThreadPad : Gtk.ScrolledWindow, IPadContent
-	{
-		Gtk.TreeView tree;
-		Gtk.TreeStore store;
-		Hashtable thread_rows;
-
-		public DebuggerThreadPad ()
-		{
-			thread_rows = new Hashtable ();
-
-			this.ShadowType = ShadowType.In;
-
-			store = new TreeStore (typeof (int),
-					       typeof (int),
-					       typeof (string),
-					       typeof (string));
-
-			tree = new TreeView (store);
-			tree.RulesHint = true;
-			tree.HeadersVisible = true;
-
-			TreeViewColumn Col;
-			CellRenderer ThreadRenderer;
-
-			Col = new TreeViewColumn ();
-			ThreadRenderer = new CellRendererText ();
-			Col.Title = "Id";
-			Col.PackStart (ThreadRenderer, true);
-			Col.AddAttribute (ThreadRenderer, "text", 0);
-			Col.Resizable = true;
-			Col.Alignment = 0.0f;
-			tree.AppendColumn (Col);
-
-			Col = new TreeViewColumn ();
-			ThreadRenderer = new CellRendererText ();
-			Col.Title = "PID";
-			Col.PackStart (ThreadRenderer, true);
-			Col.AddAttribute (ThreadRenderer, "text", 1);
-			Col.Resizable = true;
-			Col.Alignment = 0.0f;
-			tree.AppendColumn (Col);
-
-			Col = new TreeViewColumn ();
-			ThreadRenderer = new CellRendererText ();
-			Col.Title = "State";
-			Col.PackStart (ThreadRenderer, true);
-			Col.AddAttribute (ThreadRenderer, "text", 2);
-			Col.Resizable = true;
-			Col.Alignment = 0.0f;
-			tree.AppendColumn (Col);
-
-			Col = new TreeViewColumn ();
-			ThreadRenderer = new CellRendererText ();
-			Col.Title = "Current Location";
-			Col.PackStart (ThreadRenderer, true);
-			Col.AddAttribute (ThreadRenderer, "text", 3);
-			Col.Resizable = true;
-			Col.Alignment = 0.0f;
-			tree.AppendColumn (Col);
-
-			Add (tree);
-			ShowAll ();
-
-			((DebuggingService)Runtime.DebuggingService).ThreadStateEvent += new EventHandler (OnThreadEvent);
-		}
-
-		void AddThread (Process thread)
-		{
-			TreeIter iter;
-			store.Append (out iter);
-			store.SetValue (iter, 0, new GLib.Value (thread.ID));
-			store.SetValue (iter, 1, new GLib.Value (thread.PID));
-			store.SetValue (iter, 2, new GLib.Value (thread.State.ToString()));
-			if (thread.IsStopped)
-				store.SetValue (iter, 3, new GLib.Value (thread.GetBacktrace().Frames[0].SourceAddress.Name));
-			else
-				store.SetValue (iter, 3, new GLib.Value (""));
-			thread_rows.Add (thread, new TreeRowReference (store, store.GetPath (iter)));
-		}
-
-		void UpdateThread (Process thread)
-		{
-			TreeRowReference row = (TreeRowReference)thread_rows[thread];
-			TreeIter iter;
-
-			if (row != null && store.GetIter (out iter, row.Path)) {
-				if (thread.ID != (int)store.GetValue (iter, 0))
-					store.SetValue (iter, 0, thread.ID);
-				if (thread.PID != (int)store.GetValue (iter, 1))
-					store.SetValue (iter, 1, thread.PID);
-				if (thread.State.ToString() != (string)store.GetValue (iter, 2))
-					store.SetValue (iter, 2, thread.State.ToString());
-
-				string location;
-				if (thread.IsStopped)
-					location = thread.GetBacktrace().Frames[0].SourceAddress.Name;
-				else
-					location = "";
-
-				if (location != (string)store.GetValue (iter, 3))
-					store.SetValue (iter, 3, location);
-			}
-			else {
-				AddThread (thread);
-			}
-		}
-
-		void RemoveThread (Process thread)
-		{
-			TreeRowReference row = (TreeRowReference)thread_rows[thread];
-			TreeIter iter;
-
-			if (row != null && store.GetIter (out iter, row.Path))
-				store.Remove (ref iter);
-
-			thread_rows.Remove (thread);
-		}
-
-		public void UpdateDisplay ()
-		{
-			Hashtable threads_to_remove = new Hashtable();
-
-			foreach (Process thread in thread_rows.Keys) {
-				threads_to_remove.Add (thread, thread);
-			}
-
-			foreach (Process t in ((DebuggingService)Runtime.DebuggingService).Threads) {
-				if (!t.IsDaemon) {
-					UpdateThread (t);
-					threads_to_remove.Remove (t);
-				}
-			}
-
-			foreach (Process t in threads_to_remove.Keys) {
-				RemoveThread (t);
-			}
-		}
-
-		public void CleanDisplay ()
-		{
-			UpdateDisplay ();
-		}
-
-		public void RedrawContent ()
-		{
-			UpdateDisplay ();
-		}
-
-		public void BringToFront ()
-		{
-		}
-
-		protected void OnThreadEvent (object o, EventArgs args)
-		{
-			UpdateDisplay ();
-		}
-
-		public Gtk.Widget Control {
-			get {
-				return this;
-			}
-		}
-
-		public string Id {
-			get { return "MonoDevelop.Debugger.DebuggerThreadPad"; }
-		}
-
-		public string DefaultPlacement {
-			get { return "Bottom"; }
-		}
-
-		public string Title {
-			get {
-				return "Threads";
-			}
-		}
-
-		public string Icon {
-			get {
-				return MonoDevelop.Gui.Stock.OutputIcon;
-			}
-		}
-
-                protected virtual void OnTitleChanged(EventArgs e)
-                {
-                        if (TitleChanged != null) {
-                                TitleChanged(this, e);
-                        }
-                }
-                protected virtual void OnIconChanged(EventArgs e)
-                {
-                        if (IconChanged != null) {
-                                IconChanged(this, e);
-                        }
-                }
-                public event EventHandler TitleChanged;
-                public event EventHandler IconChanged;
-	  
-	}
-}

Deleted: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerVariablePad.cs
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerVariablePad.cs	2005-04-01 23:00:27 UTC (rev 2412)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerVariablePad.cs	2005-04-01 23:21:09 UTC (rev 2413)
@@ -1,660 +0,0 @@
-using GLib;
-using Gtk;
-using GtkSharp;
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Collections;
-using System.Globalization;
-using System.Text;
-using System.Reflection;
-using System.Runtime.InteropServices;
-using Mono.Debugger;
-using Mono.Debugger.Languages;
-
-using Stock = MonoDevelop.Gui.Stock;
-using MonoDevelop.Core.Services;
-using MonoDevelop.Internal.Parser;
-using MonoDevelop.Services;
-
-namespace MonoDevelop.Debugger
-{
-	public class DebuggerVariablePad : Gtk.ScrolledWindow
-	{
-		Mono.Debugger.StackFrame current_frame;
-
-		Hashtable variable_rows;
-		Hashtable iters;
-
-		Gtk.TreeView tree;
-		Gtk.TreeStore store;
-		bool is_locals_display;
-
-		internal const int NAME_COL = 0;
-		internal const int VALUE_COL = 1;
-		internal const int TYPE_COL = 2;
-		internal const int RAW_VIEW_COL = 3;
-		internal const int PIXBUF_COL = 4;
-
-		public DebuggerVariablePad (bool is_locals_display)
-		{
-			this.ShadowType = ShadowType.In;
-
-			this.is_locals_display = is_locals_display;
-
-			variable_rows = new Hashtable();
-			iters = new Hashtable();
-
-			store = new TreeStore (typeof (string),
-					       typeof (string),
-			                       typeof (string),
-					       typeof (bool),
-					       typeof (Gdk.Pixbuf));
-
-			tree = new TreeView (store);
-			tree.RulesHint = true;
-			tree.HeadersVisible = true;
-
-			TreeViewColumn NameCol = new TreeViewColumn ();
-			CellRenderer NameRenderer = new CellRendererText ();
-			CellRenderer IconRenderer = new CellRendererPixbuf ();
-			NameCol.Title = "Name";
-			NameCol.PackStart (IconRenderer, false);
-			NameCol.PackStart (NameRenderer, true);
-			NameCol.AddAttribute (IconRenderer, "pixbuf", PIXBUF_COL);
-			NameCol.AddAttribute (NameRenderer, "text", NAME_COL);
-			NameCol.Resizable = true;
-			NameCol.Alignment = 0.0f;
-			tree.AppendColumn (NameCol);
-
-			TreeViewColumn ValueCol = new TreeViewColumn ();
-			CellRenderer ValueRenderer = new CellRendererText ();
-			ValueCol.Title = "Value";
-			ValueCol.PackStart (ValueRenderer, true);
-			ValueCol.AddAttribute (ValueRenderer, "text", VALUE_COL);
-			ValueCol.Resizable = true;
-			NameCol.Alignment = 0.0f;
-			tree.AppendColumn (ValueCol);
-
-			TreeViewColumn TypeCol = new TreeViewColumn ();
-			CellRenderer TypeRenderer = new CellRendererText ();
-			TypeCol.Title = "Type";
-			TypeCol.PackStart (TypeRenderer, true);
-			TypeCol.AddAttribute (TypeRenderer, "text", TYPE_COL);
-			TypeCol.Resizable = true;
-			NameCol.Alignment = 0.0f;
-			tree.AppendColumn (TypeCol);
-
-			tree.TestExpandRow += new TestExpandRowHandler (TestExpandRow);
-
-			Add (tree);
-			ShowAll ();
-
-			Runtime.DebuggingService.PausedEvent += new EventHandler (OnPausedEvent);
-			Runtime.DebuggingService.StoppedEvent += new EventHandler (OnStoppedEvent);
-		}
-
-		bool InsertArrayChildren (TreeIter parent, ITargetArrayObject array)
-		{
-			bool inserted = false;
-
-			for (int i = array.LowerBound; i < array.UpperBound; i++) {
-
-				inserted = true;
-
-				ITargetObject elt = array [i];
-				if (elt == null)
-					continue;
-
-				TreeIter iter = store.Append (parent);
-				AddObject (i.ToString (), "" /* XXX */, elt, iter);
-			}
-
-			return inserted;
-		}
-
-		bool InsertStructMember (TreeIter parent, ITargetStructObject sobj, ITargetMemberInfo member, bool is_field)
-		{
-			bool inserted = false;
-
-			string icon_name = GetIcon (member);
-
-#if NET_2_0
-			DebuggerBrowsableAttribute battr = GetDebuggerBrowsableAttribute (member);
-			if (battr != null) {
-				TreeIter iter;
-
-				switch (battr.State) {
-				case DebuggerBrowsableState.Never:
-					// don't display it at all
-					continue;
-				case DebuggerBrowsableState.Collapsed:
-					// the default behavior for the debugger (c&p from above)
-					iter = store.Append (parent);
-					AddObject (member.Name, icon_name, is_field ? sobj.GetField (member.Index) : sobj.GetProperty (member.Index),
-						   iter);
-					inserted = true;
-					break;
-				case DebuggerBrowsableState.Expanded:
-					// add it as in the Collapsed case...
-					iter = store.Append (parent);
-					AddObject (member.Name, icon_name, is_field ? sobj.GetField (member.Index) : sobj.GetProperty (member.Index),
-						   iter);
-					inserted = true;
-					// then expand the row
-					tree.ExpandRow (store.GetPath (iter), false);
-					break;
-				case DebuggerBrowsableState.RootHidden:
-					ITargetObject member_obj = is_field ? sobj.GetField (member.Index) : sobj.GetProperty (member.Index);
-
-					if (member_obj != null) {
-						switch (member_obj.TypeInfo.Type.Kind) {
-						case TargetObjectKind.Array:
-							iter = store.Append (parent);
-							// handle arrays normally, should check how vs2005 does this.
-							AddObject (member.Name, icon_name, member_obj, iter);
-							inserted = true;
-							break;
-						case TargetObjectKind.Class:
-							try {
-								inserted = InsertClassChildren (parent, (ITargetClassObject)member_obj, false);
-							}
-							catch {
-								// what about this case?  where the member is possibly
-								// uninitialized, do we try to add it later?
-							}
-							break;
-						case TargetObjectKind.Struct:
-							try {
-								inserted = InsertStructChildren (parent, (ITargetStructObject)member_obj, false);
-							}
-							catch {
-								// what about this case?  where the member is possibly
-								// uninitialized, do we try to add it later?
-							}
-							break;
-						default:
-							// nothing
-							break;
-						}
-					}
-					break;
-				}
-			}
-			else {
-#endif
-				TreeIter iter = store.Append (parent);
-				AddObject (member.Name, icon_name, is_field ? sobj.GetField (member.Index) : sobj.GetProperty (member.Index),
-					   iter);
-				inserted = true;
-#if NET_2_0
-			}
-#endif
-
-			return inserted;
-		}
-
-#if NET_2_0
-		bool InsertProxyChildren (DebuggingService dbgr, DebuggerTypeProxyAttribute pattr, TreeIter parent, ITargetStructObject sobj)
-		{
-			Mono.Debugger.StackFrame frame = dbgr.MainThread.CurrentFrame;
-	 		ITargetStructType proxy_type = frame.Language.LookupType (frame, pattr.ProxyTypeName) as ITargetStructType;
-			if (proxy_type == null)
-				proxy_type = frame.Language.LookupType (frame,
-									sobj.Type.Name + "+" + pattr.ProxyTypeName) as ITargetStructType;
-			if (proxy_type != null) {
-				string name = String.Format (".ctor({0})", sobj.Type.Name);
-				ITargetMethodInfo method = null;
-
-				foreach (ITargetMethodInfo m in proxy_type.Constructors) {
-					if (m.FullName == name)
-						method = m;
-				}
-
-				if (method != null) {
-					ITargetFunctionObject ctor = proxy_type.GetConstructor (frame, method.Index);
-					ITargetObject[] args = new ITargetObject[1];
-					args[0] = sobj;
-
-					ITargetStructObject proxy_obj = ctor.Type.InvokeStatic (frame, args, false) as ITargetStructObject;
-
-					if (proxy_obj != null) {
-						foreach (ITargetPropertyInfo prop in proxy_obj.Type.Properties) {
-							InsertStructMember (parent, proxy_obj, prop, false);
-						}
-
-						TreeIter iter = store.Append (parent);
-						store.SetValue (iter, NAME_COL, "Raw View");
-						store.SetValue (iter, RAW_VIEW_COL, true);
-
-						Gdk.Pixbuf icon = Runtime.Gui.Resources.GetIcon (Stock.Class, Gtk.IconSize.Menu);
-						if (icon != null)
-							store.SetValue (iter, PIXBUF_COL, icon);
-
-						iters.Remove (iter);
-						AddPlaceholder (sobj, iter);
-
-						return true;
-					}
-				}
-			}
-
-			return false;
-		}
-#endif
-
-		bool InsertStructChildren (TreeIter parent, ITargetStructObject sobj, bool raw_view)
-		{
-			bool inserted = false;
-
-#if NET_2_0
-			if (!raw_view) {
-				DebuggingService dbgr = (DebuggingService)Runtime.DebuggingService;
-				DebuggerTypeProxyAttribute pattr = GetDebuggerTypeProxyAttribute (dbgr, sobj);
-
-				if (pattr != null) {
-					if (InsertProxyChildren (dbgr, pattr, parent, sobj))
-						inserted = true;
-				}
-			}
-#endif
-
-			foreach (ITargetFieldInfo field in sobj.Type.Fields) {
-				if (InsertStructMember (parent, sobj, field, true))
-					inserted = true;
-			}
-
-			foreach (ITargetPropertyInfo prop in sobj.Type.Properties) {
-				if (InsertStructMember (parent, sobj, prop, false))
-					inserted = true;
-			}
-
-			return inserted;
-		}
-
-		bool InsertClassChildren (TreeIter parent, ITargetClassObject sobj, bool raw_view)
-		{
-			bool inserted = false;
-
-			if (sobj.Type.HasParent) {
-				TreeIter iter = store.Append (parent);
-				AddObject ("<parent>", Stock.Class, sobj.Parent, iter);
-				inserted = true;
-			}
-
-			if (InsertStructChildren (parent, sobj, raw_view))
-				inserted = true;
-
-			return inserted;
-		}
-
-		void InsertMessage (TreeIter parent, string message)
-		{
-			TreeIter child;
-			if (store.IterChildren (out child, parent)) {
-				while (!(child.Equals (Gtk.TreeIter.Zero)) && (child.Stamp != 0))
-					store.Remove (ref child);
-			}
-
-			TreeIter iter = store.Append (parent);
-			store.SetValue (iter, VALUE_COL, message);
-		}
-
-		void TestExpandRow (object o, TestExpandRowArgs args)
-		{
-			bool inserted = false;
-
-			ITargetObject obj = (ITargetObject) iters [args.Iter];
-
-			TreeIter child;
-			if (store.IterChildren (out child, args.Iter)) {
-				while (!(child.Equals (Gtk.TreeIter.Zero)) && (child.Stamp != 0))
-					store.Remove (ref child);
-			}
-
-			if (obj == null) {
-				child = store.Append (args.Iter);
-				return;
-			}
-
-			switch (obj.TypeInfo.Type.Kind) {
-			case TargetObjectKind.Array:
-				ITargetArrayObject array = (ITargetArrayObject) obj;
-				try {
-					inserted = InsertArrayChildren (args.Iter, array);
-				} catch {
-					InsertMessage (args.Iter, "<can't display array>");
-					inserted = true;
-				}
-				if (!inserted)
-					InsertMessage (args.Iter, "<empty array>");
-				break;
-
-			case TargetObjectKind.Class:
-				ITargetClassObject cobj = (ITargetClassObject) obj;
-				try {
-					bool raw_view = (bool)store.GetValue (args.Iter, RAW_VIEW_COL);
-					inserted = InsertClassChildren (args.Iter, cobj, raw_view);
-				} catch (Exception e) {
-				  Console.WriteLine (e);
-					InsertMessage (args.Iter, "<can't display class>");
-					inserted = true;
-				}
-				if (!inserted)
-					InsertMessage (args.Iter, "<empty class>");
-				break;
-
-			case TargetObjectKind.Struct:
-				ITargetStructObject sobj = (ITargetStructObject) obj;
-				try {
-					bool raw_view = (bool)store.GetValue (args.Iter, RAW_VIEW_COL);
-					inserted = InsertStructChildren (args.Iter, sobj, raw_view);
-				} catch {
-					InsertMessage (args.Iter, "<can't display struct>");
-					inserted = true;
-				}
-				if (!inserted)
-					InsertMessage (args.Iter, "<empty struct>");
-				break;
-
-			default:
-				InsertMessage (args.Iter, "<unknown object>");
-				break;
-			}
-		}
-
-		void AddPlaceholder (ITargetObject obj, TreeIter parent)
-		{
-			if (obj.TypeInfo.Type.Kind == TargetObjectKind.Array) {
-				ITargetArrayObject array = (ITargetArrayObject) obj;
-				if (array.LowerBound == array.UpperBound)
-					return;
-			}
-
-			store.Append (parent);
-			iters.Add (parent, obj);
-		}
-
-		string GetObjectValueString (ITargetObject obj)
-		{
-			if (obj == null) {
-				return "null";
-			}
-
-			switch (obj.TypeInfo.Type.Kind) {
-			case TargetObjectKind.Fundamental:
-				object contents = ((ITargetFundamentalObject) obj).Object;
-				return contents.ToString ();
-
-			case TargetObjectKind.Array:
-				ITargetArrayObject array = (ITargetArrayObject) obj;
-				if (array.LowerBound == array.UpperBound && array.LowerBound == 0)
-					return "[]";
-				else
-					return "";
-
-			case TargetObjectKind.Struct:
-			case TargetObjectKind.Class:
-				try {
-#if NET_2_0
-					DebuggingService dbgr = (DebuggingService)Runtime.DebuggingService;
-					DebuggerDisplayAttribute dattr = GetDebuggerDisplayAttribute (dbgr, obj);
-					if (dattr != null) {
-						return dbgr.AttributeHandler.EvaluateDebuggerDisplay (obj, dattr.Value);
-					}
-					else {
-#endif
-						// call the object's ToString() method.
-						return ((ITargetStructObject)obj).PrintObject();
-#if NET_2_0
-					}
-#endif
-				}
-				catch (Exception e) {
-				  //Console.WriteLine ("getting object value failed: {0}", e);
-					return "";
-				}
-			default:
-				return "";
-			}
-		}
-
-		void AddObject (string name, string icon_name, ITargetObject obj, TreeIter iter)
-		{
-			store.SetValue (iter, NAME_COL, name);
-			store.SetValue (iter, VALUE_COL, GetObjectValueString (obj));
-			store.SetValue (iter, TYPE_COL,
-					obj == null ? "" : Runtime.Ambience.CurrentAmbience.GetIntrinsicTypeName (obj.TypeInfo.Type.Name));
-			Gdk.Pixbuf icon = Runtime.Gui.Resources.GetIcon (icon_name, Gtk.IconSize.Menu);
-			if (icon != null)
-				store.SetValue (iter, PIXBUF_COL, icon);
-			if (obj != null)
-				AddPlaceholder (obj, iter);
-		}
-
-		string GetIcon (ITargetObject obj)
-		{
-			string icon = "";
-
-			if (obj.TypeInfo.Type.TypeHandle is Type)
-				icon = Runtime.Gui.Icons.GetIcon ((Type)obj.TypeInfo.Type.TypeHandle);
-
-			return icon;
-		}
-
-		string GetIcon (ITargetMemberInfo member)
-		{
-			string icon = "";
-
-			if (member.Handle is PropertyInfo)
-				icon = Runtime.Gui.Icons.GetIcon ((PropertyInfo)member.Handle);
-			else if (member.Handle is FieldInfo)
-				icon = Runtime.Gui.Icons.GetIcon ((FieldInfo)member.Handle);
-
-			return icon;
-		}
-
-		void UpdateVariableChildren (IVariable variable, ITargetObject obj, TreePath path, TreeIter iter)
-		{
-			bool expanded = tree.GetRowExpanded (path);
-			TreeIter citer;
-
-			if (!expanded) {
-
-				/* we aren't expanded, just remove all
-				 * children and add the object back
-				 * (since it might be a different
-				 * object now) */
-
-				if (store.IterChildren (out citer, iter))
-					while (store.Remove (ref citer)) ;
-				iters.Remove (iter);
-
-				AddPlaceholder (obj, iter);
-			}
-			else {
-				/* in a perfect world, we'd just iterate
-				 * over the stuff we're showing and update
-				 * it.  for now, just remove all rows and
-				 * re-add them. */
-
-				if (store.IterChildren (out citer, iter))
-					while (store.Remove (ref citer)) ;
-
-				iters.Remove (iter);
-
-				AddObject (variable.Name, GetIcon (obj), obj, iter);
-
-				tree.ExpandRow (path, false);
-			}
-		}
-
-		void UpdateVariable (IVariable variable)
-		{
-			TreeRowReference row = (TreeRowReference)variable_rows[variable];
-
-			if (row == null) {
-				/* the variable isn't presently displayed */
-
-				if (!variable.IsAlive (current_frame.TargetAddress))
-					/* it's not displayed and not alive, just return */
-					return;
-
-				AddVariable (variable);
-			}
-			else {
-				/* the variable is presently displayed */
-
-				// XXX we need a obj.IsValid check in this branch
-
-				if (!variable.IsAlive (current_frame.TargetAddress)) {
-					/* it's in the display but no longer alive.  remove it */
-					RemoveVariable (variable);
-					return;
-				}
-
-				/* it's still alive - make sure the display is up to date */
-				TreeIter iter;
-				if (store.GetIter (out iter, row.Path)) {
-					try {
-						ITargetObject obj = variable.GetObject (current_frame);
-
-						/* make sure the Value column is correct */
-						string current_value = (string)store.GetValue (iter, VALUE_COL);
-						string new_value = GetObjectValueString (obj);
-						if (current_value != new_value)
-							store.SetValue (iter, VALUE_COL, new_value);
-
-						/* update the children */
-						UpdateVariableChildren (variable, obj, row.Path, iter);
-
-					} catch (Exception e) {
-						Console.WriteLine ("can't update variable: {0} {1}", variable, e);
-						store.SetValue (iter, VALUE_COL, "");
-					}
-				}
-			}
-		}
-
-		void AddVariable (IVariable variable)
-		{
-			try {
-				/* it's alive, add it to the display */
-
-				ITargetObject obj = variable.GetObject (current_frame);
-				TreeIter iter;
-
-				if (!obj.IsValid)
-					return;
-
-				store.Append (out iter);
-
-				variable_rows.Add (variable, new TreeRowReference (store, store.GetPath (iter)));
-
-				AddObject (variable.Name, GetIcon (obj), obj, iter);
-			} catch (LocationInvalidException) {
-				// Do nothing
-			} catch (Exception e) {
-				Console.WriteLine ("can't add variable: {0} {1}", variable, e);
-			}
-		}
-
-		void RemoveVariable (IVariable variable)
-		{
-			TreeRowReference row = (TreeRowReference)variable_rows[variable];
-			TreeIter iter;
-
-			if (row != null && store.GetIter (out iter, row.Path)) {
-				iters.Remove (iter);
-				store.Remove (ref iter);
-			}
-
-			variable_rows.Remove (variable);
-		}
-
-		public void UpdateDisplay ()
-		{
-			if ((current_frame == null) || (current_frame.Method == null))
-				return;
-
-			try {
-				Hashtable vars_to_remove = new Hashtable();
-
-				foreach (IVariable var in variable_rows.Keys) {
-					vars_to_remove.Add (var, var);
-				}
-
-				if (is_locals_display) {
-					if (current_frame.Method.HasThis) {
-						UpdateVariable (current_frame.Method.This);
-						vars_to_remove.Remove (current_frame.Method.This);
-					}
-					IVariable[] local_vars = current_frame.Method.Locals;
-					foreach (IVariable var in local_vars) {
-						UpdateVariable (var);
-						vars_to_remove.Remove (var);
-					}
-				} else {
-					IVariable[] param_vars = current_frame.Method.Parameters;
-					foreach (IVariable var in param_vars) {
-						UpdateVariable (var);
-						vars_to_remove.Remove (var);
-					}
-				}
-
-				foreach (IVariable var in vars_to_remove.Keys) {
-					RemoveVariable (var);
-				}
-
-			} catch (Exception e) {
-				Console.WriteLine ("CAN'T GET VARIABLES: {0}", e);
-				store.Clear ();
-				iters = new Hashtable ();
-			}
-		}
-
-		protected void OnStoppedEvent (object o, EventArgs args)
-		{
-			current_frame = (Mono.Debugger.StackFrame)Runtime.DebuggingService.CurrentFrame;
-			UpdateDisplay ();
-		}
-
-		protected void OnPausedEvent (object o, EventArgs args)
-		{
-			current_frame = (Mono.Debugger.StackFrame)Runtime.DebuggingService.CurrentFrame;
-			UpdateDisplay ();
-		}
-
-#if NET_2_0
-		DebuggerBrowsableAttribute GetDebuggerBrowsableAttribute (ITargetMemberInfo info)
-		{
-	  		if (info.Handle != null && info.Handle is System.Reflection.MemberInfo) {
-				System.Reflection.MemberInfo mi = (System.Reflection.MemberInfo)info.Handle;
-				object[] attrs = mi.GetCustomAttributes (typeof (DebuggerBrowsableAttribute), false);
-
-				if (attrs != null && attrs.Length > 0)
-					return (DebuggerBrowsableAttribute)attrs[0];
-			}
-
-			return null;
-		}
-
-		DebuggerTypeProxyAttribute GetDebuggerTypeProxyAttribute (DebuggingService dbgr, ITargetObject obj)
-		{
-			if (obj.TypeInfo.Type.TypeHandle != null && obj.TypeInfo.Type.TypeHandle is Type)
-				return dbgr.AttributeHandler.GetDebuggerTypeProxyAttribute ((Type)obj.TypeInfo.Type.TypeHandle);
-
-			return null;
-		}
-
-		DebuggerDisplayAttribute GetDebuggerDisplayAttribute (DebuggingService dbgr, ITargetObject obj)
-		{
-			if (obj.TypeInfo.Type.TypeHandle != null && obj.TypeInfo.Type.TypeHandle is Type)
-			  return dbgr.AttributeHandler.GetDebuggerDisplayAttribute ((Type)obj.TypeInfo.Type.TypeHandle);
-
-			return null;
-		}
-#endif
-
-	}
-}

Copied: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/LocalsPad.cs (from rev 2407, trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerLocalsPad.cs)
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerLocalsPad.cs	2005-03-31 17:22:50 UTC (rev 2407)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/LocalsPad.cs	2005-04-01 23:21:09 UTC (rev 2413)
@@ -0,0 +1,66 @@
+using System;
+using MonoDevelop.Gui;
+using Stock = MonoDevelop.Gui.Stock;
+
+namespace MonoDevelop.Debugger
+{
+	public class LocalsPad : VariablePad, IPadContent
+	{
+
+		public LocalsPad () : base (true)
+		{
+		}
+
+		public Gtk.Widget Control {
+			get {
+				return this;
+			}
+		}
+
+		public string Id {
+			get { return "MonoDevelop.Debugger.LocalsPad"; }
+		}
+
+		public string DefaultPlacement {
+			get { return "Bottom"; }
+		}
+
+		public string Title {
+			get {
+				return "Locals";
+			}
+		}
+
+		public string Icon {
+			get {
+				return Stock.OutputIcon;
+			}
+		}
+
+		public void RedrawContent ()
+		{
+			UpdateDisplay ();
+		}
+
+		public void BringToFront ()
+		{
+		}
+
+                protected virtual void OnTitleChanged(EventArgs e)
+                {
+                        if (TitleChanged != null) {
+                                TitleChanged(this, e);
+                        }
+                }
+                protected virtual void OnIconChanged(EventArgs e)
+                {
+                        if (IconChanged != null) {
+                                IconChanged(this, e);
+                        }
+                }
+                public event EventHandler TitleChanged;
+                public event EventHandler IconChanged;
+
+
+	}
+}

Copied: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/StackTracePad.cs (from rev 2410, trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerStackTracePad.cs)
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerStackTracePad.cs	2005-04-01 03:57:44 UTC (rev 2410)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/StackTracePad.cs	2005-04-01 23:21:09 UTC (rev 2413)
@@ -0,0 +1,146 @@
+using GLib;
+using Gtk;
+using GtkSharp;
+using System;
+using System.IO;
+using System.Collections;
+using System.Globalization;
+using System.Runtime.InteropServices;
+using Mono.Debugger;
+using Mono.Debugger.Languages;
+
+using Stock = MonoDevelop.Gui.Stock;
+using MonoDevelop.Core.Services;
+using MonoDevelop.Services;
+using MonoDevelop.Gui;
+
+namespace MonoDevelop.Debugger
+{
+	public class StackTracePad : Gtk.ScrolledWindow, IPadContent
+	{
+		StackFrame current_frame;
+
+		Gtk.TreeView tree;
+		Gtk.TreeStore store;
+
+		public StackTracePad ()
+		{
+			this.ShadowType = ShadowType.In;
+
+			store = new TreeStore (typeof (string));
+
+			tree = new TreeView (store);
+			tree.RulesHint = true;
+			tree.HeadersVisible = true;
+
+			TreeViewColumn FrameCol = new TreeViewColumn ();
+			CellRenderer FrameRenderer = new CellRendererText ();
+			FrameCol.Title = "Frame";
+			FrameCol.PackStart (FrameRenderer, true);
+			FrameCol.AddAttribute (FrameRenderer, "text", 0);
+			FrameCol.Resizable = true;
+			FrameCol.Alignment = 0.0f;
+			tree.AppendColumn (FrameCol);
+
+			Add (tree);
+			ShowAll ();
+
+			Runtime.DebuggingService.PausedEvent += new EventHandler (OnPausedEvent);
+			Runtime.DebuggingService.ResumedEvent += new EventHandler (OnResumedEvent);
+			Runtime.DebuggingService.StoppedEvent += new EventHandler (OnStoppedEvent);
+		}
+
+		public void UpdateDisplay ()
+		{
+			if ((current_frame == null) || (current_frame.Method == null))
+				return;
+
+			string[] trace = Runtime.DebuggingService.Backtrace;
+
+			TreeIter it;
+			if (!store.GetIterFirst (out it)) {
+				foreach (string frame in trace) {
+					store.Append (out it);
+					store.SetValue (it, 0, frame);
+				}
+			}
+			else {
+				for (int i = 0; i < trace.Length; i ++) {
+					store.SetValue (it, 0, trace[i]);
+					if (i < trace.Length - 1 && !store.IterNext (ref it))
+						store.Append (out it);
+				}
+				/* clear any remaining rows */
+				if (store.IterNext (ref it))
+					do { } while (store.Remove (ref it));
+			}
+		}
+
+		protected void OnStoppedEvent (object o, EventArgs args)
+		{
+			UpdateDisplay ();
+		}
+
+		protected void OnResumedEvent (object o, EventArgs args)
+		{
+			UpdateDisplay ();
+		}
+
+		protected void OnPausedEvent (object o, EventArgs args)
+		{
+			current_frame = (StackFrame)Runtime.DebuggingService.CurrentFrame;
+			UpdateDisplay ();
+		}
+
+		public Gtk.Widget Control {
+			get {
+				return this;
+			}
+		}
+
+		public string Id {
+			get { return "MonoDevelop.Debugger.StackTracePad"; }
+		}
+
+		public string DefaultPlacement {
+			get { return "Bottom"; }
+		}
+
+		public string Title {
+			get {
+				return "Call Stack";
+			}
+		}
+
+		public string Icon {
+			get {
+				return Stock.OutputIcon;
+			}
+		}
+
+		public void RedrawContent ()
+		{
+			UpdateDisplay ();
+		}
+
+		public void BringToFront ()
+		{
+		}
+
+                protected virtual void OnTitleChanged(EventArgs e)
+                {
+                        if (TitleChanged != null) {
+                                TitleChanged(this, e);
+                        }
+                }
+                protected virtual void OnIconChanged(EventArgs e)
+                {
+                        if (IconChanged != null) {
+                                IconChanged(this, e);
+                        }
+                }
+                public event EventHandler TitleChanged;
+                public event EventHandler IconChanged;
+	  
+	}
+}

Copied: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/ThreadPad.cs (from rev 2410, trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerThreadPad.cs)
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerThreadPad.cs	2005-04-01 03:57:44 UTC (rev 2410)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/ThreadPad.cs	2005-04-01 23:21:09 UTC (rev 2413)
@@ -0,0 +1,218 @@
+using GLib;
+using Gtk;
+using GtkSharp;
+using System;
+using System.IO;
+using System.Collections;
+using System.Globalization;
+using System.Runtime.InteropServices;
+using Mono.Debugger;
+using Mono.Debugger.Languages;
+
+using Stock = MonoDevelop.Gui.Stock;
+using MonoDevelop.Core.Services;
+using MonoDevelop.Services;
+using MonoDevelop.Gui;
+
+namespace MonoDevelop.Debugger
+{
+	public class ThreadPad : Gtk.ScrolledWindow, IPadContent
+	{
+		Gtk.TreeView tree;
+		Gtk.TreeStore store;
+		Hashtable thread_rows;
+
+		public ThreadPad ()
+		{
+			thread_rows = new Hashtable ();
+
+			this.ShadowType = ShadowType.In;
+
+			store = new TreeStore (typeof (int),
+					       typeof (int),
+					       typeof (string),
+					       typeof (string));
+
+			tree = new TreeView (store);
+			tree.RulesHint = true;
+			tree.HeadersVisible = true;
+
+			TreeViewColumn Col;
+			CellRenderer ThreadRenderer;
+
+			Col = new TreeViewColumn ();
+			ThreadRenderer = new CellRendererText ();
+			Col.Title = "Id";
+			Col.PackStart (ThreadRenderer, true);
+			Col.AddAttribute (ThreadRenderer, "text", 0);
+			Col.Resizable = true;
+			Col.Alignment = 0.0f;
+			tree.AppendColumn (Col);
+
+			Col = new TreeViewColumn ();
+			ThreadRenderer = new CellRendererText ();
+			Col.Title = "PID";
+			Col.PackStart (ThreadRenderer, true);
+			Col.AddAttribute (ThreadRenderer, "text", 1);
+			Col.Resizable = true;
+			Col.Alignment = 0.0f;
+			tree.AppendColumn (Col);
+
+			Col = new TreeViewColumn ();
+			ThreadRenderer = new CellRendererText ();
+			Col.Title = "State";
+			Col.PackStart (ThreadRenderer, true);
+			Col.AddAttribute (ThreadRenderer, "text", 2);
+			Col.Resizable = true;
+			Col.Alignment = 0.0f;
+			tree.AppendColumn (Col);
+
+			Col = new TreeViewColumn ();
+			ThreadRenderer = new CellRendererText ();
+			Col.Title = "Current Location";
+			Col.PackStart (ThreadRenderer, true);
+			Col.AddAttribute (ThreadRenderer, "text", 3);
+			Col.Resizable = true;
+			Col.Alignment = 0.0f;
+			tree.AppendColumn (Col);
+
+			Add (tree);
+			ShowAll ();
+
+			((DebuggingService)Runtime.DebuggingService).ThreadStateEvent += new EventHandler (OnThreadEvent);
+		}
+
+		void AddThread (Process thread)
+		{
+			TreeIter iter;
+			store.Append (out iter);
+			store.SetValue (iter, 0, new GLib.Value (thread.ID));
+			store.SetValue (iter, 1, new GLib.Value (thread.PID));
+			store.SetValue (iter, 2, new GLib.Value (thread.State.ToString()));
+			if (thread.IsStopped)
+				store.SetValue (iter, 3, new GLib.Value (thread.GetBacktrace().Frames[0].SourceAddress.Name));
+			else
+				store.SetValue (iter, 3, new GLib.Value (""));
+			thread_rows.Add (thread, new TreeRowReference (store, store.GetPath (iter)));
+		}
+
+		void UpdateThread (Process thread)
+		{
+			TreeRowReference row = (TreeRowReference)thread_rows[thread];
+			TreeIter iter;
+
+			if (row != null && store.GetIter (out iter, row.Path)) {
+				if (thread.ID != (int)store.GetValue (iter, 0))
+					store.SetValue (iter, 0, thread.ID);
+				if (thread.PID != (int)store.GetValue (iter, 1))
+					store.SetValue (iter, 1, thread.PID);
+				if (thread.State.ToString() != (string)store.GetValue (iter, 2))
+					store.SetValue (iter, 2, thread.State.ToString());
+
+				string location;
+				if (thread.IsStopped)
+					location = thread.GetBacktrace().Frames[0].SourceAddress.Name;
+				else
+					location = "";
+
+				if (location != (string)store.GetValue (iter, 3))
+					store.SetValue (iter, 3, location);
+			}
+			else {
+				AddThread (thread);
+			}
+		}
+
+		void RemoveThread (Process thread)
+		{
+			TreeRowReference row = (TreeRowReference)thread_rows[thread];
+			TreeIter iter;
+
+			if (row != null && store.GetIter (out iter, row.Path))
+				store.Remove (ref iter);
+
+			thread_rows.Remove (thread);
+		}
+
+		public void UpdateDisplay ()
+		{
+			Hashtable threads_to_remove = new Hashtable();
+
+			foreach (Process thread in thread_rows.Keys) {
+				threads_to_remove.Add (thread, thread);
+			}
+
+			foreach (Process t in ((DebuggingService)Runtime.DebuggingService).Threads) {
+				if (!t.IsDaemon) {
+					UpdateThread (t);
+					threads_to_remove.Remove (t);
+				}
+			}
+
+			foreach (Process t in threads_to_remove.Keys) {
+				RemoveThread (t);
+			}
+		}
+
+		public void CleanDisplay ()
+		{
+			UpdateDisplay ();
+		}
+
+		public void RedrawContent ()
+		{
+			UpdateDisplay ();
+		}
+
+		public void BringToFront ()
+		{
+		}
+
+		protected void OnThreadEvent (object o, EventArgs args)
+		{
+			UpdateDisplay ();
+		}
+
+		public Gtk.Widget Control {
+			get {
+				return this;
+			}
+		}
+
+		public string Id {
+			get { return "MonoDevelop.Debugger.ThreadPad"; }
+		}
+
+		public string DefaultPlacement {
+			get { return "Bottom"; }
+		}
+
+		public string Title {
+			get {
+				return "Threads";
+			}
+		}
+
+		public string Icon {
+			get {
+				return Stock.OutputIcon;
+			}
+		}
+
+                protected virtual void OnTitleChanged(EventArgs e)
+                {
+                        if (TitleChanged != null) {
+                                TitleChanged(this, e);
+                        }
+                }
+                protected virtual void OnIconChanged(EventArgs e)
+                {
+                        if (IconChanged != null) {
+                                IconChanged(this, e);
+                        }
+                }
+                public event EventHandler TitleChanged;
+                public event EventHandler IconChanged;
+	  
+	}
+}

Copied: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/VariablePad.cs (from rev 2411, trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerVariablePad.cs)
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/DebuggerVariablePad.cs	2005-04-01 05:46:29 UTC (rev 2411)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Gui/VariablePad.cs	2005-04-01 23:21:09 UTC (rev 2413)
@@ -0,0 +1,660 @@
+using GLib;
+using Gtk;
+using GtkSharp;
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Collections;
+using System.Globalization;
+using System.Text;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using Mono.Debugger;
+using Mono.Debugger.Languages;
+
+using Stock = MonoDevelop.Gui.Stock;
+using MonoDevelop.Core.Services;
+using MonoDevelop.Internal.Parser;
+using MonoDevelop.Services;
+
+namespace MonoDevelop.Debugger
+{
+	public class VariablePad : Gtk.ScrolledWindow
+	{
+		Mono.Debugger.StackFrame current_frame;
+
+		Hashtable variable_rows;
+		Hashtable iters;
+
+		Gtk.TreeView tree;
+		Gtk.TreeStore store;
+		bool is_locals_display;
+
+		internal const int NAME_COL = 0;
+		internal const int VALUE_COL = 1;
+		internal const int TYPE_COL = 2;
+		internal const int RAW_VIEW_COL = 3;
+		internal const int PIXBUF_COL = 4;
+
+		public VariablePad (bool is_locals_display)
+		{
+			this.ShadowType = ShadowType.In;
+
+			this.is_locals_display = is_locals_display;
+
+			variable_rows = new Hashtable();
+			iters = new Hashtable();
+
+			store = new TreeStore (typeof (string),
+					       typeof (string),
+			                       typeof (string),
+					       typeof (bool),
+					       typeof (Gdk.Pixbuf));
+
+			tree = new TreeView (store);
+			tree.RulesHint = true;
+			tree.HeadersVisible = true;
+
+			TreeViewColumn NameCol = new TreeViewColumn ();
+			CellRenderer NameRenderer = new CellRendererText ();
+			CellRenderer IconRenderer = new CellRendererPixbuf ();
+			NameCol.Title = "Name";
+			NameCol.PackStart (IconRenderer, false);
+			NameCol.PackStart (NameRenderer, true);
+			NameCol.AddAttribute (IconRenderer, "pixbuf", PIXBUF_COL);
+			NameCol.AddAttribute (NameRenderer, "text", NAME_COL);
+			NameCol.Resizable = true;
+			NameCol.Alignment = 0.0f;
+			tree.AppendColumn (NameCol);
+
+			TreeViewColumn ValueCol = new TreeViewColumn ();
+			CellRenderer ValueRenderer = new CellRendererText ();
+			ValueCol.Title = "Value";
+			ValueCol.PackStart (ValueRenderer, true);
+			ValueCol.AddAttribute (ValueRenderer, "text", VALUE_COL);
+			ValueCol.Resizable = true;
+			NameCol.Alignment = 0.0f;
+			tree.AppendColumn (ValueCol);
+
+			TreeViewColumn TypeCol = new TreeViewColumn ();
+			CellRenderer TypeRenderer = new CellRendererText ();
+			TypeCol.Title = "Type";
+			TypeCol.PackStart (TypeRenderer, true);
+			TypeCol.AddAttribute (TypeRenderer, "text", TYPE_COL);
+			TypeCol.Resizable = true;
+			NameCol.Alignment = 0.0f;
+			tree.AppendColumn (TypeCol);
+
+			tree.TestExpandRow += new TestExpandRowHandler (TestExpandRow);
+
+			Add (tree);
+			ShowAll ();
+
+			Runtime.DebuggingService.PausedEvent += new EventHandler (OnPausedEvent);
+			Runtime.DebuggingService.StoppedEvent += new EventHandler (OnStoppedEvent);
+		}
+
+		bool InsertArrayChildren (TreeIter parent, ITargetArrayObject array)
+		{
+			bool inserted = false;
+
+			for (int i = array.LowerBound; i < array.UpperBound; i++) {
+
+				inserted = true;
+
+				ITargetObject elt = array [i];
+				if (elt == null)
+					continue;
+
+				TreeIter iter = store.Append (parent);
+				AddObject (i.ToString (), "" /* XXX */, elt, iter);
+			}
+
+			return inserted;
+		}
+
+		bool InsertStructMember (TreeIter parent, ITargetStructObject sobj, ITargetMemberInfo member, bool is_field)
+		{
+			bool inserted = false;
+
+			string icon_name = GetIcon (member);
+
+#if NET_2_0
+			DebuggerBrowsableAttribute battr = GetDebuggerBrowsableAttribute (member);
+			if (battr != null) {
+				TreeIter iter;
+
+				switch (battr.State) {
+				case DebuggerBrowsableState.Never:
+					// don't display it at all
+					continue;
+				case DebuggerBrowsableState.Collapsed:
+					// the default behavior for the debugger (c&p from above)
+					iter = store.Append (parent);
+					AddObject (member.Name, icon_name, is_field ? sobj.GetField (member.Index) : sobj.GetProperty (member.Index),
+						   iter);
+					inserted = true;
+					break;
+				case DebuggerBrowsableState.Expanded:
+					// add it as in the Collapsed case...
+					iter = store.Append (parent);
+					AddObject (member.Name, icon_name, is_field ? sobj.GetField (member.Index) : sobj.GetProperty (member.Index),
+						   iter);
+					inserted = true;
+					// then expand the row
+					tree.ExpandRow (store.GetPath (iter), false);
+					break;
+				case DebuggerBrowsableState.RootHidden:
+					ITargetObject member_obj = is_field ? sobj.GetField (member.Index) : sobj.GetProperty (member.Index);
+
+					if (member_obj != null) {
+						switch (member_obj.TypeInfo.Type.Kind) {
+						case TargetObjectKind.Array:
+							iter = store.Append (parent);
+							// handle arrays normally, should check how vs2005 does this.
+							AddObject (member.Name, icon_name, member_obj, iter);
+							inserted = true;
+							break;
+						case TargetObjectKind.Class:
+							try {
+								inserted = InsertClassChildren (parent, (ITargetClassObject)member_obj, false);
+							}
+							catch {
+								// what about this case?  where the member is possibly
+								// uninitialized, do we try to add it later?
+							}
+							break;
+						case TargetObjectKind.Struct:
+							try {
+								inserted = InsertStructChildren (parent, (ITargetStructObject)member_obj, false);
+							}
+							catch {
+								// what about this case?  where the member is possibly
+								// uninitialized, do we try to add it later?
+							}
+							break;
+						default:
+							// nothing
+							break;
+						}
+					}
+					break;
+				}
+			}
+			else {
+#endif
+				TreeIter iter = store.Append (parent);
+				AddObject (member.Name, icon_name, is_field ? sobj.GetField (member.Index) : sobj.GetProperty (member.Index),
+					   iter);
+				inserted = true;
+#if NET_2_0
+			}
+#endif
+
+			return inserted;
+		}
+
+#if NET_2_0
+		bool InsertProxyChildren (DebuggingService dbgr, DebuggerTypeProxyAttribute pattr, TreeIter parent, ITargetStructObject sobj)
+		{
+			Mono.Debugger.StackFrame frame = dbgr.MainThread.CurrentFrame;
+	 		ITargetStructType proxy_type = frame.Language.LookupType (frame, pattr.ProxyTypeName) as ITargetStructType;
+			if (proxy_type == null)
+				proxy_type = frame.Language.LookupType (frame,
+									sobj.Type.Name + "+" + pattr.ProxyTypeName) as ITargetStructType;
+			if (proxy_type != null) {
+				string name = String.Format (".ctor({0})", sobj.Type.Name);
+				ITargetMethodInfo method = null;
+
+				foreach (ITargetMethodInfo m in proxy_type.Constructors) {
+					if (m.FullName == name)
+						method = m;
+				}
+
+				if (method != null) {
+					ITargetFunctionObject ctor = proxy_type.GetConstructor (frame, method.Index);
+					ITargetObject[] args = new ITargetObject[1];
+					args[0] = sobj;
+
+					ITargetStructObject proxy_obj = ctor.Type.InvokeStatic (frame, args, false) as ITargetStructObject;
+
+					if (proxy_obj != null) {
+						foreach (ITargetPropertyInfo prop in proxy_obj.Type.Properties) {
+							InsertStructMember (parent, proxy_obj, prop, false);
+						}
+
+						TreeIter iter = store.Append (parent);
+						store.SetValue (iter, NAME_COL, "Raw View");
+						store.SetValue (iter, RAW_VIEW_COL, true);
+
+						Gdk.Pixbuf icon = Runtime.Gui.Resources.GetIcon (Stock.Class, Gtk.IconSize.Menu);
+						if (icon != null)
+							store.SetValue (iter, PIXBUF_COL, icon);
+
+						iters.Remove (iter);
+						AddPlaceholder (sobj, iter);
+
+						return true;
+					}
+				}
+			}
+
+			return false;
+		}
+#endif
+
+		bool InsertStructChildren (TreeIter parent, ITargetStructObject sobj, bool raw_view)
+		{
+			bool inserted = false;
+
+#if NET_2_0
+			if (!raw_view) {
+				DebuggingService dbgr = (DebuggingService)Runtime.DebuggingService;
+				DebuggerTypeProxyAttribute pattr = GetDebuggerTypeProxyAttribute (dbgr, sobj);
+
+				if (pattr != null) {
+					if (InsertProxyChildren (dbgr, pattr, parent, sobj))
+						inserted = true;
+				}
+			}
+#endif
+
+			foreach (ITargetFieldInfo field in sobj.Type.Fields) {
+				if (InsertStructMember (parent, sobj, field, true))
+					inserted = true;
+			}
+
+			foreach (ITargetPropertyInfo prop in sobj.Type.Properties) {
+				if (InsertStructMember (parent, sobj, prop, false))
+					inserted = true;
+			}
+
+			return inserted;
+		}
+
+		bool InsertClassChildren (TreeIter parent, ITargetClassObject sobj, bool raw_view)
+		{
+			bool inserted = false;
+
+			if (sobj.Type.HasParent) {
+				TreeIter iter = store.Append (parent);
+				AddObject ("<parent>", Stock.Class, sobj.Parent, iter);
+				inserted = true;
+			}
+
+			if (InsertStructChildren (parent, sobj, raw_view))
+				inserted = true;
+
+			return inserted;
+		}
+
+		void InsertMessage (TreeIter parent, string message)
+		{
+			TreeIter child;
+			if (store.IterChildren (out child, parent)) {
+				while (!(child.Equals (Gtk.TreeIter.Zero)) && (child.Stamp != 0))
+					store.Remove (ref child);
+			}
+
+			TreeIter iter = store.Append (parent);
+			store.SetValue (iter, VALUE_COL, message);
+		}
+
+		void TestExpandRow (object o, TestExpandRowArgs args)
+		{
+			bool inserted = false;
+
+			ITargetObject obj = (ITargetObject) iters [args.Iter];
+
+			TreeIter child;
+			if (store.IterChildren (out child, args.Iter)) {
+				while (!(child.Equals (Gtk.TreeIter.Zero)) && (child.Stamp != 0))
+					store.Remove (ref child);
+			}
+
+			if (obj == null) {
+				child = store.Append (args.Iter);
+				return;
+			}
+
+			switch (obj.TypeInfo.Type.Kind) {
+			case TargetObjectKind.Array:
+				ITargetArrayObject array = (ITargetArrayObject) obj;
+				try {
+					inserted = InsertArrayChildren (args.Iter, array);
+				} catch {
+					InsertMessage (args.Iter, "<can't display array>");
+					inserted = true;
+				}
+				if (!inserted)
+					InsertMessage (args.Iter, "<empty array>");
+				break;
+
+			case TargetObjectKind.Class:
+				ITargetClassObject cobj = (ITargetClassObject) obj;
+				try {
+					bool raw_view = (bool)store.GetValue (args.Iter, RAW_VIEW_COL);
+					inserted = InsertClassChildren (args.Iter, cobj, raw_view);
+				} catch (Exception e) {
+				  Console.WriteLine (e);
+					InsertMessage (args.Iter, "<can't display class>");
+					inserted = true;
+				}
+				if (!inserted)
+					InsertMessage (args.Iter, "<empty class>");
+				break;
+
+			case TargetObjectKind.Struct:
+				ITargetStructObject sobj = (ITargetStructObject) obj;
+				try {
+					bool raw_view = (bool)store.GetValue (args.Iter, RAW_VIEW_COL);
+					inserted = InsertStructChildren (args.Iter, sobj, raw_view);
+				} catch {
+					InsertMessage (args.Iter, "<can't display struct>");
+					inserted = true;
+				}
+				if (!inserted)
+					InsertMessage (args.Iter, "<empty struct>");
+				break;
+
+			default:
+				InsertMessage (args.Iter, "<unknown object>");
+				break;
+			}
+		}
+
+		void AddPlaceholder (ITargetObject obj, TreeIter parent)
+		{
+			if (obj.TypeInfo.Type.Kind == TargetObjectKind.Array) {
+				ITargetArrayObject array = (ITargetArrayObject) obj;
+				if (array.LowerBound == array.UpperBound)
+					return;
+			}
+
+			store.Append (parent);
+			iters.Add (parent, obj);
+		}
+
+		string GetObjectValueString (ITargetObject obj)
+		{
+			if (obj == null) {
+				return "null";
+			}
+
+			switch (obj.TypeInfo.Type.Kind) {
+			case TargetObjectKind.Fundamental:
+				object contents = ((ITargetFundamentalObject) obj).Object;
+				return contents.ToString ();
+
+			case TargetObjectKind.Array:
+				ITargetArrayObject array = (ITargetArrayObject) obj;
+				if (array.LowerBound == array.UpperBound && array.LowerBound == 0)
+					return "[]";
+				else
+					return "";
+
+			case TargetObjectKind.Struct:
+			case TargetObjectKind.Class:
+				try {
+#if NET_2_0
+					DebuggingService dbgr = (DebuggingService)Runtime.DebuggingService;
+					DebuggerDisplayAttribute dattr = GetDebuggerDisplayAttribute (dbgr, obj);
+					if (dattr != null) {
+						return dbgr.AttributeHandler.EvaluateDebuggerDisplay (obj, dattr.Value);
+					}
+					else {
+#endif
+						// call the object's ToString() method.
+						return ((ITargetStructObject)obj).PrintObject();
+#if NET_2_0
+					}
+#endif
+				}
+				catch (Exception e) {
+				  //Console.WriteLine ("getting object value failed: {0}", e);
+					return "";
+				}
+			default:
+				return "";
+			}
+		}
+
+		void AddObject (string name, string icon_name, ITargetObject obj, TreeIter iter)
+		{
+			store.SetValue (iter, NAME_COL, name);
+			store.SetValue (iter, VALUE_COL, GetObjectValueString (obj));
+			store.SetValue (iter, TYPE_COL,
+					obj == null ? "" : Runtime.Ambience.CurrentAmbience.GetIntrinsicTypeName (obj.TypeInfo.Type.Name));
+			Gdk.Pixbuf icon = Runtime.Gui.Resources.GetIcon (icon_name, Gtk.IconSize.Menu);
+			if (icon != null)
+				store.SetValue (iter, PIXBUF_COL, icon);
+			if (obj != null)
+				AddPlaceholder (obj, iter);
+		}
+
+		string GetIcon (ITargetObject obj)
+		{
+			string icon = "";
+
+			if (obj.TypeInfo.Type.TypeHandle is Type)
+				icon = Runtime.Gui.Icons.GetIcon ((Type)obj.TypeInfo.Type.TypeHandle);
+
+			return icon;
+		}
+
+		string GetIcon (ITargetMemberInfo member)
+		{
+			string icon = "";
+
+			if (member.Handle is PropertyInfo)
+				icon = Runtime.Gui.Icons.GetIcon ((PropertyInfo)member.Handle);
+			else if (member.Handle is FieldInfo)
+				icon = Runtime.Gui.Icons.GetIcon ((FieldInfo)member.Handle);
+
+			return icon;
+		}
+
+		void UpdateVariableChildren (IVariable variable, ITargetObject obj, TreePath path, TreeIter iter)
+		{
+			bool expanded = tree.GetRowExpanded (path);
+			TreeIter citer;
+
+			if (!expanded) {
+
+				/* we aren't expanded, just remove all
+				 * children and add the object back
+				 * (since it might be a different
+				 * object now) */
+
+				if (store.IterChildren (out citer, iter))
+					while (store.Remove (ref citer)) ;
+				iters.Remove (iter);
+
+				AddPlaceholder (obj, iter);
+			}
+			else {
+				/* in a perfect world, we'd just iterate
+				 * over the stuff we're showing and update
+				 * it.  for now, just remove all rows and
+				 * re-add them. */
+
+				if (store.IterChildren (out citer, iter))
+					while (store.Remove (ref citer)) ;
+
+				iters.Remove (iter);
+
+				AddObject (variable.Name, GetIcon (obj), obj, iter);
+
+				tree.ExpandRow (path, false);
+			}
+		}
+
+		void UpdateVariable (IVariable variable)
+		{
+			TreeRowReference row = (TreeRowReference)variable_rows[variable];
+
+			if (row == null) {
+				/* the variable isn't presently displayed */
+
+				if (!variable.IsAlive (current_frame.TargetAddress))
+					/* it's not displayed and not alive, just return */
+					return;
+
+				AddVariable (variable);
+			}
+			else {
+				/* the variable is presently displayed */
+
+				// XXX we need a obj.IsValid check in this branch
+
+				if (!variable.IsAlive (current_frame.TargetAddress)) {
+					/* it's in the display but no longer alive.  remove it */
+					RemoveVariable (variable);
+					return;
+				}
+
+				/* it's still alive - make sure the display is up to date */
+				TreeIter iter;
+				if (store.GetIter (out iter, row.Path)) {
+					try {
+						ITargetObject obj = variable.GetObject (current_frame);
+
+						/* make sure the Value column is correct */
+						string current_value = (string)store.GetValue (iter, VALUE_COL);
+						string new_value = GetObjectValueString (obj);
+						if (current_value != new_value)
+							store.SetValue (iter, VALUE_COL, new_value);
+
+						/* update the children */
+						UpdateVariableChildren (variable, obj, row.Path, iter);
+
+					} catch (Exception e) {
+						Console.WriteLine ("can't update variable: {0} {1}", variable, e);
+						store.SetValue (iter, VALUE_COL, "");
+					}
+				}
+			}
+		}
+
+		void AddVariable (IVariable variable)
+		{
+			try {
+				/* it's alive, add it to the display */
+
+				ITargetObject obj = variable.GetObject (current_frame);
+				TreeIter iter;
+
+				if (!obj.IsValid)
+					return;
+
+				store.Append (out iter);
+
+				variable_rows.Add (variable, new TreeRowReference (store, store.GetPath (iter)));
+
+				AddObject (variable.Name, GetIcon (obj), obj, iter);
+			} catch (LocationInvalidException) {
+				// Do nothing
+			} catch (Exception e) {
+				Console.WriteLine ("can't add variable: {0} {1}", variable, e);
+			}
+		}
+
+		void RemoveVariable (IVariable variable)
+		{
+			TreeRowReference row = (TreeRowReference)variable_rows[variable];
+			TreeIter iter;
+
+			if (row != null && store.GetIter (out iter, row.Path)) {
+				iters.Remove (iter);
+				store.Remove (ref iter);
+			}
+
+			variable_rows.Remove (variable);
+		}
+
+		public void UpdateDisplay ()
+		{
+			if ((current_frame == null) || (current_frame.Method == null))
+				return;
+
+			try {
+				Hashtable vars_to_remove = new Hashtable();
+
+				foreach (IVariable var in variable_rows.Keys) {
+					vars_to_remove.Add (var, var);
+				}
+
+				if (is_locals_display) {
+					if (current_frame.Method.HasThis) {
+						UpdateVariable (current_frame.Method.This);
+						vars_to_remove.Remove (current_frame.Method.This);
+					}
+					IVariable[] local_vars = current_frame.Method.Locals;
+					foreach (IVariable var in local_vars) {
+						UpdateVariable (var);
+						vars_to_remove.Remove (var);
+					}
+				} else {
+					IVariable[] param_vars = current_frame.Method.Parameters;
+					foreach (IVariable var in param_vars) {
+						UpdateVariable (var);
+						vars_to_remove.Remove (var);
+					}
+				}
+
+				foreach (IVariable var in vars_to_remove.Keys) {
+					RemoveVariable (var);
+				}
+
+			} catch (Exception e) {
+				Console.WriteLine ("CAN'T GET VARIABLES: {0}", e);
+				store.Clear ();
+				iters = new Hashtable ();
+			}
+		}
+
+		protected void OnStoppedEvent (object o, EventArgs args)
+		{
+			current_frame = (Mono.Debugger.StackFrame)Runtime.DebuggingService.CurrentFrame;
+			UpdateDisplay ();
+		}
+
+		protected void OnPausedEvent (object o, EventArgs args)
+		{
+			current_frame = (Mono.Debugger.StackFrame)Runtime.DebuggingService.CurrentFrame;
+			UpdateDisplay ();
+		}
+
+#if NET_2_0
+		DebuggerBrowsableAttribute GetDebuggerBrowsableAttribute (ITargetMemberInfo info)
+		{
+	  		if (info.Handle != null && info.Handle is System.Reflection.MemberInfo) {
+				System.Reflection.MemberInfo mi = (System.Reflection.MemberInfo)info.Handle;
+				object[] attrs = mi.GetCustomAttributes (typeof (DebuggerBrowsableAttribute), false);
+
+				if (attrs != null && attrs.Length > 0)
+					return (DebuggerBrowsableAttribute)attrs[0];
+			}
+
+			return null;
+		}
+
+		DebuggerTypeProxyAttribute GetDebuggerTypeProxyAttribute (DebuggingService dbgr, ITargetObject obj)
+		{
+			if (obj.TypeInfo.Type.TypeHandle != null && obj.TypeInfo.Type.TypeHandle is Type)
+				return dbgr.AttributeHandler.GetDebuggerTypeProxyAttribute ((Type)obj.TypeInfo.Type.TypeHandle);
+
+			return null;
+		}
+
+		DebuggerDisplayAttribute GetDebuggerDisplayAttribute (DebuggingService dbgr, ITargetObject obj)
+		{
+			if (obj.TypeInfo.Type.TypeHandle != null && obj.TypeInfo.Type.TypeHandle is Type)
+			  return dbgr.AttributeHandler.GetDebuggerDisplayAttribute ((Type)obj.TypeInfo.Type.TypeHandle);
+
+			return null;
+		}
+#endif
+
+	}
+}

Modified: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Makefile.am
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Makefile.am	2005-04-01 23:00:27 UTC (rev 2412)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/Makefile.am	2005-04-01 23:21:09 UTC (rev 2413)
@@ -17,10 +17,10 @@
 Expression.cs \
 DebuggerASTVisitor.cs \
 DebugAttributeHandler.cs \
-Gui/DebuggerLocalsPad.cs \
-Gui/DebuggerVariablePad.cs \
-Gui/DebuggerStackTracePad.cs \
-Gui/DebuggerThreadPad.cs
+Gui/LocalsPad.cs \
+Gui/VariablePad.cs \
+Gui/StackTracePad.cs \
+Gui/ThreadPad.cs
 
 
 EXTRA_DIST = $(FILES) $(ADDIN)

Modified: trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/MonoDevelopDebugger.addin.xml
===================================================================
--- trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/MonoDevelopDebugger.addin.xml	2005-04-01 23:00:27 UTC (rev 2412)
+++ trunk/MonoDevelop/Core/src/AddIns/DebuggerAddIn/MonoDevelopDebugger.addin.xml	2005-04-01 23:21:09 UTC (rev 2413)
@@ -15,15 +15,15 @@
 	</Extension>
 
 	<Extension path = "/SharpDevelop/Workbench/Pads">
-		<Pad id = "MonoDevelop.Debugger.DebuggerLocalsPad"     class = "MonoDevelop.Debugger.DebuggerLocalsPad"/>
-		<Pad id = "MonoDevelop.Debugger.DebuggerStackTracePad" class = "MonoDevelop.Debugger.DebuggerStackTracePad"/>
-		<Pad id = "MonoDevelop.Debugger.DebuggerThreadPad"     class = "MonoDevelop.Debugger.DebuggerThreadPad"/>
+		<Pad id = "MonoDevelop.Debugger.LocalsPad"     class = "MonoDevelop.Debugger.LocalsPad"/>
+		<Pad id = "MonoDevelop.Debugger.StackTracePad" class = "MonoDevelop.Debugger.StackTracePad"/>
+		<Pad id = "MonoDevelop.Debugger.ThreadPad"     class = "MonoDevelop.Debugger.ThreadPad"/>
 	</Extension>
 
 	<Extension path = "/SharpDevelop/Workbench/Contexts/Debug">
-		<ContextPad id = "MonoDevelop.Debugger.DebuggerLocalsPad" />
-		<ContextPad id = "MonoDevelop.Debugger.DebuggerStackTracePad" />
-		<ContextPad id = "MonoDevelop.Debugger.DebuggerThreadPad" />
+		<ContextPad id = "MonoDevelop.Debugger.LocalsPad" />
+		<ContextPad id = "MonoDevelop.Debugger.StackTracePad" />
+		<ContextPad id = "MonoDevelop.Debugger.ThreadPad" />
 	</Extension>
 
 	<Extension path="/SharpDevelop/Workbench/MainMenu/Run">




More information about the Monodevelop-patches-list mailing list