From 6b765f5a277bfc880227a250eb27eade5f6549df Mon Sep 17 00:00:00 2001 From: MaxED Date: Tue, 25 Nov 2014 11:52:01 +0000 Subject: [PATCH] Added long texture names support (enabled when "longtexturenames" game configuration property is set to true and "Use long texture names" check box is checked in Map Options). Open Map in Current WAD: resources are now reloaded when current and target map's resources don't match. Added some boilerplate to UniversalParser and PK3FileImage. Internal: ImageSelectorControl now has "UsePreviews" property. Internal: added ConfigurablePictureBox. Updated ZDoom_DECORATE.cfg. --- Build/Configurations/Includes/Common.cfg | 9 +- .../Configurations/Includes/ZDoom_common.cfg | 11 +- Build/Configurations/Includes/ZDoom_misc.cfg | 8 +- Build/Configurations/Zandronum_DoomUDMF.cfg | 6 + .../Configurations/Zandronum_HereticUDMF.cfg | 6 + Build/Configurations/Zandronum_HexenUDMF.cfg | 6 + Build/Configurations/Zandronum_StrifeUDMF.cfg | 6 + Build/Scripting/ZDoom_DECORATE.cfg | 91 +- Source/Core/Builder.csproj | 3 + Source/Core/Config/ConfigurationInfo.cs | 23 +- Source/Core/Config/GameConfiguration.cs | 6 +- .../Core/Controls/ConfigurablePictureBox.cs | 40 + Source/Core/Controls/DebugConsole.cs | 22 +- Source/Core/Controls/FlatSelectorControl.cs | 4 +- .../Controls/ImageBrowserControl.Designer.cs | 3 + Source/Core/Controls/ImageBrowserControl.cs | 43 +- Source/Core/Controls/ImageBrowserItem.cs | 9 + .../Controls/ImageSelectorControl.Designer.cs | 50 +- Source/Core/Controls/ImageSelectorControl.cs | 51 +- .../Core/Controls/ImageSelectorControl.resx | 9 +- Source/Core/Controls/LinedefInfoPanel.cs | 129 +- Source/Core/Controls/ResourceListEditor.cs | 48 +- Source/Core/Controls/SectorInfoPanel.cs | 148 ++- .../Core/Controls/TextureSelectorControl.cs | 10 +- Source/Core/Data/ColormapImage.cs | 13 +- Source/Core/Data/DataManager.cs | 97 +- Source/Core/Data/DataReader.cs | 10 +- Source/Core/Data/DirectoryReader.cs | 57 +- Source/Core/Data/DynamicBitmapImage.cs | 3 - Source/Core/Data/FileImage.cs | 82 +- Source/Core/Data/FlatImage.cs | 3 +- Source/Core/Data/HighResImage.cs | 20 +- Source/Core/Data/ImageData.cs | 45 +- Source/Core/Data/ImageDataFormat.cs | 22 +- Source/Core/Data/PK3FileImage.cs | 96 +- Source/Core/Data/PK3Reader.cs | 66 +- Source/Core/Data/PK3StructuredReader.cs | 131 +- Source/Core/Data/SimpleTextureImage.cs | 2 +- Source/Core/Data/TextureImage.cs | 2 +- Source/Core/Data/TexturePatch.cs | 27 +- Source/Core/Data/WADReader.cs | 43 +- Source/Core/Editing/CopyPasteManager.cs | 6 +- Source/Core/Editing/GridSetup.cs | 26 +- .../GZBuilder/Controls/MultiSelectTreeview.cs | 1 + .../Controls/PairedIntControl.Designer.cs | 40 +- Source/Core/General/ErrorLogger.cs | 11 +- Source/Core/General/General.cs | 55 +- Source/Core/General/MapManager.cs | 54 +- Source/Core/IO/ClipboardStreamReader.cs | 9 + Source/Core/IO/ClipboardStreamWriter.cs | 7 +- Source/Core/IO/Lump.cs | 14 +- Source/Core/IO/UniversalParser.cs | 16 +- Source/Core/IO/UniversalStreamReader.cs | 30 +- Source/Core/Map/MapOptions.cs | 16 +- Source/Core/Map/MapSet.cs | 146 +++ Source/Core/Windows/ChangeMapForm.cs | 36 +- Source/Core/Windows/GridSetupForm.cs | 11 +- .../Core/Windows/LinedefEditForm.Designer.cs | 9 +- .../Windows/LinedefEditFormUDMF.Designer.cs | 1070 ++++++++--------- Source/Core/Windows/LinedefEditFormUDMF.cs | 20 +- Source/Core/Windows/LinedefEditFormUDMF.resx | 108 +- Source/Core/Windows/MainForm.Designer.cs | 4 +- .../Core/Windows/MapOptionsForm.Designer.cs | 35 +- Source/Core/Windows/MapOptionsForm.cs | 18 +- Source/Core/Windows/MapOptionsForm.resx | 9 - .../Windows/OpenMapOptionsForm.Designer.cs | 29 +- Source/Core/Windows/OpenMapOptionsForm.cs | 19 +- Source/Core/Windows/OpenMapOptionsForm.resx | 12 - .../Core/Windows/PreferencesForm.Designer.cs | 1 + .../Windows/SectorEditFormUDMF.Designer.cs | 115 +- Source/Core/Windows/SectorEditFormUDMF.resx | 3 + Source/Core/Windows/TextureBrowserForm.cs | 117 +- Source/Core/ZDoom/PatchStructure.cs | 3 + Source/Core/ZDoom/TextureStructure.cs | 6 +- Source/Core/ZDoom/TexturesParser.cs | 17 +- .../FindReplace/FindAnyTextureFlat.cs | 2 +- .../FindReplace/FindSectorFlat.cs | 2 +- .../FindReplace/FindSidedefTexture.cs | 2 +- .../Interface/MenusForm.Designer.cs | 2 +- 79 files changed, 2088 insertions(+), 1453 deletions(-) create mode 100644 Source/Core/Controls/ConfigurablePictureBox.cs diff --git a/Build/Configurations/Includes/Common.cfg b/Build/Configurations/Includes/Common.cfg index 1bae0d63..b1a4be4a 100644 --- a/Build/Configurations/Includes/Common.cfg +++ b/Build/Configurations/Includes/Common.cfg @@ -21,10 +21,11 @@ topboundary = 32767; bottomboundary = -32768; -// Maximum length of texture name length in characters (0 for unlimited) -// WARNING: changing this may destroy your WAD file. Only change it when -// you know what you're doing! -maxtexturenamelength = 8; +// Enables support for long (> 8 chars) texture names +// (to use long texture names you must also enable "Use long texture names" in the Map Configuration window). +// WARNING: this should only be enabled for UDMF game configurations! +// WARNING: enabling this will make maps incompatible with Doom Builder 2 and can lead to problems in Slade 3! +longtexturenames = false; diff --git a/Build/Configurations/Includes/ZDoom_common.cfg b/Build/Configurations/Includes/ZDoom_common.cfg index 9c345b02..02ea9461 100644 --- a/Build/Configurations/Includes/ZDoom_common.cfg +++ b/Build/Configurations/Includes/ZDoom_common.cfg @@ -308,15 +308,16 @@ mapformat_hexen mapformat_udmf { // The format interface handles the map data format - formatinterface = "UniversalMapSetIO"; + formatinterface = "UniversalMapSetIO"; //mxd. The default script compiler to use defaultscriptcompiler = "zdoom_acs.cfg"; - // Maximum length of texture name length in characters (0 for unlimited) - // WARNING: changing this may destroy your WAD file. Only change it when - // you know what you're doing! - maxtexturenamelength = 2048; + // Enables support for long (> 8 chars) texture names + // (to use long texture names you must also enable "Use long texture names" in the Map Configuration window). + // WARNING: this should only be enabled for UDMF game configurations! + // WARNING: enabling this will make maps incompatible with Doom Builder 2 and can lead to problems in Slade 3! + longtexturenames = true; // Default nodebuilder configurations defaultsavecompiler = "zdbsp_udmf_normal"; diff --git a/Build/Configurations/Includes/ZDoom_misc.cfg b/Build/Configurations/Includes/ZDoom_misc.cfg index a2be9b67..b9c7037b 100644 --- a/Build/Configurations/Includes/ZDoom_misc.cfg +++ b/Build/Configurations/Includes/ZDoom_misc.cfg @@ -554,10 +554,10 @@ enums generic_door_delays { - 8 = "1 second"; - 34 = "4 seconds"; - 69 = "9 seconds"; - 240 = "30 seconds"; + 8 = "8: 1 second"; + 34 = "34: 4 seconds"; + 69 = "69: 9 seconds"; + 240 = "240: 30 seconds"; } donut diff --git a/Build/Configurations/Zandronum_DoomUDMF.cfg b/Build/Configurations/Zandronum_DoomUDMF.cfg index 08bda09e..e735603f 100644 --- a/Build/Configurations/Zandronum_DoomUDMF.cfg +++ b/Build/Configurations/Zandronum_DoomUDMF.cfg @@ -26,6 +26,12 @@ include("Includes\\ZDoom_common.cfg", "common"); // Settings common to text map format include("Includes\\ZDoom_common.cfg", "mapformat_udmf"); +// Enables support for long (> 8 chars) texture names +// (to use long texture names you must also enable "Use long texture names" in the Map Configuration window). +// WARNING: this should only be enabled for UDMF game configurations! +// WARNING: enabling this will make maps incompatible with Doom Builder 2 and can lead to problems in Slade 3! +longtexturenames = false; + // mxd. Default script compiler defaultscriptcompiler = "zandronum_acs.cfg"; diff --git a/Build/Configurations/Zandronum_HereticUDMF.cfg b/Build/Configurations/Zandronum_HereticUDMF.cfg index addf0654..048ae111 100644 --- a/Build/Configurations/Zandronum_HereticUDMF.cfg +++ b/Build/Configurations/Zandronum_HereticUDMF.cfg @@ -26,6 +26,12 @@ include("Includes\\ZDoom_common.cfg", "common"); // Settings common to text map format include("Includes\\ZDoom_common.cfg", "mapformat_udmf"); +// Enables support for long (> 8 chars) texture names +// (to use long texture names you must also enable "Use long texture names" in the Map Configuration window). +// WARNING: this should only be enabled for UDMF game configurations! +// WARNING: enabling this will make maps incompatible with Doom Builder 2 and can lead to problems in Slade 3! +longtexturenames = false; + // mxd. Default script compiler defaultscriptcompiler = "zandronum_acs.cfg"; diff --git a/Build/Configurations/Zandronum_HexenUDMF.cfg b/Build/Configurations/Zandronum_HexenUDMF.cfg index 5077c150..cd4faf3e 100644 --- a/Build/Configurations/Zandronum_HexenUDMF.cfg +++ b/Build/Configurations/Zandronum_HexenUDMF.cfg @@ -26,6 +26,12 @@ include("Includes\\ZDoom_common.cfg", "common"); // Settings common to text map format include("Includes\\ZDoom_common.cfg", "mapformat_udmf"); +// Enables support for long (> 8 chars) texture names +// (to use long texture names you must also enable "Use long texture names" in the Map Configuration window). +// WARNING: this should only be enabled for UDMF game configurations! +// WARNING: enabling this will make maps incompatible with Doom Builder 2 and can lead to problems in Slade 3! +longtexturenames = false; + // mxd. Default script compiler defaultscriptcompiler = "zandronum_acs.cfg"; diff --git a/Build/Configurations/Zandronum_StrifeUDMF.cfg b/Build/Configurations/Zandronum_StrifeUDMF.cfg index b2adeedd..b6e4a522 100644 --- a/Build/Configurations/Zandronum_StrifeUDMF.cfg +++ b/Build/Configurations/Zandronum_StrifeUDMF.cfg @@ -26,6 +26,12 @@ include("Includes\\ZDoom_common.cfg", "common"); // Settings common to text map format include("Includes\\ZDoom_common.cfg", "mapformat_udmf"); +// Enables support for long (> 8 chars) texture names +// (to use long texture names you must also enable "Use long texture names" in the Map Configuration window). +// WARNING: this should only be enabled for UDMF game configurations! +// WARNING: enabling this will make maps incompatible with Doom Builder 2 and can lead to problems in Slade 3! +longtexturenames = false; + // mxd. Default script compiler defaultscriptcompiler = "zandronum_acs.cfg"; diff --git a/Build/Scripting/ZDoom_DECORATE.cfg b/Build/Scripting/ZDoom_DECORATE.cfg index 5207f023..be03b563 100644 --- a/Build/Scripting/ZDoom_DECORATE.cfg +++ b/Build/Scripting/ZDoom_DECORATE.cfg @@ -23,16 +23,16 @@ keywords A_AlertMonsters = "A_AlertMonsters[(float maxrange = 0[, int flags = 0])]"; A_Burst = "A_Burst(string type)"; A_CentaurDefend = "A_CentaurDefend"; - A_Chase = "A_Chase[(string meleestate = 'Melee'[, string rangedstate = 'Missile'[, int flags = 0]])]"; + A_Chase = "A_Chase[(string meleestate = \"Melee\"[, string rangedstate = \"Missile\"[, int flags = 0]])]"; A_ClearLastHeard = "A_ClearLastHeard"; A_ClearSoundTarget = "A_ClearSoundTarget"; A_ClearTarget = "A_ClearTarget"; - A_DamageChildren = "A_DamageChildren(int amount[, string damagetype = 'None'[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; - A_DamageMaster = "A_DamageMaster(int amount[, string damagetype = 'None'[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; - A_DamageSelf = "A_DamageSelf(int amount[, string damagetype = 'None'[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; - A_DamageSiblings = "A_DamageSiblings(int amount[, string damagetype = 'None'[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; - A_DamageTarget = "A_DamageTarget(int amount[, string damagetype = 'None'[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; - A_DamageTracer = "A_DamageTracer(int amount[, string damagetype = 'None'[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; + A_DamageChildren = "A_DamageChildren(int amount[, string damagetype = \"None\"[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; + A_DamageMaster = "A_DamageMaster(int amount[, string damagetype = \"None\"[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; + A_DamageSelf = "A_DamageSelf(int amount[, string damagetype = \"None\"[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; + A_DamageSiblings = "A_DamageSiblings(int amount[, string damagetype = \"None\"[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; + A_DamageTarget = "A_DamageTarget(int amount[, string damagetype = \"None\"[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; + A_DamageTracer = "A_DamageTracer(int amount[, string damagetype = \"None\"[, int flags = 0]])\namount: amount of damage to inflict. Use a negative value to heal.\ndamagetype: the type of damage to inflict.\nflags: DMSS flags."; A_Die = "A_Die[(string damagetype)]"; A_FaceTarget = "A_FaceTarget[(float angle = 0[, float pitch = 0])]"; A_FaceMaster = "A_FaceMaster[(float angle = 0[, float pitch = 0])]"; @@ -56,7 +56,7 @@ keywords A_Remove = "A_Remove(int pointer, int flags)\nflags: RMVF flags."; A_SentinelBob = "A_SentinelBob"; A_TurretLook = "A_TurretLook"; - A_Teleport = "A_Teleport[(string teleportstate = 'Teleport'[, string targettype = 'BossSpot'[, string fogtype = 'TeleportFog'[, int flags = 0[, float mindist = 0[, float maxdist = 0]]]]])]"; + A_Teleport = "A_Teleport[(string teleportstate = \"Teleport\"[, string targettype = \"BossSpot\"[, string fogtype = \"TeleportFog\"[, int flags = 0[, float mindist = 0[, float maxdist = 0]]]]])]"; A_VileChase = "A_VileChase"; A_Wander = "A_Wander"; //Generic monster attacks @@ -64,16 +64,16 @@ keywords A_CustomBulletAttack = "A_CustomBulletAttack(float horz_spread, float vert_spread, int numbullets, int damageperbullet, string pufftype[, float range[, int flags]])"; A_CustomRailgun = "A_CustomRailgun(int damage[, int offset[, color ringcolor[, color corecolor[, int flags[, bool aim[, float maxdiff[, string pufftype[, float spread_xy[, float spread_z[, fixed range[, int duration[, float sparsity[, float driftspeed[, string spawnclass]]]]]]]]]]]]]])"; A_CustomMeleeAttack = "A_CustomMeleeAttack(int damage[, string meleesound[, string misssound[, string damagetype[, bool bleed]]]])"; - A_CustomComboAttack = "A_CustomComboAttack(string missiletype, float spawnheight, int damage, string meleesound[, string damagetype = 'Melee'[, bool bleed = true]])"; + A_CustomComboAttack = "A_CustomComboAttack(string missiletype, float spawnheight, int damage, string meleesound[, string damagetype = \"Melee\"[, bool bleed = true]])"; A_MonsterRefire = "A_MonsterRefire(int chancecontinue, string abortstate) "; A_BasicAttack = "A_BasicAttack(int meleedamage, string meleesound, string missiletype, float missileheight)"; A_BulletAttack = "A_BulletAttack"; A_MonsterRail = "A_MonsterRail"; - A_Explode = "A_Explode[(int explosiondamage = 128[, int explosionradius = 128[, int flags = XF_HURTSOURCE[, bool alert = false[, int fulldamageradius = 0[, int nails = 0[, int naildamage = 10[, string pufftype = 'BulletPuff']]]]]]])]"; + A_Explode = "A_Explode[(int explosiondamage = 128[, int explosionradius = 128[, int flags = XF_HURTSOURCE[, bool alert = false[, int fulldamageradius = 0[, int nails = 0[, int naildamage = 10[, string pufftype = \"BulletPuff\"]]]]]]])]"; A_RadiusThrust = "A_RadiusThrust(int force, int distance[, int flags[, int fullthrustdistance]])"; A_Detonate = "A_Detonate"; A_ThrowGrenade = "A_ThrowGrenade(string spawntype[, float spawnheight[, float throwspeed_horz[, float throwspeed_vert[, bool useammo]]]])"; - A_WolfAttack = "A_WolfAttack[(int flags = 0[, string soundname = 'weapons/pistol'[, float snipe = 1.0[, int damage = 64[, int blocksize = 128[, int pointblank = 0[, int longrange = 0[, float runspeed = 160.0, [string pufftype = 'BulletPuff']]]]]]]])]"; + A_WolfAttack = "A_WolfAttack[(int flags = 0[, string soundname = \"weapons/pistol\"[, float snipe = 1.0[, int damage = 64[, int blocksize = 128[, int pointblank = 0[, int longrange = 0[, float runspeed = 160.0, [string pufftype = \"BulletPuff\"]]]]]]]])]"; //Freeze death functions A_FreezeDeath = "A_FreezeDeath"; A_GenericFreezeDeath = "A_GenericFreezeDeath"; @@ -95,8 +95,8 @@ keywords A_BrainAwake = "A_BrainAwake"; A_BFGSound = "A_BFGSound"; //Print actions - A_Print = "A_Print(string text[, float time = 0.0[, string fontname = 'SmallFont']])"; - A_PrintBold = "A_PrintBold(string text[, float time = 0.0[, string fontname = 'SmallFont']])"; + A_Print = "A_Print(string text[, float time = 0.0[, string fontname = \"SmallFont\"]])"; + A_PrintBold = "A_PrintBold(string text[, float time = 0.0[, string fontname = \"SmallFont\"]])"; A_Log = "A_Log(string text)"; A_LogInt = "A_LogInt(int number)"; //Special actions @@ -109,8 +109,8 @@ keywords A_SetBlend = "A_SetBlend(string blendcolor, float alpha, int duration[, string fadecolor])"; A_CheckPlayerDone = "A_CheckPlayerDone"; A_PlayerSkinCheck = "A_PlayerSkinCheck(string state)"; - A_SkullPop = "A_SkullPop[(string type = 'BloodySkull')]"; - A_Quake = "A_Quake (int intensity, int duration, int damageradius, int tremorradius[, string sound = 'world/quake'])"; + A_SkullPop = "A_SkullPop[(string type = \"BloodySkull\")]"; + A_Quake = "A_Quake (int intensity, int duration, int damageradius, int tremorradius[, string sound = \"world/quake\"])"; //Spawn functions A_TossGib = "A_TossGib"; A_SpawnDebris = "A_SpawnDebris(string type[, bool translation = false[, float horizontal_vel = 1.0[, float vertical_vel = 1.0]]])"; @@ -159,14 +159,14 @@ keywords A_Respawn = "A_Respawn[(int flags = RSF_FOG)]\nflags: RSF flags"; A_ScaleVelocity = "A_ScaleVelocity(float scale)"; A_ScreamAndUnblock = "A_ScreamAndUnblock"; - A_SetAngle = "A_SetAngle(float angle[, int flags])\nangle: the actor's new angle, in degrees.\nflags: SPF flags."; + A_SetAngle = "A_SetAngle(float angle[, int flags])\nangle: the actor\"s new angle, in degrees.\nflags: SPF flags."; A_SetArg = "A_SetArg(int position, int value)"; A_SetDamageType = "A_SetDamageType(string damagetype)"; A_SetFloat = "A_SetFloat"; A_SetFloorClip = "A_SetFloorClip"; A_SetInvulnerable = "A_SetInvulnerable"; A_SetMass = "A_SetMass(int mass)"; - A_SetPitch = "A_SetPitch(float pitch[, int flags])\npitch: The actor's new pitch, in degrees.\nflags: SPF flags."; + A_SetPitch = "A_SetPitch(float pitch[, int flags])\npitch: The actor\"s new pitch, in degrees.\nflags: SPF flags."; A_SetReflective = "A_SetReflective"; A_SetReflectiveInvulnerable = "A_SetReflectiveInvulnerable"; A_SetScale = "A_SetScale(float scaleX[, float scaleY = scaleX])"; @@ -215,9 +215,9 @@ keywords A_WeaponReady = "A_WeaponReady[(int flags = 0)]\nflags: WRF flags."; A_Lower = "A_Lower"; A_Raise = "A_Raise"; - A_ReFire = "A_ReFire[(string state = 'Hold')]"; + A_ReFire = "A_ReFire[(string state = \"Hold\")]"; A_ClearReFire = "A_ClearReFire"; - A_GunFlash = "A_GunFlash[(string state = 'Flash'[, int flags = 0])]\nflags: GFF flags."; + A_GunFlash = "A_GunFlash[(string state = \"Flash\"[, int flags = 0])]\nflags: GFF flags."; A_CheckReload = "A_CheckReload"; A_CheckForReload = "A_CheckForReload(int counter, string state[, bool dontincrement = false])"; A_ResetReloadCounter = "A_ResetReloadCounter"; @@ -231,9 +231,9 @@ keywords A_SetCrosshair = "A_SetCrosshair(int number)"; //Weapon attack functions A_Punch = "A_Punch"; - A_Saw = "A_Saw[(string fullsound = 'weapons/sawfull'[, string hitsound = 'weapons/sawhit'[, int damage = 0[, string pufftype = 'BulletPuff'[, int flags = 0[, float range = 65.0[, float spread_xy = 2.8125[, float spread_z = 0[, float lifesteal = 0]]]]]]]])]"; - A_CustomPunch = "A_CustomPunch(int damage[, bool norandom = false[, int flags = 0[, string pufftype = 'BulletPuff'[, float range = 64.0[, float lifesteal = 0]]]]])"; - A_FireBullets = "A_FireBullets(int spread_horz, int spread_vert, int numbullets, int damage[, string pufftype = ''[, int flags = FBF_USEAMMO[, float range = 0]]])"; + A_Saw = "A_Saw[(string fullsound = \"weapons/sawfull\"[, string hitsound = \"weapons/sawhit\"[, int damage = 0[, string pufftype = \"BulletPuff\"[, int flags = 0[, float range = 65.0[, float spread_xy = 2.8125[, float spread_z = 0[, float lifesteal = 0]]]]]]]])]"; + A_CustomPunch = "A_CustomPunch(int damage[, bool norandom = false[, int flags = 0[, string pufftype = \"BulletPuff\"[, float range = 64.0[, float lifesteal = 0]]]]])"; + A_FireBullets = "A_FireBullets(int spread_horz, int spread_vert, int numbullets, int damage[, string pufftype = \"\"[, int flags = FBF_USEAMMO[, float range = 0]]])"; A_FireCustomMissile = "A_FireCustomMissile(string missiletype[, int angle = 0[, bool useammo = false[, int spawnofs_horz = 0[, int spawnheight = 0[, bool aim = false OR int flags = 0[, angle pitch = 0]]]]]])"; A_RailAttack = "A_RailAttack(int damage[, int spawnofs_horz[, bool useammo[, color ringcolor[, color corecolor[, int flags[, int maxdiff[, string pufftype[, float spread_xy = 0[, float spread_z = 0[, fixed range = 8192[, int duration = 35[, float sparsity = 1.0[, float driftspeed = 1.0[, string spawnclass[, float spawnofs_z = 0]]]]]]]]]]]]]]])"; A_FireAssaultGun = "A_FireAssaultGun"; @@ -266,23 +266,23 @@ keywords A_SkullAttack = "A_SkullAttack[(int speed = 20)]"; A_BspiAttack = "A_BspiAttack"; A_CyberAttack = "A_CyberAttack"; - A_PainAttack = "A_PainAttack[(string spawntype = 'LostSoul'[, float angle = 0[, int flags = 0[, int limit = 21]]])]"; - A_DualPainAttack = "A_DualPainAttack[(string spawntype = 'LostSoul')]"; - A_PainDie = "A_PainDie[(string spawntype = 'LostSoul')]"; + A_PainAttack = "A_PainAttack[(string spawntype = \"LostSoul\"[, float angle = 0[, int flags = 0[, int limit = 21]]])]"; + A_DualPainAttack = "A_DualPainAttack[(string spawntype = \"LostSoul\")]"; + A_PainDie = "A_PainDie[(string spawntype = \"LostSoul\")]"; A_SkelFist = "A_SkelFist"; A_SkelMissile = "A_SkelMissile"; - A_FatAttack1 = "A_FatAttack1[(string spawntype = 'FatShot')]"; - A_FatAttack2 = "A_FatAttack2[(string spawntype = 'FatShot')]"; - A_FatAttack3 = "A_FatAttack3[(string spawntype = 'FatShot')]"; - A_VileTarget = "A_VileTarget[(string type = 'ArchvileFire')]"; - A_VileAttack = "A_VileAttack[(string sound = 'vile/stop'[, int initialdamage = 20[, int blastdamage = 70[, int blastradius = 70[, float thrustfactor = 1.0[, string damagetype = 'Fire'[, int flags = 0]]]]]])]"; - A_BrainSpit = "A_BrainSpit[(string spawntype = 'SpawnShot')]"; - A_SpawnFly = "A_SpawnFly[(string fogactor = 'SpawnFire')]"; + A_FatAttack1 = "A_FatAttack1[(string spawntype = \"FatShot\")]"; + A_FatAttack2 = "A_FatAttack2[(string spawntype = \"FatShot\")]"; + A_FatAttack3 = "A_FatAttack3[(string spawntype = \"FatShot\")]"; + A_VileTarget = "A_VileTarget[(string type = \"ArchvileFire\")]"; + A_VileAttack = "A_VileAttack[(string sound = \"vile/stop\"[, int initialdamage = 20[, int blastdamage = 70[, int blastradius = 70[, float thrustfactor = 1.0[, string damagetype = \"Fire\"[, int flags = 0]]]]]])]"; + A_BrainSpit = "A_BrainSpit[(string spawntype = \"SpawnShot\")]"; + A_SpawnFly = "A_SpawnFly[(string fogactor = \"SpawnFire\")]"; A_SpawnSound = "A_SpawnSound"; A_BrainScream = "A_BrainScream"; A_BrainExplode = "A_BrainExplode"; - A_Mushroom = "A_Mushroom[(string spawntype = 'FatShot'[, int amount[, int flags = MSF_STANDARD[, float vrange = 4.0[, float hrange = 0.5]]]])]"; - A_M_Saw = "A_M_Saw[(string fullsound = 'weapons/sawfull'[, string hitsound = 'weapons/sawhit'[, int damage = 0[, string pufftype = 'BulletPuff']]])]"; + A_Mushroom = "A_Mushroom[(string spawntype = \"FatShot\"[, int amount[, int flags = MSF_STANDARD[, float vrange = 4.0[, float hrange = 0.5]]]])]"; + A_M_Saw = "A_M_Saw[(string fullsound = \"weapons/sawfull\"[, string hitsound = \"weapons/sawhit\"[, int damage = 0[, string pufftype = \"BulletPuff\"]]])]"; A_SentinelRefire = "A_SentinelRefire"; A_BetaSkullAttack = "A_BetaSkullAttack"; //Miscellaneous functions for Doom @@ -293,8 +293,21 @@ keywords A_SkelWhoosh = "A_SkelWhoosh"; A_StartFire = "A_StartFire"; A_FireCrackle = "A_FireCrackle"; - A_BFGSpray = "A_BFGSpray[(string flashtype = 'BFGExtra'[, int numrays = 40[, int damage = 15[, float angle = 90[, float distance = 1024[, float vrange = 32[, int explicit_damage = 0]]]]]])]"; - A_BarrelDestroy = "A_BarrelDestroy"; + A_BFGSpray = "A_BFGSpray[(string flashtype = \"BFGExtra\"[, int numrays = 40[, int damage = 15[, float angle = 90[, float distance = 1024[, float vrange = 32[, int explicit_damage = 0]]]]]])]"; + A_BarrelDestroy = "A_BarrelDestroy"; +//Miscellaneous functions not listed in the "Action functions" wiki article + A_Bang4Cloud = "A_Bang4Cloud"; + A_Blast = "A_Blast[(int flags = 0[, int strength = 255[, int radius = 255[, float speed = 20[, string blasteffect = \"BlastEffect\"[, sound blastsound = \"BlastRadius\"]]]]])]"; + A_DropWeaponPieces = "A_DropWeaponPieces(string actorclass1, string actorclass2, string actorclass3)"; + A_Feathers = "A_Feathers"; + A_GiveQuestItem = "A_GiveQuestItem(int itemnum)"; + A_PigPain = "A_PigPain"; + A_RemoveForcefield = "A_RemoveForcefield"; + A_RocketInFlight = "A_RocketInFlight"; + A_SetGravity = "A_SetGravity(float gravity)\nSets the amount of gravity for the calling actor."; + A_SetUserArray = "A_SetUserArray(string name, int index, int value)"; + A_ShootGun = "A_ShootGun"; + A_SPosAttackUseAtkSound = "A_SPosAttackUseAtkSound"; //Mathematical functions abs = "abs(x)\nreturns the absolute value of x."; sin = "sin(x)\ntrigonometry function, x must be in degrees."; @@ -606,6 +619,7 @@ constants SPAWNSOUNDSOURCE; PAINLESS; FORCEPAIN; + CAUSEPAIN; DONTSEEKINVISIBLE; STEPMISSILE; ADDITIVEPOISONDAMAGE; @@ -650,6 +664,7 @@ constants NOTAUTOAIMED; NOTONAUTOMAP; WEAPONSPAWN; + NOMENU; PICKUP; TOUCHY; VULNERABLE; @@ -713,6 +728,10 @@ constants AMF_EMITFROMTARGET; AMF_TARGETEMITTER; AMF_TARGETNONPLAYER; + BF_USEAMMO; + BF_DONTWARN; + BF_AFFECTBOSSES; + BF_NOIMPACTDAMAGE; CBAF_AIMFACING; CBAF_EXPLICITANGLE; CBAF_NOPITCH; diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj index bc2e5264..f8690c0a 100644 --- a/Source/Core/Builder.csproj +++ b/Source/Core/Builder.csproj @@ -699,6 +699,9 @@ Component + + Component + UserControl diff --git a/Source/Core/Config/ConfigurationInfo.cs b/Source/Core/Config/ConfigurationInfo.cs index 22ae65ca..ea5cccd2 100644 --- a/Source/Core/Config/ConfigurationInfo.cs +++ b/Source/Core/Config/ConfigurationInfo.cs @@ -59,6 +59,7 @@ namespace CodeImp.DoomBuilder.Config private Configuration config; //mxd private bool enabled; //mxd private bool changed; //mxd + private bool longtexturenames; //mxd private List testEngines; //mxd private int currentEngineIndex; //mxd @@ -84,6 +85,7 @@ namespace CodeImp.DoomBuilder.Config internal Configuration Configuration { get { return config; } } //mxd public bool Enabled { get { return enabled; } internal set { enabled = value; } } //mxd public bool Changed { get { return changed; } internal set { changed = value; } } //mxd + public bool SupportsLongTextureNames { get { return longtexturenames; } internal set { longtexturenames = value; } } //mxd //mxd public string TestProgramName { get { return testEngines[currentEngineIndex].TestProgramName; } internal set { testEngines[currentEngineIndex].TestProgramName = value; } } @@ -116,6 +118,7 @@ namespace CodeImp.DoomBuilder.Config // Load settings from game configuration this.name = config.ReadSetting("game", ""); this.defaultlumpname = config.ReadSetting("defaultlumpname", ""); + this.longtexturenames = config.ReadSetting("longtexturenames", false); //mxd // Load settings from program configuration this.nodebuildersave = General.Settings.ReadSetting("configurations." + settingskey + ".nodebuildersave", MISSING_NODEBUILDER); @@ -132,7 +135,8 @@ namespace CodeImp.DoomBuilder.Config currentEngineIndex = General.Settings.ReadSetting("configurations." + settingskey + ".currentengineindex", 0); //no engine list found? use old engine properties - if (list.Count == 0) { + if (list.Count == 0) + { EngineInfo info = new EngineInfo(); info.TestProgram = General.Settings.ReadSetting("configurations." + settingskey + ".testprogram", ""); info.TestProgramName = General.Settings.ReadSetting("configurations." + settingskey + ".testprogramname", EngineInfo.DEFAULT_ENGINE_NAME); @@ -143,9 +147,12 @@ namespace CodeImp.DoomBuilder.Config info.TestSkill = General.Settings.ReadSetting("configurations." + settingskey + ".testskill", 3); testEngines.Add(info); currentEngineIndex = 0; - } else { + } + else + { //read engines settings from config - foreach (DictionaryEntry de in list) { + foreach (DictionaryEntry de in list) + { string path = "configurations." + settingskey + ".engines." + de.Key; EngineInfo info = new EngineInfo(); info.TestProgram = General.Settings.ReadSetting(path + ".testprogram", ""); @@ -166,13 +173,17 @@ namespace CodeImp.DoomBuilder.Config list = General.Settings.ReadSetting("configurations." + settingskey + ".linedefcolorpresets", new ListDictionary()); //no presets? add "classic" ones then. - if(list.Count == 0) { + if(list.Count == 0) + { LinedefColorPreset anyActionPreset = new LinedefColorPreset("Any action", PixelColor.FromColor(System.Drawing.Color.PaleGreen), -1, 0, new List(), new List()); anyActionPreset.SetValid(); colorPresets.Add(anyActionPreset); - } else { + } + else + { //read custom linedef colors from config - foreach(DictionaryEntry de in list) { + foreach(DictionaryEntry de in list) + { string path = "configurations." + settingskey + ".linedefcolorpresets." + de.Key; string presetname = General.Settings.ReadSetting(path + ".name", "Unnamed"); PixelColor color = PixelColor.FromInt(General.Settings.ReadSetting(path + ".color", -1)); diff --git a/Source/Core/Config/GameConfiguration.cs b/Source/Core/Config/GameConfiguration.cs index 4fd7a9f2..8c18e5fb 100644 --- a/Source/Core/Config/GameConfiguration.cs +++ b/Source/Core/Config/GameConfiguration.cs @@ -25,6 +25,7 @@ using CodeImp.DoomBuilder.Map; using CodeImp.DoomBuilder.Editing; using CodeImp.DoomBuilder.GZBuilder.Data; +using CodeImp.DoomBuilder.Data; #endregion @@ -311,7 +312,6 @@ namespace CodeImp.DoomBuilder.Config linetagindicatesectors = cfg.ReadSetting("linetagindicatesectors", false); decorategames = cfg.ReadSetting("decorategames", ""); skyflatname = cfg.ReadSetting("skyflatname", "F_SKY1"); - maxtexturenamelength = cfg.ReadSetting("maxtexturenamelength", 8); leftboundary = cfg.ReadSetting("leftboundary", -32768); rightboundary = cfg.ReadSetting("rightboundary", 32767); topboundary = cfg.ReadSetting("topboundary", 32767); @@ -320,6 +320,10 @@ namespace CodeImp.DoomBuilder.Config defaultLinedefActivation = cfg.ReadSetting("defaultlinedefactivation", ""); //mxd for(int i = 0; i < Linedef.NUM_ARGS; i++) makedoorargs[i] = cfg.ReadSetting("makedoorarg" + i.ToString(CultureInfo.InvariantCulture), 0); + //mxd. Texture names length + bool uselongtexturenames = cfg.ReadSetting("longtexturenames", false); + maxtexturenamelength = (uselongtexturenames ? short.MaxValue : DataManager.CLASIC_IMAGE_NAME_LENGTH); + // Flags have special (invariant culture) conversion // because they are allowed to be written as integers in the configs object obj = cfg.ReadSettingObject("singlesidedflag", 0); diff --git a/Source/Core/Controls/ConfigurablePictureBox.cs b/Source/Core/Controls/ConfigurablePictureBox.cs new file mode 100644 index 00000000..cee7db23 --- /dev/null +++ b/Source/Core/Controls/ConfigurablePictureBox.cs @@ -0,0 +1,40 @@ +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace CodeImp.DoomBuilder.Controls +{ + public class ConfigurablePictureBox : PictureBox + { + private InterpolationMode interpolationmode = InterpolationMode.NearestNeighbor; + private SmoothingMode smoothingmode = SmoothingMode.Default; + private CompositingQuality compositingquality = CompositingQuality.Default; + private PixelOffsetMode pixeloffsetmode = PixelOffsetMode.None; + private GraphicsUnit pageunit = GraphicsUnit.Pixel; + + public InterpolationMode InterpolationMode { get { return interpolationmode; } set { interpolationmode = value; } } + public SmoothingMode SmoothingMode { get { return smoothingmode; } set { smoothingmode = value; } } + public CompositingQuality CompositingQuality { get { return compositingquality; } set { compositingquality = value; } } + public PixelOffsetMode PixelOffsetMode { get { return pixeloffsetmode; } set { pixeloffsetmode = value; } } + public GraphicsUnit PageUnit { get { return pageunit; } set { pageunit = value; } } + + /*public ConfigurablePictureBox() + { + InterpolationMode = InterpolationMode.NearestNeighbor; + SmoothingMode = SmoothingMode.Default; + CompositingQuality = CompositingQuality.Default; + PixelOffsetMode = PixelOffsetMode.None; + PageUnit = GraphicsUnit.Pixel; + }*/ + + protected override void OnPaint(PaintEventArgs pe) + { + pe.Graphics.InterpolationMode = InterpolationMode; + pe.Graphics.SmoothingMode = SmoothingMode; + pe.Graphics.CompositingQuality = CompositingQuality; + pe.Graphics.PageUnit = PageUnit; + pe.Graphics.PixelOffsetMode = PixelOffsetMode; + base.OnPaint(pe); + } + } +} diff --git a/Source/Core/Controls/DebugConsole.cs b/Source/Core/Controls/DebugConsole.cs index 3c19ad51..dd5a9393 100644 --- a/Source/Core/Controls/DebugConsole.cs +++ b/Source/Core/Controls/DebugConsole.cs @@ -27,15 +27,14 @@ namespace CodeImp.DoomBuilder { #region ================== Variables - private static readonly List> messages = new List>(1000); - private DebugMessageType filters; + private const int MAX_MESSAGES = 1024; + private static readonly List> messages = new List>(MAX_MESSAGES); //Colors private readonly Dictionary textcolors; private readonly Dictionary textheaders; - private static int charcount; - private const int MAX_CHARS = short.MaxValue; + private DebugMessageType filters; private static long starttime = -1; private static DebugConsole me; @@ -107,6 +106,7 @@ namespace CodeImp.DoomBuilder } else { + if (messages.Count + 1 > MAX_MESSAGES) lock (messages) { messages.RemoveAt(0); } messages.Add(new KeyValuePair(type, text)); if(me != null && (me.filters & type) == type) { @@ -130,7 +130,6 @@ namespace CodeImp.DoomBuilder { if (me != null) me.console.Clear(); messages.Clear(); - charcount = 0; } } @@ -163,18 +162,6 @@ namespace CodeImp.DoomBuilder private void AddMessage(DebugMessageType type, string text, bool scroll) { text = textheaders[type] + text; - bool updatemessages = false; - - while (charcount + text.Length > MAX_CHARS) - { - charcount -= messages[0].Value.Length; - messages.RemoveAt(0); - updatemessages = true; - } - - if(updatemessages) UpdateMessages(); - charcount += text.Length; - console.SelectionStart = console.TextLength; console.SelectionColor = textcolors[type]; console.AppendText(text); @@ -197,7 +184,6 @@ namespace CodeImp.DoomBuilder private void UpdateMessages() { console.Clear(); - charcount = 0; console.SuspendLayout(); foreach (KeyValuePair pair in messages) diff --git a/Source/Core/Controls/FlatSelectorControl.cs b/Source/Core/Controls/FlatSelectorControl.cs index 3c09444f..881d4c81 100644 --- a/Source/Core/Controls/FlatSelectorControl.cs +++ b/Source/Core/Controls/FlatSelectorControl.cs @@ -61,10 +61,10 @@ namespace CodeImp.DoomBuilder.Controls if(string.IsNullOrEmpty(texture.FullName) || texture is UnknownImage) DisplayImageSize(0, 0); //mxd else DisplayImageSize(texture.ScaledWidth, texture.ScaledHeight); //mxd - if(!texture.IsPreviewLoaded) timer.Start(); //mxd + if(usepreviews ? !texture.IsPreviewLoaded : !texture.IsImageLoaded) timer.Start(); //mxd // Set the image - return texture.GetPreview(); + return (usepreviews ? texture.GetPreview() : texture.GetBitmap()); } } diff --git a/Source/Core/Controls/ImageBrowserControl.Designer.cs b/Source/Core/Controls/ImageBrowserControl.Designer.cs index 7a6352cb..23c337fd 100644 --- a/Source/Core/Controls/ImageBrowserControl.Designer.cs +++ b/Source/Core/Controls/ImageBrowserControl.Designer.cs @@ -100,6 +100,7 @@ namespace CodeImp.DoomBuilder.Controls // list // this.list.Dock = System.Windows.Forms.DockStyle.Fill; + this.list.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.list.HideSelection = false; this.list.Location = new System.Drawing.Point(0, 0); this.list.MultiSelect = false; @@ -132,6 +133,7 @@ namespace CodeImp.DoomBuilder.Controls this.filterHeight.AllowRelative = false; this.filterHeight.ButtonStep = 1; this.filterHeight.ButtonStepFloat = 1F; + this.filterHeight.ButtonStepsWrapAround = false; this.filterHeight.Location = new System.Drawing.Point(410, 4); this.filterHeight.Name = "filterHeight"; this.filterHeight.Size = new System.Drawing.Size(54, 24); @@ -156,6 +158,7 @@ namespace CodeImp.DoomBuilder.Controls this.filterWidth.AllowRelative = false; this.filterWidth.ButtonStep = 1; this.filterWidth.ButtonStepFloat = 1F; + this.filterWidth.ButtonStepsWrapAround = false; this.filterWidth.Location = new System.Drawing.Point(308, 4); this.filterWidth.Name = "filterWidth"; this.filterWidth.Size = new System.Drawing.Size(54, 24); diff --git a/Source/Core/Controls/ImageBrowserControl.cs b/Source/Core/Controls/ImageBrowserControl.cs index 3139b54a..01a4f756 100644 --- a/Source/Core/Controls/ImageBrowserControl.cs +++ b/Source/Core/Controls/ImageBrowserControl.cs @@ -69,7 +69,6 @@ namespace CodeImp.DoomBuilder.Controls public bool PreventSelection { get { return preventselection; } set { preventselection = value; } } public bool HideInputBox { get { return splitter.Panel2Collapsed; } set { splitter.Panel2Collapsed = value; } } public bool BrowseFlats { get { return browseFlats; } set { browseFlats = value; } } //mxd - //public string LabelText { get { return label.Text; } set { label.Text = value; objectname.Left = label.Right + label.Margin.Right + objectname.Margin.Left; } } //mxd public ListViewItem SelectedItem { get { if(list.SelectedItems.Count > 0) return list.SelectedItems[0]; else return null; } } #endregion @@ -108,9 +107,12 @@ namespace CodeImp.DoomBuilder.Controls list.TileSize = new Size(itemwidth, itemheight); //mxd - if(General.Map.Config.MixTexturesFlats) { + if(General.Map.Config.MixTexturesFlats) + { cbMixMode.SelectedIndex = mixMode; - } else { + } + else + { labelMixMode.Visible = false; cbMixMode.Visible = false; label.Left = labelMixMode.Left; @@ -261,7 +263,8 @@ namespace CodeImp.DoomBuilder.Controls } //mxd - private void cbMixMode_SelectedIndexChanged(object sender, EventArgs e) { + private void cbMixMode_SelectedIndexChanged(object sender, EventArgs e) + { mixMode = cbMixMode.SelectedIndex; RefillList(false); } @@ -278,9 +281,11 @@ namespace CodeImp.DoomBuilder.Controls ListViewItem selected = list.SelectedItems[0]; //mxd - foreach(ListViewItem n in visibleitems) { + foreach(ListViewItem n in visibleitems) + { if(n == selected) continue; - if(n.Text == selected.Text) { + if(n.Text == selected.Text) + { n.Selected = true; n.Focused = true; n.EnsureVisible(); @@ -293,7 +298,7 @@ namespace CodeImp.DoomBuilder.Controls // This selects an item by name public void SelectItem(string name, ListViewGroup preferredgroup) { - ListViewItem lvi = null; + ImageBrowserItem lvi = null; //mxd // Not when selecting is prevented if(preventselection) return; @@ -303,9 +308,10 @@ namespace CodeImp.DoomBuilder.Controls { foreach(ListViewItem item in list.Items) { - if(string.Compare(item.Text, name, true) == 0) + ImageBrowserItem curitem = item as ImageBrowserItem; + if(curitem != null && string.Compare(curitem.icon.Name, name, true) == 0) { - lvi = item; + lvi = curitem; if(item.Group == preferredgroup) break; } } @@ -326,9 +332,6 @@ namespace CodeImp.DoomBuilder.Controls // This performs item sleection by keys private void SelectNextItem(SearchDirectionHint dir) { - ListViewItem lvi; - Point spos; - // Not when selecting is prevented if(preventselection) return; @@ -341,9 +344,9 @@ namespace CodeImp.DoomBuilder.Controls else { // Get selected item - lvi = list.SelectedItems[0]; + ListViewItem lvi = list.SelectedItems[0]; Rectangle lvirect = list.GetItemRect(lvi.Index, ItemBoundsPortion.Entire); - spos = new Point(lvirect.Location.X + lvirect.Width / 2, lvirect.Y + lvirect.Height / 2); + Point spos = new Point(lvirect.Location.X + lvirect.Width / 2, lvirect.Y + lvirect.Height / 2); // Try finding 5 times in the given direction for(int i = 0; i < 5; i++) @@ -378,8 +381,6 @@ namespace CodeImp.DoomBuilder.Controls // This selectes the first item private void SelectFirstItem() { - ListViewItem lvi; - // Not when selecting is prevented if(preventselection) return; @@ -387,7 +388,7 @@ namespace CodeImp.DoomBuilder.Controls if(list.Items.Count > 0) { list.SelectedItems.Clear(); - lvi = list.GetItemAt(list.TileSize.Width / 2, list.TileSize.Height / 2); + ListViewItem lvi = list.GetItemAt(list.TileSize.Width / 2, list.TileSize.Height / 2); if(lvi != null) { lvi.Selected = true; @@ -424,14 +425,6 @@ namespace CodeImp.DoomBuilder.Controls // This ends adding items public void EndAdding() { - //mxd. Do we need to change item width? - if (longestTextureName.Length > 8) - { - Graphics g = Graphics.FromImage(new Bitmap(1, 1)); - SizeF size = g.MeasureString(longestTextureName, list.Font); - list.TileSize = new Size((int)(size.Width + 12), list.TileSize.Height); - } - // Fill list with items RefillList(true); diff --git a/Source/Core/Controls/ImageBrowserItem.cs b/Source/Core/Controls/ImageBrowserItem.cs index b02696bf..654b9d55 100644 --- a/Source/Core/Controls/ImageBrowserItem.cs +++ b/Source/Core/Controls/ImageBrowserItem.cs @@ -29,6 +29,12 @@ namespace CodeImp.DoomBuilder.Controls { internal class ImageBrowserItem : ListViewItem, IComparable { + #region ================== Constants + + private const int MAX_DISPLAY_NAME_LENGTH = 16; //mxd + + #endregion + #region ================== Variables // Display image and text @@ -58,6 +64,9 @@ namespace CodeImp.DoomBuilder.Controls { // Initialize this.Text = text; + if (text.Length > MAX_DISPLAY_NAME_LENGTH) text = text.Substring(0, MAX_DISPLAY_NAME_LENGTH); //mxd + this.displaytext = text; + if(General.Settings.ShowTextureSizes) this.displaytext = text + "\n" + icon.ScaledWidth + " x " + icon.ScaledHeight; else diff --git a/Source/Core/Controls/ImageSelectorControl.Designer.cs b/Source/Core/Controls/ImageSelectorControl.Designer.cs index b0503cf5..28359a77 100644 --- a/Source/Core/Controls/ImageSelectorControl.Designer.cs +++ b/Source/Core/Controls/ImageSelectorControl.Designer.cs @@ -32,34 +32,32 @@ namespace CodeImp.DoomBuilder.Controls this.components = new System.ComponentModel.Container(); this.preview = new System.Windows.Forms.Panel(); this.labelSize = new System.Windows.Forms.Label(); - this.name = new CodeImp.DoomBuilder.Controls.AutoSelectTextbox(); + this.imagebox = new CodeImp.DoomBuilder.Controls.ConfigurablePictureBox(); this.timer = new System.Windows.Forms.Timer(this.components); + this.tooltip = new System.Windows.Forms.ToolTip(this.components); + this.name = new CodeImp.DoomBuilder.Controls.AutoSelectTextbox(); this.preview.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.imagebox)).BeginInit(); this.SuspendLayout(); // // preview // this.preview.BackColor = System.Drawing.SystemColors.AppWorkspace; this.preview.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.preview.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.preview.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.preview.Controls.Add(this.labelSize); + this.preview.Controls.Add(this.imagebox); this.preview.Location = new System.Drawing.Point(0, 0); this.preview.Name = "preview"; this.preview.Size = new System.Drawing.Size(68, 60); this.preview.TabIndex = 1; - this.preview.MouseLeave += new System.EventHandler(this.preview_MouseLeave); - this.preview.MouseMove += new System.Windows.Forms.MouseEventHandler(this.preview_MouseMove); - this.preview.Click += new System.EventHandler(this.preview_Click); - this.preview.MouseDown += new System.Windows.Forms.MouseEventHandler(this.preview_MouseDown); - this.preview.MouseUp += new System.Windows.Forms.MouseEventHandler(this.preview_MouseUp); - this.preview.MouseEnter += new System.EventHandler(this.preview_MouseEnter); // // labelSize // this.labelSize.AutoSize = true; - this.labelSize.BackColor = System.Drawing.Color.Black; + this.labelSize.BackColor = System.Drawing.SystemColors.ControlText; this.labelSize.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.labelSize.ForeColor = System.Drawing.Color.White; + this.labelSize.ForeColor = System.Drawing.SystemColors.HighlightText; this.labelSize.Location = new System.Drawing.Point(1, 1); this.labelSize.MaximumSize = new System.Drawing.Size(0, 13); this.labelSize.Name = "labelSize"; @@ -68,6 +66,30 @@ namespace CodeImp.DoomBuilder.Controls this.labelSize.Text = "128x128"; this.labelSize.Visible = false; // + // imagebox + // + this.imagebox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.imagebox.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.Default; + this.imagebox.Dock = System.Windows.Forms.DockStyle.Fill; + this.imagebox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + this.imagebox.Location = new System.Drawing.Point(0, 0); + this.imagebox.Name = "imagebox"; + this.imagebox.PageUnit = System.Drawing.GraphicsUnit.Pixel; + this.imagebox.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.None; + this.imagebox.Size = new System.Drawing.Size(66, 58); + this.imagebox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.imagebox.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default; + this.imagebox.TabIndex = 3; + this.imagebox.TabStop = false; + this.imagebox.MouseLeave += new System.EventHandler(this.preview_MouseLeave); + this.imagebox.Click += new System.EventHandler(this.preview_Click); + this.imagebox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.preview_MouseDown); + this.imagebox.MouseEnter += new System.EventHandler(this.preview_MouseEnter); + // + // timer + // + this.timer.Tick += new System.EventHandler(this.timer_Tick); + // // name // this.name.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; @@ -79,11 +101,6 @@ namespace CodeImp.DoomBuilder.Controls this.name.TabIndex = 2; this.name.TextChanged += new System.EventHandler(this.name_TextChanged); // - // timer - // - this.timer.Interval = 1000; - this.timer.Tick += new System.EventHandler(this.timer_Tick); - // // ImageSelectorControl // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); @@ -97,6 +114,7 @@ namespace CodeImp.DoomBuilder.Controls this.EnabledChanged += new System.EventHandler(this.ImageSelectorControl_EnabledChanged); this.preview.ResumeLayout(false); this.preview.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.imagebox)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -108,6 +126,8 @@ namespace CodeImp.DoomBuilder.Controls protected CodeImp.DoomBuilder.Controls.AutoSelectTextbox name; private System.Windows.Forms.Label labelSize; protected System.Windows.Forms.Timer timer; + private System.Windows.Forms.ToolTip tooltip; + private ConfigurablePictureBox imagebox; } } diff --git a/Source/Core/Controls/ImageSelectorControl.cs b/Source/Core/Controls/ImageSelectorControl.cs index b1c69db7..adee35c6 100644 --- a/Source/Core/Controls/ImageSelectorControl.cs +++ b/Source/Core/Controls/ImageSelectorControl.cs @@ -36,17 +36,18 @@ namespace CodeImp.DoomBuilder.Controls public event EventHandler OnValueChanged; //mxd private Bitmap bmp; - private bool ismouseinside; private MouseButtons button; private string previousImageName; //mxd protected bool multipletextures; //mxd + protected bool usepreviews = true; //mxd #endregion #region ================== Properties public string TextureName { get { return name.Text; } set { name.Text = value; } } - + public bool UsePreviews { get { return usepreviews; } set { usepreviews = value; } } //mxd + [Browsable(false)] public bool MultipleTextures { get { return multipletextures; } set { multipletextures = value; } } @@ -67,6 +68,7 @@ namespace CodeImp.DoomBuilder.Controls // set the max length of texture names name.MaxLength = General.Map.Config.MaxTextureNameLength; if(General.Settings.CapitalizeTextureNames) this.name.CharacterCasing = CharacterCasing.Upper; //mxd + labelSize.BackColor = Color.FromArgb(196, labelSize.BackColor); } #endregion @@ -92,8 +94,7 @@ namespace CodeImp.DoomBuilder.Controls // Image clicked private void preview_Click(object sender, EventArgs e) { - preview.BackColor = SystemColors.Highlight; - ShowPreview(FindImage(name.Text)); + imagebox.BackColor = SystemColors.Highlight; if(button == MouseButtons.Right) { name.Text = "-"; @@ -109,6 +110,9 @@ namespace CodeImp.DoomBuilder.Controls { // Show it centered ShowPreview(FindImage(name.Text)); + + // Update tooltip (mxd) + tooltip.SetToolTip(imagebox, name.Text); } // Mouse pressed @@ -117,44 +121,20 @@ namespace CodeImp.DoomBuilder.Controls button = e.Button; if((button == MouseButtons.Left) || ((button == MouseButtons.Right))) { - //ispressed = true; - preview.BackColor = AdjustedColor(SystemColors.Highlight, 0.2f); - ShowPreview(FindImage(name.Text)); + imagebox.BackColor = AdjustedColor(SystemColors.Highlight, 0.2f); } } - // Mouse released - private void preview_MouseUp(object sender, MouseEventArgs e) - { - //ispressed = false; - ShowPreview(FindImage(name.Text)); - } - // Mouse leaves private void preview_MouseLeave(object sender, EventArgs e) { - //ispressed = false; - ismouseinside = false; - preview.BackColor = SystemColors.AppWorkspace; + imagebox.BackColor = SystemColors.AppWorkspace; } // Mouse enters private void preview_MouseEnter(object sender, EventArgs e) { - ismouseinside = true; - preview.BackColor = SystemColors.Highlight; - ShowPreview(FindImage(name.Text)); - } - - // Mouse moves - private void preview_MouseMove(object sender, MouseEventArgs e) - { - if(!ismouseinside) - { - ismouseinside = true; - preview.BackColor = SystemColors.Highlight; - ShowPreview(FindImage(name.Text)); - } + imagebox.BackColor = SystemColors.Highlight; } //mxd @@ -185,7 +165,7 @@ namespace CodeImp.DoomBuilder.Controls private void ShowPreview(Image image) { // Dispose old image - preview.BackgroundImage = null; + imagebox.BackgroundImage = null; if(bmp != null) { bmp.Dispose(); @@ -195,12 +175,13 @@ namespace CodeImp.DoomBuilder.Controls if(image != null) { // Show it centered - General.DisplayZoomedImage(preview, image); - preview.Refresh(); + imagebox.Image = image; + imagebox.Refresh(); } //mxd. Dispatch event - if(OnValueChanged != null && previousImageName != name.Text) { + if(OnValueChanged != null && previousImageName != name.Text) + { previousImageName = name.Text; OnValueChanged(this, EventArgs.Empty); } diff --git a/Source/Core/Controls/ImageSelectorControl.resx b/Source/Core/Controls/ImageSelectorControl.resx index 981d2452..5298bd52 100644 --- a/Source/Core/Controls/ImageSelectorControl.resx +++ b/Source/Core/Controls/ImageSelectorControl.resx @@ -120,12 +120,15 @@ True - - True - 17, 17 + + 97, 17 + + + True + True diff --git a/Source/Core/Controls/LinedefInfoPanel.cs b/Source/Core/Controls/LinedefInfoPanel.cs index 3b99131b..c5763971 100644 --- a/Source/Core/Controls/LinedefInfoPanel.cs +++ b/Source/Core/Controls/LinedefInfoPanel.cs @@ -35,6 +35,7 @@ namespace CodeImp.DoomBuilder.Controls private int doomformatwidth; private List fieldInfos; private int[] labelPositionsY = new[] { 39, 58, 77 }; //mxd + private const int defaultPanelWidth = 270; //mxd // Constructor public LinedefInfoPanel() @@ -52,12 +53,10 @@ namespace CodeImp.DoomBuilder.Controls { bool upperunpegged, lowerunpegged; string peggedness; - int defaultPanelWidth = 270; //mxd //mxd - if (General.Map.UDMF && fieldInfos == null) { + if (General.Map.UDMF && fieldInfos == null) fieldInfos = General.Map.Config.SidedefFields; - } // Show/hide stuff depending on format if(!General.Map.FormatInterface.HasActionArgs) @@ -90,15 +89,18 @@ namespace CodeImp.DoomBuilder.Controls } //mxd. Hide activation or tag and rearrange labels - if(!General.Map.FormatInterface.HasBuiltInActivations && General.Map.FormatInterface.HasNumericLinedefActivations) { //Hexen map format? + if(!General.Map.FormatInterface.HasBuiltInActivations && General.Map.FormatInterface.HasNumericLinedefActivations) //Hexen map format? + { activation.Visible = true; activationlabel.Visible = true; taglabel.Visible = false; tag.Visible = false; //set activation - foreach(LinedefActivateInfo ai in General.Map.Config.LinedefActivates) { - if(l.Activate == ai.Index) { + foreach(LinedefActivateInfo ai in General.Map.Config.LinedefActivates) + { + if(l.Activate == ai.Index) + { activation.Text = ai.Title; break; } @@ -118,8 +120,9 @@ namespace CodeImp.DoomBuilder.Controls anglelabel.Top = labelPositionsY[2]; backoffset.Top = labelPositionsY[2]; backoffsetlabel.Top = labelPositionsY[2]; - - } else { + } + else + { activation.Visible = false; activationlabel.Visible = false; taglabel.Visible = true; @@ -187,11 +190,10 @@ namespace CodeImp.DoomBuilder.Controls arg5.Enabled = act.Args[4].Used; //mxd - if (hasArg0Str) { + if (hasArg0Str) arg1.Text = '"' + l.Fields["arg0str"].Value.ToString() + '"'; - } else { + else setArgumentText(act.Args[0], arg1, l.Args[0]); - } setArgumentText(act.Args[1], arg2, l.Args[1]); setArgumentText(act.Args[2], arg3, l.Args[2]); setArgumentText(act.Args[3], arg4, l.Args[3]); @@ -210,7 +212,8 @@ namespace CodeImp.DoomBuilder.Controls frontsector.Visible = true; //mxd - if(General.Map.UDMF) { + if(General.Map.UDMF) + { //light frontoffsetlabel.Text = "Front light:"; setUDMFLight(l.Front, frontoffsetlabel, frontoffset); @@ -249,7 +252,9 @@ namespace CodeImp.DoomBuilder.Controls if(hasTopFields) addedWidth = 64; if(hasMiddleFields) addedWidth += 64; if(hasBottomFields) addedWidth += 64; - } else { + } + else + { frontoffsetlabel.Text = "Front offset:"; frontoffset.Text = l.Front.OffsetX + ", " + l.Front.OffsetY; frontoffsetlabel.Enabled = true; @@ -264,12 +269,10 @@ namespace CodeImp.DoomBuilder.Controls frontpanel.Width = defaultPanelWidth + addedWidth + 12; flowLayoutPanelFront.Width = defaultPanelWidth + addedWidth; - fronthighname.Text = l.Front.HighTexture; - frontmidname.Text = l.Front.MiddleTexture; - frontlowname.Text = l.Front.LowTexture; - DisplaySidedefTexture(fronthightex, labelTextureFrontTop, l.Front.HighTexture, l.Front.HighRequired()); - DisplaySidedefTexture(frontmidtex, labelTextureFrontMid, l.Front.MiddleTexture, l.Front.MiddleRequired()); - DisplaySidedefTexture(frontlowtex, labelTextureFrontBottom, l.Front.LowTexture, l.Front.LowRequired()); + // Show textures + DisplaySidedefTexture(fronthightex, fronthighname, labelTextureFrontTop, l.Front.HighTexture, l.Front.HighRequired()); + DisplaySidedefTexture(frontmidtex, frontmidname, labelTextureFrontMid, l.Front.MiddleTexture, l.Front.MiddleRequired()); + DisplaySidedefTexture(frontlowtex, frontlowname, labelTextureFrontBottom, l.Front.LowTexture, l.Front.LowRequired()); //mxd. Position label frontsector.Left = frontpanel.Width - frontsector.Width - 12; @@ -277,11 +280,13 @@ namespace CodeImp.DoomBuilder.Controls else { // Show no info - //mxd - if(General.Map.UDMF) { + if(General.Map.UDMF) //mxd + { frontoffsetlabel.Text = "Front light:"; frontoffset.Text = "--"; - } else { + } + else + { frontoffsetlabel.Text = "Front offset:"; frontoffset.Text = "--, --"; } @@ -362,12 +367,10 @@ namespace CodeImp.DoomBuilder.Controls backpanel.Width = defaultPanelWidth + addedWidth + 12; flowLayoutPanelBack.Width = defaultPanelWidth + addedWidth; - backhighname.Text = l.Back.HighTexture; - backmidname.Text = l.Back.MiddleTexture; - backlowname.Text = l.Back.LowTexture; - DisplaySidedefTexture(backhightex, labelTextureBackTop, l.Back.HighTexture, l.Back.HighRequired()); - DisplaySidedefTexture(backmidtex, labelTextureBackMid, l.Back.MiddleTexture, l.Back.MiddleRequired()); - DisplaySidedefTexture(backlowtex, labelTextureBackBottom, l.Back.LowTexture, l.Back.LowRequired()); + // Show textures + DisplaySidedefTexture(backhightex, backhighname, labelTextureBackTop, l.Back.HighTexture, l.Back.HighRequired()); + DisplaySidedefTexture(backmidtex, backmidname, labelTextureBackMid, l.Back.MiddleTexture, l.Back.MiddleRequired()); + DisplaySidedefTexture(backlowtex, backlowname, labelTextureBackBottom, l.Back.LowTexture, l.Back.LowRequired()); //mxd. Position label backsector.Left = backpanel.Width - backsector.Width - 12; @@ -375,11 +378,13 @@ namespace CodeImp.DoomBuilder.Controls else { // Show no info - //mxd - if(General.Map.UDMF) { + if(General.Map.UDMF) //mxd + { backoffsetlabel.Text = "Back light:"; backoffset.Text = "--"; - } else { + } + else + { backoffsetlabel.Text = "Back offset:"; backoffset.Text = "--, --"; } @@ -396,21 +401,21 @@ namespace CodeImp.DoomBuilder.Controls //mxd. Flags Dictionary activations = new Dictionary(StringComparer.Ordinal); - foreach(LinedefActivateInfo ai in General.Map.Config.LinedefActivates) { + foreach(LinedefActivateInfo ai in General.Map.Config.LinedefActivates) activations.Add(ai.Key, ai.Title); - } flags.Items.Clear(); - foreach(KeyValuePair group in l.Flags) { - if(group.Value) { + foreach(KeyValuePair group in l.Flags) + { + if(group.Value) + { ListViewItem item; - if (General.Map.Config.LinedefFlags.ContainsKey(group.Key)) { + if (General.Map.Config.LinedefFlags.ContainsKey(group.Key)) item = new ListViewItem(General.Map.Config.LinedefFlags[group.Key]); - } else if (activations.ContainsKey(group.Key)) { + else if (activations.ContainsKey(group.Key)) item = new ListViewItem(activations[group.Key]); - } else { + else item = new ListViewItem(group.Key); - } item.Checked = true; flags.Items.Add(item); @@ -419,7 +424,8 @@ namespace CodeImp.DoomBuilder.Controls //mxd. Flags panel visibility and size flagsPanel.Visible = (flags.Items.Count > 0); - if(flags.Items.Count > 0) { + if(flags.Items.Count > 0) + { int itemWidth = flags.Items[0].GetBounds(ItemBoundsPortion.Entire).Width; if(itemWidth == 0) itemWidth = 96; flags.Width = itemWidth * (int)Math.Ceiling(flags.Items.Count / 5.0f); @@ -432,7 +438,8 @@ namespace CodeImp.DoomBuilder.Controls } //mxd - private bool checkPairedUDMFFields(UniFields fields, string paramX, string paramY, Label label, Label value) { + private bool checkPairedUDMFFields(UniFields fields, string paramX, string paramY, Label label, Label value) + { float dx = getDefaultUDMFValue(paramX); float dy = getDefaultUDMFValue(paramY); float x = dx; @@ -443,7 +450,8 @@ namespace CodeImp.DoomBuilder.Controls if(fields.ContainsKey(paramY)) y = (float)fields[paramY].Value; - if(x != dx || y != dy) { + if(x != dx || y != dy) + { value.Text = String.Format("{0:0.##}", x) + ", " + String.Format("{0:0.##}", y); value.Enabled = true; label.Enabled = true; @@ -459,7 +467,8 @@ namespace CodeImp.DoomBuilder.Controls //mxd private static void setUDMFLight(Sidedef sd, Label label, Label value) { - if(sd.Fields.ContainsKey("light")) { + if(sd.Fields.ContainsKey("light")) + { int light = (int)sd.Fields["light"].Value; if (sd.Fields.ContainsKey("lightabsolute") && Boolean.Parse(sd.Fields["lightabsolute"].Value.ToString())) @@ -469,7 +478,9 @@ namespace CodeImp.DoomBuilder.Controls value.Enabled = true; label.Enabled = true; - } else { + } + else + { value.Text = "--"; label.Enabled = false; value.Enabled = false; @@ -479,9 +490,8 @@ namespace CodeImp.DoomBuilder.Controls //mxd private float getDefaultUDMFValue(string valueName) { - foreach (UniversalFieldInfo fi in fieldInfos) { + foreach (UniversalFieldInfo fi in fieldInfos) if (fi.Name == valueName) return (float)fi.Default; - } return 0; } @@ -494,9 +504,8 @@ namespace CodeImp.DoomBuilder.Controls if(value < 1 || !General.Map.Options.TagLabels.ContainsKey(value)) return; - if(th is ThingTagHandler || th is LinedefTagHandler || th is SectorTagHandler) { + if(th is ThingTagHandler || th is LinedefTagHandler || th is SectorTagHandler) label.Text += " (" + General.Map.Options.TagLabels[value] + ")"; - } } // When visible changed @@ -518,29 +527,39 @@ namespace CodeImp.DoomBuilder.Controls } // This shows a sidedef texture in a panel - private static void DisplaySidedefTexture(Panel panel, Label label, string name, bool required) + private static void DisplaySidedefTexture(Panel panel, Label namelabel, Label sizelabel, string name, bool required) { // Check if name is a "none" texture if((name.Length < 1) || (name == "-")) { - label.Visible = false; //mxd + sizelabel.Visible = false; //mxd // Determine image to show if(required) General.DisplayZoomedImage(panel, Properties.Resources.MissingTexture); else panel.BackgroundImage = null; + + // Set texture name + namelabel.Text = "-"; } else { //mxd ImageData texture = General.Map.Data.GetTextureImage(name); - if(General.Settings.ShowTextureSizes && texture.ImageState == ImageLoadState.Ready && !(texture is UnknownImage)) { - label.Visible = true; - label.Text = texture.ScaledWidth + "x" + texture.ScaledHeight; - } else { - label.Visible = false; + bool unknowntexture = texture is UnknownImage; + if(General.Settings.ShowTextureSizes && texture.ImageState == ImageLoadState.Ready && !unknowntexture) + { + sizelabel.Visible = true; + sizelabel.Text = texture.ScaledWidth + "x" + texture.ScaledHeight; + } + else + { + sizelabel.Visible = false; } + + // Set texture name + namelabel.Text = (unknowntexture ? name : texture.DisplayName); // Set the image General.DisplayZoomedImage(panel, texture.GetPreview()); diff --git a/Source/Core/Controls/ResourceListEditor.cs b/Source/Core/Controls/ResourceListEditor.cs index fded9f6b..b501edd0 100644 --- a/Source/Core/Controls/ResourceListEditor.cs +++ b/Source/Core/Controls/ResourceListEditor.cs @@ -170,13 +170,11 @@ namespace CodeImp.DoomBuilder.Controls // This adds a normal item private void AddItem(DataLocation rl) { - int index; - // Start editing list resourceitems.BeginUpdate(); // Add item - index = resourceitems.Items.Count; + int index = resourceitems.Items.Count; resourceitems.Items.Add(new ListViewItem(rl.location)); resourceitems.Items[index].Tag = rl; resourceitems.Items[index].ImageIndex = GetIconIndex(rl.type, false); @@ -189,22 +187,30 @@ namespace CodeImp.DoomBuilder.Controls } //mxd - internal void DropItem(IDataObject data) { + internal void DropItem(IDataObject data) + { if(!data.GetDataPresent(DataFormats.FileDrop)) return; string[] paths = (string[])data.GetData(DataFormats.FileDrop); - foreach(string path in paths) { - if(File.Exists(path)) { + foreach(string path in paths) + { + if(File.Exists(path)) + { string ext = Path.GetExtension(path); - if(string.IsNullOrEmpty(ext)) - continue; + if(string.IsNullOrEmpty(ext)) continue; + ext = ext.ToLower(); - if(ext == ".wad") { + if(ext == ".wad") + { AddItem(new DataLocation(DataLocation.RESOURCE_WAD, path, false, false, false)); - } else if(ext == ".pk3" || ext == ".pk7") { + } + else if(ext == ".pk3" || ext == ".pk7") + { AddItem(new DataLocation(DataLocation.RESOURCE_PK3, path, false, false, false)); } - } else if(Directory.Exists(path)) { + } + else if(Directory.Exists(path)) + { AddItem(new DataLocation(DataLocation.RESOURCE_DIRECTORY, path, false, false, false)); } } @@ -227,13 +233,10 @@ namespace CodeImp.DoomBuilder.Controls // Add a resource private void addresource_Click(object sender, EventArgs e) { - ResourceOptionsForm resoptions; - Rectangle startposition; - // Open resource options dialog - resoptions = new ResourceOptionsForm(new DataLocation(), "Add Resource", StartPath); + ResourceOptionsForm resoptions = new ResourceOptionsForm(new DataLocation(), "Add Resource", StartPath); resoptions.StartPosition = FormStartPosition.Manual; - startposition = new Rectangle(dialogoffset.X, dialogoffset.Y, 1, 1); + Rectangle startposition = new Rectangle(dialogoffset.X, dialogoffset.Y, 1, 1); startposition = this.RectangleToScreen(startposition); Screen screen = Screen.FromPoint(startposition.Location); if(startposition.X + resoptions.Size.Width > screen.WorkingArea.Right) @@ -254,21 +257,16 @@ namespace CodeImp.DoomBuilder.Controls // Edit resource private void editresource_Click(object sender, EventArgs e) { - ResourceOptionsForm resoptions; - Rectangle startposition; - ListViewItem selecteditem; - DataLocation rl; - // Anything selected? if(resourceitems.SelectedItems.Count > 0) { // Get selected item - selecteditem = resourceitems.SelectedItems[0]; + ListViewItem selecteditem = resourceitems.SelectedItems[0]; // Open resource options dialog - resoptions = new ResourceOptionsForm((DataLocation)selecteditem.Tag, "Resource Options", StartPath); + ResourceOptionsForm resoptions = new ResourceOptionsForm((DataLocation)selecteditem.Tag, "Resource Options", StartPath); resoptions.StartPosition = FormStartPosition.Manual; - startposition = new Rectangle(dialogoffset.X, dialogoffset.Y, 1, 1); + Rectangle startposition = new Rectangle(dialogoffset.X, dialogoffset.Y, 1, 1); startposition = this.RectangleToScreen(startposition); Screen screen = Screen.FromPoint(startposition.Location); if(startposition.X + resoptions.Size.Width > screen.WorkingArea.Right) @@ -282,7 +280,7 @@ namespace CodeImp.DoomBuilder.Controls resourceitems.BeginUpdate(); // Update item - rl = resoptions.ResourceLocation; + DataLocation rl = resoptions.ResourceLocation; selecteditem.Text = rl.location; selecteditem.Tag = rl; selecteditem.ImageIndex = GetIconIndex(rl.type, false); diff --git a/Source/Core/Controls/SectorInfoPanel.cs b/Source/Core/Controls/SectorInfoPanel.cs index 639d1526..1099f654 100644 --- a/Source/Core/Controls/SectorInfoPanel.cs +++ b/Source/Core/Controls/SectorInfoPanel.cs @@ -29,7 +29,7 @@ namespace CodeImp.DoomBuilder.Controls { internal partial class SectorInfoPanel : UserControl { - private int fullWidth; //mxd + private readonly int fullWidth; //mxd // Constructor public SectorInfoPanel() @@ -55,57 +55,74 @@ namespace CodeImp.DoomBuilder.Controls tag.Text = s.Tag + (General.Map.Options.TagLabels.ContainsKey(s.Tag) ? " (" + General.Map.Options.TagLabels[s.Tag] + ")" : string.Empty); height.Text = sheight.ToString(); brightness.Text = s.Brightness.ToString(); - floorname.Text = s.FloorTexture; - ceilingname.Text = s.CeilTexture; //mxd. Texture info - if (s.LongFloorTexture == MapSet.EmptyLongName){ + if (s.LongFloorTexture == MapSet.EmptyLongName) + { labelFloorTextureSize.Visible = false; General.DisplayZoomedImage(floortex, Properties.Resources.MissingTexture); - } else { - ImageData floorImage = General.Map.Data.GetFlatImage(s.FloorTexture); - DisplayTextureSize(labelFloorTextureSize, floorImage); - General.DisplayZoomedImage(floortex, floorImage.GetPreview()); + floorname.Text = s.FloorTexture; + } + else + { + ImageData image = General.Map.Data.GetFlatImage(s.FloorTexture); + DisplayTextureSize(labelFloorTextureSize, image); + General.DisplayZoomedImage(floortex, image.GetPreview()); + floorname.Text = (image is UnknownImage ? s.FloorTexture : image.DisplayName); } - if (s.LongCeilTexture == MapSet.EmptyLongName) { + if (s.LongCeilTexture == MapSet.EmptyLongName) + { labelCeilTextureSize.Visible = false; General.DisplayZoomedImage(ceilingtex, Properties.Resources.MissingTexture); - } else { - ImageData ceilingImage = General.Map.Data.GetFlatImage(s.CeilTexture); - DisplayTextureSize(labelCeilTextureSize, ceilingImage); //mxd - General.DisplayZoomedImage(ceilingtex, ceilingImage.GetPreview()); + ceilingname.Text = s.CeilTexture; + } + else + { + ImageData image = General.Map.Data.GetFlatImage(s.CeilTexture); + DisplayTextureSize(labelCeilTextureSize, image); //mxd + General.DisplayZoomedImage(ceilingtex, image.GetPreview()); + ceilingname.Text = (image is UnknownImage ? s.CeilTexture : image.DisplayName); } //mxd bool showExtededFloorInfo = false; bool showExtededCeilingInfo = false; - if(General.Map.UDMF) { - if(s.Fields != null) { + if(General.Map.UDMF) + { + if(s.Fields != null) + { //sector colors labelLight.Visible = true; labelFade.Visible = true; panelLightColor.Visible = true; panelFadeColor.Visible = true; - if(s.Fields.ContainsKey("lightcolor")) { + if(s.Fields.ContainsKey("lightcolor")) + { panelLightColor.BackColor = PixelColor.FromInt(s.Fields.GetValue("lightcolor", 0xFFFFFF)).WithAlpha(255).ToColor(); labelLight.Enabled = true; - } else { + } + else + { panelLightColor.BackColor = System.Drawing.SystemColors.Control; labelLight.Enabled = false; } - if(s.Fields.ContainsKey("fadecolor")) { + if(s.Fields.ContainsKey("fadecolor")) + { panelFadeColor.BackColor = PixelColor.FromInt(s.Fields.GetValue("fadecolor", 0)).WithAlpha(255).ToColor(); labelFade.Enabled = true; - } else { + } + else + { panelFadeColor.BackColor = System.Drawing.SystemColors.Control; labelFade.Enabled = false; } //light - if(s.Fields.ContainsKey("lightceiling") || s.Fields.ContainsKey("lightceilingabsolute")) { + if(s.Fields.ContainsKey("lightceiling") || s.Fields.ContainsKey("lightceilingabsolute")) + { showExtededCeilingInfo = true; ceilingLight.Enabled = true; ceilingLightLabel.Enabled = true; @@ -117,13 +134,16 @@ namespace CodeImp.DoomBuilder.Controls else ceilingLight.Text = cl + " (" + Math.Min(255, Math.Max(0, (cl + s.Brightness))) + ")"; - } else { + } + else + { ceilingLight.Text = "--"; ceilingLight.Enabled = false; ceilingLightLabel.Enabled = false; } - if(s.Fields.ContainsKey("lightfloor") || s.Fields.ContainsKey("lightfloorabsolute")) { + if(s.Fields.ContainsKey("lightfloor") || s.Fields.ContainsKey("lightfloorabsolute")) + { showExtededFloorInfo = true; floorLight.Enabled = true; floorLightLabel.Enabled = true; @@ -135,7 +155,9 @@ namespace CodeImp.DoomBuilder.Controls else floorLight.Text = fl + " (" + Math.Min(255, Math.Max(0, (fl + s.Brightness))) + ")"; - } else { + } + else + { floorLight.Text = "--"; floorLight.Enabled = false; floorLightLabel.Enabled = false; @@ -145,12 +167,15 @@ namespace CodeImp.DoomBuilder.Controls float panX = s.Fields.GetValue("xpanningceiling", 0f); float panY = s.Fields.GetValue("ypanningceiling", 0f); - if(panX != 0 || panY != 0) { + if(panX != 0 || panY != 0) + { showExtededCeilingInfo = true; ceilingOffset.Enabled = true; ceilingOffsetLabel.Enabled = true; ceilingOffset.Text = String.Format("{0:0.##}", panX) + ", " + String.Format("{0:0.##}", panY); - } else { + } + else + { ceilingOffset.Text = "--, --"; ceilingOffset.Enabled = false; ceilingOffsetLabel.Enabled = false; @@ -160,12 +185,15 @@ namespace CodeImp.DoomBuilder.Controls panX = s.Fields.GetValue("xpanningfloor", 0f); panY = s.Fields.GetValue("ypanningfloor", 0f); - if(panX != 0 || panY != 0) { + if(panX != 0 || panY != 0) + { showExtededFloorInfo = true; floorOffset.Enabled = true; floorOffsetLabel.Enabled = true; floorOffset.Text = String.Format("{0:0.##}", panX) + ", " + String.Format("{0:0.##}", panY); - } else { + } + else + { floorOffset.Text = "--, --"; floorOffset.Enabled = false; floorOffsetLabel.Enabled = false; @@ -175,12 +203,15 @@ namespace CodeImp.DoomBuilder.Controls float scaleX = s.Fields.GetValue("xscaleceiling", 1.0f);//1.0f; float scaleY = s.Fields.GetValue("yscaleceiling", 1.0f); - if(scaleX != 1.0f || scaleY != 1.0f) { + if(scaleX != 1.0f || scaleY != 1.0f) + { showExtededCeilingInfo = true; ceilingScale.Enabled = true; ceilingScaleLabel.Enabled = true; ceilingScale.Text = String.Format("{0:0.##}", scaleX) + ", " + String.Format("{0:0.##}", scaleY); - } else { + } + else + { ceilingScale.Text = "--, --"; ceilingScale.Enabled = false; ceilingScaleLabel.Enabled = false; @@ -190,35 +221,44 @@ namespace CodeImp.DoomBuilder.Controls scaleX = s.Fields.GetValue("xscalefloor", 1.0f); scaleY = s.Fields.GetValue("yscalefloor", 1.0f); - if(scaleX != 1.0f || scaleY != 1.0f) { + if(scaleX != 1.0f || scaleY != 1.0f) + { showExtededFloorInfo = true; floorScale.Enabled = true; floorScaleLabel.Enabled = true; floorScale.Text = String.Format("{0:0.##}", scaleX) + ", " + String.Format("{0:0.##}", scaleY); - } else { + } + else + { floorScale.Text = "--, --"; floorScale.Enabled = false; floorScaleLabel.Enabled = false; } //rotation - if(s.Fields.ContainsKey("rotationceiling")) { + if(s.Fields.ContainsKey("rotationceiling")) + { showExtededCeilingInfo = true; ceilingAngle.Enabled = true; ceilingAngleLabel.Enabled = true; ceilingAngle.Text = s.Fields["rotationceiling"].Value + "\u00B0"; - } else { + } + else + { ceilingAngle.Text = "-"; ceilingAngle.Enabled = false; ceilingAngleLabel.Enabled = false; } - if(s.Fields.ContainsKey("rotationfloor")) { + if(s.Fields.ContainsKey("rotationfloor")) + { showExtededFloorInfo = true; floorAngle.Enabled = true; floorAngleLabel.Enabled = true; floorAngle.Text = s.Fields["rotationfloor"].Value + "\u00B0"; - } else { + } + else + { floorAngle.Text = "-"; floorAngle.Enabled = false; floorAngleLabel.Enabled = false; @@ -227,8 +267,10 @@ namespace CodeImp.DoomBuilder.Controls //Flags flags.Items.Clear(); - foreach(KeyValuePair group in s.Flags) { - if(group.Value) { + foreach(KeyValuePair group in s.Flags) + { + if(group.Value) + { ListViewItem item = new ListViewItem(General.Map.Config.SectorFlags.ContainsKey(group.Key) ? General.Map.Config.SectorFlags[group.Key] : group.Key); item.Checked = true; flags.Items.Add(item); @@ -237,14 +279,17 @@ namespace CodeImp.DoomBuilder.Controls //mxd. Flags panel visibility and size flagsPanel.Visible = (flags.Items.Count > 0); - if(flags.Items.Count > 0) { + if(flags.Items.Count > 0) + { int itemWidth = flags.Items[0].GetBounds(ItemBoundsPortion.Entire).Width; if(itemWidth == 0) itemWidth = 96; flags.Width = itemWidth * (int)Math.Ceiling(flags.Items.Count / 5.0f); flagsPanel.Width = flags.Width + flags.Left * 2; } - } else { + } + else + { panelFadeColor.Visible = false; panelLightColor.Visible = false; labelFade.Visible = false; @@ -253,18 +298,24 @@ namespace CodeImp.DoomBuilder.Controls } //panels size - if(showExtededCeilingInfo) { + if(showExtededCeilingInfo) + { ceilingpanel.Width = fullWidth; ceilingInfo.Visible = true; - } else { + } + else + { ceilingInfo.Visible = false; ceilingpanel.Width = 84; } - if(showExtededFloorInfo) { + if(showExtededFloorInfo) + { floorpanel.Width = fullWidth; floorInfo.Visible = true; - } else { + } + else + { floorInfo.Visible = false; floorpanel.Width = 84; } @@ -275,11 +326,16 @@ namespace CodeImp.DoomBuilder.Controls this.Update(); } - protected void DisplayTextureSize(Label label, ImageData texture) { - if(General.Settings.ShowTextureSizes && texture.ImageState == ImageLoadState.Ready && !string.IsNullOrEmpty(texture.Name) && !(texture is UnknownImage)) { + private void DisplayTextureSize(Label label, ImageData texture) + { + if(General.Settings.ShowTextureSizes && texture.ImageState == ImageLoadState.Ready + && !string.IsNullOrEmpty(texture.Name) && !(texture is UnknownImage)) + { label.Visible = true; label.Text = texture.ScaledWidth + "x" + texture.ScaledHeight; - } else { + } + else + { label.Visible = false; } } diff --git a/Source/Core/Controls/TextureSelectorControl.cs b/Source/Core/Controls/TextureSelectorControl.cs index 11f02bc0..304a3225 100644 --- a/Source/Core/Controls/TextureSelectorControl.cs +++ b/Source/Core/Controls/TextureSelectorControl.cs @@ -50,7 +50,8 @@ namespace CodeImp.DoomBuilder.Controls timer.Stop(); //mxd // Check if name is a "none" texture - if(string.IsNullOrEmpty(imagename)) { + if(string.IsNullOrEmpty(imagename)) + { DisplayImageSize(0, 0); //mxd //mxd. Determine image to show @@ -70,15 +71,16 @@ namespace CodeImp.DoomBuilder.Controls if(string.IsNullOrEmpty(texture.FullName) || texture is UnknownImage) DisplayImageSize(0, 0); //mxd else DisplayImageSize(texture.ScaledWidth, texture.ScaledHeight); //mxd - if(!texture.IsPreviewLoaded) timer.Start(); //mxd + if(usepreviews ? !texture.IsPreviewLoaded : !texture.IsImageLoaded) timer.Start(); //mxd // Set the image - return texture.GetPreview(); + return (usepreviews ? texture.GetPreview() : texture.GetBitmap()); } } // This browses for a texture - protected override string BrowseImage(string imagename) { + protected override string BrowseImage(string imagename) + { // Browse for texture string result = TextureBrowserForm.Browse(this.ParentForm, imagename, false); return result ?? imagename; diff --git a/Source/Core/Data/ColormapImage.cs b/Source/Core/Data/ColormapImage.cs index f7fc0393..9e63ee51 100644 --- a/Source/Core/Data/ColormapImage.cs +++ b/Source/Core/Data/ColormapImage.cs @@ -45,29 +45,24 @@ namespace CodeImp.DoomBuilder.Data // This loads the image protected override void LocalLoadImage() { - Stream lumpdata; - MemoryStream mem; - IImageReader reader; - byte[] membytes; - // Leave when already loaded if(this.IsImageLoaded) return; lock(this) { // Get the lump data stream - lumpdata = General.Map.Data.GetColormapData(Name); + Stream lumpdata = General.Map.Data.GetColormapData(Name); if(lumpdata != null) { // Copy lump data to memory lumpdata.Seek(0, SeekOrigin.Begin); - membytes = new byte[(int)lumpdata.Length]; + byte[] membytes = new byte[(int)lumpdata.Length]; lumpdata.Read(membytes, 0, (int)lumpdata.Length); - mem = new MemoryStream(membytes); + MemoryStream mem = new MemoryStream(membytes); mem.Seek(0, SeekOrigin.Begin); // Get a reader for the data - reader = ImageDataFormat.GetImageReader(mem, ImageDataFormat.DOOMCOLORMAP, General.Map.Data.Palette); + IImageReader reader = ImageDataFormat.GetImageReader(mem, ImageDataFormat.DOOMCOLORMAP, General.Map.Data.Palette); if(reader is UnknownImageReader) { // Data is in an unknown format! diff --git a/Source/Core/Data/DataManager.cs b/Source/Core/Data/DataManager.cs index 22dc22f3..ed4bdbc0 100644 --- a/Source/Core/Data/DataManager.cs +++ b/Source/Core/Data/DataManager.cs @@ -39,6 +39,7 @@ namespace CodeImp.DoomBuilder.Data #region ================== Constants public const string INTERNAL_PREFIX = "internal:"; + public const int CLASIC_IMAGE_NAME_LENGTH = 8; //mxd #endregion @@ -53,8 +54,10 @@ namespace CodeImp.DoomBuilder.Data // Textures, Flats and Sprites private Dictionary textures; + private Dictionary texturenamesshorttofull; //mxd private List texturenames; private Dictionary flats; + private Dictionary flatnamesshorttofull; //mxd private List flatnames; private Dictionary sprites; private List texturesets; @@ -237,6 +240,8 @@ namespace CodeImp.DoomBuilder.Data sprites = new Dictionary(); texturenames = new List(); flatnames = new List(); + texturenamesshorttofull = new Dictionary(); //mxd + flatnamesshorttofull = new Dictionary(); //mxd imageque = new Queue(); previews = new PreviewManager(); texturesets = new List(); @@ -320,7 +325,6 @@ namespace CodeImp.DoomBuilder.Data Dictionary actorsByClass = createActorsByClassList(); loadModeldefs(actorsByClass); loadGldefs(actorsByClass); - actorsByClass = null; //don't need them any more foreach (Thing t in General.Map.Map.Things) t.UpdateCache(); General.MainWindow.DisplayReady(); @@ -386,6 +390,10 @@ namespace CodeImp.DoomBuilder.Data // Sort things foreach(ThingCategory tc in thingcategories) tc.SortIfNeeded(); + //mxd. Create texture name translation lists + texturenamesshorttofull = CreateShortTextureNamesCollection(textures); + flatnamesshorttofull = CreateShortTextureNamesCollection(flats); + // Update the used textures General.Map.Data.UpdateUsedTextures(); @@ -417,6 +425,33 @@ namespace CodeImp.DoomBuilder.Data // Output info General.WriteLogLine("Loaded " + texcount + " textures, " + flatcount + " flats, " + colormapcount + " colormaps, " + spritecount + " sprites, " + thingcount + " decorate things, " + modeldefEntries.Count + " model deinitions, " + gldefsEntries.Count + " dynamic light definitions"); } + + //mxd + private Dictionary CreateShortTextureNamesCollection(Dictionary images) + { + Dictionary names = new Dictionary(); + + foreach(KeyValuePair pair in images) + { + if(pair.Value.FullName.Length > CLASIC_IMAGE_NAME_LENGTH) + { + string shortname = pair.Value.DisplayName.ToUpperInvariant(); + if(shortname.Length > CLASIC_IMAGE_NAME_LENGTH) shortname = shortname.Substring(0, CLASIC_IMAGE_NAME_LENGTH); + long hash = MurmurHash2.Hash(shortname); + + if(names.ContainsKey(hash)) + { + names[hash] = pair.Value.LongName; + } + else + { + names.Add(hash, pair.Value.LongName); + } + } + } + + return names; + } // This unloads all data internal void Unload() @@ -854,7 +889,7 @@ namespace CodeImp.DoomBuilder.Data } // This returns a specific patch stream - internal Stream GetPatchData(string pname) + internal Stream GetPatchData(string pname, bool longname) { Stream patch; @@ -862,7 +897,7 @@ namespace CodeImp.DoomBuilder.Data for(int i = containers.Count - 1; i > -1; i--) { // This contain provides this patch? - patch = containers[i].GetPatchData(pname); + patch = containers[i].GetPatchData(pname, longname); if(patch != null) return patch; } @@ -870,21 +905,8 @@ namespace CodeImp.DoomBuilder.Data return null; } - //mxd - internal string GetPatchLocation(string pname) { - string fullName = pname; - // Go for all opened containers - for (int i = containers.Count - 1; i >= 0; i--) { - // This contain provides this patch? - fullName = containers[i].GetPatchLocation(pname); - if (fullName != pname) return fullName; - } - - return pname; - } - // This returns a specific texture stream - internal Stream GetTextureData(string pname) + internal Stream GetTextureData(string pname, bool longname) { Stream patch; @@ -892,7 +914,7 @@ namespace CodeImp.DoomBuilder.Data for(int i = containers.Count - 1; i >= 0; i--) { // This contain provides this patch? - patch = containers[i].GetTextureData(pname); + patch = containers[i].GetTextureData(pname, longname); if(patch != null) return patch; } @@ -934,6 +956,17 @@ namespace CodeImp.DoomBuilder.Data // Return null image return unknownimage; //mxd } + + //mxd + public string GetFullTextureName(string name) + { + if (Path.GetFileNameWithoutExtension(name) == name && name.Length > CLASIC_IMAGE_NAME_LENGTH) + name = name.Substring(0, CLASIC_IMAGE_NAME_LENGTH); + long hash = MurmurHash2.Hash(name.Trim().ToUpperInvariant()); + if(textures.ContainsKey(hash)) return textures[hash].Name; + if(texturenamesshorttofull.ContainsKey(hash)) return textures[texturenamesshorttofull[hash]].Name; + return name; + } #endregion @@ -962,7 +995,6 @@ namespace CodeImp.DoomBuilder.Data // Add to preview manager previews.AddImage(img); - img.IsFlat = true; //mxd } } } @@ -972,7 +1004,7 @@ namespace CodeImp.DoomBuilder.Data } // This returns a specific flat stream - internal Stream GetFlatData(string pname) + internal Stream GetFlatData(string pname, bool longname) { Stream flat; @@ -980,7 +1012,7 @@ namespace CodeImp.DoomBuilder.Data for(int i = containers.Count - 1; i >= 0; i--) { // This contain provides this flat? - flat = containers[i].GetFlatData(pname); + flat = containers[i].GetFlatData(pname, longname); if(flat != null) return flat; } @@ -1025,6 +1057,17 @@ namespace CodeImp.DoomBuilder.Data // Return flat return flats[longname]; } + + //mxd. Gets full flat name by short flat name + public string GetFullFlatName(string name) + { + if(Path.GetFileNameWithoutExtension(name) == name && name.Length > CLASIC_IMAGE_NAME_LENGTH) + name = name.Substring(0, CLASIC_IMAGE_NAME_LENGTH); + long hash = MurmurHash2.Hash(name.ToUpperInvariant()); + if(flats.ContainsKey(hash)) return flats[hash].Name; + if(flatnamesshorttofull.ContainsKey(hash)) return flats[flatnamesshorttofull[hash]].Name; + return name; + } #endregion @@ -1064,7 +1107,7 @@ namespace CodeImp.DoomBuilder.Data foreach(ThingTypeInfo ti in General.Map.Data.ThingTypes) { // Valid sprite name? - if(ti.Sprite.Length == 0 || ti.Sprite.Length > 8) continue; //mxd + if(ti.Sprite.Length == 0 || ti.Sprite.Length > CLASIC_IMAGE_NAME_LENGTH) continue; //mxd ImageData image = null; @@ -1145,7 +1188,7 @@ namespace CodeImp.DoomBuilder.Data string[] files = Directory.GetFiles(General.SpritesPath, "*.png", SearchOption.TopDirectoryOnly); foreach(string spritefile in files) { - ImageData img = new FileImage(Path.GetFileNameWithoutExtension(spritefile).ToLowerInvariant(), spritefile, false); + ImageData img = new FileImage(Path.GetFileNameWithoutExtension(spritefile).ToLowerInvariant(), spritefile); img.LoadImage(); img.AllowUnload = false; internalsprites.Add(img.Name, img); @@ -1542,7 +1585,7 @@ namespace CodeImp.DoomBuilder.Data // Valid sprite name? string sprite; - if(ti.Sprite.Length == 0 || ti.Sprite.Length > 8) { + if(ti.Sprite.Length == 0 || ti.Sprite.Length > CLASIC_IMAGE_NAME_LENGTH) { if(ti.Actor == null) continue; sprite = ti.Actor.FindSuitableVoxel(voxelNames); } else { @@ -1721,12 +1764,6 @@ namespace CodeImp.DoomBuilder.Data updatedusedtextures = true; } } - - // This returns the long name for a string - public long GetLongImageName(string name) - { - return Lump.MakeLongName(name); - } #endregion } diff --git a/Source/Core/Data/DataReader.cs b/Source/Core/Data/DataReader.cs index 607a719c..30144063 100644 --- a/Source/Core/Data/DataReader.cs +++ b/Source/Core/Data/DataReader.cs @@ -117,13 +117,10 @@ namespace CodeImp.DoomBuilder.Data public virtual PatchNames LoadPatchNames() { return null; } // When implemented, this returns the patch lump - public virtual Stream GetPatchData(string pname) { return null; } - - //mxd. When implemented, this returns a path to patch (like /patches/walls/WALL001.png) - public virtual string GetPatchLocation(string pname) { return pname; } + public virtual Stream GetPatchData(string pname, bool longname) { return null; } // When implemented, this returns the texture lump - public virtual Stream GetTextureData(string pname) { return null; } + public virtual Stream GetTextureData(string pname, bool longname) { return null; } // When implemented, this loads the textures public virtual ICollection LoadTextures(PatchNames pnames) { return null; } @@ -136,7 +133,7 @@ namespace CodeImp.DoomBuilder.Data public virtual ICollection LoadFlats() { return null; } // When implemented, this returns the flat lump - public virtual Stream GetFlatData(string pname) { return null; } + public virtual Stream GetFlatData(string pname, bool longname) { return null; } #endregion @@ -179,7 +176,6 @@ namespace CodeImp.DoomBuilder.Data //mxd internal virtual MemoryStream LoadFile(string name) { return null; } - //mxd internal virtual bool FileExists(string filename) { return false; } #endregion diff --git a/Source/Core/Data/DirectoryReader.cs b/Source/Core/Data/DirectoryReader.cs index 12156842..3fa033c6 100644 --- a/Source/Core/Data/DirectoryReader.cs +++ b/Source/Core/Data/DirectoryReader.cs @@ -65,22 +65,31 @@ namespace CodeImp.DoomBuilder.Data #region ================== Textures // This finds and returns a patch stream - public override Stream GetPatchData(string pname) + public override Stream GetPatchData(string pname, bool longname) { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); // Find in any of the wad files // Note the backward order, because the last wad's images have priority - for(int i = wads.Count - 1; i > -1; i--) + if(!longname) //mxd. Patches with long names can't be in wads { - Stream data = wads[i].GetPatchData(pname); - if(data != null) return data; + for (int i = wads.Count - 1; i > -1; i--) + { + Stream data = wads[i].GetPatchData(pname, false); + if (data != null) return data; + } } - + try { - if (General.Map.Config.MixTexturesFlats) + if(longname) + { + //mxd. Long names are absolute + pname = pname.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); + return (FileExists(pname) ? LoadFile(pname) : null); + } + else if (General.Map.Config.MixTexturesFlats) { //mxd. Find in directories ZDoom expects them to be string dir = Path.GetDirectoryName(pname); @@ -112,21 +121,31 @@ namespace CodeImp.DoomBuilder.Data } // This finds and returns a textue stream - public override Stream GetTextureData(string pname) + public override Stream GetTextureData(string pname, bool longname) { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); // Find in any of the wad files // Note the backward order, because the last wad's images have priority - for(int i = wads.Count - 1; i >= 0; i--) + if (!longname) //mxd. Textures with long names can't be in wads { - Stream data = wads[i].GetTextureData(pname); - if(data != null) return data; + for (int i = wads.Count - 1; i >= 0; i--) + { + Stream data = wads[i].GetTextureData(pname, false); + if (data != null) return data; + } } try { + //mxd. Long names are absolute + if(General.Map.Options.UseLongTextureNames && !string.IsNullOrEmpty(Path.GetExtension(pname))) + { + pname = pname.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); + return (FileExists(pname) ? LoadFile(pname) : null); + } + // Find in textures directory string path = Path.Combine(TEXTURES_DIR, Path.GetDirectoryName(pname)); string filename = FindFirstFile(path, Path.GetFileName(pname), true); @@ -283,18 +302,18 @@ namespace CodeImp.DoomBuilder.Data } // This creates an image - protected override ImageData CreateImage(string name, string filename, int imagetype) + protected override ImageData CreateImage(string filename, int imagetype) { switch(imagetype) { case ImageDataFormat.DOOMFLAT: - return new FileImage(name, Path.Combine(location.location, filename), true); + return new FileImage(filename, Path.Combine(location.location, filename), true); case ImageDataFormat.DOOMPICTURE: - return new FileImage(name, Path.Combine(location.location, filename), false); + return new FileImage(filename, Path.Combine(location.location, filename), false); case ImageDataFormat.DOOMCOLORMAP: - return new ColormapImage(name); + return new ColormapImage(Path.GetFileNameWithoutExtension(filename)); default: throw new ArgumentException("Invalid image format specified!"); @@ -320,7 +339,8 @@ namespace CodeImp.DoomBuilder.Data } //mxd. This returns all files in a given directory which title starts with given title - protected override string[] GetAllFilesWhichTitleStartsWith(string path, string title) { + protected override string[] GetAllFilesWhichTitleStartsWith(string path, string title) + { return files.GetAllFilesWhichTitleStartsWith(path, title).ToArray(); } @@ -357,9 +377,12 @@ namespace CodeImp.DoomBuilder.Data { MemoryStream s = null; - try { + try + { s = new MemoryStream(File.ReadAllBytes(Path.Combine(location.location, filename))); - } catch(Exception e) { + } + catch(Exception e) + { General.ErrorLogger.Add(ErrorType.Error, "Unable to load file: "+e.Message); } return s; diff --git a/Source/Core/Data/DynamicBitmapImage.cs b/Source/Core/Data/DynamicBitmapImage.cs index 65fc5d96..33db85f2 100644 --- a/Source/Core/Data/DynamicBitmapImage.cs +++ b/Source/Core/Data/DynamicBitmapImage.cs @@ -27,9 +27,6 @@ namespace CodeImp.DoomBuilder.Data { #region ================== Variables - // Image source - //private Bitmap img; - #endregion #region ================== Constructor / Disposer diff --git a/Source/Core/Data/FileImage.cs b/Source/Core/Data/FileImage.cs index 8b98b8bb..fc77832e 100644 --- a/Source/Core/Data/FileImage.cs +++ b/Source/Core/Data/FileImage.cs @@ -28,7 +28,7 @@ namespace CodeImp.DoomBuilder.Data { #region ================== Variables - private int probableformat; + private readonly int probableformat; #endregion @@ -38,8 +38,8 @@ namespace CodeImp.DoomBuilder.Data public FileImage(string name, string filepathname, bool asflat) { // Initialize - SetName(name); - this.fullName = filepathname; //mxd + this.isFlat = asflat; //mxd + SetName(name, filepathname); if(asflat) { @@ -62,15 +62,24 @@ namespace CodeImp.DoomBuilder.Data public FileImage(string name, string filepathname, bool asflat, float scalex, float scaley) { // Initialize - this.fullName = filepathname; //mxd this.scale.x = scalex; this.scale.y = scaley; - SetName(name); + this.isFlat = asflat; //mxd + SetName(name, filepathname); - if(asflat) - probableformat = ImageDataFormat.DOOMFLAT; - else - probableformat = ImageDataFormat.DOOMPICTURE; + probableformat = (asflat ? ImageDataFormat.DOOMFLAT : ImageDataFormat.DOOMPICTURE); + + // We have no destructor + GC.SuppressFinalize(this); + } + + //mxd. Constructor for loading internal images + internal FileImage(string name, string filepathname) + { + // Initialize + SetName(name, filepathname, true); + + probableformat = ImageDataFormat.DOOMPICTURE; // We have no destructor GC.SuppressFinalize(this); @@ -80,6 +89,43 @@ namespace CodeImp.DoomBuilder.Data #region ================== Methods + //mxd: name is relative path to the image ("\Textures\sometexture.png") + //mxd: filepathname is absolute path to the image ("D:\Doom\MyCoolProject\Textures\sometexture.png") + //mxd: also, zdoom uses '/' as directory separator char. + private void SetName(string name, string filepathname) + { + SetName(name, filepathname, General.Map.Options.UseLongTextureNames); + } + + private void SetName(string name, string filepathname, bool uselongtexturenames) + { + name = name.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + + if(!uselongtexturenames) + { + this.name = Path.GetFileNameWithoutExtension(name.ToUpperInvariant()); + if(this.name.Length > DataManager.CLASIC_IMAGE_NAME_LENGTH) + this.name = this.name.Substring(0, DataManager.CLASIC_IMAGE_NAME_LENGTH); + this.virtualname = Path.Combine(Path.GetDirectoryName(name), this.name).Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + this.displayname = this.name; + this.longname = Lump.MakeLongName(this.name); //mxd + } + else + { + this.name = name; + this.virtualname = name; + this.displayname = Path.GetFileNameWithoutExtension(name); + this.longname = Lump.MakeLongName(name); + hasLongName = true; + } + + this.fullname = filepathname; + if(General.Settings.CapitalizeTextureNames && !string.IsNullOrEmpty(this.displayname)) + { + this.displayname = this.displayname.ToUpperInvariant(); + } + } + // This loads the image protected override void LocalLoadImage() { @@ -91,24 +137,30 @@ namespace CodeImp.DoomBuilder.Data // Load file data if(bitmap != null) bitmap.Dispose(); bitmap = null; - MemoryStream filedata = new MemoryStream(File.ReadAllBytes(fullName)); + MemoryStream filedata = new MemoryStream(File.ReadAllBytes(fullname)); // Get a reader for the data IImageReader reader = ImageDataFormat.GetImageReader(filedata, probableformat, General.Map.Data.Palette); - if(!(reader is UnknownImageReader)) { + if(!(reader is UnknownImageReader)) + { // Load the image filedata.Seek(0, SeekOrigin.Begin); - try { bitmap = reader.ReadAsBitmap(filedata); } catch(InvalidDataException) { + try { bitmap = reader.ReadAsBitmap(filedata); } + catch(InvalidDataException) + { // Data cannot be read! bitmap = null; } } // Not loaded? - if(bitmap == null) { - General.ErrorLogger.Add(ErrorType.Error, "Image file '" + fullName + "' data format could not be read, while loading image '" + this.Name + "'. Is this a valid picture file at all?"); + if(bitmap == null) + { + General.ErrorLogger.Add(ErrorType.Error, "Image file '" + fullname + "' data format could not be read, while loading image '" + this.Name + "'. Is this a valid picture file at all?"); loadfailed = true; - } else { + } + else + { // Get width and height width = bitmap.Size.Width; height = bitmap.Size.Height; diff --git a/Source/Core/Data/FlatImage.cs b/Source/Core/Data/FlatImage.cs index 3e6158af..e70f7ab2 100644 --- a/Source/Core/Data/FlatImage.cs +++ b/Source/Core/Data/FlatImage.cs @@ -33,6 +33,7 @@ namespace CodeImp.DoomBuilder.Data { // Initialize SetName(name); + isFlat = true; //mxd // We have no destructor GC.SuppressFinalize(this); @@ -51,7 +52,7 @@ namespace CodeImp.DoomBuilder.Data lock(this) { // Get the lump data stream - Stream lumpdata = General.Map.Data.GetFlatData(Name); + Stream lumpdata = General.Map.Data.GetFlatData(Name, hasLongName); if(lumpdata != null) { // Copy lump data to memory diff --git a/Source/Core/Data/HighResImage.cs b/Source/Core/Data/HighResImage.cs index c6e901a3..e003f1c1 100644 --- a/Source/Core/Data/HighResImage.cs +++ b/Source/Core/Data/HighResImage.cs @@ -32,15 +32,14 @@ namespace CodeImp.DoomBuilder.Data { #region ================== Variables - private List patches; //mxd - private string type; + private readonly List patches; //mxd #endregion #region ================== Constructor / Disposer // Constructor - public HighResImage(string name, string type, int width, int height, float scalex, float scaley, bool worldpanning) + public HighResImage(string name, int width, int height, float scalex, float scaley, bool worldpanning, bool isflat) { // Initialize this.width = width; @@ -49,9 +48,18 @@ namespace CodeImp.DoomBuilder.Data this.scale.y = scaley; this.worldpanning = worldpanning; this.patches = new List(1); - this.type = type; + + //mxd + if (!General.Map.Options.UseLongTextureNames) + { + if(name.Length > DataManager.CLASIC_IMAGE_NAME_LENGTH) + name = name.Substring(0, DataManager.CLASIC_IMAGE_NAME_LENGTH); + name = name.ToUpperInvariant(); + } + SetName(name); - this.fullName = "[TEXTURES]\\" + type + "s\\" + name; //mxd + this.virtualname = "[TEXTURES]/" + this.name; //mxd + this.isFlat = isflat; //mxd // We have no destructor GC.SuppressFinalize(this); @@ -109,7 +117,7 @@ namespace CodeImp.DoomBuilder.Data foreach(TexturePatch p in patches) { // Get the patch data stream - Stream patchdata = General.Map.Data.GetPatchData(p.lumpname); + Stream patchdata = General.Map.Data.GetPatchData(p.lumpname, p.haslongname); if(patchdata != null) { diff --git a/Source/Core/Data/ImageData.cs b/Source/Core/Data/ImageData.cs index b47cc176..57390650 100644 --- a/Source/Core/Data/ImageData.cs +++ b/Source/Core/Data/ImageData.cs @@ -42,15 +42,18 @@ namespace CodeImp.DoomBuilder.Data #region ================== Variables // Properties - private string name; - private long longname; + protected string name; + protected long longname; protected int width; protected int height; protected Vector2D scale; protected bool worldpanning; - protected bool usecolorcorrection; - protected string fullName; //mxd. name with path; + private bool usecolorcorrection; + protected string fullname; //mxd. name with path; + protected string virtualname; //mxd + protected string displayname; //mxd protected bool isFlat; //mxd. if false, it's a texture + protected bool hasLongName; //mxd. Texture name is longer than DataManager.CLASIC_IMAGE_NAME_LENGTH protected bool hasPatchWithSameName; //mxd // Loading @@ -81,8 +84,10 @@ namespace CodeImp.DoomBuilder.Data public string Name { get { return name; } } public long LongName { get { return longname; } } - public string FullName { get { return fullName; } } //mxd - public bool IsFlat { get { return isFlat; } internal set { isFlat = value; } } //mxd + public string FullName { get { return fullname; } } //mxd + public string VirtualName { get { return virtualname; } } //mxd + public string DisplayName { get { return displayname; } } //mxd + public bool IsFlat { get { return isFlat; } } //mxd public bool HasPatchWithSameName { get { return hasPatchWithSameName; } } //mxd public bool UseColorCorrection { get { return usecolorcorrection; } set { usecolorcorrection = value; } } public Texture Texture { get { lock(this) { return texture; } } } @@ -175,11 +180,13 @@ namespace CodeImp.DoomBuilder.Data } // This sets the name - protected void SetName(string name) + protected virtual void SetName(string name) { this.name = name; - this.longname = Lump.MakeLongName(name); - fullName = name; //mxd + this.fullname = name; //mxd + this.virtualname = name; //mxd + this.displayname = name; //mxd + this.longname = Lump.MakeLongName(name); //mxd } // This unloads the image @@ -200,18 +207,10 @@ namespace CodeImp.DoomBuilder.Data { // Image loaded successfully? if(!loadfailed && (imagestate == ImageLoadState.Ready) && (bitmap != null)) - { return bitmap; - } + // Image loading failed? - else if(loadfailed) - { - return Properties.Resources.Failed; - } - else - { - return Properties.Resources.Hourglass; - } + return (loadfailed ? Properties.Resources.Failed : Properties.Resources.Hourglass); } } @@ -229,8 +228,6 @@ namespace CodeImp.DoomBuilder.Data // This requests loading the image protected virtual void LocalLoadImage() { - BitmapData bmpdata = null; - lock(this) { // Bitmap loaded successfully? @@ -269,6 +266,8 @@ namespace CodeImp.DoomBuilder.Data // This applies brightness correction on the image if(usecolorcorrection) { + BitmapData bmpdata = null; + try { // Try locking the bitmap @@ -333,8 +332,6 @@ namespace CodeImp.DoomBuilder.Data // This creates the Direct3D texture public virtual void CreateTexture() { - MemoryStream memstream; - lock(this) { // Only do this when texture is not created yet @@ -344,7 +341,7 @@ namespace CodeImp.DoomBuilder.Data if(loadfailed) img = Properties.Resources.Failed; // Write to memory stream and read from memory - memstream = new MemoryStream((img.Size.Width * img.Size.Height * 4) + 4096); + MemoryStream memstream = new MemoryStream((img.Size.Width * img.Size.Height * 4) + 4096); img.Save(memstream, ImageFormat.Bmp); memstream.Seek(0, SeekOrigin.Begin); if(dynamictexture) diff --git a/Source/Core/Data/ImageDataFormat.cs b/Source/Core/Data/ImageDataFormat.cs index 25bf3780..d342f624 100644 --- a/Source/Core/Data/ImageDataFormat.cs +++ b/Source/Core/Data/ImageDataFormat.cs @@ -32,19 +32,22 @@ namespace CodeImp.DoomBuilder.Data public const int DOOMCOLORMAP = 3; // Could be Doom Colormap format (raw 8-bit pixel palette mapping) // File format signatures - private static readonly int[] PNG_SIGNATURE = new int[] { 137, 80, 78, 71, 13, 10, 26, 10 }; - private static readonly int[] GIF_SIGNATURE = new int[] { 71, 73, 70 }; - private static readonly int[] BMP_SIGNATURE = new int[] { 66, 77 }; - private static readonly int[] DDS_SIGNATURE = new int[] { 68, 68, 83, 32 }; - private static readonly int[] JPG_SIGNATURE = new int[] { 255, 216, 255 }; //mxd - private static readonly int[] TGA_SIGNATURE = new int[] { 0, 0, 2, 0 }; //mxd - private static readonly int[] PCX_SIGNATURE = new int[] { 10, 5, 1, 8 }; //mxd + private static readonly int[] PNG_SIGNATURE = new[] { 137, 80, 78, 71, 13, 10, 26, 10 }; + private static readonly int[] GIF_SIGNATURE = new[] { 71, 73, 70 }; + private static readonly int[] BMP_SIGNATURE = new[] { 66, 77 }; + private static readonly int[] DDS_SIGNATURE = new[] { 68, 68, 83, 32 }; + private static readonly int[] JPG_SIGNATURE = new[] { 255, 216, 255 }; //mxd + private static readonly int[] TGA_SIGNATURE = new[] { 0, 0, 2, 0 }; //mxd + private static readonly int[] PCX_SIGNATURE = new[] { 10, 5, 1, 8 }; //mxd // This check image data and returns the appropriate image reader public static IImageReader GetImageReader(Stream data, int guessformat, Playpal palette) { + if(data == null) return new UnknownImageReader(); //mxd + // Data long enough to check for signatures? - if(data.Length > 10) { + if(data.Length > 10) + { // Check for PNG signature data.Seek(0, SeekOrigin.Begin); if(CheckSignature(data, PNG_SIGNATURE)) @@ -82,7 +85,8 @@ namespace CodeImp.DoomBuilder.Data } // Could it be a doom picture? - switch(guessformat) { + switch(guessformat) + { case DOOMPICTURE: // Check if data is valid for a doom picture data.Seek(0, SeekOrigin.Begin); diff --git a/Source/Core/Data/PK3FileImage.cs b/Source/Core/Data/PK3FileImage.cs index f9edf3e1..e627c7e0 100644 --- a/Source/Core/Data/PK3FileImage.cs +++ b/Source/Core/Data/PK3FileImage.cs @@ -28,20 +28,20 @@ namespace CodeImp.DoomBuilder.Data { #region ================== Variables - private PK3Reader datareader; - private int probableformat; + private readonly PK3Reader datareader; + private readonly int probableformat; #endregion #region ================== Constructor / Disposer // Constructor - internal PK3FileImage(PK3Reader datareader, string name, string filepathname, bool asflat) + internal PK3FileImage(PK3Reader datareader, string filepathname, bool asflat) { // Initialize this.datareader = datareader; - SetName(name); - this.fullName = filepathname; + this.isFlat = asflat; //mxd + SetName(filepathname); if(asflat) { @@ -64,6 +64,33 @@ namespace CodeImp.DoomBuilder.Data #region ================== Methods + //mxd: filepathname is relative path to the image ("Textures\sometexture.png") + protected override void SetName(string filepathname) + { + if(!General.Map.Options.UseLongTextureNames) + { + this.name = Path.GetFileNameWithoutExtension(filepathname.ToUpperInvariant()); + if(this.name.Length > DataManager.CLASIC_IMAGE_NAME_LENGTH) + this.name = this.name.Substring(0, DataManager.CLASIC_IMAGE_NAME_LENGTH); + this.displayname = this.name; + this.longname = Lump.MakeLongName(this.name); //mxd + } + else + { + this.name = filepathname.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + this.displayname = Path.GetFileNameWithoutExtension(name); + this.longname = Lump.MakeLongName(this.name); + this.hasLongName = true; + } + + this.virtualname = filepathname.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + this.fullname = filepathname; + if(General.Settings.CapitalizeTextureNames && !string.IsNullOrEmpty(this.displayname)) + { + this.displayname = this.displayname.ToUpperInvariant(); + } + } + // This loads the image protected override void LocalLoadImage() { @@ -74,37 +101,44 @@ namespace CodeImp.DoomBuilder.Data { // Load file data if(bitmap != null) bitmap.Dispose(); bitmap = null; - MemoryStream filedata = datareader.LoadFile(fullName); //mxd - - // Get a reader for the data - IImageReader reader = ImageDataFormat.GetImageReader(filedata, probableformat, General.Map.Data.Palette); - if(!(reader is UnknownImageReader)) + MemoryStream filedata = datareader.LoadFile(fullname); //mxd + + if(filedata != null) { - // Load the image - filedata.Seek(0, SeekOrigin.Begin); - try { bitmap = reader.ReadAsBitmap(filedata); } - catch(InvalidDataException) + // Get a reader for the data + IImageReader reader = ImageDataFormat.GetImageReader(filedata, probableformat, General.Map.Data.Palette); + if(!(reader is UnknownImageReader)) { - // Data cannot be read! - bitmap = null; + // Load the image + filedata.Seek(0, SeekOrigin.Begin); + try + { + bitmap = reader.ReadAsBitmap(filedata); + } + catch (InvalidDataException) + { + // Data cannot be read! + bitmap = null; + } } + + // Not loaded? + if(bitmap == null) + { + General.ErrorLogger.Add(ErrorType.Error, "Image file '" + fullname + "' data format could not be read, while loading texture '" + this.Name + "'"); + loadfailed = true; + } + else + { + // Get width and height from image + width = bitmap.Size.Width; + height = bitmap.Size.Height; + } + + filedata.Dispose(); } - - // Not loaded? - if(bitmap == null) - { - General.ErrorLogger.Add(ErrorType.Error, "Image file '" + fullName + "' data format could not be read, while loading texture '" + this.Name + "'"); - loadfailed = true; - } - else - { - // Get width and height from image - width = bitmap.Size.Width; - height = bitmap.Size.Height; - } - + // Pass on to base - filedata.Dispose(); base.LocalLoadImage(); } } diff --git a/Source/Core/Data/PK3Reader.cs b/Source/Core/Data/PK3Reader.cs index e68f7e26..ae6412a2 100644 --- a/Source/Core/Data/PK3Reader.cs +++ b/Source/Core/Data/PK3Reader.cs @@ -75,7 +75,7 @@ namespace CodeImp.DoomBuilder.Data MemoryStream s = new MemoryStream(); reader.WriteEntryTo(s); - sevenzipentries.Add(reader.Entry.FilePath.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar), s.ToArray()); + sevenzipentries.Add(reader.Entry.FilePath.ToLowerInvariant(), s.ToArray()); fileentries.Add(new DirectoryFileEntry(reader.Entry.FilePath)); } @@ -142,17 +142,25 @@ namespace CodeImp.DoomBuilder.Data #region ================== Textures // This finds and returns a patch stream - public override Stream GetPatchData(string pname) + public override Stream GetPatchData(string pname, bool longname) { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); // Find in any of the wad files // Note the backward order, because the last wad's images have priority - for(int i = wads.Count - 1; i >= 0; i--) + if (!longname) //mxd. Patches with long names can't be in wads { - Stream data = wads[i].GetPatchData(pname); - if(data != null) return data; + for (int i = wads.Count - 1; i >= 0; i--) + { + Stream data = wads[i].GetPatchData(pname, false); + if (data != null) return data; + } + } + else + { + //mxd. Long names are absolute + return (FileExists(pname) ? LoadFile(pname) : null); } if (General.Map.Config.MixTexturesFlats) @@ -178,17 +186,25 @@ namespace CodeImp.DoomBuilder.Data } // This finds and returns a textue stream - public override Stream GetTextureData(string pname) + public override Stream GetTextureData(string pname, bool longname) { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); // Find in any of the wad files // Note the backward order, because the last wad's images have priority - for(int i = wads.Count - 1; i >= 0; i--) + if (!longname) //mxd. Textures with long names can't be in wads { - Stream data = wads[i].GetTextureData(pname); - if(data != null) return data; + for (int i = wads.Count - 1; i >= 0; i--) + { + Stream data = wads[i].GetTextureData(pname, false); + if (data != null) return data; + } + } + else + { + //mxd. Long names are absolute + return (FileExists(pname) ? LoadFile(pname) : null); } // Find in textures directory @@ -285,12 +301,14 @@ namespace CodeImp.DoomBuilder.Data #region ================== Voxels (mxd) //mxd. This finds and returns a voxel stream or null if no voxel was found - public override Stream GetVoxelData(string name) { + public override Stream GetVoxelData(string name) + { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); // Find in any of the wad files - for(int i = wads.Count - 1; i >= 0; i--) { + for(int i = wads.Count - 1; i >= 0; i--) + { Stream voxel = wads[i].GetVoxelData(name); if(voxel != null) return voxel; } @@ -299,7 +317,8 @@ namespace CodeImp.DoomBuilder.Data // Find in sprites directory string filename = FindFirstFile(VOXELS_DIR, pfilename, true); - if((filename != null) && FileExists(filename)) { + if((filename != null) && FileExists(filename)) + { return LoadFile(filename); } @@ -318,18 +337,18 @@ namespace CodeImp.DoomBuilder.Data } // This creates an image - protected override ImageData CreateImage(string name, string filename, int imagetype) + protected override ImageData CreateImage(string filename, int imagetype) { switch(imagetype) { case ImageDataFormat.DOOMFLAT: - return new PK3FileImage(this, name, filename, true); + return new PK3FileImage(this, filename, true); case ImageDataFormat.DOOMPICTURE: - return new PK3FileImage(this, name, filename, false); + return new PK3FileImage(this, filename, false); case ImageDataFormat.DOOMCOLORMAP: - return new ColormapImage(name); + return new ColormapImage(Path.GetFileNameWithoutExtension(filename)); default: throw new ArgumentException("Invalid image format specified!"); @@ -355,7 +374,8 @@ namespace CodeImp.DoomBuilder.Data } //mxd. This returns all files in a given directory which title starts with given title - protected override string[] GetAllFilesWhichTitleStartsWith(string path, string title) { + protected override string[] GetAllFilesWhichTitleStartsWith(string path, string title) + { return files.GetAllFilesWhichTitleStartsWith(path, title).ToArray(); } @@ -391,24 +411,24 @@ namespace CodeImp.DoomBuilder.Data internal override MemoryStream LoadFile(string filename) { MemoryStream filedata = null; + string fn = filename.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); //mxd //mxd. This works waaaaaay faster with 7z archive - if (archivetype == ArchiveType.SevenZip) + if (archivetype == ArchiveType.SevenZip) { - if (sevenzipentries.ContainsKey(filename)) - filedata = new MemoryStream(sevenzipentries[filename]); + fn = fn.ToLowerInvariant(); + if (sevenzipentries.ContainsKey(fn)) filedata = new MemoryStream(sevenzipentries[fn]); } else { UpdateArchive(true); - + foreach (var entry in archive.Entries) { if (entry.IsDirectory) continue; // Is this the entry we are looking for? - string entryname = entry.FilePath.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); - if (string.Compare(entryname, filename, true) == 0) + if(string.Compare(entry.FilePath, fn, true) == 0) { filedata = new MemoryStream(); entry.WriteTo(filedata); diff --git a/Source/Core/Data/PK3StructuredReader.cs b/Source/Core/Data/PK3StructuredReader.cs index 3946e9c8..53aaed50 100644 --- a/Source/Core/Data/PK3StructuredReader.cs +++ b/Source/Core/Data/PK3StructuredReader.cs @@ -261,34 +261,6 @@ namespace CodeImp.DoomBuilder.Data return null; } - - //mxd - public override string GetPatchLocation(string pname) { - // Error when suspended - if (issuspended) throw new Exception("Data reader is suspended"); - - if (General.Map.Config.MixTexturesFlats) - { - // Find in directories ZDoom expects them to be - foreach (string loc in PatchLocations) - { - string path = Path.Combine(loc, Path.GetDirectoryName(pname)); - string filename = FindFirstFile(path, Path.GetFileName(pname), true); - if (!string.IsNullOrEmpty(filename) && FileExists(filename)) - return filename; - } - } - else - { - // Find in patches directory - string path = Path.Combine(PATCHES_DIR, Path.GetDirectoryName(pname)); - string filename = FindFirstFile(path, Path.GetFileName(pname), true); - if (!string.IsNullOrEmpty(filename) && FileExists(filename)) - return filename; - } - - return pname; - } #endregion @@ -346,15 +318,20 @@ namespace CodeImp.DoomBuilder.Data } //mxd. - public override Stream GetFlatData(string pname) { + public override Stream GetFlatData(string pname, bool longname) + { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); // Find in any of the wad files // Note the backward order, because the last wad's images have priority - for(int i = wads.Count - 1; i > -1; i--) { - Stream data = wads[i].GetFlatData(pname); - if(data != null) return data; + if(!longname) //mxd. Flats with long names can't be in wads + { + for (int i = wads.Count - 1; i > -1; i--) + { + Stream data = wads[i].GetFlatData(pname, false); + if (data != null) return data; + } } // Nothing found @@ -488,18 +465,18 @@ namespace CodeImp.DoomBuilder.Data #region ================== Modeldef (mxd) //mxd - public override Dictionary GetModeldefData() { + public override Dictionary GetModeldefData() + { // Error when suspended if (issuspended) throw new Exception("Data reader is suspended"); //modedef should be in root folder - string[] allFiles = GetAllFiles("", false); + string[] files = GetAllFiles("", false); Dictionary streams = new Dictionary(StringComparer.Ordinal); - foreach (string s in allFiles) { - if (s.ToLowerInvariant().IndexOf("modeldef") != -1) { + foreach (string s in files) { + if (s.ToLowerInvariant().IndexOf("modeldef") != -1) streams.Add(s, LoadFile(s)); - } } return streams; @@ -510,34 +487,37 @@ namespace CodeImp.DoomBuilder.Data #region ================== Voxeldef (mxd) //mxd. This returns the list of voxels, which can be used without VOXELDEF definition - public override string[] GetVoxelNames() { + public override string[] GetVoxelNames() + { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); string[] files = GetAllFiles("voxels", false); List voxels = new List(); - Regex spriteName = new Regex(SPRITE_NAME_PATTERN); + Regex spritename = new Regex(SPRITE_NAME_PATTERN); - for(int i = 0; i < files.Length; i++) { - string s = Path.GetFileNameWithoutExtension(files[i]).ToUpperInvariant(); - if(spriteName.IsMatch(s)) voxels.Add(s); + foreach (string t in files) + { + string s = Path.GetFileNameWithoutExtension(t).ToUpperInvariant(); + if(spritename.IsMatch(s)) voxels.Add(s); } return voxels.ToArray(); } //mxd - public override KeyValuePair GetVoxeldefData() { + public override KeyValuePair GetVoxeldefData() + { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); //voxeldef should be in root folder string[] files = GetAllFiles("", false); - foreach(string s in files) { - if(Path.GetFileNameWithoutExtension(s).ToUpperInvariant() == "VOXELDEF") { + foreach(string s in files) + { + if(Path.GetFileNameWithoutExtension(s).ToUpperInvariant() == "VOXELDEF") return new KeyValuePair(s, LoadFile(s)); - } } return new KeyValuePair(); @@ -548,19 +528,21 @@ namespace CodeImp.DoomBuilder.Data #region ================== (Z)MAPINFO (mxd) //mxd - public override Dictionary GetMapinfoData() { - Dictionary streams = new Dictionary(StringComparer.Ordinal); + public override Dictionary GetMapinfoData() + { // Error when suspended if (issuspended) throw new Exception("Data reader is suspended"); //mapinfo should be in root folder - string[] allFiles = GetAllFiles("", false); - string fileName; + Dictionary streams = new Dictionary(StringComparer.Ordinal); + string[] files = GetAllFiles("", false); + string filename; //try to find (z)mapinfo - foreach (string s in allFiles) { - fileName = s.ToLowerInvariant(); - if (fileName.IndexOf("zmapinfo") != -1 || fileName.IndexOf("mapinfo") != -1) + foreach (string s in files) + { + filename = Path.GetFileNameWithoutExtension(s.ToLowerInvariant()); + if(filename == "zmapinfo" || filename == "mapinfo") streams.Add(s, LoadFile(s)); } @@ -572,29 +554,31 @@ namespace CodeImp.DoomBuilder.Data #region ================== GLDEFS (mxd) //mxd - public override Dictionary GetGldefsData(GameType gameType) { + public override Dictionary GetGldefsData(GameType gametype) + { // Error when suspended if (issuspended) throw new Exception("Data reader is suspended"); Dictionary streams = new Dictionary(StringComparer.Ordinal); //at least one of gldefs should be in root folder - string[] allFiles = GetAllFiles("", false); + string[] files = GetAllFiles("", false); //try to load game specific GLDEFS first - string lumpName; - if (gameType != GameType.UNKNOWN) { - lumpName = Gldefs.GLDEFS_LUMPS_PER_GAME[(int)gameType].ToLowerInvariant(); - foreach (string s in allFiles) { - if (s.ToLowerInvariant().IndexOf(lumpName) != -1) + if (gametype != GameType.UNKNOWN) + { + string lumpname = Gldefs.GLDEFS_LUMPS_PER_GAME[(int)gametype].ToLowerInvariant(); + foreach (string s in files) + { + if (s.ToLowerInvariant().IndexOf(lumpname) != -1) streams.Add(s, LoadFile(s)); } } - //can be several entries - lumpName = "gldefs"; - foreach (string s in allFiles) { - if (s.ToLowerInvariant().IndexOf(lumpName) != -1) + // Can be several entries + foreach (string s in files) + { + if(s.ToLowerInvariant().IndexOf("gldefs") != -1) streams.Add(s, LoadFile(s)); } @@ -602,7 +586,8 @@ namespace CodeImp.DoomBuilder.Data } //mxd - public override Dictionary GetGldefsData(string location) { + public override Dictionary GetGldefsData(string location) + { // Error when suspended if (issuspended) throw new Exception("Data reader is suspended"); @@ -620,30 +605,24 @@ namespace CodeImp.DoomBuilder.Data private ICollection LoadDirectoryImages(string path, int imagetype, bool includesubdirs) { List images = new List(); - string name; // Go for all files string[] files = GetAllFiles(path, includesubdirs); foreach(string f in files) { //mxd. Skip IMGZ files - if(Path.GetExtension(f).ToUpperInvariant() == ".IMGZ") continue; + string ext = Path.GetExtension(f); + if(!string.IsNullOrEmpty(ext) && ext.ToUpperInvariant() == ".IMGZ") continue; - // Make the texture name from filename without extension - name = Path.GetFileNameWithoutExtension(f); - - if (string.IsNullOrEmpty(name)) + if(string.IsNullOrEmpty(Path.GetFileNameWithoutExtension(f))) { // Can't load image without name General.ErrorLogger.Add(ErrorType.Error, "Can't load an unnamed texture from \"" + path + "\". Please consider giving names to your resources."); } else { - if(name.Length > General.Map.Config.MaxTextureNameLength) name = name.Substring(0, General.Map.Config.MaxTextureNameLength); - if(General.Settings.CapitalizeTextureNames) name = name.ToUpperInvariant(); //mxd - // Add image to list - images.Add(CreateImage(name, f, imagetype)); + images.Add(CreateImage(f, imagetype)); } } @@ -664,7 +643,7 @@ namespace CodeImp.DoomBuilder.Data } // This must create an image - protected abstract ImageData CreateImage(string name, string filename, int imagetype); + protected abstract ImageData CreateImage(string filename, int imagetype); // This must return all files in a given directory protected abstract string[] GetAllFiles(string path, bool subfolders); diff --git a/Source/Core/Data/SimpleTextureImage.cs b/Source/Core/Data/SimpleTextureImage.cs index e5e3e04f..ccac03b2 100644 --- a/Source/Core/Data/SimpleTextureImage.cs +++ b/Source/Core/Data/SimpleTextureImage.cs @@ -70,7 +70,7 @@ namespace CodeImp.DoomBuilder.Data { // Get the patch data stream if(bitmap != null) bitmap.Dispose(); bitmap = null; - patchdata = General.Map.Data.GetTextureData(lumpname); + patchdata = General.Map.Data.GetTextureData(lumpname, hasLongName); if(patchdata != null) { // Copy patch data to memory diff --git a/Source/Core/Data/TextureImage.cs b/Source/Core/Data/TextureImage.cs index c24f5ad3..69c0a216 100644 --- a/Source/Core/Data/TextureImage.cs +++ b/Source/Core/Data/TextureImage.cs @@ -106,7 +106,7 @@ namespace CodeImp.DoomBuilder.Data foreach(TexturePatch p in patches) { // Get the patch data stream - patchdata = General.Map.Data.GetPatchData(p.lumpname); + patchdata = General.Map.Data.GetPatchData(p.lumpname, p.haslongname); if(patchdata != null) { // Copy patch data to memory diff --git a/Source/Core/Data/TexturePatch.cs b/Source/Core/Data/TexturePatch.cs index 79229b99..77a86d9c 100644 --- a/Source/Core/Data/TexturePatch.cs +++ b/Source/Core/Data/TexturePatch.cs @@ -16,6 +16,7 @@ #region ================== Namespaces +using System.IO; using CodeImp.DoomBuilder.Rendering; using CodeImp.DoomBuilder.ZDoom; @@ -45,17 +46,18 @@ namespace CodeImp.DoomBuilder.Data internal struct TexturePatch { - public string lumpname; - public int x; - public int y; - public bool flipx; - public bool flipy; - public int rotate; + public readonly string lumpname; + public readonly int x; + public readonly int y; + public readonly bool flipx; + public readonly bool flipy; + public readonly bool haslongname; //mxd + public readonly int rotate; public PixelColor blend; - public float alpha; - public TexturePathRenderStyle style; - public TexturePathBlendStyle blendstyle; //mxd - public float tintammount;//mxd + public readonly float alpha; + public readonly TexturePathRenderStyle style; + public readonly TexturePathBlendStyle blendstyle; //mxd + public readonly float tintammount;//mxd // Constructor for simple patches public TexturePatch(string lumpname, int x, int y) @@ -72,6 +74,7 @@ namespace CodeImp.DoomBuilder.Data this.style = TexturePathRenderStyle.Copy; this.blendstyle = TexturePathBlendStyle.None;//mxd this.tintammount = 0; //mxd + this.haslongname = false; //mxd } //mxd. Constructor for hires patches @@ -88,9 +91,11 @@ namespace CodeImp.DoomBuilder.Data this.style = patch.RenderStyle; this.blendstyle = patch.BlendStyle; this.tintammount = patch.TintAmmount; + this.haslongname = (Path.GetFileNameWithoutExtension(this.lumpname) != this.lumpname); //mxd. Check data so we don't perform unneeded operations later on - if(this.alpha == 1.0f) { + if(this.alpha == 1.0f) + { if(this.style == TexturePathRenderStyle.Blend || this.style == TexturePathRenderStyle.CopyAlpha || this.style == TexturePathRenderStyle.CopyNewAlpha || this.style == TexturePathRenderStyle.Overlay) this.style = TexturePathRenderStyle.Copy; } diff --git a/Source/Core/Data/WADReader.cs b/Source/Core/Data/WADReader.cs index da66b1b1..b9d686a0 100644 --- a/Source/Core/Data/WADReader.cs +++ b/Source/Core/Data/WADReader.cs @@ -536,28 +536,32 @@ namespace CodeImp.DoomBuilder.Data } // This finds and returns a patch stream - public override Stream GetPatchData(string pname) + public override Stream GetPatchData(string pname, bool longname) { - Lump lump; - // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); + if(longname) return null; //mxd + Lump lump; // mxd. First strictly read patches between P_START and P_END - foreach(LumpRange range in patchranges) { + foreach(LumpRange range in patchranges) + { lump = file.FindLump(pname, range.start, range.end); if(lump != null) return lump.Stream; } - if (!strictpatches) { + if (!strictpatches) + { //mxd. Find the lump anywhere EXCEPT flat ranges (the way it's done in ZDoom) - foreach (LumpRange range in invertedflatranges) { + foreach (LumpRange range in invertedflatranges) + { lump = file.FindLump(pname, range.start, range.end); if(lump != null) return lump.Stream; } // Find the lump anywhere IN flat ranges - foreach (LumpRange range in flatranges) { + foreach (LumpRange range in flatranges) + { lump = file.FindLump(pname, range.start, range.end); if(lump != null) return lump.Stream; } @@ -567,12 +571,12 @@ namespace CodeImp.DoomBuilder.Data } // This finds and returns a texture stream - public override Stream GetTextureData(string pname) + public override Stream GetTextureData(string pname, bool longname) { - Lump lump; - // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); + if(longname) return null; //mxd + Lump lump; // Find the lump in ranges foreach(LumpRange range in textureranges) @@ -589,19 +593,23 @@ namespace CodeImp.DoomBuilder.Data #region ================== Flats //mxd. This loads the flats - public override ICollection LoadFlats() { + public override ICollection LoadFlats() + { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); List images = new List(); FlatImage image; - foreach(LumpRange range in flatranges){ + foreach(LumpRange range in flatranges) + { if(range.end < range.start + 2) continue; - for(int i = range.start + 1; i < range.end; i++) { + for(int i = range.start + 1; i < range.end; i++) + { // Lump not zero-length? - if(file.Lumps[i].Length > 0) { + if(file.Lumps[i].Length > 0) + { // Make the image object image = new FlatImage(file.Lumps[i].Name); @@ -613,7 +621,8 @@ namespace CodeImp.DoomBuilder.Data // Load TEXTURES lump file int lumpindex = file.FindLumpIndex("TEXTURES"); - while(lumpindex > -1) { + while(lumpindex > -1) + { MemoryStream filedata = new MemoryStream(file.Lumps[lumpindex].Stream.ReadAllBytes()); WADReader.LoadHighresFlats(filedata, "TEXTURES", ref images, null, null); filedata.Dispose(); @@ -654,11 +663,11 @@ namespace CodeImp.DoomBuilder.Data } // This finds and returns a patch stream - public override Stream GetFlatData(string pname) + public override Stream GetFlatData(string pname, bool longname) { // Error when suspended if(issuspended) throw new Exception("Data reader is suspended"); - + if(longname) return null; //mxd Lump lump; // Find the lump in ranges diff --git a/Source/Core/Editing/CopyPasteManager.cs b/Source/Core/Editing/CopyPasteManager.cs index 494c0d82..ab38596d 100644 --- a/Source/Core/Editing/CopyPasteManager.cs +++ b/Source/Core/Editing/CopyPasteManager.cs @@ -230,7 +230,7 @@ namespace CodeImp.DoomBuilder.Editing // Write data to stream MemoryStream memstream = new MemoryStream(); ClipboardStreamWriter writer = new ClipboardStreamWriter(); //mxd - writer.Write(copyset, memstream); + writer.Write(copyset, memstream, General.Map.Options.UseLongTextureNames); // Set on clipboard Clipboard.SetData(CLIPBOARD_DATA_FORMAT, memstream); @@ -293,6 +293,10 @@ namespace CodeImp.DoomBuilder.Editing // Convert UDMF fields back to flags and activations, if needed if(!(General.Map.FormatInterface is UniversalMapSetIO)) General.Map.Map.TranslateFromUDMF(); + + //mxd. Translate texture names if needed + if(reader.UseLongTextureNames != General.Map.Options.UseLongTextureNames) + General.Map.Map.TranslateTextureNames(General.Map.Options.UseLongTextureNames, true); // Modify tags and actions if preferred if(options.ChangeTags == PasteOptions.TAGS_REMOVE) Tools.RemoveMarkedTags(); diff --git a/Source/Core/Editing/GridSetup.cs b/Source/Core/Editing/GridSetup.cs index 2f0df40b..be4f484c 100644 --- a/Source/Core/Editing/GridSetup.cs +++ b/Source/Core/Editing/GridSetup.cs @@ -17,7 +17,9 @@ #region ================== Namespaces using System; +using System.IO; using System.Windows.Forms; +using CodeImp.DoomBuilder.Map; using CodeImp.DoomBuilder.Windows; using CodeImp.DoomBuilder.IO; using CodeImp.DoomBuilder.Actions; @@ -129,7 +131,7 @@ namespace CodeImp.DoomBuilder.Editing } // Read settings from configuration - internal void ReadFromConfig(Configuration cfg, string path) + internal void ReadFromConfig(Configuration cfg, string path, bool uselongtexturenames) { // Read settings background = cfg.ReadSetting(path + ".background", ""); @@ -140,6 +142,9 @@ namespace CodeImp.DoomBuilder.Editing backscaley = cfg.ReadSetting(path + ".backscaley", 100) / 100.0f; gridsize = cfg.ReadSetting(path + ".gridsize", DEFAULT_GRID_SIZE); + //mxd. Translate background name? + TranslateBackgroundName(uselongtexturenames); + // Setup SetGridSize(gridsize); LinkBackground(); @@ -172,6 +177,23 @@ namespace CodeImp.DoomBuilder.Editing LinkBackground(); } + //mxd + internal void TranslateBackgroundName(bool uselongtexturenames) + { + if(string.IsNullOrEmpty(background)) return; + + switch(backsource) + { + case SOURCE_TEXTURES: + background = (uselongtexturenames ? General.Map.Data.GetFullTextureName(background) : MapSet.GetShortTextureName(background)); + break; + + case SOURCE_FLATS: + background = (uselongtexturenames ? General.Map.Data.GetFullFlatName(background) : MapSet.GetShortTextureName(background)); + break; + } + } + // This sets the background view internal void SetBackgroundView(int offsetx, int offsety, float scalex, float scaley) { @@ -200,7 +222,7 @@ namespace CodeImp.DoomBuilder.Editing break; case SOURCE_FILE: - backimage = new FileImage(background, background, false, 1.0f, 1.0f); + backimage = new FileImage(Path.GetFileNameWithoutExtension(background), background, false, 1.0f, 1.0f); break; } diff --git a/Source/Core/GZBuilder/Controls/MultiSelectTreeview.cs b/Source/Core/GZBuilder/Controls/MultiSelectTreeview.cs index 8c6bc323..03c2c7ae 100644 --- a/Source/Core/GZBuilder/Controls/MultiSelectTreeview.cs +++ b/Source/Core/GZBuilder/Controls/MultiSelectTreeview.cs @@ -908,6 +908,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls { components = new System.ComponentModel.Container(); DoubleBuffered = true; //mxd + SetStyle(ControlStyles.OptimizedDoubleBuffer, true); //mxd } #endregion diff --git a/Source/Core/GZBuilder/Controls/PairedIntControl.Designer.cs b/Source/Core/GZBuilder/Controls/PairedIntControl.Designer.cs index 638a94fc..da2d6128 100644 --- a/Source/Core/GZBuilder/Controls/PairedIntControl.Designer.cs +++ b/Source/Core/GZBuilder/Controls/PairedIntControl.Designer.cs @@ -26,20 +26,32 @@ /// private void InitializeComponent() { this.label = new System.Windows.Forms.Label(); + this.bReset = new System.Windows.Forms.Button(); this.value1 = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox(); this.value2 = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox(); - this.bReset = new System.Windows.Forms.Button(); this.SuspendLayout(); // // label // this.label.Location = new System.Drawing.Point(0, 6); this.label.Name = "label"; - this.label.Size = new System.Drawing.Size(87, 14); + this.label.Size = new System.Drawing.Size(86, 14); this.label.TabIndex = 40; this.label.Text = "Upper Offset:"; this.label.TextAlign = System.Drawing.ContentAlignment.TopRight; // + // bReset + // + this.bReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.bReset.Image = global::CodeImp.DoomBuilder.Properties.Resources.Reset; + this.bReset.Location = new System.Drawing.Point(220, 1); + this.bReset.Name = "bReset"; + this.bReset.Size = new System.Drawing.Size(23, 23); + this.bReset.TabIndex = 43; + this.bReset.UseVisualStyleBackColor = true; + this.bReset.Visible = false; + this.bReset.Click += new System.EventHandler(this.bReset_Click); + // // value1 // this.value1.AllowDecimal = false; @@ -48,7 +60,8 @@ this.value1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.value1.ButtonStep = 1; this.value1.ButtonStepFloat = 1F; - this.value1.Location = new System.Drawing.Point(89, 1); + this.value1.ButtonStepsWrapAround = false; + this.value1.Location = new System.Drawing.Point(87, 1); this.value1.Name = "value1"; this.value1.Size = new System.Drawing.Size(62, 24); this.value1.StepValues = null; @@ -64,7 +77,8 @@ this.value2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.value2.ButtonStep = 1; this.value2.ButtonStepFloat = 1F; - this.value2.Location = new System.Drawing.Point(157, 1); + this.value2.ButtonStepsWrapAround = false; + this.value2.Location = new System.Drawing.Point(155, 1); this.value2.Name = "value2"; this.value2.Size = new System.Drawing.Size(62, 24); this.value2.StepValues = null; @@ -72,28 +86,16 @@ this.value2.Tag = "offsety_top"; this.value2.WhenTextChanged += new System.EventHandler(this.value1_WhenTextChanged); // - // bReset - // - this.bReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.bReset.Image = global::CodeImp.DoomBuilder.Properties.Resources.Reset; - this.bReset.Location = new System.Drawing.Point(222, 1); - this.bReset.Name = "bReset"; - this.bReset.Size = new System.Drawing.Size(23, 23); - this.bReset.TabIndex = 43; - this.bReset.UseVisualStyleBackColor = true; - this.bReset.Visible = false; - this.bReset.Click += new System.EventHandler(this.bReset_Click); - // // PairedIntControl // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.Controls.Add(this.bReset); this.Controls.Add(this.value1); this.Controls.Add(this.value2); this.Controls.Add(this.label); this.Name = "PairedIntControl"; - this.Size = new System.Drawing.Size(249, 26); + this.Size = new System.Drawing.Size(268, 26); this.ResumeLayout(false); } diff --git a/Source/Core/General/ErrorLogger.cs b/Source/Core/General/ErrorLogger.cs index e2a4516c..f93b1f12 100644 --- a/Source/Core/General/ErrorLogger.cs +++ b/Source/Core/General/ErrorLogger.cs @@ -87,18 +87,23 @@ namespace CodeImp.DoomBuilder case ErrorType.Error: erroradded = true; prefix = "ERROR: "; +#if DEBUG + DebugConsole.WriteLine(DebugMessageType.Error, message); +#endif break; case ErrorType.Warning: warningadded = true; prefix = "WARNING: "; +#if DEBUG + DebugConsole.WriteLine(DebugMessageType.Warning, message); +#endif break; } changed = true; + General.WriteLogLine(prefix + message); - - //mxd - General.MainWindow.SetWarningsCount(errors.Count, erroradded); + General.MainWindow.SetWarningsCount(errors.Count, erroradded); //mxd } } diff --git a/Source/Core/General/General.cs b/Source/Core/General/General.cs index a1b7d453..46b4e461 100644 --- a/Source/Core/General/General.cs +++ b/Source/Core/General/General.cs @@ -998,14 +998,14 @@ namespace CodeImp.DoomBuilder internal static void NewMap() { //mxd - if(map != null && map.Launcher.GameEngineRunning) { + if(map != null && map.Launcher.GameEngineRunning) + { ShowWarningMessage("Cannot create a map while game engine is running" + Environment.NewLine + "Please close '" + map.ConfigSettings.TestProgram + "' first.", MessageBoxButtons.OK); return; } MapOptions newoptions = new MapOptions(); - MapOptionsForm optionswindow; - + // Cancel volatile mode, if any editing.DisengageVolatileMode(); @@ -1013,7 +1013,7 @@ namespace CodeImp.DoomBuilder if(AskSaveMap()) { // Open map options dialog - optionswindow = new MapOptionsForm(newoptions, true); + MapOptionsForm optionswindow = new MapOptionsForm(newoptions, true); if(optionswindow.ShowDialog(mainwindow) == DialogResult.OK) { // Display status @@ -1030,9 +1030,8 @@ namespace CodeImp.DoomBuilder // Let the plugins know plugins.OnMapNewBegin(); - // Set this to false so we can see if errors are added - //General.ErrorLogger.IsErrorAdded = false; - errorlogger.Clear(); //mxd + // Clear old errors (mxd) + errorlogger.Clear(); // Create map manager with given options map = new MapManager(); @@ -1195,6 +1194,26 @@ namespace CodeImp.DoomBuilder ChangeMapForm changemapwindow = new ChangeMapForm(map.FilePathName, map.Options); if(changemapwindow.ShowDialog(mainwindow) != DialogResult.OK) return; + // If resources don't match, perform regular map loading + bool resourcesmismatch = changemapwindow.Options.Resources.Count != map.Options.Resources.Count; + if (!resourcesmismatch) + { + for(int i = 0; i < changemapwindow.Options.Resources.Count; i++) + { + if(changemapwindow.Options.Resources[i].location != map.Options.Resources[i].location) + { + resourcesmismatch = true; + break; + } + } + } + + if(resourcesmismatch) + { + OpenMapFileWithOptions(map.FilePathName, changemapwindow.Options); + return; + } + // Display status mainwindow.DisplayStatus(StatusType.Busy, "Switching to map '" + changemapwindow.Options.CurrentName + "'..."); WriteLogLine("Switching to map '" + changemapwindow.Options.CurrentName + "'..."); @@ -1363,7 +1382,7 @@ namespace CodeImp.DoomBuilder result = map.SaveSettingsFile(map.FilePathName); // Display status - mainwindow.DisplayStatus(StatusType.Info, "Map is up to date. No saving required."); + mainwindow.DisplayStatus(StatusType.Info, "Map is up to date. Updated map settings file."); // All done mainwindow.UpdateInterface(); @@ -1894,24 +1913,14 @@ namespace CodeImp.DoomBuilder // This shows an image in a panel either zoomed or centered depending on size public static void DisplayZoomedImage(Panel panel, Image image) { - // Set the image - panel.BackgroundImage = image; - // Image not null? if(image != null) { - // Small enough to fit in panel? - if((image.Size.Width < panel.ClientRectangle.Width) && - (image.Size.Height < panel.ClientRectangle.Height)) - { - // Display centered - panel.BackgroundImageLayout = ImageLayout.Center; - } - else - { - // Display zoomed - panel.BackgroundImageLayout = ImageLayout.Zoom; - } + // Set the image + panel.BackgroundImage = image; + + // Display zoomed + panel.BackgroundImageLayout = ImageLayout.Zoom; } } diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs index 91b0f106..b19bac76 100644 --- a/Source/Core/General/MapManager.cs +++ b/Source/Core/General/MapManager.cs @@ -413,6 +413,17 @@ namespace CodeImp.DoomBuilder { // Remove unused sectors map.RemoveUnusedSectors(true); + //mxd. Translate to long or short texture names. + bool nameschanged = map.TranslateTextureNames(options.UseLongTextureNames, false); + grid.TranslateBackgroundName(options.UseLongTextureNames); + + //mxd. Sector textures may've been changed + if (nameschanged) + { + data.UpdateUsedTextures(); + General.Map.IsChanged = true; + } + // Update structures options.ApplyGridSettings(); map.UpdateConfiguration(); @@ -445,8 +456,23 @@ namespace CodeImp.DoomBuilder { } //mxd. This switches to another map in the same wad - internal bool InitializeSwitchMap(MapOptions options) + internal bool InitializeSwitchMap(MapOptions options) { + bool uselongtexturenames = this.options.UseLongTextureNames; + + // Does not compute! (we don't reload resources, so it can potentially + // lead to texture lookup FIALS if there are non-WAD resources) + if(uselongtexturenames != options.UseLongTextureNames && + MessageBox.Show(General.MainWindow, + "Texture names in the map you are opening will be translated to " + + (uselongtexturenames ? "long" : "short") + " texture names." + + (!uselongtexturenames ? " This may lead to texture and flat name conflicts." : "") + + " Do you want to continue?", + Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No) + { + return false; + } + this.changed = false; this.options = options; @@ -508,7 +534,16 @@ namespace CodeImp.DoomBuilder { ChangeMapSet(newmap); - data.UpdateUsedTextures(); + //mxd. Translate texture names + bool nameschanged = map.TranslateTextureNames(uselongtexturenames, false); + grid.TranslateBackgroundName(uselongtexturenames); + + //mxd. Sector textures may've been changed + if (nameschanged) + { + data.UpdateUsedTextures(); + General.Map.IsChanged = true; + } //mxd. check script names UpdateScriptNames(); @@ -1875,7 +1910,7 @@ namespace CodeImp.DoomBuilder { foreach (Thing t in General.Map.Map.Things) for(int i = 0; i < t.Args.Length; i++) t.Args[i] = 0; } - General.Map.Map.UpdateCustomLinedefColors(); + map.UpdateCustomLinedefColors(); // Update interface General.MainWindow.SetupInterface(); @@ -1886,6 +1921,17 @@ namespace CodeImp.DoomBuilder { ReloadResources(); UpdateScriptNames(); //mxd + //mxd. Translate texture names + bool nameschanged = map.TranslateTextureNames(options.UseLongTextureNames, false); + grid.TranslateBackgroundName(options.UseLongTextureNames); + + //mxd. Sector textures may've been changed + if (nameschanged) + { + data.UpdateUsedTextures(); + General.Map.IsChanged = true; + } + // Done General.MainWindow.DisplayReady(); General.MainWindow.RedrawDisplay(); //mxd @@ -1950,7 +1996,7 @@ namespace CodeImp.DoomBuilder { Cursor.Current = Cursors.AppStarting; // Make undo for the snapping - General.Map.UndoRedo.CreateUndo("Snap vertices"); + undoredo.CreateUndo("Snap vertices"); int snappedCount = 0; List movedVerts = new List(); diff --git a/Source/Core/IO/ClipboardStreamReader.cs b/Source/Core/IO/ClipboardStreamReader.cs index 8a2949f1..a7cc5f1c 100644 --- a/Source/Core/IO/ClipboardStreamReader.cs +++ b/Source/Core/IO/ClipboardStreamReader.cs @@ -29,6 +29,14 @@ namespace CodeImp.DoomBuilder.IO public Dictionary Flags; } + private bool uselongtexturenames; //mxd + + #endregion + + #region ================== Properties + + public bool UseLongTextureNames { get { return uselongtexturenames; } } //mxd + #endregion #region ================== Reading @@ -38,6 +46,7 @@ namespace CodeImp.DoomBuilder.IO BinaryReader reader = new BinaryReader(stream); // Read the map + uselongtexturenames = reader.ReadBoolean(); //mxd Dictionary vertexlink = ReadVertices(map, reader); Dictionary sectorlink = ReadSectors(map, reader); Dictionary sidedeflink = ReadSidedefs(reader); diff --git a/Source/Core/IO/ClipboardStreamWriter.cs b/Source/Core/IO/ClipboardStreamWriter.cs index 0e9f63e3..20876b41 100644 --- a/Source/Core/IO/ClipboardStreamWriter.cs +++ b/Source/Core/IO/ClipboardStreamWriter.cs @@ -80,12 +80,12 @@ namespace CodeImp.DoomBuilder.IO #region ================== Writing - public void Write(MapSet map, Stream stream) { - Write(map.Vertices, map.Linedefs, map.Sidedefs, map.Sectors, map.Things, stream); + public void Write(MapSet map, Stream stream, bool longtexturenames) { + Write(map.Vertices, map.Linedefs, map.Sidedefs, map.Sectors, map.Things, stream, longtexturenames); } public void Write(ICollection vertices, ICollection linedefs, ICollection sidedefs, - ICollection sectors, ICollection things, Stream stream) { + ICollection sectors, ICollection things, Stream stream, bool longtexturenames) { // Create collections Dictionary vertexids = new Dictionary(); Dictionary sidedefids = new Dictionary(); @@ -98,6 +98,7 @@ namespace CodeImp.DoomBuilder.IO BinaryWriter writer = new BinaryWriter(stream); // Write the data structures to stream + writer.Write(longtexturenames); //mxd WriteVertices(vertices, writer); WriteSectors(sectors, writer); WriteSidedefs(sidedefs, writer, sectorids); diff --git a/Source/Core/IO/Lump.cs b/Source/Core/IO/Lump.cs index dd1b6766..7377f7aa 100644 --- a/Source/Core/IO/Lump.cs +++ b/Source/Core/IO/Lump.cs @@ -19,6 +19,7 @@ using System; using System.Text; using System.IO; +using CodeImp.DoomBuilder.Data; #endregion @@ -107,7 +108,7 @@ namespace CodeImp.DoomBuilder.IO #region ================== Methods // This returns the long value for a 8 byte texture name - public static unsafe long MakeLongName(string name) + /*public static unsafe long MakeLongName(string name) { long value = 0; byte[] namebytes = Encoding.ASCII.GetBytes(name.Trim().ToUpper()); @@ -120,6 +121,17 @@ namespace CodeImp.DoomBuilder.IO } return value; + }*/ + + //mxd. This returns (hopefully) unique hash value for a texture name of any length + public static long MakeLongName(string name) + { + name = name.Trim().ToUpper(); + if(name.Length > DataManager.CLASIC_IMAGE_NAME_LENGTH && General.Map != null && General.Map.Options != null && !General.Map.Options.UseLongTextureNames) + { + name = name.Substring(0, DataManager.CLASIC_IMAGE_NAME_LENGTH); + } + return MurmurHash2.Hash(name); } // This makes the normal name from fixed name diff --git a/Source/Core/IO/UniversalParser.cs b/Source/Core/IO/UniversalParser.cs index d455c3af..6ca60ef0 100644 --- a/Source/Core/IO/UniversalParser.cs +++ b/Source/Core/IO/UniversalParser.cs @@ -392,7 +392,7 @@ namespace CodeImp.DoomBuilder.IO // Add it to struct UniversalEntry entry = new UniversalEntry(key.ToString().Trim().ToLowerInvariant(), ival); cs.Add(entry); - matches.Add(data[line], entry); + if(!matches.ContainsKey(data[line])) matches.Add(data[line], entry); } catch(OverflowException) { @@ -405,7 +405,7 @@ namespace CodeImp.DoomBuilder.IO // Add it to struct UniversalEntry entry = new UniversalEntry(key.ToString().Trim().ToLowerInvariant(), lval); cs.Add(entry); - matches.Add(data[line], entry); + if(!matches.ContainsKey(data[line])) matches.Add(data[line], entry); } catch(OverflowException) { @@ -440,7 +440,7 @@ namespace CodeImp.DoomBuilder.IO // Add it to struct UniversalEntry entry = new UniversalEntry(key.ToString().Trim().ToLowerInvariant(), fval); cs.Add(entry); - matches.Add(data[line], entry); + if(!matches.ContainsKey(data[line])) matches.Add(data[line], entry); } else { @@ -453,7 +453,7 @@ namespace CodeImp.DoomBuilder.IO // Add it to struct UniversalEntry entry = new UniversalEntry(key.ToString().Trim().ToLowerInvariant(), ival); cs.Add(entry); - matches.Add(data[line], entry); + if(!matches.ContainsKey(data[line])) matches.Add(data[line], entry); } catch(OverflowException) { @@ -466,7 +466,7 @@ namespace CodeImp.DoomBuilder.IO // Add it to struct UniversalEntry entry = new UniversalEntry(key.ToString().Trim().ToLowerInvariant(), lval); cs.Add(entry); - matches.Add(data[line], entry); + if(!matches.ContainsKey(data[line])) matches.Add(data[line], entry); } catch(OverflowException) { @@ -574,7 +574,7 @@ namespace CodeImp.DoomBuilder.IO // Add string to struct UniversalEntry entry = new UniversalEntry(key.ToString().Trim().ToLowerInvariant(), val.ToString()); cs.Add(entry); - matches.Add(data[line], entry); + if(!matches.ContainsKey(data[line])) matches.Add(data[line], entry); // End of assignment pm = PM_ASSIGNMENT; @@ -611,14 +611,14 @@ namespace CodeImp.DoomBuilder.IO // Add boolean true UniversalEntry t = new UniversalEntry(key.ToString().Trim().ToLowerInvariant(), true); cs.Add(t); - matches.Add(data[line], t); + if(!matches.ContainsKey(data[line])) matches.Add(data[line], t); break; case "false": // Add boolean false UniversalEntry f = new UniversalEntry(key.ToString().Trim().ToLowerInvariant(), false); cs.Add(f); - matches.Add(data[line], f); + if(!matches.ContainsKey(data[line])) matches.Add(data[line], f); break; default: diff --git a/Source/Core/IO/UniversalStreamReader.cs b/Source/Core/IO/UniversalStreamReader.cs index d65db2d9..91dc3d99 100644 --- a/Source/Core/IO/UniversalStreamReader.cs +++ b/Source/Core/IO/UniversalStreamReader.cs @@ -133,13 +133,13 @@ namespace CodeImp.DoomBuilder.IO public MapSet Read(MapSet map, Stream stream) { StreamReader reader = new StreamReader(stream, Encoding.ASCII); - Dictionary vertexlink; - Dictionary sectorlink; UniversalParser textmap = new UniversalParser(); textmap.StrictChecking = strictchecking; +#if !DEBUG try { +#endif // Read UDMF from stream List data = new List(100); while(!reader.EndOfStream) @@ -160,16 +160,18 @@ namespace CodeImp.DoomBuilder.IO else { // Read the map - vertexlink = ReadVertices(map, textmap); - sectorlink = ReadSectors(map, textmap); + Dictionary vertexlink = ReadVertices(map, textmap); + Dictionary sectorlink = ReadSectors(map, textmap); ReadLinedefs(map, textmap, vertexlink, sectorlink); ReadThings(map, textmap); } +#if !DEBUG } catch(Exception e) { General.ShowErrorMessage("Unexpected error reading UDMF map data. " + e.GetType().Name + ": " + e.Message, MessageBoxButtons.OK); } +#endif return map; } @@ -326,12 +328,12 @@ namespace CodeImp.DoomBuilder.IO { // Read fields string where = "linedef " + ld.Index + (front ? " front sidedef " : " back sidedef ") + index; - int offsetx = GetCollectionEntry(sc, "offsetx", false, 0, where); - int offsety = GetCollectionEntry(sc, "offsety", false, 0, where); - string thigh = GetCollectionEntry(sc, "texturetop", false, "-", where); - string tlow = GetCollectionEntry(sc, "texturebottom", false, "-", where); - string tmid = GetCollectionEntry(sc, "texturemiddle", false, "-", where); - int sector = GetCollectionEntry(sc, "sector", true, 0, where); + int offsetx = GetCollectionEntry(sc, "offsetx", false, 0, where); + int offsety = GetCollectionEntry(sc, "offsety", false, 0, where); + string thigh = GetCollectionEntry(sc, "texturetop", false, "-", where); + string tlow = GetCollectionEntry(sc, "texturebottom", false, "-", where); + string tmid = GetCollectionEntry(sc, "texturemiddle", false, "-", where); + int sector = GetCollectionEntry(sc, "sector", true, 0, where); //mxd. Flags Dictionary stringflags = new Dictionary(StringComparer.Ordinal); @@ -359,13 +361,11 @@ namespace CodeImp.DoomBuilder.IO // This reads the sectors private Dictionary ReadSectors(MapSet map, UniversalParser textmap) { - Dictionary link; - // Get list of entries List collections = GetNamedCollections(textmap.Root, "sector"); // Create lookup table - link = new Dictionary(collections.Count); + Dictionary link = new Dictionary(collections.Count); // Go for all collections map.SetCapacity(0, 0, 0, map.Sectors.Count + collections.Count, 0); @@ -419,13 +419,11 @@ namespace CodeImp.DoomBuilder.IO // This reads the vertices private Dictionary ReadVertices(MapSet map, UniversalParser textmap) { - Dictionary link; - // Get list of entries List collections = GetNamedCollections(textmap.Root, "vertex"); // Create lookup table - link = new Dictionary(collections.Count); + Dictionary link = new Dictionary(collections.Count); // Go for all collections map.SetCapacity(map.Vertices.Count + collections.Count, 0, 0, 0, 0); diff --git a/Source/Core/Map/MapOptions.cs b/Source/Core/Map/MapOptions.cs index a0b60bab..29810d82 100644 --- a/Source/Core/Map/MapOptions.cs +++ b/Source/Core/Map/MapOptions.cs @@ -79,6 +79,8 @@ namespace CodeImp.DoomBuilder.Map private bool overridefloorheight; private bool overrideceilheight; private bool overridebrightness; + + private bool uselongtexturenames; //mxd #endregion @@ -129,6 +131,8 @@ namespace CodeImp.DoomBuilder.Map public bool OverrideFloorHeight { get { return overridefloorheight; } set { overridefloorheight = value; } } public bool OverrideCeilingHeight { get { return overrideceilheight; } set { overrideceilheight = value; } } public bool OverrideBrightness { get { return overridebrightness; } set { overridebrightness = value; } } + + public bool UseLongTextureNames { get { return uselongtexturenames; } set { uselongtexturenames = value; } } //mxd #endregion @@ -211,6 +215,8 @@ namespace CodeImp.DoomBuilder.Map overrideceilheight = this.mapconfig.ReadSetting("overrideceilheight", false); overridebrightness = this.mapconfig.ReadSetting("overridebrightness", false); + uselongtexturenames = this.mapconfig.ReadSetting("uselongtexturenames", false); //mxd + // Resources IDictionary reslist = this.mapconfig.ReadSetting("resources", new Hashtable()); foreach(DictionaryEntry mp in reslist) @@ -295,11 +301,13 @@ namespace CodeImp.DoomBuilder.Map General.Map.Map.WriteSelectionGroups(mapconfig); //mxd. Save Tag Labels - if(tagLabels.Count > 0) { + if(tagLabels.Count > 0) + { ListDictionary tagLabelsData = new ListDictionary(); int counter = 1; - foreach(KeyValuePair group in tagLabels){ + foreach(KeyValuePair group in tagLabels) + { ListDictionary data = new ListDictionary(); data.Add("tag", group.Key); data.Add("label", group.Value); @@ -330,6 +338,8 @@ namespace CodeImp.DoomBuilder.Map mapconfig.WriteSetting("overrideceilheight", overrideceilheight); mapconfig.WriteSetting("overridebrightness", overridebrightness); + mapconfig.WriteSetting("uselongtexturenames", uselongtexturenames); //mxd + //mxd. Write script compiler if(!string.IsNullOrEmpty(scriptcompiler)) mapconfig.WriteSetting("scriptcompiler", scriptcompiler); @@ -416,7 +426,7 @@ namespace CodeImp.DoomBuilder.Map // This loads the grid settings internal void ApplyGridSettings() { - General.Map.Grid.ReadFromConfig(mapconfig, "grid"); + General.Map.Grid.ReadFromConfig(mapconfig, "grid", uselongtexturenames); } //mxd. This reads stored selection groups from the map configuration diff --git a/Source/Core/Map/MapSet.cs b/Source/Core/Map/MapSet.cs index 86cbf8e6..e1e103f1 100644 --- a/Source/Core/Map/MapSet.cs +++ b/Source/Core/Map/MapSet.cs @@ -28,6 +28,7 @@ using CodeImp.DoomBuilder.IO; using CodeImp.DoomBuilder.Types; using CodeImp.DoomBuilder.Windows; using CodeImp.DoomBuilder.VisualModes; +using CodeImp.DoomBuilder.Data; #endregion @@ -3204,6 +3205,151 @@ namespace CodeImp.DoomBuilder.Map foreach(Thing t in things) if(t.Marked) t.TranslateFromUDMF(); } + //mxd + internal bool TranslateTextureNames(bool uselongnames, bool markedonly) + { + if (markedonly) + { + List markedsectors = GetMarkedSectors(true); + List markedsides = GetMarkedSidedefs(true); + if(uselongnames) return TranslateToLongTextureNames(markedsectors, markedsides); + return TranslateToShortTextureNames(markedsectors, markedsides); + } + else + { + if(uselongnames) return TranslateToLongTextureNames(sectors, sidedefs); + return TranslateToShortTextureNames(sectors, sidedefs); + } + } + + //mxd + private bool TranslateToLongTextureNames(IEnumerable sectors, IEnumerable sidedefs) + { + bool changed = false; + + foreach (Sector s in sectors) + { + if (s.FloorTexture != "-") + { + string ft = General.Map.Data.GetFullFlatName(s.FloorTexture); + if (ft != s.FloorTexture) + { + s.SetFloorTexture(ft); + changed = true; + } + } + if (s.CeilTexture != "-") + { + string ct = General.Map.Data.GetFullFlatName(s.CeilTexture); + if (ct != s.CeilTexture) + { + s.SetCeilTexture(ct); + changed = true; + } + } + } + + foreach (Sidedef s in sidedefs) + { + if (s.HighTexture != "-") + { + string ht = General.Map.Data.GetFullTextureName(s.HighTexture); + if (ht != s.HighTexture) + { + s.SetTextureHigh(ht); + changed = true; + } + } + if (s.MiddleTexture != "-") + { + string mt = General.Map.Data.GetFullTextureName(s.MiddleTexture); + if (mt != s.MiddleTexture) + { + s.SetTextureMid(mt); + changed = true; + } + } + if (s.LowTexture != "-") + { + string lt = General.Map.Data.GetFullTextureName(s.LowTexture); + if (lt != s.LowTexture) + { + s.SetTextureLow(lt); + changed = true; + } + } + } + + return changed; + } + + private bool TranslateToShortTextureNames(IEnumerable sectors, IEnumerable sidedefs) + { + bool changed = false; + + foreach(Sector s in sectors) + { + if(s.FloorTexture != "-") + { + string ft = GetShortTextureName(s.FloorTexture); + if (ft != s.FloorTexture) + { + s.SetFloorTexture(ft); + changed = true; + } + } + if(s.CeilTexture != "-") + { + string ct = GetShortTextureName(s.CeilTexture); + if (ct != s.CeilTexture) + { + s.SetCeilTexture(ct); + changed = true; + } + } + } + + foreach(Sidedef s in sidedefs) + { + if(s.HighTexture != "-") + { + string ht = GetShortTextureName(s.HighTexture); + if (ht != s.HighTexture) + { + s.SetTextureHigh(ht); + changed = true; + } + } + if(s.MiddleTexture != "-") + { + string mt = GetShortTextureName(s.MiddleTexture); + if (mt != s.MiddleTexture) + { + s.SetTextureMid(mt); + changed = true; + } + } + if(s.LowTexture != "-") + { + string lt = GetShortTextureName(s.LowTexture); + if (lt != s.LowTexture) + { + s.SetTextureLow(lt); + changed = true; + } + } + } + + return changed; + } + + internal static string GetShortTextureName(string name) + { + string shortname = Path.GetFileNameWithoutExtension(name).ToUpperInvariant(); + if (shortname.Length > DataManager.CLASIC_IMAGE_NAME_LENGTH) shortname = shortname.Substring(0, DataManager.CLASIC_IMAGE_NAME_LENGTH); + return shortname; + } + /// This removes unused vertices. public void RemoveUnusedVertices() { diff --git a/Source/Core/Windows/ChangeMapForm.cs b/Source/Core/Windows/ChangeMapForm.cs index d2620efb..37ecafab 100644 --- a/Source/Core/Windows/ChangeMapForm.cs +++ b/Source/Core/Windows/ChangeMapForm.cs @@ -11,7 +11,8 @@ namespace CodeImp.DoomBuilder.Windows { public partial class ChangeMapForm : DelayedForm { - private readonly MapOptions options; + private MapOptions options; + private Configuration mapsettings; private readonly string filepathname; public MapOptions Options { get { return options; } } @@ -58,19 +59,36 @@ namespace CodeImp.DoomBuilder.Windows // Make an array for the map names List mapnames = new List(); + // Open the Map Settings configuration + string dbsfile = filepathname.Substring(0, filepathname.Length - 4) + ".dbs"; + if (File.Exists(dbsfile)) + { + try + { + mapsettings = new Configuration(dbsfile, true); + } + catch (Exception) + { + mapsettings = new Configuration(true); + } + } + else + { + mapsettings = new Configuration(true); + } + //mxd. Get Proper configuration ConfigurationInfo ci = General.GetConfigurationInfo(options.ConfigFile); - Configuration cfg = ci.Configuration; - + // Get the map lump names - IDictionary maplumpnames = cfg.ReadSetting("maplumpnames", new Hashtable()); + IDictionary maplumpnames = ci.Configuration.ReadSetting("maplumpnames", new Hashtable()); // Count how many required lumps we have to find foreach(DictionaryEntry ml in maplumpnames) { // Ignore the map header (it will not be found because the name is different) if(ml.Key.ToString() != MapManager.CONFIG_MAP_HEADER) { // Read lump setting and count it - if(cfg.ReadSetting("maplumpnames." + ml.Key + ".required", false)) + if(ci.Configuration.ReadSetting("maplumpnames." + ml.Key + ".required", false)) lumpsrequired++; } } @@ -88,7 +106,7 @@ namespace CodeImp.DoomBuilder.Windows maplumpnames.Contains(wadfile.Lumps[scanindex + checkoffset].Name)) { // Count the lump when it is marked as required lumpname = wadfile.Lumps[scanindex + checkoffset].Name; - if(cfg.ReadSetting("maplumpnames." + lumpname + ".required", false)) + if(ci.Configuration.ReadSetting("maplumpnames." + lumpname + ".required", false)) lumpsfound++; // Check the next lump @@ -147,9 +165,9 @@ namespace CodeImp.DoomBuilder.Windows General.ShowWarningMessage("Map '" + options.LevelName + "' is already loaded!", MessageBoxButtons.OK); return; } - - options.CurrentName = mapslist.SelectedItems[0].Text; - options.PreviousName = string.Empty; + + // Create new map options + options = new MapOptions(mapsettings, mapslist.SelectedItems[0].Text); // Hide window this.DialogResult = DialogResult.OK; diff --git a/Source/Core/Windows/GridSetupForm.cs b/Source/Core/Windows/GridSetupForm.cs index a561fdc3..b1257d6c 100644 --- a/Source/Core/Windows/GridSetupForm.cs +++ b/Source/Core/Windows/GridSetupForm.cs @@ -18,6 +18,7 @@ using System; using System.Drawing; +using System.IO; using System.Windows.Forms; using CodeImp.DoomBuilder.Data; using CodeImp.DoomBuilder.Editing; @@ -84,10 +85,8 @@ namespace CodeImp.DoomBuilder.Windows // Browse texture private void selecttexture_Click(object sender, EventArgs e) { - string result; - // Browse for texture - result = TextureBrowserForm.Browse(this, backgroundname, false); + string result = TextureBrowserForm.Browse(this, backgroundname, false); if(result != null) { // Set this texture as background @@ -102,10 +101,8 @@ namespace CodeImp.DoomBuilder.Windows // Browse flat private void selectflat_Click(object sender, EventArgs e) { - string result; - // Browse for flat - result = TextureBrowserForm.Browse(this, backgroundname, true); //mxd. was FlatBrowserForm + string result = TextureBrowserForm.Browse(this, backgroundname, true); if(result != null) { // Set this flat as background @@ -126,7 +123,7 @@ namespace CodeImp.DoomBuilder.Windows // Set this file as background backgroundname = browsefile.FileName; backgroundsource = GridSetup.SOURCE_FILE; - ImageData img = new FileImage(backgroundname, backgroundname, false, 1.0f, 1.0f); + ImageData img = new FileImage(Path.GetFileNameWithoutExtension(backgroundname), backgroundname, false, 1.0f, 1.0f); img.LoadImage(); General.DisplayZoomedImage(backgroundimage, new Bitmap(img.GetBitmap())); img.Dispose(); diff --git a/Source/Core/Windows/LinedefEditForm.Designer.cs b/Source/Core/Windows/LinedefEditForm.Designer.cs index bf5849a8..be8971ba 100644 --- a/Source/Core/Windows/LinedefEditForm.Designer.cs +++ b/Source/Core/Windows/LinedefEditForm.Designer.cs @@ -451,12 +451,12 @@ namespace CodeImp.DoomBuilder.Windows this.frontgroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.frontgroup.Controls.Add(this.frontside); - this.frontgroup.Controls.Add(this.frontTextureOffset); this.frontgroup.Controls.Add(this.frontsector); this.frontgroup.Controls.Add(label11); this.frontgroup.Controls.Add(this.frontlow); this.frontgroup.Controls.Add(this.frontmid); this.frontgroup.Controls.Add(this.fronthigh); + this.frontgroup.Controls.Add(this.frontTextureOffset); this.frontgroup.Controls.Add(label5); this.frontgroup.Controls.Add(label4); this.frontgroup.Controls.Add(label3); @@ -475,7 +475,7 @@ namespace CodeImp.DoomBuilder.Windows this.frontTextureOffset.Label = "Texture Offset:"; this.frontTextureOffset.Location = new System.Drawing.Point(3, 65); this.frontTextureOffset.Name = "frontTextureOffset"; - this.frontTextureOffset.Size = new System.Drawing.Size(247, 26); + this.frontTextureOffset.Size = new System.Drawing.Size(268, 26); this.frontTextureOffset.TabIndex = 41; this.frontTextureOffset.OnValuesChanged += new System.EventHandler(this.frontTextureOffset_OnValuesChanged); // @@ -541,13 +541,13 @@ namespace CodeImp.DoomBuilder.Windows // this.backgroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.backgroup.Controls.Add(this.backTextureOffset); this.backgroup.Controls.Add(this.backside); this.backgroup.Controls.Add(this.backsector); this.backgroup.Controls.Add(label12); this.backgroup.Controls.Add(this.backlow); this.backgroup.Controls.Add(this.backmid); this.backgroup.Controls.Add(this.backhigh); + this.backgroup.Controls.Add(this.backTextureOffset); this.backgroup.Controls.Add(label8); this.backgroup.Controls.Add(label9); this.backgroup.Controls.Add(label10); @@ -566,7 +566,7 @@ namespace CodeImp.DoomBuilder.Windows this.backTextureOffset.Label = "Texture Offset:"; this.backTextureOffset.Location = new System.Drawing.Point(3, 65); this.backTextureOffset.Name = "backTextureOffset"; - this.backTextureOffset.Size = new System.Drawing.Size(247, 28); + this.backTextureOffset.Size = new System.Drawing.Size(268, 28); this.backTextureOffset.TabIndex = 42; this.backTextureOffset.OnValuesChanged += new System.EventHandler(this.backTextureOffset_OnValuesChanged); // @@ -648,7 +648,6 @@ namespace CodeImp.DoomBuilder.Windows this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "LinedefEditForm"; - this.Opacity = 0; this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/Source/Core/Windows/LinedefEditFormUDMF.Designer.cs b/Source/Core/Windows/LinedefEditFormUDMF.Designer.cs index cc65ee4d..c904cdb8 100644 --- a/Source/Core/Windows/LinedefEditFormUDMF.Designer.cs +++ b/Source/Core/Windows/LinedefEditFormUDMF.Designer.cs @@ -30,17 +30,12 @@ namespace CodeImp.DoomBuilder.Windows { this.components = new System.ComponentModel.Container(); System.Windows.Forms.Label label2; - System.Windows.Forms.Label label3; - System.Windows.Forms.Label label4; - System.Windows.Forms.Label label5; - System.Windows.Forms.Label label8; - System.Windows.Forms.Label label9; - System.Windows.Forms.Label label10; System.Windows.Forms.Label label11; System.Windows.Forms.Label label12; System.Windows.Forms.Label label7; System.Windows.Forms.Label label14; System.Windows.Forms.Label label6; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LinedefEditFormUDMF)); this.labelLightFront = new System.Windows.Forms.Label(); this.cancel = new System.Windows.Forms.Button(); this.apply = new System.Windows.Forms.Button(); @@ -74,59 +69,56 @@ namespace CodeImp.DoomBuilder.Windows this.missingactivation = new System.Windows.Forms.PictureBox(); this.idgroup = new System.Windows.Forms.GroupBox(); this.tagSelector = new CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector(); - this.tabsidedefs = new System.Windows.Forms.TabPage(); - this.splitter = new System.Windows.Forms.SplitContainer(); + this.tabfront = new System.Windows.Forms.TabPage(); this.frontside = new System.Windows.Forms.CheckBox(); this.frontgroup = new System.Windows.Forms.GroupBox(); + this.frontflagsgroup = new System.Windows.Forms.GroupBox(); + this.flagsFront = new CodeImp.DoomBuilder.Controls.CheckboxArrayControl(); + this.frontscalegroup = new System.Windows.Forms.GroupBox(); + this.pfcFrontScaleTop = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.pfcFrontScaleBottom = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.pfcFrontScaleMid = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); this.frontTextureOffset = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedIntControl(); - this.cbLightAbsoluteFront = new System.Windows.Forms.CheckBox(); - this.lightFront = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox(); + this.pfcFrontOffsetTop = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.pfcFrontOffsetMid = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.pfcFrontOffsetBottom = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); this.frontsector = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox(); this.customfrontbutton = new System.Windows.Forms.Button(); + this.lightFront = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox(); + this.cbLightAbsoluteFront = new System.Windows.Forms.CheckBox(); this.frontlow = new CodeImp.DoomBuilder.Controls.TextureSelectorControl(); this.frontmid = new CodeImp.DoomBuilder.Controls.TextureSelectorControl(); this.fronthigh = new CodeImp.DoomBuilder.Controls.TextureSelectorControl(); - this.udmfPropertiesFront = new System.Windows.Forms.TabControl(); - this.tabFrontOffsets = new System.Windows.Forms.TabPage(); - this.pfcFrontScaleBottom = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcFrontScaleMid = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcFrontScaleTop = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcFrontOffsetBottom = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcFrontOffsetMid = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcFrontOffsetTop = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.tabFrontFlags = new System.Windows.Forms.TabPage(); - this.flagsFront = new CodeImp.DoomBuilder.Controls.CheckboxArrayControl(); + this.tabback = new System.Windows.Forms.TabPage(); this.backside = new System.Windows.Forms.CheckBox(); this.backgroup = new System.Windows.Forms.GroupBox(); - this.backTextureOffset = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedIntControl(); - this.cbLightAbsoluteBack = new System.Windows.Forms.CheckBox(); - this.labelLightBack = new System.Windows.Forms.Label(); - this.lightBack = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); this.backsector = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox(); this.custombackbutton = new System.Windows.Forms.Button(); + this.lightBack = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox(); + this.labelLightBack = new System.Windows.Forms.Label(); + this.cbLightAbsoluteBack = new System.Windows.Forms.CheckBox(); + this.backflagsgroup = new System.Windows.Forms.GroupBox(); + this.flagsBack = new CodeImp.DoomBuilder.Controls.CheckboxArrayControl(); + this.backscalegroup = new System.Windows.Forms.GroupBox(); + this.pfcBackScaleTop = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.pfcBackScaleBottom = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.pfcBackScaleMid = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.pfcBackOffsetTop = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.pfcBackOffsetMid = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.pfcBackOffsetBottom = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); + this.backTextureOffset = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedIntControl(); this.backlow = new CodeImp.DoomBuilder.Controls.TextureSelectorControl(); this.backmid = new CodeImp.DoomBuilder.Controls.TextureSelectorControl(); this.backhigh = new CodeImp.DoomBuilder.Controls.TextureSelectorControl(); - this.udmfPropertiesBack = new System.Windows.Forms.TabControl(); - this.tabBackOffsets = new System.Windows.Forms.TabPage(); - this.pfcBackScaleMid = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcBackScaleTop = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcBackScaleBottom = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcBackOffsetBottom = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcBackOffsetMid = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.pfcBackOffsetTop = new CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl(); - this.tabBackFlags = new System.Windows.Forms.TabPage(); - this.flagsBack = new CodeImp.DoomBuilder.Controls.CheckboxArrayControl(); this.tabcustom = new System.Windows.Forms.TabPage(); this.fieldslist = new CodeImp.DoomBuilder.Controls.FieldsEditorControl(); + this.imagelist = new System.Windows.Forms.ImageList(this.components); this.tooltip = new System.Windows.Forms.ToolTip(this.components); label2 = new System.Windows.Forms.Label(); - label3 = new System.Windows.Forms.Label(); - label4 = new System.Windows.Forms.Label(); - label5 = new System.Windows.Forms.Label(); - label8 = new System.Windows.Forms.Label(); - label9 = new System.Windows.Forms.Label(); - label10 = new System.Windows.Forms.Label(); label11 = new System.Windows.Forms.Label(); label12 = new System.Windows.Forms.Label(); label7 = new System.Windows.Forms.Label(); @@ -141,18 +133,18 @@ namespace CodeImp.DoomBuilder.Windows this.activationGroup.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.missingactivation)).BeginInit(); this.idgroup.SuspendLayout(); - this.tabsidedefs.SuspendLayout(); - this.splitter.Panel1.SuspendLayout(); - this.splitter.Panel2.SuspendLayout(); - this.splitter.SuspendLayout(); + this.tabfront.SuspendLayout(); this.frontgroup.SuspendLayout(); - this.udmfPropertiesFront.SuspendLayout(); - this.tabFrontOffsets.SuspendLayout(); - this.tabFrontFlags.SuspendLayout(); + this.frontflagsgroup.SuspendLayout(); + this.frontscalegroup.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.tabback.SuspendLayout(); this.backgroup.SuspendLayout(); - this.udmfPropertiesBack.SuspendLayout(); - this.tabBackOffsets.SuspendLayout(); - this.tabBackFlags.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.backflagsgroup.SuspendLayout(); + this.backscalegroup.SuspendLayout(); + this.groupBox1.SuspendLayout(); this.tabcustom.SuspendLayout(); this.SuspendLayout(); // @@ -165,63 +157,9 @@ namespace CodeImp.DoomBuilder.Windows label2.TabIndex = 9; label2.Text = "Action:"; // - // label3 - // - label3.Location = new System.Drawing.Point(252, 18); - label3.Name = "label3"; - label3.Size = new System.Drawing.Size(83, 16); - label3.TabIndex = 3; - label3.Text = "Upper"; - label3.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // label4 - // - label4.Location = new System.Drawing.Point(343, 18); - label4.Name = "label4"; - label4.Size = new System.Drawing.Size(83, 16); - label4.TabIndex = 4; - label4.Text = "Middle"; - label4.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // label5 - // - label5.Location = new System.Drawing.Point(434, 18); - label5.Name = "label5"; - label5.Size = new System.Drawing.Size(83, 16); - label5.TabIndex = 5; - label5.Text = "Lower"; - label5.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // label8 - // - label8.Location = new System.Drawing.Point(437, 18); - label8.Name = "label8"; - label8.Size = new System.Drawing.Size(83, 16); - label8.TabIndex = 5; - label8.Text = "Lower"; - label8.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // label9 - // - label9.Location = new System.Drawing.Point(346, 18); - label9.Name = "label9"; - label9.Size = new System.Drawing.Size(83, 16); - label9.TabIndex = 4; - label9.Text = "Middle"; - label9.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // label10 - // - label10.Location = new System.Drawing.Point(255, 18); - label10.Name = "label10"; - label10.Size = new System.Drawing.Size(83, 16); - label10.TabIndex = 3; - label10.Text = "Upper"; - label10.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // // label11 // - label11.Location = new System.Drawing.Point(8, 42); + label11.Location = new System.Drawing.Point(14, 26); label11.Name = "label11"; label11.Size = new System.Drawing.Size(80, 14); label11.TabIndex = 13; @@ -230,7 +168,7 @@ namespace CodeImp.DoomBuilder.Windows // // label12 // - label12.Location = new System.Drawing.Point(8, 42); + label12.Location = new System.Drawing.Point(14, 26); label12.Name = "label12"; label12.Size = new System.Drawing.Size(80, 14); label12.TabIndex = 16; @@ -266,7 +204,7 @@ namespace CodeImp.DoomBuilder.Windows // // labelLightFront // - this.labelLightFront.Location = new System.Drawing.Point(8, 101); + this.labelLightFront.Location = new System.Drawing.Point(14, 54); this.labelLightFront.Name = "labelLightFront"; this.labelLightFront.Size = new System.Drawing.Size(80, 14); this.labelLightFront.TabIndex = 25; @@ -338,7 +276,7 @@ namespace CodeImp.DoomBuilder.Windows this.scriptNumbers.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; this.scriptNumbers.BackColor = System.Drawing.Color.LemonChiffon; this.scriptNumbers.FormattingEnabled = true; - this.scriptNumbers.Location = new System.Drawing.Point(407, 55); + this.scriptNumbers.Location = new System.Drawing.Point(407, 57); this.scriptNumbers.Name = "scriptNumbers"; this.scriptNumbers.Size = new System.Drawing.Size(120, 22); this.scriptNumbers.TabIndex = 39; @@ -349,7 +287,7 @@ namespace CodeImp.DoomBuilder.Windows this.scriptNames.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; this.scriptNames.BackColor = System.Drawing.Color.Honeydew; this.scriptNames.FormattingEnabled = true; - this.scriptNames.Location = new System.Drawing.Point(283, 55); + this.scriptNames.Location = new System.Drawing.Point(283, 57); this.scriptNames.Name = "scriptNames"; this.scriptNames.Size = new System.Drawing.Size(120, 22); this.scriptNames.TabIndex = 38; @@ -357,7 +295,7 @@ namespace CodeImp.DoomBuilder.Windows // arg2 // this.arg2.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.arg2.Location = new System.Drawing.Point(153, 55); + this.arg2.Location = new System.Drawing.Point(153, 57); this.arg2.Name = "arg2"; this.arg2.Size = new System.Drawing.Size(120, 24); this.arg2.TabIndex = 2; @@ -365,7 +303,7 @@ namespace CodeImp.DoomBuilder.Windows // arg1 // this.arg1.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.arg1.Location = new System.Drawing.Point(153, 29); + this.arg1.Location = new System.Drawing.Point(153, 30); this.arg1.Name = "arg1"; this.arg1.Size = new System.Drawing.Size(120, 24); this.arg1.TabIndex = 1; @@ -389,14 +327,14 @@ namespace CodeImp.DoomBuilder.Windows // arg4 // this.arg4.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.arg4.Location = new System.Drawing.Point(398, 29); + this.arg4.Location = new System.Drawing.Point(398, 30); this.arg4.Name = "arg4"; this.arg4.Size = new System.Drawing.Size(120, 24); this.arg4.TabIndex = 4; // // arg1label // - this.arg1label.Location = new System.Drawing.Point(-32, 34); + this.arg1label.Location = new System.Drawing.Point(-32, 35); this.arg1label.Name = "arg1label"; this.arg1label.Size = new System.Drawing.Size(179, 14); this.arg1label.TabIndex = 33; @@ -416,7 +354,7 @@ namespace CodeImp.DoomBuilder.Windows // // arg2label // - this.arg2label.Location = new System.Drawing.Point(-32, 60); + this.arg2label.Location = new System.Drawing.Point(-32, 62); this.arg2label.Name = "arg2label"; this.arg2label.Size = new System.Drawing.Size(179, 14); this.arg2label.TabIndex = 35; @@ -426,7 +364,7 @@ namespace CodeImp.DoomBuilder.Windows // // arg4label // - this.arg4label.Location = new System.Drawing.Point(213, 34); + this.arg4label.Location = new System.Drawing.Point(213, 35); this.arg4label.Name = "arg4label"; this.arg4label.Size = new System.Drawing.Size(179, 14); this.arg4label.TabIndex = 34; @@ -525,9 +463,11 @@ namespace CodeImp.DoomBuilder.Windows | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tabs.Controls.Add(this.tabproperties); - this.tabs.Controls.Add(this.tabsidedefs); + this.tabs.Controls.Add(this.tabfront); + this.tabs.Controls.Add(this.tabback); this.tabs.Controls.Add(this.tabcustom); this.tabs.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.tabs.ImageList = this.imagelist; this.tabs.Location = new System.Drawing.Point(10, 10); this.tabs.Margin = new System.Windows.Forms.Padding(1); this.tabs.Name = "tabs"; @@ -644,43 +584,25 @@ namespace CodeImp.DoomBuilder.Windows this.tagSelector.Size = new System.Drawing.Size(444, 35); this.tagSelector.TabIndex = 0; // - // tabsidedefs + // tabfront // - this.tabsidedefs.Controls.Add(this.splitter); - this.tabsidedefs.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.tabsidedefs.Location = new System.Drawing.Point(4, 23); - this.tabsidedefs.Name = "tabsidedefs"; - this.tabsidedefs.Padding = new System.Windows.Forms.Padding(5); - this.tabsidedefs.Size = new System.Drawing.Size(549, 621); - this.tabsidedefs.TabIndex = 1; - this.tabsidedefs.Text = " Sidedefs "; - this.tabsidedefs.UseVisualStyleBackColor = true; - // - // splitter - // - this.splitter.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitter.IsSplitterFixed = true; - this.splitter.Location = new System.Drawing.Point(5, 5); - this.splitter.Name = "splitter"; - this.splitter.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitter.Panel1 - // - this.splitter.Panel1.Controls.Add(this.frontside); - this.splitter.Panel1.Controls.Add(this.frontgroup); - // - // splitter.Panel2 - // - this.splitter.Panel2.Controls.Add(this.backside); - this.splitter.Panel2.Controls.Add(this.backgroup); - this.splitter.Size = new System.Drawing.Size(539, 611); - this.splitter.SplitterDistance = 302; - this.splitter.TabIndex = 3; + this.tabfront.Controls.Add(this.frontside); + this.tabfront.Controls.Add(this.frontgroup); + this.tabfront.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.tabfront.ForeColor = System.Drawing.SystemColors.ControlText; + this.tabfront.ImageIndex = 0; + this.tabfront.Location = new System.Drawing.Point(4, 23); + this.tabfront.Name = "tabfront"; + this.tabfront.Padding = new System.Windows.Forms.Padding(5); + this.tabfront.Size = new System.Drawing.Size(549, 621); + this.tabfront.TabIndex = 1; + this.tabfront.Text = " Front "; + this.tabfront.UseVisualStyleBackColor = true; // // frontside // this.frontside.AutoSize = true; - this.frontside.Location = new System.Drawing.Point(15, 1); + this.frontside.Location = new System.Drawing.Point(20, 6); this.frontside.Name = "frontside"; this.frontside.Size = new System.Drawing.Size(75, 18); this.frontside.TabIndex = 0; @@ -693,151 +615,74 @@ namespace CodeImp.DoomBuilder.Windows this.frontgroup.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.frontgroup.Controls.Add(this.frontTextureOffset); - this.frontgroup.Controls.Add(this.cbLightAbsoluteFront); - this.frontgroup.Controls.Add(this.labelLightFront); - this.frontgroup.Controls.Add(this.lightFront); - this.frontgroup.Controls.Add(this.frontsector); - this.frontgroup.Controls.Add(this.customfrontbutton); - this.frontgroup.Controls.Add(label11); + this.frontgroup.Controls.Add(this.frontflagsgroup); + this.frontgroup.Controls.Add(this.frontscalegroup); + this.frontgroup.Controls.Add(this.groupBox6); + this.frontgroup.Controls.Add(this.groupBox5); this.frontgroup.Controls.Add(this.frontlow); this.frontgroup.Controls.Add(this.frontmid); this.frontgroup.Controls.Add(this.fronthigh); - this.frontgroup.Controls.Add(this.udmfPropertiesFront); - this.frontgroup.Controls.Add(label5); - this.frontgroup.Controls.Add(label4); - this.frontgroup.Controls.Add(label3); this.frontgroup.Enabled = false; - this.frontgroup.Location = new System.Drawing.Point(3, 3); + this.frontgroup.Location = new System.Drawing.Point(8, 8); this.frontgroup.Name = "frontgroup"; - this.frontgroup.Size = new System.Drawing.Size(535, 296); + this.frontgroup.Size = new System.Drawing.Size(535, 605); this.frontgroup.TabIndex = 1; this.frontgroup.TabStop = false; this.frontgroup.Text = " "; // - // frontTextureOffset + // frontflagsgroup // - this.frontTextureOffset.ButtonStep = 16; - this.frontTextureOffset.DefaultValue = 0; - this.frontTextureOffset.Label = "Texture Offset:"; - this.frontTextureOffset.Location = new System.Drawing.Point(3, 65); - this.frontTextureOffset.Name = "frontTextureOffset"; - this.frontTextureOffset.Size = new System.Drawing.Size(247, 26); - this.frontTextureOffset.TabIndex = 41; - this.frontTextureOffset.OnValuesChanged += new System.EventHandler(this.frontTextureOffset_OnValuesChanged); + this.frontflagsgroup.Controls.Add(this.flagsFront); + this.frontflagsgroup.Location = new System.Drawing.Point(12, 409); + this.frontflagsgroup.Name = "frontflagsgroup"; + this.frontflagsgroup.Size = new System.Drawing.Size(290, 190); + this.frontflagsgroup.TabIndex = 45; + this.frontflagsgroup.TabStop = false; + this.frontflagsgroup.Text = " Flags: "; // - // cbLightAbsoluteFront + // flagsFront // - this.cbLightAbsoluteFront.AutoSize = true; - this.cbLightAbsoluteFront.Location = new System.Drawing.Point(158, 100); - this.cbLightAbsoluteFront.Name = "cbLightAbsoluteFront"; - this.cbLightAbsoluteFront.Size = new System.Drawing.Size(69, 18); - this.cbLightAbsoluteFront.TabIndex = 27; - this.cbLightAbsoluteFront.Tag = "lightabsolute"; - this.cbLightAbsoluteFront.Text = "Absolute"; - this.cbLightAbsoluteFront.UseVisualStyleBackColor = true; - this.cbLightAbsoluteFront.CheckedChanged += new System.EventHandler(this.cbLightAbsoluteFront_CheckedChanged); + this.flagsFront.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.flagsFront.AutoScroll = true; + this.flagsFront.Columns = 2; + this.flagsFront.Location = new System.Drawing.Point(16, 16); + this.flagsFront.Name = "flagsFront"; + this.flagsFront.Size = new System.Drawing.Size(269, 168); + this.flagsFront.TabIndex = 0; + this.flagsFront.VerticalSpacing = 3; + this.flagsFront.OnValueChanged += new System.EventHandler(this.flagsFront_OnValueChanged); // - // lightFront + // frontscalegroup // - this.lightFront.AllowDecimal = false; - this.lightFront.AllowNegative = true; - this.lightFront.AllowRelative = true; - this.lightFront.ButtonStep = 16; - this.lightFront.ButtonStepFloat = 1F; - this.lightFront.ButtonStepsWrapAround = false; - this.lightFront.Location = new System.Drawing.Point(90, 96); - this.lightFront.Name = "lightFront"; - this.lightFront.Size = new System.Drawing.Size(62, 24); - this.lightFront.StepValues = null; - this.lightFront.TabIndex = 26; - this.lightFront.Tag = ""; - this.lightFront.WhenTextChanged += new System.EventHandler(this.lightFront_WhenTextChanged); + this.frontscalegroup.Controls.Add(this.pfcFrontScaleTop); + this.frontscalegroup.Controls.Add(this.pfcFrontScaleBottom); + this.frontscalegroup.Controls.Add(this.pfcFrontScaleMid); + this.frontscalegroup.Location = new System.Drawing.Point(12, 291); + this.frontscalegroup.Name = "frontscalegroup"; + this.frontscalegroup.Size = new System.Drawing.Size(290, 112); + this.frontscalegroup.TabIndex = 44; + this.frontscalegroup.TabStop = false; + this.frontscalegroup.Text = " Texture Scale: "; // - // frontsector + // pfcFrontScaleTop // - this.frontsector.AllowDecimal = false; - this.frontsector.AllowNegative = false; - this.frontsector.AllowRelative = false; - this.frontsector.ButtonStep = 1; - this.frontsector.ButtonStepFloat = 1F; - this.frontsector.ButtonStepsWrapAround = false; - this.frontsector.Location = new System.Drawing.Point(90, 35); - this.frontsector.Name = "frontsector"; - this.frontsector.Size = new System.Drawing.Size(130, 24); - this.frontsector.StepValues = null; - this.frontsector.TabIndex = 14; - // - // customfrontbutton - // - this.customfrontbutton.Location = new System.Drawing.Point(90, 126); - this.customfrontbutton.Name = "customfrontbutton"; - this.customfrontbutton.Size = new System.Drawing.Size(130, 25); - this.customfrontbutton.TabIndex = 3; - this.customfrontbutton.Text = "Custom fields..."; - this.customfrontbutton.UseVisualStyleBackColor = true; - this.customfrontbutton.Click += new System.EventHandler(this.customfrontbutton_Click); - // - // frontlow - // - this.frontlow.Location = new System.Drawing.Point(434, 37); - this.frontlow.MultipleTextures = false; - this.frontlow.Name = "frontlow"; - this.frontlow.Required = false; - this.frontlow.Size = new System.Drawing.Size(83, 112); - this.frontlow.TabIndex = 6; - this.frontlow.TextureName = ""; - this.frontlow.OnValueChanged += new System.EventHandler(this.frontlow_OnValueChanged); - // - // frontmid - // - this.frontmid.Location = new System.Drawing.Point(343, 37); - this.frontmid.MultipleTextures = false; - this.frontmid.Name = "frontmid"; - this.frontmid.Required = false; - this.frontmid.Size = new System.Drawing.Size(83, 112); - this.frontmid.TabIndex = 5; - this.frontmid.TextureName = ""; - this.frontmid.OnValueChanged += new System.EventHandler(this.frontmid_OnValueChanged); - // - // fronthigh - // - this.fronthigh.Location = new System.Drawing.Point(252, 37); - this.fronthigh.MultipleTextures = false; - this.fronthigh.Name = "fronthigh"; - this.fronthigh.Required = false; - this.fronthigh.Size = new System.Drawing.Size(83, 112); - this.fronthigh.TabIndex = 4; - this.fronthigh.TextureName = ""; - this.fronthigh.OnValueChanged += new System.EventHandler(this.fronthigh_OnValueChanged); - // - // udmfPropertiesFront - // - this.udmfPropertiesFront.Controls.Add(this.tabFrontOffsets); - this.udmfPropertiesFront.Controls.Add(this.tabFrontFlags); - this.udmfPropertiesFront.ItemSize = new System.Drawing.Size(100, 19); - this.udmfPropertiesFront.Location = new System.Drawing.Point(6, 169); - this.udmfPropertiesFront.Margin = new System.Windows.Forms.Padding(1); - this.udmfPropertiesFront.Name = "udmfPropertiesFront"; - this.udmfPropertiesFront.SelectedIndex = 0; - this.udmfPropertiesFront.Size = new System.Drawing.Size(525, 123); - this.udmfPropertiesFront.TabIndex = 24; - // - // tabFrontOffsets - // - this.tabFrontOffsets.Controls.Add(this.pfcFrontScaleBottom); - this.tabFrontOffsets.Controls.Add(this.pfcFrontScaleMid); - this.tabFrontOffsets.Controls.Add(this.pfcFrontScaleTop); - this.tabFrontOffsets.Controls.Add(this.pfcFrontOffsetBottom); - this.tabFrontOffsets.Controls.Add(this.pfcFrontOffsetMid); - this.tabFrontOffsets.Controls.Add(this.pfcFrontOffsetTop); - this.tabFrontOffsets.Location = new System.Drawing.Point(4, 23); - this.tabFrontOffsets.Name = "tabFrontOffsets"; - this.tabFrontOffsets.Padding = new System.Windows.Forms.Padding(3); - this.tabFrontOffsets.Size = new System.Drawing.Size(517, 96); - this.tabFrontOffsets.TabIndex = 0; - this.tabFrontOffsets.Text = " Offsets & Scale "; - this.tabFrontOffsets.UseVisualStyleBackColor = true; + this.pfcFrontScaleTop.AllowDecimal = true; + this.pfcFrontScaleTop.AllowValueLinking = true; + this.pfcFrontScaleTop.ButtonStep = 1; + this.pfcFrontScaleTop.ButtonStepFloat = 0.1F; + this.pfcFrontScaleTop.DefaultValue = 1F; + this.pfcFrontScaleTop.Field1 = "scalex_top"; + this.pfcFrontScaleTop.Field2 = "scaley_top"; + this.pfcFrontScaleTop.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.pfcFrontScaleTop.Label = "Upper Scale:"; + this.pfcFrontScaleTop.LinkValues = false; + this.pfcFrontScaleTop.Location = new System.Drawing.Point(6, 19); + this.pfcFrontScaleTop.Name = "pfcFrontScaleTop"; + this.pfcFrontScaleTop.Size = new System.Drawing.Size(270, 30); + this.pfcFrontScaleTop.TabIndex = 38; + this.pfcFrontScaleTop.OnValuesChanged += new System.EventHandler(this.pfcFrontScaleTop_OnValuesChanged); // // pfcFrontScaleBottom // @@ -851,7 +696,7 @@ namespace CodeImp.DoomBuilder.Windows this.pfcFrontScaleBottom.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.pfcFrontScaleBottom.Label = "Lower Scale:"; this.pfcFrontScaleBottom.LinkValues = false; - this.pfcFrontScaleBottom.Location = new System.Drawing.Point(245, 65); + this.pfcFrontScaleBottom.Location = new System.Drawing.Point(6, 78); this.pfcFrontScaleBottom.Name = "pfcFrontScaleBottom"; this.pfcFrontScaleBottom.Size = new System.Drawing.Size(270, 32); this.pfcFrontScaleBottom.TabIndex = 40; @@ -869,65 +714,35 @@ namespace CodeImp.DoomBuilder.Windows this.pfcFrontScaleMid.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.pfcFrontScaleMid.Label = "Middle Scale:"; this.pfcFrontScaleMid.LinkValues = false; - this.pfcFrontScaleMid.Location = new System.Drawing.Point(245, 36); + this.pfcFrontScaleMid.Location = new System.Drawing.Point(6, 49); this.pfcFrontScaleMid.Name = "pfcFrontScaleMid"; this.pfcFrontScaleMid.Size = new System.Drawing.Size(270, 32); this.pfcFrontScaleMid.TabIndex = 39; this.pfcFrontScaleMid.OnValuesChanged += new System.EventHandler(this.pfcFrontScaleMid_OnValuesChanged); // - // pfcFrontScaleTop + // groupBox6 // - this.pfcFrontScaleTop.AllowDecimal = true; - this.pfcFrontScaleTop.AllowValueLinking = true; - this.pfcFrontScaleTop.ButtonStep = 1; - this.pfcFrontScaleTop.ButtonStepFloat = 0.1F; - this.pfcFrontScaleTop.DefaultValue = 1F; - this.pfcFrontScaleTop.Field1 = "scalex_top"; - this.pfcFrontScaleTop.Field2 = "scaley_top"; - this.pfcFrontScaleTop.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.pfcFrontScaleTop.Label = "Upper Scale:"; - this.pfcFrontScaleTop.LinkValues = false; - this.pfcFrontScaleTop.Location = new System.Drawing.Point(245, 6); - this.pfcFrontScaleTop.Name = "pfcFrontScaleTop"; - this.pfcFrontScaleTop.Size = new System.Drawing.Size(270, 30); - this.pfcFrontScaleTop.TabIndex = 38; - this.pfcFrontScaleTop.OnValuesChanged += new System.EventHandler(this.pfcFrontScaleTop_OnValuesChanged); + this.groupBox6.Controls.Add(this.frontTextureOffset); + this.groupBox6.Controls.Add(this.pfcFrontOffsetTop); + this.groupBox6.Controls.Add(this.pfcFrontOffsetMid); + this.groupBox6.Controls.Add(this.pfcFrontOffsetBottom); + this.groupBox6.Location = new System.Drawing.Point(12, 142); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(290, 143); + this.groupBox6.TabIndex = 43; + this.groupBox6.TabStop = false; + this.groupBox6.Text = " Texture Offsets: "; // - // pfcFrontOffsetBottom + // frontTextureOffset // - this.pfcFrontOffsetBottom.AllowDecimal = true; - this.pfcFrontOffsetBottom.AllowValueLinking = false; - this.pfcFrontOffsetBottom.ButtonStep = 1; - this.pfcFrontOffsetBottom.ButtonStepFloat = 16F; - this.pfcFrontOffsetBottom.DefaultValue = 0F; - this.pfcFrontOffsetBottom.Field1 = "offsetx_bottom"; - this.pfcFrontOffsetBottom.Field2 = "offsety_bottom"; - this.pfcFrontOffsetBottom.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.pfcFrontOffsetBottom.Label = "Lower Offset:"; - this.pfcFrontOffsetBottom.LinkValues = false; - this.pfcFrontOffsetBottom.Location = new System.Drawing.Point(-5, 65); - this.pfcFrontOffsetBottom.Name = "pfcFrontOffsetBottom"; - this.pfcFrontOffsetBottom.Size = new System.Drawing.Size(270, 30); - this.pfcFrontOffsetBottom.TabIndex = 37; - this.pfcFrontOffsetBottom.OnValuesChanged += new System.EventHandler(this.pfcFrontOffsetBottom_OnValuesChanged); - // - // pfcFrontOffsetMid - // - this.pfcFrontOffsetMid.AllowDecimal = true; - this.pfcFrontOffsetMid.AllowValueLinking = false; - this.pfcFrontOffsetMid.ButtonStep = 1; - this.pfcFrontOffsetMid.ButtonStepFloat = 16F; - this.pfcFrontOffsetMid.DefaultValue = 0F; - this.pfcFrontOffsetMid.Field1 = "offsetx_mid"; - this.pfcFrontOffsetMid.Field2 = "offsety_mid"; - this.pfcFrontOffsetMid.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.pfcFrontOffsetMid.Label = "Middle Offset:"; - this.pfcFrontOffsetMid.LinkValues = false; - this.pfcFrontOffsetMid.Location = new System.Drawing.Point(-5, 36); - this.pfcFrontOffsetMid.Name = "pfcFrontOffsetMid"; - this.pfcFrontOffsetMid.Size = new System.Drawing.Size(270, 30); - this.pfcFrontOffsetMid.TabIndex = 36; - this.pfcFrontOffsetMid.OnValuesChanged += new System.EventHandler(this.pfcFrontOffsetMid_OnValuesChanged); + this.frontTextureOffset.ButtonStep = 16; + this.frontTextureOffset.DefaultValue = 0; + this.frontTextureOffset.Label = "Sidedef Offset:"; + this.frontTextureOffset.Location = new System.Drawing.Point(6, 19); + this.frontTextureOffset.Name = "frontTextureOffset"; + this.frontTextureOffset.Size = new System.Drawing.Size(270, 26); + this.frontTextureOffset.TabIndex = 41; + this.frontTextureOffset.OnValuesChanged += new System.EventHandler(this.frontTextureOffset_OnValuesChanged); // // pfcFrontOffsetTop // @@ -941,38 +756,168 @@ namespace CodeImp.DoomBuilder.Windows this.pfcFrontOffsetTop.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.pfcFrontOffsetTop.Label = "Upper Offset:"; this.pfcFrontOffsetTop.LinkValues = false; - this.pfcFrontOffsetTop.Location = new System.Drawing.Point(-5, 6); + this.pfcFrontOffsetTop.Location = new System.Drawing.Point(6, 48); this.pfcFrontOffsetTop.Name = "pfcFrontOffsetTop"; this.pfcFrontOffsetTop.Size = new System.Drawing.Size(270, 28); this.pfcFrontOffsetTop.TabIndex = 35; this.pfcFrontOffsetTop.OnValuesChanged += new System.EventHandler(this.pfcFrontOffsetTop_OnValuesChanged); // - // tabFrontFlags + // pfcFrontOffsetMid // - this.tabFrontFlags.Controls.Add(this.flagsFront); - this.tabFrontFlags.Location = new System.Drawing.Point(4, 23); - this.tabFrontFlags.Name = "tabFrontFlags"; - this.tabFrontFlags.Padding = new System.Windows.Forms.Padding(3); - this.tabFrontFlags.Size = new System.Drawing.Size(517, 96); - this.tabFrontFlags.TabIndex = 1; - this.tabFrontFlags.Text = " Flags "; - this.tabFrontFlags.UseVisualStyleBackColor = true; + this.pfcFrontOffsetMid.AllowDecimal = true; + this.pfcFrontOffsetMid.AllowValueLinking = false; + this.pfcFrontOffsetMid.ButtonStep = 1; + this.pfcFrontOffsetMid.ButtonStepFloat = 16F; + this.pfcFrontOffsetMid.DefaultValue = 0F; + this.pfcFrontOffsetMid.Field1 = "offsetx_mid"; + this.pfcFrontOffsetMid.Field2 = "offsety_mid"; + this.pfcFrontOffsetMid.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.pfcFrontOffsetMid.Label = "Middle Offset:"; + this.pfcFrontOffsetMid.LinkValues = false; + this.pfcFrontOffsetMid.Location = new System.Drawing.Point(6, 77); + this.pfcFrontOffsetMid.Name = "pfcFrontOffsetMid"; + this.pfcFrontOffsetMid.Size = new System.Drawing.Size(270, 30); + this.pfcFrontOffsetMid.TabIndex = 36; + this.pfcFrontOffsetMid.OnValuesChanged += new System.EventHandler(this.pfcFrontOffsetMid_OnValuesChanged); // - // flagsFront + // pfcFrontOffsetBottom // - this.flagsFront.AutoScroll = true; - this.flagsFront.Columns = 2; - this.flagsFront.Location = new System.Drawing.Point(15, 6); - this.flagsFront.Name = "flagsFront"; - this.flagsFront.Size = new System.Drawing.Size(496, 84); - this.flagsFront.TabIndex = 0; - this.flagsFront.VerticalSpacing = 3; - this.flagsFront.OnValueChanged += new System.EventHandler(this.flagsFront_OnValueChanged); + this.pfcFrontOffsetBottom.AllowDecimal = true; + this.pfcFrontOffsetBottom.AllowValueLinking = false; + this.pfcFrontOffsetBottom.ButtonStep = 1; + this.pfcFrontOffsetBottom.ButtonStepFloat = 16F; + this.pfcFrontOffsetBottom.DefaultValue = 0F; + this.pfcFrontOffsetBottom.Field1 = "offsetx_bottom"; + this.pfcFrontOffsetBottom.Field2 = "offsety_bottom"; + this.pfcFrontOffsetBottom.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.pfcFrontOffsetBottom.Label = "Lower Offset:"; + this.pfcFrontOffsetBottom.LinkValues = false; + this.pfcFrontOffsetBottom.Location = new System.Drawing.Point(6, 107); + this.pfcFrontOffsetBottom.Name = "pfcFrontOffsetBottom"; + this.pfcFrontOffsetBottom.Size = new System.Drawing.Size(270, 30); + this.pfcFrontOffsetBottom.TabIndex = 37; + this.pfcFrontOffsetBottom.OnValuesChanged += new System.EventHandler(this.pfcFrontOffsetBottom_OnValuesChanged); + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.frontsector); + this.groupBox5.Controls.Add(label11); + this.groupBox5.Controls.Add(this.customfrontbutton); + this.groupBox5.Controls.Add(this.lightFront); + this.groupBox5.Controls.Add(this.labelLightFront); + this.groupBox5.Controls.Add(this.cbLightAbsoluteFront); + this.groupBox5.Location = new System.Drawing.Point(12, 19); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(290, 117); + this.groupBox5.TabIndex = 42; + this.groupBox5.TabStop = false; + // + // frontsector + // + this.frontsector.AllowDecimal = false; + this.frontsector.AllowNegative = false; + this.frontsector.AllowRelative = false; + this.frontsector.ButtonStep = 1; + this.frontsector.ButtonStepFloat = 1F; + this.frontsector.ButtonStepsWrapAround = false; + this.frontsector.Location = new System.Drawing.Point(96, 19); + this.frontsector.Name = "frontsector"; + this.frontsector.Size = new System.Drawing.Size(130, 24); + this.frontsector.StepValues = null; + this.frontsector.TabIndex = 14; + // + // customfrontbutton + // + this.customfrontbutton.Location = new System.Drawing.Point(96, 79); + this.customfrontbutton.Name = "customfrontbutton"; + this.customfrontbutton.Size = new System.Drawing.Size(130, 25); + this.customfrontbutton.TabIndex = 3; + this.customfrontbutton.Text = "Custom fields..."; + this.customfrontbutton.UseVisualStyleBackColor = true; + this.customfrontbutton.Click += new System.EventHandler(this.customfrontbutton_Click); + // + // lightFront + // + this.lightFront.AllowDecimal = false; + this.lightFront.AllowNegative = true; + this.lightFront.AllowRelative = true; + this.lightFront.ButtonStep = 16; + this.lightFront.ButtonStepFloat = 1F; + this.lightFront.ButtonStepsWrapAround = false; + this.lightFront.Location = new System.Drawing.Point(96, 49); + this.lightFront.Name = "lightFront"; + this.lightFront.Size = new System.Drawing.Size(62, 24); + this.lightFront.StepValues = null; + this.lightFront.TabIndex = 26; + this.lightFront.Tag = ""; + this.lightFront.WhenTextChanged += new System.EventHandler(this.lightFront_WhenTextChanged); + // + // cbLightAbsoluteFront + // + this.cbLightAbsoluteFront.AutoSize = true; + this.cbLightAbsoluteFront.Location = new System.Drawing.Point(164, 53); + this.cbLightAbsoluteFront.Name = "cbLightAbsoluteFront"; + this.cbLightAbsoluteFront.Size = new System.Drawing.Size(69, 18); + this.cbLightAbsoluteFront.TabIndex = 27; + this.cbLightAbsoluteFront.Tag = "lightabsolute"; + this.cbLightAbsoluteFront.Text = "Absolute"; + this.cbLightAbsoluteFront.UseVisualStyleBackColor = true; + this.cbLightAbsoluteFront.CheckedChanged += new System.EventHandler(this.cbLightAbsoluteFront_CheckedChanged); + // + // frontlow + // + this.frontlow.Location = new System.Drawing.Point(309, 415); + this.frontlow.MultipleTextures = false; + this.frontlow.Name = "frontlow"; + this.frontlow.Required = false; + this.frontlow.Size = new System.Drawing.Size(220, 184); + this.frontlow.TabIndex = 6; + this.frontlow.TextureName = ""; + this.frontlow.UsePreviews = false; + this.frontlow.OnValueChanged += new System.EventHandler(this.frontlow_OnValueChanged); + // + // frontmid + // + this.frontmid.Location = new System.Drawing.Point(309, 217); + this.frontmid.MultipleTextures = false; + this.frontmid.Name = "frontmid"; + this.frontmid.Required = false; + this.frontmid.Size = new System.Drawing.Size(220, 184); + this.frontmid.TabIndex = 5; + this.frontmid.TextureName = ""; + this.frontmid.UsePreviews = false; + this.frontmid.OnValueChanged += new System.EventHandler(this.frontmid_OnValueChanged); + // + // fronthigh + // + this.fronthigh.Location = new System.Drawing.Point(309, 19); + this.fronthigh.MultipleTextures = false; + this.fronthigh.Name = "fronthigh"; + this.fronthigh.Required = false; + this.fronthigh.Size = new System.Drawing.Size(220, 184); + this.fronthigh.TabIndex = 4; + this.fronthigh.TextureName = ""; + this.fronthigh.UsePreviews = false; + this.fronthigh.OnValueChanged += new System.EventHandler(this.fronthigh_OnValueChanged); + // + // tabback + // + this.tabback.Controls.Add(this.backside); + this.tabback.Controls.Add(this.backgroup); + this.tabback.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.tabback.ImageIndex = 1; + this.tabback.Location = new System.Drawing.Point(4, 23); + this.tabback.Name = "tabback"; + this.tabback.Padding = new System.Windows.Forms.Padding(5); + this.tabback.Size = new System.Drawing.Size(549, 621); + this.tabback.TabIndex = 3; + this.tabback.Text = " Back "; + this.tabback.UseVisualStyleBackColor = true; // // backside // this.backside.AutoSize = true; - this.backside.Location = new System.Drawing.Point(15, 1); + this.backside.Location = new System.Drawing.Point(20, 6); this.backside.Name = "backside"; this.backside.Size = new System.Drawing.Size(74, 18); this.backside.TabIndex = 0; @@ -985,76 +930,34 @@ namespace CodeImp.DoomBuilder.Windows this.backgroup.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.backgroup.Controls.Add(this.backTextureOffset); - this.backgroup.Controls.Add(this.cbLightAbsoluteBack); - this.backgroup.Controls.Add(this.labelLightBack); - this.backgroup.Controls.Add(this.lightBack); - this.backgroup.Controls.Add(this.backsector); - this.backgroup.Controls.Add(this.custombackbutton); - this.backgroup.Controls.Add(label12); + this.backgroup.Controls.Add(this.groupBox4); + this.backgroup.Controls.Add(this.backflagsgroup); + this.backgroup.Controls.Add(this.backscalegroup); + this.backgroup.Controls.Add(this.groupBox1); this.backgroup.Controls.Add(this.backlow); this.backgroup.Controls.Add(this.backmid); this.backgroup.Controls.Add(this.backhigh); - this.backgroup.Controls.Add(label8); - this.backgroup.Controls.Add(label9); - this.backgroup.Controls.Add(label10); - this.backgroup.Controls.Add(this.udmfPropertiesBack); this.backgroup.Enabled = false; - this.backgroup.Location = new System.Drawing.Point(3, 3); + this.backgroup.Location = new System.Drawing.Point(8, 8); this.backgroup.Name = "backgroup"; - this.backgroup.Size = new System.Drawing.Size(535, 299); + this.backgroup.Size = new System.Drawing.Size(535, 605); this.backgroup.TabIndex = 1; this.backgroup.TabStop = false; this.backgroup.Text = " "; // - // backTextureOffset + // groupBox4 // - this.backTextureOffset.ButtonStep = 16; - this.backTextureOffset.DefaultValue = 0; - this.backTextureOffset.Label = "Texture Offset:"; - this.backTextureOffset.Location = new System.Drawing.Point(3, 65); - this.backTextureOffset.Name = "backTextureOffset"; - this.backTextureOffset.Size = new System.Drawing.Size(247, 28); - this.backTextureOffset.TabIndex = 42; - this.backTextureOffset.OnValuesChanged += new System.EventHandler(this.backTextureOffset_OnValuesChanged); - // - // cbLightAbsoluteBack - // - this.cbLightAbsoluteBack.AutoSize = true; - this.cbLightAbsoluteBack.Location = new System.Drawing.Point(158, 100); - this.cbLightAbsoluteBack.Name = "cbLightAbsoluteBack"; - this.cbLightAbsoluteBack.Size = new System.Drawing.Size(69, 18); - this.cbLightAbsoluteBack.TabIndex = 30; - this.cbLightAbsoluteBack.Tag = "lightabsolute"; - this.cbLightAbsoluteBack.Text = "Absolute"; - this.cbLightAbsoluteBack.UseVisualStyleBackColor = true; - this.cbLightAbsoluteBack.CheckedChanged += new System.EventHandler(this.cbLightAbsoluteBack_CheckedChanged); - // - // labelLightBack - // - this.labelLightBack.Location = new System.Drawing.Point(8, 101); - this.labelLightBack.Name = "labelLightBack"; - this.labelLightBack.Size = new System.Drawing.Size(80, 14); - this.labelLightBack.TabIndex = 28; - this.labelLightBack.Tag = ""; - this.labelLightBack.Text = "Brightness:"; - this.labelLightBack.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // lightBack - // - this.lightBack.AllowDecimal = false; - this.lightBack.AllowNegative = true; - this.lightBack.AllowRelative = true; - this.lightBack.ButtonStep = 16; - this.lightBack.ButtonStepFloat = 1F; - this.lightBack.ButtonStepsWrapAround = false; - this.lightBack.Location = new System.Drawing.Point(90, 96); - this.lightBack.Name = "lightBack"; - this.lightBack.Size = new System.Drawing.Size(62, 24); - this.lightBack.StepValues = null; - this.lightBack.TabIndex = 29; - this.lightBack.Tag = "light"; - this.lightBack.WhenTextChanged += new System.EventHandler(this.lightBack_WhenTextChanged); + this.groupBox4.Controls.Add(this.backsector); + this.groupBox4.Controls.Add(label12); + this.groupBox4.Controls.Add(this.custombackbutton); + this.groupBox4.Controls.Add(this.lightBack); + this.groupBox4.Controls.Add(this.labelLightBack); + this.groupBox4.Controls.Add(this.cbLightAbsoluteBack); + this.groupBox4.Location = new System.Drawing.Point(12, 19); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(290, 117); + this.groupBox4.TabIndex = 46; + this.groupBox4.TabStop = false; // // backsector // @@ -1064,7 +967,7 @@ namespace CodeImp.DoomBuilder.Windows this.backsector.ButtonStep = 1; this.backsector.ButtonStepFloat = 1F; this.backsector.ButtonStepsWrapAround = false; - this.backsector.Location = new System.Drawing.Point(90, 35); + this.backsector.Location = new System.Drawing.Point(96, 19); this.backsector.Name = "backsector"; this.backsector.Size = new System.Drawing.Size(130, 24); this.backsector.StepValues = null; @@ -1072,7 +975,7 @@ namespace CodeImp.DoomBuilder.Windows // // custombackbutton // - this.custombackbutton.Location = new System.Drawing.Point(90, 126); + this.custombackbutton.Location = new System.Drawing.Point(96, 79); this.custombackbutton.Name = "custombackbutton"; this.custombackbutton.Size = new System.Drawing.Size(130, 25); this.custombackbutton.TabIndex = 3; @@ -1080,84 +983,79 @@ namespace CodeImp.DoomBuilder.Windows this.custombackbutton.UseVisualStyleBackColor = true; this.custombackbutton.Click += new System.EventHandler(this.custombackbutton_Click); // - // backlow + // lightBack // - this.backlow.Location = new System.Drawing.Point(437, 37); - this.backlow.MultipleTextures = false; - this.backlow.Name = "backlow"; - this.backlow.Required = false; - this.backlow.Size = new System.Drawing.Size(83, 112); - this.backlow.TabIndex = 6; - this.backlow.TextureName = ""; - this.backlow.OnValueChanged += new System.EventHandler(this.backlow_OnValueChanged); + this.lightBack.AllowDecimal = false; + this.lightBack.AllowNegative = true; + this.lightBack.AllowRelative = true; + this.lightBack.ButtonStep = 16; + this.lightBack.ButtonStepFloat = 1F; + this.lightBack.ButtonStepsWrapAround = false; + this.lightBack.Location = new System.Drawing.Point(96, 49); + this.lightBack.Name = "lightBack"; + this.lightBack.Size = new System.Drawing.Size(62, 24); + this.lightBack.StepValues = null; + this.lightBack.TabIndex = 29; + this.lightBack.Tag = "light"; + this.lightBack.WhenTextChanged += new System.EventHandler(this.lightBack_WhenTextChanged); // - // backmid + // labelLightBack // - this.backmid.Location = new System.Drawing.Point(346, 37); - this.backmid.MultipleTextures = false; - this.backmid.Name = "backmid"; - this.backmid.Required = false; - this.backmid.Size = new System.Drawing.Size(83, 112); - this.backmid.TabIndex = 5; - this.backmid.TextureName = ""; - this.backmid.OnValueChanged += new System.EventHandler(this.backmid_OnValueChanged); + this.labelLightBack.Location = new System.Drawing.Point(14, 54); + this.labelLightBack.Name = "labelLightBack"; + this.labelLightBack.Size = new System.Drawing.Size(80, 14); + this.labelLightBack.TabIndex = 28; + this.labelLightBack.Tag = ""; + this.labelLightBack.Text = "Brightness:"; + this.labelLightBack.TextAlign = System.Drawing.ContentAlignment.TopRight; // - // backhigh + // cbLightAbsoluteBack // - this.backhigh.Location = new System.Drawing.Point(255, 37); - this.backhigh.MultipleTextures = false; - this.backhigh.Name = "backhigh"; - this.backhigh.Required = false; - this.backhigh.Size = new System.Drawing.Size(83, 112); - this.backhigh.TabIndex = 4; - this.backhigh.TextureName = ""; - this.backhigh.OnValueChanged += new System.EventHandler(this.backhigh_OnValueChanged); + this.cbLightAbsoluteBack.AutoSize = true; + this.cbLightAbsoluteBack.Location = new System.Drawing.Point(164, 53); + this.cbLightAbsoluteBack.Name = "cbLightAbsoluteBack"; + this.cbLightAbsoluteBack.Size = new System.Drawing.Size(69, 18); + this.cbLightAbsoluteBack.TabIndex = 30; + this.cbLightAbsoluteBack.Tag = "lightabsolute"; + this.cbLightAbsoluteBack.Text = "Absolute"; + this.cbLightAbsoluteBack.UseVisualStyleBackColor = true; + this.cbLightAbsoluteBack.CheckedChanged += new System.EventHandler(this.cbLightAbsoluteBack_CheckedChanged); // - // udmfPropertiesBack + // backflagsgroup // - this.udmfPropertiesBack.Controls.Add(this.tabBackOffsets); - this.udmfPropertiesBack.Controls.Add(this.tabBackFlags); - this.udmfPropertiesBack.ItemSize = new System.Drawing.Size(100, 19); - this.udmfPropertiesBack.Location = new System.Drawing.Point(6, 172); - this.udmfPropertiesBack.Margin = new System.Windows.Forms.Padding(1); - this.udmfPropertiesBack.Name = "udmfPropertiesBack"; - this.udmfPropertiesBack.SelectedIndex = 0; - this.udmfPropertiesBack.Size = new System.Drawing.Size(525, 123); - this.udmfPropertiesBack.TabIndex = 25; + this.backflagsgroup.Controls.Add(this.flagsBack); + this.backflagsgroup.Location = new System.Drawing.Point(12, 409); + this.backflagsgroup.Name = "backflagsgroup"; + this.backflagsgroup.Size = new System.Drawing.Size(290, 190); + this.backflagsgroup.TabIndex = 45; + this.backflagsgroup.TabStop = false; + this.backflagsgroup.Text = " Flags "; // - // tabBackOffsets + // flagsBack // - this.tabBackOffsets.Controls.Add(this.pfcBackScaleMid); - this.tabBackOffsets.Controls.Add(this.pfcBackScaleTop); - this.tabBackOffsets.Controls.Add(this.pfcBackScaleBottom); - this.tabBackOffsets.Controls.Add(this.pfcBackOffsetBottom); - this.tabBackOffsets.Controls.Add(this.pfcBackOffsetMid); - this.tabBackOffsets.Controls.Add(this.pfcBackOffsetTop); - this.tabBackOffsets.Location = new System.Drawing.Point(4, 23); - this.tabBackOffsets.Name = "tabBackOffsets"; - this.tabBackOffsets.Padding = new System.Windows.Forms.Padding(3); - this.tabBackOffsets.Size = new System.Drawing.Size(517, 96); - this.tabBackOffsets.TabIndex = 0; - this.tabBackOffsets.Text = " Offsets & Scale "; - this.tabBackOffsets.UseVisualStyleBackColor = true; + this.flagsBack.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.flagsBack.AutoScroll = true; + this.flagsBack.Columns = 2; + this.flagsBack.Location = new System.Drawing.Point(16, 16); + this.flagsBack.Name = "flagsBack"; + this.flagsBack.Size = new System.Drawing.Size(269, 168); + this.flagsBack.TabIndex = 1; + this.flagsBack.VerticalSpacing = 3; + this.flagsBack.OnValueChanged += new System.EventHandler(this.flagsBack_OnValueChanged); // - // pfcBackScaleMid + // backscalegroup // - this.pfcBackScaleMid.AllowDecimal = true; - this.pfcBackScaleMid.AllowValueLinking = true; - this.pfcBackScaleMid.ButtonStep = 1; - this.pfcBackScaleMid.ButtonStepFloat = 0.1F; - this.pfcBackScaleMid.DefaultValue = 1F; - this.pfcBackScaleMid.Field1 = "scalex_mid"; - this.pfcBackScaleMid.Field2 = "scaley_mid"; - this.pfcBackScaleMid.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.pfcBackScaleMid.Label = "Middle Scale:"; - this.pfcBackScaleMid.LinkValues = false; - this.pfcBackScaleMid.Location = new System.Drawing.Point(245, 36); - this.pfcBackScaleMid.Name = "pfcBackScaleMid"; - this.pfcBackScaleMid.Size = new System.Drawing.Size(270, 32); - this.pfcBackScaleMid.TabIndex = 39; - this.pfcBackScaleMid.OnValuesChanged += new System.EventHandler(this.pfcBackScaleMid_OnValuesChanged); + this.backscalegroup.Controls.Add(this.pfcBackScaleTop); + this.backscalegroup.Controls.Add(this.pfcBackScaleBottom); + this.backscalegroup.Controls.Add(this.pfcBackScaleMid); + this.backscalegroup.Location = new System.Drawing.Point(12, 291); + this.backscalegroup.Name = "backscalegroup"; + this.backscalegroup.Size = new System.Drawing.Size(290, 112); + this.backscalegroup.TabIndex = 44; + this.backscalegroup.TabStop = false; + this.backscalegroup.Text = " Texture Scale"; // // pfcBackScaleTop // @@ -1171,7 +1069,7 @@ namespace CodeImp.DoomBuilder.Windows this.pfcBackScaleTop.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.pfcBackScaleTop.Label = "Upper Scale:"; this.pfcBackScaleTop.LinkValues = false; - this.pfcBackScaleTop.Location = new System.Drawing.Point(245, 6); + this.pfcBackScaleTop.Location = new System.Drawing.Point(6, 19); this.pfcBackScaleTop.Name = "pfcBackScaleTop"; this.pfcBackScaleTop.Size = new System.Drawing.Size(270, 30); this.pfcBackScaleTop.TabIndex = 38; @@ -1189,47 +1087,42 @@ namespace CodeImp.DoomBuilder.Windows this.pfcBackScaleBottom.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.pfcBackScaleBottom.Label = "Lower Scale:"; this.pfcBackScaleBottom.LinkValues = false; - this.pfcBackScaleBottom.Location = new System.Drawing.Point(245, 65); + this.pfcBackScaleBottom.Location = new System.Drawing.Point(6, 78); this.pfcBackScaleBottom.Name = "pfcBackScaleBottom"; this.pfcBackScaleBottom.Size = new System.Drawing.Size(270, 32); this.pfcBackScaleBottom.TabIndex = 40; this.pfcBackScaleBottom.OnValuesChanged += new System.EventHandler(this.pfcBackScaleBottom_OnValuesChanged); // - // pfcBackOffsetBottom + // pfcBackScaleMid // - this.pfcBackOffsetBottom.AllowDecimal = true; - this.pfcBackOffsetBottom.AllowValueLinking = false; - this.pfcBackOffsetBottom.ButtonStep = 1; - this.pfcBackOffsetBottom.ButtonStepFloat = 16F; - this.pfcBackOffsetBottom.DefaultValue = 0F; - this.pfcBackOffsetBottom.Field1 = "offsetx_bottom"; - this.pfcBackOffsetBottom.Field2 = "offsety_bottom"; - this.pfcBackOffsetBottom.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.pfcBackOffsetBottom.Label = "Lower Offset:"; - this.pfcBackOffsetBottom.LinkValues = false; - this.pfcBackOffsetBottom.Location = new System.Drawing.Point(-5, 65); - this.pfcBackOffsetBottom.Name = "pfcBackOffsetBottom"; - this.pfcBackOffsetBottom.Size = new System.Drawing.Size(270, 30); - this.pfcBackOffsetBottom.TabIndex = 37; - this.pfcBackOffsetBottom.OnValuesChanged += new System.EventHandler(this.pfcBackOffsetBottom_OnValuesChanged); + this.pfcBackScaleMid.AllowDecimal = true; + this.pfcBackScaleMid.AllowValueLinking = true; + this.pfcBackScaleMid.ButtonStep = 1; + this.pfcBackScaleMid.ButtonStepFloat = 0.1F; + this.pfcBackScaleMid.DefaultValue = 1F; + this.pfcBackScaleMid.Field1 = "scalex_mid"; + this.pfcBackScaleMid.Field2 = "scaley_mid"; + this.pfcBackScaleMid.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.pfcBackScaleMid.Label = "Middle Scale:"; + this.pfcBackScaleMid.LinkValues = false; + this.pfcBackScaleMid.Location = new System.Drawing.Point(6, 49); + this.pfcBackScaleMid.Name = "pfcBackScaleMid"; + this.pfcBackScaleMid.Size = new System.Drawing.Size(270, 32); + this.pfcBackScaleMid.TabIndex = 39; + this.pfcBackScaleMid.OnValuesChanged += new System.EventHandler(this.pfcBackScaleMid_OnValuesChanged); // - // pfcBackOffsetMid + // groupBox1 // - this.pfcBackOffsetMid.AllowDecimal = true; - this.pfcBackOffsetMid.AllowValueLinking = false; - this.pfcBackOffsetMid.ButtonStep = 1; - this.pfcBackOffsetMid.ButtonStepFloat = 16F; - this.pfcBackOffsetMid.DefaultValue = 0F; - this.pfcBackOffsetMid.Field1 = "offsetx_mid"; - this.pfcBackOffsetMid.Field2 = "offsety_mid"; - this.pfcBackOffsetMid.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.pfcBackOffsetMid.Label = "Middle Offset:"; - this.pfcBackOffsetMid.LinkValues = false; - this.pfcBackOffsetMid.Location = new System.Drawing.Point(-5, 36); - this.pfcBackOffsetMid.Name = "pfcBackOffsetMid"; - this.pfcBackOffsetMid.Size = new System.Drawing.Size(270, 30); - this.pfcBackOffsetMid.TabIndex = 36; - this.pfcBackOffsetMid.OnValuesChanged += new System.EventHandler(this.pfcBackOffsetMid_OnValuesChanged); + this.groupBox1.Controls.Add(this.pfcBackOffsetTop); + this.groupBox1.Controls.Add(this.pfcBackOffsetMid); + this.groupBox1.Controls.Add(this.pfcBackOffsetBottom); + this.groupBox1.Controls.Add(this.backTextureOffset); + this.groupBox1.Location = new System.Drawing.Point(12, 142); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(290, 143); + this.groupBox1.TabIndex = 43; + this.groupBox1.TabStop = false; + this.groupBox1.Text = " Texture Offsets "; // // pfcBackOffsetTop // @@ -1243,33 +1136,94 @@ namespace CodeImp.DoomBuilder.Windows this.pfcBackOffsetTop.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.pfcBackOffsetTop.Label = "Upper Offset:"; this.pfcBackOffsetTop.LinkValues = false; - this.pfcBackOffsetTop.Location = new System.Drawing.Point(-5, 6); + this.pfcBackOffsetTop.Location = new System.Drawing.Point(6, 48); this.pfcBackOffsetTop.Name = "pfcBackOffsetTop"; this.pfcBackOffsetTop.Size = new System.Drawing.Size(270, 28); this.pfcBackOffsetTop.TabIndex = 35; this.pfcBackOffsetTop.OnValuesChanged += new System.EventHandler(this.pfcBackOffsetTop_OnValuesChanged); // - // tabBackFlags + // pfcBackOffsetMid // - this.tabBackFlags.Controls.Add(this.flagsBack); - this.tabBackFlags.Location = new System.Drawing.Point(4, 23); - this.tabBackFlags.Name = "tabBackFlags"; - this.tabBackFlags.Padding = new System.Windows.Forms.Padding(3); - this.tabBackFlags.Size = new System.Drawing.Size(517, 96); - this.tabBackFlags.TabIndex = 1; - this.tabBackFlags.Text = " Flags "; - this.tabBackFlags.UseVisualStyleBackColor = true; + this.pfcBackOffsetMid.AllowDecimal = true; + this.pfcBackOffsetMid.AllowValueLinking = false; + this.pfcBackOffsetMid.ButtonStep = 1; + this.pfcBackOffsetMid.ButtonStepFloat = 16F; + this.pfcBackOffsetMid.DefaultValue = 0F; + this.pfcBackOffsetMid.Field1 = "offsetx_mid"; + this.pfcBackOffsetMid.Field2 = "offsety_mid"; + this.pfcBackOffsetMid.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.pfcBackOffsetMid.Label = "Middle Offset:"; + this.pfcBackOffsetMid.LinkValues = false; + this.pfcBackOffsetMid.Location = new System.Drawing.Point(6, 77); + this.pfcBackOffsetMid.Name = "pfcBackOffsetMid"; + this.pfcBackOffsetMid.Size = new System.Drawing.Size(270, 30); + this.pfcBackOffsetMid.TabIndex = 36; + this.pfcBackOffsetMid.OnValuesChanged += new System.EventHandler(this.pfcBackOffsetMid_OnValuesChanged); // - // flagsBack + // pfcBackOffsetBottom // - this.flagsBack.AutoScroll = true; - this.flagsBack.Columns = 2; - this.flagsBack.Location = new System.Drawing.Point(15, 6); - this.flagsBack.Name = "flagsBack"; - this.flagsBack.Size = new System.Drawing.Size(496, 84); - this.flagsBack.TabIndex = 1; - this.flagsBack.VerticalSpacing = 3; - this.flagsBack.OnValueChanged += new System.EventHandler(this.flagsBack_OnValueChanged); + this.pfcBackOffsetBottom.AllowDecimal = true; + this.pfcBackOffsetBottom.AllowValueLinking = false; + this.pfcBackOffsetBottom.ButtonStep = 1; + this.pfcBackOffsetBottom.ButtonStepFloat = 16F; + this.pfcBackOffsetBottom.DefaultValue = 0F; + this.pfcBackOffsetBottom.Field1 = "offsetx_bottom"; + this.pfcBackOffsetBottom.Field2 = "offsety_bottom"; + this.pfcBackOffsetBottom.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.pfcBackOffsetBottom.Label = "Lower Offset:"; + this.pfcBackOffsetBottom.LinkValues = false; + this.pfcBackOffsetBottom.Location = new System.Drawing.Point(6, 107); + this.pfcBackOffsetBottom.Name = "pfcBackOffsetBottom"; + this.pfcBackOffsetBottom.Size = new System.Drawing.Size(270, 30); + this.pfcBackOffsetBottom.TabIndex = 37; + this.pfcBackOffsetBottom.OnValuesChanged += new System.EventHandler(this.pfcBackOffsetBottom_OnValuesChanged); + // + // backTextureOffset + // + this.backTextureOffset.ButtonStep = 16; + this.backTextureOffset.DefaultValue = 0; + this.backTextureOffset.Label = "Sidedef Offset:"; + this.backTextureOffset.Location = new System.Drawing.Point(6, 19); + this.backTextureOffset.Name = "backTextureOffset"; + this.backTextureOffset.Size = new System.Drawing.Size(270, 28); + this.backTextureOffset.TabIndex = 42; + this.backTextureOffset.OnValuesChanged += new System.EventHandler(this.backTextureOffset_OnValuesChanged); + // + // backlow + // + this.backlow.Location = new System.Drawing.Point(309, 415); + this.backlow.MultipleTextures = false; + this.backlow.Name = "backlow"; + this.backlow.Required = false; + this.backlow.Size = new System.Drawing.Size(220, 184); + this.backlow.TabIndex = 6; + this.backlow.TextureName = ""; + this.backlow.UsePreviews = false; + this.backlow.OnValueChanged += new System.EventHandler(this.backlow_OnValueChanged); + // + // backmid + // + this.backmid.Location = new System.Drawing.Point(309, 217); + this.backmid.MultipleTextures = false; + this.backmid.Name = "backmid"; + this.backmid.Required = false; + this.backmid.Size = new System.Drawing.Size(220, 184); + this.backmid.TabIndex = 5; + this.backmid.TextureName = ""; + this.backmid.UsePreviews = false; + this.backmid.OnValueChanged += new System.EventHandler(this.backmid_OnValueChanged); + // + // backhigh + // + this.backhigh.Location = new System.Drawing.Point(309, 19); + this.backhigh.MultipleTextures = false; + this.backhigh.Name = "backhigh"; + this.backhigh.Required = false; + this.backhigh.Size = new System.Drawing.Size(220, 184); + this.backhigh.TabIndex = 4; + this.backhigh.TextureName = ""; + this.backhigh.UsePreviews = false; + this.backhigh.OnValueChanged += new System.EventHandler(this.backhigh_OnValueChanged); // // tabcustom // @@ -1304,6 +1258,13 @@ namespace CodeImp.DoomBuilder.Windows this.fieldslist.TypeColumnWidth = 100; this.fieldslist.ValueColumnVisible = true; // + // imagelist + // + this.imagelist.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imagelist.ImageStream"))); + this.imagelist.TransparentColor = System.Drawing.Color.Transparent; + this.imagelist.Images.SetKeyName(0, "Check.png"); + this.imagelist.Images.SetKeyName(1, "SearchClear.png"); + // // tooltip // this.tooltip.AutomaticDelay = 10; @@ -1347,22 +1308,22 @@ namespace CodeImp.DoomBuilder.Windows this.activationGroup.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.missingactivation)).EndInit(); this.idgroup.ResumeLayout(false); - this.tabsidedefs.ResumeLayout(false); - this.splitter.Panel1.ResumeLayout(false); - this.splitter.Panel1.PerformLayout(); - this.splitter.Panel2.ResumeLayout(false); - this.splitter.Panel2.PerformLayout(); - this.splitter.ResumeLayout(false); + this.tabfront.ResumeLayout(false); + this.tabfront.PerformLayout(); this.frontgroup.ResumeLayout(false); - this.frontgroup.PerformLayout(); - this.udmfPropertiesFront.ResumeLayout(false); - this.tabFrontOffsets.ResumeLayout(false); - this.tabFrontFlags.ResumeLayout(false); + this.frontflagsgroup.ResumeLayout(false); + this.frontscalegroup.ResumeLayout(false); + this.groupBox6.ResumeLayout(false); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.tabback.ResumeLayout(false); + this.tabback.PerformLayout(); this.backgroup.ResumeLayout(false); - this.backgroup.PerformLayout(); - this.udmfPropertiesBack.ResumeLayout(false); - this.tabBackOffsets.ResumeLayout(false); - this.tabBackFlags.ResumeLayout(false); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.backflagsgroup.ResumeLayout(false); + this.backscalegroup.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); this.tabcustom.ResumeLayout(false); this.ResumeLayout(false); @@ -1379,7 +1340,7 @@ namespace CodeImp.DoomBuilder.Windows private CodeImp.DoomBuilder.Controls.ActionSelectorControl action; private System.Windows.Forms.TabControl tabs; private System.Windows.Forms.TabPage tabproperties; - private System.Windows.Forms.TabPage tabsidedefs; + private System.Windows.Forms.TabPage tabfront; private System.Windows.Forms.GroupBox frontgroup; private System.Windows.Forms.CheckBox frontside; private System.Windows.Forms.CheckBox backside; @@ -1405,7 +1366,6 @@ namespace CodeImp.DoomBuilder.Windows private System.Windows.Forms.Label arg3label; private System.Windows.Forms.Label arg2label; private System.Windows.Forms.Label arg4label; - private System.Windows.Forms.SplitContainer splitter; private System.Windows.Forms.Button customfrontbutton; private System.Windows.Forms.Button custombackbutton; private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox frontsector; @@ -1413,9 +1373,6 @@ namespace CodeImp.DoomBuilder.Windows private System.Windows.Forms.CheckBox cbArgStr; private System.Windows.Forms.ComboBox scriptNames; private CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector tagSelector; - private System.Windows.Forms.TabControl udmfPropertiesFront; - private System.Windows.Forms.TabPage tabFrontOffsets; - private System.Windows.Forms.TabPage tabFrontFlags; private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox lightFront; private System.Windows.Forms.CheckBox cbLightAbsoluteFront; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcFrontOffsetTop; @@ -1424,15 +1381,12 @@ namespace CodeImp.DoomBuilder.Windows private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcFrontScaleBottom; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcFrontScaleMid; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcFrontScaleTop; - private System.Windows.Forms.TabControl udmfPropertiesBack; - private System.Windows.Forms.TabPage tabBackOffsets; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcBackScaleBottom; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcBackScaleMid; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcBackScaleTop; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcBackOffsetBottom; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcBackOffsetMid; private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcBackOffsetTop; - private System.Windows.Forms.TabPage tabBackFlags; private System.Windows.Forms.GroupBox settingsGroup; private System.Windows.Forms.ComboBox renderStyle; private System.Windows.Forms.Label labelLightFront; @@ -1449,5 +1403,15 @@ namespace CodeImp.DoomBuilder.Windows private System.Windows.Forms.PictureBox missingactivation; private System.Windows.Forms.ToolTip tooltip; private System.Windows.Forms.ComboBox lockpick; + private System.Windows.Forms.TabPage tabback; + private System.Windows.Forms.GroupBox backflagsgroup; + private System.Windows.Forms.GroupBox backscalegroup; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.GroupBox frontflagsgroup; + private System.Windows.Forms.GroupBox frontscalegroup; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.ImageList imagelist; } } \ No newline at end of file diff --git a/Source/Core/Windows/LinedefEditFormUDMF.cs b/Source/Core/Windows/LinedefEditFormUDMF.cs index 78dff048..325dee3e 100644 --- a/Source/Core/Windows/LinedefEditFormUDMF.cs +++ b/Source/Core/Windows/LinedefEditFormUDMF.cs @@ -69,8 +69,6 @@ namespace CodeImp.DoomBuilder.Windows //mxd. Window setup stuff private static Point location = Point.Empty; private static int activeTab; - private static int activeFrontTab; - private static int activeBackTab; private struct LinedefProperties //mxd { @@ -173,8 +171,6 @@ namespace CodeImp.DoomBuilder.Windows { activeTab = 0; } - if(activeFrontTab > 0) udmfPropertiesFront.SelectTab(activeFrontTab); - if(activeBackTab > 0) udmfPropertiesBack.SelectTab(activeBackTab); } // Fill flags lists @@ -278,8 +274,16 @@ namespace CodeImp.DoomBuilder.Windows labelLightBack.Visible = false; lightBack.Visible = false; cbLightAbsoluteBack.Visible = false; - udmfPropertiesFront.Visible = false; - udmfPropertiesBack.Visible = false; + frontflagsgroup.Enabled = false; + backflagsgroup.Enabled = false; + frontscalegroup.Enabled = false; + backscalegroup.Enabled = false; + pfcFrontOffsetTop.Enabled = false; + pfcFrontOffsetMid.Enabled = false; + pfcFrontOffsetBottom.Enabled = false; + pfcBackOffsetTop.Enabled = false; + pfcBackOffsetMid.Enabled = false; + pfcBackOffsetBottom.Enabled = false; } } @@ -925,6 +929,7 @@ namespace CodeImp.DoomBuilder.Windows // Enable/disable panel // NOTE: Also enabled when checkbox is grayed! frontgroup.Enabled = (frontside.CheckState != CheckState.Unchecked); + tabfront.ImageIndex = (frontside.CheckState == CheckState.Unchecked ? 1 : 0); } // Back side (un)checked @@ -933,6 +938,7 @@ namespace CodeImp.DoomBuilder.Windows // Enable/disable panel // NOTE: Also enabled when checkbox is grayed! backgroup.Enabled = (backside.CheckState != CheckState.Unchecked); + tabback.ImageIndex = (backside.CheckState == CheckState.Unchecked ? 1 : 0); } // Action changes @@ -1020,8 +1026,6 @@ namespace CodeImp.DoomBuilder.Windows { location = this.Location; activeTab = tabs.SelectedIndex; - activeFrontTab = udmfPropertiesFront.SelectedIndex; - activeBackTab = udmfPropertiesBack.SelectedIndex; } // Help! diff --git a/Source/Core/Windows/LinedefEditFormUDMF.resx b/Source/Core/Windows/LinedefEditFormUDMF.resx index d9fdec64..5be01793 100644 --- a/Source/Core/Windows/LinedefEditFormUDMF.resx +++ b/Source/Core/Windows/LinedefEditFormUDMF.resx @@ -123,42 +123,6 @@ False - - True - - - False - - - True - - - False - - - True - - - False - - - True - - - False - - - True - - - False - - - True - - - False - False @@ -183,31 +147,55 @@ 17, 17 - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - True + + 105, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADM + CAAAAk1TRnQBSQFMAgEBAgEAARgBAAEYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/1QAAh8GAAIfKAAB/wHx + Af8KAAEfAiYBHwQAAR8CJgEfJgAB/wG7AYsBswH/CAABHwQmAR8CAAEfBCYBHyQAAf8BuwOLAbMB/wcA + ASUB3gQmAh8EJgHeASUjAAH/AbsBigOLAa0BswH/BwABJQHeCCYB3gElIwAB/wG7AooDiwKtAbMB/wcA + ASUB3gYmAd4BJSMAAf8BtQOKAYsBswGLA60BswH/BwABJQYmASUkAAHzA4oBiwHyAf8BtAKtA7MB/wYA + AR8GJgEfJAAB/wG1AYoBtAH/AgAB/wG0Aa0EswH/BAABHwgsAR8kAAH/AfEB/wQAAf8BtAWzAf8CAAEf + Ak0CLALeAiwCTQEfKwAB/wG0BLMB8wEAAR8CUwJNAd4CJQHeAk0CUwEfKwAB/wG0ArMBGQIAASUB3gJT + Ad4BJQIAASUB3gJTAd4BJSwAAf8BugEZBAABJQLeASUEAAElAt4BJTUAAiUGAAIlYwABQgFNAT4HAAE+ + AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEABP8EAAL/AucEAAH4Af8CwwQAAfABfwKBBAAB4AE/ + AYABAQQAAcABHwHAAQMEAAGAAQ8B4AEHBQABBwHwAQ8FAAEDAfABDwQAAQYBAQHgAQcEAAGPAQABwAED + BAAB/wKAAQEEAAH/AcECgQQAAf8B4wLDBAAC/wLnBAAE/wQACw== + + \ No newline at end of file diff --git a/Source/Core/Windows/MainForm.Designer.cs b/Source/Core/Windows/MainForm.Designer.cs index 91bd40e7..6200881f 100644 --- a/Source/Core/Windows/MainForm.Designer.cs +++ b/Source/Core/Windows/MainForm.Designer.cs @@ -413,7 +413,7 @@ namespace CodeImp.DoomBuilder.Windows this.itemopenmapincurwad.Name = "itemopenmapincurwad"; this.itemopenmapincurwad.Size = new System.Drawing.Size(223, 22); this.itemopenmapincurwad.Tag = "builder_openmapincurrentwad"; - this.itemopenmapincurwad.Text = "Open Map in current &WAD..."; + this.itemopenmapincurwad.Text = "Open Map in Current &WAD..."; this.itemopenmapincurwad.Click += new System.EventHandler(this.InvokeTaggedAction); // // itemclosemap @@ -869,7 +869,7 @@ namespace CodeImp.DoomBuilder.Windows this.itemfittoscreen.Name = "itemfittoscreen"; this.itemfittoscreen.Size = new System.Drawing.Size(209, 22); this.itemfittoscreen.Tag = "builder_centerinscreen"; - this.itemfittoscreen.Text = "Fit to screen"; + this.itemfittoscreen.Text = "Fit to Screen"; this.itemfittoscreen.Click += new System.EventHandler(this.InvokeTaggedAction); // // itemtoggleinfo diff --git a/Source/Core/Windows/MapOptionsForm.Designer.cs b/Source/Core/Windows/MapOptionsForm.Designer.cs index c59a3d82..e43c8a6e 100644 --- a/Source/Core/Windows/MapOptionsForm.Designer.cs +++ b/Source/Core/Windows/MapOptionsForm.Designer.cs @@ -41,6 +41,7 @@ namespace CodeImp.DoomBuilder.Windows this.apply = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.panelres = new System.Windows.Forms.GroupBox(); + this.uselongtexturenames = new System.Windows.Forms.CheckBox(); this.strictpatches = new System.Windows.Forms.CheckBox(); this.datalocations = new CodeImp.DoomBuilder.Controls.ResourceListEditor(); label3 = new System.Windows.Forms.Label(); @@ -63,12 +64,12 @@ namespace CodeImp.DoomBuilder.Windows // // label2 // - label2.AutoSize = true; - label2.Location = new System.Drawing.Point(58, 83); + label2.Location = new System.Drawing.Point(13, 83); label2.Name = "label2"; - label2.Size = new System.Drawing.Size(65, 14); + label2.Size = new System.Drawing.Size(110, 14); label2.TabIndex = 7; label2.Text = "Level name:"; + label2.TextAlign = System.Drawing.ContentAlignment.TopRight; // // label1 // @@ -76,7 +77,7 @@ namespace CodeImp.DoomBuilder.Windows label1.Name = "label1"; label1.Size = new System.Drawing.Size(110, 14); label1.TabIndex = 5; - label1.Text = "Game Configuration:"; + label1.Text = "Game configuration:"; label1.TextAlign = System.Drawing.ContentAlignment.TopRight; // // panelsettings @@ -124,7 +125,7 @@ namespace CodeImp.DoomBuilder.Windows this.scriptcompilerlabel.Name = "scriptcompilerlabel"; this.scriptcompilerlabel.Size = new System.Drawing.Size(110, 14); this.scriptcompilerlabel.TabIndex = 11; - this.scriptcompilerlabel.Text = "Script Type:"; + this.scriptcompilerlabel.Text = "Script type:"; this.scriptcompilerlabel.TextAlign = System.Drawing.ContentAlignment.TopRight; // // levelname @@ -152,7 +153,7 @@ namespace CodeImp.DoomBuilder.Windows // label4 // label4.AutoSize = true; - label4.Location = new System.Drawing.Point(15, 190); + label4.Location = new System.Drawing.Point(15, 210); label4.Name = "label4"; label4.Size = new System.Drawing.Size(312, 42); label4.TabIndex = 17; @@ -163,7 +164,7 @@ namespace CodeImp.DoomBuilder.Windows // apply // this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.apply.Location = new System.Drawing.Point(297, 378); + this.apply.Location = new System.Drawing.Point(297, 400); this.apply.Name = "apply"; this.apply.Size = new System.Drawing.Size(112, 25); this.apply.TabIndex = 2; @@ -175,7 +176,7 @@ namespace CodeImp.DoomBuilder.Windows // this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancel.Location = new System.Drawing.Point(179, 378); + this.cancel.Location = new System.Drawing.Point(179, 400); this.cancel.Name = "cancel"; this.cancel.Size = new System.Drawing.Size(112, 25); this.cancel.TabIndex = 3; @@ -187,16 +188,27 @@ namespace CodeImp.DoomBuilder.Windows // this.panelres.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.panelres.Controls.Add(this.uselongtexturenames); this.panelres.Controls.Add(this.strictpatches); this.panelres.Controls.Add(this.datalocations); this.panelres.Controls.Add(label4); this.panelres.Location = new System.Drawing.Point(12, 130); this.panelres.Name = "panelres"; - this.panelres.Size = new System.Drawing.Size(397, 240); + this.panelres.Size = new System.Drawing.Size(397, 260); this.panelres.TabIndex = 1; this.panelres.TabStop = false; this.panelres.Text = " Resources "; // + // uselongtexturenames + // + this.uselongtexturenames.AutoSize = true; + this.uselongtexturenames.Location = new System.Drawing.Point(15, 51); + this.uselongtexturenames.Name = "uselongtexturenames"; + this.uselongtexturenames.Size = new System.Drawing.Size(140, 18); + this.uselongtexturenames.TabIndex = 21; + this.uselongtexturenames.Text = "Use long texture names"; + this.uselongtexturenames.UseVisualStyleBackColor = true; + // // strictpatches // this.strictpatches.AutoSize = true; @@ -212,7 +224,7 @@ namespace CodeImp.DoomBuilder.Windows this.datalocations.AllowDrop = true; this.datalocations.DialogOffset = new System.Drawing.Point(40, 20); this.datalocations.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.datalocations.Location = new System.Drawing.Point(15, 57); + this.datalocations.Location = new System.Drawing.Point(15, 75); this.datalocations.Name = "datalocations"; this.datalocations.Size = new System.Drawing.Size(368, 130); this.datalocations.TabIndex = 0; @@ -223,7 +235,7 @@ namespace CodeImp.DoomBuilder.Windows this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.CancelButton = this.cancel; - this.ClientSize = new System.Drawing.Size(421, 411); + this.ClientSize = new System.Drawing.Size(421, 433); this.Controls.Add(this.panelres); this.Controls.Add(this.cancel); this.Controls.Add(this.apply); @@ -259,6 +271,7 @@ namespace CodeImp.DoomBuilder.Windows private System.Windows.Forms.ComboBox scriptcompiler; private System.Windows.Forms.Label scriptcompilerlabel; private System.Windows.Forms.Label examplelabel; + private System.Windows.Forms.CheckBox uselongtexturenames; } diff --git a/Source/Core/Windows/MapOptionsForm.cs b/Source/Core/Windows/MapOptionsForm.cs index 4c349e81..b390df62 100644 --- a/Source/Core/Windows/MapOptionsForm.cs +++ b/Source/Core/Windows/MapOptionsForm.cs @@ -32,8 +32,8 @@ namespace CodeImp.DoomBuilder.Windows internal partial class MapOptionsForm : DelayedForm { // Variables - private MapOptions options; - private bool newmap; + private readonly MapOptions options; + private readonly bool newmap; private string previousdefaultmaplumpname; //mxd // Properties @@ -169,6 +169,16 @@ namespace CodeImp.DoomBuilder.Windows return; } + //mxd. Long texture names + if(!newmap && !uselongtexturenames.Checked && options.UseLongTextureNames && + MessageBox.Show(this, "Switching to short texture names may lead to texture and flat name conflicts. Do you want to continue?", + Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No) + { + return; + } + + options.UseLongTextureNames = uselongtexturenames.Checked; + // Collect information ConfigurationInfo configinfo = config.SelectedItem as ConfigurationInfo; //mxd DataLocationList locations = datalocations.GetResources(); @@ -312,6 +322,10 @@ namespace CodeImp.DoomBuilder.Windows { scriptcompiler.SelectedIndex = -1; } + + //mxd. Long texture names + uselongtexturenames.Enabled = ci.SupportsLongTextureNames; + uselongtexturenames.Checked = (ci.SupportsLongTextureNames && options.UseLongTextureNames); // Show resources datalocations.FixedResourceLocationList(ci.Resources); diff --git a/Source/Core/Windows/MapOptionsForm.resx b/Source/Core/Windows/MapOptionsForm.resx index 40b321b3..17bdcd9f 100644 --- a/Source/Core/Windows/MapOptionsForm.resx +++ b/Source/Core/Windows/MapOptionsForm.resx @@ -129,16 +129,7 @@ False - - True - False - - True - - - True - \ No newline at end of file diff --git a/Source/Core/Windows/OpenMapOptionsForm.Designer.cs b/Source/Core/Windows/OpenMapOptionsForm.Designer.cs index ba459a50..9e32d969 100644 --- a/Source/Core/Windows/OpenMapOptionsForm.Designer.cs +++ b/Source/Core/Windows/OpenMapOptionsForm.Designer.cs @@ -33,6 +33,7 @@ namespace CodeImp.DoomBuilder.Windows System.Windows.Forms.Label label2; System.Windows.Forms.Label label3; this.panelres = new System.Windows.Forms.GroupBox(); + this.uselongtexturenames = new System.Windows.Forms.CheckBox(); this.strictpatches = new System.Windows.Forms.CheckBox(); this.datalocations = new CodeImp.DoomBuilder.Controls.ResourceListEditor(); this.apply = new System.Windows.Forms.Button(); @@ -58,7 +59,7 @@ namespace CodeImp.DoomBuilder.Windows label1.Name = "label1"; label1.Size = new System.Drawing.Size(120, 14); label1.TabIndex = 14; - label1.Text = "Game Configuration:"; + label1.Text = "Game configuration:"; label1.TextAlign = System.Drawing.ContentAlignment.TopRight; // // label2 @@ -73,7 +74,7 @@ namespace CodeImp.DoomBuilder.Windows // label3 // label3.AutoSize = true; - label3.Location = new System.Drawing.Point(14, 191); + label3.Location = new System.Drawing.Point(14, 210); label3.Name = "label3"; label3.Size = new System.Drawing.Size(312, 42); label3.TabIndex = 17; @@ -85,16 +86,27 @@ namespace CodeImp.DoomBuilder.Windows // this.panelres.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.panelres.Controls.Add(this.uselongtexturenames); this.panelres.Controls.Add(this.strictpatches); this.panelres.Controls.Add(this.datalocations); this.panelres.Controls.Add(label3); this.panelres.Location = new System.Drawing.Point(12, 246); this.panelres.Name = "panelres"; - this.panelres.Size = new System.Drawing.Size(396, 240); + this.panelres.Size = new System.Drawing.Size(396, 264); this.panelres.TabIndex = 2; this.panelres.TabStop = false; this.panelres.Text = " Resources "; // + // uselongtexturenames + // + this.uselongtexturenames.AutoSize = true; + this.uselongtexturenames.Location = new System.Drawing.Point(14, 51); + this.uselongtexturenames.Name = "uselongtexturenames"; + this.uselongtexturenames.Size = new System.Drawing.Size(140, 18); + this.uselongtexturenames.TabIndex = 20; + this.uselongtexturenames.Text = "Use long texture names"; + this.uselongtexturenames.UseVisualStyleBackColor = true; + // // strictpatches // this.strictpatches.AutoSize = true; @@ -110,7 +122,7 @@ namespace CodeImp.DoomBuilder.Windows this.datalocations.AllowDrop = true; this.datalocations.DialogOffset = new System.Drawing.Point(40, 20); this.datalocations.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.datalocations.Location = new System.Drawing.Point(14, 58); + this.datalocations.Location = new System.Drawing.Point(14, 75); this.datalocations.Name = "datalocations"; this.datalocations.Size = new System.Drawing.Size(368, 127); this.datalocations.TabIndex = 0; @@ -118,7 +130,7 @@ namespace CodeImp.DoomBuilder.Windows // apply // this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.apply.Location = new System.Drawing.Point(296, 496); + this.apply.Location = new System.Drawing.Point(296, 517); this.apply.Name = "apply"; this.apply.Size = new System.Drawing.Size(112, 25); this.apply.TabIndex = 3; @@ -130,7 +142,7 @@ namespace CodeImp.DoomBuilder.Windows // this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancel.Location = new System.Drawing.Point(178, 495); + this.cancel.Location = new System.Drawing.Point(178, 516); this.cancel.Name = "cancel"; this.cancel.Size = new System.Drawing.Size(112, 25); this.cancel.TabIndex = 4; @@ -191,7 +203,7 @@ namespace CodeImp.DoomBuilder.Windows this.scriptcompilerlabel.Name = "scriptcompilerlabel"; this.scriptcompilerlabel.Size = new System.Drawing.Size(120, 14); this.scriptcompilerlabel.TabIndex = 18; - this.scriptcompilerlabel.Text = "Script Type:"; + this.scriptcompilerlabel.Text = "Script type:"; this.scriptcompilerlabel.TextAlign = System.Drawing.ContentAlignment.TopRight; // // OpenMapOptionsForm @@ -200,7 +212,7 @@ namespace CodeImp.DoomBuilder.Windows this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.CancelButton = this.cancel; - this.ClientSize = new System.Drawing.Size(420, 530); + this.ClientSize = new System.Drawing.Size(420, 551); this.Controls.Add(this.scriptcompiler); this.Controls.Add(this.scriptcompilerlabel); this.Controls.Add(this.mapslist); @@ -239,6 +251,7 @@ namespace CodeImp.DoomBuilder.Windows private System.Windows.Forms.CheckBox strictpatches; private System.Windows.Forms.ComboBox scriptcompiler; private System.Windows.Forms.Label scriptcompilerlabel; + private System.Windows.Forms.CheckBox uselongtexturenames; } diff --git a/Source/Core/Windows/OpenMapOptionsForm.cs b/Source/Core/Windows/OpenMapOptionsForm.cs index 33ff22a9..f36a3099 100644 --- a/Source/Core/Windows/OpenMapOptionsForm.cs +++ b/Source/Core/Windows/OpenMapOptionsForm.cs @@ -324,6 +324,10 @@ namespace CodeImp.DoomBuilder.Windows scriptcompilerlabel.Enabled = false; } + //mxd. Long texture names + uselongtexturenames.Enabled = ci.SupportsLongTextureNames; + uselongtexturenames.Checked = (ci.SupportsLongTextureNames && options.UseLongTextureNames); + // Show configuration resources datalocations.FixedResourceLocationList(ci.Resources); } @@ -339,6 +343,15 @@ namespace CodeImp.DoomBuilder.Windows config.Focus(); return; } + + //mxd. Use long texture names? + if (uselongtexturenames.Enabled && !options.UseLongTextureNames && uselongtexturenames.Checked && + MessageBox.Show(this, "Switching to long texture names can make the map incompatible with some map editors and game engines. Do you want to continue?", + Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No) + { + return; + } + options.UseLongTextureNames = uselongtexturenames.Checked; // Collect information ConfigurationInfo configinfo = (config.SelectedItem as ConfigurationInfo); //mxd @@ -464,7 +477,8 @@ namespace CodeImp.DoomBuilder.Windows datalocations.EditResourceLocationList(listedlocations); //mxd. Select script compiler - if (!string.IsNullOrEmpty(options.ScriptCompiler) && General.CompiledScriptConfigs.ContainsKey(options.ScriptCompiler)) { + if (!string.IsNullOrEmpty(options.ScriptCompiler) && General.CompiledScriptConfigs.ContainsKey(options.ScriptCompiler)) + { scriptconfig = options.ScriptCompiler; } else @@ -473,6 +487,9 @@ namespace CodeImp.DoomBuilder.Windows if(!string.IsNullOrEmpty(defaultscriptconfig) && General.CompiledScriptConfigs.ContainsKey(defaultscriptconfig)) scriptconfig = defaultscriptconfig; } + + //mxd. Long texture names + if(uselongtexturenames.Enabled) uselongtexturenames.Checked = options.UseLongTextureNames; } //mxd. Select proper script compiler diff --git a/Source/Core/Windows/OpenMapOptionsForm.resx b/Source/Core/Windows/OpenMapOptionsForm.resx index 2fcaef72..3907cb47 100644 --- a/Source/Core/Windows/OpenMapOptionsForm.resx +++ b/Source/Core/Windows/OpenMapOptionsForm.resx @@ -126,19 +126,7 @@ False - - True - False - - True - - - True - - - True - \ No newline at end of file diff --git a/Source/Core/Windows/PreferencesForm.Designer.cs b/Source/Core/Windows/PreferencesForm.Designer.cs index 3b60e7e4..842f993e 100644 --- a/Source/Core/Windows/PreferencesForm.Designer.cs +++ b/Source/Core/Windows/PreferencesForm.Designer.cs @@ -1892,6 +1892,7 @@ namespace CodeImp.DoomBuilder.Windows this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "PreferencesForm"; + this.Opacity = 0; this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/Source/Core/Windows/SectorEditFormUDMF.Designer.cs b/Source/Core/Windows/SectorEditFormUDMF.Designer.cs index 12f31f66..56b2cfb2 100644 --- a/Source/Core/Windows/SectorEditFormUDMF.Designer.cs +++ b/Source/Core/Windows/SectorEditFormUDMF.Designer.cs @@ -129,7 +129,7 @@ groupaction.Controls.Add(this.tagSelector); groupaction.Location = new System.Drawing.Point(7, 341); groupaction.Name = "groupaction"; - groupaction.Size = new System.Drawing.Size(436, 71); + groupaction.Size = new System.Drawing.Size(490, 71); groupaction.TabIndex = 2; groupaction.TabStop = false; groupaction.Text = " Identification: "; @@ -138,7 +138,7 @@ // this.tagSelector.Location = new System.Drawing.Point(6, 21); this.tagSelector.Name = "tagSelector"; - this.tagSelector.Size = new System.Drawing.Size(424, 35); + this.tagSelector.Size = new System.Drawing.Size(478, 35); this.tagSelector.TabIndex = 0; // // groupeffect @@ -160,7 +160,7 @@ groupeffect.Controls.Add(label8); groupeffect.Location = new System.Drawing.Point(7, 160); groupeffect.Name = "groupeffect"; - groupeffect.Size = new System.Drawing.Size(436, 175); + groupeffect.Size = new System.Drawing.Size(490, 175); groupeffect.TabIndex = 1; groupeffect.TabStop = false; groupeffect.Text = " Effects: "; @@ -170,7 +170,7 @@ this.fadeColor.DefaultValue = 0; this.fadeColor.Field = "fadecolor"; this.fadeColor.Label = "Fade:"; - this.fadeColor.Location = new System.Drawing.Point(223, 111); + this.fadeColor.Location = new System.Drawing.Point(241, 111); this.fadeColor.Name = "fadeColor"; this.fadeColor.Size = new System.Drawing.Size(207, 31); this.fadeColor.TabIndex = 30; @@ -181,7 +181,7 @@ this.lightColor.DefaultValue = 16777215; this.lightColor.Field = "lightcolor"; this.lightColor.Label = "Light:"; - this.lightColor.Location = new System.Drawing.Point(223, 82); + this.lightColor.Location = new System.Drawing.Point(241, 82); this.lightColor.Name = "lightColor"; this.lightColor.Size = new System.Drawing.Size(207, 29); this.lightColor.TabIndex = 29; @@ -247,7 +247,7 @@ // this.soundSequence.Location = new System.Drawing.Point(125, 55); this.soundSequence.Name = "soundSequence"; - this.soundSequence.Size = new System.Drawing.Size(271, 20); + this.soundSequence.Size = new System.Drawing.Size(325, 20); this.soundSequence.TabIndex = 2; // // gravity @@ -276,7 +276,7 @@ // browseeffect // this.browseeffect.Image = global::CodeImp.DoomBuilder.Properties.Resources.List; - this.browseeffect.Location = new System.Drawing.Point(402, 26); + this.browseeffect.Location = new System.Drawing.Point(456, 26); this.browseeffect.Name = "browseeffect"; this.browseeffect.Size = new System.Drawing.Size(28, 25); this.browseeffect.TabIndex = 1; @@ -293,7 +293,7 @@ this.effect.GeneralizedOptions = null; this.effect.Location = new System.Drawing.Point(68, 28); this.effect.Name = "effect"; - this.effect.Size = new System.Drawing.Size(328, 21); + this.effect.Size = new System.Drawing.Size(382, 21); this.effect.TabIndex = 0; this.effect.Value = 402; // @@ -320,7 +320,7 @@ groupfloorceiling.Controls.Add(this.floorheight); groupfloorceiling.Location = new System.Drawing.Point(7, 6); groupfloorceiling.Name = "groupfloorceiling"; - groupfloorceiling.Size = new System.Drawing.Size(188, 148); + groupfloorceiling.Size = new System.Drawing.Size(242, 148); groupfloorceiling.TabIndex = 0; groupfloorceiling.TabStop = false; groupfloorceiling.Text = " Heights: "; @@ -432,7 +432,7 @@ this.tabs.Margin = new System.Windows.Forms.Padding(1); this.tabs.Name = "tabs"; this.tabs.SelectedIndex = 0; - this.tabs.Size = new System.Drawing.Size(457, 445); + this.tabs.Size = new System.Drawing.Size(511, 445); this.tabs.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; this.tabs.TabIndex = 1; // @@ -446,7 +446,7 @@ this.tabproperties.Location = new System.Drawing.Point(4, 23); this.tabproperties.Name = "tabproperties"; this.tabproperties.Padding = new System.Windows.Forms.Padding(3); - this.tabproperties.Size = new System.Drawing.Size(449, 418); + this.tabproperties.Size = new System.Drawing.Size(503, 418); this.tabproperties.TabIndex = 0; this.tabproperties.Text = "Properties"; this.tabproperties.UseVisualStyleBackColor = true; @@ -456,7 +456,7 @@ this.groupBox3.Controls.Add(this.flags); this.groupBox3.Location = new System.Drawing.Point(201, 6); this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(242, 148); + this.groupBox3.Size = new System.Drawing.Size(296, 148); this.groupBox3.TabIndex = 3; this.groupBox3.TabStop = false; this.groupBox3.Text = " Flags: "; @@ -467,7 +467,7 @@ this.flags.Columns = 1; this.flags.Location = new System.Drawing.Point(15, 21); this.flags.Name = "flags"; - this.flags.Size = new System.Drawing.Size(222, 121); + this.flags.Size = new System.Drawing.Size(275, 121); this.flags.TabIndex = 5; this.flags.VerticalSpacing = 2; // @@ -478,7 +478,7 @@ this.tabSurfaces.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tabSurfaces.Location = new System.Drawing.Point(4, 23); this.tabSurfaces.Name = "tabSurfaces"; - this.tabSurfaces.Size = new System.Drawing.Size(449, 418); + this.tabSurfaces.Size = new System.Drawing.Size(503, 418); this.tabSurfaces.TabIndex = 2; this.tabSurfaces.Text = "Surfaces"; this.tabSurfaces.UseVisualStyleBackColor = true; @@ -503,7 +503,7 @@ this.groupBox2.Controls.Add(this.floortex); this.groupBox2.Location = new System.Drawing.Point(3, 212); this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(443, 203); + this.groupBox2.Size = new System.Drawing.Size(497, 203); this.groupBox2.TabIndex = 55; this.groupBox2.TabStop = false; this.groupBox2.Text = " Floor: "; @@ -511,7 +511,7 @@ // cbUseFloorLineAngles // this.cbUseFloorLineAngles.AutoSize = true; - this.cbUseFloorLineAngles.Location = new System.Drawing.Point(236, 147); + this.cbUseFloorLineAngles.Location = new System.Drawing.Point(181, 147); this.cbUseFloorLineAngles.Name = "cbUseFloorLineAngles"; this.cbUseFloorLineAngles.Size = new System.Drawing.Size(115, 18); this.cbUseFloorLineAngles.TabIndex = 57; @@ -522,9 +522,9 @@ // // floorAngleControl // - this.floorAngleControl.Angle = 0; + this.floorAngleControl.Angle = -360; this.floorAngleControl.AngleOffset = 90; - this.floorAngleControl.Location = new System.Drawing.Point(186, 132); + this.floorAngleControl.Location = new System.Drawing.Point(6, 132); this.floorAngleControl.Name = "floorAngleControl"; this.floorAngleControl.Size = new System.Drawing.Size(44, 44); this.floorAngleControl.TabIndex = 56; @@ -532,7 +532,7 @@ // // label7 // - this.label7.Location = new System.Drawing.Point(29, 88); + this.label7.Location = new System.Drawing.Point(24, 88); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(80, 14); this.label7.TabIndex = 54; @@ -542,7 +542,7 @@ // // label10 // - this.label10.Location = new System.Drawing.Point(29, 178); + this.label10.Location = new System.Drawing.Point(24, 178); this.label10.Name = "label10"; this.label10.Size = new System.Drawing.Size(80, 14); this.label10.TabIndex = 52; @@ -558,7 +558,7 @@ this.floorAlpha.ButtonStep = 1; this.floorAlpha.ButtonStepFloat = 0.1F; this.floorAlpha.ButtonStepsWrapAround = false; - this.floorAlpha.Location = new System.Drawing.Point(118, 173); + this.floorAlpha.Location = new System.Drawing.Point(113, 173); this.floorAlpha.Name = "floorAlpha"; this.floorAlpha.Size = new System.Drawing.Size(62, 24); this.floorAlpha.StepValues = null; @@ -567,7 +567,7 @@ // // label11 // - this.label11.Location = new System.Drawing.Point(29, 148); + this.label11.Location = new System.Drawing.Point(24, 148); this.label11.Name = "label11"; this.label11.Size = new System.Drawing.Size(80, 14); this.label11.TabIndex = 50; @@ -583,7 +583,7 @@ this.floorRotation.ButtonStep = 5; this.floorRotation.ButtonStepFloat = 1F; this.floorRotation.ButtonStepsWrapAround = false; - this.floorRotation.Location = new System.Drawing.Point(118, 143); + this.floorRotation.Location = new System.Drawing.Point(113, 143); this.floorRotation.Name = "floorRotation"; this.floorRotation.Size = new System.Drawing.Size(62, 24); this.floorRotation.StepValues = null; @@ -594,7 +594,7 @@ // floorLightAbsolute // this.floorLightAbsolute.AutoSize = true; - this.floorLightAbsolute.Location = new System.Drawing.Point(186, 117); + this.floorLightAbsolute.Location = new System.Drawing.Point(181, 117); this.floorLightAbsolute.Name = "floorLightAbsolute"; this.floorLightAbsolute.Size = new System.Drawing.Size(69, 18); this.floorLightAbsolute.TabIndex = 49; @@ -604,7 +604,7 @@ // // label12 // - this.label12.Location = new System.Drawing.Point(29, 118); + this.label12.Location = new System.Drawing.Point(24, 118); this.label12.Name = "label12"; this.label12.Size = new System.Drawing.Size(80, 14); this.label12.TabIndex = 47; @@ -620,7 +620,7 @@ this.floorBrightness.ButtonStep = 16; this.floorBrightness.ButtonStepFloat = 1F; this.floorBrightness.ButtonStepsWrapAround = false; - this.floorBrightness.Location = new System.Drawing.Point(118, 113); + this.floorBrightness.Location = new System.Drawing.Point(113, 113); this.floorBrightness.Name = "floorBrightness"; this.floorBrightness.Size = new System.Drawing.Size(62, 24); this.floorBrightness.StepValues = null; @@ -632,7 +632,7 @@ // this.floorRenderStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.floorRenderStyle.FormattingEnabled = true; - this.floorRenderStyle.Location = new System.Drawing.Point(118, 85); + this.floorRenderStyle.Location = new System.Drawing.Point(113, 85); this.floorRenderStyle.Name = "floorRenderStyle"; this.floorRenderStyle.Size = new System.Drawing.Size(130, 22); this.floorRenderStyle.TabIndex = 46; @@ -649,7 +649,7 @@ this.floorScale.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.floorScale.Label = "Texture Scale:"; this.floorScale.LinkValues = false; - this.floorScale.Location = new System.Drawing.Point(23, 51); + this.floorScale.Location = new System.Drawing.Point(18, 51); this.floorScale.Name = "floorScale"; this.floorScale.Size = new System.Drawing.Size(276, 28); this.floorScale.TabIndex = 17; @@ -667,7 +667,7 @@ this.floorOffsets.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.floorOffsets.Label = "Texture Offsets:"; this.floorOffsets.LinkValues = false; - this.floorOffsets.Location = new System.Drawing.Point(23, 19); + this.floorOffsets.Location = new System.Drawing.Point(18, 19); this.floorOffsets.Name = "floorOffsets"; this.floorOffsets.Size = new System.Drawing.Size(276, 26); this.floorOffsets.TabIndex = 16; @@ -675,12 +675,13 @@ // // floortex // - this.floortex.Location = new System.Drawing.Point(305, 19); + this.floortex.Location = new System.Drawing.Point(300, 13); this.floortex.MultipleTextures = false; this.floortex.Name = "floortex"; - this.floortex.Size = new System.Drawing.Size(132, 105); + this.floortex.Size = new System.Drawing.Size(190, 184); this.floortex.TabIndex = 15; this.floortex.TextureName = ""; + this.floortex.UsePreviews = false; this.floortex.OnValueChanged += new System.EventHandler(this.floortex_OnValueChanged); // // groupBox1 @@ -703,7 +704,7 @@ this.groupBox1.Controls.Add(this.ceilingtex); this.groupBox1.Location = new System.Drawing.Point(3, 3); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(443, 203); + this.groupBox1.Size = new System.Drawing.Size(497, 203); this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; this.groupBox1.Text = " Ceiling: "; @@ -711,7 +712,7 @@ // cbUseCeilLineAngles // this.cbUseCeilLineAngles.AutoSize = true; - this.cbUseCeilLineAngles.Location = new System.Drawing.Point(236, 147); + this.cbUseCeilLineAngles.Location = new System.Drawing.Point(181, 147); this.cbUseCeilLineAngles.Name = "cbUseCeilLineAngles"; this.cbUseCeilLineAngles.Size = new System.Drawing.Size(115, 18); this.cbUseCeilLineAngles.TabIndex = 56; @@ -722,9 +723,9 @@ // // ceilAngleControl // - this.ceilAngleControl.Angle = 0; + this.ceilAngleControl.Angle = -360; this.ceilAngleControl.AngleOffset = 90; - this.ceilAngleControl.Location = new System.Drawing.Point(186, 132); + this.ceilAngleControl.Location = new System.Drawing.Point(6, 132); this.ceilAngleControl.Name = "ceilAngleControl"; this.ceilAngleControl.Size = new System.Drawing.Size(44, 44); this.ceilAngleControl.TabIndex = 55; @@ -732,7 +733,7 @@ // // label3 // - this.label3.Location = new System.Drawing.Point(29, 88); + this.label3.Location = new System.Drawing.Point(24, 88); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(80, 14); this.label3.TabIndex = 54; @@ -742,7 +743,7 @@ // // label4 // - this.label4.Location = new System.Drawing.Point(29, 178); + this.label4.Location = new System.Drawing.Point(24, 178); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(80, 14); this.label4.TabIndex = 52; @@ -758,7 +759,7 @@ this.ceilAlpha.ButtonStep = 1; this.ceilAlpha.ButtonStepFloat = 0.1F; this.ceilAlpha.ButtonStepsWrapAround = false; - this.ceilAlpha.Location = new System.Drawing.Point(118, 173); + this.ceilAlpha.Location = new System.Drawing.Point(113, 173); this.ceilAlpha.Name = "ceilAlpha"; this.ceilAlpha.Size = new System.Drawing.Size(62, 24); this.ceilAlpha.StepValues = null; @@ -767,7 +768,7 @@ // // label1 // - this.label1.Location = new System.Drawing.Point(29, 148); + this.label1.Location = new System.Drawing.Point(24, 148); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(80, 14); this.label1.TabIndex = 50; @@ -783,7 +784,7 @@ this.ceilRotation.ButtonStep = 5; this.ceilRotation.ButtonStepFloat = 1F; this.ceilRotation.ButtonStepsWrapAround = false; - this.ceilRotation.Location = new System.Drawing.Point(118, 143); + this.ceilRotation.Location = new System.Drawing.Point(113, 143); this.ceilRotation.Name = "ceilRotation"; this.ceilRotation.Size = new System.Drawing.Size(62, 24); this.ceilRotation.StepValues = null; @@ -794,7 +795,7 @@ // ceilLightAbsolute // this.ceilLightAbsolute.AutoSize = true; - this.ceilLightAbsolute.Location = new System.Drawing.Point(186, 117); + this.ceilLightAbsolute.Location = new System.Drawing.Point(181, 117); this.ceilLightAbsolute.Name = "ceilLightAbsolute"; this.ceilLightAbsolute.Size = new System.Drawing.Size(69, 18); this.ceilLightAbsolute.TabIndex = 49; @@ -805,7 +806,7 @@ // // labelLightFront // - this.labelLightFront.Location = new System.Drawing.Point(29, 118); + this.labelLightFront.Location = new System.Drawing.Point(24, 118); this.labelLightFront.Name = "labelLightFront"; this.labelLightFront.Size = new System.Drawing.Size(80, 14); this.labelLightFront.TabIndex = 47; @@ -821,7 +822,7 @@ this.ceilBrightness.ButtonStep = 16; this.ceilBrightness.ButtonStepFloat = 1F; this.ceilBrightness.ButtonStepsWrapAround = false; - this.ceilBrightness.Location = new System.Drawing.Point(118, 113); + this.ceilBrightness.Location = new System.Drawing.Point(113, 113); this.ceilBrightness.Name = "ceilBrightness"; this.ceilBrightness.Size = new System.Drawing.Size(62, 24); this.ceilBrightness.StepValues = null; @@ -833,7 +834,7 @@ // this.ceilRenderStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.ceilRenderStyle.FormattingEnabled = true; - this.ceilRenderStyle.Location = new System.Drawing.Point(118, 85); + this.ceilRenderStyle.Location = new System.Drawing.Point(113, 85); this.ceilRenderStyle.Name = "ceilRenderStyle"; this.ceilRenderStyle.Size = new System.Drawing.Size(130, 22); this.ceilRenderStyle.TabIndex = 46; @@ -850,7 +851,7 @@ this.ceilScale.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.ceilScale.Label = "Texture Scale:"; this.ceilScale.LinkValues = false; - this.ceilScale.Location = new System.Drawing.Point(23, 51); + this.ceilScale.Location = new System.Drawing.Point(18, 51); this.ceilScale.Name = "ceilScale"; this.ceilScale.Size = new System.Drawing.Size(276, 28); this.ceilScale.TabIndex = 17; @@ -868,7 +869,7 @@ this.ceilOffsets.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.ceilOffsets.Label = "Texture Offsets:"; this.ceilOffsets.LinkValues = false; - this.ceilOffsets.Location = new System.Drawing.Point(23, 19); + this.ceilOffsets.Location = new System.Drawing.Point(18, 19); this.ceilOffsets.Name = "ceilOffsets"; this.ceilOffsets.Size = new System.Drawing.Size(276, 26); this.ceilOffsets.TabIndex = 16; @@ -876,12 +877,13 @@ // // ceilingtex // - this.ceilingtex.Location = new System.Drawing.Point(305, 19); + this.ceilingtex.Location = new System.Drawing.Point(300, 13); this.ceilingtex.MultipleTextures = false; this.ceilingtex.Name = "ceilingtex"; - this.ceilingtex.Size = new System.Drawing.Size(132, 105); + this.ceilingtex.Size = new System.Drawing.Size(190, 184); this.ceilingtex.TabIndex = 15; this.ceilingtex.TextureName = ""; + this.ceilingtex.UsePreviews = false; this.ceilingtex.OnValueChanged += new System.EventHandler(this.ceilingtex_OnValueChanged); // // tabslopes @@ -891,7 +893,7 @@ this.tabslopes.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tabslopes.Location = new System.Drawing.Point(4, 23); this.tabslopes.Name = "tabslopes"; - this.tabslopes.Size = new System.Drawing.Size(449, 418); + this.tabslopes.Size = new System.Drawing.Size(503, 418); this.tabslopes.TabIndex = 3; this.tabslopes.Text = "Slopes"; this.tabslopes.UseVisualStyleBackColor = true; @@ -901,7 +903,7 @@ this.groupBox5.Controls.Add(this.floorslopecontrol); this.groupBox5.Location = new System.Drawing.Point(3, 212); this.groupBox5.Name = "groupBox5"; - this.groupBox5.Size = new System.Drawing.Size(443, 203); + this.groupBox5.Size = new System.Drawing.Size(497, 203); this.groupBox5.TabIndex = 1; this.groupBox5.TabStop = false; this.groupBox5.Text = " Floor: "; @@ -923,7 +925,7 @@ this.groupBox4.Controls.Add(this.ceilingslopecontrol); this.groupBox4.Location = new System.Drawing.Point(3, 3); this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(443, 203); + this.groupBox4.Size = new System.Drawing.Size(497, 203); this.groupBox4.TabIndex = 0; this.groupBox4.TabStop = false; this.groupBox4.Text = " Ceiling: "; @@ -947,7 +949,7 @@ this.tabcustom.Location = new System.Drawing.Point(4, 23); this.tabcustom.Name = "tabcustom"; this.tabcustom.Padding = new System.Windows.Forms.Padding(3); - this.tabcustom.Size = new System.Drawing.Size(449, 418); + this.tabcustom.Size = new System.Drawing.Size(503, 418); this.tabcustom.TabIndex = 1; this.tabcustom.Text = "Custom"; this.tabcustom.UseVisualStyleBackColor = true; @@ -967,7 +969,7 @@ this.fieldslist.Name = "fieldslist"; this.fieldslist.PropertyColumnVisible = true; this.fieldslist.PropertyColumnWidth = 150; - this.fieldslist.Size = new System.Drawing.Size(427, 397); + this.fieldslist.Size = new System.Drawing.Size(481, 397); this.fieldslist.TabIndex = 1; this.fieldslist.TypeColumnVisible = true; this.fieldslist.TypeColumnWidth = 100; @@ -977,7 +979,7 @@ // this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancel.Location = new System.Drawing.Point(235, 459); + this.cancel.Location = new System.Drawing.Point(289, 459); this.cancel.Name = "cancel"; this.cancel.Size = new System.Drawing.Size(112, 25); this.cancel.TabIndex = 4; @@ -988,7 +990,7 @@ // apply // this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.apply.Location = new System.Drawing.Point(353, 459); + this.apply.Location = new System.Drawing.Point(407, 459); this.apply.Name = "apply"; this.apply.Size = new System.Drawing.Size(112, 25); this.apply.TabIndex = 3; @@ -1009,7 +1011,7 @@ this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.CancelButton = this.cancel; - this.ClientSize = new System.Drawing.Size(477, 489); + this.ClientSize = new System.Drawing.Size(531, 489); this.Controls.Add(this.cancel); this.Controls.Add(this.apply); this.Controls.Add(this.tabs); @@ -1018,7 +1020,6 @@ this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "SectorEditFormUDMF"; - this.Opacity = 0; this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/Source/Core/Windows/SectorEditFormUDMF.resx b/Source/Core/Windows/SectorEditFormUDMF.resx index 2f82d0ae..ff5055e3 100644 --- a/Source/Core/Windows/SectorEditFormUDMF.resx +++ b/Source/Core/Windows/SectorEditFormUDMF.resx @@ -162,4 +162,7 @@ True + + 17, 17 + \ No newline at end of file diff --git a/Source/Core/Windows/TextureBrowserForm.cs b/Source/Core/Windows/TextureBrowserForm.cs index 57ecce12..68de8ef6 100644 --- a/Source/Core/Windows/TextureBrowserForm.cs +++ b/Source/Core/Windows/TextureBrowserForm.cs @@ -19,6 +19,7 @@ using System; using System.Drawing; using System.Windows.Forms; +using CodeImp.DoomBuilder.Controls; using CodeImp.DoomBuilder.IO; using CodeImp.DoomBuilder.Data; using CodeImp.DoomBuilder.Config; @@ -34,11 +35,11 @@ namespace CodeImp.DoomBuilder.Windows private string selectedname; private Point lastposition; private Size lastsize; - private ListViewGroup usedgroup; - private ListViewGroup availgroup; + private readonly ListViewGroup usedgroup; + private readonly ListViewGroup availgroup; private TreeNode selectedset; //mxd private string selecttextureonfill; - private bool browseFlats; + private readonly bool browseFlats; // Properties public string SelectedName { get { return selectedname; } } @@ -119,17 +120,22 @@ namespace CodeImp.DoomBuilder.Windows //mxd. Select the last one that was selected string selectname = General.Settings.ReadSetting("browserwindow.textureset", ""); TreeNode match; - if (string.IsNullOrEmpty(selectname)) { + if (string.IsNullOrEmpty(selectname)) + { match = tvTextureSets.Nodes[tvTextureSets.Nodes.Count - 1]; - } else { + } + else + { match = findNodeByName(tvTextureSets.Nodes, selectname); } - if (match != null) { + if (match != null) + { IFilledTextureSet set = (match.Tag as IFilledTextureSet); - - foreach (ImageData img in set.Textures) { - if (img.LongName == longname) { + foreach (ImageData img in set.Textures) + { + if (img.LongName == longname) + { selectedset = match; break; } @@ -137,8 +143,10 @@ namespace CodeImp.DoomBuilder.Windows } //mxd. If the selected texture was not found in the last-selected set, try finding it in the other sets - if (selectedset == null && selecttexture != "-") { - foreach (TreeNode n in tvTextureSets.Nodes) { + if (selectedset == null && selecttexture != "-") + { + foreach (TreeNode n in tvTextureSets.Nodes) + { selectedset = findTextureByLongName(n, longname); if (selectedset != null) break; } @@ -169,12 +177,15 @@ namespace CodeImp.DoomBuilder.Windows this.WindowState = (FormWindowState)General.Settings.ReadSetting("browserwindow.windowstate", (int)FormWindowState.Normal); //mxd - if (this.WindowState == FormWindowState.Normal) { + if (this.WindowState == FormWindowState.Normal) + { Point location = new Point(General.Settings.ReadSetting("browserwindow.positionx", int.MaxValue), General.Settings.ReadSetting("browserwindow.positiony", int.MaxValue)); - - if (location.X < int.MaxValue && location.Y < int.MaxValue) { + if (location.X < int.MaxValue && location.Y < int.MaxValue) + { this.Location = location; - } else { + } + else + { this.StartPosition = FormStartPosition.CenterParent; } } @@ -194,7 +205,8 @@ namespace CodeImp.DoomBuilder.Windows //first search in child nodes TreeNode match; - foreach(TreeNode n in node.Nodes) { + foreach(TreeNode n in node.Nodes) + { match = findTextureByLongName(n, longname); if(match != null) return match; } @@ -219,7 +231,8 @@ namespace CodeImp.DoomBuilder.Windows //mxd private static TreeNode findNodeByName(TreeNodeCollection nodes, string selectname) { - foreach (TreeNode n in nodes) { + foreach (TreeNode n in nodes) + { if (n.Name == selectname) return n; TreeNode match = findNodeByName(n.Nodes, selectname); @@ -232,43 +245,47 @@ namespace CodeImp.DoomBuilder.Windows private void createNodes(TreeNode root) { ResourceTextureSet set = root.Tag as ResourceTextureSet; - if (set == null) { + if (set == null) + { General.ErrorLogger.Add(ErrorType.Error, "Resource " + root.Name + " doesn't have TextureSet!"); return; } int imageIndex = set.Location.type + 4; - string[] separator = new[] { Path.DirectorySeparatorChar.ToString() }; + char[] separator = new[] { Path.AltDirectorySeparatorChar }; - ImageData[] textures; + ImageData[] images; if (browseFlats) { - textures = new ImageData[set.Flats.Count]; - set.Flats.CopyTo(textures, 0); + images = new ImageData[set.Flats.Count]; + set.Flats.CopyTo(images, 0); } else { - textures = new ImageData[set.Textures.Count]; - set.Textures.CopyTo(textures, 0); + images = new ImageData[set.Textures.Count]; + set.Textures.CopyTo(images, 0); } - Array.Sort(textures, sortImageData); + Array.Sort(images, sortImageData); - foreach (ImageData image in textures) { - string localName = image.FullName.Replace(set.Location.location, ""); - string[] parts = localName.Split(separator, StringSplitOptions.RemoveEmptyEntries); + foreach(ImageData image in images) + { + string[] parts = image.VirtualName.Split(separator, StringSplitOptions.RemoveEmptyEntries); TreeNode curNode = root; if (parts.Length == 1) continue; int localindex = parts[0] == "[TEXTURES]" ? 7 : imageIndex; - for (int i = 0; i < parts.Length - 1; i++) { + for (int i = 0; i < parts.Length - 1; i++) + { string category = parts[i]; //already got such category? - if (curNode.Nodes.Count > 0 && curNode.Nodes.ContainsKey(category)) { + if (curNode.Nodes.Count > 0 && curNode.Nodes.ContainsKey(category)) + { curNode = curNode.Nodes[category]; - - } else { //create a new one + } + else //create a new one + { TreeNode n = new TreeNode(category) { Name = category, ImageIndex = localindex, SelectedImageIndex = localindex }; curNode.Nodes.Add(n); @@ -279,9 +296,11 @@ namespace CodeImp.DoomBuilder.Windows } //add to current and parent nodes - if (i == parts.Length - 2) { + if (i == parts.Length - 2) + { TreeNode cn = curNode; - while (cn != root) { + while (cn != root) + { ResourceTextureSet curTs = cn.Tag as ResourceTextureSet; if (image.IsFlat) curTs.AddFlat(image); @@ -293,7 +312,8 @@ namespace CodeImp.DoomBuilder.Windows } } - if (root.Nodes.Count == 1 && root.Nodes[0].Nodes.Count > 0) { + if (root.Nodes.Count == 1 && root.Nodes[0].Nodes.Count > 0) + { TreeNode[] children = new TreeNode[root.Nodes[0].Nodes.Count]; root.Nodes[0].Nodes.CopyTo(children, 0); root.Nodes.Clear(); @@ -335,7 +355,8 @@ namespace CodeImp.DoomBuilder.Windows // Set selected name and close if(browser.SelectedItem != null) { - selectedname = browser.SelectedItem.Text; + ImageBrowserItem item = browser.SelectedItem as ImageBrowserItem; + selectedname = item.icon.Name; DialogResult = DialogResult.OK; } else @@ -450,22 +471,25 @@ namespace CodeImp.DoomBuilder.Windows // Start adding browser.BeginAdding(false); - if (browseFlats) { + if (browseFlats) + { // Add all available flats foreach(ImageData img in set.Flats) - browser.Add(img.Name, img, img, availgroup); + browser.Add(img.DisplayName, img, img, availgroup); // Add all used flats foreach(ImageData img in set.Flats) - if(img.UsedInMap) browser.Add(img.Name, img, img, usedgroup); - }else{ + if(img.UsedInMap) browser.Add(img.DisplayName, img, img, usedgroup); + } + else + { // Add all available textures and mark the images for temporary loading foreach (ImageData img in set.Textures) - browser.Add(img.Name, img, img, availgroup); + browser.Add(img.DisplayName, img, img, availgroup); // Add all used textures and mark the images for permanent loading foreach (ImageData img in set.Textures) - if (img.UsedInMap) browser.Add(img.Name, img, img, usedgroup); + if(img.UsedInMap) browser.Add(img.DisplayName, img, img, usedgroup); } // Done adding @@ -496,14 +520,17 @@ namespace CodeImp.DoomBuilder.Windows } //mxd - private void tvTextureSets_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { + private void tvTextureSets_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) + { selectedset = e.Node; FillImagesList(); } //mxd - private void tvTextureSets_KeyUp(object sender, KeyEventArgs e) { - if(tvTextureSets.SelectedNode != selectedset) { + private void tvTextureSets_KeyUp(object sender, KeyEventArgs e) + { + if(tvTextureSets.SelectedNode != selectedset) + { selectedset = tvTextureSets.SelectedNode; FillImagesList(); } diff --git a/Source/Core/ZDoom/PatchStructure.cs b/Source/Core/ZDoom/PatchStructure.cs index 5c9d66b2..3fa6e847 100644 --- a/Source/Core/ZDoom/PatchStructure.cs +++ b/Source/Core/ZDoom/PatchStructure.cs @@ -90,6 +90,9 @@ namespace CodeImp.DoomBuilder.ZDoom return; } + //mxd + name = name.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); + // Now we should find a comma parser.SkipWhitespace(true); tokenstr = parser.ReadToken(); diff --git a/Source/Core/ZDoom/TextureStructure.cs b/Source/Core/ZDoom/TextureStructure.cs index e4369ce3..df2e6f55 100644 --- a/Source/Core/ZDoom/TextureStructure.cs +++ b/Source/Core/ZDoom/TextureStructure.cs @@ -70,8 +70,6 @@ namespace CodeImp.DoomBuilder.ZDoom // Constructor internal TextureStructure(TexturesParser parser, string typename) { - string tokenstr; - // Initialize this.typename = typename; patches = new List(4); @@ -92,7 +90,7 @@ namespace CodeImp.DoomBuilder.ZDoom // Now we should find a comma parser.SkipWhitespace(true); - tokenstr = parser.ReadToken(); + string tokenstr = parser.ReadToken(); if(tokenstr != ",") { parser.ReportError("Expected a comma"); @@ -264,7 +262,7 @@ namespace CodeImp.DoomBuilder.ZDoom if(yscale == 0.0f) scaley = defaultscale; else scaley = 1f / yscale; // Make texture - HighResImage tex = new HighResImage(name, typename, width, height, scalex, scaley, worldpanning); + HighResImage tex = new HighResImage(name, width, height, scalex, scaley, worldpanning, typename == "flat"); // Add patches foreach(PatchStructure p in patches) diff --git a/Source/Core/ZDoom/TexturesParser.cs b/Source/Core/ZDoom/TexturesParser.cs index 221a55fc..8a369407 100644 --- a/Source/Core/ZDoom/TexturesParser.cs +++ b/Source/Core/ZDoom/TexturesParser.cs @@ -19,6 +19,7 @@ using System; using System.Collections.Generic; using System.IO; +using CodeImp.DoomBuilder.Data; #endregion @@ -36,9 +37,9 @@ namespace CodeImp.DoomBuilder.ZDoom #region ================== Variables - private Dictionary textures; - private Dictionary flats; - private Dictionary sprites; + private readonly Dictionary textures; + private readonly Dictionary flats; + private readonly Dictionary sprites; #endregion @@ -90,7 +91,7 @@ namespace CodeImp.DoomBuilder.ZDoom if(this.HasError) break; // if a limit for the texture name length is set make sure that it's not exceeded - if((General.Map.Config.MaxTextureNameLength > 0) && (tx.Name.Length > General.Map.Config.MaxTextureNameLength)) + if(tx.Name.Length > General.Map.Config.MaxTextureNameLength) { General.ErrorLogger.Add(ErrorType.Error, "Texture name \"" + tx.Name + "\" too long. Texture names must have a length of " + General.Map.Config.MaxTextureNameLength + " characters or less"); } @@ -108,9 +109,9 @@ namespace CodeImp.DoomBuilder.ZDoom if(this.HasError) break; // if a limit for the sprite name length is set make sure that it's not exceeded - if((General.Map.Config.MaxTextureNameLength > 0) && (tx.Name.Length > General.Map.Config.MaxTextureNameLength)) + if(tx.Name.Length > DataManager.CLASIC_IMAGE_NAME_LENGTH) { - General.ErrorLogger.Add(ErrorType.Error, "Sprite name \"" + tx.Name + "\" too long. Sprite names must have a length of " + General.Map.Config.MaxTextureNameLength + " characters or less"); + General.ErrorLogger.Add(ErrorType.Error, "Sprite name \"" + tx.Name + "\" too long. Sprite names must have a length of " + DataManager.CLASIC_IMAGE_NAME_LENGTH + " characters or less"); } else { @@ -125,7 +126,7 @@ namespace CodeImp.DoomBuilder.ZDoom if(this.HasError) break; // if a limit for the walltexture name length is set make sure that it's not exceeded - if((General.Map.Config.MaxTextureNameLength > 0) && (tx.Name.Length > General.Map.Config.MaxTextureNameLength)) + if(tx.Name.Length > General.Map.Config.MaxTextureNameLength) { General.ErrorLogger.Add(ErrorType.Error, "WallTexture name \"" + tx.Name + "\" too long. WallTexture names must have a length of " + General.Map.Config.MaxTextureNameLength + " characters or less"); } @@ -143,7 +144,7 @@ namespace CodeImp.DoomBuilder.ZDoom if(this.HasError) break; // if a limit for the flat name length is set make sure that it's not exceeded - if((General.Map.Config.MaxTextureNameLength > 0) && (tx.Name.Length > General.Map.Config.MaxTextureNameLength)) + if(tx.Name.Length > General.Map.Config.MaxTextureNameLength) { General.ErrorLogger.Add(ErrorType.Error, "Flat name \"" + tx.Name + "\" too long. Flat names must have a length of " + General.Map.Config.MaxTextureNameLength + " characters or less"); } diff --git a/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs b/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs index 8c17907f..49f83d46 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs @@ -72,7 +72,7 @@ namespace CodeImp.DoomBuilder.BuilderModes List objs = new List(); // Interpret the replacement - if(replace && (string.IsNullOrEmpty(replacewith) || replacewith.Length > 8)) + if(replace && (string.IsNullOrEmpty(replacewith) || replacewith.Length > General.Map.Config.MaxTextureNameLength)) { MessageBox.Show("Invalid replace value for this search type!", "Find and Replace", MessageBoxButtons.OK, MessageBoxIcon.Error); return objs.ToArray(); diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs b/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs index fa39cb18..4fd0093e 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs @@ -65,7 +65,7 @@ namespace CodeImp.DoomBuilder.BuilderModes List objs = new List(); // Interpret the replacement - if(replace && (string.IsNullOrEmpty(replacewith) || replacewith.Length > 8)) + if(replace && (string.IsNullOrEmpty(replacewith) || replacewith.Length > General.Map.Config.MaxTextureNameLength)) { MessageBox.Show("Invalid replace value for this search type!", "Find and Replace", MessageBoxButtons.OK, MessageBoxIcon.Error); return objs.ToArray(); diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs b/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs index faf1e56f..458779ef 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs @@ -65,7 +65,7 @@ namespace CodeImp.DoomBuilder.BuilderModes List objs = new List(); // Interpret the replacement - if(replace && (string.IsNullOrEmpty(replacewith) || replacewith.Length > 8)) + if(replace && (string.IsNullOrEmpty(replacewith) || replacewith.Length > General.Map.Config.MaxTextureNameLength)) { MessageBox.Show("Invalid replace value for this search type!", "Find and Replace", MessageBoxButtons.OK, MessageBoxIcon.Error); return objs.ToArray(); diff --git a/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs b/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs index c9bbc999..536c9d2e 100644 --- a/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs +++ b/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs @@ -485,7 +485,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.toolStripMenuItem5.Name = "toolStripMenuItem5"; this.toolStripMenuItem5.Size = new System.Drawing.Size(229, 22); this.toolStripMenuItem5.Tag = "exporttoobj"; - this.toolStripMenuItem5.Text = "Selection To Wavefront .obj..."; + this.toolStripMenuItem5.Text = "Selection to Wavefront .obj..."; this.toolStripMenuItem5.Click += new System.EventHandler(this.InvokeTaggedAction); // // buttoncopyproperties