X-Git-Url: https://git.llucax.com/z.facultad/75.10/miklolife.git/blobdiff_plain/b5cc8b1e466a552a309647373d335444c8b64401..24d5eafe559623e7f04be1c7a7b8c25d8a754d9e:/demo/src/Vistas/ABMGenerico.cs?ds=sidebyside diff --git a/demo/src/Vistas/ABMGenerico.cs b/demo/src/Vistas/ABMGenerico.cs index 3471b20..ceb15d3 100644 --- a/demo/src/Vistas/ABMGenerico.cs +++ b/demo/src/Vistas/ABMGenerico.cs @@ -5,30 +5,98 @@ using System.Collections; using Gtk; using Glade; +using Controlador; + public class ABMGenerico { Glade.XML xml; [Widget] Table tabla; + Type current; + Hashtable widgets; public ABMGenerico (Type objectType) { + widgets = new Hashtable (); + PropertyInfo[] properties = objectType.GetProperties (); + current = objectType; xml = new Glade.XML (null, "abm_generico.glade", "abm_one", null); xml.Autoconnect (this); uint i=0; foreach( PropertyInfo mf in properties ) { - Label l = new Label (mf.Name + " : "); - Entry e = new Entry (); - tabla.Attach (l, 0, 1, i, i+1); - tabla.Attach (e, 1, 2, i, i+1); - l.Show (); - e.Show (); + Widget l = GetWidget (mf); + if (l != null) { + tabla.Attach (l, 0, 1, i, i+1); + Entry e = new Entry (); + tabla.Attach (e, 1, 2, i, i+1); + l.Show (); + e.Show (); + widgets[mf.Name] = e; + } i++; } } + private Widget GetWidget (PropertyInfo mf) + { + Widget w = null; + if (mf.PropertyType.Equals (typeof(string)) + || mf.PropertyType.Equals (typeof(int)) + || mf.PropertyType.Equals (typeof(float))) { + Label l = new Label (GetLabel (mf.Name) + " : "); + l.Justify = Justification.Left; + l.Xpad = 0; + l.Xalign = 0; + w = l; + } + return w; + } + + private string GetLabel (string name) + { + int i = 0; + string s = (string)name.Clone (); + while (i < s.Length) { + if (Char.IsUpper(s[i]) && (i>0)) { + s = s.Insert (i, " "); + i++; + } + i++; + } + return s; + } + + public void OnDialogResponse (object o, ResponseArgs args) + { + if (args.ResponseId == ResponseType.Cancel) + return; + + PropertyInfo[] properties = current.GetProperties (); + + System.Object output = Activator.CreateInstance (current); + + foreach (string key in widgets.Keys) { + PropertyInfo p = current.GetProperty (key); + Entry e = (Entry)widgets[key]; + Console.WriteLine ("{0} = {1}", key, e.Text); + if (p.PropertyType.Equals (typeof(string))) + p.SetValue (output, e.Text, null); + if (p.PropertyType.Equals (typeof(int))) + p.SetValue (output, Int32.Parse (e.Text), null); + if (p.PropertyType.Equals (typeof(float))) { + p.SetValue (output, (float)Double.Parse (e.Text), null); + } + } + + Controller c = new Controller (); + + c.GenericSave (output); + + c.Dispose (); + } + public void Run () { Dialog w = (Dialog)xml.GetWidget ("abm_one");