Browse Source

Fixed SD2-640: Add existing form to project does not add .resx file

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1051 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
ebbd3bd080
  1. 6
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 8
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs
  3. 50
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs
  4. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  5. 9
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs
  6. 4
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs
  7. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs

6
AddIns/ICSharpCode.SharpDevelop.addin

@ -2043,7 +2043,9 @@
<Class id="EqualsCodeGenerator" <Class id="EqualsCodeGenerator"
class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.EqualsCodeGenerator"/> class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.EqualsCodeGenerator"/>
</Path> </Path>
<!--
<Path name = "/SharpDevelop/Workbench/DependentFileExtensions"> <Path name = "/SharpDevelop/Workbench/DependentFileExtensions">
</Path>--> <String id = "FormsDesignerGeneratedCode" text=".Designer${Extension}"/>
<String id = "FormsDesignerResources" text=".resx"/>
</Path>
</AddIn> </AddIn>

8
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/DefaultFileNodeCommands.cs

@ -52,6 +52,14 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{ {
void ExcludeFileNode(FileNode fileNode) void ExcludeFileNode(FileNode fileNode)
{ {
List<FileNode> dependentNodes = new List<FileNode>();
foreach (TreeNode subNode in fileNode.Nodes) {
// exclude dependent files
if (subNode is FileNode)
dependentNodes.Add((FileNode)subNode);
}
dependentNodes.ForEach(ExcludeFileNode);
ProjectService.RemoveProjectItem(fileNode.Project, fileNode.ProjectItem); ProjectService.RemoveProjectItem(fileNode.Project, fileNode.ProjectItem);
fileNode.ProjectItem = null; fileNode.ProjectItem = null;
fileNode.FileNodeStatus = FileNodeStatus.None; fileNode.FileNodeStatus = FileNodeStatus.None;

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

@ -121,6 +121,18 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
return null; return null;
} }
public static IEnumerable<string> FindAdditionalFiles(string fileName)
{
List<string> list = new List<string>();
StringParser.Properties["Extension"] = Path.GetExtension(fileName);
string prefix = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName));
foreach (string ext in AddInTree.BuildItems("/SharpDevelop/Workbench/DependentFileExtensions", null, true)) {
if (File.Exists(prefix + ext))
list.Add(prefix + ext);
}
return list;
}
public override void Run() public override void Run()
{ {
TreeNode selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode; TreeNode selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode;
@ -145,35 +157,63 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
fdiag.Title = StringParser.Parse("${res:ProjectComponent.ContextMenu.AddExistingFiles}"); fdiag.Title = StringParser.Parse("${res:ProjectComponent.ContextMenu.AddExistingFiles}");
if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) { if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {
string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fdiag.FileNames[0])); List<KeyValuePair<string, string>> fileNames = new List<KeyValuePair<string, string>>(fdiag.FileNames.Length);
if (!FileUtility.IsEqualFileName(fdiag.FileNames[0], copiedFileName)) { foreach (string fileName in fdiag.FileNames) {
fileNames.Add(new KeyValuePair<string, string>(fileName, ""));
}
bool addedDependentFiles = false;
foreach (string fileName in fdiag.FileNames) {
foreach (string additionalFile in FindAdditionalFiles(fileName)) {
if (!fileNames.Exists(delegate(KeyValuePair<string, string> pair) {
return FileUtility.IsEqualFileName(pair.Key, additionalFile);
}))
{
addedDependentFiles = true;
fileNames.Add(new KeyValuePair<string, string>(additionalFile, Path.GetFileName(fileName)));
}
}
}
string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileNames[0].Key));
if (!FileUtility.IsEqualFileName(fileNames[0].Key, copiedFileName)) {
int res = MessageService.ShowCustomDialog(fdiag.Title, "${res:ProjectComponent.ContextMenu.AddExistingFiles.Question}", int res = MessageService.ShowCustomDialog(fdiag.Title, "${res:ProjectComponent.ContextMenu.AddExistingFiles.Question}",
0, 2, 0, 2,
"${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}", "${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}",
"${res:ProjectComponent.ContextMenu.AddExistingFiles.Link}", "${res:ProjectComponent.ContextMenu.AddExistingFiles.Link}",
"${res:Global.CancelButtonText}"); "${res:Global.CancelButtonText}");
if (res == 1) { if (res == 1) {
foreach (string fileName in fdiag.FileNames) { foreach (KeyValuePair<string, string> pair in fileNames) {
string fileName = pair.Key;
string relFileName = FileUtility.GetRelativePath(node.Project.Directory, fileName); string relFileName = FileUtility.GetRelativePath(node.Project.Directory, fileName);
FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject); FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject);
FileProjectItem fileProjectItem = new FileProjectItem(node.Project, IncludeFileInProject.GetDefaultItemType(node.Project, fileName)); FileProjectItem fileProjectItem = new FileProjectItem(node.Project, IncludeFileInProject.GetDefaultItemType(node.Project, fileName));
fileProjectItem.Include = relFileName; fileProjectItem.Include = relFileName;
fileProjectItem.Properties.Set("Link", Path.Combine(node.RelativePath, Path.GetFileName(fileName))); fileProjectItem.Properties.Set("Link", Path.Combine(node.RelativePath, Path.GetFileName(fileName)));
fileProjectItem.DependentUpon = pair.Value;
fileNode.ProjectItem = fileProjectItem; fileNode.ProjectItem = fileProjectItem;
fileNode.AddTo(node); fileNode.AddTo(node);
ProjectService.AddProjectItem(node.Project, fileProjectItem); ProjectService.AddProjectItem(node.Project, fileProjectItem);
} }
node.Project.Save(); node.Project.Save();
if (addedDependentFiles)
node.RecreateSubNodes();
return; return;
} }
if (res == 2) { if (res == 2) {
return; return;
} }
} }
foreach (string fileName in fdiag.FileNames) { foreach (KeyValuePair<string, string> pair in fileNames) {
CopyFile(fileName, node, true); FileProjectItem item = CopyFile(pair.Key, node, true);
if (item != null) {
item.DependentUpon = pair.Value;
}
} }
node.Project.Save(); node.Project.Save();
if (addedDependentFiles)
node.RecreateSubNodes();
} }
} }
} }

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

@ -494,7 +494,7 @@ namespace ICSharpCode.SharpDevelop.Project
} }
this.directory = newPath; this.directory = newPath;
ProjectService.SaveSolution(); Project.Save();
} }
} }
public override object AcceptVisitor(ProjectBrowserTreeNodeVisitor visitor, object data) public override object AcceptVisitor(ProjectBrowserTreeNodeVisitor visitor, object data)

9
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs

@ -199,18 +199,17 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
if (FileNodeStatus == FileNodeStatus.Missing) { if (FileNodeStatus == FileNodeStatus.Missing) {
FileService.RemoveFile(FileName, false); FileService.RemoveFile(FileName, false);
ProjectService.SaveSolution(); Project.Save();
} else { } else {
if (Nodes.Count > 0) { if (Nodes.Count > 0) {
if (MessageService.AskQuestion(GetQuestionText("${res:ProjectComponent.ContextMenu.DeleteWithDependentFiles.Question}"))) { if (MessageService.AskQuestion(GetQuestionText("${res:ProjectComponent.ContextMenu.DeleteWithDependentFiles.Question}"))) {
DeleteChildNodes(); DeleteChildNodes();
FileService.RemoveFile(FileName, false); FileService.RemoveFile(FileName, false);
ProjectService.SaveSolution(); Project.Save();
} }
} } else if (MessageService.AskQuestion(GetQuestionText("${res:ProjectComponent.ContextMenu.Delete.Question}"))) {
else if (MessageService.AskQuestion(GetQuestionText("${res:ProjectComponent.ContextMenu.Delete.Question}"))) {
FileService.RemoveFile(FileName, false); FileService.RemoveFile(FileName, false);
ProjectService.SaveSolution(); Project.Save();
} }
} }
} }

4
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs

@ -80,7 +80,7 @@ namespace ICSharpCode.SharpDevelop.Project
return; return;
} }
Text = folder.Location = folder.Name = newName; Text = folder.Location = folder.Name = newName;
ProjectService.SaveSolution(); solution.Save();
} }
public void AddItem(string fileName) public void AddItem(string fileName)
@ -123,7 +123,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override void Delete() public override void Delete()
{ {
ProjectService.RemoveSolutionFolder(folder.IdGuid); ProjectService.RemoveSolutionFolder(folder.IdGuid);
ProjectService.SaveSolution(); solution.Save();
} }
public override bool EnableCopy { public override bool EnableCopy {

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs

@ -128,7 +128,7 @@ namespace ICSharpCode.SharpDevelop.Project
string newFileName = Path.Combine(Path.GetDirectoryName(this.FileName), newName); string newFileName = Path.Combine(Path.GetDirectoryName(this.FileName), newName);
FileService.RenameFile(this.FileName, newFileName, false); FileService.RenameFile(this.FileName, newFileName, false);
ProjectService.SaveSolution(); solution.Save();
} }
public override object AcceptVisitor(ProjectBrowserTreeNodeVisitor visitor, object data) public override object AcceptVisitor(ProjectBrowserTreeNodeVisitor visitor, object data)
{ {

Loading…
Cancel
Save