Improved error reporting a little and changes the list in the Warnings & Errors dialog window

This commit is contained in:
codeimp 2009-05-10 16:02:08 +00:00
parent 1fc8947d29
commit ec40df4765
33 changed files with 195 additions and 163 deletions

View file

@ -9,7 +9,7 @@ extensions = "ded";
casesensitive = false;
insertcase = 0; // 0=Normal, 1=Lowercase, 2=Uppercase
lexer = 1;
keywordhelp = "http://deng.sourceforge.net/dew/Editing/%K";
keywordhelp = "http://dengine.net/dew/index.php?title=%K";
keywords
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1,016 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

After

Width:  |  Height:  |  Size: 749 B

View file

@ -719,6 +719,8 @@
<None Include="Resources\Builder16.png" />
<None Include="Resources\CLogo.png" />
<Content Include="Resources\DB2.ico" />
<None Include="Resources\ErrorLarge.png" />
<None Include="Resources\WarningLarge.png" />
<None Include="Resources\Question.png" />
<None Include="Resources\Help.png" />
<None Include="Resources\Status11.png" />

View file

@ -135,7 +135,7 @@ namespace CodeImp.DoomBuilder.Compilers
{
string sourcefile = Path.Combine(info.Path, f);
string targetfile = Path.Combine(tempdir.FullName, f);
if(!File.Exists(sourcefile)) General.ErrorLogger.Add(ErrorType.Error, "The file '" + f + "' required by the '" + info.Name + "' compiler is missing.");
if(!File.Exists(sourcefile)) General.ErrorLogger.Add(ErrorType.Error, "The file '" + f + "' required by the '" + info.Name + "' compiler is missing. According to the compiler configuration in '" + info.FileName + "', the was expected to be found in the following path: " + info.Path);
File.Copy(sourcefile, targetfile, true);
}
}

View file

@ -86,7 +86,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "'" + argspath + ".arg" + istr + "' references unknown enumeration '" + argdic["enum"] + "'");
General.ErrorLogger.Add(ErrorType.Warning, "'" + argspath + ".arg" + istr + "' references unknown enumeration '" + argdic["enum"] + "'.");
}
}
}

View file

@ -60,7 +60,7 @@ namespace CodeImp.DoomBuilder.Config
// Set the flag
if(!int.TryParse(de.Key.ToString(), out flag))
General.ErrorLogger.Add(ErrorType.Warning, "Invalid flag translation key in configuration (must be numeric)");
General.ErrorLogger.Add(ErrorType.Warning, "Invalid flag translation key in configuration. The key must be numeric.");
// Set the fields
string[] fieldstrings = de.Value.ToString().Split(',');

View file

@ -374,7 +374,7 @@ namespace CodeImp.DoomBuilder.Config
}
catch(Exception)
{
General.ErrorLogger.Add(ErrorType.Warning, "Unable to read universal field definition 'universalfields." + elementname + "." + de.Key + "'");
General.ErrorLogger.Add(ErrorType.Warning, "Unable to read universal field definition 'universalfields." + elementname + "." + de.Key + "' from game configuration '" + this.Name + "'");
}
}
@ -404,7 +404,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Thing number " + t.Index + " is defined more than once (as '" + things[t.Index].Title + "' and '" + t.Title + "')");
General.ErrorLogger.Add(ErrorType.Warning, "Thing number " + t.Index + " is defined more than once (as '" + things[t.Index].Title + "' and '" + t.Title + "') in game configuration '" + this.Name + "'");
}
}
@ -482,7 +482,7 @@ namespace CodeImp.DoomBuilder.Config
else
{
// Failure
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'linedeftypes' contains invalid types (all types must be expanded structures)");
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'linedeftypes' contains invalid types in game configuration '" + this.Name + "'. All types must be expanded structures.");
}
}
}
@ -534,7 +534,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'gen_linedeftypes' contains invalid entries");
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'gen_linedeftypes' contains invalid entries in game configuration '" + this.Name + "'");
}
}
}
@ -564,7 +564,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'sectortypes' contains invalid keys");
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'sectortypes' contains invalid keys in game configuration '" + this.Name + "'");
}
}
@ -591,7 +591,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'sectorbrightness' contains invalid keys");
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'sectorbrightness' contains invalid keys in game configuration '" + this.Name + "'");
}
}
@ -616,7 +616,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'gen_sectortypes' contains invalid entries");
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'gen_sectortypes' contains invalid entries in game configuration '" + this.Name + "'");
}
}
}
@ -656,7 +656,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'defaultthingflags' contains unknown thing flags");
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'defaultthingflags' contains unknown thing flags in game configuration '" + this.Name + "'");
}
}
}
@ -677,7 +677,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'skills' contains invalid skill numbers");
General.ErrorLogger.Add(ErrorType.Warning, "Structure 'skills' contains invalid skill numbers in game configuration '" + this.Name + "'");
}
}
}

View file

@ -80,7 +80,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Structure '" + fullpath + "." + name + "' contains invalid entries");
General.ErrorLogger.Add(ErrorType.Warning, "Structure '" + fullpath + "." + name + "' contains invalid entries. The keys must be numeric.");
}
}

View file

@ -66,7 +66,7 @@ namespace CodeImp.DoomBuilder.Config
}
else
{
General.ErrorLogger.Add(ErrorType.Warning, "Map lump '" + name + "' specifies unknown script configuration '" + scriptconfig + "'. Using plain text instead.");
General.ErrorLogger.Add(ErrorType.Warning, "Map lump '" + name + "' in the current game configuration specifies an unknown script configuration '" + scriptconfig + "'. Using plain text instead.");
this.script = new ScriptConfiguration();
}
}

View file

@ -156,7 +156,7 @@ namespace CodeImp.DoomBuilder.Controls
catch(Exception e)
{
// Failed
General.ErrorLogger.Add(ErrorType.Error, "Cannot open file '" + filepathname + "' for writing");
General.ErrorLogger.Add(ErrorType.Error, "Cannot open file '" + filepathname + "' for writing. Make sure the path exists and that the file is not in use by another application.");
General.WriteLogLine(e.GetType().Name + ": " + e.Message);
General.ShowErrorMessage("Unable to open file \"" + filepathname + "\" for writing. Make sure the path exists and that the file is not in use by another application.", MessageBoxButtons.OK);
return false;
@ -196,7 +196,7 @@ namespace CodeImp.DoomBuilder.Controls
catch(Exception e)
{
// Failed
General.ErrorLogger.Add(ErrorType.Error, "Cannot open file '" + filepathname + "' for reading");
General.ErrorLogger.Add(ErrorType.Error, "Cannot open file '" + filepathname + "' for reading. Make sure the path exists and that the file is not in use by another application.");
General.WriteLogLine(e.GetType().Name + ": " + e.Message);
General.ShowErrorMessage("Unable to open file \"" + filepathname + "\" for reading. Make sure the path exists and that the file is not in use by another application.", MessageBoxButtons.OK);
return false;

View file

@ -272,9 +272,8 @@ namespace CodeImp.DoomBuilder.Data
catch(Exception e)
{
// Unable to load resource
General.ErrorLogger.Add(ErrorType.Error, "Error while creating data reader. " + e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Error, "Unable to load resources from location \"" + dl.location + "\". Please make sure the location is accessible and not in use by another program. The resources will now be loaded with this location excluded. You may reload the resources to try again.\n" + e.GetType().Name + " when creating data reader: " + e.Message + ")");
General.WriteLogLine(e.StackTrace);
General.ShowErrorMessage("Unable to load resources from location \"" + dl.location + "\". Please make sure the location is accessible and not in use by another program.", MessageBoxButtons.OK);
continue;
}
@ -438,9 +437,8 @@ namespace CodeImp.DoomBuilder.Data
catch(Exception e)
{
// Unable to load resource
General.ErrorLogger.Add(ErrorType.Error, "Error while resuming data reader. " + e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Error, "Unable to load resources from location \"" + d.Location.location + "\". Please make sure the location is accessible and not in use by another program. The resources will now be loaded with this location excluded. You may reload the resources to try again.\n" + e.GetType().Name + " when resuming data reader: " + e.Message + ")");
General.WriteLogLine(e.StackTrace);
General.ShowErrorMessage("Unable to load resources from location \"" + d.Location.location + "\". Please make sure the location is accessible and not in use by another program.", MessageBoxButtons.OK);
}
}
@ -672,7 +670,7 @@ namespace CodeImp.DoomBuilder.Data
// Make empty palette when still no palette found
if(palette == null)
{
General.ErrorLogger.Add(ErrorType.Warning, "None of the loaded resources define a color palette. Did you forget to configure an IWAD for this configuration?");
General.ErrorLogger.Add(ErrorType.Warning, "None of the loaded resources define a color palette. Did you forget to configure an IWAD for this game configuration?");
palette = new Playpal();
}
}

View file

@ -118,7 +118,7 @@ namespace CodeImp.DoomBuilder.Data
// Not loaded?
if(bitmap == null)
{
General.ErrorLogger.Add(ErrorType.Error, "Image file '" + filepathname + "' data format could not be read, while loading texture '" + this.Name + "'");
General.ErrorLogger.Add(ErrorType.Error, "Image file '" + filepathname + "' data format could not be read, while loading image '" + this.Name + "'. Is this a valid picture file at all?");
loadfailed = true;
}
else

View file

@ -77,7 +77,7 @@ namespace CodeImp.DoomBuilder.Data
if(reader is UnknownImageReader)
{
// Data is in an unknown format!
General.ErrorLogger.Add(ErrorType.Error, "Flat lump '" + Name + "' data format could not be read");
General.ErrorLogger.Add(ErrorType.Error, "Flat lump '" + Name + "' data format could not be read. Does this lump contain valid picture data at all?");
bitmap = null;
}
else
@ -107,7 +107,7 @@ namespace CodeImp.DoomBuilder.Data
else
{
// Missing a patch lump!
General.ErrorLogger.Add(ErrorType.Error, "Missing flat lump '" + Name + "'");
General.ErrorLogger.Add(ErrorType.Error, "Missing flat lump '" + Name + "'. Did you forget to include required resources?");
loadfailed = true;
}

View file

@ -260,7 +260,7 @@ namespace CodeImp.DoomBuilder.Data
catch(Exception e)
{
bitmap = oldbitmap;
General.ErrorLogger.Add(ErrorType.Warning, "Cannot lock image '" + name + "' for pixel format conversion. " + e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Warning, "Cannot lock image '" + name + "' for pixel format conversion. The image may not be displayed correctly.\n" + e.GetType().Name + ": " + e.Message);
}
}
@ -274,7 +274,7 @@ namespace CodeImp.DoomBuilder.Data
}
catch(Exception e)
{
General.ErrorLogger.Add(ErrorType.Warning, "Cannot lock image '" + name + "' for color correction. " + e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Warning, "Cannot lock image '" + name + "' for color correction. The image may not be displayed correctly.\n" + e.GetType().Name + ": " + e.Message);
}
// Bitmap locked?

View file

@ -350,7 +350,7 @@ namespace CodeImp.DoomBuilder.Data
else
{
// Can't load image without name
General.ErrorLogger.Add(ErrorType.Error, "Can't load unnamed texture from \"" + path + "\"");
General.ErrorLogger.Add(ErrorType.Error, "Can't load an unnamed texture from \"" + path + "\". Please consider giving names to your resources.");
}
}

View file

@ -108,7 +108,7 @@ namespace CodeImp.DoomBuilder.Data
// Not loaded?
if(bitmap == null)
{
General.ErrorLogger.Add(ErrorType.Error, "Image lump '" + lumpname + "' data format could not be read, while loading texture '" + this.Name + "'");
General.ErrorLogger.Add(ErrorType.Error, "Image lump '" + lumpname + "' data format could not be read, while loading texture '" + this.Name + "'. Does this lump contain valid picture data at all?");
loadfailed = true;
}
else
@ -125,7 +125,7 @@ namespace CodeImp.DoomBuilder.Data
}
else
{
General.ErrorLogger.Add(ErrorType.Error, "Image lump '" + lumpname + "' could not be found, while loading texture '" + this.Name + "'");
General.ErrorLogger.Add(ErrorType.Error, "Image lump '" + lumpname + "' could not be found, while loading texture '" + this.Name + "'. Did you forget to include required resources?");
loadfailed = true;
}

View file

@ -92,7 +92,7 @@ namespace CodeImp.DoomBuilder.Data
if(reader is UnknownImageReader)
{
// Data is in an unknown format!
General.ErrorLogger.Add(ErrorType.Error, "Sprite lump '" + Name + "' data format could not be read");
General.ErrorLogger.Add(ErrorType.Error, "Sprite lump '" + Name + "' data format could not be read. Does this lump contain valid picture data at all?");
bitmap = null;
}
else
@ -129,7 +129,7 @@ namespace CodeImp.DoomBuilder.Data
else
{
// Missing a patch lump!
General.ErrorLogger.Add(ErrorType.Error, "Missing sprite lump '" + Name + "'");
General.ErrorLogger.Add(ErrorType.Error, "Missing sprite lump '" + Name + "'. Forgot to include required resources?");
}
// Pass on to base

View file

@ -124,7 +124,7 @@ namespace CodeImp.DoomBuilder.Data
if(reader is UnknownImageReader)
{
// Data is in an unknown format!
General.ErrorLogger.Add(ErrorType.Error, "Patch lump '" + p.lumpname + "' data format could not be read, while loading texture '" + this.Name + "'");
General.ErrorLogger.Add(ErrorType.Error, "Patch lump '" + p.lumpname + "' data format could not be read, while loading texture '" + this.Name + "'. Does this lump contain valid picture data at all?");
loadfailed = true;
}
else
@ -135,7 +135,7 @@ namespace CodeImp.DoomBuilder.Data
catch(InvalidDataException)
{
// Data cannot be read!
General.ErrorLogger.Add(ErrorType.Error, "Patch lump '" + p.lumpname + "' data format could not be read, while loading texture '" + this.Name + "'");
General.ErrorLogger.Add(ErrorType.Error, "Patch lump '" + p.lumpname + "' data format could not be read, while loading texture '" + this.Name + "'. Does this lump contain valid picture data at all?");
loadfailed = true;
}
}
@ -146,7 +146,7 @@ namespace CodeImp.DoomBuilder.Data
else
{
// Missing a patch lump!
General.ErrorLogger.Add(ErrorType.Error, "Missing patch lump '" + p.lumpname + "' while loading texture '" + this.Name + "'");
General.ErrorLogger.Add(ErrorType.Error, "Missing patch lump '" + p.lumpname + "' while loading texture '" + this.Name + "'. Did you forget to include required resources?");
loadfailed = true;
}
}

View file

@ -258,7 +258,7 @@ namespace CodeImp.DoomBuilder.Data
else
{
// Can't load image without name
General.ErrorLogger.Add(ErrorType.Error, "Can't load unnamed texture from lump index " + i);
General.ErrorLogger.Add(ErrorType.Error, "Can't load an unnamed texture from lump index " + i + ". Please consider giving names to your resources.");
}
}
}
@ -282,7 +282,7 @@ namespace CodeImp.DoomBuilder.Data
else
{
// Can't load image without name
General.ErrorLogger.Add(ErrorType.Error, "Can't load unnamed texture from \"" + filename + "\"");
General.ErrorLogger.Add(ErrorType.Error, "Can't load an unnamed texture from \"" + filename + "\". Please consider giving names to your resources.");
}
}
}
@ -353,7 +353,7 @@ namespace CodeImp.DoomBuilder.Data
else
{
// Can't load image without name
General.ErrorLogger.Add(ErrorType.Error, "Can't load unnamed texture from \"" + sourcename + "\"");
General.ErrorLogger.Add(ErrorType.Error, "Can't load an unnamed texture from \"" + sourcename + "\". Please consider giving names to your resources.");
}
// Go for all patches in texture
@ -376,7 +376,7 @@ namespace CodeImp.DoomBuilder.Data
else
{
// Can't load image without name
General.ErrorLogger.Add(ErrorType.Error, "Can't use unnamed patch referenced in \"" + sourcename + "\"");
General.ErrorLogger.Add(ErrorType.Error, "Can't use an unnamed patch referenced in \"" + sourcename + "\". Please consider giving names to your resources.");
}
}
}

View file

@ -341,6 +341,7 @@ namespace CodeImp.DoomBuilder.Editing
{
Cursor.Current = oldcursor;
General.ErrorLogger.Add(ErrorType.Error, e.GetType().Name + " while writing prefab to file: " + e.Message);
General.WriteLog(e.StackTrace);
General.ShowErrorMessage("Error while writing prefab to file! See log file for error details.", MessageBoxButtons.OK);
}
}
@ -392,6 +393,7 @@ namespace CodeImp.DoomBuilder.Editing
{
Cursor.Current = oldcursor;
General.ErrorLogger.Add(ErrorType.Error, e.GetType().Name + " while reading prefab from file: " + e.Message);
General.WriteLog(e.StackTrace);
General.ShowErrorMessage("Error while reading prefab from file! See log file for error details.", MessageBoxButtons.OK);
}
@ -440,6 +442,7 @@ namespace CodeImp.DoomBuilder.Editing
{
Cursor.Current = oldcursor;
General.ErrorLogger.Add(ErrorType.Error, e.GetType().Name + " while reading prefab from file: " + e.Message);
General.WriteLog(e.StackTrace);
General.ShowErrorMessage("Error while reading prefab from file! See log file for error details.", MessageBoxButtons.OK);
}

View file

@ -312,10 +312,11 @@ namespace CodeImp.DoomBuilder
return cfg;
}
}
catch(Exception)
catch(Exception e)
{
// Unable to load configuration
errorlogger.Add(ErrorType.Error, "Unable to load the game configuration file \"" + filename + "\".");
errorlogger.Add(ErrorType.Error, "Unable to load the game configuration file \"" + filename + "\". " + e.GetType().Name + ": " + e.Message);
General.WriteLog(e.StackTrace);
return null;
}
}
@ -465,6 +466,7 @@ namespace CodeImp.DoomBuilder
{
// Unable to load configuration
errorlogger.Add(ErrorType.Error, "Unable to load the script configuration file \"" + Path.GetFileName(filepath) + "\". Error: " + e.Message);
General.WriteLog(e.StackTrace);
}
}
}
@ -523,10 +525,11 @@ namespace CodeImp.DoomBuilder
}
}
}
catch(Exception)
catch(Exception e)
{
// Unable to load configuration
errorlogger.Add(ErrorType.Error, "Unable to load the compiler configuration file \"" + Path.GetFileName(filepath) + "\".");
errorlogger.Add(ErrorType.Error, "Unable to load the compiler configuration file \"" + Path.GetFileName(filepath) + "\". " + e.GetType().Name + ": " + e.Message);
General.WriteLog(e.StackTrace);
}
}
}

View file

@ -349,7 +349,7 @@ namespace CodeImp.DoomBuilder
try { map = io.Read(map, TEMP_MAP_HEADER); }
catch(Exception e)
{
General.ErrorLogger.Add(ErrorType.Error, e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Error, "Unable to read the map data structures with the specified configuration. " + e.GetType().Name + ": " + e.Message);
General.ShowErrorMessage("Unable to read the map data structures with the specified configuration.", MessageBoxButtons.OK);
return false;
}
@ -621,8 +621,7 @@ namespace CodeImp.DoomBuilder
catch(Exception e)
{
// Warning only
General.ErrorLogger.Add(ErrorType.Warning, e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Warning, "Could not write the map settings configuration file");
General.ErrorLogger.Add(ErrorType.Warning, "Could not write the map settings configuration file. " + e.GetType().Name + ": " + e.Message);
}
// Check for compile errors, if the scripts were compiled above
@ -974,7 +973,7 @@ namespace CodeImp.DoomBuilder
// the game configs that are trivial and don't need to be found.
if(lumprequired)
{
General.ErrorLogger.Add(ErrorType.Warning, ml.Key.ToString() + " (required lump) should be read but was not found in the WAD file");
General.ErrorLogger.Add(ErrorType.Warning, ml.Key.ToString() + " (required lump) should be read but was not found in the WAD file.");
}
}
}
@ -1410,6 +1409,23 @@ namespace CodeImp.DoomBuilder
// This reloads resources
[BeginAction("reloadresources")]
internal void DoReloadResource()
{
// Set this to false so we can see if errors are added
General.ErrorLogger.IsErrorAdded = false;
ReloadResources();
if(General.ErrorLogger.IsErrorAdded)
{
// Show any errors if preferred
General.MainWindow.DisplayStatus(StatusType.Warning, "There were errors during resources loading!");
if(General.Settings.ShowErrorsWindow) General.MainWindow.ShowErrors();
}
else
General.MainWindow.DisplayReady();
}
internal void ReloadResources()
{
DataLocation maplocation;

View file

@ -120,7 +120,7 @@ namespace CodeImp.DoomBuilder.IO
catch(Exception e)
{
// Unable to make bitmap
General.ErrorLogger.Add(ErrorType.Error, "Unable to make doom flat data. " + e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Error, "Unable to make Doom flat data. " + e.GetType().Name + ": " + e.Message);
return null;
}
}

View file

@ -135,7 +135,7 @@ namespace CodeImp.DoomBuilder.IO
catch(Exception e)
{
// Unable to make bitmap
General.ErrorLogger.Add(ErrorType.Error, "Unable to make doom picture data. " + e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Error, "Unable to make Doom picture data. " + e.GetType().Name + ": " + e.Message);
return null;
}
}

View file

@ -90,7 +90,7 @@ namespace CodeImp.DoomBuilder.Plugins
if(FindClasses(typeof(Plug)).Length > 1)
{
// Show a warning
General.ErrorLogger.Add(ErrorType.Warning, "Plugin \"" + shortfilename + "\" has more than one plug.");
General.ErrorLogger.Add(ErrorType.Warning, "Plugin \"" + shortfilename + "\" has more than one plug. The following class is used to create in instance: " + t.FullName);
}
// Make plug instance
@ -190,15 +190,13 @@ namespace CodeImp.DoomBuilder.Plugins
catch(TargetInvocationException e)
{
// Error!
General.ErrorLogger.Add(ErrorType.Error, "Failed to create class instance '" + t.Name + "' from plugin '" + name + "'");
General.WriteLogLine(e.InnerException.GetType().Name + ": " + e.InnerException.Message);
General.ErrorLogger.Add(ErrorType.Error, "Failed to create class instance '" + t.Name + "' from plugin '" + name + "' " + e.InnerException.GetType().Name + " at target: " + e.InnerException.Message);
return default(T);
}
catch(Exception e)
{
// Error!
General.ErrorLogger.Add(ErrorType.Error, "Failed to create class instance '" + t.Name + "' from plugin '" + name + "'");
General.WriteLogLine(e.GetType().Name + ": " + e.Message);
General.ErrorLogger.Add(ErrorType.Error, "Failed to create class instance '" + t.Name + "' from plugin '" + name + "' " + e.GetType().Name + ": " + e.Message);
return default(T);
}
}

View file

@ -95,6 +95,13 @@ namespace CodeImp.DoomBuilder.Properties {
}
}
internal static System.Drawing.Bitmap ErrorLarge {
get {
object obj = ResourceManager.GetObject("ErrorLarge", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap Failed {
get {
object obj = ResourceManager.GetObject("Failed", resourceCulture);
@ -459,6 +466,13 @@ namespace CodeImp.DoomBuilder.Properties {
}
}
internal static System.Drawing.Bitmap WarningLarge {
get {
object obj = ResourceManager.GetObject("WarningLarge", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap WarningOff {
get {
object obj = ResourceManager.GetObject("WarningOff", resourceCulture);

View file

@ -298,4 +298,10 @@
<data name="CLogo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\CLogo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ErrorLarge" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ErrorLarge.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="WarningLarge" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\WarningLarge.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,016 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 B

View file

@ -29,47 +29,18 @@ namespace CodeImp.DoomBuilder.Windows
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ErrorsForm));
this.list = new System.Windows.Forms.ListView();
this.colmessage = new System.Windows.Forms.ColumnHeader();
this.images = new System.Windows.Forms.ImageList(this.components);
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
this.copyselected = new System.Windows.Forms.Button();
this.clearlist = new System.Windows.Forms.Button();
this.close = new System.Windows.Forms.Button();
this.checkerrors = new System.Windows.Forms.Timer(this.components);
this.checkshow = new System.Windows.Forms.CheckBox();
this.grid = new System.Windows.Forms.DataGridView();
this.iconcolumn = new System.Windows.Forms.DataGridViewImageColumn();
this.textcolumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit();
this.SuspendLayout();
//
// list
//
this.list.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.list.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colmessage});
this.list.FullRowSelect = true;
this.list.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.list.HideSelection = false;
this.list.Location = new System.Drawing.Point(12, 12);
this.list.Name = "list";
this.list.Size = new System.Drawing.Size(732, 395);
this.list.SmallImageList = this.images;
this.list.TabIndex = 0;
this.list.UseCompatibleStateImageBehavior = false;
this.list.View = System.Windows.Forms.View.Details;
//
// colmessage
//
this.colmessage.Text = "";
this.colmessage.Width = 702;
//
// images
//
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
this.images.TransparentColor = System.Drawing.Color.Transparent;
this.images.Images.SetKeyName(0, "ErrorLarge.png");
this.images.Images.SetKeyName(1, "WarningLarge.png");
//
// copyselected
//
this.copyselected.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
@ -119,6 +90,60 @@ namespace CodeImp.DoomBuilder.Windows
this.checkshow.Text = "Show this window when errors occur";
this.checkshow.UseVisualStyleBackColor = true;
//
// grid
//
this.grid.AllowUserToAddRows = false;
this.grid.AllowUserToDeleteRows = false;
this.grid.AllowUserToResizeColumns = false;
this.grid.AllowUserToResizeRows = false;
this.grid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.grid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.grid.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
this.grid.BackgroundColor = System.Drawing.SystemColors.Window;
this.grid.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.grid.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
this.grid.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
this.grid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.grid.ColumnHeadersVisible = false;
this.grid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.iconcolumn,
this.textcolumn});
this.grid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;
this.grid.Location = new System.Drawing.Point(12, 12);
this.grid.Name = "grid";
this.grid.ReadOnly = true;
this.grid.RowHeadersVisible = false;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopLeft;
dataGridViewCellStyle1.Padding = new System.Windows.Forms.Padding(2, 4, 2, 5);
this.grid.RowsDefaultCellStyle = dataGridViewCellStyle1;
this.grid.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.grid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.grid.ShowCellErrors = false;
this.grid.ShowCellToolTips = false;
this.grid.ShowEditingIcon = false;
this.grid.ShowRowErrors = false;
this.grid.Size = new System.Drawing.Size(732, 395);
this.grid.StandardTab = true;
this.grid.TabIndex = 5;
//
// iconcolumn
//
this.iconcolumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
this.iconcolumn.HeaderText = "Icon";
this.iconcolumn.MinimumWidth = 20;
this.iconcolumn.Name = "iconcolumn";
this.iconcolumn.ReadOnly = true;
this.iconcolumn.Resizable = System.Windows.Forms.DataGridViewTriState.False;
this.iconcolumn.Width = 24;
//
// textcolumn
//
this.textcolumn.HeaderText = "Text";
this.textcolumn.Name = "textcolumn";
this.textcolumn.ReadOnly = true;
//
// ErrorsForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@ -129,7 +154,7 @@ namespace CodeImp.DoomBuilder.Windows
this.Controls.Add(this.close);
this.Controls.Add(this.clearlist);
this.Controls.Add(this.copyselected);
this.Controls.Add(this.list);
this.Controls.Add(this.grid);
this.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
@ -137,8 +162,10 @@ namespace CodeImp.DoomBuilder.Windows
this.Name = "ErrorsForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Errors and Warnings";
this.Shown += new System.EventHandler(this.ErrorsForm_Shown);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ErrorsForm_FormClosing);
this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.ErrorsForm_HelpRequested);
((System.ComponentModel.ISupportInitialize)(this.grid)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -146,13 +173,13 @@ namespace CodeImp.DoomBuilder.Windows
#endregion
private System.Windows.Forms.ListView list;
private System.Windows.Forms.Button copyselected;
private System.Windows.Forms.Button clearlist;
private System.Windows.Forms.Button close;
private System.Windows.Forms.ColumnHeader colmessage;
private System.Windows.Forms.ImageList images;
private System.Windows.Forms.Timer checkerrors;
private System.Windows.Forms.CheckBox checkshow;
private System.Windows.Forms.DataGridView grid;
private System.Windows.Forms.DataGridViewImageColumn iconcolumn;
private System.Windows.Forms.DataGridViewTextBoxColumn textcolumn;
}
}

View file

@ -46,7 +46,6 @@ namespace CodeImp.DoomBuilder.Windows
public ErrorsForm()
{
InitializeComponent();
list.Items.Clear();
FillList();
checkerrors.Start();
checkshow.Checked = General.Settings.ShowErrorsWindow;
@ -60,18 +59,21 @@ namespace CodeImp.DoomBuilder.Windows
private void FillList()
{
// Fill the list with the items we don't have yet
list.BeginUpdate();
General.ErrorLogger.HasChanged = false;
List<ErrorItem> errors = General.ErrorLogger.GetErrors();
int startindex = list.Items.Count;
int startindex = grid.Rows.Count;
for(int i = startindex; i < errors.Count; i++)
{
ErrorItem e = errors[i];
int icon = (e.type == ErrorType.Error) ? 0 : 1;
ListViewItem item = new ListViewItem(e.message, icon);
list.Items.Add(item);
Image icon = (e.type == ErrorType.Error) ? Properties.Resources.ErrorLarge : Properties.Resources.WarningLarge;
int index = grid.Rows.Add();
DataGridViewRow row = grid.Rows[index];
row.Cells[0].Value = icon;
row.Cells[0].Style.Alignment = DataGridViewContentAlignment.TopCenter;
row.Cells[0].Style.Padding = new Padding(0, 5, 0, 0);
row.Cells[1].Value = e.message;
row.Cells[1].Style.WrapMode = DataGridViewTriState.True;
}
list.EndUpdate();
}
#endregion
@ -105,20 +107,23 @@ namespace CodeImp.DoomBuilder.Windows
private void clearlist_Click(object sender, EventArgs e)
{
General.ErrorLogger.Clear();
list.Items.Clear();
grid.Rows.Clear();
}
// Copy selection
private void copyselected_Click(object sender, EventArgs e)
{
StringBuilder str = new StringBuilder("");
if(list.SelectedItems.Count > 0)
if(grid.SelectedCells.Count > 0)
{
Clipboard.Clear();
foreach(ListViewItem lvi in list.SelectedItems)
foreach(DataGridViewCell c in grid.SelectedCells)
{
if(str.Length > 0) str.Append("\r\n");
str.Append(lvi.Text);
if(c.ValueType != typeof(Image))
{
if(str.Length > 0) str.Append("\r\n");
str.Append(c.Value.ToString());
}
}
Clipboard.SetText(str.ToString());
}
@ -132,5 +137,12 @@ namespace CodeImp.DoomBuilder.Windows
}
#endregion
private void ErrorsForm_Shown(object sender, EventArgs e)
{
if(grid.Rows.Count > 0)
grid.Rows[0].Selected = false;
}
}
}

View file

@ -117,65 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="list.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="images.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="images.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACY
CgAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEgEAARIBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFI
AwABEgMAAQEBAAEgBQABQAEUKgABFwIBAR4BLgIBAUUBNAICAVEBKAIBATsBDQIBARD/AAUAAScCAQE4
AVECCgGdAWIBIQElAdkBagFAAVgB7wFsAUMBZgHyAWwBNwFKAesBXgIYAcoBRwIEAX4BFAIBARr0AAEE
AgEBBAFIAgUBgAF+AWQBfwH2AjkBpQH/AQoBCQGWAf8CAwGeAf8CBwGuAf8CDQG/Af8CIgHTAf8BYgFg
AeIB/wFlASUBKgHdATACAQFKEAABFwIBAR4BKgIBAT4BLQIBAUQBLQIBAUMBLQIBAUMBLQIBAUMBLAIB
AUIBLAIBAUIBLAIBAUIBLAIBAUEBKwIBAUABKwIBAT8BKgIBAT4BKgIBAT0BKgIBAT0BIgIBATCgAAFL
AgYBiwFzAXIBvwH/AgMBhwH/AgMBiwH/AgQBlQH/AQkBCAGfAf8BDQEMAawB/wIRAbkB/wIQAcYB/wIP
AdUB/wIvAeUB/wF6AU4BaQHxAS8CAQFHDAABVgIOAbABgAFNAU4B6QF5AVEBVAHqAXwBUQFVAeoBfgFQ
AVMB6QGAAVMBVQHpAYEBVAFYAekBgwFYAVwB6QGDAVgBXAHpAX8BUgFXAegBfwFRAVIB6AF9AUsBTAHn
AXoBSwFMAecBeAFKAUsB5wF4AUoBSwHnAVwCFAG+nAABMgICAU0BgQFzAbUB/QIDAY8B/wIDAY4B/wIU
AY8B/wIDAZMB/wIGAZ4B/wIKAacB/wIKAbIB/wIcAbwB/wIaAcMB/wIQAdIB/wIvAeAB/wFkASQBKAHb
ARICAQEWCAABKwIBAT8BdQJBAeQBXQH1Av8BVgHyAv8BVwHuAv8BVQHrAv8BUwHvAv8BSAGgAb4B/wFb
AYQBlAH/AVgB2QL/AVgB4AL/AVkB3wL/AVkB4AL/AU8B4AL/AZoB6QL/AUYCBAF9mAABCQIBAQoBXAIV
AcECFwGkAf8CAwGXAf8CQgGhAf8CogGoAf8CSQGVAf8CAwGYAf8CAwGjAf8CGwGsAf8CtQHVAf8CqQHW
Af8BGwEaAb8B/wILAckB/wFiAWAB1QH/AUMCAwFzDAABQQIDAW4BjwHvAv8BGQHiAv8BIwHeAv8BHwHZ
Av8BGgHdAv8BFgFDAU4B/wE0ATEBLgH/ASoBvQHvAf8BHgHKAv8BJAHFAv8BHwHFAv8BNwHLAv8BagIr
AdkBDQIBAQ+YAAE0AgIBUQF7AVgBdQH0ARgBGQGnAf8CAwGfAf8CZAGwAf8CwQG3Af8CrQGqAf8CRgGY
Af8CFgGcAf8CjgGuAf8C1gHKAf8CxAHXAf8BIwEiAbgB/wILAbkB/wIhAcIB/wFaARQBFQHBDAABCQIB
AQoBZgIiAdIBQgHrAv8BGAHiAv8BHgHeAv8BGAHhAv8BNwHQAesB/wFAAcEB1wH/ARMBygL/ARQBywL/
ARgBxgL/AQ4BwAL/AaQB5gL/ATcCAgFZnAABTwIIAZcBbQFsAcAB/wEwATEBsgH/AhoBqgH/AgUBowH/
Am4BtAH/Ar4BtwH/AqgBqwH/ApEBowH/AqwBpAH/ApoBrgH/AicBqwH/AQYBBQGqAf8CDAGtAf8CCQGu
Af8BZAErATQB5BAAATICAgFOAbYB7AHtAf4BGQHsAv8BHwHlAv8BHQHoAv8BJQFkAW8B/wFEAVMBUQH/
ASQBvAHmAf8BEgHTAv8BDAHKAv8BSwHXAv8BWwITAbwBBAIBAQScAAFaAhABtAJiAcEB/wE2ATcBuQH/
AjgBtgH/AiEBrgH/AgQBpQH/AnYBtwH/Ar4BuQH/ArEBrQH/ApkBpAH/Ah4BngH/AgMBoAH/AgcBoQH/
AgcBogH/AgMBoAH/AWsBOAFNAe0QAAECAwEBWAIPAbMBfgP/ATAB/AL/ATMB+QL/ASUBRQFKAf8BLwEm
ASUB/wEtAb8B4AH/ARkB3wL/ARIB0wL/Aa4BsQG0AfgBJwIBATigAAFUAgsBowFqAWkBxQH/AjsBwgH/
Aj0BvgH/ATcBNgG4Af8BQQFAAbgB/wKsAdAB/wLOAckB/wK/AboB/wKqAa0B/wJGAZoB/wIDAZkB/wID
AZwB/wIDAZoB/wIDAZgB/wFnATEBPAHnFAABIgIBAS8BrgKcAfUBQgP/AUAD/wFDAVwBXwH/ATwBMwEy
Af8BQAHJAeAB/wEhAfAC/wGBAfkC/wFPAgkBmaQAAT0CAwFmAYABYwGZAfkCPwHLAf8CQAHFAf8CVQHI
Af8C0wHtAf8C/AHyAf8CxQHZAf8BkAGRAcIB/wLEAcAB/wK0AbIB/wJNAZsB/wIJAZcB/wEJAQgBlwH/
AhMBmgH/AV8BGAEZAcsYAAFNAgcBjwGeA/8BLAP/AVABZgFpAf8BRAI8Af8BRQHKAd0B/wFCAf4C/wGK
AVwBXQHpARcCAQEdpAABEgIBARcBaAIlAdUCSwHRAf8CQQHOAf8CtAHsBf8C5AH1Af8CWgHFAf8CNAG3
Af8CjAHFAf8CzgHHAf8CtwG4Af8CPgGjAf8CIAGbAf8CXgG2Af8BSQIFAYUYAAESAgEBFwF9AkgB5AFC
A/8BVwFpAWsB/wFXAUQBQwH/AUUBzQHdAf8BpwP/AUMCAwFzrAABQQIDAW4BgQF/AdAB/wFFAUYB1wH/
AWYBZwHbAf8CvwHxAf8BagFpAdUB/wI+AcQB/wJAAcEB/wI9AbwB/wKLAcgB/wJ5Ab0B/wIzAa4B/wIz
AaoB/wF7AUoBVAHsARoCAQEjHAABPwIDAWkBrAP/AUgBxgHMAf8BWQGyAbcB/wFdAfMC/wFnASIBIwHR
AQoCAQELrAABCAIBAQkBWgIRAbYBcgFxAdYB/wJJAdsB/wJKAdYB/wJJAdIB/wJLAc8B/wJIAcsB/wJF
AcYB/wI/AcEB/wI5AbsB/wI6AbgB/wGVAY8BxQH+ATwCAwFkIAABBwIBAQcBYwIbAcsBRgP/AQYD/wGm
Au0B/gEzAgIBT7QAARECAQEVAVgCEAGzAYcBhQHVAf8CWAHcAf8CTQHbAf8CTAHYAf8CSgHUAf8BRgFH
Ac8B/wJEAcsB/wFdAVwBzgH/AYoBagGEAfUBQQIDAW8oAAEuAgEBRgGhAdEB0wH8AUsD/wFYAg8BsgED
AgEBArgAAQcCAQEHAT4CAwFnAWMBHAEeAcwBhQFeAX4B8wGAAX8BxgH+AX4BfQHXAf8BfwF4Ab4B/AF4
AUMBUQHqAVcCDgGrASgCAQE5MAABVQIMAaYBnAJ+AfIBIQIBAS3/AP8A8gABQgFNAT4HAAE+AwABKAMA
AUgDAAESAwABAQEAAQEFAAHYFwAD/wEAAfwBHwL/AfAHAAHwAQcC/wHwBwABwAEDAcABAAEwBwABwAEB
AcABAAEwBwABgAEAAcABAAEwCQAB4AEAATAJAAHgAQABcAkAAfABAAFwCQAB8AEAAfAJAAH4AQEB8AkA
AfwBAQHwCQAB/AEDAfAHAAGAAQAB/gEDAfAHAAGAAQEB/gEHAfAHAAHAAQMB/wEHAfAHAAHgAQcB/wGP
AfAHAAT/AfAHAAT/AfAHAAs=
</value>
</data>
<metadata name="copyselected.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -188,6 +129,18 @@
<metadata name="checkerrors.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>103, 17</value>
</metadata>
<metadata name="checkshow.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="grid.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="iconcolumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="textcolumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>