OSDN Git Service

123
[psychlops/silverlight.git] / dev3 / psychlops / extention / standard / widget.cs
index 21229f4..bb540ec 100644 (file)
@@ -13,5 +13,85 @@ using System.Windows.Shapes;
 namespace Psychlops\r
 {\r
 \r
+       namespace Widgets\r
+       {\r
+\r
+               public class Slider\r
+               {\r
+                       internal System.Windows.UIElement instance;\r
+                       internal System.Windows.Controls.Slider uislider;\r
+                       internal string label;\r
+                       internal Interval range;\r
+\r
+                       public Slider(string l, Interval r)\r
+                       {\r
+                               range = r;\r
+                               label = l;\r
+                               Psychlops.Widgets.Connector.stackSlider(this);\r
+                       }\r
+                       public static implicit operator double(Slider s)\r
+                       {\r
+                               return s.value;\r
+                       }\r
+                       public double value {\r
+                               get { return uislider.Value; }\r
+                               set { if(uislider!=null) uislider.Dispatcher.BeginInvoke( new Action<System.Windows.Controls.Slider, double>(Connector.sliderSet) , uislider, value ); }\r
+                       }\r
+                       public bool changed { get; set; }\r
+               }\r
+\r
+\r
+\r
+\r
+               internal static class Connector\r
+               {\r
+                       delegate void StackSlider_(Slider s);\r
+                       internal static void stackSlider(Slider s)\r
+                       {\r
+                               Internal.Main.widgetStack.Dispatcher.BeginInvoke(new StackSlider_(stackSlider__), s);\r
+                       }\r
+                       static void stackSlider__(Slider ss)\r
+                       {\r
+                               var holder = new System.Windows.Controls.Canvas { Width = 200 };\r
+                               var val = new System.Windows.Controls.TextBox { Width = 100 };\r
+                               System.Windows.Controls.Canvas.SetLeft(val, 100);\r
+                               var slide = new System.Windows.Controls.Slider {\r
+                                               Minimum = ss.range.begin.val, Maximum = ss.range.end.val,\r
+                                               Name = ss.label,\r
+                                               Tag = ss, Width = 200,\r
+                               };\r
+                               System.Windows.Controls.Canvas.SetTop(slide, 25);\r
+                               var b = new System.Windows.Data.Binding {\r
+                                               Path = new PropertyPath("Value"),\r
+                                               Mode = System.Windows.Data.BindingMode.TwoWay,\r
+                                               Source = slide,\r
+                               };\r
+                               val.SetBinding(TextBox.TextProperty, b);\r
+                               ss.uislider = slide;\r
+                               //var b2 = new System.Windows.Data.Binding\r
+                               //{\r
+                               //      Path = new PropertyPath("value"),\r
+                               //      Mode = System.Windows.Data.BindingMode.TwoWay,\r
+                               //      Source = ss,\r
+                               //};\r
+                               //val.SetBinding(System.Windows.Controls.Slider.ValueProperty, b2);\r
+                               var label = new System.Windows.Controls.TextBlock { Text = ss.label };\r
+                               System.Windows.Controls.Canvas.SetLeft(label, 3);\r
+                               System.Windows.Controls.Canvas.SetTop(label, 3);\r
+\r
+                               holder.Children.Add(label);\r
+                               holder.Children.Add(slide);\r
+                               holder.Children.Add(val);\r
+                               ss.instance = holder;\r
+                               Internal.Main.widgetStack.Children.Add(ss.instance);\r
+                       }\r
+                       public static void sliderSet(System.Windows.Controls.Slider s, double v)\r
+                       {\r
+                               s.Value = v;\r
+                       }\r
+\r
+               }\r
+\r
+       }\r
 \r
 }
\ No newline at end of file