using System.Windows.Media.Animation;\r
using System.Windows.Media.Imaging;\r
using System.Windows.Shapes;\r
+using System.Windows.Browser;\r
+using System.Windows.Data;\r
+\r
\r
\r
\r
namespace Psychlops\r
{\r
\r
+ /*\r
+ class Widget : public Figure {\r
+ public:\r
+ class Event {\r
+ public:\r
+ };\r
+ };\r
+ * */\r
+\r
namespace Widgets\r
{\r
+ /*\r
+ struct Theme {\r
+ static bool initialized__;\r
+ static Image default_button, default_horiz_grad;\r
+ enum TYPE_TAG { NORMAL, ALERT };\r
+ public:\r
+ Color normal_foreground[2], active_foreground[2];\r
+ Color normal_background[2], active_background[2], over_background[2];\r
+ Stroke normal_stroke[2], active_stroke[2];\r
+ Image button_back, *horiz_grad;\r
+\r
+ static Theme current;\r
+ static void initialize();\r
+ };\r
+ * */\r
+\r
+ /*\r
+ class WidgetRect : Widget\r
+ {\r
+ protected:\r
+ HumanInterfaceDevice::ButtonStateHolder mleft;\r
+ bool pushed_;\r
+\r
+ public:\r
+ //Theme *theme;\r
+ //Theme::TYPE_TAG theme_type;\r
+ public Rectangle area;\r
+ public Letters label;\r
\r
+ public abstract WidgetRect();\r
+ public virtual const Point getDatum() const;\r
+ public virtual WidgetRect& setDatum(const Point&);\r
+ public virtual WidgetRect& centering(const Point&);\r
+ public double getWidth() const;\r
+ public double getHeight() const;\r
+ public double getLeft() const;\r
+ public double getTop() const;\r
+ public double getRight() const;\r
+ public double getBottom() const;\r
+ public WidgetRect& alignLeft(const double lef);\r
+ public WidgetRect& alignTop(const double to_);\r
+ public WidgetRect& alignRight(const double rig);\r
+ public WidgetRect& alignBottom(const double bot);\r
+\r
+ public virtual WidgetRect& set(double wid, double hei);\r
+ public virtual WidgetRect& set(std::wstring name);\r
+ public virtual WidgetRect& set(std::wstring name, double hei);\r
+ public virtual WidgetRect& setLabel(std::wstring s);\r
+ public virtual WidgetRect& draw(Drawable &target = *Drawable::prime);\r
+ public bool pushed();\r
+ public WidgetRect& pushThis();\r
+ };\r
+ */\r
+ \r
+ /*\r
public class Slider\r
{\r
+ public string label;\r
+ public Rectangle outer;\r
+ public Rectangle inner;\r
+ public Stroke outer_strk;\r
+\r
+ public Slider()\r
+ {\r
+ set(0, 0);\r
+ }\r
+ public Slider(double width, double height)\r
+ {\r
+ set(width, height);\r
+ }\r
+ public Slider set(double width, double height)\r
+ {\r
+ outer = new Rectangle(width, height);\r
+ outer.fill = Color.gray;\r
+ inner = new Rectangle();\r
+ inner.fill = Color.blue;\r
+ outer_strk = new Stroke();\r
+ outer_strk.color = Color.white;\r
+ outer_strk.thick = 1;\r
+ return this;\r
+ }\r
+ public void checkClick()\r
+ {\r
+ if (outer.include(Mouse.position))\r
+ {\r
+ outer.stroke = outer_strk;\r
+ }\r
+ }\r
+ }\r
+ */\r
+\r
+\r
+ public class Slider\r
+ {\r
+ public static Color bgcolor;\r
+\r
internal System.Windows.UIElement instance;\r
internal System.Windows.Controls.Slider uislider;\r
+ internal System.Windows.Controls.TextBlock uilabel;\r
+ internal System.Windows.Controls.TextBox uibox;\r
internal string label;\r
internal Interval range;\r
+ internal SelfDelegate get_;\r
+ internal SelfDelegate set_;\r
+ internal double retval;\r
+ internal bool setted_;\r
\r
- public Slider(string l, Interval r)\r
+ static Slider()\r
{\r
+ bgcolor.set(.5,.5, .5, .3);\r
+ }\r
+\r
+ public Slider(string l, Interval r, double initialvalue)\r
+ {\r
+ retval = initialvalue;\r
range = r;\r
label = l;\r
+ setted_ = false;\r
Psychlops.Widgets.Connector.stackSlider(this);\r
+ get_ = new SelfDelegate(get__);\r
+ set_ = new SelfDelegate(set__);\r
+ while (!setted_) { System.Threading.Thread.Sleep(10); }\r
}\r
public static implicit operator double(Slider s)\r
{\r
return s.value;\r
}\r
- public double value {\r
- get { return uislider.Value; }\r
- set { if(uislider!=null) uislider.Dispatcher.BeginInvoke( new Action<System.Windows.Controls.Slider, double>(Connector.sliderSet) , uislider, value ); }\r
+\r
+ public delegate void SelfDelegate(System.Windows.Controls.Slider s);\r
+ public void get__(System.Windows.Controls.Slider s) { retval = s.Value; }\r
+ public void set__(System.Windows.Controls.Slider s) { s.Value = retval; }\r
+\r
+ public double getValue()\r
+ {\r
+ if (uislider != null) {\r
+ uislider.Dispatcher.BeginInvoke(get_, uislider);\r
+ return retval;\r
+ } else {\r
+ return 0;\r
+ }\r
+ }\r
+ public void setValue(double v)\r
+ {\r
+ if (uislider != null)\r
+ {\r
+ retval = v;\r
+ uislider.Dispatcher.BeginInvoke(set_, uislider);\r
+ }\r
+ }\r
+\r
+ public double value\r
+ {\r
+ get { return getValue(); }\r
+ set { setValue(value); }\r
}\r
public bool changed { get; set; }\r
}\r
\r
\r
+ public class Browser\r
+ {\r
+ public class Element\r
+ {\r
+ HtmlElement elem;\r
+ System.Object retval;\r
+\r
+ public Element()\r
+ {\r
+ retval = 0;\r
+ }\r
+\r
+ public static Element byID(string id_tag)\r
+ {\r
+ return getElementById(id_tag);\r
+ }\r
+ public static Element getElementById(string id_tag)\r
+ {\r
+ Element tmp = new Element();\r
+ Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(tmp.getElementById__), id_tag);\r
+ return tmp;\r
+ }\r
+ void getElementById__(string id_tag)\r
+ {\r
+ elem = HtmlPage.Document.GetElementById(id_tag);\r
+ }\r
+\r
+ public void setProperty(string name, System.Object value)\r
+ {\r
+ Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidStringObject(setProperty__), name, value);\r
+ }\r
+ public void setProperty__(string name, System.Object value)\r
+ {\r
+ elem.SetProperty(name, value);\r
+ }\r
+\r
+\r
+ public static implicit operator double(Element i) { return i.getValueAsDouble(); }\r
+ public double getValueAsDouble()\r
+ {\r
+ double v = 0;\r
+ getProperty("value");\r
+ try\r
+ {\r
+ v = double.Parse(retval.ToString());\r
+ }\r
+ catch (FormatException e)\r
+ {\r
+ v = 0;\r
+ }\r
+ return v;\r
+ }\r
+\r
+ public static implicit operator string(Element i) { return i.getProperty("value").ToString(); }\r
+ public System.Object getProperty(string name)\r
+ {\r
+ Internal.Main.widgetStack.Dispatcher.BeginInvoke(new Connector.VoidString(getProperty__), name);\r
+ return retval;\r
+ }\r
+ public void getProperty__(string name)\r
+ {\r
+ retval = elem.GetProperty(name);\r
+ }\r
+ }\r
+ }\r
\r
\r
internal static class Connector\r
{\r
+ internal delegate void VoidString(string s);\r
+ internal delegate void VoidStringObject(String s, System.Object o);\r
+\r
+ public class Double02fFormatter : IValueConverter\r
+ {\r
+ public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r
+ {\r
+ string formatString = parameter as string;\r
+ if (!string.IsNullOrEmpty(formatString))\r
+ {\r
+ return string.Format(culture, formatString, value);\r
+ }\r
+ return string.Format("{0, -8:F}", value);\r
+ }\r
+ public object ConvertBack(object val, Type targetType, object parameter, System.Globalization.CultureInfo culture)\r
+ {\r
+ string str = val.ToString();\r
+ double result;\r
+ var objCultureInfo = new System.Globalization.CultureInfo("en-US");\r
+ if (Double.TryParse(str, System.Globalization.NumberStyles.Number, objCultureInfo, out result))\r
+ {\r
+ return result;\r
+ }\r
+ return val;\r
+ }\r
+ }\r
+\r
delegate void StackSlider_(Slider s);\r
internal static void stackSlider(Slider s)\r
{\r
}\r
static void stackSlider__(Slider ss)\r
{\r
- var holder = new System.Windows.Controls.Canvas { Width = 200 };\r
+ var label = new System.Windows.Controls.TextBlock { Text = ss.label };\r
+ label.Foreground = Color.white;\r
+ System.Windows.Controls.Canvas.SetLeft(label, 3);\r
+ System.Windows.Controls.Canvas.SetTop(label, 3);\r
+ ss.uilabel = label;\r
+\r
+ var holder = new System.Windows.Controls.Canvas { Width = 200, Height = 50 };\r
var val = new System.Windows.Controls.TextBox { Width = 100 };\r
System.Windows.Controls.Canvas.SetLeft(val, 100);\r
var slide = new System.Windows.Controls.Slider {\r
- Minimum = ss.range.begin.val, Maximum = ss.range.end.val,\r
+ Minimum = ss.range.begin.value, Maximum = ss.range.end.value,\r
Name = ss.label,\r
+ Value = ss.retval,\r
Tag = ss, Width = 200,\r
};\r
- System.Windows.Controls.Canvas.SetTop(slide, 25);\r
+ System.Windows.Controls.Canvas.SetTop(slide, label.ActualHeight - 3);\r
var b = new System.Windows.Data.Binding {\r
Path = new PropertyPath("Value"),\r
Mode = System.Windows.Data.BindingMode.TwoWay,\r
Source = slide,\r
+ Converter = new Double02fFormatter()\r
};\r
val.SetBinding(TextBox.TextProperty, b);\r
ss.uislider = slide;\r
- //var b2 = new System.Windows.Data.Binding\r
- //{\r
- // Path = new PropertyPath("value"),\r
- // Mode = System.Windows.Data.BindingMode.TwoWay,\r
- // Source = ss,\r
- //};\r
- //val.SetBinding(System.Windows.Controls.Slider.ValueProperty, b2);\r
- var label = new System.Windows.Controls.TextBlock { Text = ss.label };\r
- System.Windows.Controls.Canvas.SetLeft(label, 3);\r
- System.Windows.Controls.Canvas.SetTop(label, 3);\r
+ ss.uibox = val;\r
+ val.Background = Color.null_color;\r
+ val.BorderBrush = Color.null_color;\r
+ val.Foreground = Color.white;\r
+ val.TextAlignment = TextAlignment.Right;\r
+\r
+ holder.Background = Slider.bgcolor;\r
\r
holder.Children.Add(label);\r
- holder.Children.Add(slide);\r
holder.Children.Add(val);\r
+ holder.Children.Add(slide);\r
+ holder.Height = label.ActualHeight + slide.ActualHeight + val.ActualHeight + 15;\r
ss.instance = holder;\r
Internal.Main.widgetStack.Children.Add(ss.instance);\r
+ ss.setted_ = true;\r
}\r
- public static void sliderSet(System.Windows.Controls.Slider s, double v)\r
- {\r
- s.Value = v;\r
- }\r
-\r
}\r
\r
}\r
\r
-}
\ No newline at end of file
+}\r
+\r