OSDN Git Service

bb540ecc46829bc31015b026be280da81b108908
[psychlops/silverlight.git] / dev3 / psychlops / extention / standard / widget.cs
1 using System;\r
2 using System.Windows;\r
3 using System.Windows.Controls;\r
4 using System.Windows.Documents;\r
5 using System.Windows.Input;\r
6 using System.Windows.Media;\r
7 using System.Windows.Media.Animation;\r
8 using System.Windows.Media.Imaging;\r
9 using System.Windows.Shapes;\r
10 \r
11 \r
12 \r
13 namespace Psychlops\r
14 {\r
15 \r
16         namespace Widgets\r
17         {\r
18 \r
19                 public class Slider\r
20                 {\r
21                         internal System.Windows.UIElement instance;\r
22                         internal System.Windows.Controls.Slider uislider;\r
23                         internal string label;\r
24                         internal Interval range;\r
25 \r
26                         public Slider(string l, Interval r)\r
27                         {\r
28                                 range = r;\r
29                                 label = l;\r
30                                 Psychlops.Widgets.Connector.stackSlider(this);\r
31                         }\r
32                         public static implicit operator double(Slider s)\r
33                         {\r
34                                 return s.value;\r
35                         }\r
36                         public double value {\r
37                                 get { return uislider.Value; }\r
38                                 set { if(uislider!=null) uislider.Dispatcher.BeginInvoke( new Action<System.Windows.Controls.Slider, double>(Connector.sliderSet) , uislider, value ); }\r
39                         }\r
40                         public bool changed { get; set; }\r
41                 }\r
42 \r
43 \r
44 \r
45 \r
46                 internal static class Connector\r
47                 {\r
48                         delegate void StackSlider_(Slider s);\r
49                         internal static void stackSlider(Slider s)\r
50                         {\r
51                                 Internal.Main.widgetStack.Dispatcher.BeginInvoke(new StackSlider_(stackSlider__), s);\r
52                         }\r
53                         static void stackSlider__(Slider ss)\r
54                         {\r
55                                 var holder = new System.Windows.Controls.Canvas { Width = 200 };\r
56                                 var val = new System.Windows.Controls.TextBox { Width = 100 };\r
57                                 System.Windows.Controls.Canvas.SetLeft(val, 100);\r
58                                 var slide = new System.Windows.Controls.Slider {\r
59                                                 Minimum = ss.range.begin.val, Maximum = ss.range.end.val,\r
60                                                 Name = ss.label,\r
61                                                 Tag = ss, Width = 200,\r
62                                 };\r
63                                 System.Windows.Controls.Canvas.SetTop(slide, 25);\r
64                                 var b = new System.Windows.Data.Binding {\r
65                                                 Path = new PropertyPath("Value"),\r
66                                                 Mode = System.Windows.Data.BindingMode.TwoWay,\r
67                                                 Source = slide,\r
68                                 };\r
69                                 val.SetBinding(TextBox.TextProperty, b);\r
70                                 ss.uislider = slide;\r
71                                 //var b2 = new System.Windows.Data.Binding\r
72                                 //{\r
73                                 //      Path = new PropertyPath("value"),\r
74                                 //      Mode = System.Windows.Data.BindingMode.TwoWay,\r
75                                 //      Source = ss,\r
76                                 //};\r
77                                 //val.SetBinding(System.Windows.Controls.Slider.ValueProperty, b2);\r
78                                 var label = new System.Windows.Controls.TextBlock { Text = ss.label };\r
79                                 System.Windows.Controls.Canvas.SetLeft(label, 3);\r
80                                 System.Windows.Controls.Canvas.SetTop(label, 3);\r
81 \r
82                                 holder.Children.Add(label);\r
83                                 holder.Children.Add(slide);\r
84                                 holder.Children.Add(val);\r
85                                 ss.instance = holder;\r
86                                 Internal.Main.widgetStack.Children.Add(ss.instance);\r
87                         }\r
88                         public static void sliderSet(System.Windows.Controls.Slider s, double v)\r
89                         {\r
90                                 s.Value = v;\r
91                         }\r
92 \r
93                 }\r
94 \r
95         }\r
96 \r
97 }