diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj index 8e9c1137f8426ecb46bccb84cf9679a20baae312..3eeee099db35f7f83b025e8608cf07dac58837d8 100644 --- a/Source/Core/Builder.csproj +++ b/Source/Core/Builder.csproj @@ -1126,6 +1126,13 @@ <None Include="Resources\About.png" /> <None Include="Resources\Configuration.png" /> <EmbeddedResource Include="Resources\Black.png" /> + <None Include="Resources\Angle1.png" /> + <None Include="Resources\Angle2.png" /> + <None Include="Resources\Angle3.png" /> + <None Include="Resources\Angle4.png" /> + <None Include="Resources\Angle5.png" /> + <None Include="Resources\Angle6.png" /> + <None Include="Resources\Angle7.png" /> <Content Include="Resources\DB2.ico" /> <None Include="Resources\GZDB2.ico" /> <None Include="Resources\fog.png" /> diff --git a/Source/Core/Controls/ArgumentBox.cs b/Source/Core/Controls/ArgumentBox.cs index 447aef5fe11ced41963a2746ff2a7a4ced4ce6c1..e22cc9e5d3d84f0073114b8db33f981707ccf490 100644 --- a/Source/Core/Controls/ArgumentBox.cs +++ b/Source/Core/Controls/ArgumentBox.cs @@ -129,6 +129,13 @@ namespace CodeImp.DoomBuilder.Controls private void combobox_TextChanged(object sender, EventArgs e) { scrollbuttons.Enabled = !CheckIsRelative(); + + //mxd. Update button image? + if(typehandler.DynamicImage) + { + combobox_Validating(sender, new CancelEventArgs()); + button.Image = typehandler.BrowseImage; + } } // Mouse wheel used diff --git a/Source/Core/Controls/FieldsEditorControl.cs b/Source/Core/Controls/FieldsEditorControl.cs index 7c08243668824f011ba1750c02742eb5006e3083..807c42c14272e3bbe4ac1c561d7b604580352911 100644 --- a/Source/Core/Controls/FieldsEditorControl.cs +++ b/Source/Core/Controls/FieldsEditorControl.cs @@ -804,7 +804,9 @@ namespace CodeImp.DoomBuilder.Controls if(row is FieldsEditorRow) { // Browse - (row as FieldsEditorRow).Browse(this.ParentForm); + FieldsEditorRow frow = (FieldsEditorRow)row; + frow.Browse(this.ParentForm); + if(frow.TypeHandler.DynamicImage) browsebutton.Image = frow.TypeHandler.BrowseImage; //mxd fieldslist.Focus(); } } diff --git a/Source/Core/IO/UniversalStreamReader.cs b/Source/Core/IO/UniversalStreamReader.cs index 015385ab9e09bbf6a0b14e995c297079e5be93b0..cbe5f342cdbf3a13bca79ce7c4969f4c77ef604c 100644 --- a/Source/Core/IO/UniversalStreamReader.cs +++ b/Source/Core/IO/UniversalStreamReader.cs @@ -225,7 +225,7 @@ namespace CodeImp.DoomBuilder.IO // Go for all lines map.SetCapacity(0, map.Linedefs.Count + linescolls.Count, map.Sidedefs.Count + sidescolls.Count, 0, 0); - char[] splitter = new[] { ' ' }; //mxd + char[] splitter = { ' ' }; //mxd for(int i = 0; i < linescolls.Count; i++) { // Read fields @@ -235,7 +235,8 @@ namespace CodeImp.DoomBuilder.IO int v1 = GetCollectionEntry(lc, "v1", true, 0, where); int v2 = GetCollectionEntry(lc, "v2", true, 0, where); - if(!vertexlink.ContainsKey(v1) || !vertexlink.ContainsKey(v2)) { //mxd + if(!vertexlink.ContainsKey(v1) || !vertexlink.ContainsKey(v2)) + { //mxd General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + i + " references one or more invalid vertices. Linedef has been removed."); continue; } @@ -508,7 +509,7 @@ namespace CodeImp.DoomBuilder.IO //mxd. Try to find the type from configuration if(setknowncustomtypes) { - type = General.Map.Config.ReadSetting("universalfields." + elementname + "." + e.Key + ".type", -1); + type = General.Map.Options.GetUniversalFieldType(elementname, e.Key, -1); if(type != -1) { diff --git a/Source/Core/Map/UniValue.cs b/Source/Core/Map/UniValue.cs index e2144b56dec9478a28e1a90585b97caae3ba9d52..5a74b9e6c1853f0db31e0b7903dbd045feeae4da 100644 --- a/Source/Core/Map/UniValue.cs +++ b/Source/Core/Map/UniValue.cs @@ -126,6 +126,7 @@ namespace CodeImp.DoomBuilder.Map } case UniversalType.AngleDegrees: + case UniversalType.AngleByte: //mxd case UniversalType.Color: case UniversalType.EnumBits: case UniversalType.EnumOption: diff --git a/Source/Core/Properties/Resources.Designer.cs b/Source/Core/Properties/Resources.Designer.cs index 987ee0052eee8863f43bd87551f8a71961174d98..5fa8163528a0cc0f4923646bab28e416cccdf3c4 100644 --- a/Source/Core/Properties/Resources.Designer.cs +++ b/Source/Core/Properties/Resources.Designer.cs @@ -81,6 +81,55 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap Angle1 { + get { + object obj = ResourceManager.GetObject("Angle1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Angle2 { + get { + object obj = ResourceManager.GetObject("Angle2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Angle3 { + get { + object obj = ResourceManager.GetObject("Angle3", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Angle4 { + get { + object obj = ResourceManager.GetObject("Angle4", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Angle5 { + get { + object obj = ResourceManager.GetObject("Angle5", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Angle6 { + get { + object obj = ResourceManager.GetObject("Angle6", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Angle7 { + get { + object obj = ResourceManager.GetObject("Angle7", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap ArrowDown { get { object obj = ResourceManager.GetObject("ArrowDown", resourceCulture); diff --git a/Source/Core/Properties/Resources.resx b/Source/Core/Properties/Resources.resx index 6afe901600ffe6c1866747ed641eb316e6aa9b85..19b2e3e3501ea49c382b0d181be4858cef0bcd20 100644 --- a/Source/Core/Properties/Resources.resx +++ b/Source/Core/Properties/Resources.resx @@ -565,4 +565,25 @@ <data name="FixedThingsScale" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\FixedThingsScale.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> + <data name="Angle1" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Angle1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Angle2" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Angle2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Angle3" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Angle3.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Angle4" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Angle4.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Angle5" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Angle5.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Angle6" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Angle6.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Angle7" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Angle7.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> </root> \ No newline at end of file diff --git a/Source/Core/Resources/Angle1.png b/Source/Core/Resources/Angle1.png new file mode 100644 index 0000000000000000000000000000000000000000..6e0a3b07a5ae58fdb27d86b9a2b01a10c1c578d3 Binary files /dev/null and b/Source/Core/Resources/Angle1.png differ diff --git a/Source/Core/Resources/Angle2.png b/Source/Core/Resources/Angle2.png new file mode 100644 index 0000000000000000000000000000000000000000..721a845f81a366937fa8b1bc269419e718d54b37 Binary files /dev/null and b/Source/Core/Resources/Angle2.png differ diff --git a/Source/Core/Resources/Angle3.png b/Source/Core/Resources/Angle3.png new file mode 100644 index 0000000000000000000000000000000000000000..82a44cccd8f9a6c9f5b05fdb6617758cdd4c2fbf Binary files /dev/null and b/Source/Core/Resources/Angle3.png differ diff --git a/Source/Core/Resources/Angle4.png b/Source/Core/Resources/Angle4.png new file mode 100644 index 0000000000000000000000000000000000000000..601e88d939c333ea932ffcc216a50cd43421b54c Binary files /dev/null and b/Source/Core/Resources/Angle4.png differ diff --git a/Source/Core/Resources/Angle5.png b/Source/Core/Resources/Angle5.png new file mode 100644 index 0000000000000000000000000000000000000000..709258ea25eec7039caa58dd13ad58ef725a8539 Binary files /dev/null and b/Source/Core/Resources/Angle5.png differ diff --git a/Source/Core/Resources/Angle6.png b/Source/Core/Resources/Angle6.png new file mode 100644 index 0000000000000000000000000000000000000000..01ab35c74f9dd42784263046dd74d3af706b54d8 Binary files /dev/null and b/Source/Core/Resources/Angle6.png differ diff --git a/Source/Core/Resources/Angle7.png b/Source/Core/Resources/Angle7.png new file mode 100644 index 0000000000000000000000000000000000000000..9552fe3c6774772a86373a4b5786061ca1470e05 Binary files /dev/null and b/Source/Core/Resources/Angle7.png differ diff --git a/Source/Core/Types/AngleByteHandler.cs b/Source/Core/Types/AngleByteHandler.cs index bfc8dc9d61a4729bdca719427893dfe28ce40f4a..d5cd1a3a054f3687e5be17bbde813c05e061d2e3 100644 --- a/Source/Core/Types/AngleByteHandler.cs +++ b/Source/Core/Types/AngleByteHandler.cs @@ -1,6 +1,7 @@ #region ================== Namespaces using System; +using System.Drawing; using System.Windows.Forms; using CodeImp.DoomBuilder.Windows; @@ -11,6 +12,12 @@ namespace CodeImp.DoomBuilder.Types [TypeHandler(UniversalType.AngleByte, "Byte Angle", true)] internal class AngleByteHandler : AngleDegreesHandler { + #region ================== Properties + + public override Image BrowseImage { get { return angleicons[General.ClampAngle((int)Math.Round((float)value / 256 * 360) + 22) / 45]; } } + + #endregion + #region ================== Methods public override void Browse(IWin32Window parent) diff --git a/Source/Core/Types/AngleDegreesFloatHandler.cs b/Source/Core/Types/AngleDegreesFloatHandler.cs index ba7e6ea7e1d116eb66e562eb150d1a39d10b0f7e..5655c38abcd0c890c3f83460b76e6bbfe0229236 100644 --- a/Source/Core/Types/AngleDegreesFloatHandler.cs +++ b/Source/Core/Types/AngleDegreesFloatHandler.cs @@ -27,7 +27,7 @@ using CodeImp.DoomBuilder.Windows; namespace CodeImp.DoomBuilder.Types { [TypeHandler(UniversalType.AngleDegreesFloat, "Degrees (Decimal)", true)] - internal class AngleDegreesFloatHandler : TypeHandler + internal class AngleDegreesFloatHandler : AngleDegreesHandler { #region ================== Constants @@ -35,7 +35,7 @@ namespace CodeImp.DoomBuilder.Types #region ================== Variables - private float value; + private new float value; #endregion @@ -43,7 +43,7 @@ namespace CodeImp.DoomBuilder.Types public override bool IsBrowseable { get { return true; } } - public override Image BrowseImage { get { return Properties.Resources.Angle; } } + public override Image BrowseImage { get { return angleicons[General.ClampAngle((int)Math.Round(value) + 22) / 45]; } } #endregion @@ -73,7 +73,8 @@ namespace CodeImp.DoomBuilder.Types // Set directly this.value = Convert.ToSingle(value); } - else { + else + { // Try parsing as string float result; if(float.TryParse(value.ToString(), NumberStyles.Float, CultureInfo.CurrentCulture, out result)) diff --git a/Source/Core/Types/AngleDegreesHandler.cs b/Source/Core/Types/AngleDegreesHandler.cs index 01f1e36fd3ff7110a6a132bfa34b342e210fdd92..88a73984b6991cb210f326254bf3c2154edc0854 100644 --- a/Source/Core/Types/AngleDegreesHandler.cs +++ b/Source/Core/Types/AngleDegreesHandler.cs @@ -36,6 +36,7 @@ namespace CodeImp.DoomBuilder.Types #region ================== Variables protected int value; + protected Image[] angleicons; #endregion @@ -43,12 +44,28 @@ namespace CodeImp.DoomBuilder.Types public override bool IsBrowseable { get { return true; } } - public override Image BrowseImage { get { return Properties.Resources.Angle; } } - + public override Image BrowseImage { get { return angleicons[General.ClampAngle(value + 22) / 45]; } } + public override bool DynamicImage { get { return true; } } + #endregion #region ================== Constructor + public AngleDegreesHandler() + { + angleicons = new[] + { + Properties.Resources.Angle, + Properties.Resources.Angle7, + Properties.Resources.Angle6, + Properties.Resources.Angle5, + Properties.Resources.Angle4, + Properties.Resources.Angle3, + Properties.Resources.Angle2, + Properties.Resources.Angle1 + }; + } + #endregion #region ================== Methods diff --git a/Source/Core/Types/AngleRadiansHandler.cs b/Source/Core/Types/AngleRadiansHandler.cs index e167062984e7a922a190ac9359a1d57373f21b0f..a3668507327111e77119375d68adf1d3269b5b31 100644 --- a/Source/Core/Types/AngleRadiansHandler.cs +++ b/Source/Core/Types/AngleRadiansHandler.cs @@ -28,7 +28,7 @@ using CodeImp.DoomBuilder.Geometry; namespace CodeImp.DoomBuilder.Types { [TypeHandler(UniversalType.AngleRadians, "Radians", true)] - internal class AngleRadiansHandler : TypeHandler + internal class AngleRadiansHandler : AngleDegreesHandler { #region ================== Constants @@ -36,7 +36,7 @@ namespace CodeImp.DoomBuilder.Types #region ================== Variables - private float value; + private new float value; #endregion @@ -44,7 +44,7 @@ namespace CodeImp.DoomBuilder.Types public override bool IsBrowseable { get { return true; } } - public override Image BrowseImage { get { return Properties.Resources.Angle; } } + public override Image BrowseImage { get { return angleicons[General.ClampAngle(Angle2D.RealToDoom(value) + 22) / 45]; } } #endregion diff --git a/Source/Core/Types/TypeHandler.cs b/Source/Core/Types/TypeHandler.cs index be7172ff8c83b824f0ca1629e836f7eac469f2e6..804a0f2012ed61428fed465ebf9034f51c34302a 100644 --- a/Source/Core/Types/TypeHandler.cs +++ b/Source/Core/Types/TypeHandler.cs @@ -59,6 +59,7 @@ namespace CodeImp.DoomBuilder.Types public virtual bool IsLimitedToEnums { get { return false; } } public virtual Image BrowseImage { get { return null; } } + public virtual bool DynamicImage { get { return false; } } //mxd. When set to true, the button image will be re-applied after value changes #endregion