]> O.S.I.I.S - jp/crow.git/commitdiff
First working scrollbar with heavy use of binding and events in xml
authorjpbruyere <jp.bruyere@hotmail.com>
Tue, 23 Jun 2015 20:17:49 +0000 (22:17 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Tue, 23 Jun 2015 20:17:49 +0000 (22:17 +0200)
17 files changed:
GOLib.csproj
Templates/Scrollbar.goml
Tests/GOLIBTest_4.cs
Tests/Interfaces/test4.goml
src/CompilerServices/CompilerServices.cs
src/GraphicObjects/Container.cs
src/GraphicObjects/GraphicObject.cs
src/GraphicObjects/NumericControl.cs
src/GraphicObjects/Scrollbar.cs
src/GraphicObjects/Scroller.cs
src/GraphicObjects/Slider.cs
src/GraphicObjects/Spinner.cs
src/Interface.cs
src/LayoutChangeEventArgs.cs [new file with mode: 0644]
src/Rectangles.cs
src/TextChangeEventArgs.cs
src/ValueChangeEventArgs.cs

index c119407bde6b14e05c36795bcfd9f75af3a4ffd2..341b5257584cdc651d2f308c468bafca9343898a 100644 (file)
@@ -77,7 +77,6 @@
     <Compile Include="src\GraphicObjects\Button.cs" />\r
     <Compile Include="src\GraphicObjects\GraduatedSlider.cs" />\r
     <Compile Include="src\GraphicObjects\Slider.cs" />\r
-    <Compile Include="src\ValueChangeEventArgs.cs" />\r
     <Compile Include="src\GraphicObjects\NumericControl.cs" />\r
     <Compile Include="src\GraphicObjects\Scroller.cs" />\r
     <Compile Include="src\GraphicObjects\ILayoutable.cs" />\r
@@ -87,7 +86,6 @@
     <Compile Include="src\GraphicObjects\AnalogMeter.cs" />\r
     <Compile Include="src\GraphicObjects\Border.cs" />\r
     <Compile Include="src\Font.cs" />\r
-    <Compile Include="src\TextChangeEventArgs.cs" />\r
     <Compile Include="src\OpenGL\QuadVAO.cs" />\r
     <Compile Include="src\OpenGL\Shader.cs" />\r
     <Compile Include="src\OpenGL\TexturedShader.cs" />\r
     <Compile Include="src\GraphicObjects\TemplatedContainer.cs" />\r
     <Compile Include="src\GraphicObjects\Popper.cs" />\r
     <Compile Include="src\GraphicObjects\Scrollbar.cs" />\r
+    <Compile Include="src\TextChangeEventArgs.cs" />\r
+    <Compile Include="src\ValueChangeEventArgs.cs" />\r
+    <Compile Include="src\LayoutChangeEventArgs.cs" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <Reference Include="System" />\r
index bc47eb9e281a40db03c83bde88806cc70936a693..0fe9da3d75adb0b04ec0e11a12e0e0328001363e 100755 (executable)
@@ -4,7 +4,9 @@
                <Button Width="12" Height="12" MouseClick="onScrollBack">\r
                        <Image Margin="1" Path="#go.Images.Icons.updown.svg" SvgSub="up"/>\r
                </Button>\r
-               <Slider Name="Slider" Value="{Scroll}" Maximum="{MaximumScroll}" Width="{Width}" Height="{Height}" Orientation="{Orientation}"/>\r
+               <Slider Name="Slider" Value="{Scroll}" Maximum="{MaximumScroll}" \r
+                       Width="{Width}" Height="{Height}" Orientation="{Orientation}"\r
+                       ValueChanged="onSliderValueChange"/>\r
                <Button Width="12" Height="12" MouseClick="onScrollForth">\r
                        <Image Margin="1" Path="#go.Images.Icons.updown.svg" SvgSub="down"/>\r
                </Button>\r
index d9e899b1890fe218c021ef2324ec42169b9003e4..5b421100996ab12c5e73ebcf8493fc51653acd0c 100644 (file)
@@ -135,7 +135,7 @@ namespace test
                                        }\r
                                );\r
                                i++;\r
-                               if (i > 50)\r
+                               if (i > 250)\r
                                        break;\r
                        }\r
                        ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", TestList));\r
index 3ceb7198e94bfe283a3e6271a06262d5918a775a..c468aef286f8150fe05d3368db3a980dd1c0a878 100755 (executable)
                        </VerticalStack>\r
                        <HorizontalStack Height="350" Width="250">\r
                                <Scroller Name="scroller1" Background="DimGray" Height="0" Width="0"  \r
-                                        Margin="5" VerticalScrolling="true">\r
+                                        Margin="5" VerticalScrolling="true" ScrollY="{../scrollbar1.Scroll}">\r
                                        <VerticalStack Name="colors" VerticalAlignment="Top" Margin="1">\r
                                                <ProgressBar Name="pbBar2" Width="100" Height="20" Value="50"\r
                                                                        BorderWidth="2" BorderColor="White" Foreground="BlueCrayola" Background="DarkGray"/>\r
index a4f4110c55b5fde3675da4dfe21d0266c29e9033..b2f2e14c8c26e66049ed7327d5db02b971454c2d 100644 (file)
@@ -157,6 +157,7 @@ namespace go
                public static void ResolveBinding(DynAttribute binding, object _source)
                {                       
                        object srcGO = _source;
+                       string statement = binding.Value;
 
                        Type srcType = _source.GetType ();
                        Type dstType = binding.Source.GetType ();
@@ -178,9 +179,9 @@ namespace go
                                        srcGO = (srcGO as GraphicObject).FindByName (bindTrg [0]);
                                        srcType = srcGO.GetType ();
                                }
-                               miSrc = srcType.GetMember (bindTrg.LastOrDefault()).FirstOrDefault ();
-                       }else
-                               miSrc = srcType.GetMember (binding.Value).FirstOrDefault ();
+                               statement = bindTrg.LastOrDefault ();
+                       }
+                       miSrc = srcType.GetMember (statement).FirstOrDefault ();
                                
 
                        #region initialize target with actual value
@@ -245,7 +246,7 @@ namespace go
                        System.Reflection.Emit.Label labContinue = il.DefineLabel();
 
                        #region test if valueChange event is the correct one
-                       il.Emit (OpCodes.Ldstr, binding.Value);
+                       il.Emit (OpCodes.Ldstr, statement);
                        //push name from arg
                        il.Emit(OpCodes.Ldarg_1);
                        FieldInfo fiMbName = typeof(ValueChangeEventArgs).GetField("MemberName");
@@ -257,11 +258,10 @@ namespace go
                        il.MarkLabel(labContinue);
                        #endregion
 
-                       string[] srcLines = binding.Value.Trim().Split (new char[] { ';' });
-                       foreach (string srcLine in srcLines) {
+//                     string[] srcLines = binding.Value.Trim().Split (new char[] { ';' });
+//                     foreach (string srcLine in srcLines) {
                                //MethodInfo infoWriteLine = typeof(System.Diagnostics.Debug).GetMethod("WriteLine", new Type[] { typeof(string) });
-
-                               string statement = srcLine.Trim ();
+                                                       
 
                                //load target ref onto the stack
                                FieldInfo fiRefs = typeof(Interface).GetField("References");
@@ -300,7 +300,7 @@ namespace go
 //                                     
                                
                                il.Emit(OpCodes.Callvirt, piTarget.GetSetMethod());
-                       }
+                       //}
                        il.MarkLabel(labFailed);
                        il.Emit(OpCodes.Ret);
 
index c0ac00c617f7362849a3333cc71401b2917de7f3..0283017b0ac3fbfcd78eaf6994879f328ac2255f 100644 (file)
@@ -25,7 +25,7 @@ namespace go
                        get { return child; }\r
                        set { child = value; }\r
                }\r
-               public T SetChild<T> (T _child)\r
+               public virtual T SetChild<T> (T _child)\r
                {\r
                        return base.SetChild (_child);\r
                }\r
index 5b896b539ac444b747d26f5a72fd574e68a11c82..cb26bca859d3ef355f61d5260b985e1c29eb449b 100644 (file)
@@ -23,7 +23,7 @@ namespace go
        {\r
                #region IValueChange implementation\r
                public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
-               void NotifyValueChanged(string MemberName, object _value)\r
+               public virtual void NotifyValueChanged(string MemberName, object _value)\r
                {\r
                        ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value));                 \r
                }\r
@@ -116,7 +116,7 @@ namespace go
                public event EventHandler<KeyboardKeyEventArgs> KeyUp;\r
                public event EventHandler Focused;\r
                public event EventHandler Unfocused;\r
-\r
+               public event EventHandler<LayoutChangeEventArgs> LayoutChanged;\r
                #endregion\r
 \r
                #region public properties\r
@@ -462,7 +462,8 @@ namespace go
                                if ((Parent as GenericStack).Orientation == Orientation.Vertical)\r
                                        this.Parent.RegisterForLayouting ((int)LayoutingType.PositionChildren);\r
                                break;\r
-                       }                       \r
+                       }\r
+                       LayoutChanged.Raise (this, new LayoutChangeEventArgs (layoutType));\r
                }\r
                public virtual void UpdateLayout (LayoutingType layoutType)\r
                {                       \r
index 61af27d4a6b39c0d48675665cdce955f94314845..d989f668213ba573d96edda5cb769e624727ce20 100644 (file)
@@ -4,7 +4,7 @@ using System.ComponentModel;
 
 namespace go
 {
-       public abstract class NumericControl : TemplatedControl, IValueChange
+       public abstract class NumericControl : TemplatedControl
        {
                #region CTOR
                public NumericControl () : base()
@@ -20,14 +20,7 @@ namespace go
                }
                #endregion
 
-               #region event handlers
-               public EventHandler<ValueChangeEventArgs> ValueChanged;
 
-               public virtual void onValueChanged(object sender, ValueChangeEventArgs e)
-               {                       
-                       ValueChanged.Raise (sender, e);
-               }
-               #endregion
 
                #region private fields
                double _actualValue, minValue, maxValue, smallStep, bigStep;
@@ -97,7 +90,7 @@ namespace go
                                else                    
                                        _actualValue = value;
 
-                               onValueChanged(this,new ValueChangeEventArgs("Value", Convert.ToInt32( _actualValue)));
+                               NotifyValueChanged("Value",  _actualValue);
                                registerForGraphicUpdate();
                        }
                }
index f66ce83ffa0f552ef82c9e4a9fac8c35953a11ef..cb9e2aa8b8b8771bd00dd849b7a84d185060c80f 100644 (file)
@@ -57,6 +57,10 @@ namespace go
                                if (_scroll == value)\r
                                        return;\r
                                _scroll = value;\r
+                               if (_scroll < 0.0)\r
+                                       _scroll = 0.0;\r
+                               else if (_scroll > _maximumScroll)\r
+                                       _scroll = _maximumScroll;\r
                                registerForGraphicUpdate ();\r
                                ValueChanged.Raise(this, new ValueChangeEventArgs ("Scroll", _scroll));\r
                        }\r
@@ -79,6 +83,12 @@ namespace go
                public void onScrollForth (object sender, MouseButtonEventArgs e)\r
                {\r
                        Scroll += _slider.LargeIncrement;\r
+\r
+               }\r
+\r
+               public void onSliderValueChange(object sender, ValueChangeEventArgs e){\r
+                       Scroll = Convert.ToDouble(e.NewValue);\r
                }\r
+\r
        }\r
 }\r
index 089c7111b4d2efca6f23df51b6b894e03a862c89..b19c93ca6143f29531baf85e599bf368ca2efea4 100644 (file)
@@ -20,8 +20,8 @@ namespace go
                bool _verticalScrolling;\r
                bool _horizontalScrolling;\r
                bool _scrollbarVisible;\r
-               int _scrollX = 0;\r
-               int _scrollY = 0;\r
+               double _scrollX = 0.0;\r
+               double _scrollY = 0.0;\r
 \r
 \r
                #region public properties\r
@@ -44,26 +44,32 @@ namespace go
                }\r
 \r
 \r
-               [XmlIgnore]         \r
-               public int ScrollX {\r
+               [XmlAttributeAttribute][DefaultValue(0.0)]\r
+               public double ScrollX {\r
                        get {\r
                                return _scrollX;\r
                        }\r
                        set {\r
+                               if (_scrollX == value)\r
+                                       return;\r
                                _scrollX = value;\r
                                ValueChanged.Raise(this, new ValueChangeEventArgs("ScrollX", _scrollX));\r
+                               RegisterForRedraw();\r
                        }\r
                }\r
 \r
 \r
-               [XmlIgnore]\r
-               public int ScrollY {\r
+               [XmlAttributeAttribute][DefaultValue(0.0)]\r
+               public double ScrollY {\r
                        get {\r
                                return _scrollY;\r
                        }\r
                        set {\r
+                               if (_scrollY == value)\r
+                                       return;\r
                                _scrollY = value;\r
                                ValueChanged.Raise(this, new ValueChangeEventArgs("ScrollY", _scrollY));\r
+                               RegisterForRedraw();\r
                        }\r
                }\r
 \r
@@ -87,16 +93,24 @@ namespace go
         }\r
 \r
                #region GraphicObject Overrides\r
-               protected override void OnLayoutChanges (LayoutingType layoutType)\r
+               void OnChildLayoutChanges (object sender, LayoutChangeEventArgs arg)\r
                {\r
-                       base.OnLayoutChanges (layoutType);\r
-\r
                        if (_verticalScrolling) {\r
-                               if (layoutType  == LayoutingType.Height)\r
+                               if (arg.LayoutType  == LayoutingType.Height)\r
                                        ValueChanged.Raise(this, new ValueChangeEventArgs("MaximumScroll", MaximumScroll));                             \r
-                       }else if (layoutType  == LayoutingType.Width)\r
+                       }else if (arg.LayoutType  == LayoutingType.Width)\r
                                ValueChanged.Raise(this, new ValueChangeEventArgs("MaximumScroll", MaximumScroll));                             \r
                }\r
+               public override T SetChild<T> (T _child)\r
+               {                       \r
+                       GraphicObject c = child as GraphicObject;\r
+                       if (c != null)\r
+                               c.LayoutChanged -= OnChildLayoutChanges;\r
+                       c = _child as GraphicObject;\r
+                       if (c != null)\r
+                               c.LayoutChanged += OnChildLayoutChanges;\r
+                       return base.SetChild (_child);\r
+               }\r
                #endregion\r
 \r
                #region Mouse handling\r
@@ -106,7 +120,7 @@ namespace go
                }\r
                public override void onMouseMove (object sender, MouseMoveEventArgs e)\r
                {\r
-                       Point m = e.Position - new Point (ScrollX, ScrollY);\r
+                       Point m = e.Position - new Point ((int)ScrollX, (int)ScrollY);\r
                        base.onMouseMove (sender, new MouseMoveEventArgs(m.X,m.Y,e.XDelta,e.YDelta));\r
                }\r
                public override void onMouseWheel (object sender, MouseWheelEventArgs e)\r
@@ -125,8 +139,8 @@ namespace go
 \r
                                ScrollY -= e.Delta * ScrollSpeed;\r
 \r
-                if (ScrollY < 0)\r
-                    ScrollY = 0;\r
+                if (ScrollY < 0.0)\r
+                    ScrollY = 0.0;\r
                                else if (ScrollY > Child.Slot.Height - ClientRectangle.Height)\r
                                        ScrollY = Child.Slot.Height - ClientRectangle.Height;\r
 \r
@@ -138,26 +152,26 @@ namespace go
 \r
                                ScrollX -= e.Delta * ScrollSpeed;\r
 \r
-                               if (ScrollX < 0)\r
-                                       ScrollX = 0;\r
+                               if (ScrollX < 0.0)\r
+                                       ScrollX = 0.0;\r
                                else if (ScrollX > Child.Slot.Width - ClientRectangle.Width)\r
                                        ScrollX = Child.Slot.Width - ClientRectangle.Width;\r
             }\r
 \r
 \r
             //renderBounds.Y = -scrollY;\r
-            RegisterForRedraw();\r
+            //RegisterForRedraw();\r
                        //Parent.registerForGraphicUpdate ();\r
         }\r
                #endregion\r
 \r
                public override Rectangle ContextCoordinates (Rectangle r)\r
                {\r
-                       return base.ContextCoordinates (r) - new Point(ScrollX,ScrollY);\r
+                       return base.ContextCoordinates (r) - new Point((int)ScrollX,(int)ScrollY);\r
                }\r
                public override Rectangle ScreenCoordinates (Rectangle r)\r
                {\r
-                       return base.ScreenCoordinates (r) - new Point(ScrollX,ScrollY);\r
+                       return base.ScreenCoordinates (r) - new Point((int)ScrollX,(int)ScrollY);\r
                }\r
 \r
                public override void registerClipRect ()\r
index 488617deb9f38d28b1962201994947a9240589a6..cc9f2b05f0257b75bf6b42870661eb90df80b674 100644 (file)
@@ -63,7 +63,18 @@ namespace go
                        set { _orientation = value; }\r
                }\r
                #endregion\r
+               [XmlAttributeAttribute()][DefaultValue(10.0)]\r
+               public override double Maximum {\r
+                       get { return base.Maximum; }\r
+                       set {\r
+                               if (value == base.Maximum)\r
+                                       return;\r
+                               base.Maximum = value;\r
+                               LargeIncrement = base.Maximum / 10.0;\r
+                               SmallIncrement = LargeIncrement / 5.0;\r
 \r
+                       }\r
+               }\r
                #region GraphicObject Overrides\r
                [XmlAttributeAttribute()][DefaultValue("Gray")]\r
                public override Color Background {\r
index 048dd84996b1a9f1e3ace82778b8e564377c07d7..ea992b18786071ef0eb29f6b987ed5e017745ebc 100644 (file)
@@ -65,11 +65,7 @@ namespace go
                        Value -= this.SmallIncrement;
                        labCpt.Text = Value.ToString ();
                }
-               public override void onValueChanged (object sender, ValueChangeEventArgs e)
-               {
-                       //labCpt.Text = e.NewValue.ToString ();
-                       base.onValueChanged (sender, e);
-               }
+
        }
 }
 
index 0c3098fc1bf0eb02a88487f937825475e942ca4d..2fe25c6099079687208ef60b9d18d3b90c7701fa 100644 (file)
@@ -209,9 +209,13 @@ namespace go
                                                        continue;
                                                }
 
-                                               FieldInfo fi = CompilerServices.getEventHandlerField (es.Source.GetType (), es.MemberName);
-                                               Delegate del = Delegate.CreateDelegate (fi.FieldType, hostClass, mi);
-                                               fi.SetValue (es.Source, del);
+                                               EventInfo ei = es.Source.GetType ().GetEvent (es.MemberName);
+                                               MethodInfo addHandler = ei.GetAddMethod ();
+                                               Delegate del = Delegate.CreateDelegate (ei.EventHandlerType, hostClass, mi);
+
+
+                                               addHandler.Invoke(es.Source, new object[] {del});
+
                                        }
                                } else {
                                        CompilerServices.ResolveBinding (es, hostClass);
diff --git a/src/LayoutChangeEventArgs.cs b/src/LayoutChangeEventArgs.cs
new file mode 100644 (file)
index 0000000..bbe6f6f
--- /dev/null
@@ -0,0 +1,15 @@
+using System;
+
+namespace go
+{
+       public class LayoutChangeEventArgs: EventArgs
+       {
+               public LayoutingType  LayoutType;
+
+               public LayoutChangeEventArgs (LayoutingType  _layoutType) : base()
+               {
+                       LayoutType = _layoutType;
+               }
+       }
+}
+
index aa54605cb259c6da8a3da71d8074382e0e3315c4..def2f66d607d9a3bbaf6f8bd9a96dbe6e33267b9 100644 (file)
@@ -100,9 +100,9 @@ namespace go
                                Rectangle r = rInList;\r
 \r
                                if (sw.VerticalScrolling)\r
-                                       r.Top -= sw.ScrollY;\r
+                                       r.Top -= (int)sw.ScrollY;\r
                                if (sw.HorizontalScrolling)\r
-                                       r.Left -= sw.ScrollX;\r
+                                       r.Left -= (int)sw.ScrollX;\r
 \r
                                newList.Add(r);\r
                        }\r
@@ -122,11 +122,11 @@ namespace go
                 if (sw != null)\r
                 {\r
                                        if (sw.VerticalScrolling) {\r
-                                               rebasedR.Top -= sw.ScrollY;\r
+                                               rebasedR.Top -= (int)sw.ScrollY;\r
 //                                             if (sw.scrollY < 0)\r
 //                                                     Debug.WriteLine ("..");\r
                                        }if (sw.HorizontalScrolling)\r
-                                               rebasedR.Left -= sw.ScrollX;\r
+                                               rebasedR.Left -= (int)sw.ScrollX;\r
                 }\r
 \r
                 newList.Add(rebasedR);\r
index 532d72f0fc4e9903643a85ca6d1d85d857e1917c..9b9d3a2f7f5cc56a910c3b69b6896e0674a66103 100644 (file)
@@ -2,16 +2,13 @@
 
 namespace go
 {
-       public class ValueChangeEventArgs: EventArgs
+       public class TextChangeEventArgs: EventArgs
        {
-               public string MemberName;
-               public object NewValue;
+               public String Text;
 
-
-               public ValueChangeEventArgs (string _memberName, object _newValue) : base()
+               public TextChangeEventArgs (string _newValue) : base()
                {
-                       MemberName = _memberName;
-                       NewValue = _newValue;
+                       Text = _newValue;
                }
        }
 }
index 9b9d3a2f7f5cc56a910c3b69b6896e0674a66103..532d72f0fc4e9903643a85ca6d1d85d857e1917c 100644 (file)
@@ -2,13 +2,16 @@
 
 namespace go
 {
-       public class TextChangeEventArgs: EventArgs
+       public class ValueChangeEventArgs: EventArgs
        {
-               public String Text;
+               public string MemberName;
+               public object NewValue;
 
-               public TextChangeEventArgs (string _newValue) : base()
+
+               public ValueChangeEventArgs (string _memberName, object _newValue) : base()
                {
-                       Text = _newValue;
+                       MemberName = _memberName;
+                       NewValue = _newValue;
                }
        }
 }