Пример #1
0
        private ViewBuilder AddMlsClientRun(Func <IViewMultiString> fetcher, MlsClientRun run, int ws)
        {
            ParaBox para = InsertParaOrRun(run);

            var mls          = fetcher();
            var stringHookup = new MlsHookup(null, fetcher(), ws,
                                             hookup => mls.StringChanged += hookup.MlsPropChanged,
                                             hookup => mls.StringChanged += hookup.MlsPropChanged,
                                             para);

            AddHookupToRun(run, stringHookup);

            // Try to hook an event for notification of changes to the property.
            //MemberExpression mexp = (fetchString.Body as MemberExpression);
            //var argExp = Expression.Lambda<Func<object>>(mexp.Expression);
            //Type type = mexp.Member.DeclaringType;
            //string name = mexp.Member.Name;
            //EventInfo einfo = type.GetEvent(name + "Changed");
            //var target = argExp.Compile().Invoke();
            //if (einfo == null)
            //{
            //    MakeHookupForString(fetcher, run, name, target, para);
            //}
            //else
            //{
            //    var stringHookup = new MlsHookup(target, fetcher(), ws,
            //        hookup => einfo.AddEventHandler(target, new EventHandler<MlsChangedEventArgs>(hookup.MlsPropChanged)),
            //        hookup => einfo.RemoveEventHandler(target, new EventHandler<MlsChangedEventArgs>(hookup.MlsPropChanged)), para);
            //    AddHookupToRun(run, stringHookup);
            //    var propInfo = type.GetProperty(name);
            //}
            return(this);
        }
Пример #2
0
        public void MlsRuns()
        {
            string           part1 = "abc def";
            IViewMultiString mls   = new MultiAccessor(wsEn, wsEn);

            mls.set_String(wsEn, tsf.MakeString(part1, wsEn));
            AssembledStyles styles    = new AssembledStyles();
            MlsClientRun    clientRun = new MlsClientRun(mls, styles.WithWs(wsEn));

            Assert.AreEqual(1, clientRun.UniformRunCount);
            Assert.AreEqual(part1, clientRun.UniformRunText(0));
            AssembledStyles style1 = clientRun.UniformRunStyles(0);

            Assert.AreEqual(wsEn, style1.Ws);
            Assert.AreEqual(0, clientRun.UniformRunStart(0));
            Assert.AreEqual(part1.Length, clientRun.UniformRunLength(0));

            string     part2 = " ghi";
            ITsStrBldr bldr  = mls.get_String(wsEn).GetBldr();

            bldr.Replace(part1.Length, part1.Length, part2, ttpFrn);
            IViewMultiString multibldr = new MultiAccessor(wsEn, wsEn);

            multibldr.set_String(wsFrn, bldr.GetString());
            MlsClientRun clientRun2 = new MlsClientRun(multibldr, styles.WithWs(wsFrn));

            Assert.AreEqual(2, clientRun2.UniformRunCount);
            Assert.AreEqual(part1, clientRun2.UniformRunText(0));
            Assert.AreEqual(part2, clientRun2.UniformRunText(1));
            style1 = clientRun2.UniformRunStyles(0);
            Assert.AreEqual(wsEn, style1.Ws);
            AssembledStyles style2 = clientRun2.UniformRunStyles(1);

            Assert.AreEqual(wsFrn, style2.Ws);
            Assert.AreEqual(0, clientRun2.UniformRunStart(0));
            Assert.AreEqual(part1.Length, clientRun2.UniformRunLength(0));
            Assert.AreEqual(part1.Length, clientRun2.UniformRunStart(1));
            Assert.AreEqual(part2.Length, clientRun2.UniformRunLength(1));
        }
Пример #3
0
 protected virtual void MakeHookupForString(Func <IViewMultiString> fetcher, MlsClientRun run, string name, object target, ParaBox para)
 {
     // In this SharpViewsLight base class we have no alternate strategy. We won't get notifications of changes.
 }
Пример #4
0
        public ViewBuilder AddString(Func <IViewMultiString> fetcher, int ws)
        {
            var run = new MlsClientRun(fetcher(), NestedBoxStyles.WithWs(ws));

            return(AddMlsClientRun(fetcher, run, ws));
        }