Browse Source

Use MSBuild to determine the correct default value of "Copy Local".

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3041 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
6cb022610d
  1. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  2. 25
      src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/LocalizedObject.cs
  3. 14
      src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs
  4. 2
      src/Main/Base/Project/Src/Project/Items/ComReferenceProjectItem.cs
  5. 2
      src/Main/Base/Project/Src/Project/Items/ProjectReferenceProjectItem.cs
  6. 80
      src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs
  7. 13
      src/Main/Base/Project/Src/Project/MSBuildInternals.cs

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
<Reference Include="System.Windows.Forms" />
<Reference Include="System.XML" />
<Reference Include="Microsoft.Build.Framework">
<Private>True</Private>
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Build.Engine" />
</ItemGroup>

25
src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/LocalizedObject.cs

@ -13,10 +13,10 @@ using System.ComponentModel; @@ -13,10 +13,10 @@ using System.ComponentModel;
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
/// GlobalizedObject implements ICustomTypeDescriptor to enable
/// GlobalizedObject implements ICustomTypeDescriptor to enable
/// required functionality to describe a type (class).<br></br>
/// The main task of this class is to instantiate our own property descriptor
/// of type GlobalizedPropertyDescriptor.
/// The main task of this class is to instantiate our own property descriptor
/// of type GlobalizedPropertyDescriptor.
/// </summary>
public class LocalizedObject : ICustomTypeDescriptor
{
@ -42,22 +42,22 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -42,22 +42,22 @@ namespace ICSharpCode.SharpDevelop.Gui
return TypeDescriptor.GetConverter(this, true);
}
EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
{
return TypeDescriptor.GetDefaultEvent(this, true);
}
PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
{
return TypeDescriptor.GetDefaultProperty(this, true);
}
object ICustomTypeDescriptor.GetEditor(Type editorBaseType)
object ICustomTypeDescriptor.GetEditor(Type editorBaseType)
{
return TypeDescriptor.GetEditor(this, editorBaseType, true);
}
EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes)
EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes)
{
return TypeDescriptor.GetEvents(this, attributes, true);
}
@ -67,6 +67,15 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -67,6 +67,15 @@ namespace ICSharpCode.SharpDevelop.Gui
return TypeDescriptor.GetEvents(this, true);
}
/// <summary>
/// Causes the list of property descriptors to be recreated.
/// </summary>
protected void ReFilterProperties()
{
globalizedProps = null;
WorkbenchSingleton.SafeThreadAsyncCall(delegate { PropertyPad.RefreshItem(this); });
}
protected virtual void FilterProperties(PropertyDescriptorCollection globalizedProps)
{
}
@ -110,7 +119,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -110,7 +119,7 @@ namespace ICSharpCode.SharpDevelop.Gui
return globalizedProps;
}
object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd)
object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd)
{
return this;
}

14
src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs

@ -11,6 +11,7 @@ using System.ComponentModel; @@ -11,6 +11,7 @@ using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
@ -326,6 +327,19 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -326,6 +327,19 @@ namespace ICSharpCode.SharpDevelop.Gui
inUpdate = false;
}
/// <summary>
/// Refreshes the property pad if the specified item is active.
/// </summary>
public static void RefreshItem(object obj)
{
WorkbenchSingleton.AssertMainThread();
if (instance != null && instance.grid.SelectedObjects.Contains(obj)) {
instance.inUpdate = true;
instance.grid.SelectedObjects = instance.grid.SelectedObjects;
instance.inUpdate = false;
}
}
void RemoveHost(IDesignerHost host)
{
this.host = null;

2
src/Main/Base/Project/Src/Project/Items/ComReferenceProjectItem.cs

@ -25,11 +25,13 @@ namespace ICSharpCode.SharpDevelop.Project @@ -25,11 +25,13 @@ namespace ICSharpCode.SharpDevelop.Project
this.Lcid = library.Lcid;
this.WrapperTool = library.WrapperTool;
this.Isolated = library.Isolated;
this.DefaultCopyLocalValue = true;
}
internal ComReferenceProjectItem(IProject project, Microsoft.Build.BuildEngine.BuildItem buildItem)
: base(project, buildItem)
{
this.DefaultCopyLocalValue = true;
}
[ReadOnly(true)]

2
src/Main/Base/Project/Src/Project/Items/ProjectReferenceProjectItem.cs

@ -74,6 +74,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -74,6 +74,7 @@ namespace ICSharpCode.SharpDevelop.Project
internal ProjectReferenceProjectItem(IProject project, Microsoft.Build.BuildEngine.BuildItem buildItem)
: base(project, buildItem)
{
this.DefaultCopyLocalValue = true;
}
public ProjectReferenceProjectItem(IProject project, IProject referenceTo)
@ -83,6 +84,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -83,6 +84,7 @@ namespace ICSharpCode.SharpDevelop.Project
ProjectGuid = referenceTo.IdGuid;
ProjectName = referenceTo.Name;
this.referencedProject = referenceTo;
this.DefaultCopyLocalValue = true;
}
}
}

80
src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs

@ -76,13 +76,24 @@ namespace ICSharpCode.SharpDevelop.Project @@ -76,13 +76,24 @@ namespace ICSharpCode.SharpDevelop.Project
Description = "${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.LocalCopy.Description}")]
public bool CopyLocal {
get {
return GetEvaluatedMetadata(CopyLocalMetadataName, !IsGacReference);
return GetEvaluatedMetadata(CopyLocalMetadataName, defaultCopyLocalValue ?? true);
}
set {
SetEvaluatedMetadata(CopyLocalMetadataName, value);
}
}
bool? defaultCopyLocalValue;
[Browsable(false)]
public bool? DefaultCopyLocalValue {
get { return defaultCopyLocalValue; }
set {
defaultCopyLocalValue = value;
ReFilterProperties();
}
}
DomAssemblyName assemblyName;
/// <summary>
@ -189,19 +200,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -189,19 +200,16 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public bool IsGacReference {
get {
return !Path.IsPathRooted(this.FileName);
}
}
protected override void FilterProperties(PropertyDescriptorCollection globalizedProps)
{
base.FilterProperties(globalizedProps);
PropertyDescriptor copyLocalPD = globalizedProps["CopyLocal"];
globalizedProps.Remove(copyLocalPD);
globalizedProps.Add(new ReplaceDefaultValueDescriptor(copyLocalPD, !IsGacReference));
if (defaultCopyLocalValue != null) {
globalizedProps.Add(new ReplaceDefaultValueDescriptor(copyLocalPD, defaultCopyLocalValue.Value));
} else {
globalizedProps.Add(new DummyValueDescriptor(copyLocalPD));
}
if (string.IsNullOrEmpty(HintPath))
globalizedProps.Remove(globalizedProps["HintPath"]);
@ -264,5 +272,59 @@ namespace ICSharpCode.SharpDevelop.Project @@ -264,5 +272,59 @@ namespace ICSharpCode.SharpDevelop.Project
get { return baseDescriptor.PropertyType; }
}
}
sealed class DummyValueDescriptor : PropertyDescriptor
{
PropertyDescriptor baseDescriptor;
public override bool ShouldSerializeValue(object component)
{
return false;
}
public override void ResetValue(object component)
{
}
public DummyValueDescriptor(PropertyDescriptor baseDescriptor)
: base(baseDescriptor)
{
this.baseDescriptor = baseDescriptor;
}
public override string DisplayName {
get { return baseDescriptor.DisplayName; }
}
public override string Description {
get { return baseDescriptor.Description; }
}
public override Type ComponentType {
get { return baseDescriptor.ComponentType; }
}
public override bool IsReadOnly {
get { return true; }
}
public override bool CanResetValue(object component)
{
return false;
}
public override object GetValue(object component)
{
return null;
}
public override void SetValue(object component, object value)
{
}
public override Type PropertyType {
get { return baseDescriptor.PropertyType; }
}
}
}
}

13
src/Main/Base/Project/Src/Project/MSBuildInternals.cs

@ -337,6 +337,18 @@ namespace ICSharpCode.SharpDevelop.Project @@ -337,6 +337,18 @@ namespace ICSharpCode.SharpDevelop.Project
if (referenceReplacements == null) {
references = baseProject.GetItemsOfType(ItemType.Reference).OfType<ReferenceProjectItem>();
// remove the "Private" meta data
foreach (MSBuild.BuildItemGroup itemGroup in tempProject.ItemGroups) {
// skip item groups from imported projects
if (itemGroup.IsImported)
continue;
foreach (MSBuild.BuildItem item in itemGroup) {
if (item.Name == ItemType.Reference.ItemName) {
item.RemoveMetadata("Private");
}
}
}
} else {
references = referenceReplacements;
@ -385,6 +397,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -385,6 +397,7 @@ namespace ICSharpCode.SharpDevelop.Project
reference.FileName = fullPath;
reference.Redist = item.GetEvaluatedMetadata("Redist");
//LoggingService.Debug("Got information about " + originalInclude + "; fullpath=" + fullPath);
reference.DefaultCopyLocalValue = bool.Parse(item.GetEvaluatedMetadata("CopyLocal"));
} else {
LoggingService.Warn("Unknown item " + originalInclude);
}

Loading…
Cancel
Save