OSDN Git Service

49c7848140f7b7721812a50e870ffeb9ac1896de
[psychlops/silverlight.git] / dev4 / 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 using System.Windows.Browser;\r
11 \r
12 \r
13 \r
14 \r
15 namespace Psychlops\r
16 {\r
17 \r
18         namespace Widgets\r
19         {\r
20 \r
21                 public class Slider\r
22                 {\r
23                         internal System.Windows.UIElement instance;\r
24                         internal System.Windows.Controls.Slider uislider;\r
25                         internal string label;\r
26                         internal Interval range;\r
27 \r
28                         public Slider(string l, Interval r)\r
29                         {\r
30                                 range = r;\r
31                                 label = l;\r
32                                 Psychlops.Widgets.Connector.stackSlider(this);\r
33                         }\r
34                         public static implicit operator double(Slider s)\r
35                         {\r
36                                 return s.value;\r
37                         }\r
38                         public double value {\r
39                                 get { return uislider.Value; }\r
40                                 set { if(uislider!=null) uislider.Dispatcher.BeginInvoke( new Action<System.Windows.Controls.Slider, double>(Connector.sliderSet) , uislider, value ); }\r
41                         }\r
42                         public bool changed { get; set; }\r
43                 }\r
44 \r
45 \r
46                 public class Browser\r
47                 {\r
48                         public class Element\r
49                         {\r
50                                 HtmlElement elem;\r
51                                 System.Object retval;\r
52 \r
53                                 public Element()\r
54                                 {\r
55                                         retval = 0;\r
56                                 }\r
57 \r
58                                 public static Element byID(string id_tag)\r
59                                 {\r
60                                         return getElementById(id_tag);\r
61                                 }\r
62                                 public static Element getElementById(string id_tag)\r
63                                 {\r
64                                         Element tmp = new Element();\r
65                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(tmp.getElementById__), id_tag);\r
66                                         return tmp;\r
67                                 }\r
68                                 void getElementById__(string id_tag)\r
69                                 {\r
70                                         elem = HtmlPage.Document.GetElementById(id_tag);\r
71                                 }\r
72 \r
73                                 public void setProperty(string name, System.Object value)\r
74                                 {\r
75                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidStringObject(setProperty__), name, value);\r
76                                 }\r
77                                 public void setProperty__(string name, System.Object value)\r
78                                 {\r
79                                         elem.SetProperty(name, value);\r
80                                 }\r
81 \r
82 \r
83                                 public static implicit operator double(Element i) { return i.getValueAsDouble(); }\r
84                                 public double getValueAsDouble()\r
85                                 {\r
86                                         double v = 0;\r
87                                         getProperty("value");\r
88                                         try\r
89                                         {\r
90                                                 v = double.Parse(retval.ToString());\r
91                                         }\r
92                                         catch (FormatException e)\r
93                                         {\r
94                                                 v = 0;\r
95                                         }\r
96                                         return v;\r
97                                 }\r
98 \r
99                                 public static implicit operator string(Element i) { return i.getProperty("value").ToString(); }\r
100                                 public System.Object getProperty(string name)\r
101                                 {\r
102                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(getProperty__), name);\r
103                                         return retval;\r
104                                 }\r
105                                 public void getProperty__(string name)\r
106                                 {\r
107                                         retval = elem.GetProperty(name);\r
108                                 }\r
109                         }\r
110                 }\r
111 \r
112 \r
113 \r
114                 internal static class Connector\r
115                 {\r
116                         internal delegate void VoidString(string s);\r
117                         internal delegate void VoidStringObject(String s, System.Object o);\r
118                         \r
119 \r
120 \r
121                         delegate void StackSlider_(Slider s);\r
122                         internal static void stackSlider(Slider s)\r
123                         {\r
124                                 Internal.Main.widgetStack.Dispatcher.BeginInvoke(new StackSlider_(stackSlider__), s);\r
125                         }\r
126                         static void stackSlider__(Slider ss)\r
127                         {\r
128                                 var holder = new System.Windows.Controls.Canvas { Width = 200 };\r
129                                 var val = new System.Windows.Controls.TextBox { Width = 100 };\r
130                                 System.Windows.Controls.Canvas.SetLeft(val, 100);\r
131                                 var slide = new System.Windows.Controls.Slider {\r
132                                                 Minimum = ss.range.begin.val, Maximum = ss.range.end.val,\r
133                                                 Name = ss.label,\r
134                                                 Tag = ss, Width = 200,\r
135                                 };\r
136                                 System.Windows.Controls.Canvas.SetTop(slide, 25);\r
137                                 var b = new System.Windows.Data.Binding {\r
138                                                 Path = new PropertyPath("Value"),\r
139                                                 Mode = System.Windows.Data.BindingMode.TwoWay,\r
140                                                 Source = slide,\r
141                                 };\r
142                                 val.SetBinding(TextBox.TextProperty, b);\r
143                                 ss.uislider = slide;\r
144                                 //var b2 = new System.Windows.Data.Binding\r
145                                 //{\r
146                                 //      Path = new PropertyPath("value"),\r
147                                 //      Mode = System.Windows.Data.BindingMode.TwoWay,\r
148                                 //      Source = ss,\r
149                                 //};\r
150                                 //val.SetBinding(System.Windows.Controls.Slider.ValueProperty, b2);\r
151                                 var label = new System.Windows.Controls.TextBlock { Text = ss.label };\r
152                                 System.Windows.Controls.Canvas.SetLeft(label, 3);\r
153                                 System.Windows.Controls.Canvas.SetTop(label, 3);\r
154 \r
155                                 holder.Children.Add(label);\r
156                                 holder.Children.Add(slide);\r
157                                 holder.Children.Add(val);\r
158                                 ss.instance = holder;\r
159                                 Internal.Main.widgetStack.Children.Add(ss.instance);\r
160                         }\r
161                         public static void sliderSet(System.Windows.Controls.Slider s, double v)\r
162                         {\r
163                                 s.Value = v;\r
164                         }\r
165 \r
166                 }\r
167 \r
168         }\r
169 \r
170 }