mono/ElementNode.cs
author hallski <hallski>
Sun, 10 Sep 2006 22:09:45 +0000
changeset 175 5e665ffe3e9c
parent 84 7ae7b690aa89
permissions -rw-r--r--
2006-09-11 Mikael Hallendal <micke@imendio.com> * Release 1.0.5

using System;
using System.Runtime.InteropServices;

namespace Loudmouth {
    
    public class ElementNode {
	private IntPtr _obj;

	public string Value {
	    get {
		return lm_message_node_get_value (this._obj);
	    } 
	    set {
		lm_message_node_set_value (this._obj, value);
	    }
	}

	[DllImport ("libloudmouth-1.so")]
	    private static extern string lm_message_node_get_value (IntPtr obj);
	[DllImport ("libloudmouth-1.so")]
	    private static extern void lm_message_node_set_value (IntPtr obj, string value);
	[DllImport ("libloudmouth-1.so")]
	    private static extern IntPtr lm_message_node_add_child (IntPtr obj, string name, string value);
	[DllImport ("libloudmouth-1.so")]
	    private static extern void lm_message_node_set_attribute (IntPtr obj, string name, string value);
	[DllImport ("libloudmouth-1.so")]
	    private static extern string lm_message_node_get_attribute (IntPtr obj, string name);
	[DllImport ("libloudmouth-1.so")]
	    private static extern IntPtr lm_message_node_get_child (IntPtr obj, string name);
	
	[DllImport ("libloudmouth-1.so")]
	    private static extern IntPtr lm_message_node_find_child (IntPtr obj, string name);

	public ElementNode (IntPtr obj) {
	    this._obj = obj;
	}
	
	public ElementNode AddChild (string name, string value) {
	    return new ElementNode(lm_message_node_add_child(this._obj, name, value));
	}

	public ElementNode GetChild (string name) {
	    IntPtr cChild = lm_message_node_get_child(this._obj, name);
	    if (cChild.ToInt32() == 0) {
		return null;
	    }
	    return new ElementNode(cChild);
	}

	public ElementNode FindChild (string name) {
	    IntPtr cChild = lm_message_node_find_child(this._obj, name);
	    if (cChild.ToInt32() == 0) {
		return null;
	    }
	    return new ElementNode(cChild);
	}

	public string this[string data] {
	    get {
		return lm_message_node_get_attribute(this._obj, data);
	    }
	    set {
		Console.WriteLine("Setting {0} = {1}: {2}", data, value, this._obj);
		lm_message_node_set_attribute (this._obj, data, value);
	    }
	}

	public override string ToString () {
	    return "Loudmouth.ElementNode";
	}
    }
}