OSDN Git Service

test
[psychlops/silverlight.git] / dev5 / 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 using System.Windows.Data;\r
12 \r
13 \r
14 \r
15 \r
16 namespace Psychlops\r
17 {\r
18 \r
19         /*\r
20         class Widget : public Figure {\r
21         public:\r
22                 class Event {\r
23                 public:\r
24                 };\r
25         };\r
26          * */\r
27 \r
28         namespace Widgets\r
29         {\r
30                 /*\r
31                 struct Theme {\r
32                         static bool initialized__;\r
33                         static Image default_button, default_horiz_grad;\r
34                         enum TYPE_TAG { NORMAL, ALERT };\r
35                         public:\r
36                         Color normal_foreground[2], active_foreground[2];\r
37                         Color normal_background[2], active_background[2], over_background[2];\r
38                         Stroke normal_stroke[2], active_stroke[2];\r
39                         Image button_back, *horiz_grad;\r
40 \r
41                         static Theme current;\r
42                         static void initialize();\r
43                 };\r
44                  * */\r
45 \r
46                 /*\r
47                 class WidgetRect : Widget\r
48                 {\r
49                         protected:\r
50                         HumanInterfaceDevice::ButtonStateHolder mleft;\r
51                         bool pushed_;\r
52 \r
53                         public:\r
54                         //Theme *theme;\r
55                         //Theme::TYPE_TAG theme_type;\r
56                         public Rectangle area;\r
57                         public Letters label;\r
58 \r
59                         public abstract WidgetRect();\r
60                         public virtual const Point getDatum() const;\r
61                         public virtual WidgetRect& setDatum(const Point&);\r
62                         public virtual WidgetRect& centering(const Point&);\r
63                         public double getWidth() const;\r
64                         public double getHeight() const;\r
65                         public double getLeft() const;\r
66                         public double getTop() const;\r
67                         public double getRight() const;\r
68                         public double getBottom() const;\r
69                         public WidgetRect& alignLeft(const double lef);\r
70                         public WidgetRect& alignTop(const double to_);\r
71                         public WidgetRect& alignRight(const double rig);\r
72                         public WidgetRect& alignBottom(const double bot);\r
73 \r
74                         public virtual WidgetRect& set(double wid, double hei);\r
75                         public virtual WidgetRect& set(std::wstring name);\r
76                         public virtual WidgetRect& set(std::wstring name, double hei);\r
77                         public virtual WidgetRect& setLabel(std::wstring s);\r
78                         public virtual WidgetRect& draw(Drawable &target = *Drawable::prime);\r
79                         public bool pushed();\r
80                         public WidgetRect& pushThis();\r
81                 };\r
82                 */\r
83                 \r
84                 /*\r
85                 public class Slider\r
86                 {\r
87                         public string label;\r
88                         public Rectangle outer;\r
89                         public Rectangle inner;\r
90                         public Stroke outer_strk;\r
91 \r
92                         public Slider()\r
93                         {\r
94                                 set(0, 0);\r
95                         }\r
96                         public Slider(double width, double height)\r
97                         {\r
98                                 set(width, height);\r
99                         }\r
100                         public Slider set(double width, double height)\r
101                         {\r
102                                 outer = new Rectangle(width, height);\r
103                                 outer.fill = Color.gray;\r
104                                 inner = new Rectangle();\r
105                                 inner.fill = Color.blue;\r
106                                 outer_strk = new Stroke();\r
107                                 outer_strk.color = Color.white;\r
108                                 outer_strk.thick = 1;\r
109                                 return this;\r
110                         }\r
111                         public void checkClick()\r
112                         {\r
113                                 if (outer.include(Mouse.position))\r
114                                 {\r
115                                         outer.stroke = outer_strk;\r
116                                 }\r
117                         }\r
118                 }\r
119                  */\r
120 \r
121                 public class Button\r
122                 {\r
123                         public static Color bgcolor;\r
124 \r
125                         internal System.Windows.Controls.Button uibutton;\r
126 \r
127                         public Button(string l)\r
128                         {\r
129                                 uibutton = new System.Windows.Controls.Button();\r
130                                 uibutton.Content = l;\r
131                         }\r
132                         public void str(string l) { }\r
133                 }\r
134 \r
135                 public class Slider\r
136                 {\r
137                         public static Color bgcolor;\r
138 \r
139                         internal System.Windows.UIElement instance;\r
140                         internal System.Windows.Controls.Slider uislider;\r
141                         internal System.Windows.Controls.TextBlock uilabel;\r
142                         internal System.Windows.Controls.TextBox uibox;\r
143                         internal string label;\r
144                         internal Interval range;\r
145                         internal SelfDelegate get_;\r
146                         internal SelfDelegate set_;\r
147                         internal double retval;\r
148                         internal bool setted_;\r
149 \r
150                         static Slider()\r
151                         {\r
152                                 bgcolor.set(.5,.5, .5, .3);\r
153                         }\r
154 \r
155                         public Slider(string l, Interval r, double initialvalue)\r
156                         {\r
157                                 retval = initialvalue;\r
158                                 range = r;\r
159                                 label = l;\r
160                                 setted_ = false;\r
161                                 Psychlops.Widgets.Connector.stackSlider(this);\r
162                                 get_ = new SelfDelegate(get__);\r
163                                 set_ = new SelfDelegate(set__);\r
164                                 while (!setted_) { System.Threading.Thread.Sleep(10); }\r
165                         }\r
166                         public static implicit operator double(Slider s)\r
167                         {\r
168                                 return s.value;\r
169                         }\r
170 \r
171                         public delegate void SelfDelegate(System.Windows.Controls.Slider s);\r
172                         public void get__(System.Windows.Controls.Slider s) { retval = s.Value; }\r
173                         public void set__(System.Windows.Controls.Slider s) { s.Value = retval; }\r
174 \r
175                         public double getValue()\r
176                         {\r
177                                 if (uislider != null) {\r
178                                         uislider.Dispatcher.BeginInvoke(get_, uislider);\r
179                                         return retval;\r
180                                 } else {\r
181                                         return 0;\r
182                                 }\r
183                         }\r
184                         public void setValue(double v)\r
185                         {\r
186                                 if (uislider != null)\r
187                                 {\r
188                                         retval = v;\r
189                                         uislider.Dispatcher.BeginInvoke(set_, uislider);\r
190                                 }\r
191                         }\r
192 \r
193                         public double value\r
194                         {\r
195                                 get { return getValue(); }\r
196                                 set { setValue(value); }\r
197                         }\r
198                         public bool changed { get; set; }\r
199                 }\r
200 \r
201 \r
202                 public class Browser\r
203                 {\r
204                         public class Element\r
205                         {\r
206                                 HtmlElement elem;\r
207                                 System.Object retval;\r
208 \r
209                                 public Element()\r
210                                 {\r
211                                         retval = 0;\r
212                                 }\r
213 \r
214                                 public static Element byID(string id_tag)\r
215                                 {\r
216                                         return getElementById(id_tag);\r
217                                 }\r
218                                 public static Element getElementById(string id_tag)\r
219                                 {\r
220                                         Element tmp = new Element();\r
221                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(tmp.getElementById__), id_tag);\r
222                                         return tmp;\r
223                                 }\r
224                                 void getElementById__(string id_tag)\r
225                                 {\r
226                                         elem = HtmlPage.Document.GetElementById(id_tag);\r
227                                 }\r
228 \r
229                                 public void setProperty(string name, System.Object value)\r
230                                 {\r
231                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidStringObject(setProperty__), name, value);\r
232                                 }\r
233                                 public void setProperty__(string name, System.Object value)\r
234                                 {\r
235                                         elem.SetProperty(name, value);\r
236                                 }\r
237 \r
238 \r
239                                 public static implicit operator double(Element i) { return i.getValueAsDouble(); }\r
240                                 public double getValueAsDouble()\r
241                                 {\r
242                                         double v = 0;\r
243                                         getProperty("value");\r
244                                         try\r
245                                         {\r
246                                                 v = double.Parse(retval.ToString());\r
247                                         }\r
248                                         catch (FormatException e)\r
249                                         {\r
250                                                 v = 0;\r
251                                         }\r
252                                         return v;\r
253                                 }\r
254 \r
255                                 public static implicit operator string(Element i) { return i.getProperty("value").ToString(); }\r
256                                 public System.Object getProperty(string name)\r
257                                 {\r
258                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(getProperty__), name);\r
259                                         return retval;\r
260                                 }\r
261                                 public void getProperty__(string name)\r
262                                 {\r
263                                         retval = elem.GetProperty(name);\r
264                                 }\r
265                         }\r
266                 }\r
267 \r
268 \r
269                 internal static partial class Connector\r
270                 {\r
271                         internal delegate void VoidString(string s);\r
272                         internal delegate void VoidStringObject(String s, System.Object o);\r
273 \r
274                         public class Double02fFormatter : IValueConverter\r
275                         {\r
276                                 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r
277                                 {\r
278                                         string formatString = parameter as string;\r
279                                         if (!string.IsNullOrEmpty(formatString))\r
280                                         {\r
281                                                 return string.Format(culture, formatString, value);\r
282                                         }\r
283                                         return string.Format("{0, -8:F}", value);\r
284                                 }\r
285                                 public object ConvertBack(object val, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r
286                                 {\r
287                                         string str = val.ToString();\r
288                                         double result;\r
289                                         var objCultureInfo = new System.Globalization.CultureInfo("en-US");\r
290                                         if (Double.TryParse(str, System.Globalization.NumberStyles.Number, objCultureInfo, out result))\r
291                                         {\r
292                                                 return result;\r
293                                         }\r
294                                         return val;\r
295                                 }\r
296                         }\r
297 \r
298                         delegate void StackSlider_(Slider s);\r
299                         internal static void stackSlider(Slider s)\r
300                         {\r
301                                 Internal.Main.widgetStack.Dispatcher.BeginInvoke(new StackSlider_(stackSlider__), s);\r
302                         }\r
303                         static void stackSlider__(Slider ss)\r
304                         {\r
305                                 var label = new System.Windows.Controls.TextBlock { Text = ss.label };\r
306                                 label.Foreground = Color.white;\r
307                                 System.Windows.Controls.Canvas.SetLeft(label, 3);\r
308                                 System.Windows.Controls.Canvas.SetTop(label, 3);\r
309                                 ss.uilabel = label;\r
310 \r
311                                 var holder = new System.Windows.Controls.Canvas { Width = 200, Height = 50 };\r
312                                 var val = new System.Windows.Controls.TextBox { Width = 100 };\r
313                                 System.Windows.Controls.Canvas.SetLeft(val, 100);\r
314                                 var slide = new System.Windows.Controls.Slider {\r
315                                                 Minimum = ss.range.begin.value, Maximum = ss.range.end.value,\r
316                                                 Name = ss.label,\r
317                                                 Value = ss.retval,\r
318                                                 Tag = ss, Width = 200,\r
319                                 };\r
320                                 System.Windows.Controls.Canvas.SetTop(slide, label.ActualHeight - 3);\r
321                                 var b = new System.Windows.Data.Binding {\r
322                                                 Path = new PropertyPath("Value"),\r
323                                                 Mode = System.Windows.Data.BindingMode.TwoWay,\r
324                                                 Source = slide,\r
325                                                 Converter = new Double02fFormatter()\r
326                                 };\r
327                                 val.SetBinding(TextBox.TextProperty, b);\r
328                                 ss.uislider = slide;\r
329                                 ss.uibox = val;\r
330                                 val.Background = Color.null_color;\r
331                                 val.BorderBrush = Color.null_color;\r
332                                 val.Foreground = Color.white;\r
333                                 val.TextAlignment = TextAlignment.Right;\r
334 \r
335                                 holder.Background = Slider.bgcolor;\r
336 \r
337                                 holder.Children.Add(label);\r
338                                 holder.Children.Add(val);\r
339                                 holder.Children.Add(slide);\r
340                                 holder.Height = label.ActualHeight + slide.ActualHeight + val.ActualHeight + 15;\r
341                                 ss.instance = holder;\r
342                                 Internal.Main.widgetStack.Children.Add(ss.instance);\r
343                                 ss.setted_ = true;\r
344                         }\r
345                 }\r
346 \r
347         }\r
348 \r
349 }\r
350 \r