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 @@ @@ -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 @@ -98,5 +89,13 @@ namespace ResourceEditor
}
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 @@ @@ -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 @@ -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 @@ -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<string, ResourceItem> 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<string, ResourceItem> entry in metadata) {
@ -190,9 +198,8 @@ namespace ResourceEditor @@ -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<string, ResourceItem> entry in resources) {
ResourceItem item = (ResourceItem)entry.Value;

Loading…
Cancel
Save