public void TestVisualSymbolsController()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController(new ImageSymbolsManipulator(image), new[] { font }, font);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeLetters = true;
                symboler.IncludeNumbers = false;
                symboler.IncludeSymbols = false;
            }
            Assert.AreEqual(117, symboler.AvailableSymbols.Count, "Precondition");

            var visualSymbolsController = new VisualSymbolsController(symboler, new Size(100, 150));

            Assert.AreSame(symboler, visualSymbolsController.Controller);
            Assert.AreEqual(3, visualSymbolsController.ColumnsCount);
            Assert.AreEqual(39, visualSymbolsController.RowsCount);
            Assert.AreEqual(5, visualSymbolsController.VisibleRowsCount);
            Assert.IsTrue(visualSymbolsController.RequiresShift);

            Assert.AreEqual(new Size(96, 150), visualSymbolsController.VisualImage.Size);
        }
        public void TestMouseWheel()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController(new ImageSymbolsManipulator(image), new[] { font }, font);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeLetters = true;
                symboler.IncludeNumbers = false;
                symboler.IncludeSymbols = false;
            }
            var visualSymbolsController = new VisualSymbolsController(symboler, new Size(100, 150));

            Assert.AreEqual(0, visualSymbolsController.VerticalShift);

            using (visualSymbolsController.SuspendUpdateVisualImage())
            {
                visualSymbolsController.OnMouseWheel(100);
                Assert.AreEqual(0, visualSymbolsController.VerticalShift, "Should not shift beyond top row.");

                visualSymbolsController.OnMouseWheel(-100);
                Assert.AreEqual(10, visualSymbolsController.VerticalShift);

                visualSymbolsController.OnMouseWheel(30);
                Assert.AreEqual(7, visualSymbolsController.VerticalShift);

                visualSymbolsController.OnMouseWheel(-30000);
                Assert.AreEqual(1098, visualSymbolsController.VerticalShift, "Should not shift beyond bottom row.");
            }
        }
        public void TestClick()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController(new ImageSymbolsManipulator(image), new[] { font }, font);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeLetters = true;
                symboler.IncludeNumbers = false;
                symboler.IncludeSymbols = false;
            }
            var visualSymbolsController = new VisualSymbolsController(symboler, new Size(100, 150));

            Assert.NotNull(visualSymbolsController.VisualImage);

            using (visualSymbolsController.SuspendUpdateVisualImage())
            {
                foreach (var c in symboler.SelectedSymbols.ToArray())
                {
                    symboler.SwitchSelection(c);
                }
                Assert.AreEqual(0, symboler.SelectedCount);

                visualSymbolsController.OnTouched(new Point(50, 20));                 // (1, 0) = #1 = A (#0 = ' ')
                visualSymbolsController.OnUntouched(new Point(50, 20));
                Assert.AreEqual(1, symboler.SelectedCount);
                Assert.Contains('A', symboler.SelectedSymbols.ToArray());

                visualSymbolsController.OnTouched(new Point(50, 100));                 // (1, 3) = #1 = J
                visualSymbolsController.OnUntouched(new Point(50, 100));
                Assert.AreEqual(2, symboler.SelectedCount);
                Assert.Contains('A', symboler.SelectedSymbols.ToArray());
                Assert.Contains('J', symboler.SelectedSymbols.ToArray());

                visualSymbolsController.OnTouched(new Point(50, 20));                 // (1, 0) = #1 = A
                visualSymbolsController.OnUntouched(new Point(50, 20));
                Assert.AreEqual(1, symboler.SelectedCount);
                Assert.Contains('J', symboler.SelectedSymbols.ToArray());
            }
        }
        public void TestHighlightedCell()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController(new ImageSymbolsManipulator(image), new[] { font }, font);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeLetters = true;
                symboler.IncludeNumbers = false;
                symboler.IncludeSymbols = false;
            }
            var visualSymbolsController = new VisualSymbolsController(symboler, new Size(100, 150));

            visualSymbolsController.OnShift(new Point(50, 20));
            Assert.AreEqual(new Point(1, 0), visualSymbolsController.HighlightedCell);

            visualSymbolsController.OnShift(new Point(50, 100));
            Assert.AreEqual(new Point(1, 3), visualSymbolsController.HighlightedCell);
        }