diff --git a/Source/Core/Actions/Action.cs b/Source/Core/Actions/Action.cs index 3a09361b..0cd16d59 100644 --- a/Source/Core/Actions/Action.cs +++ b/Source/Core/Actions/Action.cs @@ -49,6 +49,7 @@ namespace CodeImp.DoomBuilder.Actions private bool allowmouse; private bool allowscroll; private bool disregardshift; + private bool disregardcontrol; private bool repeat; // Delegate @@ -71,6 +72,7 @@ namespace CodeImp.DoomBuilder.Actions public bool AllowMouse { get { return allowmouse; } } public bool AllowScroll { get { return allowscroll; } } public bool DisregardShift { get { return disregardshift; } } + public bool DisregardControl { get { return disregardcontrol; } } public bool Repeat { get { return repeat; } } public bool BeginBound { get { return (begindelegates.Count > 0); } } public bool EndBound { get { return (enddelegates.Count > 0); } } @@ -92,20 +94,21 @@ namespace CodeImp.DoomBuilder.Actions this.allowmouse = cfg.ReadSetting(shortname + ".allowmouse", true); this.allowscroll = cfg.ReadSetting(shortname + ".allowscroll", false); this.disregardshift = cfg.ReadSetting(shortname + ".disregardshift", false); + this.disregardcontrol = cfg.ReadSetting(shortname + ".disregardcontrol", false); this.repeat = cfg.ReadSetting(shortname + ".repeat", false); this.defaultkey = cfg.ReadSetting(shortname + ".default", 0); this.begindelegates = new List(); this.enddelegates = new List(); if(disregardshift) - { - keymask = (int)Keys.Shift; // | (int)Keys.Control; - keymask = ~keymask; - } + keymask = (int)Keys.Shift; else - { - keymask = ~0; - } + keymask = 0; + + if(disregardcontrol) + keymask |= (int)Keys.Control; + + keymask = ~keymask; if(key == -1) { diff --git a/Source/Core/Resources/Actions.cfg b/Source/Core/Resources/Actions.cfg index 115713d7..36eb5bea 100644 --- a/Source/Core/Resources/Actions.cfg +++ b/Source/Core/Resources/Actions.cfg @@ -26,7 +26,8 @@ categories // allowkeys: Allows the user to bind standard keys to this action. // allowmouse: Allows the user to bind mouse buttons to this action. // allowscroll: Allows the user to bind the scrollwheel to this action. -// disregardshift: This action will trigger regardless if Shift or Control is used. +// disregardshift: This action will trigger regardless if Shift is used. +// disregardcontrol: This action will be triggered regardless if Control is used. // repeat: BeginAction will be called for automatic key repetition. // default: Default key is only used when the action is loaded for the first // time and the default key is not used by any other action. @@ -170,7 +171,7 @@ classicselect { title = "Select"; category = "classic"; - description = "Selects the highlighted item. Also allows selection by drawing a rectangle."; + description = "Selects the highlighted item. Also allows selection by dragging a rectangle. Hold shift while dragging a rectangle to toggle additive or normal selection."; allowkeys = true; allowmouse = true; allowscroll = false; @@ -181,11 +182,12 @@ classicedit { title = "Edit"; category = "classic"; - description = "Edits the properties of the selected items or drags the selected items. Also initiates drawing or inserts new things when no selection is made."; + description = "Edits the properties of the selected items or drags the selected items. Also initiates drawing or inserts new things when no selection is made. Can be used in combination with Control and Shift for the first drawn vertex."; allowkeys = true; allowmouse = true; allowscroll = false; disregardshift = true; + disregardcontrol = true; } scrollwest @@ -379,7 +381,7 @@ moveforward { title = "Move Forward"; category = "visual"; - description = "Moves the camera forward in 3D Visual Mode."; + description = "Moves the camera forward in 3D Visual Mode. Use in combination with Shift for double the speed."; allowkeys = true; allowmouse = true; allowscroll = true; @@ -390,7 +392,7 @@ movebackward { title = "Move Backward"; category = "visual"; - description = "Moves the camera backward in 3D Visual Mode."; + description = "Moves the camera backward in 3D Visual Mode. Use in combination with Shift for double the speed."; allowkeys = true; allowmouse = true; allowscroll = true; @@ -401,7 +403,7 @@ moveleft { title = "Move Left (strafe)"; category = "visual"; - description = "Strafes the camera left in 3D Visual Mode."; + description = "Strafes the camera left in 3D Visual Mode. Use in combination with Shift for double the speed."; allowkeys = true; allowmouse = true; allowscroll = true; @@ -412,7 +414,7 @@ moveright { title = "Move Right (strafe)"; category = "visual"; - description = "Strafes the camera right in 3D Visual Mode."; + description = "Strafes the camera right in 3D Visual Mode. Use in combination with Shift for double the speed."; allowkeys = true; allowmouse = true; allowscroll = true; @@ -423,7 +425,7 @@ moveup { title = "Move Up"; category = "visual"; - description = "Moves the camera up in 3D Visual Mode."; + description = "Moves the camera up in 3D Visual Mode. Use in combination with Shift for double the speed."; allowkeys = true; allowmouse = true; allowscroll = true; @@ -434,18 +436,7 @@ movedown { title = "Move Down"; category = "visual"; - description = "Moves the camera down in 3D Visual Mode."; - allowkeys = true; - allowmouse = true; - allowscroll = true; - disregardshift = true; -} - -movedoublespeed -{ - title = "Double Speed"; - category = "visual"; - description = "Double the movement speed for the Move actions in visual mode while holding this button."; + description = "Moves the camera down in 3D Visual Mode. Use in combination with Shift for double the speed."; allowkeys = true; allowmouse = true; allowscroll = true; @@ -770,7 +761,6 @@ visualselect allowkeys = true; allowmouse = true; allowscroll = false; - disregardshift = true; } visualedit @@ -781,7 +771,6 @@ visualedit allowkeys = true; allowmouse = true; allowscroll = false; - disregardshift = true; } createprefab diff --git a/Source/Core/VisualModes/VisualMode.cs b/Source/Core/VisualModes/VisualMode.cs index 5af199a3..1d62ad9b 100644 --- a/Source/Core/VisualModes/VisualMode.cs +++ b/Source/Core/VisualModes/VisualMode.cs @@ -69,7 +69,6 @@ namespace CodeImp.DoomBuilder.VisualModes private bool keyright; private bool keyup; private bool keydown; - private bool doublespeed; // Map protected VisualBlockMap blockmap; @@ -299,18 +298,6 @@ namespace CodeImp.DoomBuilder.VisualModes { keydown = false; } - - [BeginAction("movedoublespeed", BaseAction = true)] - public virtual void BeginDoubleSpeed() - { - doublespeed = true; - } - - [EndAction("movedoublespeed", BaseAction = true)] - public virtual void EndDoubleSpeed() - { - doublespeed = false; - } #endregion @@ -824,7 +811,7 @@ namespace CodeImp.DoomBuilder.VisualModes Vector3D upvec = new Vector3D(0.0f, 0.0f, 1.0f); // Move the camera - if(doublespeed) multiplier = MOVE_SPEED_MULTIPLIER * 2.0f; else multiplier = MOVE_SPEED_MULTIPLIER; + if(General.Interface.ShiftState) multiplier = MOVE_SPEED_MULTIPLIER * 2.0f; else multiplier = MOVE_SPEED_MULTIPLIER; if(keyforward) camdeltapos += camvec * cammovemul * (float)((double)General.Settings.MoveSpeed * multiplier * deltatime); if(keybackward) camdeltapos -= camvec * cammovemul * (float)((double)General.Settings.MoveSpeed * multiplier * deltatime); if(keyleft) camdeltapos -= camvecstrafe * cammovemul * (float)((double)General.Settings.MoveSpeed * multiplier * deltatime); diff --git a/Source/Core/Windows/PreferencesForm.Designer.cs b/Source/Core/Windows/PreferencesForm.Designer.cs index 6cc162a0..569eaa26 100644 --- a/Source/Core/Windows/PreferencesForm.Designer.cs +++ b/Source/Core/Windows/PreferencesForm.Designer.cs @@ -976,6 +976,8 @@ namespace CodeImp.DoomBuilder.Windows this.disregardshiftlabel.Name = "disregardshiftlabel"; this.disregardshiftlabel.Size = new System.Drawing.Size(245, 47); this.disregardshiftlabel.TabIndex = 9; + this.disregardshiftlabel.Tag = "The selected actions uses %s to modify its behavior. These modifiers can not be u" + + "sed in a key combination for this action."; this.disregardshiftlabel.Text = "The selected actions uses Shift, Alt and Control to modify its behavior. These mo" + "difiers can not be used in a key combination for this action."; this.disregardshiftlabel.Visible = false; diff --git a/Source/Core/Windows/PreferencesForm.cs b/Source/Core/Windows/PreferencesForm.cs index 66df84c5..5cf9df82 100644 --- a/Source/Core/Windows/PreferencesForm.cs +++ b/Source/Core/Windows/PreferencesForm.cs @@ -41,6 +41,7 @@ namespace CodeImp.DoomBuilder.Windows private PreferencesController controller; private bool allowapplycontrol = false; private bool disregardshift = false; + private bool disregardcontrol = false; private bool reloadresources = false; @@ -466,7 +467,7 @@ namespace CodeImp.DoomBuilder.Windows actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollUp | (int)Keys.Shift, "Shift+ScrollUp")); actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollDown | (int)Keys.Shift, "Shift+ScrollDown")); } - if(a.AllowMouse && !a.DisregardShift) + if(a.AllowMouse && !a.DisregardControl) { actioncontrol.Items.Add(new KeyControl(Keys.LButton | Keys.Control, "Ctrl+LButton")); actioncontrol.Items.Add(new KeyControl(Keys.MButton | Keys.Control, "Ctrl+MButton")); @@ -474,12 +475,12 @@ namespace CodeImp.DoomBuilder.Windows actioncontrol.Items.Add(new KeyControl(Keys.XButton1 | Keys.Control, "Ctrl+XButton1")); actioncontrol.Items.Add(new KeyControl(Keys.XButton2 | Keys.Control, "Ctrl+XButton2")); } - if(a.AllowScroll && !a.DisregardShift) + if(a.AllowScroll && !a.DisregardControl) { actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollUp | (int)Keys.Control, "Ctrl+ScrollUp")); actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollDown | (int)Keys.Control, "Ctrl+ScrollDown")); } - if(a.AllowMouse && !a.DisregardShift) + if(a.AllowMouse && !a.DisregardShift && !a.DisregardControl) { actioncontrol.Items.Add(new KeyControl(Keys.LButton | Keys.Shift | Keys.Control, "Ctrl+Shift+LButton")); actioncontrol.Items.Add(new KeyControl(Keys.MButton | Keys.Shift | Keys.Control, "Ctrl+Shift+MButton")); @@ -487,7 +488,7 @@ namespace CodeImp.DoomBuilder.Windows actioncontrol.Items.Add(new KeyControl(Keys.XButton1 | Keys.Shift | Keys.Control, "Ctrl+Shift+XButton1")); actioncontrol.Items.Add(new KeyControl(Keys.XButton2 | Keys.Shift | Keys.Control, "Ctrl+Shift+XButton2")); } - if(a.AllowScroll && !a.DisregardShift) + if(a.AllowScroll && !a.DisregardShift && !a.DisregardControl) { actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollUp | (int)Keys.Shift | (int)Keys.Control, "Ctrl+Shift+ScrollUp")); actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollDown | (int)Keys.Shift | (int)Keys.Control, "Ctrl+Shift+ScrollDown")); @@ -499,6 +500,7 @@ namespace CodeImp.DoomBuilder.Windows { Actions.Action action; KeyControl keycontrol; + string disregardkeys = ""; int key; // Anything selected? @@ -511,6 +513,7 @@ namespace CodeImp.DoomBuilder.Windows action = General.Actions[listactions.SelectedItems[0].Name]; key = (int)listactions.SelectedItems[0].SubItems[1].Tag; disregardshift = action.DisregardShift; + disregardcontrol = action.DisregardControl; // Enable panel actioncontrolpanel.Enabled = true; @@ -518,7 +521,16 @@ namespace CodeImp.DoomBuilder.Windows actiondescription.Text = action.Description; actioncontrol.SelectedIndex = -1; actionkey.Text = ""; - disregardshiftlabel.Visible = disregardshift; + + if(disregardshift && disregardcontrol) + disregardkeys = "Shift and Control"; + else if(disregardshift) + disregardkeys = "Shift"; + else if(disregardcontrol) + disregardkeys = "Control"; + + disregardshiftlabel.Text = disregardshiftlabel.Tag.ToString().Replace("%s", disregardkeys); + disregardshiftlabel.Visible = disregardshift | disregardcontrol; // Fill special controls list FillControlsList(action); @@ -590,7 +602,8 @@ namespace CodeImp.DoomBuilder.Windows allowapplycontrol = false; // Remove modifier keys from the key if needed - if(disregardshift) key &= ~(int)Keys.Modifiers; + if(disregardshift) key &= ~(int)Keys.Shift; + if(disregardcontrol) key &= ~(int)Keys.Control; // Deselect anything from the combobox actioncontrol.SelectedIndex = -1; diff --git a/Source/Plugins/BuilderModes/Resources/Actions.cfg b/Source/Plugins/BuilderModes/Resources/Actions.cfg index 8bf1a087..b193196a 100644 --- a/Source/Plugins/BuilderModes/Resources/Actions.cfg +++ b/Source/Plugins/BuilderModes/Resources/Actions.cfg @@ -20,7 +20,8 @@ categories // allowkeys: Allows the user to bind standard keys to this action. // allowmouse: Allows the user to bind mouse buttons to this action. // allowscroll: Allows the user to bind the scrollwheel to this action. -// disregardshift: This action will be triggered regardless if Shift or Control are used. +// disregardshift: This action will be triggered regardless if Shift is used. +// disregardcontrol: This action will be triggered regardless if Control is used. // repeat: BeginAction will be called for automatic key repetition. // // allowkeys and allowmouse are true by default, the others are false by default. @@ -107,6 +108,7 @@ drawpoint allowmouse = true; allowscroll = true; disregardshift = true; + disregardcontrol = true; } removepoint diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs index d787c4ea..3760ea3e 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs @@ -258,22 +258,18 @@ namespace CodeImp.DoomBuilder.BuilderModes // Edit button released public virtual void OnEditEnd() { - // Not using any modifier buttons - if(!General.Interface.ShiftState && !General.Interface.CtrlState && !General.Interface.AltState) + if(General.Interface.IsActiveWindow) { - if(General.Interface.IsActiveWindow) + List sectors = mode.GetSelectedSectors(); + DialogResult result = General.Interface.ShowEditSectors(sectors); + if(result == DialogResult.OK) { - List sectors = mode.GetSelectedSectors(); - DialogResult result = General.Interface.ShowEditSectors(sectors); - if(result == DialogResult.OK) + // Rebuild sector + foreach(Sector s in sectors) { - // Rebuild sector - foreach(Sector s in sectors) - { - VisualSector vs = mode.GetVisualSector(s); - if(vs != null) - (vs as BaseVisualSector).UpdateSectorGeometry(true); - } + VisualSector vs = mode.GetVisualSector(s); + if(vs != null) + (vs as BaseVisualSector).UpdateSectorGeometry(true); } } } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs index c93c468f..89d6267e 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs @@ -542,30 +542,26 @@ namespace CodeImp.DoomBuilder.BuilderModes // Edit button released public virtual void OnEditEnd() { - // Not using any modifier buttons - if(!General.Interface.ShiftState && !General.Interface.CtrlState && !General.Interface.AltState) + if(General.Interface.IsActiveWindow) { - if(General.Interface.IsActiveWindow) + List linedefs = mode.GetSelectedLinedefs(); + DialogResult result = General.Interface.ShowEditLinedefs(linedefs); + if(result == DialogResult.OK) { - List linedefs = mode.GetSelectedLinedefs(); - DialogResult result = General.Interface.ShowEditLinedefs(linedefs); - if(result == DialogResult.OK) + foreach(Linedef l in linedefs) { - foreach(Linedef l in linedefs) + if(l.Front != null) { - if(l.Front != null) - { - VisualSector vs = mode.GetVisualSector(l.Front.Sector); - if(vs != null) - (vs as BaseVisualSector).Changed = true; - } - - if(l.Back != null) - { - VisualSector vs = mode.GetVisualSector(l.Back.Sector); - if(vs != null) - (vs as BaseVisualSector).Changed = true; - } + VisualSector vs = mode.GetVisualSector(l.Front.Sector); + if(vs != null) + (vs as BaseVisualSector).Changed = true; + } + + if(l.Back != null) + { + VisualSector vs = mode.GetVisualSector(l.Back.Sector); + if(vs != null) + (vs as BaseVisualSector).Changed = true; } } } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs index e8a0d859..f10b6388 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs @@ -425,21 +425,17 @@ namespace CodeImp.DoomBuilder.BuilderModes // Edit button released public virtual void OnEditEnd() { - // Not using any modifier buttons - if(!General.Interface.ShiftState && !General.Interface.CtrlState && !General.Interface.AltState) + if(General.Interface.IsActiveWindow) { - if(General.Interface.IsActiveWindow) + List things = mode.GetSelectedThings(); + DialogResult result = General.Interface.ShowEditThings(things); + if(result == DialogResult.OK) { - List things = mode.GetSelectedThings(); - DialogResult result = General.Interface.ShowEditThings(things); - if(result == DialogResult.OK) + foreach(Thing t in things) { - foreach(Thing t in things) - { - VisualThing vt = mode.GetVisualThing(t); - if(vt != null) - (vt as BaseVisualThing).Changed = true; - } + VisualThing vt = mode.GetVisualThing(t); + if(vt != null) + (vt as BaseVisualThing).Changed = true; } } }