示例#1
0
            private void _RaiseViewRegistered(AltTypeFormatEntry typeEntry)
            {
                EventHandler <AltTypeFormatEntry> handler = ViewDefinitionRegistered;

                if (null != handler)
                {
                    handler(null, typeEntry);
                }
            } // end _RaiseViewRegistered()
示例#2
0
            } // end RegisterViewDefinition()

            private void _RegisterViewDefinition(AltTypeFormatEntry typeEntry)
            {
                List <ViewDefinitionInfo> views;

                if (!m_map.TryGetValue(typeEntry.TypeName, out views))
                {
                    views = new List <ViewDefinitionInfo>(typeEntry.ViewDefinitions);
                    m_map.Add(typeEntry.TypeName, views);
                    // TODO: check for duplicate view types. Then, TODO: how to warn that
                    // they are ignored. Pass an IPipelineCallback, I guess.
                    _RaiseViewRegistered(typeEntry);
                    return;
                }

                // Rather than just blindly adding to the list, we check to see if
                // we already have views of the same type, and if so, update them.

                var updatedInPlace = new HashSet <ViewDefinitionInfo>();

                for (int i = 0; i < views.Count; i++)
                {
                    foreach (var view in typeEntry.ViewDefinitions)
                    {
                        if (views[i].ViewDefinition.GetType() == view.ViewDefinition.GetType())
                        {
                            // In-place update.
                            views[i] = view;
                            updatedInPlace.Add(view);
                        }
                    }
                }

                if (0 == updatedInPlace.Count)
                {
                    views.AddRange(typeEntry.ViewDefinitions);
                }
                else
                {
                    foreach (var view in typeEntry.ViewDefinitions)
                    {
                        if (!updatedInPlace.Contains(view))
                        {
                            views.Add(view);
                        }
                    }
                }

                _RaiseViewRegistered(typeEntry);
            } // end _RegisterViewDefinition()
示例#3
0
            } // end _RaiseViewRegistered()

            internal void RegisterViewDefinition(AltTypeFormatEntry typeEntry)
            {
                if (typeEntry.ViewDefinitions.Count > 0)
                {
                    // It will be the same for all the views in the same AltTypeFormatEntry,
                    // so we can just use the first one.
                    m_scriptLoader.AddSourceFile(typeEntry.ViewDefinitions[0].SourceScript);
                }

                if (DbgTemplate.LooksLikeATemplateName(typeEntry.TypeName))
                {
                    _RegisterGenericViewDefinition(typeEntry);
                }
                else
                {
                    _RegisterViewDefinition(typeEntry);
                }
            } // end RegisterViewDefinition()
示例#4
0
            } // end _RegisterViewDefinition()

            private void _RegisterGenericViewDefinition(AltTypeFormatEntry typeEntry)
            {
                var template = DbgTemplate.CrackTemplate(typeEntry.TypeName);
                TypeNameMatchList <GenericViewDefinitionInfoList> existingViews;

                if (!m_genericsMap.TryGetValue(template.TemplateName, out existingViews))
                {
                    //views = new TypeNameMatchList< GenericViewDefinitionInfoList >( typeEntry.TypeName, typeEntry.ViewDefinitions );
                    existingViews = new TypeNameMatchList <GenericViewDefinitionInfoList>();
                    if (!existingViews.AddOrReplace(new GenericViewDefinitionInfoList(template, typeEntry.ViewDefinitions)))
                    {
                        LogManager.Trace("Replacing existing view definitions for: {0}",
                                         template);
                    }
                    m_genericsMap.Add(template.TemplateName, existingViews);
                    // TODO: check for duplicate view types. Then, TODO: how to warn that
                    // they are ignored. Pass an IPipelineCallback, I guess.
                    _RaiseViewRegistered(typeEntry);
                    return;
                }

                // Rather than just blindly adding to the list, we check to see if
                // we already have views of the same type, and if so, update them.

                var updatedInPlace = new HashSet <ViewDefinitionInfo>();

                //existingViews.UpdateItemsExact( template, ( existingViewList ) =>
                foreach (var existingViewList in existingViews.FindMatchingItemsExact(template))
                {
                    for (int i = 0; i < existingViewList.Views.Count; i++)
                    {
                        foreach (var newView in typeEntry.ViewDefinitions)
                        {
                            if (existingViewList.Views[i].ViewDefinition.GetType() == newView.ViewDefinition.GetType())
                            {
                                // In-place update.
                                existingViewList.Views[i] = newView;
                                updatedInPlace.Add(newView);
                            }
                        }
                    }
                }

                GenericViewDefinitionInfoList list;

                if (0 == updatedInPlace.Count)
                {
                    list = new GenericViewDefinitionInfoList(template, typeEntry.ViewDefinitions);
                }
                else
                {
                    list = new GenericViewDefinitionInfoList(template, typeEntry.ViewDefinitions.Count - updatedInPlace.Count);
                    foreach (var view in typeEntry.ViewDefinitions)
                    {
                        if (!updatedInPlace.Contains(view))
                        {
                            list.Views.Add(view);
                        }
                    }
                }
                if (!existingViews.AddOrReplace(list))
                {
                    LogManager.Trace("Replacing existing view definition list for: {0}", list.TypeName);
                }

                _RaiseViewRegistered(typeEntry);
            } // end _RegisterGenericViewDefinition()
示例#5
0
 public static void RegisterViewDefinition(AltTypeFormatEntry typeEntry)
 {
     _Singleton.RegisterViewDefinition(typeEntry);
 }