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); }
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)); }
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. }
public ViewBuilder AddString(Func <IViewMultiString> fetcher, int ws) { var run = new MlsClientRun(fetcher(), NestedBoxStyles.WithWs(ws)); return(AddMlsClientRun(fetcher, run, ws)); }