void InsertDataBlockLogic(PageItem page, DataBlockSnapMode mode)
        {
            //Point p = GetClickLocation(0.0, 0.0);
            Point p = new Point(RightClick.X, RightClick.Y);

            var item = new DataBlockLogicItem()
            {
                IsNew       = false,
                IsModified  = false,
                IsDeleted   = false,
                Designation = "Designation",
                Signal      = "Signal",
                Description = "Description",
                Condition   = "Condition",
                X           = p.X,
                Y           = p.Y,
                Z           = 1
            };

            SnapDataBlockLogicItem(item, 0.0, 0.0, mode);
            page.Items.Add(item);
        }
        void SnapDataBlockLogicItem(ILocation locacion, double dX, double dY, DataBlockSnapMode mode)
        {
            double left = SnapGrid.Snap(locacion.X + dX, UnitConverter.CmToDip(0.1));
            //double top = SnapGrid.Snap(locacion.Y + dY, UnitConverter.CmToDip(1.0), UnitConverter.CmToDip(0.1));
            double top = UnitConverter.CmToDip(Math.Floor(UnitConverter.DipToCm(locacion.Y + dY)) + 0.1);

            switch (mode)
            {
            case DataBlockSnapMode.Input:
            {
                left = UnitConverter.CmToDip(1.3);
            }
            break;

            case DataBlockSnapMode.Output:
            {
                left = UnitConverter.CmToDip(31.2);
            }
            break;

            case DataBlockSnapMode.Auto:
            {
                if (left < UnitConverter.CmToDip(1.3))
                {
                    // X < 1.3cm
                    left = UnitConverter.CmToDip(1.3);
                }
                else if (left >= UnitConverter.CmToDip(1.3) && left < UnitConverter.CmToDip(11.2))
                {
                    // 1.3cm >= X > 11.2cm
                    left = UnitConverter.CmToDip(1.3);
                }
                else if (left >= UnitConverter.CmToDip(11.2) && left < UnitConverter.CmToDip(31.2))
                {
                    // 11.2cm >= X > 31.2cm
                    if (left <= UnitConverter.CmToDip(21.2))
                    {
                        // move to inputs
                        left = UnitConverter.CmToDip(1.3);
                    }
                    else
                    {
                        // move to outputs
                        left = UnitConverter.CmToDip(31.2);
                    }
                }
                else
                {
                    // X >= 31.2cm
                    left = UnitConverter.CmToDip(31.2);
                }
            }
            break;
            }

            if (top <= UnitConverter.CmToDip(2.1))
            {
                // Y <= 2.1cm
                top = UnitConverter.CmToDip(2.1);
            }
            else if (top >= UnitConverter.CmToDip(25.1))
            {
                // Y >= 25.1
                top = UnitConverter.CmToDip(25.1);
            }
            else
            {
                // 2.1cm < Y < 25.1cm
                //top = top + UnitConverter.CmToDip(0.1);
            }

            locacion.X = left;
            locacion.Y = top;
        }