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