Browse Source

properly handle comment metadata in Resource Editor

pull/45/merge
Siegfried Pammer 12 years ago
parent
commit
8bdd68f232
  1. 45
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceItem.cs
  2. 29
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs

45
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceItem.cs

@ -3,48 +3,39 @@
using System; using System;
using System.Drawing; using System.Drawing;
using System.Resources;
using System.Windows.Forms; using System.Windows.Forms;
namespace ResourceEditor namespace ResourceEditor
{ {
public class ResourceItem public class ResourceItem
{ {
string name;
object resourceValue;
public ResourceItem(string name, object resourceValue) public ResourceItem(string name, object resourceValue)
{ {
this.name = name; this.Name = name;
this.resourceValue = resourceValue; this.ResourceValue = resourceValue;
} }
public string Name public ResourceItem(string name, object resourceValue, string comment)
{ {
get { this.Name = name;
return name; this.ResourceValue = resourceValue;
} this.Comment = comment;
set {
name = value;
}
} }
public object ResourceValue public string Name { get; set; }
{
get { public object ResourceValue { get; set; }
return resourceValue;
} public string Comment { get; set; }
set {
resourceValue = value;
}
}
public int ImageIndex public int ImageIndex
{ {
get { get {
if (this.resourceValue == null) { if (this.ResourceValue == null) {
return -1; return -1;
} }
switch(this.resourceValue.GetType().ToString()) { switch(this.ResourceValue.GetType().ToString()) {
case "System.String": case "System.String":
return 0; return 0;
case "System.Drawing.Bitmap": case "System.Drawing.Bitmap":
@ -98,5 +89,13 @@ namespace ResourceEditor
} }
return tmp; return tmp;
} }
public ResXDataNode ToResXDataNode(Func<Type, string> typeNameConverter = null)
{
var node = new ResXDataNode(Name, ResourceValue, typeNameConverter) {
Comment = Comment
};
return node;
}
} }
} }

29
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs

@ -4,6 +4,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Drawing.Printing; using System.Drawing.Printing;
using System.IO; using System.IO;
using System.Resources; using System.Resources;
@ -136,16 +137,24 @@ namespace ResourceEditor
switch (Path.GetExtension(filename).ToLowerInvariant()) { switch (Path.GetExtension(filename).ToLowerInvariant()) {
case ".resx": case ".resx":
ResXResourceReader rx = new ResXResourceReader(stream); ResXResourceReader rx = new ResXResourceReader(stream);
ITypeResolutionService typeResolver = null;
rx.BasePath = Path.GetDirectoryName(filename); rx.BasePath = Path.GetDirectoryName(filename);
rx.UseResXDataNodes = true;
IDictionaryEnumerator n = rx.GetEnumerator(); IDictionaryEnumerator n = rx.GetEnumerator();
while (n.MoveNext()) while (n.MoveNext()) {
if (!resources.ContainsKey(n.Key.ToString())) if (!resources.ContainsKey(n.Key.ToString())) {
resources.Add(n.Key.ToString(), new ResourceItem(n.Key.ToString(), n.Value)); ResXDataNode node = (ResXDataNode)n.Value;
resources.Add(n.Key.ToString(), new ResourceItem(node.Name, node.GetValue(typeResolver), node.Comment));
}
}
n = rx.GetMetadataEnumerator(); n = rx.GetMetadataEnumerator();
while (n.MoveNext()) while (n.MoveNext()) {
if (!metadata.ContainsKey(n.Key.ToString())) if (!metadata.ContainsKey(n.Key.ToString())) {
metadata.Add(n.Key.ToString(), new ResourceItem(n.Key.ToString(), n.Value)); ResXDataNode node = (ResXDataNode)n.Value;
metadata.Add(n.Key.ToString(), new ResourceItem(node.Name, node.GetValue(typeResolver)));
}
}
rx.Close(); rx.Close();
break; break;
@ -171,14 +180,13 @@ namespace ResourceEditor
public void SaveFile(FileName filename, Stream stream) public void SaveFile(FileName filename, Stream stream)
{ {
switch (Path.GetExtension(filename).ToLowerInvariant()) { switch (Path.GetExtension(filename).ToLowerInvariant()) {
// write XML resource
case ".resx": case ".resx":
// write XML resource
ResXResourceWriter rxw = new ResXResourceWriter(stream, t => ResXConverter.ConvertTypeName(t, filename)); ResXResourceWriter rxw = new ResXResourceWriter(stream, t => ResXConverter.ConvertTypeName(t, filename));
foreach (KeyValuePair<string, ResourceItem> entry in resources) { foreach (KeyValuePair<string, ResourceItem> entry in resources) {
if (entry.Value != null) { if (entry.Value != null) {
ResourceItem item = entry.Value; ResourceItem item = entry.Value;
rxw.AddResource(item.Name, item.ResourceValue); rxw.AddResource(item.ToResXDataNode(t => ResXConverter.ConvertTypeName(t, filename)));
} }
} }
foreach (KeyValuePair<string, ResourceItem> entry in metadata) { foreach (KeyValuePair<string, ResourceItem> entry in metadata) {
@ -190,9 +198,8 @@ namespace ResourceEditor
rxw.Generate(); rxw.Generate();
rxw.Close(); rxw.Close();
break; break;
// write default resource
default: default:
// write default resource
ResourceWriter rw = new ResourceWriter(stream); ResourceWriter rw = new ResourceWriter(stream);
foreach (KeyValuePair<string, ResourceItem> entry in resources) { foreach (KeyValuePair<string, ResourceItem> entry in resources) {
ResourceItem item = (ResourceItem)entry.Value; ResourceItem item = (ResourceItem)entry.Value;

Loading…
Cancel
Save