Beispiel #1
0
        private void GenerateNestedDetailViewLayout(IModelDetailView modelDetailView)
        {
            List <IModelViewItem> items = new List <IModelViewItem>();

            foreach (IModelViewItem item in modelDetailView.Items)
            {
                items.Add(item);
            }
            foreach (IModelViewItem itemR in items)
            {
                itemR.Remove();
            }
            int index = 0;

            foreach (string propertyName in CustomLayoutHelper.Instance.GetViewVisibleProperties(modelDetailView.Id))
            {
                IModelPropertyEditor editor = modelDetailView.Items.AddNode <IModelPropertyEditor>(propertyName);
                editor.ImmediatePostData = true;
                editor.Index             = index++;
                editor.PropertyName      = propertyName;
                if (string.IsNullOrEmpty(((IModelViewItem)editor).Caption))
                {
                    ((IModelViewItem)editor).Caption = CaptionHelper.ConvertCompoundName(propertyName);
                }
            }
        }
        private void GenerateTabbedLayout(IModelDetailView detailViewInfo)
        {
            if (detailViewInfo.Layout["Main"] != null)
            {
                detailViewInfo.Layout["Main"].Remove();
            }
            IModelLayoutGroup main        = detailViewInfo.Layout.AddNode <IModelLayoutGroup>(ModelDetailViewLayoutNodesGenerator.MainLayoutGroupName);
            IModelLayoutGroup generalNode = null;
            IModelTabbedGroup tabNode     = null;
            IModelLayoutGroup footerNode  = null;

            foreach (IModelViewItem modelViewItem in detailViewInfo.Items)
            {
                IModelPropertyEditor editor = modelViewItem as IModelPropertyEditor;
                if (editor != null)
                {
                    if (FindModelDefaultAttribute(editor.ModelMember.MemberInfo, CustomDetailViewItemsGenarator.VisiblePropertiesAttribute) != null)
                    {
                        editor.PropertyEditorType = typeof(DetailPropertyEditor);// editor.ModelMember.EditorsInfo[EditorAliases.DetailPropertyEditor].DefaultEditor;
                    }
                    editor.ImmediatePostData = true;
                    IModelMemberExtender item = (IModelMemberExtender)editor;
                    string tabPageName        = item.TabPageName;
                    if (string.IsNullOrEmpty(tabPageName))
                    {
                        if (item.Footer)
                        {
                            if (footerNode == null)
                            {
                                footerNode       = main.AddNode <IModelLayoutGroup>(CustomDetailViewItemsGenarator.FooterId);
                                footerNode.Index = 5;
                            }
                            AddLayoutItemNode(footerNode, editor);
                        }
                        else
                        {
                            if (generalNode == null)
                            {
                                generalNode       = main.AddNode <IModelLayoutGroup>(CustomDetailViewItemsGenarator.GeneralId);
                                generalNode.Index = editor.Index.HasValue ? editor.Index : 0;
                            }
                            AddLayoutItemNode(generalNode, editor);
                        }
                    }
                    else
                    {
                        if (tabNode == null)
                        {
                            tabNode       = main.AddNode <IModelTabbedGroup>(CustomDetailViewItemsGenarator.MainTabId);
                            tabNode.Index = editor.Index.HasValue ? editor.Index : 1;
                        }
                        IModelLayoutGroup group = AddEditorToTabbedGroup(tabNode, tabPageName, editor);
                        if (editor.ModelMember.Index >= 0)
                        {
                            group.Index = editor.ModelMember.Index;
                        }
                    }
                }
            }
        }
Beispiel #3
0
        private void GenerateCustomLayout(IModelDetailView modelDetailView)
        {
            ITypeInfo        iTypeInfo            = modelDetailView.ModelClass.TypeInfo;
            HashSet <string> actionContainerNames = new HashSet <string>();

            foreach (IModelViewItem item in modelDetailView.Items)
            {
                IModelPropertyEditor editorInfo = (IModelPropertyEditor)item;
                if (CustomLayoutHelper.FindModelDefaultAttribute(editorInfo.ModelMember.MemberInfo, VisiblePropertiesAttribute) != null)
                {
                    editorInfo.PropertyEditorType = typeof(DetailPropertyEditor);
                }
                string visiblePropertiesAttributeValue = ((IModelMemberExtender)item).VisibleProperties;
                if (editorInfo.PropertyEditorType == typeof(DetailPropertyEditor) && !string.IsNullOrEmpty(visiblePropertiesAttributeValue))
                {
                    string nestedViewId = iTypeInfo.Name + "_" + editorInfo.PropertyName + "_DetailView";
                    editorInfo.View = modelDetailView.Application.Views[nestedViewId];
                }
                ModelDefaultAttribute actionsContainerAttribute = CustomLayoutHelper.FindModelDefaultAttribute(editorInfo.ModelMember.MemberInfo, ActionsContainerAttribute);
                if (actionsContainerAttribute != null)
                {
                    actionContainerNames.Add(actionsContainerAttribute.PropertyValue);
                }
            }
            foreach (string name in actionContainerNames)
            {
                IModelActionContainerViewItem modelActionContainerViewItem = modelDetailView.Items.AddNode <IModelActionContainerViewItem>(name);
            }
        }
Beispiel #4
0
 IAnalysisControl GetAnalysisControl(IModelPropertyEditor modelPropertyEditor)
 {
     try {
         return(AnalysisEditors.Where(@base => @base.PropertyName == modelPropertyEditor.PropertyName).OfType <TAnalysisEditor>().Single().Control);
     } catch (InvalidOperationException) {
         throw new UserFriendlyException(
                   new Exception(String.Format("Use {0} as your default property editor for {1}", typeof(TAnalysisEditor).FullName, typeof(IAnalysisInfo).Name)));
     }
 }
Beispiel #5
0
        public static void MockDetailViewEditor(this XafApplication application, IModelPropertyEditor modelPropertyEditor, object controlInstance)
        {
            modelPropertyEditor.PropertyEditorType = typeof(CustomPropertyEditor);
            application.EditorFactory.GetMock().Setup(factory => factory
                                                      .CreateDetailViewEditor(false, It.IsAny <IModelViewItem>(),
                                                                              modelPropertyEditor.ModelMember.ModelClass.TypeInfo.Type, application, It.IsAny <IObjectSpace>()))
            .Returns((bool needProtectedContent, IModelMemberViewItem modelViewItem, Type objectType,
                      XafApplication xafApplication, IObjectSpace objectSpace) => {
                if (modelViewItem == modelPropertyEditor)
                {
                    return(new CustomPropertyEditor(objectType, modelViewItem, controlInstance));
                }

                return(new EditorsFactory().CreateDetailViewEditor(needProtectedContent, modelViewItem, objectType, application, objectSpace));
            });
        }
        private void AddLayoutItemNode(IModelLayoutGroup layoutGroup, IModelPropertyEditor editor)
        {
            ModelDefaultAttribute modelDefaultAttribute = FindModelDefaultAttribute(editor.ModelMember.MemberInfo, CustomDetailViewItemsGenarator.ActionsContainerAttribute);

            if (modelDefaultAttribute != null)
            {
                IModelViewItem container = editor.Parent.GetNode(modelDefaultAttribute.PropertyValue) as IModelViewItem;
                if ((container != null))
                {
                    IModelLayoutViewItem item = layoutGroup.AddNode <IModelLayoutViewItem>(container.Id);
                    item.ViewItem = container;
                    item.Index    = editor.Index;
                }
            }
            else
            {
                IModelLayoutViewItem item = layoutGroup.AddNode <IModelLayoutViewItem>(editor.PropertyName);
                item.ViewItem = editor;
                item.Index    = editor.Index;
            }
        }
        private void CustomizeListPropertyEditor(IModelPropertyEditor propertyEditor)
        {
            if (propertyEditor.View is IModelListView listViewModel)
            {
                var mi = propertyEditor.ModelMember.MemberInfo;

                // Update list view column captions
                listViewModel.UpdateColumnCaptions();

                // Remove link and link buttons for compositions
                // Actually they should be removed automatically after application
                // of AggregatedAttribute to a property
                //var prop = mi.Owner.Type.GetProperty(mi.Name);
                //var compAttr = prop.GetCustomAttributes<CompositionAttribute>(false).FirstOrDefault();
                //if (compAttr != null)
                //{
                //    listViewModel.AllowLink = false;
                //    listViewModel.AllowUnlink = false;
                //}
            }
        }
 public static bool IsLayout(this IModelPropertyEditor modelPropertyEditor)
 => ((IModelViewItem)modelPropertyEditor).IsLayout();
Beispiel #9
0
 public static void Set_ContentEditor(IModelDesignTemplateContentEditor contentEditor, IModelPropertyEditor propertyEditor)
 => contentEditor.ContentEditorId = propertyEditor.Id();
        private IModelLayoutGroup AddEditorToTabbedGroup(IModelTabbedGroup rootTabNode, string tabId, IModelPropertyEditor editor, FlowDirection direction)
        {
            IModelLayoutGroup rootTabPageNode = (IModelLayoutGroup)rootTabNode[tabId];

            if (rootTabPageNode == null)
            {
                rootTabPageNode           = rootTabNode.AddNode <IModelLayoutGroup>(tabId);
                rootTabPageNode.Caption   = CaptionHelper.ConvertCompoundName(tabId);
                rootTabPageNode.Direction = direction;
            }
            AddLayoutItemNode(rootTabPageNode, editor);
            return(rootTabPageNode);
        }
 private IModelLayoutGroup AddEditorToTabbedGroup(IModelTabbedGroup rootTabNode, string tabId, IModelPropertyEditor editor)
 {
     return(AddEditorToTabbedGroup(rootTabNode, tabId, editor, FlowDirection.Horizontal));
 }