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
20 class Widget : public Figure {
\r
32 static bool initialized__;
\r
33 static Image default_button, default_horiz_grad;
\r
34 enum TYPE_TAG { NORMAL, ALERT };
\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
41 static Theme current;
\r
42 static void initialize();
\r
47 class WidgetRect : Widget
\r
50 HumanInterfaceDevice::ButtonStateHolder mleft;
\r
55 //Theme::TYPE_TAG theme_type;
\r
56 public Rectangle area;
\r
57 public Letters label;
\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
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
87 public string label;
\r
88 public Rectangle outer;
\r
89 public Rectangle inner;
\r
90 public Stroke outer_strk;
\r
96 public Slider(double width, double height)
\r
100 public Slider set(double width, double height)
\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
111 public void checkClick()
\r
113 if (outer.include(Mouse.position))
\r
115 outer.stroke = outer_strk;
\r
121 public class Button
\r
123 public static Color bgcolor;
\r
125 internal System.Windows.Controls.Button uibutton;
\r
127 public Button(string l)
\r
129 uibutton = new System.Windows.Controls.Button();
\r
130 uibutton.Content = l;
\r
132 public void str(string l) { }
\r
135 public class Slider
\r
137 public static Color bgcolor;
\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, small_step, large_step;
\r
148 internal bool setted_;
\r
152 bgcolor.set(.5,.5, .5, .3);
\r
155 public Slider(string l, Interval r, double initialvalue)
\r
157 retval = initialvalue;
\r
160 large_step = Double.NaN;
\r
161 small_step = Double.NaN;
\r
163 Psychlops.Widgets.Connector.stackSlider(this);
\r
164 get_ = new SelfDelegate(get__);
\r
165 set_ = new SelfDelegate(set__);
\r
166 while (!setted_) { System.Threading.Thread.Sleep(10); }
\r
168 public Slider(string l, Interval r, double step1, double step2)
\r
170 retval = r.begin.value;
\r
173 large_step = Math.max(step1, step2);
\r
174 small_step = Math.min(step1, step2);
\r
176 Psychlops.Widgets.Connector.stackSlider(this);
\r
177 get_ = new SelfDelegate(get__);
\r
178 set_ = new SelfDelegate(set__);
\r
179 while (!setted_) { System.Threading.Thread.Sleep(10); }
\r
181 public static implicit operator double(Slider s)
\r
186 public delegate void SelfDelegate(System.Windows.Controls.Slider s);
\r
187 public void get__(System.Windows.Controls.Slider s) { retval = s.Value; }
\r
188 public void set__(System.Windows.Controls.Slider s) { s.Value = retval; }
\r
190 public double getValue()
\r
192 if (uislider != null) {
\r
193 uislider.Dispatcher.BeginInvoke(get_, uislider);
\r
199 public void setValue(double v)
\r
201 if (uislider != null)
\r
204 uislider.Dispatcher.BeginInvoke(set_, uislider);
\r
208 public double value
\r
210 get { return getValue(); }
\r
211 set { setValue(value); }
\r
213 public bool changed { get; set; }
\r
217 public class Browser
\r
219 public class Element
\r
222 System.Object retval;
\r
229 public static Element byID(string id_tag)
\r
231 return getElementById(id_tag);
\r
233 public static Element getElementById(string id_tag)
\r
235 Element tmp = new Element();
\r
236 Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(tmp.getElementById__), id_tag);
\r
239 void getElementById__(string id_tag)
\r
241 elem = HtmlPage.Document.GetElementById(id_tag);
\r
244 public void setProperty(string name, System.Object value)
\r
246 Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidStringObject(setProperty__), name, value);
\r
248 public void setProperty__(string name, System.Object value)
\r
250 elem.SetProperty(name, value);
\r
254 public static implicit operator double(Element i) { return i.getValueAsDouble(); }
\r
255 public double getValueAsDouble()
\r
258 getProperty("value");
\r
261 v = double.Parse(retval.ToString());
\r
263 catch (FormatException e)
\r
270 public static implicit operator string(Element i) { return i.getProperty("value").ToString(); }
\r
271 public System.Object getProperty(string name)
\r
273 Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(getProperty__), name);
\r
276 public void getProperty__(string name)
\r
278 retval = elem.GetProperty(name);
\r
284 internal static partial class Connector
\r
286 internal delegate void VoidString(string s);
\r
287 internal delegate void VoidStringObject(String s, System.Object o);
\r
289 public class Double02fFormatter : IValueConverter
\r
291 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
\r
293 string formatString = parameter as string;
\r
294 if (!string.IsNullOrEmpty(formatString))
\r
296 return string.Format(culture, formatString, value);
\r
298 return string.Format("{0, -8:F}", value);
\r
300 public object ConvertBack(object val, Type targetType, object parameter, System.Globalization.CultureInfo culture)
\r
302 string str = val.ToString();
\r
304 var objCultureInfo = new System.Globalization.CultureInfo("en-US");
\r
305 if (Double.TryParse(str, System.Globalization.NumberStyles.Number, objCultureInfo, out result))
\r
313 delegate void StackSlider_(Slider s);
\r
314 internal static void stackSlider(Slider s)
\r
316 Internal.Main.widgetStack.Dispatcher.BeginInvoke(new StackSlider_(stackSlider__), s);
\r
318 static void stackSlider__(Slider ss)
\r
320 var label = new System.Windows.Controls.TextBlock { Text = ss.label };
\r
321 label.Foreground = Color.white;
\r
322 System.Windows.Controls.Canvas.SetLeft(label, 3);
\r
323 System.Windows.Controls.Canvas.SetTop(label, 3);
\r
324 ss.uilabel = label;
\r
326 var holder = new System.Windows.Controls.Canvas { Width = 200, Height = 50 };
\r
327 var val = new System.Windows.Controls.TextBox { Width = 100 };
\r
328 System.Windows.Controls.Canvas.SetLeft(val, 100);
\r
329 var slide = new System.Windows.Controls.Slider {
\r
330 Minimum = ss.range.begin.value, Maximum = ss.range.end.value,
\r
333 Tag = ss, Width = 200,
\r
335 if (!Double.IsNaN(ss.large_step))
\r
337 slide.LargeChange = ss.large_step;
\r
339 if (!Double.IsNaN(ss.small_step))
\r
341 slide.SmallChange = ss.small_step;
\r
343 slide.ValueChanged += slider_ValueChanged;
\r
344 System.Windows.Controls.Canvas.SetTop(slide, label.ActualHeight - 3);
\r
345 var b = new System.Windows.Data.Binding {
\r
346 Path = new PropertyPath("Value"),
\r
347 Mode = System.Windows.Data.BindingMode.TwoWay,
\r
349 Converter = new Double02fFormatter()
\r
351 val.SetBinding(TextBox.TextProperty, b);
\r
352 ss.uislider = slide;
\r
354 val.Background = Color.null_color;
\r
355 val.BorderBrush = Color.null_color;
\r
356 val.Foreground = Color.white;
\r
357 val.TextAlignment = TextAlignment.Right;
\r
359 holder.Background = Slider.bgcolor;
\r
361 holder.Children.Add(label);
\r
362 holder.Children.Add(val);
\r
363 holder.Children.Add(slide);
\r
364 holder.Height = label.ActualHeight + slide.ActualHeight + val.ActualHeight + 15;
\r
365 ss.instance = holder;
\r
366 Internal.Main.widgetStack.Children.Add(ss.instance);
\r
369 private static void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
\r
371 System.Windows.Controls.Slider sl = sender as System.Windows.Controls.Slider;
\r
374 double rounded = Math.round((sl.Value - sl.Minimum) / sl.SmallChange) * sl.SmallChange;
\r
375 if ((sl.Value - sl.Minimum) * sl.SmallChange != rounded)
\r
377 sl.Value = rounded;
\r