示例#1
0
 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 });
             }
         }
     }
 }
示例#2
0
        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;
 }