mirror of
https://github.com/Ryujinx/GtkSharp.git
synced 2024-12-27 08:55:32 +00:00
98 lines
2.6 KiB
C#
98 lines
2.6 KiB
C#
|
namespace GConf.PropertyEditors
|
||
|
{
|
||
|
using System;
|
||
|
using System.Collections;
|
||
|
|
||
|
public class EditorNotSupportedException : Exception
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public class InvalidGladeKeyException : Exception
|
||
|
{
|
||
|
public InvalidGladeKeyException (string control_name) : base ("No such glade entry \"" + control_name + "\"")
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class EditorShell
|
||
|
{
|
||
|
ArrayList editors = new ArrayList ();
|
||
|
Hashtable by_key = new Hashtable ();
|
||
|
Glade.XML gxml;
|
||
|
GConf.ChangeSet cs = null;
|
||
|
|
||
|
public EditorShell (Glade.XML gxml)
|
||
|
{
|
||
|
this.gxml = gxml;
|
||
|
}
|
||
|
|
||
|
public EditorShell (Glade.XML gxml, GConf.ChangeSet cs)
|
||
|
{
|
||
|
this.gxml = gxml;
|
||
|
this.cs = cs;
|
||
|
}
|
||
|
|
||
|
public void Add (PropertyEditor editor)
|
||
|
{
|
||
|
editors.Add (editor);
|
||
|
if (cs != null)
|
||
|
editor.ChangeSet = cs;
|
||
|
editor.Setup ();
|
||
|
}
|
||
|
|
||
|
public void Add (string key, string control_name)
|
||
|
{
|
||
|
Add (key, control_name, null, null);
|
||
|
}
|
||
|
|
||
|
public void Add (string key, string control_name, Type enum_type, int[] enum_values)
|
||
|
{
|
||
|
PropertyEditor editor;
|
||
|
Gtk.Widget control = gxml[control_name];
|
||
|
|
||
|
if (control == null)
|
||
|
throw new InvalidGladeKeyException (control_name);
|
||
|
|
||
|
if (control is Gnome.ColorPicker)
|
||
|
editor = new PropertyEditorColorPicker (key, (Gnome.ColorPicker) control);
|
||
|
else if (control is Gnome.FileEntry)
|
||
|
editor = new PropertyEditorFileEntry (key, (Gnome.FileEntry) control);
|
||
|
else if (control is Gtk.SpinButton)
|
||
|
editor = new PropertyEditorSpinButton (key, (Gtk.SpinButton) control);
|
||
|
else if (control is Gtk.RadioButton)
|
||
|
editor = new PropertyEditorRadioButton (key, (Gtk.RadioButton) control, enum_type, enum_values);
|
||
|
else if (control is Gtk.ToggleButton)
|
||
|
editor = new PropertyEditorToggleButton (key, (Gtk.ToggleButton) control);
|
||
|
else if (control is Gtk.Entry)
|
||
|
editor = new PropertyEditorEntry (key, (Gtk.Entry) control);
|
||
|
else if (control is Gtk.OptionMenu)
|
||
|
editor = new PropertyEditorOptionMenu (key, (Gtk.OptionMenu) control, enum_type, enum_values);
|
||
|
else
|
||
|
throw new EditorNotSupportedException ();
|
||
|
|
||
|
by_key.Add (key, editor);
|
||
|
Add (editor);
|
||
|
}
|
||
|
|
||
|
public void Add (string key, string control_name, Type enum_type)
|
||
|
{
|
||
|
Add (key, control_name, enum_type, null);
|
||
|
}
|
||
|
|
||
|
public void AddGuard (string key, string control_name)
|
||
|
{
|
||
|
if (!by_key.Contains (key))
|
||
|
return;
|
||
|
Gtk.Widget control = gxml[control_name];
|
||
|
if (control == null)
|
||
|
throw new InvalidGladeKeyException (control_name);
|
||
|
|
||
|
PropertyEditorBool editor = by_key[key] as PropertyEditorBool;
|
||
|
if (editor == null)
|
||
|
throw new EditorNotSupportedException ();
|
||
|
|
||
|
editor.AddGuard (control);
|
||
|
}
|
||
|
}
|
||
|
}
|