File: System.Activities.Presentation\System\Activities\Presentation\Base\Core\Internal\PropertyEditing\Views\IPropertyViewManager.cs
Project: ndp\cdf\src\NetFx40\Tools\System.Activities.Presentation.csproj (System.Activities.Presentation)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
namespace System.Activities.Presentation.Internal.PropertyEditing.Views 
{
    using System;
    using System.Collections.Generic;
 
    using System.Activities.Presentation.Model;
    using System.Activities.Presentation.PropertyEditing;
 
    using System.Activities.Presentation.Internal.PropertyEditing.Model;
    using System.Activities.Presentation.Internal.PropertyEditing.Selection;
 
    // <summary>
    // Interface we use to wrap logic that determines how a set of properties
    // will be categorized into categories.
    // </summary>
    internal interface IPropertyViewManager 
    {
 
        // <summary>
        // Gets a flag indicating whether the PropertyViewManager implementation
        // supports category headers.
        // </summary>
        bool ShowCategoryHeaders 
        { get; }
 
        // <summary>
        // Add a property into the correct category within the specified CategoryList.
        // </summary>
        // <param name="propertySet">Specified property (passed in as a set for multi-select scenarios)</param>
        // <param name="propertyName">Name of the current property (perf optimization)</param>
        // <param name="categoryList">CategoryList instance to populate</param>
        // <returns>Wrapped ModelPropertyEntry for the specified propertySet</returns>
        ModelPropertyEntry AddProperty(IEnumerable<ModelProperty> propertySet, string propertyName, CategoryList categoryList);
 
        // <summary>
        // Scans the list of categories in the specified CategoryList and returns a set of
        // CategoryEditor types that should be present in the list based on the properties
        // in it.
        // </summary>
        // <param name="ownerType">Type of the currently displayed item</param>
        // <param name="categoryList">CategoryList to examine</param>
        // <returns>Set of expected CategoryEditor types</returns>
        Dictionary<Type, object> GetCategoryEditors(Type ownerType, CategoryList categoryList);
 
        // <summary>
        // Figures out what property / category editor / category / ... we should select
        // if the currently selected item does not define a default property.
        // </summary>
        // <param name="categoryList">CategoryList for reference</param>
        // <returns>Thing to select (can be null) if no default property has been
        // specified and we are trying to select something by default.</returns>
        SelectionPath GetDefaultSelectionPath(CategoryList categoryList);
 
        // Blend's CollectionEditor compatibility APIs
 
        //
        // Since Blend's API uses PropertyEntries instead of ModelProperties, we need
        // to provide methods that consume those instead.  Ideally, with the two code
        // bases merged, we wouldn't need these at all.
        //
 
        // <summary>
        // Gets the category name of the specified property
        // </summary>
        // <param name="property">Property to examine</param>
        // <returns>Category name the property belongs to.</returns>
        string GetCategoryName(PropertyEntry property);
 
        // <summary>
        // Adds the specified property into the specified category.
        // </summary>
        // <param name="property">Property to add</param>
        // <param name="category">Category to populate</param>
        void AddProperty(PropertyEntry property, ModelCategoryEntry category);
 
    }
}