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 20 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 @@ -66,6 +66,11 @@ namespace ICSharpCode.FormDesigner.Services
}
#endregion
enum ResourceType {
Resx = 0,
Resources = 1
};
// In ResourceMemoryStreams are stored:
// Key: "true" file names from the project
// Value: ResourceStorage, where the resources are stored
@ -109,7 +114,7 @@ namespace ICSharpCode.FormDesigner.Services @@ -109,7 +114,7 @@ namespace ICSharpCode.FormDesigner.Services
if (resourceWriter == null) {
ResourceStorage resourceStorage = new ResourceStorage(new MemoryStream());
resources[fileName] = resourceStorage;
resourceWriter = new ResourceWriter(resourceStorage.stream);
resourceWriter = CreateResourceWriter(resourceStorage.stream, GetResourceType(fileName));
Writers[info] = resourceWriter;
resourceStorage.project = project;
}
@ -127,9 +132,9 @@ namespace ICSharpCode.FormDesigner.Services @@ -127,9 +132,9 @@ namespace ICSharpCode.FormDesigner.Services
IResourceReader resourceReader = null;
if (resources != null && resources[fileName] != null) {
MemoryStream stream = new MemoryStream(((ResourceStorage)resources[fileName]).storage);
resourceReader = new ResourceReader(stream);
resourceReader = CreateResourceReader(stream, GetResourceType(fileName));
} else if (File.Exists(fileName)) {
resourceReader = new ResourceReader(fileName);
resourceReader = CreateResourceReader(fileName, GetResourceType(fileName));
}
return resourceReader;
@ -152,10 +157,14 @@ namespace ICSharpCode.FormDesigner.Services @@ -152,10 +157,14 @@ namespace ICSharpCode.FormDesigner.Services
PadDescriptor pd = WorkbenchSingleton.Workbench.GetPad(typeof(ProjectBrowserPad));
FileNode formFileNode = ((ProjectBrowserPad)pd.PadContent).ProjectBrowserControl.FindFileNode(FileName);
if (formFileNode != null) {
FileNode fileNode = new FileNode(resourceFileName, FileNodeStatus.InProject);
fileNode.AddTo(formFileNode.Parent);
IncludeFileInProject.IncludeFileNode(fileNode);
ProjectService.SaveSolution();
FileNode fileNode = new FileNode(resourceFileName, FileNodeStatus.BehindFile);
fileNode.AddTo(formFileNode);
FileProjectItem newFileProjectItem = new FileProjectItem(fileNode.Project, ItemType.EmbeddedResource);
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 @@ -180,7 +189,13 @@ namespace ICSharpCode.FormDesigner.Services
resourceFileName.Append('.');
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();
}
@ -232,5 +247,37 @@ namespace ICSharpCode.FormDesigner.Services @@ -232,5 +247,37 @@ namespace ICSharpCode.FormDesigner.Services
}
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 @@ @@ -118,7 +118,7 @@
<!-- Options panel -->
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">
<DialogPanel id = "NAntAddInOptionPanel"
label = "&amp;NAnt"
label = "NAnt"
class = "ICSharpCode.NAntAddIn.Gui.NAntAddInOptionPanel"/>
</Path>

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

@ -176,7 +176,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -176,7 +176,14 @@ namespace ICSharpCode.SharpDevelop.Project
FileService.RemoveFile(FileName, false);
ProjectService.SaveSolution();
} 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);
ProjectService.SaveSolution();
}
@ -217,5 +224,23 @@ namespace ICSharpCode.SharpDevelop.Project @@ -217,5 +224,23 @@ namespace ICSharpCode.SharpDevelop.Project
((ExtTreeNode)Parent).Paste();
}
#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