public override void ExecuteRule(LogicRuleInfo <IAdditionalViewControlsRule> info, ExecutionContext executionContext) { if (Frame != null) { var viewSiteTemplate = Frame.Template as IViewSiteTemplate; if (viewSiteTemplate == null) { return; } object viewSiteControl = GetContainerControl(viewSiteTemplate, info.Rule); if (viewSiteControl != null) { IAdditionalViewControlsRule additionalViewControlsRule = info.Rule; var calculator = new AdditionalViewControlsProviderCalculator(additionalViewControlsRule, info.View.ObjectTypeInfo.Type); Type controlType = calculator.ControlsRule.ControlType; ICollection controls = GetControls(viewSiteControl); IAdditionalViewControl additionalViewControl = FindControl(info.Rule, controls); if (info.Active && ViewContextIsCorrect(info.Rule)) { var control = GetControl(controlType, additionalViewControl, info); control.Rule = info.Rule; ReflectionHelper.CreateObject(calculator.ControlsRule.DecoratorType, new[] { info.View, (object)control, info.Rule }); if (additionalViewControl == null) { AddControl(control, controls, info); InitializeControl(control, info, calculator, executionContext); } } else if (additionalViewControl != null) { controls.GetType().GetMethod("Remove").Invoke(controls, new[] { additionalViewControl }); } } } }
protected virtual IAdditionalViewControl GetControl(Type controlType, IAdditionalViewControl additionalViewControl, LogicRuleInfo <IAdditionalViewControlsRule> info) { var control = additionalViewControl ?? Activator.CreateInstance(controlType) as IAdditionalViewControl; if (control is ISupportLayoutManager) { if (info.Rule.Position != Position.DetailViewItem) { throw new ArgumentException("Rule with Id:" + info.Rule.Id + " position should be set to " + Position.DetailViewItem); } if (RuleToLayoutMap.ContainsKey(info.Rule.Id)) { ((ISupportLayoutManager)control).LayoutItem = RuleToLayoutMap[info.Rule.Id]; } } return(control); }
protected virtual IAdditionalViewControl GetControl(Type controlType, IAdditionalViewControl additionalViewControl, IAdditionalViewControlsRule rule) { var control = additionalViewControl ?? controlType.CreateInstance() as IAdditionalViewControl; var manager = control as ISupportLayoutManager; if (manager != null) { if (rule.Position != Position.DetailViewItem) { throw new ArgumentException("Rule with Id:" + rule.Id + " position should be set to " + Position.DetailViewItem); } if (RuleToLayoutMap.ContainsKey(rule.Id)) { manager.LayoutItem = RuleToLayoutMap[rule.Id]; } } return(control); }
void OnLogicRuleExecute(object sender, LogicRuleExecuteEventArgs logicRuleExecuteEventArgs) { var info = logicRuleExecuteEventArgs.LogicRuleInfo; var additionalViewControlsRule = info.Rule as IAdditionalViewControlsRule; if (Frame != null && additionalViewControlsRule != null) { var viewSiteTemplate = Frame.Template as IViewSiteTemplate; if (viewSiteTemplate == null) { return; } object viewSiteControl = GetContainerControl(viewSiteTemplate, additionalViewControlsRule); if (viewSiteControl != null) { var calculator = new AdditionalViewControlsProviderCalculator(additionalViewControlsRule, info.View.ObjectTypeInfo.Type); Type controlType = calculator.ControlsRule.ControlType; ICollection controls = GetControls(viewSiteControl); IAdditionalViewControl additionalViewControl = FindControl(additionalViewControlsRule, controls); if (info.Active && ViewContextIsCorrect(additionalViewControlsRule)) { var control = GetControl(controlType, additionalViewControl, additionalViewControlsRule); if (control != null) { control.Rule = additionalViewControlsRule; calculator.ControlsRule.DecoratorType.CreateInstance(info.View, (object)control, additionalViewControlsRule); if (additionalViewControl == null) { InitializeControl(control, additionalViewControlsRule, calculator, logicRuleExecuteEventArgs.ExecutionContext); AddControl(control, controls, info); } } } else if (additionalViewControl != null) { controls.CallMethod("Remove", new[] { GetControlType() }, additionalViewControl); } } } }
protected virtual IAdditionalViewControl GetControl(Type controlType, IAdditionalViewControl additionalViewControl, IAdditionalViewControlsRule rule) { var control = additionalViewControl ?? controlType.CreateInstance() as IAdditionalViewControl; var manager = control as ISupportLayoutManager; if (manager != null) { if (rule.Position != Position.DetailViewItem) throw new ArgumentException("Rule with Id:" + rule.Id + " position should be set to " + Position.DetailViewItem); if (RuleToLayoutMap.ContainsKey(rule.Id)) manager.LayoutItem = RuleToLayoutMap[rule.Id]; } return control; }