Added: angle selector button used in arguments custom fields controls now shows angle value.

Fixed a crash when trying to store a custom field with "Byte Angle" type.
Fixed: in some cases custom field types stored in the map's .dbs file were not applied when loading a map.
This commit is contained in:
MaxED 2016-05-16 13:04:31 +00:00 committed by spherallic
parent cb882a4340
commit 6c8a59815f
19 changed files with 127 additions and 16 deletions

View file

@ -1141,6 +1141,13 @@
<None Include="Resources\About.png" /> <None Include="Resources\About.png" />
<None Include="Resources\Configuration.png" /> <None Include="Resources\Configuration.png" />
<EmbeddedResource Include="Resources\Black.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" /> <Content Include="Resources\DB2.ico" />
<None Include="Resources\GZDB2.ico" /> <None Include="Resources\GZDB2.ico" />
<None Include="Resources\fog.png" /> <None Include="Resources\fog.png" />

View file

@ -132,6 +132,13 @@ namespace CodeImp.DoomBuilder.Controls
private void combobox_TextChanged(object sender, EventArgs e) private void combobox_TextChanged(object sender, EventArgs e)
{ {
scrollbuttons.Enabled = !CheckIsRelative(); scrollbuttons.Enabled = !CheckIsRelative();
//mxd. Update button image?
if(typehandler.DynamicImage)
{
combobox_Validating(sender, new CancelEventArgs());
button.Image = typehandler.BrowseImage;
}
} }
// Mouse wheel used // Mouse wheel used

View file

@ -802,7 +802,9 @@ namespace CodeImp.DoomBuilder.Controls
if(row is FieldsEditorRow) if(row is FieldsEditorRow)
{ {
// Browse // 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(); fieldslist.Focus();
} }
} }

View file

@ -225,7 +225,7 @@ namespace CodeImp.DoomBuilder.IO
// Go for all lines // Go for all lines
map.SetCapacity(0, map.Linedefs.Count + linescolls.Count, map.Sidedefs.Count + sidescolls.Count, 0, 0); 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++) for(int i = 0; i < linescolls.Count; i++)
{ {
// Read fields // Read fields
@ -235,7 +235,8 @@ namespace CodeImp.DoomBuilder.IO
int v1 = GetCollectionEntry(lc, "v1", true, 0, where); int v1 = GetCollectionEntry(lc, "v1", true, 0, where);
int v2 = GetCollectionEntry(lc, "v2", 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."); General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + i + " references one or more invalid vertices. Linedef has been removed.");
continue; continue;
} }
@ -508,7 +509,7 @@ namespace CodeImp.DoomBuilder.IO
//mxd. Try to find the type from configuration //mxd. Try to find the type from configuration
if(setknowncustomtypes) 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) if(type != -1)
{ {

View file

@ -126,6 +126,7 @@ namespace CodeImp.DoomBuilder.Map
} }
case UniversalType.AngleDegrees: case UniversalType.AngleDegrees:
case UniversalType.AngleByte: //mxd
case UniversalType.Color: case UniversalType.Color:
case UniversalType.EnumBits: case UniversalType.EnumBits:
case UniversalType.EnumOption: case UniversalType.EnumOption:

View file

@ -90,9 +90,55 @@ namespace CodeImp.DoomBuilder.Properties {
} }
} }
/// <summary> internal static System.Drawing.Bitmap Angle1 {
/// Looks up a localized resource of type System.Drawing.Bitmap. get {
/// </summary> 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 { internal static System.Drawing.Bitmap ArrowDown {
get { get {
object obj = ResourceManager.GetObject("ArrowDown", resourceCulture); object obj = ResourceManager.GetObject("ArrowDown", resourceCulture);

View file

@ -577,6 +577,27 @@
<data name="FixedThingsScale" type="System.Resources.ResXFileRef, System.Windows.Forms"> <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> <value>..\Resources\FixedThingsScale.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </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>
<data name="Snap1mp" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Snap1mp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Snap1mp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\Snap1mp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,6 +1,7 @@
#region ================== Namespaces #region ================== Namespaces
using System; using System;
using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
using CodeImp.DoomBuilder.Windows; using CodeImp.DoomBuilder.Windows;
@ -11,6 +12,12 @@ namespace CodeImp.DoomBuilder.Types
[TypeHandler(UniversalType.AngleByte, "Byte Angle", true)] [TypeHandler(UniversalType.AngleByte, "Byte Angle", true)]
internal class AngleByteHandler : AngleDegreesHandler 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 #region ================== Methods
public override void Browse(IWin32Window parent) public override void Browse(IWin32Window parent)

View file

@ -27,7 +27,7 @@ using CodeImp.DoomBuilder.Windows;
namespace CodeImp.DoomBuilder.Types namespace CodeImp.DoomBuilder.Types
{ {
[TypeHandler(UniversalType.AngleDegreesFloat, "Degrees (Decimal)", true)] [TypeHandler(UniversalType.AngleDegreesFloat, "Degrees (Decimal)", true)]
internal class AngleDegreesFloatHandler : TypeHandler internal class AngleDegreesFloatHandler : AngleDegreesHandler
{ {
#region ================== Constants #region ================== Constants
@ -35,7 +35,7 @@ namespace CodeImp.DoomBuilder.Types
#region ================== Variables #region ================== Variables
private float value; private new float value;
#endregion #endregion
@ -43,7 +43,7 @@ namespace CodeImp.DoomBuilder.Types
public override bool IsBrowseable { get { return true; } } 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 #endregion
@ -73,7 +73,8 @@ namespace CodeImp.DoomBuilder.Types
// Set directly // Set directly
this.value = Convert.ToSingle(value); this.value = Convert.ToSingle(value);
} }
else { else
{
// Try parsing as string // Try parsing as string
float result; float result;
if(float.TryParse(value.ToString(), NumberStyles.Float, CultureInfo.CurrentCulture, out result)) if(float.TryParse(value.ToString(), NumberStyles.Float, CultureInfo.CurrentCulture, out result))

View file

@ -36,6 +36,7 @@ namespace CodeImp.DoomBuilder.Types
#region ================== Variables #region ================== Variables
protected int value; protected int value;
protected Image[] angleicons;
#endregion #endregion
@ -43,12 +44,28 @@ namespace CodeImp.DoomBuilder.Types
public override bool IsBrowseable { get { return true; } } 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 #endregion
#region ================== Constructor #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 #endregion
#region ================== Methods #region ================== Methods

View file

@ -28,7 +28,7 @@ using CodeImp.DoomBuilder.Geometry;
namespace CodeImp.DoomBuilder.Types namespace CodeImp.DoomBuilder.Types
{ {
[TypeHandler(UniversalType.AngleRadians, "Radians", true)] [TypeHandler(UniversalType.AngleRadians, "Radians", true)]
internal class AngleRadiansHandler : TypeHandler internal class AngleRadiansHandler : AngleDegreesHandler
{ {
#region ================== Constants #region ================== Constants
@ -36,7 +36,7 @@ namespace CodeImp.DoomBuilder.Types
#region ================== Variables #region ================== Variables
private float value; private new float value;
#endregion #endregion
@ -44,7 +44,7 @@ namespace CodeImp.DoomBuilder.Types
public override bool IsBrowseable { get { return true; } } 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 #endregion

View file

@ -59,6 +59,7 @@ namespace CodeImp.DoomBuilder.Types
public virtual bool IsLimitedToEnums { get { return false; } } public virtual bool IsLimitedToEnums { get { return false; } }
public virtual Image BrowseImage { get { return null; } } 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 #endregion