From aea360adb968a613aa7666f35b78c2d7fc41d9f5 Mon Sep 17 00:00:00 2001
From: MaxED <j.maxed@gmail.com>
Date: Thu, 6 Jun 2013 10:22:58 +0000
Subject: [PATCH] Added "defaultlinedefactivation" setting to configuration.
 Added some boilerplate to SaveScreenshot function.

---
 Build/Configurations/Includes/UDMF_misc.cfg  |  2 +-
 Build/Configurations/Includes/ZDoom_misc.cfg |  1 +
 Source/Core/Config/GameConfiguration.cs      |  7 +++----
 Source/Core/Map/Linedef.cs                   |  5 +++--
 Source/Core/Windows/MainForm.cs              | 13 +++++++++----
 5 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/Build/Configurations/Includes/UDMF_misc.cfg b/Build/Configurations/Includes/UDMF_misc.cfg
index b5409fd0d..2e0f1cac6 100644
--- a/Build/Configurations/Includes/UDMF_misc.cfg
+++ b/Build/Configurations/Includes/UDMF_misc.cfg
@@ -77,7 +77,7 @@ linedefflags
 
 linedefactivations
 {
-	playercross = "When player walks over"; //mxd. The first flag is now used as default flag when translating a map to UDMF format
+	playercross = "When player walks over";
 	playeruse = "When player presses use";
 	monstercross = "When monster walks over";
 	monsteruse = "When monster presses use";
diff --git a/Build/Configurations/Includes/ZDoom_misc.cfg b/Build/Configurations/Includes/ZDoom_misc.cfg
index 599e56f59..a7a0be2c0 100644
--- a/Build/Configurations/Includes/ZDoom_misc.cfg
+++ b/Build/Configurations/Includes/ZDoom_misc.cfg
@@ -1970,6 +1970,7 @@ speciallinedefs_udmf
 	impassableflag = "blocking";
 	upperunpeggedflag = "dontpegtop";
 	lowerunpeggedflag = "dontpegbottom";
+	defaultlinedefactivation = "playercross"; //mxd. Used when translating a map to UDMF
 }
 
 // Door making
diff --git a/Source/Core/Config/GameConfiguration.cs b/Source/Core/Config/GameConfiguration.cs
index 876d871c3..aa0f12eee 100644
--- a/Source/Core/Config/GameConfiguration.cs
+++ b/Source/Core/Config/GameConfiguration.cs
@@ -50,7 +50,7 @@ namespace CodeImp.DoomBuilder.Config
 		private string defaultsavecompiler;
 		private string defaulttestcompiler;
 		private string formatinterface;
-		//private string soundlinedefflag;
+		private string defaultLinedefActivation; //mxd
 		private string singlesidedflag;
 		private string doublesidedflag;
 		private string impassableflag;
@@ -146,7 +146,7 @@ namespace CodeImp.DoomBuilder.Config
 		public float DefaultFlatScale { get { return defaultflatscale; } }
 		public bool ScaledTextureOffsets { get { return scaledtextureoffsets; } }
 		public string FormatInterface { get { return formatinterface; } }
-		//public string SoundLinedefFlag { get { return soundlinedefflag; } } //mxd
+		public string DefaultLinedefActivationFlag { get { return defaultLinedefActivation; } } //mxd
 		public string SingleSidedFlag { get { return singlesidedflag; } }
 		public string DoubleSidedFlag { get { return doublesidedflag; } }
 		public string ImpassableFlag { get { return impassableflag; } }
@@ -297,12 +297,11 @@ namespace CodeImp.DoomBuilder.Config
 			topboundary = cfg.ReadSetting("topboundary", 32767);
 			bottomboundary = cfg.ReadSetting("bottomboundary", -32768);
 			doomlightlevels = cfg.ReadSetting("doomlightlevels", true);
+			defaultLinedefActivation = cfg.ReadSetting("defaultlinedefactivation", ""); //mxd
 			for(int i = 0; i < Linedef.NUM_ARGS; i++) makedoorargs[i] = cfg.ReadSetting("makedoorarg" + i.ToString(CultureInfo.InvariantCulture), 0);
 
 			// Flags have special (invariant culture) conversion
 			// because they are allowed to be written as integers in the configs
-			//obj = cfg.ReadSettingObject("soundlinedefflag", 0);
-			//if(obj is int) soundlinedefflag = ((int)obj).ToString(CultureInfo.InvariantCulture); else soundlinedefflag = obj.ToString();
 			obj = cfg.ReadSettingObject("singlesidedflag", 0);
 			if(obj is int) singlesidedflag = ((int)obj).ToString(CultureInfo.InvariantCulture); else singlesidedflag = obj.ToString();
 			obj = cfg.ReadSettingObject("doublesidedflag", 0);
diff --git a/Source/Core/Map/Linedef.cs b/Source/Core/Map/Linedef.cs
index dc7c1a171..d28d4fa4c 100644
--- a/Source/Core/Map/Linedef.cs
+++ b/Source/Core/Map/Linedef.cs
@@ -407,8 +407,9 @@ namespace CodeImp.DoomBuilder.Map
 			// Now make the new flags
 			flags.Clear();
 
-			//mxd. That's hackish...
-			if(action != 0 && activate == 0) flags[General.Map.Config.LinedefActivates[0].Key] = true;
+			//mxd. Add default activation flag if needed
+			if(action != 0 && activate == 0 && !string.IsNullOrEmpty(General.Map.Config.DefaultLinedefActivationFlag)) 
+				flags[General.Map.Config.DefaultLinedefActivationFlag] = true;
 
 			foreach(FlagTranslation f in General.Map.Config.LinedefFlagsTranslation)
 			{
diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs
index 101cecd2b..b2d98a17c 100644
--- a/Source/Core/Windows/MainForm.cs
+++ b/Source/Core/Windows/MainForm.cs
@@ -2602,13 +2602,18 @@ namespace CodeImp.DoomBuilder.Windows
 
 			//save image
 			using(Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height)) {
-				using(Graphics g = Graphics.FromImage(bitmap))
+				using(Graphics g = Graphics.FromImage(bitmap)) {
 					g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
 
-				bitmap.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
+					try {
+						bitmap.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
+						DisplayStatus(StatusType.Info, "Screenshot saved to '" + path + "'");
+					} catch(ExternalException e) {
+						DisplayStatus(StatusType.Warning, "Failed to save screenshot...");
+						General.ErrorLogger.Add(ErrorType.Error, "Failed to save screenshot:" + Environment.NewLine + e.Message);
+					}
+				}
 			}
-
-			DisplayStatus(StatusType.Info, "Screenshot saved to '" + path + "'");
 		}
 		
 		#endregion
-- 
GitLab