diff --git a/Source/BuilderModes/ClassicModes/LinedefsMode.cs b/Source/BuilderModes/ClassicModes/LinedefsMode.cs index 80b287ec..267bfbc6 100644 --- a/Source/BuilderModes/ClassicModes/LinedefsMode.cs +++ b/Source/BuilderModes/ClassicModes/LinedefsMode.cs @@ -657,8 +657,20 @@ namespace CodeImp.DoomBuilder.BuilderModes [BeginAction("fliplinedefs")] public void FlipLinedefs() { - // Any selected lines? + // No selected lines? ICollection<Linedef> selected = General.Map.Map.GetSelectedLinedefs(true); + if(selected.Count == 0) + { + // Anything highlighted? + if(highlighted != null) + { + // Select the highlighted item + highlighted.Selected = true; + selected.Add(highlighted); + } + } + + // Any selected lines? if(selected.Count > 0) { // Make undo @@ -673,9 +685,17 @@ namespace CodeImp.DoomBuilder.BuilderModes l.FlipVertices(); l.FlipSidedefs(); } + + // Remove selection if only one was selected + if(selected.Count == 1) + { + foreach(Linedef ld in selected) ld.Selected = false; + selected.Clear(); + } // Redraw General.Map.IsChanged = true; + General.Interface.RefreshInfo(); General.Interface.RedrawDisplay(); } } @@ -683,8 +703,20 @@ namespace CodeImp.DoomBuilder.BuilderModes [BeginAction("flipsidedefs")] public void FlipSidedefs() { - // Any selected lines? + // No selected lines? ICollection<Linedef> selected = General.Map.Map.GetSelectedLinedefs(true); + if(selected.Count == 0) + { + // Anything highlighted? + if(highlighted != null) + { + // Select the highlighted item + highlighted.Selected = true; + selected.Add(highlighted); + } + } + + // Any selected lines? if(selected.Count > 0) { // Make undo @@ -697,10 +729,21 @@ namespace CodeImp.DoomBuilder.BuilderModes foreach(Linedef l in selected) { l.FlipSidedefs(); + if(l.Front != null) l.Front.Sector.UpdateNeeded = true; + if(l.Back != null) l.Back.Sector.UpdateNeeded = true; + } + + // Remove selection if only one was selected + if(selected.Count == 1) + { + foreach(Linedef ld in selected) ld.Selected = false; + selected.Clear(); } // Redraw + General.Map.Map.Update(); General.Map.IsChanged = true; + General.Interface.RefreshInfo(); General.Interface.RedrawDisplay(); } } diff --git a/Source/Windows/IMainForm.cs b/Source/Windows/IMainForm.cs index 36f16dbf..0f6ffa74 100644 --- a/Source/Windows/IMainForm.cs +++ b/Source/Windows/IMainForm.cs @@ -64,6 +64,7 @@ namespace CodeImp.DoomBuilder.Windows void ShowThingInfo(Thing t); void ShowVertexInfo(Vertex v); void HideInfo(); + void RefreshInfo(); void UpdateCoordinates(Vector2D coords); bool Focus(); void SetProcessorState(bool on); diff --git a/Source/Windows/MainForm.cs b/Source/Windows/MainForm.cs index 17c5d584..f2decec9 100644 --- a/Source/Windows/MainForm.cs +++ b/Source/Windows/MainForm.cs @@ -1985,6 +1985,15 @@ namespace CodeImp.DoomBuilder.Windows modename.Refresh(); } + // This refreshes info + public void RefreshInfo() + { + if(lastinfoobject is Vertex) ShowVertexInfo(lastinfoobject as Vertex); + else if(lastinfoobject is Linedef) ShowLinedefInfo(lastinfoobject as Linedef); + else if(lastinfoobject is Sector) ShowSectorInfo(lastinfoobject as Sector); + else if(lastinfoobject is Thing) ShowThingInfo(lastinfoobject as Thing); + } + // Show linedef info public void ShowLinedefInfo(Linedef l) {