Author: fejj
Date: 2007-06-29 16:46:13 -0400 (Fri, 29 Jun 2007)
New Revision: 81078

Modified:
   trunk/lunareclipse/Properties/PropertyGroupAppearance.cs
   trunk/lunareclipse/Properties/PropertyGroupLayout.cs
Log:
got enums working

Modified: trunk/lunareclipse/Properties/PropertyGroupAppearance.cs
===================================================================
--- trunk/lunareclipse/Properties/PropertyGroupAppearance.cs    2007-06-29 
20:38:42 UTC (rev 81077)
+++ trunk/lunareclipse/Properties/PropertyGroupAppearance.cs    2007-06-29 
20:46:13 UTC (rev 81078)
@@ -8,27 +8,28 @@
 using System.Collections.Generic;
 
 using System.Windows;
+using System.Windows.Media;
 
 using Gtk;
 
 namespace LunarEclipse {
        public class PropertyGroupAppearance : PropertyGroup {
                enum PropType {
-                       Cap,
                        Data,
                        Double,
                        Integer,
                        Percent,
                        Stretch,
-                       LineJoin,
                        DashArray,
+                       PenLineCap,
+                       PenLineJoin,
                        Visibility,
                }
                
-               static string [] capEntries = { "Flat", "Square", "Round", 
"Triangle" };
-               static string [] stretchEntries = { "None", "Fill", "Uniform", 
"UniformToFill" };
-               static string [] lineJoinEntries = { "Miter", "Bevel", "Round" 
};
-               static string [] visibilityEntries = { "Visible", "Hidden", 
"Collapsed" };
+               static string [] stretchEnums = { "None", "Fill", "Uniform", 
"UniformToFill" };
+               static string [] penLineCapEnums = { "Flat", "Square", "Round", 
"Triangle" };
+               static string [] penLineJoinEnums = { "Miter", "Bevel", "Round" 
};
+               static string [] visibilityEnums = { "Visible", "Collapsed", 
"Hidden" };
                
                struct PropInfo {
                        public string Name;
@@ -44,21 +45,21 @@
                }
                
                static PropInfo [] info = new PropInfo [14] {
-                       new PropInfo ("OpacityProperty",            
PropType.Percent,    false),
-                       new PropInfo ("VisibilityProperty",         
PropType.Visibility, false),
-                       new PropInfo ("DataProperty",               
PropType.Data,       false),
-                       new PropInfo ("RadiusXProperty",            
PropType.Double,     false),
-                       new PropInfo ("RadiusYProperty",            
PropType.Double,     false),
-                       new PropInfo ("StrokeThicknessProperty",    
PropType.Integer,    false),
+                       new PropInfo ("OpacityProperty",            
PropType.Percent,     false),
+                       new PropInfo ("VisibilityProperty",         
PropType.Visibility,  false),
+                       new PropInfo ("DataProperty",               
PropType.Data,        false),
+                       new PropInfo ("RadiusXProperty",            
PropType.Double,      false),
+                       new PropInfo ("RadiusYProperty",            
PropType.Double,      false),
+                       new PropInfo ("StrokeThicknessProperty",    
PropType.Integer,     false),
                        // extended properties
-                       new PropInfo ("StretchProperty",            
PropType.Stretch,    true),
-                       new PropInfo ("StrokeDashArrayProperty",    
PropType.DashArray,  true),
-                       new PropInfo ("StrokeDashCapProperty",      
PropType.Cap,        true),
-                       new PropInfo ("StrokeDashOffsetProperty",   
PropType.Integer,    true),
-                       new PropInfo ("StrokeStartLineCapProperty", 
PropType.Cap,        true),
-                       new PropInfo ("StrokeEndLineCapProperty",   
PropType.Cap,        true),
-                       new PropInfo ("StrokeLineJoinProperty",     
PropType.LineJoin,   true),
-                       new PropInfo ("StrokeMiterLimitProperty",   
PropType.Integer,    true)
+                       new PropInfo ("StretchProperty",            
PropType.Stretch,     true),
+                       new PropInfo ("StrokeDashArrayProperty",    
PropType.DashArray,   true),
+                       new PropInfo ("StrokeDashCapProperty",      
PropType.PenLineCap,  true),
+                       new PropInfo ("StrokeDashOffsetProperty",   
PropType.Integer,     true),
+                       new PropInfo ("StrokeStartLineCapProperty", 
PropType.PenLineCap,  true),
+                       new PropInfo ("StrokeEndLineCapProperty",   
PropType.PenLineCap,  true),
+                       new PropInfo ("StrokeLineJoinProperty",     
PropType.PenLineJoin, true),
+                       new PropInfo ("StrokeMiterLimitProperty",   
PropType.Integer,     true)
                };
                
                DependencyObject item;
@@ -81,7 +82,7 @@
                                return;
                        }
                        
-                       List<FieldInfo> props = new List<FieldInfo> ();
+                       Hashtable props = new Hashtable ();
                        for (Type type = item.GetType (); type != null; type = 
type.BaseType) {
                                FieldInfo[] fields = type.GetFields ();
                                foreach (FieldInfo field in fields) {
@@ -94,7 +95,7 @@
                                                                erows++;
                                                        else
                                                                rows++;
-                                                       props.Add (field);
+                                                       props.Add 
(info[i].Name, field);
                                                        hasProps = true;
                                                        break;
                                                }
@@ -116,83 +117,91 @@
                        propTable = new Hashtable ();
                        
                        for (i = 0; i < info.Length; i++) {
-                               foreach (FieldInfo field in props) {
-                                       if (field.Name == info[i].Name) {
-                                               string propName = 
info[i].Name.Substring (0, info[i].Name.Length - 8);
-                                               DependencyProperty prop = 
(DependencyProperty) field.GetValue (item);
-                                               object value = item.GetValue 
(prop);
-                                               Adjustment adj;
-                                               
-                                               Widget label = new Label 
(propName);
-                                               label.Show ();
-                                               
-                                               Widget widget = null;
-                                               
-                                               switch (info[i].Type) {
-                                               case PropType.Cap:
-                                                       widget = new ComboBox 
(capEntries);
-                                                       ((ComboBox) 
widget).Changed += new EventHandler (OnComboChanged);
-                                                       break;
-                                               case PropType.Data:
-                                                       widget = new Entry ();
-                                                       ((Entry) 
widget).Changed += new EventHandler (OnDataChanged);
-                                                       break;
-                                               case PropType.Double:
-                                                       adj = new Adjustment 
(0.0, 0.0, Double.MaxValue, 1.0, 10.0, 100.0);
-                                                       widget = new SpinButton 
(adj, 1.0, 2);
-                                                       ((SpinButton) 
widget).Numeric = true;
-                                                       if (value != null)
-                                                               ((SpinButton) 
widget).Value = (double) value;
-                                                       ((SpinButton) 
widget).Changed += new EventHandler (OnDoubleChanged);
-                                                       break;
-                                               case PropType.Integer:
-                                                       adj = new Adjustment 
(0.0, 0.0, Int32.MaxValue, 1.0, 10.0, 100.0);
-                                                       widget = new SpinButton 
(adj, 1.0, 0);
-                                                       ((SpinButton) 
widget).Numeric = true;
-                                                       if (value != null)
-                                                               ((SpinButton) 
widget).Value = (double) value;
-                                                       ((SpinButton) 
widget).Changed += new EventHandler (OnIntegerChanged);
-                                                       break;
-                                               case PropType.Percent:
-                                                       adj = new Adjustment 
(0.0, 0.0, 1.0, 0.01, 0.1, 1.0);
-                                                       widget = new SpinButton 
(adj, 0.01, 2);
-                                                       ((SpinButton) 
widget).Numeric = true;
-                                                       ((SpinButton) 
widget).SetRange (0.0, 1.0);
-                                                       if (value != null)
-                                                               ((SpinButton) 
widget).Value = (double) value;
-                                                       ((SpinButton) 
widget).Changed += new EventHandler (OnDoubleChanged);
-                                                       break;
-                                               case PropType.Stretch:
-                                                       widget = new ComboBox 
(stretchEntries);
-                                                       ((ComboBox) 
widget).Changed += new EventHandler (OnComboChanged);
-                                                       break;
-                                               case PropType.LineJoin:
-                                                       widget = new ComboBox 
(lineJoinEntries);
-                                                       ((ComboBox) 
widget).Changed += new EventHandler (OnComboChanged);
-                                                       break;
-                                               case PropType.DashArray:
-                                                       widget = new Button 
("...");
-                                                       break;
-                                               case PropType.Visibility:
-                                                       widget = new ComboBox 
(visibilityEntries);
-                                                       ((ComboBox) 
widget).Changed += new EventHandler (OnComboChanged);
-                                                       break;
-                                               }
-                                               
-                                               propTable.Add (widget, prop);
-                                               widget.Show ();
-                                               
-                                               if (info[i].Extended) {
-                                                       ((Table) 
extended).Attach (label, 0, 1, etop, etop + 1);
-                                                       ((Table) 
extended).Attach (widget, 1, 2, etop, etop + 1);
-                                                       etop++;
-                                               } else {
-                                                       ((Table) main).Attach 
(label, 0, 1, top, top + 1);
-                                                       ((Table) main).Attach 
(widget, 1, 2, top, top + 1);
-                                                       top++;
-                                               }
-                                       }
+                               FieldInfo field = (FieldInfo) 
props[info[i].Name];
+                               if (field == null)
+                                       continue;
+                               
+                               string propName = info[i].Name.Substring (0, 
info[i].Name.Length - 8);
+                               DependencyProperty prop = (DependencyProperty) 
field.GetValue (item);
+                               object value = item.GetValue (prop);
+                               Adjustment adj;
+                               
+                               Widget label = new Label (propName);
+                               label.Show ();
+                               
+                               Widget widget = null;
+                               
+                               Console.WriteLine ("Appearance: {0} = {1} 
({2})", propName, 
+                                                  value != null ? 
value.ToString () : "(null)", 
+                                                  value != null ? 
value.GetType ().ToString () : "(null)");
+                               
+                               switch (info[i].Type) {
+                               case PropType.PenLineCap:
+                                       widget = new ComboBox (penLineCapEnums);
+                                       ((ComboBox) widget).Active = (int) 
value;
+                                       ((ComboBox) widget).Changed += new 
EventHandler (OnCapChanged);
+                                       break;
+                               case PropType.Data:
+                                       widget = new Entry ();
+                                       ((Entry) widget).Changed += new 
EventHandler (OnDataChanged);
+                                       break;
+                               case PropType.Double:
+                                       adj = new Adjustment (0.0, 0.0, 
Double.MaxValue, 1.0, 10.0, 100.0);
+                                       widget = new SpinButton (adj, 1.0, 2);
+                                       ((SpinButton) widget).Numeric = true;
+                                       if (value != null)
+                                               ((SpinButton) widget).Value = 
(double) value;
+                                       ((SpinButton) widget).Changed += new 
EventHandler (OnDoubleChanged);
+                                       break;
+                               case PropType.Integer:
+                                       adj = new Adjustment (0.0, 0.0, 
Int32.MaxValue, 1.0, 10.0, 100.0);
+                                       widget = new SpinButton (adj, 1.0, 0);
+                                       ((SpinButton) widget).Numeric = true;
+                                       if (value != null)
+                                               ((SpinButton) widget).Value = 
(double) value;
+                                       ((SpinButton) widget).Changed += new 
EventHandler (OnIntegerChanged);
+                                       break;
+                               case PropType.Percent:
+                                       adj = new Adjustment (0.0, 0.0, 1.0, 
0.01, 0.1, 1.0);
+                                       widget = new SpinButton (adj, 0.01, 2);
+                                       ((SpinButton) widget).Numeric = true;
+                                       ((SpinButton) widget).SetRange (0.0, 
1.0);
+                                       if (value != null)
+                                               ((SpinButton) widget).Value = 
(double) value;
+                                       ((SpinButton) widget).Changed += new 
EventHandler (OnDoubleChanged);
+                                       break;
+                               case PropType.Stretch:
+                                       widget = new ComboBox (stretchEnums);
+                                       ((ComboBox) widget).Active = (int) 
value;
+                                       ((ComboBox) widget).Changed += new 
EventHandler (OnStretchChanged);
+                                       break;
+                               case PropType.PenLineJoin:
+                                       widget = new ComboBox 
(penLineJoinEnums);
+                                       ((ComboBox) widget).Active = (int) 
value;
+                                       ((ComboBox) widget).Changed += new 
EventHandler (OnLineJoinChanged);
+                                       break;
+                               case PropType.DashArray:
+                                       widget = new Button ("...");
+                                       break;
+                               case PropType.Visibility:
+                                       widget = new ComboBox (visibilityEnums);
+                                       ((ComboBox) widget).Active = (int) 
value;
+                                       ((ComboBox) widget).Changed += new 
EventHandler (OnVisibilityChanged);
+                                       break;
                                }
+                               
+                               propTable.Add (widget, prop);
+                               widget.Show ();
+                               
+                               if (info[i].Extended) {
+                                       ((Table) extended).Attach (label, 0, 1, 
etop, etop + 1);
+                                       ((Table) extended).Attach (widget, 1, 
2, etop, etop + 1);
+                                       etop++;
+                               } else {
+                                       ((Table) main).Attach (label, 0, 1, 
top, top + 1);
+                                       ((Table) main).Attach (widget, 1, 2, 
top, top + 1);
+                                       top++;
+                               }
                        }
                        
                        main.Show ();
@@ -227,14 +236,38 @@
                }
                
                // callbacks
-               void OnComboChanged (object o, EventArgs e)
+               void OnCapChanged (object o, EventArgs e)
                {
                        DependencyProperty prop = (DependencyProperty) 
propTable[o];
                        ComboBox combo = (ComboBox) o;
                        
-                       item.SetValue (prop, combo.ActiveText);
+                       item.SetValue<PenLineCap> (prop, (PenLineCap) 
combo.Active);
                }
                
+               void OnStretchChanged (object o, EventArgs e)
+               {
+                       DependencyProperty prop = (DependencyProperty) 
propTable[o];
+                       ComboBox combo = (ComboBox) o;
+                       
+                       item.SetValue<Stretch> (prop, (Stretch) combo.Active);
+               }
+               
+               void OnLineJoinChanged (object o, EventArgs e)
+               {
+                       DependencyProperty prop = (DependencyProperty) 
propTable[o];
+                       ComboBox combo = (ComboBox) o;
+                       
+                       item.SetValue<PenLineJoin> (prop, (PenLineJoin) 
combo.Active);
+               }
+               
+               void OnVisibilityChanged (object o, EventArgs e)
+               {
+                       DependencyProperty prop = (DependencyProperty) 
propTable[o];
+                       ComboBox combo = (ComboBox) o;
+                       
+                       item.SetValue<Visibility> (prop, (Visibility) 
combo.Active);
+               }
+               
                void OnDoubleChanged (object o, EventArgs e)
                {
                        DependencyProperty prop = (DependencyProperty) 
propTable[o];

Modified: trunk/lunareclipse/Properties/PropertyGroupLayout.cs
===================================================================
--- trunk/lunareclipse/Properties/PropertyGroupLayout.cs        2007-06-29 
20:38:42 UTC (rev 81077)
+++ trunk/lunareclipse/Properties/PropertyGroupLayout.cs        2007-06-29 
20:46:13 UTC (rev 81078)
@@ -8,6 +8,7 @@
 using System.Collections.Generic;
 
 using System.Windows;
+using System.Windows.Controls;
 
 using Gtk;
 
@@ -88,12 +89,30 @@
                        
                        for (i = 0; i < info.Length; i++) {
                                FieldInfo field = (FieldInfo) 
props[info[i].Name];
-                               if (field == null)
+                               if (field == null && !info[i].Attached)
                                        continue;
                                
                                string propName = info[i].Name.Substring (0, 
info[i].Name.Length - 8);
-                               DependencyProperty prop = (DependencyProperty) 
field.GetValue (item);
-                               object value = item.GetValue (prop);
+                               DependencyProperty prop = null;
+                               object value = null;
+                               
+                               if (!info[i].Attached) {
+                                       prop = (DependencyProperty) 
field.GetValue (item);
+                                       value = item.GetValue (prop);
+                               } else {
+                                       // Attached properties
+                                       switch (info[i].Name) {
+                                       case "LeftProperty":
+                                               prop = Canvas.LeftProperty;
+                                               value = item.GetValue (prop);
+                                               break;
+                                       case "TopProperty":
+                                               prop = Canvas.TopProperty;
+                                               value = item.GetValue (prop);
+                                               break;
+                                       }
+                               }
+                               
                                Widget label = new Label (propName);
                                label.Show ();
                                
@@ -102,7 +121,10 @@
                                ((SpinButton) widget).SetRange (0.0, (double) 
Int32.MaxValue);
                                ((SpinButton) widget).Numeric = true;
                                
-                               Console.WriteLine ("Layout: {0} = {1} ({2})", 
propName, value, value.GetType ());
+                               Console.WriteLine ("Layout: {0} = {1} ({2})", 
propName, 
+                                                  value != null ? 
value.ToString () : "(null)", 
+                                                  value != null ? 
value.GetType ().ToString () : "(null)");
+                               
                                if (value != null) {
                                        switch (value.GetType ().Name) {
                                        case "Double":

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to