anx.framework/Visual Studio/MPF11/Dev11/Src/CSharp/DesignPropertyDescriptor.cs
Konstantin Koch 8287c54432 Included the Visual Studio extension and made the necessary changes to make it run.
Replaced the old VS templates with ones that offer more flexiblity.
Started replacing the Content Project for the samples with our custom project type.
Inlcuded a basic not yet working AssimpImporter.
2015-04-08 14:50:03 +02:00

207 lines
5.9 KiB
C#

/* ****************************************************************************
*
* Copyright (c) Microsoft Corporation.
*
* This source code is subject to terms and conditions of the Apache License, Version 2.0. A
* copy of the license can be found in the License.html file at the root of this distribution. If
* you cannot locate the Apache License, Version 2.0, please send an email to
* vspython@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
* by the terms of the Apache License, Version 2.0.
*
* You must not remove this notice, or any other, from this software.
*
* ***************************************************************************/
using System;
using System.Collections;
using System.ComponentModel;
namespace Microsoft.VisualStudio.Project
{
/// <summary>
/// The purpose of DesignPropertyDescriptor is to allow us to customize the
/// display name of the property in the property grid. None of the CLR
/// implementations of PropertyDescriptor allow you to change the DisplayName.
/// </summary>
public class DesignPropertyDescriptor : PropertyDescriptor
{
private string displayName; // Custom display name
private PropertyDescriptor property; // Base property descriptor
private Hashtable editors = new Hashtable(); // Type -> editor instance
private TypeConverter converter;
/// <summary>
/// Delegates to base.
/// </summary>
public override string DisplayName
{
get
{
return this.displayName;
}
}
/// <summary>
/// Delegates to base.
/// </summary>
public override Type ComponentType
{
get
{
return this.property.ComponentType;
}
}
/// <summary>
/// Delegates to base.
/// </summary>
public override bool IsReadOnly
{
get
{
return this.property.IsReadOnly;
}
}
/// <summary>
/// Delegates to base.
/// </summary>
public override Type PropertyType
{
get
{
return this.property.PropertyType;
}
}
/// <summary>
/// Delegates to base.
/// </summary>
public override object GetEditor(Type editorBaseType)
{
object editor = this.editors[editorBaseType];
if (editor == null)
{
for (int i = 0; i < this.Attributes.Count; i++)
{
EditorAttribute attr = Attributes[i] as EditorAttribute;
if (attr == null)
{
continue;
}
Type editorType = Type.GetType(attr.EditorBaseTypeName);
if (editorBaseType == editorType)
{
Type type = GetTypeFromNameProperty(attr.EditorTypeName);
if (type != null)
{
editor = CreateInstance(type);
this.editors[type] = editor; // cache it
break;
}
}
}
}
return editor;
}
/// <summary>
/// Return type converter for property
/// </summary>
public override TypeConverter Converter
{
get
{
if (converter == null)
{
if (converter == null)
{
converter = property.Converter;
}
}
return converter;
}
}
/// <summary>
/// Convert name to a Type object.
/// </summary>
public virtual Type GetTypeFromNameProperty(string typeName)
{
return Type.GetType(typeName);
}
/// <summary>
/// Delegates to base.
/// </summary>
public override bool CanResetValue(object component)
{
bool result = this.property.CanResetValue(component);
return result;
}
/// <summary>
/// Delegates to base.
/// </summary>
public override object GetValue(object component)
{
object value = this.property.GetValue(component);
return value;
}
/// <summary>
/// Delegates to base.
/// </summary>
public override void ResetValue(object component)
{
this.property.ResetValue(component);
}
/// <summary>
/// Delegates to base.
/// </summary>
public override void SetValue(object component, object value)
{
this.property.SetValue(component, value);
}
/// <summary>
/// Delegates to base.
/// </summary>
public override bool ShouldSerializeValue(object component)
{
bool result = this.property.ShouldSerializeValue(component);
return result;
}
/// <summary>
/// Constructor. Copy the base property descriptor and also hold a pointer
/// to it for calling its overridden abstract methods.
/// </summary>
public DesignPropertyDescriptor(PropertyDescriptor prop)
: base(prop)
{
VsUtilities.ArgumentNotNull("prop", prop);
this.property = prop;
DisplayNameAttribute attr = prop.Attributes[typeof(DisplayNameAttribute)] as DisplayNameAttribute;
if (attr != null)
{
this.displayName = attr.DisplayName;
}
else
{
this.displayName = prop.Name;
}
}
}
}