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

            var view = new CollectionView(new List <string>()
            {
                "123", "456", "789"
            })
            {
                Header    = new RecyclerViewItem(),
                Footer    = new RecyclerViewItem(),
                IsGrouped = true,
            };

            Assert.IsNotNull(view, "Should not be null");

            view.GroupFooterTemplate = new DataTemplate(typeof(RecyclerViewItem));
            view.GroupHeaderTemplate = new DataTemplate(typeof(RecyclerViewItem));
            view.ItemTemplate        = new DataTemplate(typeof(RecyclerViewItem));

            var gridLayouter = new GridLayouter();

            Assert.IsNotNull(gridLayouter, "Should not be null");

            gridLayouter.Initialize(view);

            gridLayouter.RequestLayout(5.0f);

            gridLayouter.RequestLayout(150.0f, true);

            view.Dispose();
            gridLayouter.Dispose();

            tlog.Debug(tag, $"GridLayouterRequestLayout END (OK)");
        }
Esempio n. 2
0
        public void GridLayouterNotifyItemInserted()
        {
            tlog.Debug(tag, $"GridLayouterNotifyItemInserted");

            var view = new CollectionView(new List <string>()
            {
                "123", "456"
            })
            {
                Header    = new RecyclerViewItem(),
                Footer    = new RecyclerViewItem(),
                IsGrouped = true,
            };

            Assert.IsNotNull(view, "Should not be null");

            view.GroupFooterTemplate = new DataTemplate(typeof(RecyclerViewItem));
            view.GroupHeaderTemplate = new DataTemplate(typeof(RecyclerViewItem));
            view.ItemTemplate        = new DataTemplate(typeof(RecyclerViewItem));

            var gridLayouter = new GridLayouter();

            Assert.IsNotNull(gridLayouter, "Should not be null");

            gridLayouter.Initialize(view);
            gridLayouter.RequestLayout(100.0f);

            var source = new CustomGroupItemSource(view)
            {
                Position = 1,
            };

            gridLayouter.NotifyItemInserted(source, 0);

            source.Position = 4;
            gridLayouter.NotifyItemInserted(source, 0);

            gridLayouter.NotifyItemInserted(source, 1);

            var emptySource = new CustomEmptySource();

            gridLayouter.NotifyItemInserted(emptySource, 1);

            var item = new RecyclerViewItem()
            {
                Size = new Size(200, 100),
            };

            gridLayouter.NotifyItemSizeChanged(item);
            item.Dispose();

            view.Dispose();
            gridLayouter.Dispose();

            source.Dispose();
            emptySource.Dispose();

            tlog.Debug(tag, $"GridLayouterNotifyItemInserted END (OK)");
        }
Esempio n. 3
0
        public void GridLayouterRequestNextFocusableView()
        {
            tlog.Debug(tag, $"GridLayouterRequestNextFocusableView");

            var view = new CollectionView(new List <string>()
            {
                "123", "456"
            })
            {
                Header    = new RecyclerViewItem(),
                Footer    = new RecyclerViewItem(),
                IsGrouped = true,
            };

            Assert.IsNotNull(view, "Should not be null");

            view.GroupFooterTemplate = new DataTemplate(typeof(RecyclerViewItem));
            view.GroupHeaderTemplate = new DataTemplate(typeof(RecyclerViewItem));
            view.ItemTemplate        = new DataTemplate(typeof(RecyclerViewItem));

            var gridLayouter = new GridLayouter();

            Assert.IsNotNull(gridLayouter, "Should not be null");

            gridLayouter.Initialize(view);
            gridLayouter.RequestLayout(100.0f);

            var source = new CustomGroupItemSource(view)
            {
                Position = 1,
            };

            var orientationSize = gridLayouter.CalculateLayoutOrientationSize();

            Assert.AreEqual(orientationSize, 6);

            var scrollPosition = gridLayouter.CalculateCandidateScrollPosition(0.0f);

            Assert.AreEqual(scrollPosition, 0.0f);

            gridLayouter.NotifyItemRangeInserted(source, 0, 10);

            gridLayouter.RequestNextFocusableView(view, View.FocusDirection.Up, true);
            gridLayouter.RequestNextFocusableView(view, View.FocusDirection.Down, true);
            gridLayouter.RequestNextFocusableView(view, View.FocusDirection.PageUp, true);
            gridLayouter.RequestNextFocusableView(view, View.FocusDirection.PageDown, true);
            gridLayouter.RequestNextFocusableView(view, View.FocusDirection.Left, true);
            gridLayouter.RequestNextFocusableView(view, View.FocusDirection.Right, true);

            view.Dispose();
            gridLayouter.Dispose();

            source.Dispose();

            tlog.Debug(tag, $"GridLayouterRequestNextFocusableView END (OK)");
        }
Esempio n. 4
0
        public void GridLayouterGetItemSize()
        {
            tlog.Debug(tag, $"GridLayouterGetItemSize START");

            var view = new CollectionView(new List <string>()
            {
                "123", "456", "789"
            })
            {
                Header    = new RecyclerViewItem(),
                Footer    = new RecyclerViewItem(),
                IsGrouped = true,
            };

            Assert.IsNotNull(view, "Should not be null");

            view.GroupFooterTemplate = new DataTemplate(typeof(RecyclerViewItem));
            view.GroupHeaderTemplate = new DataTemplate(typeof(RecyclerViewItem));
            view.ItemTemplate        = new DataTemplate(typeof(RecyclerViewItem));

            var gridLayouter = new GridLayouter();

            Assert.IsNotNull(gridLayouter, "Should not be null");

            gridLayouter.Initialize(view);

            try
            {
                gridLayouter.GetItemSize(1);
            }
            catch (Exception e)
            {
                tlog.Debug(tag, e.Message.ToString());
                Assert.Fail("Caught Exception : Failed!");
            }

            view.Dispose();
            gridLayouter.Dispose();

            tlog.Debug(tag, $"GridLayouterGetItemSize END (OK)");
        }
Esempio n. 5
0
        private void PrepareLayouter()
        {
            switch ((string)currentPanel.Tag)
            {
            case "Expansion":                     // Distribution
                if (layouter == null || !(layouter is ExpansionLayouter))
                {
                    layouter = new ExpansionLayouter(Project);
                }
                ExpansionLayouter dl = (ExpansionLayouter)layouter;
                dl.HorizontalCompression = horizontalCompressionTrackBar.Value;
                dl.VerticalCompression   = verticalCompressionTrackBar.Value;
                break;

            case "Alignment":
                if (layouter == null || !(layouter is GridLayouter))
                {
                    layouter = new GridLayouter(Project);
                }
                GridLayouter gl = (GridLayouter)layouter;
                gl.CoarsenessX = columnDistanceTrackBar.Value;
                gl.CoarsenessY = rowDistanceTrackBar.Value;

                /* gl.ColumnDistance = columnDistanceTrackBar.Value;
                 * gl.RowDistance = rowDistanceTrackBar.Value; */
                break;

            case "Clusters":
                if (layouter == null || !(layouter is RepulsionLayouter))
                {
                    layouter = new RepulsionLayouter(Project);
                }
                RepulsionLayouter rl = (RepulsionLayouter)layouter;
                // The default distance between connected elements should be 100 display units.
                // The default distance between unconnected elements should be 300 display units.
                rl.Friction       = 0;                   // 300;
                rl.Repulsion      = repulsionStrengthTrackBar.Value;
                rl.RepulsionRange = repulsionRangeTrackBar.Value;
                rl.SpringRate     = attractionStrengthTrackBar.Value;
                // Two unconnected elements at the same position should move to their default distance
                // within two steps
                rl.Mass = 50;
                break;

            case "Flow":
                if (layouter == null || !(layouter is FlowLayouter))
                {
                    layouter = new FlowLayouter(Project);
                }
                FlowLayouter fl = (FlowLayouter)layouter;
                if (bottomUpRadioButton.Checked)
                {
                    fl.Direction = FlowLayouter.FlowDirection.BottomUp;
                }
                else if (leftToRightRadioButton.Checked)
                {
                    fl.Direction = FlowLayouter.FlowDirection.LeftToRight;
                }
                else if (topDownRadioButton.Checked)
                {
                    fl.Direction = FlowLayouter.FlowDirection.TopDown;
                }
                else if (rightToLeftRadioButton.Checked)
                {
                    fl.Direction = FlowLayouter.FlowDirection.RightToLeft;
                }
                fl.LayerDistance = flowLayerDistanceTrackBar.Value;
                fl.RowDistance   = flowRowDistanceTrackBar.Value;
                break;

            default:
                Debug.Assert(false);
                break;
            }
        }
Esempio n. 6
0
		private void PrepareLayouter()
		{
			switch ((string) currentPanel.Tag) {
				case "Expansion": // Distribution
					if (layouter == null || !(layouter is ExpansionLayouter))
						layouter = new ExpansionLayouter(Project);
					ExpansionLayouter dl = (ExpansionLayouter) layouter;
					dl.HorizontalCompression = horizontalCompressionTrackBar.Value;
					dl.VerticalCompression = verticalCompressionTrackBar.Value;
					break;
				case "Alignment":
					if (layouter == null || !(layouter is GridLayouter))
						layouter = new GridLayouter(Project);
					GridLayouter gl = (GridLayouter) layouter;
					gl.CoarsenessX = columnDistanceTrackBar.Value;
					gl.CoarsenessY = rowDistanceTrackBar.Value;
					/* gl.ColumnDistance = columnDistanceTrackBar.Value;
					gl.RowDistance = rowDistanceTrackBar.Value; */
					break;
				case "Clusters":
					if (layouter == null || !(layouter is RepulsionLayouter))
						layouter = new RepulsionLayouter(Project);
					RepulsionLayouter rl = (RepulsionLayouter) layouter;
					// The default distance between connected elements should be 100 display units.
					// The default distance between unconnected elements should be 300 display units.
					rl.Friction = 0; // 300;
					rl.Repulsion = repulsionStrengthTrackBar.Value;
					rl.RepulsionRange = repulsionRangeTrackBar.Value;
					rl.SpringRate = attractionStrengthTrackBar.Value;
					// Two unconnected elements at the same position should move to their default distance 
					// within two steps
					rl.Mass = 50;
					break;
				case "Flow":
					if (layouter == null || !(layouter is FlowLayouter))
						layouter = new FlowLayouter(Project);
					FlowLayouter fl = (FlowLayouter) layouter;
					if (bottomUpRadioButton.Checked) fl.Direction = FlowLayouter.FlowDirection.BottomUp;
					else if (leftToRightRadioButton.Checked) fl.Direction = FlowLayouter.FlowDirection.LeftToRight;
					else if (topDownRadioButton.Checked) fl.Direction = FlowLayouter.FlowDirection.TopDown;
					else if (rightToLeftRadioButton.Checked) fl.Direction = FlowLayouter.FlowDirection.RightToLeft;
					fl.LayerDistance = flowLayerDistanceTrackBar.Value;
					fl.RowDistance = flowRowDistanceTrackBar.Value;
					break;
				default:
					Debug.Assert(false);
					break;
			}
		}