OSDN Git Service

42e76687881ea65d8f933b77800047fbfe0ce0c5
[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 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 \r
122                 public class Slider\r
123                 {\r
124                         public static Color bgcolor;\r
125 \r
126                         internal System.Windows.UIElement instance;\r
127                         internal System.Windows.Controls.Slider uislider;\r
128                         internal System.Windows.Controls.TextBlock uilabel;\r
129                         internal System.Windows.Controls.TextBox uibox;\r
130                         internal string label;\r
131                         internal Interval range;\r
132                         internal SelfDelegate get_;\r
133                         internal SelfDelegate set_;\r
134                         internal double retval;\r
135                         internal bool setted_;\r
136 \r
137                         static Slider()\r
138                         {\r
139                                 bgcolor.set(.5,.5, .5, .3);\r
140                         }\r
141 \r
142                         public Slider(string l, Interval r, double initialvalue)\r
143                         {\r
144                                 retval = initialvalue;\r
145                                 range = r;\r
146                                 label = l;\r
147                                 setted_ = false;\r
148                                 Psychlops.Widgets.Connector.stackSlider(this);\r
149                                 get_ = new SelfDelegate(get__);\r
150                                 set_ = new SelfDelegate(set__);\r
151                                 while (!setted_) { System.Threading.Thread.Sleep(10); }\r
152                         }\r
153                         public static implicit operator double(Slider s)\r
154                         {\r
155                                 return s.value;\r
156                         }\r
157 \r
158                         public delegate void SelfDelegate(System.Windows.Controls.Slider s);\r
159                         public void get__(System.Windows.Controls.Slider s) { retval = s.Value; }\r
160                         public void set__(System.Windows.Controls.Slider s) { s.Value = retval; }\r
161 \r
162                         public double getValue()\r
163                         {\r
164                                 if (uislider != null) {\r
165                                         uislider.Dispatcher.BeginInvoke(get_, uislider);\r
166                                         return retval;\r
167                                 } else {\r
168                                         return 0;\r
169                                 }\r
170                         }\r
171                         public void setValue(double v)\r
172                         {\r
173                                 if (uislider != null)\r
174                                 {\r
175                                         retval = v;\r
176                                         uislider.Dispatcher.BeginInvoke(set_, uislider);\r
177                                 }\r
178                         }\r
179 \r
180                         public double value\r
181                         {\r
182                                 get { return getValue(); }\r
183                                 set { setValue(value); }\r
184                         }\r
185                         public bool changed { get; set; }\r
186                 }\r
187 \r
188 \r
189                 public class Browser\r
190                 {\r
191                         public class Element\r
192                         {\r
193                                 HtmlElement elem;\r
194                                 System.Object retval;\r
195 \r
196                                 public Element()\r
197                                 {\r
198                                         retval = 0;\r
199                                 }\r
200 \r
201                                 public static Element byID(string id_tag)\r
202                                 {\r
203                                         return getElementById(id_tag);\r
204                                 }\r
205                                 public static Element getElementById(string id_tag)\r
206                                 {\r
207                                         Element tmp = new Element();\r
208                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(tmp.getElementById__), id_tag);\r
209                                         return tmp;\r
210                                 }\r
211                                 void getElementById__(string id_tag)\r
212                                 {\r
213                                         elem = HtmlPage.Document.GetElementById(id_tag);\r
214                                 }\r
215 \r
216                                 public void setProperty(string name, System.Object value)\r
217                                 {\r
218                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidStringObject(setProperty__), name, value);\r
219                                 }\r
220                                 public void setProperty__(string name, System.Object value)\r
221                                 {\r
222                                         elem.SetProperty(name, value);\r
223                                 }\r
224 \r
225 \r
226                                 public static implicit operator double(Element i) { return i.getValueAsDouble(); }\r
227                                 public double getValueAsDouble()\r
228                                 {\r
229                                         double v = 0;\r
230                                         getProperty("value");\r
231                                         try\r
232                                         {\r
233                                                 v = double.Parse(retval.ToString());\r
234                                         }\r
235                                         catch (FormatException e)\r
236                                         {\r
237                                                 v = 0;\r
238                                         }\r
239                                         return v;\r
240                                 }\r
241 \r
242                                 public static implicit operator string(Element i) { return i.getProperty("value").ToString(); }\r
243                                 public System.Object getProperty(string name)\r
244                                 {\r
245                                         Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(getProperty__), name);\r
246                                         return retval;\r
247                                 }\r
248                                 public void getProperty__(string name)\r
249                                 {\r
250                                         retval = elem.GetProperty(name);\r
251                                 }\r
252                         }\r
253                 }\r
254 \r
255 \r
256                 internal static class Connector\r
257                 {\r
258                         internal delegate void VoidString(string s);\r
259                         internal delegate void VoidStringObject(String s, System.Object o);\r
260 \r
261                         public class Double02fFormatter : IValueConverter\r
262                         {\r
263                                 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r
264                                 {\r
265                                         string formatString = parameter as string;\r
266                                         if (!string.IsNullOrEmpty(formatString))\r
267                                         {\r
268                                                 return string.Format(culture, formatString, value);\r
269                                         }\r
270                                         return string.Format("{0, -8:F}", value);\r
271                                 }\r
272                                 public object ConvertBack(object val, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r
273                                 {\r
274                                         string str = val.ToString();\r
275                                         double result;\r
276                                         var objCultureInfo = new System.Globalization.CultureInfo("en-US");\r
277                                         if (Double.TryParse(str, System.Globalization.NumberStyles.Number, objCultureInfo, out result))\r
278                                         {\r
279                                                 return result;\r
280                                         }\r
281                                         return val;\r
282                                 }\r
283                         }\r
284 \r
285                         delegate void StackSlider_(Slider s);\r
286                         internal static void stackSlider(Slider s)\r
287                         {\r
288                                 Internal.Main.widgetStack.Dispatcher.BeginInvoke(new StackSlider_(stackSlider__), s);\r
289                         }\r
290                         static void stackSlider__(Slider ss)\r
291                         {\r
292                                 var label = new System.Windows.Controls.TextBlock { Text = ss.label };\r
293                                 label.Foreground = Color.white;\r
294                                 System.Windows.Controls.Canvas.SetLeft(label, 3);\r
295                                 System.Windows.Controls.Canvas.SetTop(label, 3);\r
296                                 ss.uilabel = label;\r
297 \r
298                                 var holder = new System.Windows.Controls.Canvas { Width = 200, Height = 50 };\r
299                                 var val = new System.Windows.Controls.TextBox { Width = 100 };\r
300                                 System.Windows.Controls.Canvas.SetLeft(val, 100);\r
301                                 var slide = new System.Windows.Controls.Slider {\r
302                                                 Minimum = ss.range.begin.value, Maximum = ss.range.end.value,\r
303                                                 Name = ss.label,\r
304                                                 Value = ss.retval,\r
305                                                 Tag = ss, Width = 200,\r
306                                 };\r
307                                 System.Windows.Controls.Canvas.SetTop(slide, label.ActualHeight - 3);\r
308                                 var b = new System.Windows.Data.Binding {\r
309                                                 Path = new PropertyPath("Value"),\r
310                                                 Mode = System.Windows.Data.BindingMode.TwoWay,\r
311                                                 Source = slide,\r
312                                                 Converter = new Double02fFormatter()\r
313                                 };\r
314                                 val.SetBinding(TextBox.TextProperty, b);\r
315                                 ss.uislider = slide;\r
316                                 ss.uibox = val;\r
317                                 val.Background = Color.null_color;\r
318                                 val.BorderBrush = Color.null_color;\r
319                                 val.Foreground = Color.white;\r
320                                 val.TextAlignment = TextAlignment.Right;\r
321 \r
322                                 holder.Background = Slider.bgcolor;\r
323 \r
324                                 holder.Children.Add(label);\r
325                                 holder.Children.Add(val);\r
326                                 holder.Children.Add(slide);\r
327                                 holder.Height = label.ActualHeight + slide.ActualHeight + val.ActualHeight + 15;\r
328                                 ss.instance = holder;\r
329                                 Internal.Main.widgetStack.Children.Add(ss.instance);\r
330                                 ss.setted_ = true;\r
331                         }\r
332                 }\r
333 \r
334         }\r
335 \r
336 }\r
337 \r