]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blobdiff - demo/src/Vistas/ABMGenerico.cs
El esqueleto de la implementación está... falta rellenarlo con un poco de carne y...
[z.facultad/75.10/miklolife.git] / demo / src / Vistas / ABMGenerico.cs
index 3471b20e2b9b791cf36bc8926980790da64b9d1c..ceb15d32d21ffcabf25845bba2b8ab2b43fca36b 100644 (file)
@@ -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");