// PropertyEditor.cs - // // Author: Rachel Hestilow // // This program is free software; you can redistribute it and/or // modify it under the terms of version 2 of the Lesser GNU General // Public License as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this program; if not, write to the // Free Software Foundation, Inc., 59 Temple Place - Suite 330, // Boston, MA 02111-1307, USA. 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; } } }