From dd5689766d0ba521e24562e3633f3410267216bc Mon Sep 17 00:00:00 2001 From: MaxED <j.maxed@gmail.com> Date: Mon, 23 Mar 2015 14:19:23 +0000 Subject: [PATCH] Changed, Numeric textboxes: you can now hold Ctrl or Shift keys while clicking a textbox buttons or using mouse wheel on a textbox to change value increment step. Changed, Numeric textboxes: trailing zeros are no longer displayed to reduce visual noise. Fixed, paired numeric controls: in some cases culture-specific decimal separator was not used. Fixed, map loading: inability to initialize D3D device is now handled a bit more gracefully. Fixed, main toolbar context menu: we should suppress context menu closing only when user clicks on a menu item while holding Shift key. Fixed, Game configurations: several Skulltag things were not included in many Zandronum game configurations. --- .../Includes/Skulltag_things.cfg | 31 ++- .../Includes/Zandronum_things.cfg | 2 +- Build/Configurations/Zandronum_DoomDoom.cfg | 1 + Build/Configurations/Zandronum_DoomHexen.cfg | 1 + Build/Configurations/Zandronum_DoomUDMF.cfg | 1 + .../Configurations/Zandronum_HereticDoom.cfg | 1 + .../Configurations/Zandronum_HereticHexen.cfg | 1 + .../Configurations/Zandronum_HereticUDMF.cfg | 1 + Build/Configurations/Zandronum_HexenHexen.cfg | 1 + Build/Configurations/Zandronum_HexenUDMF.cfg | 1 + Build/Configurations/Zandronum_StrifeDoom.cfg | 1 + .../Configurations/Zandronum_StrifeHexen.cfg | 1 + Build/Configurations/Zandronum_StrifeUDMF.cfg | 1 + Build/Sprites/Zone.png | Bin 0 -> 308 bytes Clean Rebuild.bat | 139 +++++++++++ Source/Core/Controls/AutoSelectTextbox.cs | 8 + .../ButtonsNumericTextbox.Designer.cs | 5 + Source/Core/Controls/ButtonsNumericTextbox.cs | 59 ++++- .../Core/Controls/ButtonsNumericTextbox.resx | 219 +++++++++--------- Source/Core/Controls/NumericTextbox.cs | 24 +- .../GZBuilder/Controls/PairedFieldsControl.cs | 20 +- .../GZBuilder/Controls/PairedFloatControl.cs | 13 +- Source/Core/General/General.cs | 32 +-- Source/Core/Resources/Actions.cfg | 2 +- Source/Core/Windows/MainForm.cs | 2 +- 25 files changed, 403 insertions(+), 164 deletions(-) create mode 100644 Build/Sprites/Zone.png create mode 100644 Clean Rebuild.bat diff --git a/Build/Configurations/Includes/Skulltag_things.cfg b/Build/Configurations/Includes/Skulltag_things.cfg index 3b9d4b887..c1b43c314 100644 --- a/Build/Configurations/Includes/Skulltag_things.cfg +++ b/Build/Configurations/Includes/Skulltag_things.cfg @@ -20,8 +20,8 @@ skulltag height = 16; } } - - flags + + flags { color = 13; // Light Magenta arrow = 0; @@ -32,9 +32,18 @@ skulltag hangs = 0; blocking = 0; - 5067 = "Skull Return Zone"; - 5068 = "Spring Pad Zone"; - } + 5067 + { + title = "Skull Return Zone"; + sprite = "internal:Zone"; + } + + 5068 + { + title = "Spring Pad Zone"; + sprite = "internal:Zone"; + } + } obstacles { @@ -76,7 +85,7 @@ skulltag // New things available in Doom, Heretic and Hexen; but not in Chex or Strife doomheretichexen { - // New powerups + // New powerups powerups { color = 9; // Light Blue @@ -90,20 +99,20 @@ doomheretichexen 5030 { - title = "Turbosphere"; + title = "Turbo Sphere"; sprite = "TURBA0"; height = 45; } 5032 { - title = "Time freeze sphere"; + title = "Time-freeze Sphere"; sprite = "TIMEA0"; height = 45; } 5035 { - title = "Invisibility sphere"; - sprite = "INVSA0"; + title = "Invisibility Sphere"; + sprite = "SINVA0"; height = 45; } 5036 @@ -114,7 +123,7 @@ doomheretichexen } 5037 { - title = "Guardsphere"; + title = "Guard Sphere"; sprite = "GARDA0"; height = 45; } diff --git a/Build/Configurations/Includes/Zandronum_things.cfg b/Build/Configurations/Includes/Zandronum_things.cfg index 1b8eb5fd4..182966a1f 100644 --- a/Build/Configurations/Includes/Zandronum_things.cfg +++ b/Build/Configurations/Includes/Zandronum_things.cfg @@ -42,6 +42,6 @@ strife default { include("Zandronum_common.cfg", "zandronum") - //include("Skulltag_things.cfg", "skulltag") + //include("Skulltag_things.cfg", "skulltag") } diff --git a/Build/Configurations/Zandronum_DoomDoom.cfg b/Build/Configurations/Zandronum_DoomDoom.cfg index eb4390fb9..1a3aac1e4 100644 --- a/Build/Configurations/Zandronum_DoomDoom.cfg +++ b/Build/Configurations/Zandronum_DoomDoom.cfg @@ -58,6 +58,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "doom"); } diff --git a/Build/Configurations/Zandronum_DoomHexen.cfg b/Build/Configurations/Zandronum_DoomHexen.cfg index 98a83a4aa..28cb87564 100644 --- a/Build/Configurations/Zandronum_DoomHexen.cfg +++ b/Build/Configurations/Zandronum_DoomHexen.cfg @@ -62,6 +62,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "doom"); } diff --git a/Build/Configurations/Zandronum_DoomUDMF.cfg b/Build/Configurations/Zandronum_DoomUDMF.cfg index e1a96369b..06707bfbb 100644 --- a/Build/Configurations/Zandronum_DoomUDMF.cfg +++ b/Build/Configurations/Zandronum_DoomUDMF.cfg @@ -67,6 +67,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "doom"); } diff --git a/Build/Configurations/Zandronum_HereticDoom.cfg b/Build/Configurations/Zandronum_HereticDoom.cfg index 98ff72028..49ddfebc9 100644 --- a/Build/Configurations/Zandronum_HereticDoom.cfg +++ b/Build/Configurations/Zandronum_HereticDoom.cfg @@ -57,6 +57,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "heretic"); } diff --git a/Build/Configurations/Zandronum_HereticHexen.cfg b/Build/Configurations/Zandronum_HereticHexen.cfg index 06f8ccb45..028dd5311 100644 --- a/Build/Configurations/Zandronum_HereticHexen.cfg +++ b/Build/Configurations/Zandronum_HereticHexen.cfg @@ -61,6 +61,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "heretic"); } diff --git a/Build/Configurations/Zandronum_HereticUDMF.cfg b/Build/Configurations/Zandronum_HereticUDMF.cfg index 46975e43e..4a28627ff 100644 --- a/Build/Configurations/Zandronum_HereticUDMF.cfg +++ b/Build/Configurations/Zandronum_HereticUDMF.cfg @@ -66,6 +66,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "heretic"); } diff --git a/Build/Configurations/Zandronum_HexenHexen.cfg b/Build/Configurations/Zandronum_HexenHexen.cfg index 5f61eee29..0ccc4c4ca 100644 --- a/Build/Configurations/Zandronum_HexenHexen.cfg +++ b/Build/Configurations/Zandronum_HexenHexen.cfg @@ -61,6 +61,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "hexen"); } diff --git a/Build/Configurations/Zandronum_HexenUDMF.cfg b/Build/Configurations/Zandronum_HexenUDMF.cfg index 11bf596a0..8748dc4ca 100644 --- a/Build/Configurations/Zandronum_HexenUDMF.cfg +++ b/Build/Configurations/Zandronum_HexenUDMF.cfg @@ -66,6 +66,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "hexen"); } diff --git a/Build/Configurations/Zandronum_StrifeDoom.cfg b/Build/Configurations/Zandronum_StrifeDoom.cfg index a4939a9e1..981117760 100644 --- a/Build/Configurations/Zandronum_StrifeDoom.cfg +++ b/Build/Configurations/Zandronum_StrifeDoom.cfg @@ -57,6 +57,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "strife"); } diff --git a/Build/Configurations/Zandronum_StrifeHexen.cfg b/Build/Configurations/Zandronum_StrifeHexen.cfg index 3f03a4846..f133d2ee0 100644 --- a/Build/Configurations/Zandronum_StrifeHexen.cfg +++ b/Build/Configurations/Zandronum_StrifeHexen.cfg @@ -61,6 +61,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "strife"); } diff --git a/Build/Configurations/Zandronum_StrifeUDMF.cfg b/Build/Configurations/Zandronum_StrifeUDMF.cfg index b207728b4..a82613717 100644 --- a/Build/Configurations/Zandronum_StrifeUDMF.cfg +++ b/Build/Configurations/Zandronum_StrifeUDMF.cfg @@ -66,6 +66,7 @@ thingtypes // Standard ZDoom actors include("Includes\\ZDoom_things.cfg", "zdoom"); // Additional actors from the engine + include("Includes\\Zandronum_things.cfg", "default"); include("Includes\\Zandronum_things.cfg", "strife"); } diff --git a/Build/Sprites/Zone.png b/Build/Sprites/Zone.png new file mode 100644 index 0000000000000000000000000000000000000000..3d60661ba0824b8ba094c526986658df1aa89ce1 GIT binary patch literal 308 zcmV-40n7f0P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy)=5M`RCwCNQ#%fWFbp+_YvmFgAQMYE zFtRbRF=l8M#J~aAxEvp)JWEDJv_N5~rQoOJ`RO?(f%l&7L`XLyYMSObXLF&}X{{er z*R}8a{^x}{v>%P*$Z}bhaZb~ethKwiEK8C)7LbcH#?UYfoDrX}bB_6o01mK`Bni#d z4jTs#eAMw21XNYU0!IrxakO%PIO72E?jS-DHsUxwB>*1y!VSei+qS1#0B>^#(n8mD ze1QB7Z(5Ks7DchxR7&mQ)flH~a(SL#`jzns{{9+Y0t^7y*eVQ}+XF2C0000<MNUMn GLSTXsy?X!v literal 0 HcmV?d00001 diff --git a/Clean Rebuild.bat b/Clean Rebuild.bat new file mode 100644 index 000000000..2d958f50a --- /dev/null +++ b/Clean Rebuild.bat @@ -0,0 +1,139 @@ +@ECHO OFF + +ECHO. +ECHO. This build script requires the following software to be installed: +ECHO. - Microsoft Visual Studio 2008 +ECHO. + +SET STUDIODIR=c:\Program Files (x86)\Microsoft Visual Studio 9.0 + +CALL "%STUDIODIR%\Common7\Tools\vsvars32.bat" + +DEL /F /Q "Build\Plugins\*.pdb" > NUL + +ECHO. +ECHO Compiling GZDoom Builder core... +ECHO. +IF EXIST "Build\Builder.exe" DEL /F /Q "Build\Builder.exe" > NUL +IF EXIST "Source\Core\obj" RD /S /Q "Source\Core\obj" +msbuild "Source\Core\Builder.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Builder.exe" GOTO FILEFAIL + +ECHO. +ECHO Setting /LARGEADDRESSAWARE flag... +ECHO. +"%STUDIODIR%\VC\bin\editbin.exe" /LARGEADDRESSAWARE "Build\Builder.exe" +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL + +ECHO. +ECHO Compiling Builder Effects plugin... +ECHO. +IF EXIST "Build\Plugins\BuilderEffects.dll" DEL /F /Q "Build\Plugins\BuilderEffects.dll" > NUL +IF EXIST "Source\Plugins\BuilderEffects\obj" RD /S /Q "Source\Plugins\BuilderEffects\obj" +msbuild "Source\Plugins\BuilderEffects\BuilderEffects.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\BuilderEffects.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Builder Modes plugin... +ECHO. +IF EXIST "Build\Plugins\BuilderModes.dll" DEL /F /Q "Build\Plugins\BuilderModes.dll" > NUL +IF EXIST "Source\Plugins\BuilderModes\obj" RD /S /Q "Source\Plugins\BuilderModes\obj" +msbuild "Source\Plugins\BuilderModes\BuilderModes.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\BuilderModes.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Color Picker plugin... +ECHO. +IF EXIST "Build\Plugins\ColorPicker.dll" DEL /F /Q "Build\Plugins\ColorPicker.dll" > NUL +IF EXIST "Source\Plugins\ColorPicker\obj" RD /S /Q "Source\Plugins\ColorPicker\obj" +msbuild "Source\Plugins\ColorPicker\ColorPicker.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\ColorPicker.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Comments Panel plugin... +ECHO. +IF EXIST "Build\Plugins\CommentsPanel.dll" DEL /F /Q "Build\Plugins\CommentsPanel.dll" > NUL +IF EXIST "Source\Plugins\CommentsPanel\obj" RD /S /Q "Source\Plugins\CommentsPanel\obj" +msbuild "Source\Plugins\CommentsPanel\CommentsPanel.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\CommentsPanel.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Nodes Viewer plugin... +ECHO. +IF EXIST "Build\Plugins\NodesViewer.dll" DEL /F /Q "Build\Plugins\NodesViewer.dll" > NUL +IF EXIST "Source\Plugins\NodesViewer\obj" RD /S /Q "Source\Plugins\NodesViewer\obj" +msbuild "Source\Plugins\NodesViewer\NodesViewer.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\NodesViewer.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Sound Propagation Mode plugin... +ECHO. +IF EXIST "Build\Plugins\SoundPropagationMode.dll" DEL /F /Q "Build\Plugins\SoundPropagationMode.dll" > NUL +IF EXIST "Source\Plugins\SoundPropagationMode\obj" RD /S /Q "Source\Plugins\SoundPropagationMode\obj" +msbuild "Source\Plugins\SoundPropagationMode\SoundPropagation.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\SoundPropagationMode.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Stair Sector Builder plugin... +ECHO. +IF EXIST "Build\Plugins\StairSectorBuilder.dll" DEL /F /Q "Build\Plugins\StairSectorBuilder.dll" > NUL +IF EXIST "Source\Plugins\StairSectorBuilder\obj" RD /S /Q "Source\Plugins\StairSectorBuilder\obj" +msbuild "Source\Plugins\StairSectorBuilder\StairSectorBuilder.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\StairSectorBuilder.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Tag Explorer plugin... +ECHO. +IF EXIST "Build\Plugins\TagExplorer.dll" DEL /F /Q "Build\Plugins\TagExplorer.dll" > NUL +IF EXIST "Source\Plugins\TagExplorer\obj" RD /S /Q "Source\Plugins\TagExplorer\obj" +msbuild "Source\Plugins\TagExplorer\TagExplorer.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\TagExplorer.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Tag Range plugin... +ECHO. +IF EXIST "Build\Plugins\TagRange.dll" DEL /F /Q "Build\Plugins\TagRange.dll" > NUL +IF EXIST "Source\Plugins\TagRange\obj" RD /S /Q "Source\Plugins\TagRange\obj" +msbuild "Source\Plugins\TagRange\TagRange.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\TagRange.dll" GOTO FILEFAIL + +ECHO. +ECHO Compiling Visplane Explorer plugin... +ECHO. +IF EXIST "Build\Plugins\VisplaneExplorer.dll" DEL /F /Q "Build\Plugins\VisplaneExplorer.dll" > NUL +IF EXIST "Source\Plugins\VisplaneExplorer\obj" RD /S /Q "Source\Plugins\VisplaneExplorer\obj" +msbuild "Source\Plugins\VisplaneExplorer\VisplaneExplorer.csproj" /t:Rebuild /p:Configuration=Release /p:Platform=x86 /v:minimal +IF %ERRORLEVEL% NEQ 0 GOTO ERRORFAIL +IF NOT EXIST "Build\Plugins\VisplaneExplorer.dll" GOTO FILEFAIL + +ECHO. +ECHO. BUILD DONE ! +ECHO. +PAUSE > NUL +GOTO LEAVE + +:ERRORFAIL +ECHO. +ECHO. BUILD FAILED (Tool returned error %ERRORLEVEL%) +ECHO. +PAUSE > NUL +GOTO LEAVE + +:FILEFAIL +ECHO. +ECHO. BUILD FAILED (Output file was not built) +ECHO. +PAUSE > NUL +GOTO LEAVE + +:LEAVE diff --git a/Source/Core/Controls/AutoSelectTextbox.cs b/Source/Core/Controls/AutoSelectTextbox.cs index 3105a58ec..b96fb04d3 100644 --- a/Source/Core/Controls/AutoSelectTextbox.cs +++ b/Source/Core/Controls/AutoSelectTextbox.cs @@ -79,6 +79,14 @@ namespace CodeImp.DoomBuilder.Controls base.OnKeyDown(e); eventcount++; } + + //mxd + new public bool Focus() + { + bool result = base.Focus(); + this.Select(0, 0); + return result; + } #endregion } diff --git a/Source/Core/Controls/ButtonsNumericTextbox.Designer.cs b/Source/Core/Controls/ButtonsNumericTextbox.Designer.cs index fead3e51a..c9ae97fe8 100644 --- a/Source/Core/Controls/ButtonsNumericTextbox.Designer.cs +++ b/Source/Core/Controls/ButtonsNumericTextbox.Designer.cs @@ -28,7 +28,9 @@ namespace CodeImp.DoomBuilder.Controls /// </summary> private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.buttons = new System.Windows.Forms.VScrollBar(); + this.tooltip = new System.Windows.Forms.ToolTip(this.components); this.textbox = new CodeImp.DoomBuilder.Controls.NumericTextbox(); this.SuspendLayout(); // @@ -42,12 +44,14 @@ namespace CodeImp.DoomBuilder.Controls this.buttons.Size = new System.Drawing.Size(18, 24); this.buttons.TabIndex = 1; this.buttons.ValueChanged += new System.EventHandler(this.buttons_ValueChanged); + this.buttons.MouseEnter += new System.EventHandler(this.buttons_MouseEnter); // // textbox // this.textbox.AllowDecimal = false; this.textbox.AllowNegative = false; this.textbox.AllowRelative = false; + this.textbox.ForeColor = System.Drawing.SystemColors.WindowText; this.textbox.ImeMode = System.Windows.Forms.ImeMode.Off; this.textbox.Location = new System.Drawing.Point(0, 2); this.textbox.Name = "textbox"; @@ -75,5 +79,6 @@ namespace CodeImp.DoomBuilder.Controls private NumericTextbox textbox; private System.Windows.Forms.VScrollBar buttons; + private System.Windows.Forms.ToolTip tooltip; } } diff --git a/Source/Core/Controls/ButtonsNumericTextbox.cs b/Source/Core/Controls/ButtonsNumericTextbox.cs index fa0d277a2..fc5b50d12 100644 --- a/Source/Core/Controls/ButtonsNumericTextbox.cs +++ b/Source/Core/Controls/ButtonsNumericTextbox.cs @@ -18,6 +18,7 @@ using System; using System.ComponentModel; +using System.Globalization; using System.Windows.Forms; #endregion @@ -41,21 +42,27 @@ namespace CodeImp.DoomBuilder.Controls private StepsList steps; private int stepsize = 1; private float stepsizeFloat = 1.0f; //mxd + private float stepsizeBig = 10.0f; //mxd + private float stepsizeSmall = 0.1f; //mxd private bool wrapsteps; //mxd + private bool usemodifierkeys; //mxd #endregion #region ================== Properties - public bool AllowDecimal { get { return textbox.AllowDecimal; } set { textbox.AllowDecimal = value; } } + public bool AllowDecimal { get { return textbox.AllowDecimal; } set { textbox.AllowDecimal = value; UpdateButtonsTooltip(); } } public bool AllowNegative { get { return textbox.AllowNegative; } set { textbox.AllowNegative = value; } } public bool AllowRelative { get { return textbox.AllowRelative; } set { textbox.AllowRelative = value; } } public int ButtonStep { get { return stepsize; } set { stepsize = value; } } public float ButtonStepFloat { get { return stepsizeFloat; } set { stepsizeFloat = value; } } //mxd. This is used when AllowDecimal is true + public float ButtonStepBig { get { return stepsizeBig; } set { stepsizeBig = value; } } //mxd + public float ButtonStepSmall { get { return stepsizeSmall; } set { stepsizeSmall = value; } } //mxd override public string Text { get { return textbox.Text; } set { textbox.Text = value; } } internal NumericTextbox Textbox { get { return textbox; } } - public StepsList StepValues { get { return steps; } set { steps = value; } } + public StepsList StepValues { get { return steps; } set { steps = value; UpdateButtonsTooltip(); } } public bool ButtonStepsWrapAround { get { return wrapsteps; } set { wrapsteps = value; } } + public bool ButtonStepsUseModifierKeys { get { return usemodifierkeys; } set { usemodifierkeys = value; UpdateButtonsTooltip(); } } #endregion @@ -67,6 +74,7 @@ namespace CodeImp.DoomBuilder.Controls InitializeComponent(); buttons.Value = 0; textbox.MouseWheel += textbox_MouseWheel; + UpdateButtonsTooltip(); //mxd } #endregion @@ -110,7 +118,7 @@ namespace CodeImp.DoomBuilder.Controls ignorebuttonchange = true; if(!textbox.CheckIsRelative()) { - if(steps != null) + if(steps != null && (!usemodifierkeys || (!textbox.ControlPressed && !textbox.ShiftPressed))) { if(buttons.Value < 0) textbox.Text = steps.GetNextHigherWrap(textbox.GetResult(0), wrapsteps).ToString(); //mxd @@ -119,13 +127,25 @@ namespace CodeImp.DoomBuilder.Controls } else if(textbox.AllowDecimal) { - float newvalue = (float)Math.Round(textbox.GetResultFloat(0.0f) - (buttons.Value * stepsizeFloat), General.Map.FormatInterface.VertexDecimals); + float stepsizemod; //mxd + if(usemodifierkeys) + stepsizemod = (textbox.ControlPressed ? stepsizeSmall : (textbox.ShiftPressed ? stepsizeBig : stepsizeFloat)); + else + stepsizemod = stepsizeFloat; + + float newvalue = (float)Math.Round(textbox.GetResultFloat(0.0f) - (buttons.Value * stepsizemod), General.Map.FormatInterface.VertexDecimals); if((newvalue < 0.0f) && !textbox.AllowNegative) newvalue = 0.0f; - textbox.Text = newvalue.ToString("0.0"); + textbox.Text = newvalue.ToString(); } else { - int newvalue = textbox.GetResult(0) - (buttons.Value * stepsize); + int stepsizemod; //mxd + if(usemodifierkeys) + stepsizemod = (textbox.ControlPressed ? (int)stepsizeSmall : (textbox.ShiftPressed ? (int)stepsizeBig : stepsize)); + else + stepsizemod = stepsize; + + int newvalue = textbox.GetResult(0) - (buttons.Value * stepsizemod); if((newvalue < 0) && !textbox.AllowNegative) newvalue = 0; textbox.Text = newvalue.ToString(); } @@ -140,10 +160,16 @@ namespace CodeImp.DoomBuilder.Controls } } + //mxd + private void buttons_MouseEnter(object sender, EventArgs e) + { + textbox.Focus(); + } + // Mouse wheel used private void textbox_MouseWheel(object sender, MouseEventArgs e) { - if(steps != null) + if(steps != null && (!usemodifierkeys || (!textbox.ControlPressed && !textbox.ShiftPressed))) { if(e.Delta > 0) textbox.Text = steps.GetNextHigher(textbox.GetResult(0)).ToString(); @@ -185,7 +211,24 @@ namespace CodeImp.DoomBuilder.Controls { return textbox.GetResultFloat(original); } - + + //mxd + public void UpdateButtonsTooltip() + { + if(usemodifierkeys) + { + string tip = "Hold Ctrl to change value by " + stepsizeSmall.ToString(CultureInfo.InvariantCulture) + "." + Environment.NewLine + + "Hold Shift to change value by " + stepsizeBig.ToString(CultureInfo.InvariantCulture) + "."; + tooltip.SetToolTip(buttons, tip); + textbox.UpdateTextboxStyle(tip); + } + else + { + tooltip.RemoveAll(); + textbox.UpdateTextboxStyle(); + } + } + #endregion } } diff --git a/Source/Core/Controls/ButtonsNumericTextbox.resx b/Source/Core/Controls/ButtonsNumericTextbox.resx index c225af085..d7c401628 100644 --- a/Source/Core/Controls/ButtonsNumericTextbox.resx +++ b/Source/Core/Controls/ButtonsNumericTextbox.resx @@ -1,129 +1,132 @@ <?xml version="1.0" encoding="utf-8"?> <root> <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" use="required" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> </xsd:schema> <resheader name="resmimetype"> - <value>text/microsoft-resx</value> + <value>text/microsoft-resx</value> </resheader> <resheader name="version"> - <value>2.0</value> + <value>2.0</value> </resheader> <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <metadata name="buttons.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> - <value>True</value> + <value>True</value> + </metadata> + <metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> </metadata> <metadata name="textbox.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> - <value>True</value> + <value>True</value> </metadata> <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> - <value>True</value> + <value>True</value> </metadata> </root> \ No newline at end of file diff --git a/Source/Core/Controls/NumericTextbox.cs b/Source/Core/Controls/NumericTextbox.cs index 62b443717..7c21f266b 100644 --- a/Source/Core/Controls/NumericTextbox.cs +++ b/Source/Core/Controls/NumericTextbox.cs @@ -38,6 +38,7 @@ namespace CodeImp.DoomBuilder.Controls private bool allowrelative; // Allow ++, --, * and / prefix for relative changes private bool allowdecimal; // Allow decimal (float) numbers private bool controlpressed; + private bool shiftpressed; //mxd private readonly ToolTip tooltip; //mxd #endregion @@ -48,6 +49,9 @@ namespace CodeImp.DoomBuilder.Controls public bool AllowRelative { get { return allowrelative; } set { allowrelative = value; UpdateTextboxStyle(); } } public bool AllowDecimal { get { return allowdecimal; } set { allowdecimal = value; } } + public bool ControlPressed { get { return controlpressed; } } //mxd + public bool ShiftPressed { get { return shiftpressed; } } //mxd + #endregion #region ================== Constructor / Disposer @@ -69,6 +73,7 @@ namespace CodeImp.DoomBuilder.Controls protected override void OnKeyDown(KeyEventArgs e) { controlpressed = e.Control; + shiftpressed = e.Shift; //mxd base.OnKeyDown(e); } @@ -76,6 +81,7 @@ namespace CodeImp.DoomBuilder.Controls protected override void OnKeyUp(KeyEventArgs e) { controlpressed = e.Control; + shiftpressed = e.Shift; //mxd base.OnKeyUp(e); } @@ -185,7 +191,7 @@ namespace CodeImp.DoomBuilder.Controls if(float.TryParse(textpart, NumberStyles.Float, CultureInfo.CurrentCulture, out value)) { if(value == Math.Round(value)) - this.Text = this.Text.Replace(textpart, value.ToString("0.0")); + this.Text = this.Text.Replace(textpart, value.ToString()); } } @@ -302,7 +308,7 @@ namespace CodeImp.DoomBuilder.Controls if(this.Text.StartsWith("/")) { // Divide original by number - if (!float.TryParse(textpart, NumberStyles.Float, CultureInfo.CurrentCulture, out result)) return original; + if(!float.TryParse(textpart, NumberStyles.Float, CultureInfo.CurrentCulture, out result)) return original; float newvalue = (float)Math.Round(original / result, 3); if(!allownegative && (newvalue < 0)) newvalue = 0; return newvalue; @@ -319,12 +325,22 @@ namespace CodeImp.DoomBuilder.Controls } //mxd - private void UpdateTextboxStyle() + public void UpdateTextboxStyle() + { + UpdateTextboxStyle(string.Empty); + } + + //mxd + public void UpdateTextboxStyle(string tip) { this.ForeColor = (allowrelative ? SystemColors.HotTrack : SystemColors.WindowText); if (allowrelative) { - tooltip.SetToolTip(this, "Use ++ or -- prefixes to change\r\nexisting values by given value.\r\nUse * or / prefixes to multiply\r\nor divide existing values by given value."); + tooltip.SetToolTip(this, "Use ++ or -- prefixes to change\r\nexisting values by given value.\r\nUse * or / prefixes to multiply\r\nor divide existing values by given value." + Environment.NewLine + tip); + } + else if(!string.IsNullOrEmpty(tip)) + { + tooltip.SetToolTip(this, tip); } else { diff --git a/Source/Core/GZBuilder/Controls/PairedFieldsControl.cs b/Source/Core/GZBuilder/Controls/PairedFieldsControl.cs index 951c98f35..ebed86814 100644 --- a/Source/Core/GZBuilder/Controls/PairedFieldsControl.cs +++ b/Source/Core/GZBuilder/Controls/PairedFieldsControl.cs @@ -1,6 +1,7 @@ #region ================== Namespaces using System; +using System.Globalization; using System.Windows.Forms; using CodeImp.DoomBuilder.Map; using CodeImp.DoomBuilder.GZBuilder.Tools; @@ -40,6 +41,9 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls public bool AllowDecimal { get { return value1.AllowDecimal; } set { value1.AllowDecimal = value; value2.AllowDecimal = value; } } public int ButtonStep { get { return value1.ButtonStep; } set { value1.ButtonStep = value; value2.ButtonStep = value; } } public float ButtonStepFloat { get { return value1.ButtonStepFloat; } set { value1.ButtonStepFloat = value; value2.ButtonStepFloat = value; } } + public float ButtonStepBig { get { return value1.ButtonStepBig; } set { value1.ButtonStepBig = value; value2.ButtonStepBig = value; } } + public float ButtonStepSmall { get { return value1.ButtonStepSmall; } set { value1.ButtonStepSmall = value; value2.ButtonStepSmall = value; } } + public bool ButtonStepsUseModifierKeys { get { return value1.ButtonStepsUseModifierKeys; } set { value1.ButtonStepsUseModifierKeys = value; value2.ButtonStepsUseModifierKeys = value; } } public bool AllowValueLinking { get { return allowValueLinking; } set { allowValueLinking = value; UpdateButtons(); } } public bool LinkValues { get { return linkValues; } set { linkValues = value; UpdateButtons(); } } @@ -66,16 +70,13 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls if(AllowDecimal) { - float val1 = UDMFTools.GetFloat(fields, field1, defaultValue); - newValue1 = (val1 == Math.Round(val1) ? val1.ToString("0.0") : val1.ToString()); - - float val2 = UDMFTools.GetFloat(fields, field2, defaultValue); - newValue2 = (val2 == Math.Round(val2) ? val2.ToString("0.0") : val2.ToString()); + newValue1 = ((float)Math.Round(UDMFTools.GetFloat(fields, field1, defaultValue), 2)).ToString(); + newValue2 = ((float)Math.Round(UDMFTools.GetFloat(fields, field2, defaultValue), 2)).ToString(); } else { - newValue1 = UDMFTools.GetFloat(fields, field1, defaultValue).ToString(); - newValue2 = UDMFTools.GetFloat(fields, field2, defaultValue).ToString(); + newValue1 = ((float)Math.Round(UDMFTools.GetFloat(fields, field1, defaultValue))).ToString(); + newValue2 = ((float)Math.Round(UDMFTools.GetFloat(fields, field2, defaultValue))).ToString(); } if(first) @@ -142,9 +143,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls private void bReset_Click(object sender, EventArgs e) { - string newValue = value1.AllowDecimal ? String.Format("{0:0.0}", defaultValue) : defaultValue.ToString(); - value1.Text = newValue; - value2.Text = newValue; + value1.Text = defaultValue.ToString(CultureInfo.CurrentCulture); + value2.Text = defaultValue.ToString(CultureInfo.CurrentCulture); CheckValues(); } diff --git a/Source/Core/GZBuilder/Controls/PairedFloatControl.cs b/Source/Core/GZBuilder/Controls/PairedFloatControl.cs index c930891f0..bb6250cc0 100644 --- a/Source/Core/GZBuilder/Controls/PairedFloatControl.cs +++ b/Source/Core/GZBuilder/Controls/PairedFloatControl.cs @@ -27,6 +27,9 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls public bool NonDefaultValue { get { return changed; } } public float DefaultValue { get { return defaultValue; } set { defaultValue = value; } } public float ButtonStep { get { return value1.ButtonStepFloat; } set { value1.ButtonStepFloat = value; value2.ButtonStepFloat = value; } } + public float ButtonStepBig { get { return value1.ButtonStepBig; } set { value1.ButtonStepBig = value; value2.ButtonStepBig = value; } } + public float ButtonStepSmall { get { return value1.ButtonStepSmall; } set { value1.ButtonStepSmall = value; value2.ButtonStepSmall = value; } } + public bool ButtonStepsUseModifierKeys { get { return value1.ButtonStepsUseModifierKeys; } set { value1.ButtonStepsUseModifierKeys = value; value2.ButtonStepsUseModifierKeys = value; } } #endregion @@ -41,15 +44,15 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls if (first) { - value1.Text = val1.ToString(CultureInfo.InvariantCulture); - value2.Text = val2.ToString(CultureInfo.InvariantCulture); + value1.Text = val1.ToString(CultureInfo.CurrentCulture); + value2.Text = val2.ToString(CultureInfo.CurrentCulture); } else { - if (!string.IsNullOrEmpty(value1.Text) && value1.Text != val1.ToString(CultureInfo.InvariantCulture)) + if(!string.IsNullOrEmpty(value1.Text) && value1.Text != val1.ToString(CultureInfo.CurrentCulture)) value1.Text = string.Empty; - if (!string.IsNullOrEmpty(value2.Text) && value2.Text != val2.ToString(CultureInfo.InvariantCulture)) + if(!string.IsNullOrEmpty(value2.Text) && value2.Text != val2.ToString(CultureInfo.CurrentCulture)) value2.Text = string.Empty; } @@ -79,7 +82,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls private void bReset_Click(object sender, EventArgs e) { - string newValue = String.Format("{0:0.0}", defaultValue); + string newValue = defaultValue.ToString(CultureInfo.CurrentCulture); value1.Text = newValue; value2.Text = newValue; CheckValues(); diff --git a/Source/Core/General/General.cs b/Source/Core/General/General.cs index 0cf89362f..2da64f9b0 100644 --- a/Source/Core/General/General.cs +++ b/Source/Core/General/General.cs @@ -1056,7 +1056,23 @@ namespace CodeImp.DoomBuilder // Create map manager with given options map = new MapManager(); - if(!map.InitializeNewMap(newoptions)) + if(map.InitializeNewMap(newoptions)) + { + settings.FindDefaultDrawSettings(); //mxd + + // Let the plugins know + plugins.OnMapNewEnd(); + + // All done + mainwindow.SetupInterface(); + mainwindow.RedrawDisplay(); + mainwindow.UpdateThingsFilters(); + mainwindow.UpdateInterface(); + mainwindow.AddHintsDocker(); //mxd + mainwindow.UpdateGZDoomPanel(); //mxd + mainwindow.HideInfo(); //mxd + } + else { // Unable to create map manager map.Dispose(); @@ -1066,20 +1082,6 @@ namespace CodeImp.DoomBuilder mainwindow.ShowSplashDisplay(); } - settings.FindDefaultDrawSettings(); //mxd - - // Let the plugins know - plugins.OnMapNewEnd(); - - // All done - mainwindow.SetupInterface(); - mainwindow.RedrawDisplay(); - mainwindow.UpdateThingsFilters(); - mainwindow.UpdateInterface(); - mainwindow.AddHintsDocker(); //mxd - mainwindow.UpdateGZDoomPanel(); //mxd - mainwindow.HideInfo(); //mxd - if(errorlogger.IsErrorAdded) { // Show any errors if preferred diff --git a/Source/Core/Resources/Actions.cfg b/Source/Core/Resources/Actions.cfg index cfba04b3a..55854e409 100644 --- a/Source/Core/Resources/Actions.cfg +++ b/Source/Core/Resources/Actions.cfg @@ -1231,7 +1231,7 @@ movethingback placethingatcursor { - title = "Move Thing To Cursor Location"; + title = "Move Thing to Cursor Location"; category = "visual"; description = "Moves selected Things to cursor location preserving relative offsets in Visual Modes."; allowkeys = true; diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs index 63b09ba29..040d8ef93 100644 --- a/Source/Core/Windows/MainForm.cs +++ b/Source/Core/Windows/MainForm.cs @@ -2083,7 +2083,7 @@ namespace CodeImp.DoomBuilder.Windows private void toolbarContextMenu_Closing(object sender, ToolStripDropDownClosingEventArgs e) { - e.Cancel = toolbarContextMenuShiftPressed; + e.Cancel = (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked && toolbarContextMenuShiftPressed); } private void toolbarContextMenu_KeyDown(object sender, KeyEventArgs e) -- GitLab