namespace GConf.PropertyEditors { using Gtk; public abstract class PropertyEditor { protected abstract void ValueChanged (object sender, NotifyEventArgs args); protected abstract void ConnectHandlers (); string key; Client client; ChangeSet cs; Widget control; public string Key { get { return key; } } public Widget Control { get { return control; } } protected object Get () { ClientBase c = (cs != null) ? (ClientBase) cs : (ClientBase) client; try { return c.Get (key); } catch (NoSuchKeyException e) { } if (cs != null) { try { return client.Get (key); } catch (NoSuchKeyException e) { } } return null; } protected virtual void Set (object val) { ClientBase c = (cs != null) ? (ClientBase) cs : (ClientBase) client; c.Set (key, val); } public virtual void Setup () { if (client == null) client = new Client (); ValueChanged (client, new NotifyEventArgs (key, Get ())); ConnectHandlers (); client.AddNotify (key, new NotifyEventHandler (ValueChanged)); } public Client Client { get { return client; } set { client = value; } } public ChangeSet ChangeSet { get { return cs; } set { cs = value; } } public PropertyEditor (string key, Widget control) { this.key = key; this.control = control; } } }