From aecd017b19e5e5d54247a831fb914a51e4c4291a Mon Sep 17 00:00:00 2001 From: MaxED Date: Sat, 26 Nov 2016 00:02:56 +0000 Subject: [PATCH] Added, Errors and Warnings window: most of warnings/errors related to (G)ZDoom text lump parsing can now be double-clicked to show warning/error source in the Script Editor. Fixed: some map format conversion errors were never displayed, because errors list was cleared after performing map conversion. Fixed: 3d floor indicators in 2D modes were not updated after leaving Visual mode. Fixed: some UDMF-only interface buttons were never removed after converting map format from UDMF. --- Source/Core/Builder.csproj | 4 + .../Controls/Scripting/ScriptEditorPanel.cs | 83 ++++-- Source/Core/Data/WADReader.cs | 2 +- Source/Core/General/ErrorItem.cs | 277 +++++++++++++++++- Source/Core/General/ErrorLogger.cs | 22 +- Source/Core/General/MapManager.cs | 15 +- Source/Core/Map/Linedef.cs | 18 +- Source/Core/Properties/Resources.Designer.cs | 28 ++ Source/Core/Properties/Resources.resx | 12 + Source/Core/Resources/ErrorLarge.png | Bin 1016 -> 1838 bytes Source/Core/Resources/ErrorLargeMapObject.png | Bin 0 -> 1974 bytes Source/Core/Resources/ErrorLargeText.png | Bin 0 -> 1884 bytes Source/Core/Resources/WarningLarge.png | Bin 749 -> 1545 bytes .../Core/Resources/WarningLargeMapObject.png | Bin 0 -> 1765 bytes Source/Core/Resources/WarningLargeText.png | Bin 0 -> 1666 bytes Source/Core/VisualModes/VisualMode.cs | 3 + Source/Core/VisualModes/VisualThing.cs | 6 +- Source/Core/Windows/ErrorsForm.Designer.cs | 32 +- Source/Core/Windows/ErrorsForm.cs | 59 +++- Source/Core/Windows/ErrorsForm.resx | 9 - Source/Core/Windows/ScriptEditorForm.cs | 12 + Source/Core/ZDoom/DecorateParser.cs | 26 +- Source/Core/ZDoom/ZDTextParser.cs | 38 ++- .../AutomapMode/Interface/MenusForm.cs | 6 +- .../BuilderEffects/Interface/MenusForm.cs | 4 + .../ClassicModes/EditSelectionMode.cs | 4 + .../BuilderModes/ClassicModes/LinedefsMode.cs | 9 +- .../BuilderModes/ClassicModes/SectorsMode.cs | 4 +- .../BuilderModes/ClassicModes/ThingsMode.cs | 3 +- .../BuilderModes/ClassicModes/VerticesMode.cs | 15 +- .../Interface/CurveLinedefsOptionsPanel.cs | 4 + .../Interface/DrawCurveOptionsPanel.cs | 4 + .../Interface/DrawEllipseOptionsPanel.cs | 4 + .../Interface/DrawLineOptionsPanel.cs | 4 + .../Interface/DrawRectangleOptionsPanel.cs | 4 + .../BuilderModes/Interface/MenusForm.cs | 2 + .../Plugins/VisplaneExplorer/InterfaceForm.cs | 4 + 37 files changed, 601 insertions(+), 116 deletions(-) create mode 100644 Source/Core/Resources/ErrorLargeMapObject.png create mode 100644 Source/Core/Resources/ErrorLargeText.png create mode 100644 Source/Core/Resources/WarningLargeMapObject.png create mode 100644 Source/Core/Resources/WarningLargeText.png diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj index 12049888..52a65d93 100644 --- a/Source/Core/Builder.csproj +++ b/Source/Core/Builder.csproj @@ -1191,6 +1191,8 @@ + + @@ -1210,6 +1212,8 @@ + + diff --git a/Source/Core/Controls/Scripting/ScriptEditorPanel.cs b/Source/Core/Controls/Scripting/ScriptEditorPanel.cs index e3117b16..e9b0d40f 100644 --- a/Source/Core/Controls/Scripting/ScriptEditorPanel.cs +++ b/Source/Core/Controls/Scripting/ScriptEditorPanel.cs @@ -24,6 +24,7 @@ using System.Windows.Forms; using CodeImp.DoomBuilder.Compilers; using CodeImp.DoomBuilder.Config; using CodeImp.DoomBuilder.Controls.Scripting; +using CodeImp.DoomBuilder.Data; using CodeImp.DoomBuilder.Data.Scripting; using CodeImp.DoomBuilder.Windows; using ScintillaNET; @@ -213,7 +214,7 @@ namespace CodeImp.DoomBuilder.Controls if(File.Exists(settings.Filename)) { // Load this! - ScriptFileDocumentTab t = OpenFile(settings.Filename); + ScriptFileDocumentTab t = OpenFile(settings.Filename, settings.ScriptType); t.SetViewSettings(settings); //mxd if(settings.IsActiveTab) activetab = t; } @@ -621,7 +622,43 @@ namespace CodeImp.DoomBuilder.Controls // Show/hide panel splitter.Panel2Collapsed = (errorlist.Items.Count == 0); } - + + //mxd + internal void ShowError(TextResourceErrorItem item) + { + // Resource exists? + DataReader dr = null; + foreach(DataReader reader in General.Map.Data.Containers) + { + if(reader.Location.location == item.ResourceLocation) + { + dr = reader; + break; + } + } + + // Target lump exists? + if(dr == null || !dr.FileExists(item.LumpName, item.LumpIndex)) return; + + TextResourceData trd = new TextResourceData(dr, dr.LoadFile(item.LumpName, item.LumpIndex), item.LumpName, item.LumpIndex, false); + var targettab = OpenResource(new ScriptResource(trd, item.ScriptType)); + + // Go to error line + if(targettab != null && item.LineNumber != CompilerError.NO_LINE_NUMBER) + targettab.MoveToLine(item.LineNumber); + } + + //mxd + /*internal void ShowError(TextFileErrorItem item) + { + // File exists? + ScriptDocumentTab targettab = OpenFile(item.Filename, item.ScriptType); + + // Go to error line + if(targettab != null && item.LineNumber != CompilerError.NO_LINE_NUMBER) + targettab.MoveToLine(item.LineNumber); + }*/ + // This writes all explicitly opened files to the configuration public void WriteOpenFilesToConfiguration() { @@ -843,7 +880,7 @@ namespace CodeImp.DoomBuilder.Controls } // This opens the given file, returns null when failed - public ScriptFileDocumentTab OpenFile(string filename) + public ScriptFileDocumentTab OpenFile(string filename, ScriptType scripttype) { //mxd. Check if we already have this file opened foreach(var tab in tabs.TabPages) @@ -861,33 +898,43 @@ namespace CodeImp.DoomBuilder.Controls ScriptConfiguration foundconfig = new ScriptConfiguration(); // Find the most suitable script configuration to use - foreach(ScriptConfiguration cfg in scriptconfigs) + if(scripttype == ScriptType.UNKNOWN) { - foreach(string ext in cfg.Extensions) + foreach(ScriptConfiguration cfg in scriptconfigs) { - // Use this configuration if the extension matches - if(filename.EndsWith("." + ext, StringComparison.OrdinalIgnoreCase)) + foreach(string ext in cfg.Extensions) { - foundconfig = cfg; - break; + // Use this configuration if the extension matches + if(filename.EndsWith("." + ext, StringComparison.OrdinalIgnoreCase)) + { + foundconfig = cfg; + break; + } } } } + else + { + foundconfig = General.GetScriptConfiguration(scripttype); + } // Create new document ScriptFileDocumentTab t = new ScriptFileDocumentTab(this, foundconfig); if(t.Open(filename)) { - //mxd - ScriptType st = t.VerifyScriptType(); - if(st != ScriptType.UNKNOWN) + //mxd. Try to determine script type from file contents... + if(scripttype == ScriptType.UNKNOWN) { - foreach(ScriptConfiguration cfg in scriptconfigs) + ScriptType st = t.VerifyScriptType(); + if(st != ScriptType.UNKNOWN) { - if(cfg.ScriptType == st) + foreach(ScriptConfiguration cfg in scriptconfigs) { - t.ChangeScriptConfig(cfg); - break; + if(cfg.ScriptType == st) + { + t.ChangeScriptConfig(cfg); + break; + } } } } @@ -1137,7 +1184,7 @@ namespace CodeImp.DoomBuilder.Controls { if(!openedfiles.Contains(name)) { - ScriptFileDocumentTab t = OpenFile(name); + ScriptFileDocumentTab t = OpenFile(name, ScriptType.UNKNOWN); // Apply document settings if(General.Map.Options.ScriptDocumentSettings.ContainsKey(t.Filename)) @@ -1484,7 +1531,7 @@ namespace CodeImp.DoomBuilder.Controls // If we don't have the script opened, see if we can find the file and open the script if(!foundscript && File.Exists(err.filename)) { - ScriptDocumentTab t = OpenFile(err.filename); + ScriptDocumentTab t = OpenFile(err.filename, ScriptType.UNKNOWN); if(t != null) t.MoveToLine(err.linenumber); } diff --git a/Source/Core/Data/WADReader.cs b/Source/Core/Data/WADReader.cs index 028f9c4f..7b94b696 100644 --- a/Source/Core/Data/WADReader.cs +++ b/Source/Core/Data/WADReader.cs @@ -1255,7 +1255,7 @@ namespace CodeImp.DoomBuilder.Data int index = file.FindLumpIndex(lumpname); if(index == -1) { - errors.Add(new CompilerError { description = "Lump \"" + lumpname + "\" does not exist", filename = this.location.GetDisplayName() }); + errors.Add(new CompilerError("Lump \"" + lumpname + "\" does not exist", location.GetDisplayName())); return false; } diff --git a/Source/Core/General/ErrorItem.cs b/Source/Core/General/ErrorItem.cs index 61d717f2..bc2caa70 100644 --- a/Source/Core/General/ErrorItem.cs +++ b/Source/Core/General/ErrorItem.cs @@ -16,22 +16,285 @@ #region ================== Namespaces +using System; +using System.Collections.Generic; +using System.Drawing; +using CodeImp.DoomBuilder.Config; +using CodeImp.DoomBuilder.Data; +using CodeImp.DoomBuilder.Editing; +using CodeImp.DoomBuilder.Geometry; +using CodeImp.DoomBuilder.Map; + #endregion namespace CodeImp.DoomBuilder { - internal struct ErrorItem + #region ================== ErrorItem (mxd) + + public class ErrorItem { - public ErrorType type; - public string message; + protected ErrorType type; + protected string description; + protected Image icon; - internal ErrorItem(ErrorType type, string message) + public ErrorType Type { get { return type; } } + public string Description { get { return description; } } + public Image Icon { get { return icon; } } + internal virtual bool IsShowable { get { return false; } } + + public ErrorItem(ErrorType type, string description) { this.type = type; - this.message = message; + this.description = description; + this.icon = GetIcon(); + } + + protected virtual Image GetIcon() + { + return (type == ErrorType.Error ? Properties.Resources.ErrorLarge : Properties.Resources.WarningLarge); + } + + internal virtual void ShowSource() { } + } + + #endregion + + #region ================== MapElementErrorItem (mxd) + + public class MapElementErrorItem : ErrorItem + { + private MapElement target; + private RectangleF zoomarea; + private string targetmodename; + + internal override bool IsShowable { get { return true; } } + + public MapElementErrorItem(ErrorType type, MapElement target, string description) : base(type, description) + { + this.target = target; + + // Calculate zoom area + List points = new List(); + RectangleF area = MapSet.CreateEmptyArea(); + + // Add all points to a list + if(target is Vertex) + { + points.Add((target as Vertex).Position); + targetmodename = "VerticesMode"; + } + else if(target is Linedef) + { + points.Add((target as Linedef).Start.Position); + points.Add((target as Linedef).End.Position); + targetmodename = "LinedefsMode"; + } + else if(target is Sidedef) + { + points.Add((target as Sidedef).Line.Start.Position); + points.Add((target as Sidedef).Line.End.Position); + targetmodename = "LinedefsMode"; + } + else if(target is Sector) + { + Sector s = (target as Sector); + foreach(Sidedef sd in s.Sidedefs) + { + points.Add(sd.Line.Start.Position); + points.Add(sd.Line.End.Position); + } + targetmodename = "SectorsMode"; + } + else if(target is Thing) + { + Thing t = (target as Thing); + Vector2D p = t.Position; + points.Add(p); + points.Add(p + new Vector2D(t.Size * 2.0f, t.Size * 2.0f)); + points.Add(p + new Vector2D(t.Size * 2.0f, -t.Size * 2.0f)); + points.Add(p + new Vector2D(-t.Size * 2.0f, t.Size * 2.0f)); + points.Add(p + new Vector2D(-t.Size * 2.0f, -t.Size * 2.0f)); + targetmodename = "ThingsMode"; + } + else + { + General.Fail("Unknown object given to zoom in on."); + } + + // Make a view area from the points + foreach(Vector2D p in points) + area = MapSet.IncreaseArea(area, p); + + // Make the area square, using the largest side + if(area.Width > area.Height) + { + float delta = area.Width - area.Height; + area.Y -= delta * 0.5f; + area.Height += delta; + } + else + { + float delta = area.Height - area.Width; + area.X -= delta * 0.5f; + area.Width += delta; + } + + // Add padding + area.Inflate(100f, 100f); + + // Store + this.zoomarea = area; + } + + internal override void ShowSource() + { + // Switch to appropriate mode... + if(General.Editing.Mode.GetType().Name != targetmodename) + { + // Leave any volatile mode + General.Editing.CancelVolatileMode(); + General.Editing.ChangeMode(targetmodename); + } + + // Select map element if it still exists + if(target != null && !target.IsDisposed) + { + General.Map.Map.ClearAllSelected(); + + if(target is Vertex) + { + ((Vertex)target).Selected = true; + } + else if(target is Sidedef) + { + ((Sidedef)target).Line.Selected = true; + } + else if(target is Linedef) + { + ((Linedef)target).Selected = true; + } + else if(target is Sector) + { + Sector s = (Sector)target; + ((ClassicMode)General.Editing.Mode).SelectMapElement(s); + foreach(Sidedef sd in s.Sidedefs) sd.Line.Selected = true; + } + else if(target is Thing) + { + ((Thing)target).Selected = true; + } + else + { + throw new NotImplementedException("Unknown MapElement type!"); + } + } + + // Show area + ClassicMode editmode = (General.Editing.Mode as ClassicMode); + editmode.CenterOnArea(zoomarea, 0.6f); + } + + protected override Image GetIcon() + { + return (type == ErrorType.Error ? Properties.Resources.ErrorLargeMapObject : Properties.Resources.WarningLargeMapObject); } } - + + #endregion + + #region ================== TextResourceErrorItem (mxd) + + public class TextResourceErrorItem : ErrorItem + { + private string resourcelocation; + private ScriptType scripttype; + private string lumpname; + private int lumpindex; + private int linenumber; + + public string ResourceLocation { get { return resourcelocation; } } + public ScriptType ScriptType { get { return scripttype; } } + public string LumpName { get { return lumpname; } } + public int LumpIndex { get { return lumpindex; } } + public int LineNumber { get { return linenumber; } } + + internal override bool IsShowable { get { return true; } } + + internal TextResourceErrorItem(ErrorType type, ScriptType scripttype, DataLocation resourcelocation, string lumpname, int lumpindex, int linenumber, string description) + : base(type, description) + { + this.resourcelocation = resourcelocation.location; + this.scripttype = scripttype; + this.lumpname = lumpname; + this.lumpindex = lumpindex; + this.linenumber = linenumber; + } + + internal override void ShowSource() + { + // Only when a map is loaded + if(General.Map == null || General.Map.Data == null) return; + + // Show Script Editor + General.Map.ShowScriptEditor(); + + // Show in ScriptEditor + General.Map.ScriptEditor.DisplayError(this); + } + + protected override Image GetIcon() + { + return (type == ErrorType.Error ? Properties.Resources.ErrorLargeText : Properties.Resources.WarningLargeText); + } + } + + + #endregion + + #region ================== TextFileErrorItem (mxd) + + /*public class TextFileErrorItem : ErrorItem + { + private string filepathname; + private ScriptType scripttype; + private int linenumber; + + public string Filename { get { return filepathname; } } + public ScriptType ScriptType { get { return scripttype; } } + public int LineNumber { get { return linenumber; } } + + internal override bool IsShowable { get { return true; } } + + public TextFileErrorItem(ErrorType type, ScriptType scripttype, string filepathname, int linenumber, string description) + : base(type, description) + { + this.filepathname = filepathname; + this.scripttype = scripttype; + this.linenumber = linenumber; + } + + internal override void ShowSource() + { + // Only when a map is loaded + if(General.Map == null || General.Map.Data == null) return; + + // Show Script Editor + General.Map.ShowScriptEditor(); + + // Show in ScriptEditor + General.Map.ScriptEditor.DisplayError(this); + } + + protected override Image GetIcon() + { + return (type == ErrorType.Error ? Properties.Resources.ErrorLargeText : Properties.Resources.WarningLargeText); + } + }*/ + + #endregion + + #region ================== ErrorType + public enum ErrorType { /// @@ -44,4 +307,6 @@ namespace CodeImp.DoomBuilder /// Warning } + + #endregion } diff --git a/Source/Core/General/ErrorLogger.cs b/Source/Core/General/ErrorLogger.cs index 354e396a..be518fe6 100644 --- a/Source/Core/General/ErrorLogger.cs +++ b/Source/Core/General/ErrorLogger.cs @@ -76,23 +76,23 @@ namespace CodeImp.DoomBuilder } // This adds a new error - public void Add(ErrorType type, string message) + public void Add(ErrorType type, string message) { Add(new ErrorItem(type, message)); } + public void Add(ErrorItem error) //mxd { - string prefix = ""; - lock(threadlock) { //mxd. Don't add duplicate messages - if(errors.Count == 0 || message != errors[errors.Count - 1].message || type != errors[errors.Count - 1].type) + if(errors.Count == 0 || error.Description != errors[errors.Count - 1].Description || error.Type != errors[errors.Count - 1].Type) { - errors.Add(new ErrorItem(type, message)); - switch(type) + errors.Add(error); + string prefix = ""; + switch(error.Type) { case ErrorType.Error: erroradded = true; prefix = "ERROR: "; #if DEBUG - DebugConsole.WriteLine(DebugMessageType.ERROR, message); + DebugConsole.WriteLine(DebugMessageType.ERROR, error.Description); #endif break; @@ -100,17 +100,17 @@ namespace CodeImp.DoomBuilder warningadded = true; prefix = "WARNING: "; #if DEBUG - DebugConsole.WriteLine(DebugMessageType.WARNING, message); + DebugConsole.WriteLine(DebugMessageType.WARNING, error.Description); #endif break; } changed = true; - General.WriteLogLine(prefix + message); + General.WriteLogLine(prefix + error.Description); General.MainWindow.SetWarningsCount(errors.Count, erroradded); //mxd } - //mxd. But still blink the indicator on errors - else if(type == ErrorType.Error) + // But still blink the indicator on errors + else if(error.Type == ErrorType.Error) { General.MainWindow.SetWarningsCount(errors.Count, true); } diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs index 51acc602..bbba1e85 100644 --- a/Source/Core/General/MapManager.cs +++ b/Source/Core/General/MapManager.cs @@ -1053,7 +1053,7 @@ namespace CodeImp.DoomBuilder filetitle = Path.GetFileName(filepathname); // Reload resources - ReloadResources(); + ReloadResources(true); } try @@ -2208,7 +2208,7 @@ namespace CodeImp.DoomBuilder DebugConsole.Clear(); #endif - ReloadResources(); + ReloadResources(true); if(General.ErrorLogger.IsErrorAdded) { @@ -2223,7 +2223,7 @@ namespace CodeImp.DoomBuilder } - internal void ReloadResources() + internal void ReloadResources(bool clearerrors) //mxd. clearerrors flag { // Keep old display info StatusInfo oldstatus = General.MainWindow.Status; @@ -2242,8 +2242,8 @@ namespace CodeImp.DoomBuilder GC.WaitForPendingFinalizers(); GC.Collect(); //mxd - // Clear errors - General.ErrorLogger.Clear(); + // Clear errors? + if(clearerrors) General.ErrorLogger.Clear(); // Reload game configuration General.WriteLogLine("Reloading game configuration..."); @@ -2310,6 +2310,9 @@ namespace CodeImp.DoomBuilder // Stop data manager data.Dispose(); + //mxd. Clear errors + General.ErrorLogger.Clear(); + // Apply new options this.options = optionsform.Options; @@ -2383,7 +2386,7 @@ namespace CodeImp.DoomBuilder map.UpdateCustomLinedefColors(); // Reload resources - ReloadResources(); + ReloadResources(false); // Update interface General.MainWindow.SetupInterface(); diff --git a/Source/Core/Map/Linedef.cs b/Source/Core/Map/Linedef.cs index bd7be0bb..99978cd3 100644 --- a/Source/Core/Map/Linedef.cs +++ b/Source/Core/Map/Linedef.cs @@ -593,7 +593,8 @@ namespace CodeImp.DoomBuilder.Map //Convert tag to arg0 if(tags[0] < General.Map.FormatInterface.MinArgument || tags[0] > General.Map.FormatInterface.MaxArgument) { - General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "]."); + string message = "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "]."; + General.ErrorLogger.Add(new MapElementErrorItem(ErrorType.Warning, this, message)); } else { @@ -621,18 +622,21 @@ namespace CodeImp.DoomBuilder.Map if(tags[0] != 0) { - General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because target sector tag (arg0) is greater than " + General.Map.FormatInterface.MaxArgument + "."); + string message = "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because target sector tag (arg0) is greater than " + General.Map.FormatInterface.MaxArgument + "."; + General.ErrorLogger.Add(new MapElementErrorItem(ErrorType.Warning, this, message)); } } else if(args[0] < General.Map.FormatInterface.MinArgument) { - General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert arg0 (" + args[0] + "), because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "]."); + string message = "Linedef " + Index + ": unable to convert arg0 (" + args[0] + "), because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "]."; + General.ErrorLogger.Add(new MapElementErrorItem(ErrorType.Warning, this, message)); } else if(tags[0] > General.Map.FormatInterface.MinArgument) // Convert to LineID? { if(tags[0] > General.Map.FormatInterface.MaxArgument) { - General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because linedef tag is greater than " + General.Map.FormatInterface.MaxArgument + "."); + string message = "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because linedef tag is greater than " + General.Map.FormatInterface.MaxArgument + "."; + General.ErrorLogger.Add(new MapElementErrorItem(ErrorType.Warning, this, message)); } else { @@ -647,7 +651,8 @@ namespace CodeImp.DoomBuilder.Map { if(action != 0) { - General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because linedef already has an action."); + string message = "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because linedef already has an action."; + General.ErrorLogger.Add(new MapElementErrorItem(ErrorType.Warning, this, message)); } else // Convert to Line_SetIdentification { @@ -662,7 +667,8 @@ namespace CodeImp.DoomBuilder.Map } else if(tags[0] < General.Map.FormatInterface.MinArgument) { - General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "]."); + string message = "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "]."; + General.ErrorLogger.Add(new MapElementErrorItem(ErrorType.Warning, this, message)); } break; } diff --git a/Source/Core/Properties/Resources.Designer.cs b/Source/Core/Properties/Resources.Designer.cs index 643f6f6a..35ba6881 100644 --- a/Source/Core/Properties/Resources.Designer.cs +++ b/Source/Core/Properties/Resources.Designer.cs @@ -291,6 +291,20 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap ErrorLargeMapObject { + get { + object obj = ResourceManager.GetObject("ErrorLargeMapObject", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap ErrorLargeText { + get { + object obj = ResourceManager.GetObject("ErrorLargeText", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap Expand { get { object obj = ResourceManager.GetObject("Expand", resourceCulture); @@ -1145,6 +1159,20 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap WarningLargeMapObject { + get { + object obj = ResourceManager.GetObject("WarningLargeMapObject", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap WarningLargeText { + get { + object obj = ResourceManager.GetObject("WarningLargeText", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap WarningOff { get { object obj = ResourceManager.GetObject("WarningOff", resourceCulture); diff --git a/Source/Core/Properties/Resources.resx b/Source/Core/Properties/Resources.resx index 6b41d4fb..e02f7ac0 100644 --- a/Source/Core/Properties/Resources.resx +++ b/Source/Core/Properties/Resources.resx @@ -595,4 +595,16 @@ ..\Resources\Check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ErrorLargeMapObject.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ErrorLargeText.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\WarningLargeMapObject.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\WarningLargeText.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Source/Core/Resources/ErrorLarge.png b/Source/Core/Resources/ErrorLarge.png index 1b1368fdacd947e031adc4b727fe455418a56fa9..07d5f7eb11df0bb54b50cbb16a46b015473285cf 100644 GIT binary patch literal 1838 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 v&m>(7YuX#HTwfC)c+@!I>c)`V(oq7KOBTpNz literal 0 HcmV?d00001 diff --git a/Source/Core/Resources/ErrorLargeText.png b/Source/Core/Resources/ErrorLargeText.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ff2a55d3dd182b6e215d3bcd09ec9bda26b391 GIT binary patch literal 1884 zcmaJ?X;c$u6b-Gh0c9j zlrRL~A!-<4l364vjX?*zIAj`=LuY$>0CXyiMWK39XdDua0b;i&75I1&v1n>278LOV zKgPmVT%rs`RUn0;)oRIF1{qPuVO$P}LZwsabP|RjX_AzvSVvN7oQDyb$u5l&+*f(=Q!1oK&-P{}#>in-V z(d?{+(%d3q=jk{1_I1vb@2X8-)+gWKJ9qKXSLLNN6gLyjWr2mlq_!s z5*q2H{vG*jxOuGC%mU{1AC0o?HB|zo+Hj}J(JsIK#8h^EiouZIThKeyP?f#iZD6`& z^_ez^D+|DV&WoED zZl36RqD3Y>T9Ij&!`t4R?cq#<*R6+CJ1_AJsKxZwNkfowY5$vav)a=GP|GXcU~(%b z^~L;Rr?F018=`XU=8pMhc9xC66-=q@+~2db_0Yu?9v-(LYtc}D@E%2q>fV$C_wdhQ zc4HI1;e}mW<;0&MQRwN6aWNeoUlohGQ(xnI!{Z)52Dedez#ER<=}M&=4D%a$2fb?M zDwuV*k)UG6zUn5zI9GL81hKKjTr4-w&2?~#YXGJa03T+?!)LQC&eg14#7%rA(QiL_ z((i1$nj1QF`Ld1GIP=%FWa{Vf`=De3R`bGZ=)rdjE=4{FR_F>Bdy3>uwXf zy>7;s?+x|sZWkc>)^Nmk;`mdBSMi46k}v(ZmwYPz@XI=?ABdpcGMeRbr}47`T^9T3 z%li@s-o61^|F+!Ll|FavI`eM)s>*g;y7PaGV@A+wsEcIWSYxo5M>@c&Z>W&}3Y-+v9cW5`~s&n~9VWOjpFN|W8sPEoVFH+M)5c3kbUo+Y4uVPloayx92W$l=4r zvX#dp`ci%gTpDLIv!~%B)|-!aD;{#&Q&v;ZlhvN%)A6*B^e$Qo8K#w<7tXl4!brcS zX+rAmPh{We4lED1pR1$QXIQSfRt$I>Q+teCw9U&mWJO;(_mK5lEZ4A?n6s?&h3;mw w{(xhYN4WQ1%IX^J%JaHq=?%oU1@CNQaMJuoK~u}{I@AA75D?6-@Q?ZFAIk3p4FCWD literal 0 HcmV?d00001 diff --git a/Source/Core/Resources/WarningLarge.png b/Source/Core/Resources/WarningLarge.png index 5a5eea40048ce3a505290f7985a46df101f9a9b7..30417aea4d7bf1e80c0d885ea064fff1e22ab0de 100644 GIT binary patch literal 1545 zcmeAS@N?(olHy`uVBq!ia0vp^58U}fi7AzZCsS=07??FOLn2Bde0{8v^KKTB%1XJkii(hGOE?jkSNl+@ny;uz{4yi0i z)elN7&Mz%W21Z<(GRUd|E9aur#FG4?ko^1{SSSW$A4ng>ktMZm-@_${`Gfq|*q z)5S5Q;?|Za(H( z_p|2pZVV3Ew@eP)f8^h5=yvw3?sawbc>moo@4lq6KdJuqCMapHQ9#S=+_!TVWh9(t zo1n7!;`{e+*|~m*$@Z6R&B+gaxruSr>hm(pw+tTWA9;JO)?tOv;e7V^8#!gC>zOA_ z3KClGEPuQq=8DW$CH?!|<;`;YzOv1lrFZr3w=i#0*W|}Xi$4~|o^*-#2wf!7TcaGb z#V7hj&EdvhTekF+{;y%)Zhd;`s`-bbzB%x%()#q^)R|)$`FsLCtc%1i+$((E^=yMG zv&3c2*jWC2M&5=w=Z+d}y#2VP__A5gz1v(pYZ&8H88$AT*mUU88dYX5uhZTO?uCAw z%H6x1Vg9v8KNQuyPJJ@GxcB4qiuo)oT^BBYUU6Gx=22H>ooN-H9qvD#KI75SpAQ(? zCO3ZP^Rd0(cz`)>o}KoEeC9tjZ}+jz*wLjG?|XES{LY&H2bFJ|+j}nG$uRNETnXWd z^C!x)TK1@?X-IfInK`TSh~Udym&emz=H#Y6&T>y`+A*Ob?Ay6Jm$x4Mnv$Wq=~+Rd z-ntboi@Zwr8SItZJlVAM_K6i!o7Z#RS{Zq2Lff_@0;BU z9d1T1dks8=X7aF2(rKG-8nD=*B5z)_S(iu3w4~31lPurdyx^1I*l_u!Pi$&=4#O9= zM#BuTD=$lql<+LN_Ic+bjR~o&T}sZ<+N-$K8lD|GIAO!3`(ODP*%)kZ2vwLxOL&3` NXHQo@mvv4FO#pBEPbvTa literal 749 zcmVsu*!ys&LpkOSkbP>mLA8Xf%2t$UrJh+P6mbSU&b+LIivhVfX_LSR;Y=LX=*tET+U_ae_jb zmY#f!F{IMztd7lLHE9N&GWobxq0-Qy``8Rii!FiYjZG~f$%=|=S9;7DfUg9Rkx{}B z={!MsSuPwF7E1w+TSvCFb-Y9%5m~GR&h|sVKm-gKx#|^CDBKke4+D(F!PBb(EV}_S zX?do8HN^q@+bPVS1w3b9sw00GArX%kk*H7M#?4!ID5WYzt4yX1>QvUC)n&0Xlc`Tp zGmKoBN=v0u`KB%Ncs#16=23&oH8d}iDH6Aomp~A{!))%h0tNtKy zK4#uGIR!ANEH8vkUkHbdB_>Z%U48%hKg9}#S{4j){$(*hqqJBDnOp;BH(8J$3BbZ# zG&Q%@F1NPuZb_0 zRb7Rbtm_03kL@R;AO?;YoYY0(aMDqD-yJ04IG~FdbrH_0LZ7u`WREB&f~u>lZ|=8u za$kC1%#IGW&Q6ZBbDoJ$oX>6N0=_{m;2-3E%?-G{(>Ax;VRku(jIPnouUy0S*RFyTVxGh@ca@l|anma+05+Wo-q69Pq#iC-41!CB2NEQ>6mVs((264nH zDwadMT8jwvKn4_VQG^!Ih#Z0-A|qn4Ra7K&qoVzzbZ2*e$GrEx@ArLgXN}9lm)PN5 z@HiaKP8iA;W8*CBakRF=-nL%Vd$3_P8WN30B5|l*s)cYt3Pc70LRcCPi6N;XCFv#< zfWuAlQA(oGXi*qjj=&_T1w%5x8jOv@1#k@-sayr2fDDRPsyX2E%4!f$DmdUOridca z@Sp@`=q4=`xhY&C-=vbW6d*Sc2r#fQ0T@E1fB{Za>(~Yk_+FQd%`Mwx5O@zkRUGg` zQqiL201weZ0F&fTlvC+6U?Gb{WwL0C7z+Rzh3ZeHFvwIEkxFM{H-iFvyg)3PRuRV* z^93JcVJi-pfT9{UnXK3ANqRa7(Z*w37K==wk!ds{h9K%v)Tq=zRO<+13VcW>*D5ur z5>W#dMX3x)MmZps>4zi0noqK7-N!Ov1tS}z8Zwncu^ed(C=&fY6ox;cb*LEnobP`M z>m(@}h%AP5NU~OrH7<@|38i84w2%}tsFlW-ne=nxr*^~;g8ED zW66*$?fqA~$F?vJS*D-Ni!DCcA5vqU*J9@O!A%~(zL`iNKS*L|IW2+1oL4z>=#``a zydQCQp%1^&44iRWLUKp-VndtPe z!fM_=Vu5p!Pf3c^WoMQ!nC1KGW)7Cwl&5`3Y`K4Q z#e)XVTla@l4NaXZeeqp;PO`U!UzudRgZy%rTwc3gS0I3E5LmJbU(x zda?H}&snxz8+T0+v?*vrKk{g)7dP$o%NPz=)g9C6moPot{p9iUNh3eZ88I76vln;f z^?4Ce%WZC@>31F)@wk_MW1R!RqyKoV`-RcoA)yh<^r$&2qGq}D>j}`f(nh#|FhkJ|vE@5;rnFD!3V_s%D^+`)=O`})g zw0_Fd!Ml623KlX_+nYN&zH+F1sQ4FSVnXz#7#TovG{0Z5$J-JbhQyo0a!H)GUg>P`)lTY?~1Rr#C+>d)V zono*$;u?G0N0XRJ-?4bt;ng+~-A~<)Cht2}V}Jd3{Emk`VV!q-ekn~@v0iLdgxAE! zUQQp`Y+rY#s^R}}e?n&;n6xDgnc9a!MBw0L)JO-5%A2l>IWY^mSx-~8Gnmaq$gL2LEGw8>4zie9jqxF`?=vDqX+t-KF zC|VchoN7Jb&4knUyBbyPa(%}9qt9zx;p<%?17|tqbi9*>P4zK(e)DkcQJ1{Fh$T_b ztZ#;5uU@vb3+;@FzglJn4R!24mqIh8HutOtGQqL~b8A-j)KR)TzIUj3 g@uca2Y1D>-<7T>XcABPiSbjXhkZ^uU@cN8@02l7JxBvhE literal 0 HcmV?d00001 diff --git a/Source/Core/Resources/WarningLargeText.png b/Source/Core/Resources/WarningLargeText.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbbb9feac67d00c20338e3e18f73adfbe5fd20c GIT binary patch literal 1666 zcmeAS@N?(olHy`uVBq!ia0vp^58U}fi7AzZCsS=07??FOLn2Bde0{8v^KKTB%1XJkii(hGOE?jkSNl+@ny;uz{4yi0i z)elN7&Mz%W21Z<(GRUd|E9aur#FG4?ko^1{SSSW$A4ng>ktMZm;eT6ktN0|V0s zPZ!6Kid$Pk@;!nBMgG5iyLIQnl-0|oU0cqgIJHN~b&Y11%3`-?O1Gq19&u?)bk3OK z6qxemxpSVPho?`IkwBM%$igCzU#c2PT#I>1XK$YKuD?2ed$szylhb}2)RTF)`}v=D zKj#+Tw{&;nI9MOslc4(Z`XdXzu+?Yn3_m8C+3!~w)a0z zy)#QtL&WRng$p07ola@Ecr7)ri70;*ptL6Cq$e;hu-`qyX%M#fVue*$V0^ye?HpIx z#eKgEcA75;I-Hzy>QmkKd0mTU&V2c^MY5!{R4`EFam&ks2QieNBH_MS1z!E?N6_nd-ZE-CB+&ft#^<;&c4e)zsCM)7OTb&Utq3oZmFXsOa_P zOI7yY;<6AFYvy2E#yHV6%lWjcbF!abT$oc+fX0>|X+oYMH=-gU8vK?gmlao6|9*Vy z)+eh6id%D<&OdKGFW)fb!tTw<4~|s7T75ll%LcCKi3c7QBve#btV&lgH8q`ZGR3sH zIo7K~?$n#s>{r%%;`ARZjy%KCaK3!u>Y({ori8xjR!;Dn#?jT?9T*WIVVRzqs%UE~ zt2LF2mzP&Uaw1c(@s)+b*4vn^i_M+Yel_k?c(B}VpULTHebZRaAdSkh`Ti~j1_lD* zi&Rxr16E({-l4G7(|Jct9`~L7tSK5Ai4DiJRDwTU*ElDqz51GTzg<rSB^ci){j z_u1yu>C=LI?bAbV8pU+{lRtE@q>ksl&Fv4*%A|sVpRMp?TQiy2{{4ePGo#n)&$q9h zXu!PtuH5v-xb^?LgWoQl*pg^?_VME%ZcEZG8BN-pp;5TRtmZ^;%_*~)esg<;Ds1Mx z=rNSwIc?N&SMuE3{1Ua3DH@het^0g5JWklu{!dWwU}BVa;%4NKa6 zr=AjJmpPo-Zz}(MiOj>Lmpb}PmndvFCL$(nBBM5^<$(SF)6(7vOTXsD9c9>Nb?@8v f^<`221rr! errors = General.ErrorLogger.GetErrors(startindex); foreach(ErrorItem e in errors) { - 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].Value = e.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].Value = e.Description; row.Cells[1].Style.WrapMode = DataGridViewTriState.True; + row.Cells[1].Tag = e; //mxd } + + //mxd + clearlist.Enabled = (grid.Rows.Count > 0); + } + + //mxd + private ErrorItem GetErrorItem(int rowindex) + { + if(grid.Rows.Count == 0 || grid.SelectedRows.Count != 1) return null; + DataGridViewRow row = grid.Rows[rowindex]; + return (row.Cells[1].Tag as ErrorItem); + } + + //mxd + private void ShowErrorSource() + { + if(grid.Rows.Count == 0 || grid.SelectedRows.Count != 1) return; + ErrorItem error = GetErrorItem(grid.SelectedRows[0].Index); + if(error != null) error.ShowSource(); } #endregion @@ -101,6 +120,10 @@ namespace CodeImp.DoomBuilder.Windows { General.ErrorLogger.Clear(); grid.Rows.Clear(); + + copyselected.Enabled = false; //mxd + showsource.Enabled = false; //mxd + clearlist.Enabled = false; //mxd } // Copy selection @@ -120,25 +143,23 @@ namespace CodeImp.DoomBuilder.Windows } //mxd - try - { - Clipboard.SetDataObject(str.ToString(), true, 5, 200); - } - catch(ExternalException) - { - General.Interface.DisplayStatus(StatusType.Warning, "Failed to perform a Clipboard operation..."); - } + try { Clipboard.SetDataObject(str.ToString(), true, 5, 200); } + catch(ExternalException) { General.Interface.DisplayStatus(StatusType.Warning, "Failed to perform a Clipboard operation..."); } } } + //mxd + private void showsource_Click(object sender, EventArgs e) + { + ShowErrorSource(); + } + // Help requested private void ErrorsForm_HelpRequested(object sender, HelpEventArgs hlpevent) { General.ShowHelp("w_errorsandwarnings.html"); hlpevent.Handled = true; } - - #endregion private void ErrorsForm_Shown(object sender, EventArgs e) { @@ -148,6 +169,18 @@ namespace CodeImp.DoomBuilder.Windows private void grid_CellContentClick(object sender, DataGridViewCellEventArgs e) { copyselected.Enabled = true; + + //mxd. Can we show error source? + ErrorItem error = GetErrorItem(e.RowIndex); + showsource.Enabled = (error != null && error.IsShowable); } + + //mxd + private void grid_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) + { + ShowErrorSource(); + } + + #endregion } } \ No newline at end of file diff --git a/Source/Core/Windows/ErrorsForm.resx b/Source/Core/Windows/ErrorsForm.resx index 0a8746ef..6b35dcaf 100644 --- a/Source/Core/Windows/ErrorsForm.resx +++ b/Source/Core/Windows/ErrorsForm.resx @@ -117,21 +117,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - True - True 103, 17 - - True - True diff --git a/Source/Core/Windows/ScriptEditorForm.cs b/Source/Core/Windows/ScriptEditorForm.cs index 67cd840e..04ff5209 100644 --- a/Source/Core/Windows/ScriptEditorForm.cs +++ b/Source/Core/Windows/ScriptEditorForm.cs @@ -77,6 +77,18 @@ namespace CodeImp.DoomBuilder.Windows editor.OnReloadResources(); } + //mxd + internal void DisplayError(TextResourceErrorItem error) + { + editor.ShowError(error); + } + + //mxd + /*internal void DisplayError(TextFileErrorItem error) + { + editor.ShowError(error); + }*/ + #endregion #region ================== Events diff --git a/Source/Core/ZDoom/DecorateParser.cs b/Source/Core/ZDoom/DecorateParser.cs index 9e52008c..4ca74d9f 100644 --- a/Source/Core/ZDoom/DecorateParser.cs +++ b/Source/Core/ZDoom/DecorateParser.cs @@ -144,7 +144,10 @@ namespace CodeImp.DoomBuilder.ZDoom if(!base.Parse(data, clearerrors)) return false; //mxd. Region-as-category stuff... - List regions = new List(); //mxd + List regions = new List(); + + //mxd. Regions tracking... + List> regionlines = new List>(); // // Keep local data Stream localstream = datastream; @@ -296,8 +299,10 @@ namespace CodeImp.DoomBuilder.ZDoom //mxd. Region-as-category handling case "#region": + int line = GetCurrentLineNumber(); SkipWhitespace(false); string cattitle = ReadLine(); + regionlines.Add(new KeyValuePair(line, cattitle)); if(!string.IsNullOrEmpty(cattitle)) { // Make new category info @@ -319,10 +324,11 @@ namespace CodeImp.DoomBuilder.ZDoom //mxd. Region-as-category handling case "#endregion": - if(regions.Count > 0) - regions.RemoveAt(regions.Count - 1); + if(regions.Count > 0) regions.RemoveAt(regions.Count - 1); + if(regionlines.Count > 0) + regionlines.RemoveAt(regionlines.Count - 1); else - LogWarning("Unexpected #endregion token"); + LogWarning("Unexpected #endregion"); break; default: @@ -370,6 +376,18 @@ namespace CodeImp.DoomBuilder.ZDoom } } } + + //mxd. Check unclosed #regions + if(regionlines.Count > 0) + { + foreach(var group in regionlines) + { + if(!string.IsNullOrEmpty(group.Value)) + LogWarning("Unclosed #region \"" + group.Value + "\"", group.Key); + else + LogWarning("Unclosed #region", group.Key); + } + } // Return true when no errors occurred return (ErrorDescription == null); diff --git a/Source/Core/ZDoom/ZDTextParser.cs b/Source/Core/ZDoom/ZDTextParser.cs index 66c56310..ba97ff68 100644 --- a/Source/Core/ZDoom/ZDTextParser.cs +++ b/Source/Core/ZDoom/ZDTextParser.cs @@ -273,7 +273,9 @@ namespace CodeImp.DoomBuilder.ZDoom if(datastream.Position == datastream.Length) //mxd { // ZDoom doesn't give even a warning message about this, so we shouldn't report error or fail parsing. - General.ErrorLogger.Add(ErrorType.Warning, "DECORATE warning in \"" + sourcename + "\", line " + GetCurrentLineNumber() + ". Block comment is not closed."); + string message = ScriptType + " warning in \"" + sourcename + "\", line " + GetCurrentLineNumber() + ". Block comment is not closed."; + TextResourceErrorItem error = new TextResourceErrorItem(ErrorType.Warning, ScriptType, datalocation, sourcename, sourcelumpindex, GetCurrentLineNumber(), message); + General.ErrorLogger.Add(error); return false; } @@ -705,23 +707,41 @@ namespace CodeImp.DoomBuilder.ZDoom } //mxd. This adds a warning to the ErrorLogger - protected internal void LogWarning(string message) + protected internal void LogWarning(string message) { LogWarning(message, CompilerError.NO_LINE_NUMBER); } + protected internal void LogWarning(string message, int linenumber) { // Add a warning - int errline = (datastream != null ? GetCurrentLineNumber() : CompilerError.NO_LINE_NUMBER); + int errline = (linenumber != CompilerError.NO_LINE_NUMBER + ? linenumber + : (datastream != null ? GetCurrentLineNumber() : CompilerError.NO_LINE_NUMBER)); string errsource = (ScriptType == ScriptType.ACS && sourcename.StartsWith("?") ? sourcename.Substring(1) : Path.Combine(datalocation.GetDisplayName(), sourcename)); if(sourcelumpindex != -1) errsource += ":" + sourcelumpindex; - General.ErrorLogger.Add(ErrorType.Warning, ScriptType + " warning in \"" + errsource - + (errline != CompilerError.NO_LINE_NUMBER ? "\", line " + (errline + 1) : "\"") + ". " - + message + "."); + + message = ScriptType + " warning in \"" + errsource + + (errline != CompilerError.NO_LINE_NUMBER ? "\", line " + (errline + 1) : "\"") + ". " + + message + "."; + + TextResourceErrorItem error = new TextResourceErrorItem(ErrorType.Warning, + ScriptType, datalocation, + (sourcename.StartsWith("?") ? sourcename.Substring(1) : sourcename), + sourcelumpindex, errline, message); + + General.ErrorLogger.Add(error); } //mxd. This adds an error to the ErrorLogger public void LogError() { - General.ErrorLogger.Add(ErrorType.Error, ScriptType + " error in \"" + shorterrorsource - + (errorline != CompilerError.NO_LINE_NUMBER ? "\", line " + (errorline + 1) : "\"") + ". " - + errordesc + "."); + string message = ScriptType + " error in \"" + shorterrorsource + + (errorline != CompilerError.NO_LINE_NUMBER ? "\", line " + (errorline + 1) : "\"") + ". " + + errordesc + "."; + + TextResourceErrorItem error = new TextResourceErrorItem(ErrorType.Warning, + ScriptType, datalocation, + (sourcename.StartsWith("?") ? sourcename.Substring(1) : sourcename), + sourcelumpindex, errorline, message); + + General.ErrorLogger.Add(error); } //mxd diff --git a/Source/Plugins/AutomapMode/Interface/MenusForm.cs b/Source/Plugins/AutomapMode/Interface/MenusForm.cs index 77d49da6..7fef8644 100644 --- a/Source/Plugins/AutomapMode/Interface/MenusForm.cs +++ b/Source/Plugins/AutomapMode/Interface/MenusForm.cs @@ -22,22 +22,26 @@ namespace CodeImp.DoomBuilder.AutomapMode public void Register() { + General.Interface.BeginToolbarUpdate(); //mxd General.Interface.AddButton(showhiddenlines); General.Interface.AddButton(showsecretsectors); if(!General.Map.DOOM) General.Interface.AddButton(showlocks); General.Interface.AddButton(colorpresetseparator); General.Interface.AddButton(colorpresetlabel); General.Interface.AddButton(colorpreset); + General.Interface.EndToolbarUpdate(); //mxd } public void Unregister() { + General.Interface.BeginToolbarUpdate(); //mxd General.Interface.RemoveButton(colorpreset); General.Interface.RemoveButton(colorpresetlabel); General.Interface.RemoveButton(colorpresetseparator); - if(!General.Map.DOOM) General.Interface.RemoveButton(showlocks); + General.Interface.RemoveButton(showlocks); General.Interface.RemoveButton(showsecretsectors); General.Interface.RemoveButton(showhiddenlines); + General.Interface.EndToolbarUpdate(); //mxd } private void showhiddenlines_CheckedChanged(object sender, EventArgs e) diff --git a/Source/Plugins/BuilderEffects/Interface/MenusForm.cs b/Source/Plugins/BuilderEffects/Interface/MenusForm.cs index 521cc3a8..33ee997c 100644 --- a/Source/Plugins/BuilderEffects/Interface/MenusForm.cs +++ b/Source/Plugins/BuilderEffects/Interface/MenusForm.cs @@ -21,10 +21,12 @@ namespace CodeImp.DoomBuilder.BuilderEffects public void Register() { // Add the menus to the core + General.Interface.BeginToolbarUpdate(); General.Interface.AddModesMenu(menujitter, "002_modify"); General.Interface.AddModesButton(buttonjitter, "002_modify"); General.Interface.AddModesMenu(menusectorflatshading, "002_modify"); General.Interface.AddModesButton(buttonsectorflatshading, "002_modify"); + General.Interface.EndToolbarUpdate(); for(int i = 0; i < stripimport.DropDownItems.Count; i++) General.Interface.AddMenu(stripimport.DropDownItems[i] as ToolStripMenuItem, MenuSection.FileImport); @@ -34,10 +36,12 @@ namespace CodeImp.DoomBuilder.BuilderEffects public void Unregister() { // Remove the menus from the core + General.Interface.BeginToolbarUpdate(); General.Interface.RemoveMenu(menujitter); General.Interface.RemoveButton(buttonjitter); General.Interface.RemoveMenu(menusectorflatshading); General.Interface.RemoveButton(buttonsectorflatshading); + General.Interface.EndToolbarUpdate(); for(int i = 0; i < stripimport.DropDownItems.Count; i++) General.Interface.RemoveMenu(stripimport.DropDownItems[i] as ToolStripMenuItem); diff --git a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs index 9c028b1b..1204e8e0 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs @@ -1222,8 +1222,10 @@ namespace CodeImp.DoomBuilder.BuilderModes snaptonearest = General.Interface.AutoMerge; //mxd // Add toolbar buttons + General.Interface.BeginToolbarUpdate(); //mxd General.Interface.AddButton(BuilderPlug.Me.MenusForm.FlipSelectionH); General.Interface.AddButton(BuilderPlug.Me.MenusForm.FlipSelectionV); + General.Interface.EndToolbarUpdate(); //mxd //mxd. Get EditPanel-related settings usepreciseposition = General.Settings.ReadPluginSetting("editselectionmode.usepreciseposition", true); @@ -1740,8 +1742,10 @@ namespace CodeImp.DoomBuilder.BuilderModes base.OnDisengage(); // Remove toolbar buttons + General.Interface.BeginToolbarUpdate(); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.FlipSelectionH); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.FlipSelectionV); + General.Interface.EndToolbarUpdate(); //mxd //mxd. Save EditPanel-related settings General.Settings.WritePluginSetting("editselectionmode.usepreciseposition", usepreciseposition); diff --git a/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs index 093c7a82..bdffca31 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs @@ -555,15 +555,12 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.ViewSelectionNumbers); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.ViewSelectionEffects); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SeparatorSectors1); //mxd - if(General.Map.UDMF) //mxd - { - General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientBrightness); - General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.GradientInterpolationMenu); - } + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientBrightness); + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.GradientInterpolationMenu); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.CurveLinedefs); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SyncronizeThingEditButton); //mxd - if(General.Map.UDMF) General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd General.Interface.EndToolbarUpdate(); //mxd // Going to EditSelectionMode? diff --git a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs index 88839429..c864f851 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs @@ -762,14 +762,14 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeDoor); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SeparatorSectors2); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientBrightness); - if(General.Map.UDMF) General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.GradientModeMenu); //mxd + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.GradientModeMenu); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.GradientInterpolationMenu); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientFloors); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientCeilings); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SeparatorSectors3); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SyncronizeThingEditButton); //mxd - if(General.Map.UDMF) General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd General.Interface.EndToolbarUpdate(); //mxd // Keep only sectors selected diff --git a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs index f413db0c..3818c79b 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs @@ -184,8 +184,7 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.PastePropertiesOptions); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SeparatorCopyPaste); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.ViewSelectionNumbers); //mxd - if(General.Map.FormatInterface.HasThingAction) - General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.ViewSelectionEffects); //mxd + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.ViewSelectionEffects); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SeparatorSectors1); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.AlignThingsToWall); //mxd diff --git a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs index 43da7b34..57002767 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs @@ -112,15 +112,12 @@ namespace CodeImp.DoomBuilder.BuilderModes base.OnDisengage(); // Remove toolbar buttons - if(General.Map.UDMF) - { - General.Interface.BeginToolbarUpdate(); - General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.CopyProperties); - General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.PasteProperties); - General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.PastePropertiesOptions); //mxd - General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd - General.Interface.EndToolbarUpdate(); - } + General.Interface.BeginToolbarUpdate(); + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.CopyProperties); + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.PasteProperties); + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.PastePropertiesOptions); //mxd + General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd + General.Interface.EndToolbarUpdate(); // Going to EditSelectionMode? EditSelectionMode mode = General.Editing.NewMode as EditSelectionMode; diff --git a/Source/Plugins/BuilderModes/Interface/CurveLinedefsOptionsPanel.cs b/Source/Plugins/BuilderModes/Interface/CurveLinedefsOptionsPanel.cs index e09b01c8..a2281220 100644 --- a/Source/Plugins/BuilderModes/Interface/CurveLinedefsOptionsPanel.cs +++ b/Source/Plugins/BuilderModes/Interface/CurveLinedefsOptionsPanel.cs @@ -54,6 +54,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Interface public void Register() { + General.Interface.BeginToolbarUpdate(); General.Interface.AddButton(vertslabel); General.Interface.AddButton(verts); General.Interface.AddButton(distancelabel); @@ -67,10 +68,12 @@ namespace CodeImp.DoomBuilder.BuilderModes.Interface General.Interface.AddButton(separator2); General.Interface.AddButton(apply); General.Interface.AddButton(cancel); + General.Interface.EndToolbarUpdate(); } public void Unregister() { + General.Interface.BeginToolbarUpdate(); General.Interface.RemoveButton(cancel); General.Interface.RemoveButton(apply); General.Interface.RemoveButton(anglelabel); @@ -85,6 +88,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Interface General.Interface.RemoveButton(distancelabel); General.Interface.RemoveButton(verts); General.Interface.RemoveButton(vertslabel); + General.Interface.EndToolbarUpdate(); } #endregion diff --git a/Source/Plugins/BuilderModes/Interface/DrawCurveOptionsPanel.cs b/Source/Plugins/BuilderModes/Interface/DrawCurveOptionsPanel.cs index 5dd68f10..6342b03f 100644 --- a/Source/Plugins/BuilderModes/Interface/DrawCurveOptionsPanel.cs +++ b/Source/Plugins/BuilderModes/Interface/DrawCurveOptionsPanel.cs @@ -26,22 +26,26 @@ namespace CodeImp.DoomBuilder.BuilderModes public void Register() { + General.Interface.BeginToolbarUpdate(); General.Interface.AddButton(continuousdrawing); General.Interface.AddButton(autoclosedrawing); General.Interface.AddButton(toolStripSeparator1); General.Interface.AddButton(seglabel); General.Interface.AddButton(seglen); General.Interface.AddButton(reset); + General.Interface.EndToolbarUpdate(); } public void Unregister() { + General.Interface.BeginToolbarUpdate(); General.Interface.RemoveButton(reset); General.Interface.RemoveButton(seglen); General.Interface.RemoveButton(seglabel); General.Interface.RemoveButton(toolStripSeparator1); General.Interface.RemoveButton(autoclosedrawing); General.Interface.RemoveButton(continuousdrawing); + General.Interface.EndToolbarUpdate(); } private void seglen_ValueChanged(object sender, EventArgs e) diff --git a/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.cs b/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.cs index 59ab9732..042b80ac 100644 --- a/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.cs +++ b/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.cs @@ -32,6 +32,7 @@ namespace CodeImp.DoomBuilder.BuilderModes subdivs.ValueChanged += ValueChanged; angle.ValueChanged += ValueChanged; + General.Interface.BeginToolbarUpdate(); General.Interface.AddButton(continuousdrawing); General.Interface.AddButton(showguidelines); General.Interface.AddButton(toolStripSeparator1); @@ -42,10 +43,12 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.AddButton(anglelabel); General.Interface.AddButton(angle); General.Interface.AddButton(reset); + General.Interface.EndToolbarUpdate(); } public void Unregister() { + General.Interface.BeginToolbarUpdate(); General.Interface.RemoveButton(reset); General.Interface.RemoveButton(angle); General.Interface.RemoveButton(anglelabel); @@ -56,6 +59,7 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.RemoveButton(toolStripSeparator1); General.Interface.RemoveButton(showguidelines); General.Interface.RemoveButton(continuousdrawing); + General.Interface.EndToolbarUpdate(); } private void ValueChanged(object sender, EventArgs e) diff --git a/Source/Plugins/BuilderModes/Interface/DrawLineOptionsPanel.cs b/Source/Plugins/BuilderModes/Interface/DrawLineOptionsPanel.cs index 178260b0..2e5f7f56 100644 --- a/Source/Plugins/BuilderModes/Interface/DrawLineOptionsPanel.cs +++ b/Source/Plugins/BuilderModes/Interface/DrawLineOptionsPanel.cs @@ -20,16 +20,20 @@ namespace CodeImp.DoomBuilder.BuilderModes public void Register() { + General.Interface.BeginToolbarUpdate(); General.Interface.AddButton(continuousdrawing); General.Interface.AddButton(autoclosedrawing); General.Interface.AddButton(showguidelines); + General.Interface.EndToolbarUpdate(); } public void Unregister() { + General.Interface.BeginToolbarUpdate(); General.Interface.RemoveButton(showguidelines); General.Interface.RemoveButton(autoclosedrawing); General.Interface.RemoveButton(continuousdrawing); + General.Interface.EndToolbarUpdate(); } private void continuousdrawing_CheckedChanged(object sender, EventArgs e) diff --git a/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.cs b/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.cs index 4e558a0d..cd880049 100644 --- a/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.cs +++ b/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.cs @@ -30,6 +30,7 @@ namespace CodeImp.DoomBuilder.BuilderModes radius.ValueChanged += ValueChanged; subdivs.ValueChanged += ValueChanged; + General.Interface.BeginToolbarUpdate(); General.Interface.AddButton(continuousdrawing); General.Interface.AddButton(showguidelines); General.Interface.AddButton(toolStripSeparator1); @@ -38,10 +39,12 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.AddButton(subdivslabel); General.Interface.AddButton(subdivs); General.Interface.AddButton(reset); + General.Interface.EndToolbarUpdate(); } public void Unregister() { + General.Interface.BeginToolbarUpdate(); General.Interface.RemoveButton(reset); General.Interface.RemoveButton(subdivs); General.Interface.RemoveButton(subdivslabel); @@ -50,6 +53,7 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.RemoveButton(toolStripSeparator1); General.Interface.RemoveButton(showguidelines); General.Interface.RemoveButton(continuousdrawing); + General.Interface.EndToolbarUpdate(); } private void ValueChanged(object sender, EventArgs e) diff --git a/Source/Plugins/BuilderModes/Interface/MenusForm.cs b/Source/Plugins/BuilderModes/Interface/MenusForm.cs index 35603188..d04c8020 100644 --- a/Source/Plugins/BuilderModes/Interface/MenusForm.cs +++ b/Source/Plugins/BuilderModes/Interface/MenusForm.cs @@ -165,8 +165,10 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.RemoveMenu(i); // Remove the buttons from the core + General.Interface.BeginToolbarUpdate(); //mxd foreach(ToolStripItem b in buttons) General.Interface.RemoveButton(b); + General.Interface.EndToolbarUpdate(); //mxd //mxd. Export menu foreach(ToolStripItem i in exportmenuitems) diff --git a/Source/Plugins/VisplaneExplorer/InterfaceForm.cs b/Source/Plugins/VisplaneExplorer/InterfaceForm.cs index 29b038fe..c9ba702c 100644 --- a/Source/Plugins/VisplaneExplorer/InterfaceForm.cs +++ b/Source/Plugins/VisplaneExplorer/InterfaceForm.cs @@ -54,19 +54,23 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer // This adds the buttons to the toolbar public void AddToInterface() { + General.Interface.BeginToolbarUpdate(); //mxd General.Interface.AddButton(statsbutton); General.Interface.AddButton(separator); //mxd General.Interface.AddButton(cbopendoors); //mxd General.Interface.AddButton(cbheatmap); //mxd + General.Interface.EndToolbarUpdate(); //mxd } // This removes the buttons from the toolbar public void RemoveFromInterface() { + General.Interface.BeginToolbarUpdate(); //mxd General.Interface.RemoveButton(cbheatmap); //mxd General.Interface.RemoveButton(cbopendoors); //mxd General.Interface.RemoveButton(separator); //mxd General.Interface.RemoveButton(statsbutton); + General.Interface.EndToolbarUpdate(); //mxd //mxd. Save settings General.Settings.WritePluginSetting("opendoors", cbopendoors.Checked);