示例#1
0
        public virtual void SaveView(ViewGroupId groupId, ViewSpec viewSpec, string originalName)
        {
            var viewSpecList = GetViewSpecList(groupId) ?? ViewSpecList.EMPTY;

            viewSpecList = viewSpecList.ReplaceView(originalName, viewSpec);
            SaveViewSpecList(groupId, viewSpecList);
        }
示例#2
0
        public virtual void SaveView(ViewGroupId groupId, ViewSpec viewSpec, string originalName)
        {
            var viewSpecList = GetViewSpecList(groupId) ?? ViewSpecList.EMPTY;

            viewSpecList = viewSpecList.ReplaceView(originalName, new ViewSpecLayout(viewSpec, viewSpecList.GetViewLayouts(viewSpec.Name)));
            SaveViewSpecList(groupId, viewSpecList);
        }
示例#3
0
 public override int GetHashCode()
 {
     unchecked
     {
         return(((ViewSpec != null ? ViewSpec.GetHashCode() : 0) * 397) ^ (ViewLayoutList != null ? ViewLayoutList.GetHashCode() : 0));
     }
 }
示例#4
0
        private void ReadXml(XmlReader reader)
        {
            if (ViewSpecs != null)
            {
                throw new ReadOnlyException();
            }
            if (reader.IsEmptyElement)
            {
                ViewSpecs = ImmutableList.Empty <ViewSpec>();
                reader.ReadElementString("views"); // Not L10N
                return;
            }
            reader.Read();
            var viewItems = new List <ViewSpec>();

            while (true)
            {
                if (reader.IsStartElement("view")) // Not L10N
                {
                    viewItems.Add(ViewSpec.ReadXml(reader));
                }
                else if (reader.NodeType == XmlNodeType.EndElement)
                {
                    reader.ReadEndElement();
                    break;
                }
                else
                {
                    reader.Read();
                }
            }
            ViewSpecs = ImmutableList.ValueOf(viewItems);
        }
示例#5
0
        public void ReadXml(XmlReader reader)
        {
            Name = reader.GetAttribute("name");
            if (reader.IsEmptyElement)
            {
                reader.ReadElementString("views");
                return;
            }
            reader.Read();
            var viewSpecs = new List <ViewSpec>();

            while (true)
            {
                if (reader.IsStartElement("view"))
                {
                    viewSpecs.Add(ViewSpec.ReadXml(reader));
                }
                else if (reader.NodeType == XmlNodeType.EndElement)
                {
                    reader.ReadEndElement();
                    break;
                }
                else
                {
                    reader.Read();
                }
            }
            ViewSpecs = viewSpecs.AsReadOnly();
        }
示例#6
0
 public ViewSpecLayout ChangeName(string name)
 {
     return(ChangeProp(ImClone(this), im =>
     {
         im.ViewSpec = ViewSpec.SetName(name);
         im.ViewLayoutList = ViewLayoutList.ChangeViewName(name);
     }));
 }
示例#7
0
        public ViewInfo GetViewInfo(ViewGroup viewGroup, ViewSpec viewSpec)
        {
            var rowSourceInfo = GetRowSourceInfo(viewSpec);

            if (null == rowSourceInfo)
            {
                return(null);
            }
            return(new ViewInfo(DataSchema, rowSourceInfo.RowType, viewSpec).ChangeViewGroup(viewGroup));
        }
示例#8
0
文件: ViewInfo.cs 项目: zjjyyang/ftdr
        public ViewInfo(ColumnDescriptor parentColumn, ViewSpec viewSpec)
        {
            ParentColumn = parentColumn;
            DataSchema   = parentColumn.DataSchema;
            Name         = viewSpec.Name;
            var columnSpecs = viewSpec.Columns.ToDictionary(c => c.IdentifierPath, c => c);

            _columnDescriptors.Add(parentColumn.IdPath, parentColumn);
            ColumnDescriptors = Array.AsReadOnly(viewSpec.Columns
                                                 .Select(c => GetColumnDescriptor(columnSpecs, c.IdentifierPath)).ToArray());
            SublistId = viewSpec.SublistId;
        }
示例#9
0
 public ViewSpec CustomizeView(Control owner, ViewSpec viewSpec)
 {
     viewSpec = MakeEditable(viewSpec);
     using (var customizeViewForm = new CustomizeViewForm(this, viewSpec))
     {
         if (customizeViewForm.ShowDialog(owner.TopLevelControl) == DialogResult.Cancel)
         {
             return(null);
         }
         // Consider: if save fails, reshow CustomizeViewForm?
         return(SaveView(customizeViewForm.ViewSpec));
     }
 }
示例#10
0
        public ColumnSelector(ColumnDescriptor rootColumn, PropertyPath propertyPath)
        {
            var viewSpec = new ViewSpec().SetColumns(ImmutableList.Singleton(new ColumnSpec(propertyPath)))
                           .SetSublistId(propertyPath);

            ViewInfo = new ViewInfo(rootColumn, viewSpec);
            var displayColumn = ViewInfo.DisplayColumns[0];

            if (displayColumn.ColumnDescriptor != null && null != displayColumn.ColumnDescriptor.CollectionAncestor())
            {
                Pivoter = new Pivoter(ViewInfo);
            }
        }
示例#11
0
        public ViewInfo(ColumnDescriptor parentColumn, ViewSpec viewSpec)
        {
            ParentColumn  = parentColumn;
            DataSchema    = parentColumn.DataSchema;
            Name          = viewSpec.Name;
            RowSourceName = viewSpec.RowSource;

            _columnDescriptors.Add(parentColumn.PropertyPath, parentColumn);
            var displayColumns = new List <DisplayColumn>();

            foreach (var column in viewSpec.Columns)
            {
                var columnDescriptor = GetColumnDescriptor(column.PropertyPath);
                displayColumns.Add(new DisplayColumn(this, column, columnDescriptor));
            }
            DisplayColumns = Array.AsReadOnly(displayColumns.ToArray());
            SublistId      = viewSpec.SublistId;
            var filters = new List <FilterInfo>();

            foreach (var filterSpec in viewSpec.Filters)
            {
                var columnDescriptor = GetColumnDescriptor(filterSpec.ColumnId);
                ColumnDescriptor collectionColumn = null;
                if (columnDescriptor != null)
                {
                    collectionColumn = columnDescriptor.CollectionAncestor() ?? ParentColumn;
                }
                filters.Add(new FilterInfo(filterSpec, columnDescriptor, collectionColumn));
            }

            Filters = Array.AsReadOnly(filters.ToArray());
            var sorts = new List <KeyValuePair <int, DisplayColumn> >();

            for (int i = 0; i < DisplayColumns.Count; i++)
            {
                if (DisplayColumns[i].ColumnSpec.SortDirection != null)
                {
                    sorts.Add(new KeyValuePair <int, DisplayColumn>(i, DisplayColumns[i]));
                }
            }
            if (sorts.Count > 0)
            {
                sorts.Sort(CompareSortEntries);
                SortColumns = Array.AsReadOnly(sorts.Select(kvp => kvp.Value).ToArray());
            }
            else
            {
                SortColumns = new DisplayColumn[0];
            }
        }
示例#12
0
 public virtual ViewSpec CustomizeView(Control owner, ViewSpec viewSpec, ViewGroup viewPath)
 {
     using (var customizeViewForm = CreateViewEditor(viewPath, viewSpec))
     {
         if (FormUtil.ShowDialog(owner, customizeViewForm) == DialogResult.Cancel)
         {
             return(null);
         }
         // Consider: if save fails, reshow CustomizeViewForm?
         ViewInfo viewInfo = customizeViewForm.ViewInfo;
         viewInfo = new ViewInfo(viewInfo.ParentColumn, viewInfo.GetViewSpec().SetName(customizeViewForm.ViewName));
         SaveView(viewPath.Id, viewInfo.GetViewSpec(), viewSpec.Name);
         return(viewInfo.GetViewSpec());
     }
 }
示例#13
0
        public virtual ViewSpec SaveView(ViewSpec newViewSpec)
        {
            var viewSpecs     = new List <ViewSpec>(CustomViewSpecs);
            var existingIndex = viewSpecs.FindIndex(vs => vs.Name == newViewSpec.Name);

            if (existingIndex >= 0)
            {
                viewSpecs[existingIndex] = newViewSpec;
            }
            else
            {
                viewSpecs.Add(newViewSpec);
            }
            SetCustomViewSpecs(viewSpecs);
            return(newViewSpec);
        }
示例#14
0
        public ViewSpecList ReplaceView(string oldName, ViewSpec newView)
        {
            List <ViewSpec> items = new List <ViewSpec>();
            bool            found = false;

            foreach (var item in ViewSpecs)
            {
                if (item.Name != oldName)
                {
                    items.Add(item);
                    continue;
                }
                found = true;
                if (newView != null)
                {
                    items.Add(newView);
                }
            }
            if (!found && null != newView)
            {
                items.Add(newView);
            }
            IEnumerable <ViewLayoutList> newLayouts;

            if (oldName != null)
            {
                if (newView == null)
                {
                    newLayouts = ViewLayouts.Where(layout => layout.ViewName != oldName);
                }
                else if (newView.Name == oldName)
                {
                    newLayouts = ViewLayouts;
                }
                else
                {
                    newLayouts = ViewLayouts.Where(layout => layout.ViewName != newView.Name)
                                 .Select(layout => layout.ViewName == oldName ? layout.ChangeViewName(newView.Name) : layout);
                }
            }
            else
            {
                newLayouts = ViewLayouts;
            }
            return(new ViewSpecList(items, newLayouts));
        }
示例#15
0
        public virtual ViewSpec MakeEditable(ViewSpec viewSpec)
        {
            if (!IsReadOnly(viewSpec) && !string.IsNullOrEmpty(viewSpec.Name))
            {
                return(viewSpec);
            }
            var viewNames = new HashSet <string>(BuiltInViewSpecs.Select(builtInViewSpec => builtInViewSpec.Name));

            viewNames.UnionWith(CustomViewSpecs.Select(customViewSpec => customViewSpec.Name));
            for (int index = 1; ; index++)
            {
                string name = "CustomView" + index;
                if (!viewNames.Contains(name))
                {
                    return(viewSpec.SetName(name));
                }
            }
        }
示例#16
0
        protected static ViewSpec GetDefaultViewSpec(ColumnDescriptor parentColumn)
        {
            var viewSpec = new ViewSpec().SetName(DefaultViewName).SetRowType(parentColumn.PropertyType).SetUiMode(parentColumn.UiMode);
            var columns  = new List <ColumnSpec>();

            foreach (var column in parentColumn.GetChildColumns())
            {
                if (null != column.DataSchema.GetCollectionInfo(column.PropertyType))
                {
                    continue;
                }
                if (column.DataSchema.IsHidden(column))
                {
                    continue;
                }
                columns.Add(new ColumnSpec(PropertyPath.Root.Property(column.Name)));
            }
            viewSpec = viewSpec.SetColumns(columns);
            return(viewSpec);
        }
示例#17
0
        private void ReadXml(XmlReader reader)
        {
            if (Views != null)
            {
                throw new ReadOnlyException();
            }

            if (reader.IsEmptyElement)
            {
                ViewSpecLayouts = ImmutableList.Empty <ViewSpecLayout>();
                reader.ReadElementString(@"views");
                return;
            }
            reader.Read();
            var viewItems = new List <ViewSpec>();
            var layouts   = new List <ViewLayoutList>();

            while (true)
            {
                if (reader.IsStartElement(@"view"))
                {
                    viewItems.Add(ViewSpec.ReadXml(reader));
                }
                else if (reader.IsStartElement(@"layouts"))
                {
                    layouts.Add(ViewLayoutList.ReadXml(reader));
                }
                else if (reader.NodeType == XmlNodeType.EndElement)
                {
                    reader.ReadEndElement();
                    break;
                }
                else
                {
                    reader.Skip();
                }
            }

            ViewSpecLayouts = ImmutableList.ValueOf(MakeViewSpecLayouts(viewItems, layouts));
        }
示例#18
0
        public ViewSpecList ReplaceView(string oldName, ViewSpec newView)
        {
            List <ViewSpec> items = new List <ViewSpec>();
            bool            found = false;

            foreach (var item in ViewSpecs)
            {
                if (item.Name != oldName)
                {
                    items.Add(item);
                    continue;
                }
                found = true;
                if (newView != null)
                {
                    items.Add(newView);
                }
            }
            if (!found && null != newView)
            {
                items.Add(newView);
            }
            return(new ViewSpecList(items));
        }
示例#19
0
 public virtual int GetImageIndex(ViewSpec viewItem)
 {
     return(-1);
 }
示例#20
0
 public ViewSpecLayout(ViewSpec viewSpec, ViewLayoutList layouts)
 {
     ViewSpec       = viewSpec;
     ViewLayoutList = EnsureName(layouts, viewSpec.Name);
 }
示例#21
0
 protected virtual ViewEditor CreateViewEditor(ViewGroup viewGroup, ViewSpec viewSpec)
 {
     return(new ViewEditor(this, GetViewInfo(viewGroup, viewSpec)));
 }
示例#22
0
 protected RowSourceInfo GetRowSourceInfo(ViewSpec viewSpec)
 {
     return(RowSources.FirstOrDefault(rowSource => rowSource.Name == viewSpec.RowSource));
 }
示例#23
0
 public ViewInfo(DataSchema dataSchema, Type rootType, ViewSpec viewSpec) : this(ColumnDescriptor.RootColumn(dataSchema, rootType, viewSpec.UiMode), viewSpec)
 {
 }
示例#24
0
文件: ViewInfo.cs 项目: zjjyyang/ftdr
 public ViewInfo(DataSchema dataSchema, Type rootType, ViewSpec viewSpec) : this(new ColumnDescriptor(dataSchema, rootType), viewSpec)
 {
 }
示例#25
0
 public ViewSpecList()
 {
     ViewSpecs = new ViewSpec[0];
 }
示例#26
0
 protected virtual bool IsReadOnly(ViewSpec viewSpec)
 {
     return(BuiltInViewSpecs.Any(builtInViewSpec => viewSpec.Name == builtInViewSpec.Name));
 }
示例#27
0
 public View(ViewSpec spec, ViewLayoutList layouts)
 {
     ViewSpec = spec;
     _layouts = layouts;
 }
示例#28
0
 protected AbstractViewContext(ColumnDescriptor parentColumn)
 {
     ParentColumn     = parentColumn;
     BuiltInViewSpecs = new ViewSpec[0];
 }