diff --git a/Source/Core/Editing/EditModeInfo.cs b/Source/Core/Editing/EditModeInfo.cs index 07a0e021974b163cd1237d678fd894af1d7b4d1d..4265477556866c97e1a5fc65f5fea9e548f9af67 100644 --- a/Source/Core/Editing/EditModeInfo.cs +++ b/Source/Core/Editing/EditModeInfo.cs @@ -165,8 +165,8 @@ namespace CodeImp.DoomBuilder.Editing // Create instance EditMode newmode = plugin.CreateObject<EditMode>(type); - // Switch mode - General.Editing.ChangeMode(newmode); + //mxd. Switch mode? + if(newmode != null) General.Editing.ChangeMode(newmode); } } } @@ -180,8 +180,8 @@ namespace CodeImp.DoomBuilder.Editing // Create instance EditMode newmode = plugin.CreateObject<EditMode>(type); - // Switch mode - General.Editing.ChangeMode(newmode); + //mxd. Switch mode? + if(newmode != null) General.Editing.ChangeMode(newmode); } } diff --git a/Source/Core/General/General.cs b/Source/Core/General/General.cs index 0702f786899ba2f8a777c0cbd90a8cc56e10d5fd..21b50b9cced339c5d73cc084788b7ec68f8a85db 100644 --- a/Source/Core/General/General.cs +++ b/Source/Core/General/General.cs @@ -1845,8 +1845,14 @@ namespace CodeImp.DoomBuilder // This shows a message and logs the message public static DialogResult ShowErrorMessage(string message, MessageBoxButtons buttons) { - // Log the message - WriteLogLine(message); + return ShowErrorMessage(message, buttons, true); + } + + // This shows a message and logs the message + public static DialogResult ShowErrorMessage(string message, MessageBoxButtons buttons, bool log) + { + //mxd. Log the message? + if(log) WriteLogLine(message); // Use normal cursor Cursor oldcursor = Cursor.Current; @@ -1867,14 +1873,20 @@ namespace CodeImp.DoomBuilder // This shows a message and logs the message public static DialogResult ShowWarningMessage(string message, MessageBoxButtons buttons) { - return ShowWarningMessage(message, buttons, MessageBoxDefaultButton.Button1); + return ShowWarningMessage(message, buttons, MessageBoxDefaultButton.Button1, true); } // This shows a message and logs the message public static DialogResult ShowWarningMessage(string message, MessageBoxButtons buttons, MessageBoxDefaultButton defaultbutton) { - // Log the message - WriteLogLine(message); + return ShowWarningMessage(message, buttons, defaultbutton, true); + } + + // This shows a message and logs the message + public static DialogResult ShowWarningMessage(string message, MessageBoxButtons buttons, MessageBoxDefaultButton defaultbutton, bool log) + { + //mxd. Log the message? + if(log) WriteLogLine(message); // Use normal cursor Cursor oldcursor = Cursor.Current; diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs index c8ad6fb212089cbd4f7692aa8457e3f7faed7434..edfb163d669e8996020c89e9bdea09157a71d7b0 100644 --- a/Source/Core/General/MapManager.cs +++ b/Source/Core/General/MapManager.cs @@ -56,6 +56,7 @@ namespace CodeImp.DoomBuilder // Status private bool changed; private bool scriptschanged; + private bool maploading; //mxd // Map information private string filetitle; @@ -101,7 +102,7 @@ namespace CodeImp.DoomBuilder public MapOptions Options { get { return options; } } public MapSet Map { get { return map; } } public DataManager Data { get { return data; } } - public bool IsChanged { get { return changed | CheckScriptChanged(); } set { changed |= value; General.MainWindow.UpdateMapChangedStatus(); } } + public bool IsChanged { get { return changed | CheckScriptChanged(); } set { changed |= value; if(!maploading) General.MainWindow.UpdateMapChangedStatus(); } } public bool IsDisposed { get { return isdisposed; } } internal D3DDevice Graphics { get { return graphics; } } public IRenderer2D Renderer2D { get { return renderer2d; } } @@ -166,7 +167,7 @@ namespace CodeImp.DoomBuilder internal bool Dispose() { // Not already disposed? - if (!isdisposed) + if(!isdisposed) { // Let the plugins know General.Plugins.OnMapCloseBegin(); @@ -184,20 +185,21 @@ namespace CodeImp.DoomBuilder General.Actions.UnbindMethods(this); // Dispose - if (grid != null) grid.Dispose(); - if (launcher != null) launcher.Dispose(); - if (copypaste != null) copypaste.Dispose(); - if (undoredo != null) undoredo.Dispose(); + maploading = true; //mxd + if(grid != null) grid.Dispose(); + if(launcher != null) launcher.Dispose(); + if(copypaste != null) copypaste.Dispose(); + if(undoredo != null) undoredo.Dispose(); General.WriteLogLine("Unloading data resources..."); - if (data != null) data.Dispose(); + if(data != null) data.Dispose(); General.WriteLogLine("Closing temporary file..."); - if (tempwad != null) tempwad.Dispose(); + if(tempwad != null) tempwad.Dispose(); General.WriteLogLine("Unloading map data..."); - if (map != null) map.Dispose(); + if(map != null) map.Dispose(); General.WriteLogLine("Stopping graphics device..."); - if (renderer2d != null) renderer2d.Dispose(); - if (renderer3d != null) renderer3d.Dispose(); - if (graphics != null) graphics.Dispose(); + if(renderer2d != null) renderer2d.Dispose(); + if(renderer3d != null) renderer3d.Dispose(); + if(graphics != null) graphics.Dispose(); visualcamera = null; grid = null; launcher = null; @@ -221,7 +223,7 @@ namespace CodeImp.DoomBuilder { Directory.Delete(temppath, true); } - catch (Exception e) + catch(Exception e) { General.WriteLogLine(e.GetType().Name + ": " + e.Message); General.WriteLogLine("Failed to remove temporary directory!"); @@ -253,6 +255,7 @@ namespace CodeImp.DoomBuilder // Apply settings this.filetitle = options.CurrentName + ".wad"; this.filepathname = ""; + this.maploading = true; //mxd this.changed = false; this.options = options; @@ -261,7 +264,7 @@ namespace CodeImp.DoomBuilder // Initiate graphics General.WriteLogLine("Initializing graphics device..."); graphics = new D3DDevice(General.MainWindow.Display); - if (!graphics.Initialize()) return false; + if(!graphics.Initialize()) return false; // Create renderers renderer2d = new Renderer2D(graphics); @@ -323,12 +326,13 @@ namespace CodeImp.DoomBuilder this.visualcamera = new VisualCamera(); General.Editing.ChangeMode(configinfo.StartMode); ClassicMode cmode = (General.Editing.Mode as ClassicMode); - if (cmode != null) cmode.SetZoom(0.5f); + if(cmode != null) cmode.SetZoom(0.5f); renderer2d.SetViewMode((ViewMode)General.Settings.DefaultViewMode); General.Settings.SetDefaultThingFlags(config.DefaultThingFlags); // Success this.changed = false; + this.maploading = false; //mxd General.WriteLogLine("Map creation done"); General.MainWindow.UpdateMapChangedStatus(); //mxd return true; @@ -348,6 +352,7 @@ namespace CodeImp.DoomBuilder this.filetitle = Path.GetFileName(filepathname); this.filepathname = filepathname; this.changed = false; + this.maploading = true; //mxd this.options = options; General.WriteLogLine("Opening map '" + options.CurrentName + "' with configuration '" + options.ConfigFile + "'"); @@ -355,7 +360,7 @@ namespace CodeImp.DoomBuilder // Initiate graphics General.WriteLogLine("Initializing graphics device..."); graphics = new D3DDevice(General.MainWindow.Display); - if (!graphics.Initialize()) return false; + if(!graphics.Initialize()) return false; // Create renderers renderer2d = new Renderer2D(graphics); @@ -423,7 +428,7 @@ namespace CodeImp.DoomBuilder grid.TranslateBackgroundName(config.UseLongTextureNames); //mxd. Sector textures may've been changed - if (nameschanged) data.UpdateUsedTextures(); + if(nameschanged) data.UpdateUsedTextures(); // Update structures options.ApplyGridSettings(); @@ -452,6 +457,7 @@ namespace CodeImp.DoomBuilder // Success this.changed = maprestored; //mxd + this.maploading = false; //mxd General.WriteLogLine("Map loading done"); General.MainWindow.UpdateMapChangedStatus(); //mxd return true; @@ -465,6 +471,7 @@ namespace CodeImp.DoomBuilder #endif this.changed = false; + this.maploading = true; //mxd this.options = options; // Create map data @@ -540,6 +547,7 @@ namespace CodeImp.DoomBuilder // Success this.changed = maprestored; + this.maploading = false; //mxd General.WriteLogLine("Map switching done"); General.MainWindow.UpdateMapChangedStatus(); //mxd return true; diff --git a/Source/Core/Plugins/Plugin.cs b/Source/Core/Plugins/Plugin.cs index d3e0d5b21fc78957ee2b257fa5ea0a8912bf7679..6c7d58a5e386dc74270ba36ddf6fe6545c73eb2e 100644 --- a/Source/Core/Plugins/Plugin.cs +++ b/Source/Core/Plugins/Plugin.cs @@ -21,6 +21,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; using System.Reflection; +using System.Windows.Forms; #endregion @@ -174,7 +175,7 @@ namespace CodeImp.DoomBuilder.Plugins public Type FindSingleClass(Type t) { Type[] types = FindClasses(t); - if(types.Length > 0) return types[0]; else return null; + return (types.Length > 0 ? types[0] : null); } // This creates an instance of a class @@ -194,13 +195,19 @@ namespace CodeImp.DoomBuilder.Plugins catch(TargetInvocationException e) { // Error! - General.ErrorLogger.Add(ErrorType.Error, "Failed to create class instance '" + t.Name + "' from plugin '" + name + "' " + e.InnerException.GetType().Name + " at target: " + e.InnerException.Message); + string error = "Failed to create class instance '" + t.Name + "' from plugin '" + name + "'."; + General.ShowErrorMessage(error + Environment.NewLine + Environment.NewLine + "See the error log for more details", MessageBoxButtons.OK, false); + General.WriteLogLine(error + " " + e.InnerException.GetType().Name + " at target: " + + e.InnerException.Message + Environment.NewLine + "Stacktrace: " + e.InnerException.StackTrace.Trim()); return default(T); } catch(Exception e) { // Error! - General.ErrorLogger.Add(ErrorType.Error, "Failed to create class instance '" + t.Name + "' from plugin '" + name + "' " + e.GetType().Name + ": " + e.Message); + string error = "Failed to create class instance '" + t.Name + "' from plugin '" + name + "'."; + General.ShowErrorMessage(error + Environment.NewLine + Environment.NewLine + "See the error log for more details", MessageBoxButtons.OK, false); + General.WriteLogLine(error + " " + e.GetType().Name + ": " + e.Message + Environment.NewLine + + "Stacktrace: " + e.StackTrace.Trim()); return default(T); } } diff --git a/Source/Core/Windows/MainForm.Designer.cs b/Source/Core/Windows/MainForm.Designer.cs index 2f9b40393124fe67e5b1b9cf8b3f1da3cc56b5d4..fd9cb2fa722542f099d651e66996e8477b45229b 100644 --- a/Source/Core/Windows/MainForm.Designer.cs +++ b/Source/Core/Windows/MainForm.Designer.cs @@ -137,6 +137,7 @@ namespace CodeImp.DoomBuilder.Windows this.menuhelp = new System.Windows.Forms.ToolStripMenuItem(); this.itemhelprefmanual = new System.Windows.Forms.ToolStripMenuItem(); this.itemShortcutReference = new System.Windows.Forms.ToolStripMenuItem(); + this.itemopenconfigfolder = new System.Windows.Forms.ToolStripMenuItem(); this.itemhelpeditmode = new System.Windows.Forms.ToolStripMenuItem(); this.itemhelpcheckupdates = new System.Windows.Forms.ToolStripMenuItem(); this.seperatorhelpmanual = new System.Windows.Forms.ToolStripSeparator(); @@ -1144,6 +1145,7 @@ namespace CodeImp.DoomBuilder.Windows this.menuhelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.itemhelprefmanual, this.itemShortcutReference, + this.itemopenconfigfolder, this.itemhelpeditmode, this.itemhelpcheckupdates, this.seperatorhelpmanual, @@ -1169,6 +1171,15 @@ namespace CodeImp.DoomBuilder.Windows this.itemShortcutReference.Text = "Keyboard Shortcuts Reference"; this.itemShortcutReference.Click += new System.EventHandler(this.itemShortcutReference_Click); // + // itemopenconfigfolder + // + this.itemopenconfigfolder.Image = global::CodeImp.DoomBuilder.Properties.Resources.FolderExplore; + this.itemopenconfigfolder.Name = "itemopenconfigfolder"; + this.itemopenconfigfolder.Size = new System.Drawing.Size(232, 22); + this.itemopenconfigfolder.Tag = ""; + this.itemopenconfigfolder.Text = "Program Configuration Folder"; + this.itemopenconfigfolder.Click += new System.EventHandler(this.itemopenconfigfolder_Click); + // // itemhelpeditmode // this.itemhelpeditmode.Image = global::CodeImp.DoomBuilder.Properties.Resources.Question; @@ -2636,6 +2647,7 @@ namespace CodeImp.DoomBuilder.Windows private System.Windows.Forms.ToolStripMenuItem screenshotToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem editAreaScreenshotToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem itemShortcutReference; + private System.Windows.Forms.ToolStripMenuItem itemopenconfigfolder; private System.Windows.Forms.ToolStripMenuItem itemopenmapincurwad; private System.Windows.Forms.ToolStripMenuItem itemgrid1; private System.Windows.Forms.ToolStripMenuItem itemzoom400; diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs index 71e581f3d3daf0b468515a4a08df9cd241d2fb4c..2455eb0cbe099b097f71becdb59c611c373a9381 100644 --- a/Source/Core/Windows/MainForm.cs +++ b/Source/Core/Windows/MainForm.cs @@ -3060,6 +3060,14 @@ namespace CodeImp.DoomBuilder.Windows DisplayStatus(StatusType.Info, "Shortcut reference saved to '" + path + "'"); Process.Start(path); } + + //mxd + private void itemopenconfigfolder_Click(object sender, EventArgs e) + { + if(Directory.Exists(General.SettingsPath)) Process.Start(General.SettingsPath); + else General.ShowErrorMessage("Huh? Where did Settings folder go?.." + Environment.NewLine + + "I swear it was here: '" + General.SettingsPath + "'!", MessageBoxButtons.OK); // I don't think this will ever happen + } #endregion