]> O.S.I.I.S - jp/crow.git/commitdiff
advanced bindings with directory like syntax, need double direction
authorjpbruyere <jp.bruyere@hotmail.com>
Tue, 23 Jun 2015 15:18:19 +0000 (17:18 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Tue, 23 Jun 2015 15:18:19 +0000 (17:18 +0200)
binding

Templates/Scrollbar.goml
Tests/Interfaces/test4.goml
Tests/Tests.csproj
src/CompilerServices/CompilerServices.cs
src/GraphicObjects/NumericControl.cs
src/GraphicObjects/Scrollbar.cs
src/GraphicObjects/Scroller.cs
src/GraphicObjects/Slider.cs
src/Rectangles.cs

index 1e3fa5146bebacb2e68ad07510084594f82d6914..bc47eb9e281a40db03c83bde88806cc70936a693 100755 (executable)
@@ -4,7 +4,7 @@
                <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" Width="{Width}" Height="{Height}" Orientation="{Orientation}"/>\r
+               <Slider Name="Slider" Value="{Scroll}" Maximum="{MaximumScroll}" Width="{Width}" Height="{Height}" Orientation="{Orientation}"/>\r
                <Button Width="12" Height="12" MouseClick="onScrollForth">\r
                        <Image Margin="1" Path="#go.Images.Icons.updown.svg" SvgSub="down"/>\r
                </Button>\r
index d0e644e9ce2b237476e7b42917dc6f571a860150..3ceb7198e94bfe283a3e6271a06262d5918a775a 100755 (executable)
                                                TextAlignment="Center" Background="AoEnglish"/>\r
                                </HorizontalStack>\r
                        </VerticalStack>\r
-\r
-                       <Scroller Background="DimGray" Height="350" Width="150"  \r
-                                Margin="5" VerticalScrolling="true">\r
-                               <VerticalStack Name="colors" VerticalAlignment="Top" Margin="5">\r
-                                       <ProgressBar Name="pbBar2" Width="100" Height="20" Value="50"\r
-                                                               BorderWidth="2" BorderColor="White" Foreground="BlueCrayola" Background="DarkGray"/>\r
-                               </VerticalStack>\r
-                       </Scroller>\r
-\r
+                       <HorizontalStack Height="350" Width="250">\r
+                               <Scroller Name="scroller1" Background="DimGray" Height="0" Width="0"  \r
+                                        Margin="5" VerticalScrolling="true">\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
+                                       </VerticalStack>\r
+                               </Scroller>\r
+                               <Scrollbar Name="scrollbar1" Scroll="{../scroller1.ScrollY}" MaximumScroll="{../scroller1.MaximumScroll}"\r
+                                       Orientation="Vertical" Width="16" />\r
+                       </HorizontalStack>\r
                </HorizontalStack>\r
 \r
                <Slider \r
index a137d53b35567f611cbb6668c377267ac6f7a8c3..b232c4e335770c43e81eaa244e2b56db9ad6a456 100644 (file)
@@ -8,7 +8,7 @@
     <OutputType>Exe</OutputType>
     <RootNamespace>Tests</RootNamespace>
     <AssemblyName>Tests</AssemblyName>
-    <StartupObject>test2.GOLIBTest_Scrollbar</StartupObject>
+    <StartupObject>test.GOLIBTest_4</StartupObject>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <OutputPath>..\bin\$(configuration)</OutputPath>
     <IntermediateOutputPath>obj\$(configuration)</IntermediateOutputPath>
index 7bd9180576cfa13240cb74d01698aeb0e07bd7c3..a4f4110c55b5fde3675da4dfe21d0266c29e9033 100644 (file)
@@ -156,21 +156,42 @@ namespace go
 
                public static void ResolveBinding(DynAttribute binding, object _source)
                {                       
+                       object srcGO = _source;
+
                        Type srcType = _source.GetType ();
                        Type dstType = binding.Source.GetType ();
 
                        MemberInfo miDst = dstType.GetMember (binding.MemberName).FirstOrDefault ();
-                       MemberInfo miSrc = srcType.GetMember (binding.Value).FirstOrDefault();
+                       string[] bindingExp = binding.Value.Split ('/');
+                       MemberInfo miSrc;
+                       if (bindingExp.Length > 1){
+                               int i = 0;
+                               srcGO = binding.Source; //starts parsing from current GO
+                               while (bindingExp [i] == "..") {
+                                       srcGO = (srcGO as ILayoutable).Parent as GraphicObject;
+                                       i++;
+                               }
+                               string[] bindTrg = bindingExp [i].Split ('.');
+                               if (bindTrg.Length == 1)
+                                       srcType = srcGO.GetType ();
+                               else {
+                                       srcGO = (srcGO as GraphicObject).FindByName (bindTrg [0]);
+                                       srcType = srcGO.GetType ();
+                               }
+                               miSrc = srcType.GetMember (bindTrg.LastOrDefault()).FirstOrDefault ();
+                       }else
+                               miSrc = srcType.GetMember (binding.Value).FirstOrDefault ();
+                               
 
                        #region initialize target with actual value
                        object srcVal = null;
                        if (miSrc == null)
-                               srcVal = _source;//if no member is provided for binding, source raw value is taken
+                               srcVal = srcGO;//if no member is provided for binding, source raw value is taken
                        else {
                                if (miSrc.MemberType == MemberTypes.Property)
-                                       srcVal = (miSrc as PropertyInfo).GetGetMethod ().Invoke (_source, null);
+                                       srcVal = (miSrc as PropertyInfo).GetGetMethod ().Invoke (srcGO, null);
                                else if (miSrc.MemberType == MemberTypes.Field)
-                                       srcVal = (miSrc as FieldInfo).GetValue (_source);
+                                       srcVal = (miSrc as FieldInfo).GetValue (srcGO);
                                else
                                        throw new Exception ("unandled source member type for binding");
                        }
@@ -288,7 +309,7 @@ namespace go
                        Delegate del = dm.CreateDelegate(ei.EventHandlerType);
                        MethodInfo addHandler = ei.GetAddMethod ();
                        //Delegate del = dm.CreateDelegate(typeof(System.EventHandler));
-                       addHandler.Invoke(_source, new object[] {del});
+                       addHandler.Invoke(srcGO, new object[] {del});
                }
 
                #region conversions
@@ -307,6 +328,8 @@ namespace go
                                name = "ToInt32";
                        else if( targetType == typeof( long ) )
                                name = "ToInt64";
+                       else if( targetType == typeof( double ) )
+                               name = "ToDouble";
                        else if (targetType == typeof (string ) )
                                return typeof(object).GetMethod("ToString", Type.EmptyTypes);
                        else
index c6d76bcd47795ea3dd53d85742bc12b8ba054e18..61af27d4a6b39c0d48675665cdce955f94314845 100644 (file)
@@ -4,7 +4,7 @@ using System.ComponentModel;
 
 namespace go
 {
-       public abstract class NumericControl : TemplatedControl
+       public abstract class NumericControl : TemplatedControl, IValueChange
        {
                #region CTOR
                public NumericControl () : base()
index ca17393ee7f76e9c638182afa4539e0b7a644aea..f66ce83ffa0f552ef82c9e4a9fac8c35953a11ef 100644 (file)
@@ -25,6 +25,8 @@ namespace go
 \r
                Orientation _orientation;\r
                Slider _slider;\r
+               double _maximumScroll;\r
+               double _scroll;\r
 \r
                public Scrollbar() : base()\r
                {\r
@@ -36,6 +38,29 @@ namespace go
                        _slider = this.child.FindByName ("Slider") as Slider;\r
                }\r
 \r
+               [XmlAttributeAttribute()][DefaultValue(0.0)]\r
+               public virtual double MaximumScroll\r
+               {\r
+                       get { return _maximumScroll; }\r
+                       set {\r
+                               if (_maximumScroll == value)\r
+                                       return;\r
+                               _maximumScroll = value;\r
+                               ValueChanged.Raise(this, new ValueChangeEventArgs ("MaximumScroll", _maximumScroll));\r
+                       }\r
+               }\r
+               [XmlAttributeAttribute()][DefaultValue(0.0)]\r
+               public virtual double Scroll\r
+               {\r
+                       get { return _scroll; }\r
+                       set {\r
+                               if (_scroll == value)\r
+                                       return;\r
+                               _scroll = value;\r
+                               registerForGraphicUpdate ();\r
+                               ValueChanged.Raise(this, new ValueChangeEventArgs ("Scroll", _scroll));\r
+                       }\r
+               }\r
                [XmlAttributeAttribute()][DefaultValue(Orientation.Vertical)]\r
                public virtual Orientation Orientation\r
                {\r
@@ -49,11 +74,11 @@ namespace go
                }\r
                public void onScrollBack (object sender, MouseButtonEventArgs e)\r
                {\r
-                       _slider.Value -= _slider.LargeIncrement;\r
+                       Scroll -= _slider.LargeIncrement;\r
                }\r
                public void onScrollForth (object sender, MouseButtonEventArgs e)\r
                {\r
-                       _slider.Value += _slider.LargeIncrement;\r
+                       Scroll += _slider.LargeIncrement;\r
                }\r
        }\r
 }\r
index bd8384a2fe8a745b8d7f2bb48824b1d540259282..089c7111b4d2efca6f23df51b6b894e03a862c89 100644 (file)
@@ -11,8 +11,12 @@ using System.ComponentModel;
 \r
 namespace go\r
 {\r
-       public class Scroller : Container\r
+       public class Scroller : Container, IValueChange\r
     {\r
+               #region IValueChange implementation\r
+               public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
+               #endregion\r
+\r
                bool _verticalScrolling;\r
                bool _horizontalScrolling;\r
                bool _scrollbarVisible;\r
@@ -47,6 +51,7 @@ namespace go
                        }\r
                        set {\r
                                _scrollX = value;\r
+                               ValueChanged.Raise(this, new ValueChangeEventArgs("ScrollX", _scrollX));\r
                        }\r
                }\r
 \r
@@ -58,6 +63,16 @@ namespace go
                        }\r
                        set {\r
                                _scrollY = value;\r
+                               ValueChanged.Raise(this, new ValueChangeEventArgs("ScrollY", _scrollY));\r
+                       }\r
+               }\r
+\r
+               [XmlIgnore]\r
+               public int MaximumScroll {\r
+                       get {\r
+                               return VerticalScrolling ?\r
+                                       Child.Slot.Height - ClientRectangle.Height :\r
+                                       Child.Slot.Width - ClientRectangle.Width;                               \r
                        }\r
                }\r
 \r
@@ -72,7 +87,16 @@ namespace go
         }\r
 \r
                #region GraphicObject Overrides\r
+               protected override void OnLayoutChanges (LayoutingType layoutType)\r
+               {\r
+                       base.OnLayoutChanges (layoutType);\r
 \r
+                       if (_verticalScrolling) {\r
+                               if (layoutType  == LayoutingType.Height)\r
+                                       ValueChanged.Raise(this, new ValueChangeEventArgs("MaximumScroll", MaximumScroll));                             \r
+                       }else if (layoutType  == LayoutingType.Width)\r
+                               ValueChanged.Raise(this, new ValueChangeEventArgs("MaximumScroll", MaximumScroll));                             \r
+               }\r
                #endregion\r
 \r
                #region Mouse handling\r
index 4bf41d526ff97bc8d59505b25d041239ae1a1ed0..488617deb9f38d28b1962201994947a9240589a6 100644 (file)
@@ -78,14 +78,16 @@ namespace go
                }\r
                protected override void UpdateGraphic ()\r
                {\r
-                       computeCursorPosition();\r
+                       if (Maximum > 0)\r
+                               computeCursorPosition();\r
                        base.UpdateGraphic ();\r
                }\r
 \r
                protected override void onDraw (Context gr)\r
                {\r
                        base.onDraw (gr);\r
-\r
+                       if (Maximum <= 0)\r
+                               return;\r
                        Rectangle r = ClientRectangle;\r
                        PointD pStart;\r
                        PointD pEnd;\r
index de7b8438899dfabbb6081b46840637421b81823d..aa54605cb259c6da8a3da71d8074382e0e3315c4 100644 (file)
@@ -100,9 +100,9 @@ namespace go
                                Rectangle r = rInList;\r
 \r
                                if (sw.VerticalScrolling)\r
-                                       r.Top -= sw.scrollY;\r
+                                       r.Top -= sw.ScrollY;\r
                                if (sw.HorizontalScrolling)\r
-                                       r.Left -= sw.scrollX;\r
+                                       r.Left -= 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 -= sw.ScrollY;\r
 //                                             if (sw.scrollY < 0)\r
 //                                                     Debug.WriteLine ("..");\r
                                        }if (sw.HorizontalScrolling)\r
-                                               rebasedR.Left -= sw.scrollX;\r
+                                               rebasedR.Left -= sw.ScrollX;\r
                 }\r
 \r
                 newList.Add(rebasedR);\r