Esempio n. 1
0
        public void AbsoluteLayoutOnMeasure()
        {
            tlog.Debug(tag, $"AbsoluteLayoutOnMeasure START");

            flagOnMeasureOverride = false;
            Assert.False(flagOnMeasureOverride, "flagOnMeasureOverride should be false initial");

            LayoutItem layoutItem = new LinearLayout();

            View view = new View()
            {
                ExcludeLayouting = false,
                Size             = new Size(100, 150),
                Layout           = new AbsoluteLayout()
            };

            layoutItem.AttachToOwner(view);

            var testingTarget = new MyAbsoluteLayout();

            Assert.IsNotNull(testingTarget, "null handle");
            Assert.IsInstanceOf <AbsoluteLayout>(testingTarget, "Should be an instance of AbsoluteLayout type.");

            testingTarget.AttachToOwner(view);
            testingTarget.Add(layoutItem);

            MeasureSpecification measureWidth  = new MeasureSpecification(new LayoutLength(50.0f), MeasureSpecification.ModeType.AtMost);
            MeasureSpecification measureHeight = new MeasureSpecification(new LayoutLength(50.0f), MeasureSpecification.ModeType.AtMost);

            testingTarget.OnMeasureTest(measureWidth, measureHeight);
            Assert.True(flagOnMeasureOverride, "AbsoluteLayout overridden method not invoked.");

            testingTarget.Dispose();
            tlog.Debug(tag, $"AbsoluteLayoutOnMeasure END (OK)");
        }
Esempio n. 2
0
 private void InitializeViews()
 {
     {
         SVmain = new MyScrollView(Xamarin.Forms.ScrollOrientation.Vertical);
         {
             ALmain = new MyAbsoluteLayout
             {
                 HorizontalOptions = Xamarin.Forms.LayoutOptions.FillAndExpand,
                 VerticalOptions   = Xamarin.Forms.LayoutOptions.Start,
                 HeightRequest     = treap.itemHeight,
                 BackgroundColor   = Xamarin.Forms.Color.LightYellow
             };
             {
                 LBend = new MyLabel("End of Results")
                 {
                     IsEnabled = false
                 };
                 var layoutMethod = BarsLayoutMethod(0);
                 ALmain.Children.Add(LBend, layoutMethod.Item1, layoutMethod.Item2);
             }
             SVmain.Content = ALmain;
         }
         this.Content = SVmain;
     }
 }
Esempio n. 3
0
        public void AbsoluteLayoutOnLayout()
        {
            tlog.Debug(tag, $"AbsoluteLayoutOnLayout START");

            flagOnLayoutOverride = false;
            Assert.False(flagOnLayoutOverride, "flagOnLayoutOverride should be false initial");

            LayoutItem layoutItem = new LinearLayout();

            View view = new View()
            {
                ExcludeLayouting = false,
                Size             = new Size(100, 150),
                Layout           = new AbsoluteLayout()
            };

            layoutItem.AttachToOwner(view);

            var testingTarget = new MyAbsoluteLayout();

            Assert.IsNotNull(testingTarget, "null handle");
            Assert.IsInstanceOf <AbsoluteLayout>(testingTarget, "Should be an instance of AbsoluteLayout type.");

            testingTarget.AttachToOwner(view);
            testingTarget.Add(layoutItem);

            testingTarget.OnLayoutTest(true, new LayoutLength(5), new LayoutLength(5), new LayoutLength(10), new LayoutLength(10));
            Assert.True(flagOnLayoutOverride, "AbsoluteLayout overridden method not invoked.");

            // Test with false parameter
            flagOnLayoutOverride = false;
            Assert.False(flagOnLayoutOverride, "flagOnLayoutOverride should be false initial");
            testingTarget.OnLayoutTest(false, new LayoutLength(5), new LayoutLength(5), new LayoutLength(10), new LayoutLength(10));
            Assert.True(flagOnLayoutOverride, "AbsoluteLayout overridden method not invoked with false parameter.");

            testingTarget.Dispose();
            tlog.Debug(tag, $"AbsoluteLayoutOnLayout END (OK)");
        }
Esempio n. 4
0
        private bool UpdateLayout()
        {
            HashSet <DataType> remain = new HashSet <DataType>();

            foreach (var p in ChildrenInUse)
            {
                remain.Add(p.Key);
            }
            bool answer = false;

            SVmain.BatchBegin();
            treap.Query(treap.Count, new Action <Treap <DataType> .TreapNode>((o) =>
            {
                MyAbsoluteLayout.SetLayoutBounds(LBend, BarsLayoutMethod(o.QueryYOffset()).Item1);
                ALmain.HeightRequest = o.QueryYOffset() + treap.itemHeight;
            }));
            if (treap.Count > 0)
            {
                double difference = 0;
                int    l = UponIndex(), r = DownIndex();
                for (int i = l; i <= r; i++)
                {
                    treap.Query(i, new Action <Treap <DataType> .TreapNode>((o) =>
                    {
                        var targetBound  = BarsLayoutMethod(o.QueryYOffset());
                        GenericView view = null;
                        if (ChildrenInUse.ContainsKey(o.data))
                        {
                            view = ChildrenInUse[o.data];
                            remain.Remove(o.data);
                            if (i == (l + r) / 2 && view.Bounds != null)
                            {
                                difference = targetBound.Item1.Y - view.Bounds.Y;
                            }
                        }
                        else if (!answer)
                        {
                            answer = true;
                            view   = GetGenericView();
                            view.Reset(o.data);
                            ChildrenInUse[o.data] = view;
                        }
                        if (view != null)
                        {
                            MyAbsoluteLayout.SetLayoutBounds(view, targetBound.Item1);
                        }
                    }));
                }
                if (difference != 0)
                {
                    SVmain.MyScrollY += difference;
                    //SVmain.ScrollToAsync(SVmain.ScrollX, SVmain.ScrollY + difference /** 1.05*/, false);
                }
            }
            foreach (var d in remain)
            {
                var v = ChildrenInUse[d];
                ChildrenInUse.Remove(d);
                v.Reset(null);
                v.IsVisible = false;
                AvaiableChildrenPool.Push(v);
            }
            SVmain.BatchCommit();
            return(answer);
        }