OSDN Git Service

321
[psychlops/silverlight.git] / dev4 / psychlops / extention / standard / widget.cs
index 4fe21e7..9d5a71c 100644 (file)
@@ -79,33 +79,107 @@ namespace Psychlops
                        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
 \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
+                       static Slider()\r
+                       {\r
+                               bgcolor.set(.5,.5, .5, .3);\r
+                       }\r
 \r
-                       public Slider(string l, Interval 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
@@ -178,7 +252,6 @@ namespace Psychlops
                }\r
 \r
 \r
-\r
                internal static class Connector\r
                {\r
                        internal delegate void VoidString(string s);\r
@@ -193,15 +266,22 @@ namespace Psychlops
                        }\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
                                                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
@@ -209,30 +289,24 @@ namespace Psychlops
                                };\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
+\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