2003-01-01 Rachel Hestilow <hestilow@ximian.com>
* glade/XML.custom: New method BindFields. (Autoconnect): Call BindFields. * glade/GladeWidgetAttribute.cs: Added. * sample/GladeTest.cs: Test GladeWidgetAttribute. svn path=/trunk/gtk-sharp/; revision=10048
This commit is contained in:
parent
2e97cf0091
commit
3841924432
4 changed files with 84 additions and 3 deletions
|
@ -1,3 +1,11 @@
|
|||
2003-01-01 Rachel Hestilow <hestilow@ximian.com>
|
||||
|
||||
* glade/XML.custom: New method BindFields.
|
||||
(Autoconnect): Call BindFields.
|
||||
* glade/GladeWidgetAttribute.cs: Added.
|
||||
|
||||
* sample/GladeTest.cs: Test GladeWidgetAttribute.
|
||||
|
||||
2002-12-25 Rodrigo Moya <rodrigo@ximian.com>
|
||||
|
||||
* sources/gtk-sharp.sources: added libgphoto2.
|
||||
|
|
26
glade/GladeWidgetAttribute.cs
Normal file
26
glade/GladeWidgetAttribute.cs
Normal file
|
@ -0,0 +1,26 @@
|
|||
// GladeWidgetAttribute.cs
|
||||
//
|
||||
// Author: Rachel Hestilow <hestilow@ximian.com>
|
||||
//
|
||||
// (c) 2003 Rachel Hestilow
|
||||
|
||||
namespace Glade {
|
||||
using System;
|
||||
|
||||
[AttributeUsage (AttributeTargets.Field)]
|
||||
public class GladeWidgetAttribute : Attribute
|
||||
{
|
||||
private string name;
|
||||
|
||||
public GladeWidgetAttribute (string name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return name; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,9 @@
|
|||
//
|
||||
// (c) 2002 Ricardo Fernández Pascual
|
||||
//
|
||||
// Field binding code by Rachel Hestilow <hestilow@ximian.com>
|
||||
// (c) 2003 Rachel Hestilow
|
||||
//
|
||||
// This code is inserted after the automatically generated code.
|
||||
|
||||
// keep this around so it doesn't get GC'd
|
||||
|
@ -62,7 +65,7 @@
|
|||
[DllImport("glade-2.0")]
|
||||
static extern IntPtr glade_xml_new_from_buffer(byte[] buffer, int size, string root, string domain);
|
||||
|
||||
/// <summary>Creates a Glade.XML object from a Stream</sumary>
|
||||
/// <summary>Creates a Glade.XML object from a Stream</summary>
|
||||
/// <remarks>Reads the contents of the stream and parses it. It must be in
|
||||
/// correct Glade format</remarks>
|
||||
public XML (System.IO.Stream s, string root, string domain)
|
||||
|
@ -73,7 +76,7 @@
|
|||
Raw = glade_xml_new_from_buffer(buffer, size, root, domain);
|
||||
}
|
||||
|
||||
/// <summary>Creates a Glade.XML object from a resource</sumary>
|
||||
/// <summary>Creates a Glade.XML object from a resource</summary>
|
||||
/// <remarks>Reads the contents of the resource in the
|
||||
/// given assembly and parses it. If the assembly is null,
|
||||
/// the current assembly will be used. It must be in
|
||||
|
@ -99,6 +102,7 @@
|
|||
/// provided by the given object.</remarks>
|
||||
public void Autoconnect (object handler)
|
||||
{
|
||||
BindFields (handler);
|
||||
SignalConnector sc = new SignalConnector (this, handler);
|
||||
sc.Autoconnect ();
|
||||
}
|
||||
|
@ -108,6 +112,7 @@
|
|||
/// methods provided by the given type.</remarks>
|
||||
public void Autoconnect (Type handler_class)
|
||||
{
|
||||
BindFields (handler_class);
|
||||
SignalConnector sc = new SignalConnector (this, handler_class);
|
||||
sc.Autoconnect ();
|
||||
}
|
||||
|
@ -242,3 +247,38 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BindFields (object target, Type type)
|
||||
{
|
||||
System.Reflection.BindingFlags flags = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic;
|
||||
if (target != null)
|
||||
flags |= System.Reflection.BindingFlags.Instance;
|
||||
else
|
||||
flags |= System.Reflection.BindingFlags.Static;
|
||||
|
||||
System.Reflection.FieldInfo[] fields = type.GetFields (flags);
|
||||
if (fields == null)
|
||||
return;
|
||||
|
||||
foreach (System.Reflection.FieldInfo field in fields)
|
||||
{
|
||||
object[] attrs = field.GetCustomAttributes (typeof (GladeWidgetAttribute), true);
|
||||
if (attrs == null || attrs.Length == 0)
|
||||
continue;
|
||||
// The widget to field binding must be 1:1, so only check
|
||||
// the first attribute.
|
||||
GladeWidgetAttribute widget = (GladeWidgetAttribute) attrs[0];
|
||||
field.SetValue (target, GetWidget (widget.Name), flags, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void BindFields (object target)
|
||||
{
|
||||
BindFields (target, target.GetType ());
|
||||
}
|
||||
|
||||
public void BindFields (Type type)
|
||||
{
|
||||
BindFields (null, type);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,9 @@ namespace GladeSamples {
|
|||
|
||||
public class GladeTest : Program
|
||||
{
|
||||
[GladeWidget("main_window")]
|
||||
Gtk.Window main_window;
|
||||
|
||||
public static void Main (string[] args)
|
||||
{
|
||||
new GladeTest (args).Run ();
|
||||
|
@ -28,7 +31,11 @@ namespace GladeSamples {
|
|||
you don't want */
|
||||
Glade.XML gxml = new Glade.XML (null, "test.glade", "main_window", null);
|
||||
gxml.Autoconnect (this);
|
||||
}
|
||||
if (main_window != null)
|
||||
Console.WriteLine ("Main Window Title: \"{0}\"", main_window.Title);
|
||||
else
|
||||
Console.WriteLine ("GladeWidgetAttribute is broken.");
|
||||
}
|
||||
|
||||
public void OnWindowDeleteEvent (object o, DeleteEventArgs args)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue