/// <summary> /// Adds a dependency to this /// </summary> /// <param name="componentType">Type dependency</param> /// <remarks> /// When an instance of this type is created, any dependencies must be created also /// </remarks> public void AddDependency( ComponentType componentType ) { Arguments.CheckNotNull( componentType, "componentType" ); if ( !m_Dependencies.Contains( componentType ) ) { m_Dependencies.Add( componentType ); } if ( !componentType.m_Dependents.Contains( this ) ) { componentType.m_Dependents.Add( this ); } }
/// <summary> /// Setup constructor /// </summary> /// <param name="view">View to control</param> /// <param name="componentTypeCategories">Categories that component types can fall into</param> /// <param name="types">Composite types available for use</param> /// <param name="composite">Current composite</param> /// <exception cref="ArgumentNullException">Thrown if any argument is null</exception> public ComponentCompositionEditorController( IComponentCompositionEditorView view, ComponentTypeCategory[] componentTypeCategories, ComponentType[] types, IComposite composite ) { Arguments.CheckNotNull( view, "view" ); Arguments.CheckNotNull( types, "types" ); Arguments.CheckNotNull( composite, "composite" ); Arguments.CheckNotNull( componentTypeCategories, "componentTypeCategories" ); view.Categories = componentTypeCategories; view.Types = types; view.CompositeView.Composite = composite; view.AddComponentType += OnAddComponentType; view.RemoveComponent += OnRemoveComponent; composite.ComponentAdded += OnCompositeChanged; composite.ComponentRemoved += OnCompositeChanged; m_Composite = composite; m_View = view; m_Types = types; }
/// <summary> /// Adds a component type as a category item to this category, and any type-compatible sub-categories /// </summary> public void AddComponentType( ComponentType type, string name, string description, Icon icon ) { Arguments.CheckNotNull( type, "type" ); Arguments.CheckNotNullOrEmpty( name, "name" ); Arguments.CheckNotNull( description, "description" ); Arguments.CheckNotNull( icon, "icon" ); if ( m_BaseType.IsAssignableFrom( type.Type ) ) { CategoryItem item = new CategoryItem( name, description, icon ); item.Tag = type; AddItem( item ); } foreach ( Category subCategory in SubCategories ) { ComponentTypeCategory componentSubCategory = subCategory as ComponentTypeCategory; if ( componentSubCategory != null ) { componentSubCategory.AddComponentType( type, name, description, icon ); } } }
/// <summary> /// Adds a component type as a category item to this category, and any type-compatible sub-categories /// </summary> public void AddComponentType( ComponentType type, string name, string description ) { AddComponentType( type, name, description, s_DefaultItemIcon ); }
/// <summary> /// Links a template types to the control /// </summary> private void AddComponentType( ComponentTypeCategory category, ComponentType type ) { if ( category.BaseType.IsAssignableFrom( type.Type ) ) { category.AddComponentType( type, type.Type.Name, "blah" ); } foreach ( ComponentTypeCategory subCategory in category.SubCategories ) { AddComponentType( subCategory, type ); } }
/// <summary> /// Removes the specified type, and all its dependencies, from the current template /// </summary> private void RemoveComponentTypesFromTemplate( ComponentType type ) { CompositeUtils.RemoveAllOfType( m_Composite, type.Type ); foreach ( ComponentType dependent in type.Dependents ) { RemoveComponentTypesFromTemplate( dependent ); } }
private void OnAddComponentType( ComponentType type ) { type.Create( m_Composite ); }
/// <summary> /// Shows a composite object editor as a model dialog /// </summary> public void ShowEditCompositeView( IComposite composite, ComponentTypeCategory[] categories, ComponentType[] componentTypes ) { CompositeEditorForm form = new CompositeEditorForm( ); form.CompositeView.Composite = composite; form.Categories = categories; new ComponentCompositionEditorController( form, categories, componentTypes, composite ); form.ShowDialog( ); }