Browse Source

Form designer creates and uses .resx files for new forms and user controls. Forms that have already been created and are using a .resources file will continue to do so. Resx files are added to the MSBuild project with the DependentUpon element set to point to its form. Deleting the form will also delete its Resx file.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@688 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 21 years ago
parent
commit
ba9529033a
  1. 63
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs
  2. 2
      src/AddIns/Misc/NAntAddIn/Project/NAnt.addin
  3. 27
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs

63
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/Services/DesignerResourceService.cs

@ -66,6 +66,11 @@ namespace ICSharpCode.FormDesigner.Services
} }
#endregion #endregion
enum ResourceType {
Resx = 0,
Resources = 1
};
// In ResourceMemoryStreams are stored: // In ResourceMemoryStreams are stored:
// Key: "true" file names from the project // Key: "true" file names from the project
// Value: ResourceStorage, where the resources are stored // Value: ResourceStorage, where the resources are stored
@ -109,7 +114,7 @@ namespace ICSharpCode.FormDesigner.Services
if (resourceWriter == null) { if (resourceWriter == null) {
ResourceStorage resourceStorage = new ResourceStorage(new MemoryStream()); ResourceStorage resourceStorage = new ResourceStorage(new MemoryStream());
resources[fileName] = resourceStorage; resources[fileName] = resourceStorage;
resourceWriter = new ResourceWriter(resourceStorage.stream); resourceWriter = CreateResourceWriter(resourceStorage.stream, GetResourceType(fileName));
Writers[info] = resourceWriter; Writers[info] = resourceWriter;
resourceStorage.project = project; resourceStorage.project = project;
} }
@ -127,9 +132,9 @@ namespace ICSharpCode.FormDesigner.Services
IResourceReader resourceReader = null; IResourceReader resourceReader = null;
if (resources != null && resources[fileName] != null) { if (resources != null && resources[fileName] != null) {
MemoryStream stream = new MemoryStream(((ResourceStorage)resources[fileName]).storage); MemoryStream stream = new MemoryStream(((ResourceStorage)resources[fileName]).storage);
resourceReader = new ResourceReader(stream); resourceReader = CreateResourceReader(stream, GetResourceType(fileName));
} else if (File.Exists(fileName)) { } else if (File.Exists(fileName)) {
resourceReader = new ResourceReader(fileName); resourceReader = CreateResourceReader(fileName, GetResourceType(fileName));
} }
return resourceReader; return resourceReader;
@ -152,10 +157,14 @@ namespace ICSharpCode.FormDesigner.Services
PadDescriptor pd = WorkbenchSingleton.Workbench.GetPad(typeof(ProjectBrowserPad)); PadDescriptor pd = WorkbenchSingleton.Workbench.GetPad(typeof(ProjectBrowserPad));
FileNode formFileNode = ((ProjectBrowserPad)pd.PadContent).ProjectBrowserControl.FindFileNode(FileName); FileNode formFileNode = ((ProjectBrowserPad)pd.PadContent).ProjectBrowserControl.FindFileNode(FileName);
if (formFileNode != null) { if (formFileNode != null) {
FileNode fileNode = new FileNode(resourceFileName, FileNodeStatus.InProject); FileNode fileNode = new FileNode(resourceFileName, FileNodeStatus.BehindFile);
fileNode.AddTo(formFileNode.Parent); fileNode.AddTo(formFileNode);
IncludeFileInProject.IncludeFileNode(fileNode); FileProjectItem newFileProjectItem = new FileProjectItem(fileNode.Project, ItemType.EmbeddedResource);
ProjectService.SaveSolution(); newFileProjectItem.DependentUpon = Path.GetFileName(formFileNode.FileName);
newFileProjectItem.Include = FileUtility.GetRelativePath(fileNode.Project.Directory, fileNode.FileName);
fileNode.ProjectItem = newFileProjectItem;
ProjectService.AddProjectItem(fileNode.Project, newFileProjectItem);
fileNode.Project.Save();
} }
} }
} }
@ -180,7 +189,13 @@ namespace ICSharpCode.FormDesigner.Services
resourceFileName.Append('.'); resourceFileName.Append('.');
resourceFileName.Append(info.Name); resourceFileName.Append(info.Name);
} }
resourceFileName.Append(".resources");
// Use .resources filename if file exists.
if (File.Exists(String.Concat(resourceFileName.ToString(), ".resources"))) {
resourceFileName.Append(".resources");
} else {
resourceFileName.Append(".resx");
}
return resourceFileName.ToString(); return resourceFileName.ToString();
} }
@ -232,5 +247,37 @@ namespace ICSharpCode.FormDesigner.Services
} }
SerializationEnded(false); SerializationEnded(false);
} }
static ResourceType GetResourceType(string fileName)
{
if (Path.GetExtension(fileName).ToLowerInvariant() == ".resx") {
return ResourceType.Resx;
}
return ResourceType.Resources;
}
static IResourceReader CreateResourceReader(string fileName, ResourceType type)
{
if (type == ResourceType.Resources) {
return new ResourceReader(fileName);
}
return new ResXResourceReader(fileName);
}
static IResourceReader CreateResourceReader(Stream stream, ResourceType type)
{
if (type == ResourceType.Resources) {
return new ResourceReader(stream);
}
return new ResXResourceReader(stream);
}
static IResourceWriter CreateResourceWriter(Stream stream, ResourceType type)
{
if (type == ResourceType.Resources) {
return new ResourceWriter(stream);
}
return new ResXResourceWriter(stream);
}
} }
} }

2
src/AddIns/Misc/NAntAddIn/Project/NAnt.addin

@ -118,7 +118,7 @@
<!-- Options panel --> <!-- Options panel -->
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions"> <Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">
<DialogPanel id = "NAntAddInOptionPanel" <DialogPanel id = "NAntAddInOptionPanel"
label = "&amp;NAnt" label = "NAnt"
class = "ICSharpCode.NAntAddIn.Gui.NAntAddInOptionPanel"/> class = "ICSharpCode.NAntAddIn.Gui.NAntAddInOptionPanel"/>
</Path> </Path>

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

@ -176,7 +176,14 @@ namespace ICSharpCode.SharpDevelop.Project
FileService.RemoveFile(FileName, false); FileService.RemoveFile(FileName, false);
ProjectService.SaveSolution(); ProjectService.SaveSolution();
} else { } else {
if (MessageService.AskQuestion("Delete '" + Text + "' permanently ?")) { if (Nodes.Count > 0) {
if (MessageService.AskQuestion("Delete '" + Text + "' and its dependent files permanently?")) {
DeleteChildNodes();
FileService.RemoveFile(FileName, false);
ProjectService.SaveSolution();
}
}
else if (MessageService.AskQuestion("Delete '" + Text + "' permanently ?")) {
FileService.RemoveFile(FileName, false); FileService.RemoveFile(FileName, false);
ProjectService.SaveSolution(); ProjectService.SaveSolution();
} }
@ -217,5 +224,23 @@ namespace ICSharpCode.SharpDevelop.Project
((ExtTreeNode)Parent).Paste(); ((ExtTreeNode)Parent).Paste();
} }
#endregion #endregion
/// <summary>
/// Deletes all dependent child nodes and their associated files.
/// Does not delete recursively - not required as yet.
/// </summary>
void DeleteChildNodes()
{
if (Nodes.Count == 0) return;
foreach (TreeNode node in Nodes) {
FileNode fileNode = node as FileNode;
if (fileNode != null) {
FileService.RemoveFile(fileNode.FileName, false);
} else {
LoggingService.Warn("FileNode.DeleteChildren. Child is not a FileNode.");
}
}
}
} }
} }

Loading…
Cancel
Save