From 8bdd68f232443d36731b093765a1a3aa7118efdb Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 22 Jun 2013 11:02:44 +0200 Subject: [PATCH] properly handle comment metadata in Resource Editor --- .../Project/Src/ResourceEdit/ResourceItem.cs | 45 +++++++++---------- .../Project/Src/ResourceEdit/ResourceList.cs | 29 +++++++----- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceItem.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceItem.cs index 16ddb0f4bf..3faabcebfd 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceItem.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceItem.cs @@ -3,48 +3,39 @@ using System; using System.Drawing; +using System.Resources; using System.Windows.Forms; namespace ResourceEditor { public class ResourceItem { - string name; - object resourceValue; - public ResourceItem(string name, object resourceValue) { - this.name = name; - this.resourceValue = resourceValue; + this.Name = name; + this.ResourceValue = resourceValue; } - public string Name + public ResourceItem(string name, object resourceValue, string comment) { - get { - return name; - } - set { - name = value; - } + this.Name = name; + this.ResourceValue = resourceValue; + this.Comment = comment; } - public object ResourceValue - { - get { - return resourceValue; - } - set { - resourceValue = value; - } - } + public string Name { get; set; } + + public object ResourceValue { get; set; } + + public string Comment { get; set; } public int ImageIndex { get { - if (this.resourceValue == null) { + if (this.ResourceValue == null) { return -1; } - switch(this.resourceValue.GetType().ToString()) { + switch(this.ResourceValue.GetType().ToString()) { case "System.String": return 0; case "System.Drawing.Bitmap": @@ -98,5 +89,13 @@ namespace ResourceEditor } return tmp; } + + public ResXDataNode ToResXDataNode(Func typeNameConverter = null) + { + var node = new ResXDataNode(Name, ResourceValue, typeNameConverter) { + Comment = Comment + }; + return node; + } } } diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs index 2381741816..4e38f1f559 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs @@ -4,6 +4,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.ComponentModel.Design; using System.Drawing.Printing; using System.IO; using System.Resources; @@ -136,16 +137,24 @@ namespace ResourceEditor switch (Path.GetExtension(filename).ToLowerInvariant()) { case ".resx": ResXResourceReader rx = new ResXResourceReader(stream); + ITypeResolutionService typeResolver = null; rx.BasePath = Path.GetDirectoryName(filename); + rx.UseResXDataNodes = true; IDictionaryEnumerator n = rx.GetEnumerator(); - while (n.MoveNext()) - if (!resources.ContainsKey(n.Key.ToString())) - resources.Add(n.Key.ToString(), new ResourceItem(n.Key.ToString(), n.Value)); + while (n.MoveNext()) { + if (!resources.ContainsKey(n.Key.ToString())) { + ResXDataNode node = (ResXDataNode)n.Value; + resources.Add(n.Key.ToString(), new ResourceItem(node.Name, node.GetValue(typeResolver), node.Comment)); + } + } n = rx.GetMetadataEnumerator(); - while (n.MoveNext()) - if (!metadata.ContainsKey(n.Key.ToString())) - metadata.Add(n.Key.ToString(), new ResourceItem(n.Key.ToString(), n.Value)); + while (n.MoveNext()) { + if (!metadata.ContainsKey(n.Key.ToString())) { + ResXDataNode node = (ResXDataNode)n.Value; + metadata.Add(n.Key.ToString(), new ResourceItem(node.Name, node.GetValue(typeResolver))); + } + } rx.Close(); break; @@ -171,14 +180,13 @@ namespace ResourceEditor public void SaveFile(FileName filename, Stream stream) { switch (Path.GetExtension(filename).ToLowerInvariant()) { - - // write XML resource case ".resx": + // write XML resource ResXResourceWriter rxw = new ResXResourceWriter(stream, t => ResXConverter.ConvertTypeName(t, filename)); foreach (KeyValuePair entry in resources) { if (entry.Value != null) { ResourceItem item = entry.Value; - rxw.AddResource(item.Name, item.ResourceValue); + rxw.AddResource(item.ToResXDataNode(t => ResXConverter.ConvertTypeName(t, filename))); } } foreach (KeyValuePair entry in metadata) { @@ -190,9 +198,8 @@ namespace ResourceEditor rxw.Generate(); rxw.Close(); break; - - // write default resource default: + // write default resource ResourceWriter rw = new ResourceWriter(stream); foreach (KeyValuePair entry in resources) { ResourceItem item = (ResourceItem)entry.Value;