From b0d6867459798aebea2d8e0671ded018160c0694 Mon Sep 17 00:00:00 2001 From: MaxED Date: Thu, 10 Sep 2015 17:38:27 +0000 Subject: [PATCH] Fixed, "Synchronize selection between Visual and Classic modes" setting: vertex selection synchronization was not working when switching from Visual to Classic mode. Also fixed a typo in the setting's name. Fixed, StairSectorBuilder mode: settings form still used "Cancel OK" button order. --- .../Interface/PreferencesForm.Designer.cs | 2 +- .../VisualModes/BaseVisualMode.cs | 69 ++++++++++--------- .../VisualModes/BaseVisualVertex.cs | 15 +++- .../StairSectorBuilderForm.designer.cs | 4 +- 4 files changed, 51 insertions(+), 39 deletions(-) diff --git a/Source/Plugins/BuilderModes/Interface/PreferencesForm.Designer.cs b/Source/Plugins/BuilderModes/Interface/PreferencesForm.Designer.cs index d49b5a15..2d6b19e1 100644 --- a/Source/Plugins/BuilderModes/Interface/PreferencesForm.Designer.cs +++ b/Source/Plugins/BuilderModes/Interface/PreferencesForm.Designer.cs @@ -245,7 +245,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.syncSelection.Name = "syncSelection"; this.syncSelection.Size = new System.Drawing.Size(295, 17); this.syncSelection.TabIndex = 10; - this.syncSelection.Text = "Synchronise selection between Visual and Classic modes"; + this.syncSelection.Text = "Synchronize selection between Visual and Classic modes"; this.syncSelection.UseVisualStyleBackColor = true; // // dontMoveGeometryOutsideBounds diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs index fb1fc6ca..d161fdf1 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs @@ -89,9 +89,10 @@ namespace CodeImp.DoomBuilder.BuilderModes // List of selected objects when an action is performed private List selectedobjects; + //mxd. Used in Cut/PasteSelection actions - private List copyBuffer; - private Type lasthighlighttype; //mxd + private readonly List copybuffer; + private Type lasthighlighttype; private static bool gzdoomRenderingEffects = true; //mxd @@ -174,8 +175,9 @@ namespace CodeImp.DoomBuilder.BuilderModes // Initialize this.gravity = new Vector3D(0.0f, 0.0f, 0.0f); this.selectedobjects = new List(); + //mxd - this.copyBuffer = new List(); + this.copybuffer = new List(); this.selectioninfoupdatetimer = new Timer(); selectioninfoupdatetimer.Interval = 100; selectioninfoupdatetimer.Tick += SelectioninfoupdatetimerOnTick; @@ -1070,9 +1072,9 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Map.Map.ClearAllSelected(); //refill selection - List selectedSectors = new List(); - List selectedLines = new List(); - List selectedVertices = new List(); + List selectedsectorindices = new List(); + List selectedlineindices = new List(); + List selectedvertexindices = new List(); foreach(IVisualEventReceiver obj in selectedobjects) { @@ -1083,35 +1085,34 @@ namespace CodeImp.DoomBuilder.BuilderModes else if(obj is VisualFloor || obj is VisualCeiling) { VisualGeometry vg = obj as VisualGeometry; - - if(vg.Sector != null && vg.Sector.Sector != null && !selectedSectors.Contains(vg.Sector.Sector)) - selectedSectors.Add(vg.Sector.Sector); + if(vg.Sector != null && vg.Sector.Sector != null && !selectedsectorindices.Contains(vg.Sector.Sector.Index)) + { + selectedsectorindices.Add(vg.Sector.Sector.Index); + vg.Sector.Sector.Selected = true; + } } else if(obj is VisualLower || obj is VisualUpper || obj is VisualMiddleDouble || obj is VisualMiddleSingle || obj is VisualMiddle3D) { VisualGeometry vg = obj as VisualGeometry; - - if(vg.Sidedef != null && !selectedLines.Contains(vg.Sidedef.Line)) - selectedLines.Add(vg.Sidedef.Line); + if(vg.Sidedef != null && !selectedlineindices.Contains(vg.Sidedef.Line.Index)) + { + selectedlineindices.Add(vg.Sidedef.Line.Index); + vg.Sidedef.Line.Selected = true; + } } - else if (obj is VisualVertex) + else if(obj is VisualVertex) { VisualVertex v = obj as VisualVertex; - if(!selectedVertices.Contains(v.Vertex)) selectedVertices.Add(v.Vertex); + if(!selectedvertexindices.Contains(v.Vertex.Index)) + { + selectedvertexindices.Add(v.Vertex.Index); + v.Vertex.Selected = true; + } } } - - foreach(Sector s in selectedSectors) s.Selected = true; - foreach(Linedef l in selectedLines) l.Selected = true; - - if (selectedSectors.Count == 0) - { - foreach (Vertex v in selectedVertices) v.Selected = true; - } } - copyBuffer.Clear(); //mxd General.Map.Map.Update(); } @@ -3082,13 +3083,13 @@ namespace CodeImp.DoomBuilder.BuilderModes List objs = GetSelectedObjects(false, false, true, false); if (objs.Count == 0) return; - copyBuffer.Clear(); + copybuffer.Clear(); foreach (IVisualEventReceiver i in objs) { VisualThing vt = i as VisualThing; - if (vt != null) copyBuffer.Add(new ThingCopyData(vt.Thing)); + if (vt != null) copybuffer.Add(new ThingCopyData(vt.Thing)); } - General.Interface.DisplayStatus(StatusType.Info, "Copied " + copyBuffer.Count + " Things"); + General.Interface.DisplayStatus(StatusType.Info, "Copied " + copybuffer.Count + " Things"); } //mxd @@ -3098,7 +3099,7 @@ namespace CodeImp.DoomBuilder.BuilderModes CopySelection(); //Create undo - string rest = copyBuffer.Count + " thing" + (copyBuffer.Count > 1 ? "s." : "."); + string rest = copybuffer.Count + " thing" + (copybuffer.Count > 1 ? "s." : "."); CreateUndo("Cut " + rest); General.Interface.DisplayStatus(StatusType.Info, "Cut " + rest); @@ -3119,7 +3120,7 @@ namespace CodeImp.DoomBuilder.BuilderModes [BeginAction("pasteselection", BaseAction = true)] public void PasteSelection() { - if(copyBuffer.Count == 0) + if(copybuffer.Count == 0) { General.Interface.DisplayStatus(StatusType.Warning, "Nothing to paste, cut or copy some Things first!"); return; @@ -3133,7 +3134,7 @@ namespace CodeImp.DoomBuilder.BuilderModes return; } - string rest = copyBuffer.Count + " thing" + (copyBuffer.Count > 1 ? "s." : "."); + string rest = copybuffer.Count + " thing" + (copybuffer.Count > 1 ? "s." : "."); General.Map.UndoRedo.CreateUndo("Paste " + rest); General.Interface.DisplayStatus(StatusType.Info, "Pasted " + rest); @@ -3141,19 +3142,19 @@ namespace CodeImp.DoomBuilder.BuilderModes ClearSelection(); //get translated positions - Vector3D[] coords = new Vector3D[copyBuffer.Count]; - for (int i = 0; i < copyBuffer.Count; i++ ) - coords[i] = copyBuffer[i].Position; + Vector3D[] coords = new Vector3D[copybuffer.Count]; + for (int i = 0; i < copybuffer.Count; i++ ) + coords[i] = copybuffer[i].Position; Vector3D[] translatedCoords = TranslateCoordinates(coords, hitpos, true); //create things from copyBuffer - for (int i = 0; i < copyBuffer.Count; i++) + for (int i = 0; i < copybuffer.Count; i++) { Thing t = CreateThing(new Vector2D()); if (t != null) { - copyBuffer[i].ApplyTo(t); + copybuffer[i].ApplyTo(t); t.Move(translatedCoords[i]); //add thing to blockmap blockmap.AddThing(t); diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs index e5d4c3c4..b0289c8f 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Windows.Forms; using CodeImp.DoomBuilder.Geometry; using CodeImp.DoomBuilder.Map; +using CodeImp.DoomBuilder.Rendering; using CodeImp.DoomBuilder.VisualModes; #endregion @@ -14,8 +15,8 @@ namespace CodeImp.DoomBuilder.BuilderModes { #region ================== Variables - private BaseVisualMode mode; - private float cageradius2; + private readonly BaseVisualMode mode; + private readonly float cageradius2; private Vector3D boxp1; private Vector3D boxp2; @@ -36,6 +37,16 @@ namespace CodeImp.DoomBuilder.BuilderModes cageradius2 = DEFAULT_SIZE * General.Settings.GZVertexScale3D * Angle2D.SQRT2; cageradius2 = cageradius2 * cageradius2; + // Synchronize selection? + if(mode.UseSelectionFromClassicMode && v.Selected + && (General.Map.ViewMode == ViewMode.Normal || + (!ceilingVertex && General.Map.ViewMode == ViewMode.FloorTextures) + || (ceilingVertex && General.Map.ViewMode == ViewMode.CeilingTextures))) + { + this.selected = true; + mode.AddSelectedObject(this); + } + changed = true; Update(); } diff --git a/Source/Plugins/StairSectorBuilder/StairSectorBuilderForm.designer.cs b/Source/Plugins/StairSectorBuilder/StairSectorBuilderForm.designer.cs index d64096bb..3600f24d 100644 --- a/Source/Plugins/StairSectorBuilder/StairSectorBuilderForm.designer.cs +++ b/Source/Plugins/StairSectorBuilder/StairSectorBuilderForm.designer.cs @@ -126,7 +126,7 @@ // // btnOK // - this.btnOK.Location = new System.Drawing.Point(448, 532); + this.btnOK.Location = new System.Drawing.Point(333, 532); this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(112, 27); this.btnOK.TabIndex = 4; @@ -137,7 +137,7 @@ // btnCancel // this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Location = new System.Drawing.Point(333, 532); + this.btnCancel.Location = new System.Drawing.Point(448, 532); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(112, 27); this.btnCancel.TabIndex = 5;