Browse Source

Move project service events to IProjectService interface.

pull/32/merge
Daniel Grunwald 13 years ago
parent
commit
c2c89c7014
  1. 2
      src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ApplicationOptions.cs
  2. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProjectService.cs
  3. 2
      src/AddIns/Misc/PackageManagement/Test/Src/InstallProjectTemplatePackagesCommandTests.cs
  4. 5
      src/Main/Base/Project/Dom/IModelCollection.cs
  5. 5
      src/Main/Base/Project/Dom/ITypeDefinitionModelCollection.cs
  6. 43
      src/Main/Base/Project/Dom/ImmutableModelCollection.cs
  7. 7
      src/Main/Base/Project/Dom/ModelCollectionLinq.cs
  8. 22
      src/Main/Base/Project/Dom/ReadOnlyModelCollection.cs
  9. 5
      src/Main/Base/Project/Dom/SimpleModelCollection.cs
  10. 12
      src/Main/Base/Project/Dom/SynchronizedModelCollection.cs
  11. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  12. 2
      src/Main/Base/Project/Parser/ProjectContentContainer.cs
  13. 19
      src/Main/Base/Project/Project/IProjectService.cs
  14. 6
      src/Main/Base/Project/Project/ISolution.cs
  15. 6
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs
  16. 2
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
  17. 12
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs
  18. 1
      src/Main/Base/Project/Src/Internal/Templates/Project/SolutionDescriptor.cs
  19. 2
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  20. 75
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  21. 5
      src/Main/SharpDevelop/Dom/NestedTypeDefinitionModelCollection.cs
  22. 9
      src/Main/SharpDevelop/Dom/TopLevelTypeDefinitionModelCollection.cs
  23. 5
      src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs
  24. 5
      src/Main/SharpDevelop/Project/Configuration/SolutionConfigurationOrPlatformNameCollection.cs
  25. 35
      src/Main/SharpDevelop/Project/ProjectService.cs
  26. 8
      src/Main/SharpDevelop/Project/Solution.cs

2
src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ApplicationOptions.cs

@ -329,7 +329,7 @@ namespace ICSharpCode.CppBinding.Project @@ -329,7 +329,7 @@ namespace ICSharpCode.CppBinding.Project
string fileName = Path.Combine(project.Directory, rcFileName);
FileProjectItem rcFileItem = new FileProjectItem(project, project.GetDefaultItemType(fileName));
rcFileItem.Include = FileUtility.GetRelativePath(project.Directory, fileName);
((IProjectItemListProvider)project).AddProjectItem(rcFileItem);
ProjectService.AddProjectItem(project, rcFileItem);
return fileName;
}

2
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProjectService.cs

@ -45,7 +45,7 @@ namespace ICSharpCode.PackageManagement.Design @@ -45,7 +45,7 @@ namespace ICSharpCode.PackageManagement.Design
public void AddProject(IProject project)
{
ProjectCollections.Add(new ReadOnlyModelCollection<IProject>(new[] { project }));
ProjectCollections.Add(new ImmutableModelCollection<IProject>(new[] { project }));
}
public void AddProjectItem(IProject project, ProjectItem item)

2
src/AddIns/Misc/PackageManagement/Test/Src/InstallProjectTemplatePackagesCommandTests.cs

@ -41,7 +41,7 @@ namespace PackageManagement.Tests @@ -41,7 +41,7 @@ namespace PackageManagement.Tests
var createInfo = new ProjectCreateOptions();
createInfo.CreatedProjects.AddRange(projects);
command.FakeProjectService.ProjectCollections.Add(new ReadOnlyModelCollection<IProject>(projects));
command.FakeProjectService.ProjectCollections.Add(new ImmutableModelCollection<IProject>(projects));
RunCommandWithProjectCreateInfoAsOwner(createInfo);
}

5
src/Main/Base/Project/Dom/IModelCollection.cs

@ -29,6 +29,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -29,6 +29,11 @@ namespace ICSharpCode.SharpDevelop.Dom
public interface IModelCollection<out T> : IReadOnlyCollection<T>
{
event ModelCollectionChangedEventHandler<T> CollectionChanged;
/// <summary>
/// Creates an immutable snapshot of the collection.
/// </summary>
IReadOnlyCollection<T> CreateSnapshot();
}
/// <summary>

5
src/Main/Base/Project/Dom/ITypeDefinitionModelCollection.cs

@ -43,6 +43,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -43,6 +43,11 @@ namespace ICSharpCode.SharpDevelop.Dom
remove { }
}
IReadOnlyCollection<ITypeDefinitionModel> IModelCollection<ITypeDefinitionModel>.CreateSnapshot()
{
return this; // already immutable
}
ITypeDefinitionModel ITypeDefinitionModelCollection.this[FullTypeName name] {
get { return null; }
}

43
src/Main/Base/Project/Dom/ImmutableModelCollection.cs

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
// 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.Collections.ObjectModel;
using System.Linq;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// An immutable model collection.
/// </summary>
public class ImmutableModelCollection<T> : ReadOnlyCollection<T>, IModelCollection<T>, IMutableModelCollection<T>
{
public ImmutableModelCollection(IEnumerable<T> items)
: base(items.ToList())
{
}
event ModelCollectionChangedEventHandler<T> IModelCollection<T>.CollectionChanged { add {} remove {} }
IReadOnlyCollection<T> IModelCollection<T>.CreateSnapshot()
{
return this;
}
void IMutableModelCollection<T>.AddRange(IEnumerable<T> items)
{
throw new NotSupportedException();
}
int IMutableModelCollection<T>.RemoveAll(System.Predicate<T> predicate)
{
throw new NotSupportedException();
}
IDisposable IMutableModelCollection<T>.BatchUpdate()
{
return null;
}
}
}

7
src/Main/Base/Project/Dom/ModelCollectionLinq.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop.Dom
public static IModelCollection<TResult> Select<TSource, TResult>(this IModelCollection<TSource> source, Func<TSource, TResult> selector)
{
// HACK: emulating Select with SelectMany is much less efficient than a direct implementation could be
return SelectMany(source, item => new ReadOnlyModelCollection<TSource>(new[] { item }), (a, b) => selector(b));
return SelectMany(source, item => new ImmutableModelCollection<TSource>(new[] { item }), (a, b) => selector(b));
}
#endregion
@ -170,6 +170,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -170,6 +170,11 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
IReadOnlyCollection<TResult> IModelCollection<TResult>.CreateSnapshot()
{
return this.ToList();
}
public IEnumerator<TResult> GetEnumerator()
{
return source.AsEnumerable().SelectMany(collectionSelector, resultSelector).GetEnumerator();

22
src/Main/Base/Project/Dom/ReadOnlyModelCollection.cs

@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
// 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.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// A model collection implementation that is based on a ReadOnlyCollection.
/// </summary>
public class ReadOnlyModelCollection<T> : ReadOnlyCollection<T>, IModelCollection<T>
{
public ReadOnlyModelCollection(IEnumerable<T> items)
: base(items.ToList())
{
}
event ModelCollectionChangedEventHandler<T> IModelCollection<T>.CollectionChanged { add {} remove {} }
}
}

5
src/Main/Base/Project/Dom/SimpleModelCollection.cs

@ -85,6 +85,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -85,6 +85,11 @@ namespace ICSharpCode.SharpDevelop.Dom
#region Read-Only list access
public IReadOnlyCollection<T> CreateSnapshot()
{
return list.ToArray();
}
public int Count {
get { return list.Count; }
}

12
src/Main/Base/Project/Dom/SynchronizedModelCollection.cs

@ -89,7 +89,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -89,7 +89,13 @@ namespace ICSharpCode.SharpDevelop.Dom
#endregion
#region ICollection implementation
public IReadOnlyCollection<T> CreateSnapshot()
{
lock (syncRoot) {
return underlyingCollection.CreateSnapshot();
}
}
public bool Contains(T item)
{
lock (syncRoot) {
@ -124,9 +130,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -124,9 +130,7 @@ namespace ICSharpCode.SharpDevelop.Dom
{
IEnumerable<T> snapshot;
lock (syncRoot) {
T[] array = new T[underlyingCollection.Count];
underlyingCollection.CopyTo(array, 0);
snapshot = array;
snapshot = underlyingCollection.CreateSnapshot();
}
return snapshot.GetEnumerator();
}

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

@ -93,7 +93,7 @@ @@ -93,7 +93,7 @@
<Compile Include="Dom\IModelCollection.cs" />
<Compile Include="Dom\ITreeNodeFactory.cs" />
<Compile Include="Dom\ModelCollectionLinq.cs" />
<Compile Include="Dom\ReadOnlyModelCollection.cs" />
<Compile Include="Dom\ImmutableModelCollection.cs" />
<Compile Include="Dom\SimpleModelCollection.cs" />
<Compile Include="Dom\SynchronizedModelCollection.cs" />
<Compile Include="Editor\AvalonEditTextEditorAdapter.cs" />

2
src/Main/Base/Project/Parser/ProjectContentContainer.cs

@ -286,7 +286,7 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -286,7 +286,7 @@ namespace ICSharpCode.SharpDevelop.Parser
}
}
double scalingFactor = 1.0 / (project.Items.Count + LoadingReferencesWorkAmount);
double scalingFactor = 1.0 / (projectItems.Count + LoadingReferencesWorkAmount);
using (IProgressMonitor initReferencesProgressMonitor = progressMonitor.CreateSubTask(LoadingReferencesWorkAmount * scalingFactor),
parseProgressMonitor = progressMonitor.CreateSubTask(projectItems.Count * scalingFactor))
{

19
src/Main/Base/Project/Project/IProjectService.cs

@ -129,5 +129,24 @@ namespace ICSharpCode.SharpDevelop.Project @@ -129,5 +129,24 @@ namespace ICSharpCode.SharpDevelop.Project
/// This method is thread-safe.
/// </remarks>
ISolution CreateEmptySolutionFile(FileName fileName);
/// <summary>
/// Is raised when a new project is created.
/// </summary>
event EventHandler<ProjectEventArgs> ProjectCreated;
event EventHandler<SolutionEventArgs> SolutionCreated;
event EventHandler<ProjectItemEventArgs> ProjectItemAdded;
event EventHandler<ProjectItemEventArgs> ProjectItemRemoved;
}
public interface IProjectServiceRaiseEvents
{
void RaiseProjectCreated(ProjectEventArgs e);
void RaiseSolutionCreated(SolutionEventArgs e);
void RaiseProjectItemAdded(ProjectItemEventArgs e);
void RaiseProjectItemRemoved(ProjectItemEventArgs e);
}
}

6
src/Main/Base/Project/Project/ISolution.cs

@ -78,6 +78,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -78,6 +78,12 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary>
Properties Preferences { get; }
/// <summary>
/// This event is raised by <see cref="SavePreferences"/> immediately before the preferences are saved to disk.
/// It can be used to set additional data on the preferences at the last moment.
/// </summary>
event EventHandler PreferencesSaving;
/// <summary>
/// Saves the preferences for this solution; and also for any projects within this solution.
/// </summary>

6
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs

@ -78,7 +78,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -78,7 +78,6 @@ namespace ICSharpCode.SharpDevelop.Project
instance = this;
ProjectService.SolutionLoaded += ProjectServiceSolutionLoaded;
ProjectService.SolutionClosed += ProjectServiceSolutionClosed;
ProjectService.SolutionPreferencesSaving += ProjectServiceSolutionPreferencesSaving;
SD.Workbench.ActiveContentChanged += ActiveContentChanged;
if (ProjectService.OpenSolution != null) {
@ -92,9 +91,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -92,9 +91,9 @@ namespace ICSharpCode.SharpDevelop.Project
ProjectBrowserControl.TreeView.StartLabelEdit(node);
}
void ProjectServiceSolutionPreferencesSaving(object sender, SolutionEventArgs e)
void SolutionPreferencesSaving(object sender, EventArgs e)
{
projectBrowserPanel.StoreViewState(e.Solution.Preferences);
projectBrowserPanel.StoreViewState(((ISolution)sender).Preferences);
}
void ProjectServiceSolutionLoaded(object sender, SolutionEventArgs e)
@ -117,6 +116,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -117,6 +116,7 @@ namespace ICSharpCode.SharpDevelop.Project
this.solutionToLoadWhenHandleIsCreated = null;
projectBrowserPanel.ViewSolution(solution);
projectBrowserPanel.ReadViewState(solution.Preferences);
solution.PreferencesSaving += SolutionPreferencesSaving;
}
}

2
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs

@ -506,7 +506,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -506,7 +506,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
project.Save();
ProjectService.OnProjectCreated(new ProjectEventArgs(project));
SD.GetRequiredService<IProjectServiceRaiseEvents>().RaiseProjectCreated(new ProjectEventArgs(project));
projectCreateOptions.CreatedProjects.Add(project);
success = true;
return project;

12
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs

@ -318,22 +318,24 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -318,22 +318,24 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
public ISolution CreateSolution(ProjectCreateOptions projectCreateInformation)
{
LoggingService.Info("Creating solution from template '" + this.Category + "/" + this.Subcategory + "/" + this.Name + "'");
ISolution solution;
if (solutionDescriptor != null) {
return solutionDescriptor.CreateSolution(projectCreateInformation, this.languagename);
solution = solutionDescriptor.CreateSolution(projectCreateInformation, this.languagename);
} else {
FileName fileName = FileName.Create(Path.Combine(projectCreateInformation.SolutionPath, projectCreateInformation.SolutionName + ".sln"));
ISolution solution = SD.ProjectService.CreateEmptySolutionFile(fileName);
solution = SD.ProjectService.CreateEmptySolutionFile(fileName);
IProject project = projectDescriptor.CreateProject(solution, projectCreateInformation, this.languagename);
if (project != null) {
solution.Items.Add(project);
solution.Save();
ProjectService.OnSolutionCreated(new SolutionEventArgs(solution));
return solution;
} else {
solution.Dispose();
return null;
solution = null;
}
}
if (solution != null)
SD.GetRequiredService<IProjectServiceRaiseEvents>().RaiseSolutionCreated(new SolutionEventArgs(solution));
return solution;
}
public IProject CreateProject(ISolution solution, ProjectCreateOptions projectCreateInformation)

1
src/Main/Base/Project/Src/Internal/Templates/Project/SolutionDescriptor.cs

@ -110,7 +110,6 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -110,7 +110,6 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
} else {
newSolution.Save();
}
ProjectService.OnSolutionCreated(new SolutionEventArgs(newSolution));
return newSolution;
}

2
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -207,7 +207,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -207,7 +207,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
sealed class ReadOnlyConfigurationOrPlatformNameCollection : ReadOnlyModelCollection<string>, IConfigurationOrPlatformNameCollection
sealed class ReadOnlyConfigurationOrPlatformNameCollection : ImmutableModelCollection<string>, IConfigurationOrPlatformNameCollection
{
public ReadOnlyConfigurationOrPlatformNameCollection(IEnumerable<string> items)
: base(items)

75
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -63,7 +63,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -63,7 +63,9 @@ namespace ICSharpCode.SharpDevelop.Project
IProjectItemListProvider provider = project as IProjectItemListProvider;
if (provider != null) {
provider.AddProjectItem(item);
OnProjectItemAdded(new ProjectItemEventArgs(project, item));
IProjectServiceRaiseEvents re = SD.GetService<IProjectServiceRaiseEvents>();
if (re != null)
re.RaiseProjectItemAdded(new ProjectItemEventArgs(project, item));
}
}
@ -79,7 +81,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -79,7 +81,9 @@ namespace ICSharpCode.SharpDevelop.Project
IProjectItemListProvider provider = project as IProjectItemListProvider;
if (provider != null) {
if (provider.RemoveProjectItem(item)) {
OnProjectItemRemoved(new ProjectItemEventArgs(project, item));
IProjectServiceRaiseEvents re = SD.GetService<IProjectServiceRaiseEvents>();
if (re != null)
re.RaiseProjectItemRemoved(new ProjectItemEventArgs(project, item));
}
}
}
@ -101,6 +105,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -101,6 +105,9 @@ namespace ICSharpCode.SharpDevelop.Project
//FileUtility.ObservedLoad(LoadProjectInternal, fileName);
}
/// <summary>
/// Saves the current solution and all of its projects.
/// </summary>
public static void SaveSolution()
{
var openSolution = SD.ProjectService.CurrentSolution;
@ -148,76 +155,58 @@ namespace ICSharpCode.SharpDevelop.Project @@ -148,76 +155,58 @@ namespace ICSharpCode.SharpDevelop.Project
return b.ToString();
}
[Obsolete]
[Obsolete("Use SD.BuildService.IsBuilding instead")]
public static bool IsBuilding {
get {
return SD.BuildService.IsBuilding;
}
}
internal static void OnProjectItemAdded(ProjectItemEventArgs e)
{
if (ProjectItemAdded != null) {
ProjectItemAdded(null, e);
}
}
internal static void OnProjectItemRemoved(ProjectItemEventArgs e)
{
if (ProjectItemRemoved != null) {
ProjectItemRemoved(null, e);
}
}
internal static void OnProjectCreated(ProjectEventArgs e)
{
if (ProjectCreated != null) {
ProjectCreated(null, e);
}
}
internal static void OnSolutionCreated(SolutionEventArgs e)
{
if (SolutionCreated != null) {
SolutionCreated(null, e);
}
}
/// <summary>
/// Is raised when a new project is created.
/// </summary>
public static event EventHandler<ProjectEventArgs> ProjectCreated;
public static event EventHandler<SolutionEventArgs> SolutionCreated;
[Obsolete("Use SD.ProjectService.ProjectCreated instead")]
public static event EventHandler<ProjectEventArgs> ProjectCreated {
add { SD.ProjectService.ProjectCreated += value; }
remove { SD.ProjectService.ProjectCreated -= value; }
}
[Obsolete("Use SD.ProjectService.SolutionCreated instead")]
public static event EventHandler<SolutionEventArgs> SolutionCreated {
add { SD.ProjectService.SolutionCreated += value; }
remove { SD.ProjectService.SolutionCreated -= value; }
}
[Obsolete("Use SD.BuildService.BuildStarted instead")]
public static event EventHandler<BuildEventArgs> BuildStarted {
add { SD.BuildService.BuildStarted += value; }
remove { SD.BuildService.BuildStarted -= value; }
}
[Obsolete("Use SD.BuildService.BuildFinished instead")]
public static event EventHandler<BuildEventArgs> BuildFinished {
add { SD.BuildService.BuildFinished += value; }
remove { SD.BuildService.BuildFinished -= value; }
}
[Obsolete("Use SD.ProjectService.SolutionOpened instead")]
public static event EventHandler<SolutionEventArgs> SolutionLoaded {
add { SD.ProjectService.SolutionOpened += value; }
remove { SD.ProjectService.SolutionOpened -= value; }
}
[Obsolete("Use SD.ProjectService.SolutionClosed instead")]
public static event EventHandler<SolutionEventArgs> SolutionClosed {
add { SD.ProjectService.SolutionClosed += value; }
remove { SD.ProjectService.SolutionClosed -= value; }
}
[Obsolete("Use SD.ProjectService.SolutionClosing instead")]
public static event EventHandler<SolutionClosingEventArgs> SolutionClosing {
add { SD.ProjectService.SolutionClosing += value; }
remove { SD.ProjectService.SolutionClosing -= value; }
}
/// <summary>
/// Raised before the solution preferences are being saved. Allows you to save
/// your additional properties in the solution preferences.
/// </summary>
public static event EventHandler<SolutionEventArgs> SolutionPreferencesSaving;
static EventAdapter<IProjectService, PropertyChangedEventHandler<IProject>, EventHandler<ProjectEventArgs>> currentProjectChangedAdapter =
new EventAdapter<IProjectService, PropertyChangedEventHandler<IProject>, EventHandler<ProjectEventArgs>>(
SD.GetService<IProjectService>(), (s, v) => s.CurrentProjectChanged += v, (s, v) => s.CurrentProjectChanged -= v,
@ -229,7 +218,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -229,7 +218,15 @@ namespace ICSharpCode.SharpDevelop.Project
remove { currentProjectChangedAdapter.Remove(value); }
}
public static event EventHandler<ProjectItemEventArgs> ProjectItemAdded;
public static event EventHandler<ProjectItemEventArgs> ProjectItemRemoved;
[Obsolete("Use SD.ProjectService.ProjectItemAdded instead")]
public static event EventHandler<ProjectItemEventArgs> ProjectItemAdded {
add { SD.ProjectService.ProjectItemAdded += value; }
remove { SD.ProjectService.ProjectItemAdded -= value; }
}
[Obsolete("Use SD.ProjectService.ProjectItemRemoved instead")]
public static event EventHandler<ProjectItemEventArgs> ProjectItemRemoved {
add { SD.ProjectService.ProjectItemRemoved += value; }
remove { SD.ProjectService.ProjectItemRemoved -= value; }
}
}
}

5
src/Main/SharpDevelop/Dom/NestedTypeDefinitionModelCollection.cs

@ -21,6 +21,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -21,6 +21,11 @@ namespace ICSharpCode.SharpDevelop.Dom
public event ModelCollectionChangedEventHandler<ITypeDefinitionModel> CollectionChanged;
public IReadOnlyCollection<ITypeDefinitionModel> CreateSnapshot()
{
return list.ToArray();
}
public IEnumerator<ITypeDefinitionModel> GetEnumerator()
{
return list.GetEnumerator();

9
src/Main/SharpDevelop/Dom/TopLevelTypeDefinitionModelCollection.cs

@ -5,6 +5,7 @@ using System; @@ -5,6 +5,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem;
@ -17,7 +18,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -17,7 +18,6 @@ namespace ICSharpCode.SharpDevelop.Dom
{
readonly IEntityModelContext context;
Dictionary<TopLevelTypeName, TypeDefinitionModel> dict = new Dictionary<TopLevelTypeName, TypeDefinitionModel>();
public event ModelCollectionChangedEventHandler<ITypeDefinitionModel> CollectionChanged;
public TopLevelTypeDefinitionModelCollection(IEntityModelContext context)
{
@ -26,6 +26,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -26,6 +26,13 @@ namespace ICSharpCode.SharpDevelop.Dom
this.context = context;
}
public event ModelCollectionChangedEventHandler<ITypeDefinitionModel> CollectionChanged;
public IReadOnlyCollection<ITypeDefinitionModel> CreateSnapshot()
{
return dict.Values.ToArray();
}
public int Count {
get { return dict.Count; }
}

5
src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs

@ -183,6 +183,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -183,6 +183,11 @@ namespace ICSharpCode.SharpDevelop.Dom
get { return GetCount(lists.Count); }
}
public IReadOnlyCollection<MemberModel> CreateSnapshot()
{
return this.ToArray();
}
public IEnumerator<MemberModel> GetEnumerator()
{
return lists.SelectMany(i => i).GetEnumerator();

5
src/Main/SharpDevelop/Project/Configuration/SolutionConfigurationOrPlatformNameCollection.cs

@ -45,6 +45,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -45,6 +45,11 @@ namespace ICSharpCode.SharpDevelop.Project
#region IReadOnlyCollection implementation
public IReadOnlyCollection<string> CreateSnapshot()
{
return listSnapshot;
}
public int Count {
get {
return listSnapshot.Count;

35
src/Main/SharpDevelop/Project/ProjectService.cs

@ -13,10 +13,13 @@ using ICSharpCode.SharpDevelop.Workbench; @@ -13,10 +13,13 @@ using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.SharpDevelop.Project
{
sealed class SDProjectService : IProjectService
sealed class SDProjectService : IProjectService, IProjectServiceRaiseEvents
{
public SDProjectService()
{
allSolutions = new SimpleModelCollection<ISolution>();
allProjects = allSolutions.SelectMany(s => s.Projects);
SD.GetFutureService<IWorkbench>().ContinueWith(t => t.Result.ActiveViewContentChanged += ActiveViewContentChanged);
var applicationStateInfoService = SD.GetService<ApplicationStateInfoService>();
@ -25,8 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -25,8 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project
applicationStateInfoService.RegisterStateGetter("ProjectService.CurrentProject", delegate { return CurrentProject; });
}
allSolutions = new SimpleModelCollection<ISolution>();
allProjects = allSolutions.SelectMany(s => s.Projects);
SD.Services.AddService(typeof(IProjectServiceRaiseEvents), this);
}
#region CurrentSolution property + AllProjects collection
@ -333,5 +335,32 @@ namespace ICSharpCode.SharpDevelop.Project @@ -333,5 +335,32 @@ namespace ICSharpCode.SharpDevelop.Project
return solution;
}
#endregion
#region IProjectServiceRaiseEvents
public event EventHandler<ProjectEventArgs> ProjectCreated = delegate { };
public event EventHandler<SolutionEventArgs> SolutionCreated = delegate { };
public event EventHandler<ProjectItemEventArgs> ProjectItemAdded = delegate { };
public event EventHandler<ProjectItemEventArgs> ProjectItemRemoved = delegate { };
void IProjectServiceRaiseEvents.RaiseProjectCreated(ProjectEventArgs e)
{
ProjectCreated(this, e);
}
void IProjectServiceRaiseEvents.RaiseSolutionCreated(SolutionEventArgs e)
{
SolutionCreated(this, e);
}
void IProjectServiceRaiseEvents.RaiseProjectItemAdded(ProjectItemEventArgs e)
{
ProjectItemAdded(this, e);
}
void IProjectServiceRaiseEvents.RaiseProjectItemRemoved(ProjectItemEventArgs e)
{
ProjectItemRemoved(this, e);
}
#endregion
}
}

8
src/Main/SharpDevelop/Project/Solution.cs

@ -277,11 +277,13 @@ namespace ICSharpCode.SharpDevelop.Project @@ -277,11 +277,13 @@ namespace ICSharpCode.SharpDevelop.Project
}
*/
public event EventHandler PreferencesSaving = delegate { };
public void SavePreferences()
{
preferences.Set("ActiveConfiguration.Configuration", activeConfiguration.Configuration);
preferences.Set("ActiveConfiguration.Platform", activeConfiguration.Platform);
PreferencesSaving(this, EventArgs.Empty);
// TODO: save to disk
/*
string directory = Path.Combine(PropertyService.ConfigDirectory, "preferences");
@ -388,9 +390,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -388,9 +390,9 @@ namespace ICSharpCode.SharpDevelop.Project
if (FileUtility.IsBaseDirectory(project.Directory, oldName)) {
foreach (ProjectItem item in project.Items) {
if (FileUtility.IsBaseDirectory(oldName, item.FileName)) {
ProjectService.OnProjectItemRemoved(new ProjectItemEventArgs(project, item));
SD.GetRequiredService<IProjectServiceRaiseEvents>().RaiseProjectItemRemoved(new ProjectItemEventArgs(project, item));
item.FileName = FileUtility.RenameBaseDirectory(item.FileName, oldName, newName);
ProjectService.OnProjectItemAdded(new ProjectItemEventArgs(project, item));
SD.GetRequiredService<IProjectServiceRaiseEvents>().RaiseProjectItemAdded(new ProjectItemEventArgs(project, item));
}
}
}
@ -414,7 +416,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -414,7 +416,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (ProjectItem item in provider.Items.ToArray()) {
if (FileUtility.IsBaseDirectory(fileName, item.FileName)) {
provider.RemoveProjectItem(item);
ProjectService.OnProjectItemRemoved(new ProjectItemEventArgs(project, item));
SD.GetRequiredService<IProjectServiceRaiseEvents>().RaiseProjectItemRemoved(new ProjectItemEventArgs(project, item));
}
}
}

Loading…
Cancel
Save