// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ICSharpCode.SharpDevelop.Gui;
using SD = ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
///
/// A file can have child project items if it has files that depend upon it.
/// For example, winform designer files (MainForm.Designer.cs)
///
public class FileProjectItems : ProjectItems
{
ProjectItem projectItem;
IPackageManagementFileService fileService;
public FileProjectItems(ProjectItem projectItem)
: this(projectItem, new PackageManagementFileService())
{
}
public FileProjectItems(ProjectItem projectItem, IPackageManagementFileService fileService)
: base(projectItem.ContainingProject, projectItem, fileService)
{
this.projectItem = projectItem;
this.fileService = fileService;
}
protected override IEnumerable GetProjectItems()
{
return GetChildDependentProjectItems().ToList();
}
IEnumerable GetChildDependentProjectItems()
{
foreach (SD.FileProjectItem fileProjectItem in GetFileProjectItems()) {
if (fileProjectItem.IsDependentUpon(projectItem.MSBuildProjectItem)) {
yield return new ProjectItem(Project, fileProjectItem);
}
}
}
IEnumerable GetFileProjectItems()
{
return Project
.MSBuildProject
.Items
.Where(item => item is SD.FileProjectItem)
.Select(item => (SD.FileProjectItem)item);
}
protected override ProjectItem AddFileProjectItemToProject(string fileName)
{
return AddFileProjectItemWithDependent(fileName);
}
ProjectItem AddFileProjectItemWithDependent(string fileName)
{
return Project.AddFileProjectItemWithDependentUsingFullPath(fileName, projectItem.Name);
}
}
}