Browse Source

Some refactoring of the projecthandling coded. Documented some methods and cleaned up code. Also DirectoryNodeFactory got its own file.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3160 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Justin Dearing 18 years ago
parent
commit
4591960580
  1. 5
      src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs
  2. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  3. 2
      src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs
  4. 31
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs
  5. 18
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
  6. 48
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  7. 52
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNodeFactory.cs
  8. 1
      src/Main/Base/Project/Src/Internal/Templates/File/FileDescriptionTemplate.cs
  9. 2
      src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs
  10. 27
      src/Main/Base/Project/Src/Services/File/FileService.cs

5
src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs

@ -172,6 +172,11 @@ namespace ICSharpCode.Svn.Commands @@ -172,6 +172,11 @@ namespace ICSharpCode.Svn.Commands
OverlayIconManager.Enqueue(node);
}
/// <summary>
/// Adds the newly created file to the repository.
/// </summary>
/// <param name="sender">Not used.</param>
/// <param name="e">The name of the file and whether it is a directory or not.</param>
void FileCreated(object sender, FileEventArgs e)
{
if (!AddInOptions.AutomaticallyAddFiles) return;

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

@ -98,6 +98,7 @@ @@ -98,6 +98,7 @@
<Compile Include="Src\Gui\Dialogs\SolutionConfiguration\AddNewConfigurationDialog.Designer.cs">
<DependentUpon>AddNewConfigurationDialog.cs</DependentUpon>
</Compile>
<Compile Include="Src\Gui\Pads\ProjectBrowser\TreeNodes\DirectoryNodeFactory.cs" />
<Compile Include="Src\Gui\Pads\SearchResultPad\Nodes\SearchFolderNode.cs" />
<Compile Include="Src\Gui\Pads\SearchResultPad\Nodes\SearchResultNode.cs" />
<Compile Include="Src\Gui\Pads\SearchResultPad\Nodes\SearchRootNode.cs" />

2
src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs

@ -515,7 +515,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -515,7 +515,7 @@ namespace ICSharpCode.SharpDevelop.Gui
}
DialogResult = DialogResult.OK;
// raise FileCreated event for the new files
// raise FileCreated event for the new files.
foreach (KeyValuePair<string, FileDescriptionTemplate> entry in createdFiles) {
FileService.FireFileCreated(entry.Key, false);
}

31
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs

@ -12,7 +12,6 @@ using System.Windows.Forms; @@ -12,7 +12,6 @@ using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using Microsoft.Build.BuildEngine;
using ICSharpCode.SharpDevelop.Internal.Templates;
namespace ICSharpCode.SharpDevelop.Project.Commands
@ -261,30 +260,22 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -261,30 +260,22 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
}
/// <summary>
/// Menu item that display the NewFileDialog dialog and adds it to the solution.
/// </summary>
/// <seealso cref="NewFileDialog"/>
/// <exception cref="NullReferenceException">
/// Thrown if the selected node does not have an ancestor that is a DirectoryNode.
/// </exception>
public class AddNewItemsToProject : AbstractMenuCommand
{
FileProjectItem CreateNewFile(DirectoryNode upper, string fileName)
{
upper.Expanding();
FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject);
fileNode.AddTo(upper);
fileNode.EnsureVisible();
return IncludeFileInProject.IncludeFileNode(fileNode);
}
public override void Run()
{
TreeNode selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode;
DirectoryNode node = null;
while (selectedNode != null && node == null) {
node = selectedNode as DirectoryNode;
selectedNode = selectedNode.Parent;
}
DirectoryNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedDirectoryNode;
if (node == null) {
return;
}
}
node.Expand();
node.Expanding();
@ -292,7 +283,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -292,7 +283,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
if (nfd.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {
bool additionalProperties = false;
foreach (KeyValuePair<string, FileDescriptionTemplate> createdFile in nfd.CreatedFiles) {
FileProjectItem item = CreateNewFile(node, createdFile.Key);
FileProjectItem item = node.AddNewFile(createdFile.Key);
if (createdFile.Value.SetProjectItemProperties(item)) {
additionalProperties = true;

18
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs

@ -39,6 +39,24 @@ namespace ICSharpCode.SharpDevelop.Project @@ -39,6 +39,24 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
/// <summary>
/// The selected node or its most imediate parent that is a DirectoryNode.
/// </summary>
/// <seealso cref="DirectoryNode"/>
public DirectoryNode SelectedDirectoryNode {
get {
TreeNode selectedNode =
treeView.SelectedNode as AbstractProjectBrowserTreeNode;
DirectoryNode node = null;
while (selectedNode != null && node == null) {
node = selectedNode as DirectoryNode;
selectedNode = selectedNode.Parent;
}
// If no solution is load theres a valid reason for this to return null.
return node;
}
}
public AbstractProjectBrowserTreeNode SelectedNode {
get {
return treeView.SelectedNode as AbstractProjectBrowserTreeNode;

48
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs

@ -11,7 +11,6 @@ using System.IO; @@ -11,7 +11,6 @@ using System.IO;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project.Commands;
namespace ICSharpCode.SharpDevelop.Project
@ -55,6 +54,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -55,6 +54,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
//TODO: Maybe I need to add an enum member for the properties folder.
public enum SpecialFolder {
None,
AppDesigner,
@ -62,37 +62,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -62,37 +62,6 @@ namespace ICSharpCode.SharpDevelop.Project
WebReferencesFolder
}
public static class DirectoryNodeFactory
{
public static DirectoryNode CreateDirectoryNode(TreeNode parent, IProject project, string directory)
{
DirectoryNode node = new DirectoryNode(directory);
if (!string.IsNullOrEmpty(project.AppDesignerFolder)
&& directory == Path.Combine(project.Directory, project.AppDesignerFolder))
{
node.SpecialFolder = SpecialFolder.AppDesigner;
} else if (DirectoryNode.IsWebReferencesFolder(project, directory)) {
node = new WebReferencesFolderNode(directory);
} else if (parent != null && parent is WebReferencesFolderNode) {
node = new WebReferenceNode(directory);
}
return node;
}
public static DirectoryNode CreateDirectoryNode(ProjectItem item, FileNodeStatus status)
{
DirectoryNode node;
if (item is WebReferencesProjectItem) {
node = new WebReferencesFolderNode((WebReferencesProjectItem)item);
node.FileNodeStatus = status;
} else {
node = new DirectoryNode(item.FileName.Trim('\\', '/'), status);
node.ProjectItem = item;
}
return node;
}
}
public class DirectoryNode : AbstractProjectBrowserTreeNode, IOwnerState
{
string closedImage = null;
@ -437,6 +406,21 @@ namespace ICSharpCode.SharpDevelop.Project @@ -437,6 +406,21 @@ namespace ICSharpCode.SharpDevelop.Project
{
base.Initialize();
}
/// <summary>
/// Create's a new FileProjectItem in this DirectoryNode.
/// </summary>
/// <param name="fileName">The name of the file that will be added to the project.</param>
public FileProjectItem AddNewFile(string fileName)
{
//TODO: this can probably be moved to AbstractProjectBrowserTreeNode or even lower in the chain.
this.Expanding();
FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject);
fileNode.AddTo(this);
fileNode.EnsureVisible();
return IncludeFileInProject.IncludeFileNode(fileNode);
}
void AddParentFolder(string virtualName, string relativeDirectoryPath, Dictionary<string, DirectoryNode> directoryNodeList)
{

52
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNodeFactory.cs

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project.Commands;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Static factory methods for creating Directory nodes.
/// </summary>
public static class DirectoryNodeFactory
{
public static DirectoryNode CreateDirectoryNode(TreeNode parent, IProject project, string directory)
{
DirectoryNode node = new DirectoryNode(directory);
if (!string.IsNullOrEmpty(project.AppDesignerFolder)
&& directory == Path.Combine(project.Directory, project.AppDesignerFolder))
{
node.SpecialFolder = SpecialFolder.AppDesigner;
} else if (DirectoryNode.IsWebReferencesFolder(project, directory)) {
node = new WebReferencesFolderNode(directory);
} else if (parent != null && parent is WebReferencesFolderNode) {
node = new WebReferenceNode(directory);
}
return node;
}
public static DirectoryNode CreateDirectoryNode(ProjectItem item, FileNodeStatus status)
{
DirectoryNode node;
if (item is WebReferencesProjectItem) {
node = new WebReferencesFolderNode((WebReferencesProjectItem)item);
node.FileNodeStatus = status;
} else {
node = new DirectoryNode(item.FileName.Trim('\\', '/'), status);
node.ProjectItem = item;
}
return node;
}
}
}

1
src/Main/Base/Project/Src/Internal/Templates/File/FileDescriptionTemplate.cs

@ -12,7 +12,6 @@ using System.Xml; @@ -12,7 +12,6 @@ using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.Build.BuildEngine;
namespace ICSharpCode.SharpDevelop.Internal.Templates
{

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

@ -9,8 +9,8 @@ using System; @@ -9,8 +9,8 @@ using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Design;
using System.Linq;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.Design;

27
src/Main/Base/Project/Src/Services/File/FileService.cs

@ -442,6 +442,8 @@ namespace ICSharpCode.SharpDevelop @@ -442,6 +442,8 @@ namespace ICSharpCode.SharpDevelop
return CreateFolderBrowserDialog(description, null);
}
#region Event Handlers
static void OnFileRemoved(FileEventArgs e)
{
if (FileRemoved != null) {
@ -469,6 +471,15 @@ namespace ICSharpCode.SharpDevelop @@ -469,6 +471,15 @@ namespace ICSharpCode.SharpDevelop
}
}
#endregion Event Handlers
#region Static event firing methods
/// <summary>
/// Fires the event handlers for a file being created.
/// </summary>
/// <param name="fileName">The name of the file being created. This should be a fully qualified path.</param>
/// <param name="isDirectory">Set to true if this is a directory</param>
public static bool FireFileReplacing(string fileName, bool isDirectory)
{
FileCancelEventArgs e = new FileCancelEventArgs(fileName, isDirectory);
@ -478,6 +489,11 @@ namespace ICSharpCode.SharpDevelop @@ -478,6 +489,11 @@ namespace ICSharpCode.SharpDevelop
return !e.Cancel;
}
/// <summary>
/// Fires the event handlers for a file being replaced.
/// </summary>
/// <param name="fileName">The name of the file being created. This should be a fully qualified path.</param>
/// <param name="isDirectory">Set to true if this is a directory</param>
public static void FireFileReplaced(string fileName, bool isDirectory)
{
if (FileReplaced != null) {
@ -485,6 +501,11 @@ namespace ICSharpCode.SharpDevelop @@ -485,6 +501,11 @@ namespace ICSharpCode.SharpDevelop
}
}
/// <summary>
/// Fires the event handlers for a file being created.
/// </summary>
/// <param name="fileName">The name of the file being created. This should be a fully qualified path.</param>
/// <param name="isDirectory">Set to true if this is a directory</param>
public static void FireFileCreated(string fileName, bool isDirectory)
{
if (FileCreated != null) {
@ -492,6 +513,10 @@ namespace ICSharpCode.SharpDevelop @@ -492,6 +513,10 @@ namespace ICSharpCode.SharpDevelop
}
}
#endregion Static event firing methods
#region Events
public static event EventHandler<FileEventArgs> FileCreated;
public static event EventHandler<FileRenamingEventArgs> FileRenaming;
@ -502,6 +527,8 @@ namespace ICSharpCode.SharpDevelop @@ -502,6 +527,8 @@ namespace ICSharpCode.SharpDevelop
public static event EventHandler<FileCancelEventArgs> FileReplacing;
public static event EventHandler<FileEventArgs> FileReplaced;
#endregion Events
}
}

Loading…
Cancel
Save