コード例 #1
0
        public void MultiParaCopy()
        {
            var styles = new AssembledStyles();
            var root   = new RootBoxFdo(styles);
            var owner  = new MockData1(23, 23);
            var mock1  = new MockData1(23, 23);
            var mock2  = new MockData1(23, 23);
            var mock3  = new MockData1(23, 23);

            owner.InsertIntoObjSeq1(0, mock1);
            owner.InsertIntoObjSeq1(1, mock2);
            owner.InsertIntoObjSeq1(2, mock3);
            mock1.SimpleThree = "This is the";
            mock2.SimpleThree = "day that the";
            mock3.SimpleThree = "Lord has made";
            var engine = new FakeRenderEngine()
            {
                Ws = 23, SegmentHeight = 13
            };
            var factory = new FakeRendererFactory();

            factory.SetRenderer(23, engine);
            var            layoutInfo = HookupTests.MakeLayoutInfo(int.MaxValue / 2, m_gm.VwGraphics, 23);
            PaintTransform ptrans     = new PaintTransform(2, 2, 96, 96, 0, 0, 96, 96);
            MockSite       site       = new MockSite();

            site.m_transform  = ptrans;
            site.m_vwGraphics = m_gm.VwGraphics;
            root.Site         = site;
            var po = new MockReceiveParagraphOperations();

            root.Builder.Show(Display.Of(() => owner.ObjSeq1).Using((bldr, md) => bldr.AddString(() => md.SimpleThree, 23))
                              .EditParagraphsUsing(po));
            var layoutArgs = MakeLayoutInfo(Int32.MaxValue / 2, m_gm.VwGraphics, factory);

            root.Layout(layoutArgs);

            int x        = FakeRenderEngine.SimulatedWidth("This ") + 2;
            var location = new Point(x, 8);

            Clipboard.SetDataObject("");

            MouseEventArgs e = new MouseEventArgs(MouseButtons.Left, 1, location.X, location.Y, 0);

            root.OnMouseDown(e, Keys.None, site.m_vwGraphics, site.m_transform);
            Assert.That(root.CanCopy(), Is.EqualTo(false), "Should not be able to copy");
            x        = FakeRenderEngine.SimulatedWidth("Lord") + 2;
            location = new Point(x, 29);
            e        = new MouseEventArgs(MouseButtons.Left, 1, location.X, location.Y, 0);
            root.OnMouseMove(e, Keys.None, site.m_vwGraphics, site.m_transform);

            Assert.That(root.CanCopy(), Is.EqualTo(true), "Should be able to copy");
            root.OnEditCopy();
            Assert.That(owner.ObjSeq1[0].SimpleThree + owner.ObjSeq1[1].SimpleThree + owner.ObjSeq1[2].SimpleThree, Is.EqualTo("This is the" + "day that the" + "Lord has made"));
            Assert.That(Clipboard.GetDataObject().GetData(DataFormats.StringFormat), Is.EqualTo("is the\r\nday that the\r\nLord"), "Selected String should be \"is the\nday that the\nLord \"");
        }
コード例 #2
0
        public void CombinedParaOperations()
        {
            // Set up a simple multi-para layout using the ObjSeq2 and SimpleThree properties of MockData1
            AssembledStyles styles = new AssembledStyles();
            RootBox         root   = new RootBoxFdo(styles);
            var             owner  = new MockData1();
            var             p1     = new MockData1(10, 11);
            var             p2     = new MockData1(10, 11);

            p1.SimpleThree = "Hello World";
            p2.SimpleThree = "This is a test";
            owner.ObjSeq2.Add(p1);
            owner.ObjSeq2.Add(p2);
            var po = new MockReceiveParagraphOperations();

            root.Builder.Show(Display.Of(() => owner.ObjSeq2)
                              .Using((builder, para) => builder.AddString(() => para.SimpleThree, 10))
                              .EditParagraphsUsing(po));
            SetupFakeRootSite(root);
            var layoutInfo = HookupTests.MakeLayoutInfo(int.MaxValue / 2, m_gm.VwGraphics, 55);

            root.Layout(layoutInfo);
            var ip = root.FirstBox.SelectAtEnd();

            // Insert at end of paragraph.
            ip.InsertLineBreak();
            Assert.That(owner.ObjSeq2.Count, Is.EqualTo(3));
            Assert.That(owner.ObjSeq2[0], Is.EqualTo(p1));
            Assert.That(owner.ObjSeq2[2], Is.EqualTo(p2));
            var p3 = owner.ObjSeq2[1];             // empty inserted paragraph.

            ((MockSite)root.Site).DoPendingAfterNotificationTasks();
            ip = (InsertionPoint)root.Selection;
            Assert.That(root.FirstBox.Next.Next, Is.Not.Null);
            Assert.That(ip.StringPosition, Is.EqualTo(0));
            Assert.That(ip.Para, Is.EqualTo(root.FirstBox.Next));

            // Insert at start of paragraph. To make it unambiguously the start, give p3 some data,
            // and since that might eventually destroy the selection, reset it.
            var rootHookup = ip.Hookup.ParentHookup.ParentHookup;             // StringHookup, ItemHookup, Sequence

            p3.SimpleThree = "First insert";
            ip             = (InsertionPoint)SelectionBuilder.In(rootHookup)[1].Offset(0).Install();
            ip.InsertLineBreak();
            Assert.That(owner.ObjSeq2.Count, Is.EqualTo(4));
            Assert.That(owner.ObjSeq2[0], Is.EqualTo(p1));
            Assert.That(owner.ObjSeq2[2], Is.EqualTo(p3));
            Assert.That(owner.ObjSeq2[3], Is.EqualTo(p2));
            var p4 = owner.ObjSeq2[1];             // empty inserted paragraph (before p3).

            Assert.That(root.FirstBox.Next.Next.Next, Is.Not.Null);
            ((MockSite)root.Site).DoPendingAfterNotificationTasks();
            ip = (InsertionPoint)root.Selection;
            Assert.That(ip.StringPosition, Is.EqualTo(0));
            Assert.That(ip.Para, Is.EqualTo(root.FirstBox.Next.Next));

            // Split a paragraph.
            var oldObjects = owner.ObjSeq2.ToArray();

            ip = (InsertionPoint)SelectionBuilder.In(rootHookup)[2].Offset("First ".Length).Install();
            ip.InsertLineBreak();
            Assert.That(owner.ObjSeq2.Count, Is.EqualTo(5));
            Assert.That(owner.ObjSeq2[1], Is.EqualTo(oldObjects[1]));
            Assert.That(owner.ObjSeq2[2], Is.EqualTo(oldObjects[2]));
            Assert.That(owner.ObjSeq2[4], Is.EqualTo(oldObjects[3])); // insert between 2 and 3
            var p5 = owner.ObjSeq2[3];                                // inserted paragraph.

            ((MockSite)root.Site).DoPendingAfterNotificationTasks();
            ip = (InsertionPoint)root.Selection;
            Assert.That(ip.StringPosition, Is.EqualTo(0));
            Assert.That(ip.Para, Is.EqualTo(root.FirstBox.Next.Next.Next));
            Assert.That(owner.ObjSeq2[2].SimpleThree, Is.EqualTo("First "));
            Assert.That(owner.ObjSeq2[3].SimpleThree, Is.EqualTo("insert"));

            // Combine two paragraphs by backspace at start of line.
            oldObjects = owner.ObjSeq2.ToArray();
            ip.Backspace();
            Assert.That(owner.ObjSeq2.Count, Is.EqualTo(4));
            Assert.That(owner.ObjSeq2[1], Is.EqualTo(oldObjects[1]));
            Assert.That(owner.ObjSeq2[2], Is.EqualTo(oldObjects[2]));
            Assert.That(owner.ObjSeq2[3], Is.EqualTo(oldObjects[4]));             // delete item 3
            ((MockSite)root.Site).DoPendingAfterNotificationTasks();
            ip = (InsertionPoint)root.Selection;
            Assert.That(ip.StringPosition, Is.EqualTo("First ".Length));
            Assert.That(ip.Para, Is.EqualTo(root.FirstBox.Next.Next));
            Assert.That(owner.ObjSeq2[2].SimpleThree, Is.EqualTo("First insert"));
        }