- prevented showing editing dialog when EndEdit was the result of a BeginEdit action started from another mode (which is normal behavior and desired in some cases, such as dragging)

- implemented Accept action and corresponding OnAccept event for all editing modes
This commit is contained in:
codeimp 2008-05-16 21:08:36 +00:00
parent 0d35ce0536
commit 8c777ca780
10 changed files with 134 additions and 76 deletions

View file

@ -110,7 +110,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
base.OnEngage(); base.OnEngage();
// Show toolbox window // Show toolbox window
BuilderPlug.Me.CurveLinedefsForm.Show((Form)General.Interface, this); BuilderPlug.Me.CurveLinedefsForm.Show((Form)General.Interface);
} }
// Disenagaging // Disenagaging
@ -123,7 +123,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
} }
// This applies the curves and returns to the base mode // This applies the curves and returns to the base mode
public void Apply() public override void OnAccept()
{ {
// Create undo // Create undo
General.Map.UndoRedo.CreateUndo("Curve linedefs", UndoGroup.None, 0); General.Map.UndoRedo.CreateUndo("Curve linedefs", UndoGroup.None, 0);

View file

@ -135,8 +135,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Map.ChangeMode(basemode); General.Map.ChangeMode(basemode);
} }
// Disenagaging // Accepted
public override void OnDisengage() public override void OnAccept()
{ {
List<Vertex> newverts = new List<Vertex>(); List<Vertex> newverts = new List<Vertex>();
List<Vertex> intersectverts = new List<Vertex>(); List<Vertex> intersectverts = new List<Vertex>();
@ -145,17 +145,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
List<Sidedef> insidesides = new List<Sidedef>(); List<Sidedef> insidesides = new List<Sidedef>();
List<Vertex> mergeverts = new List<Vertex>(); List<Vertex> mergeverts = new List<Vertex>();
List<Vertex> nonmergeverts = new List<Vertex>(General.Map.Map.Vertices); List<Vertex> nonmergeverts = new List<Vertex>(General.Map.Map.Vertices);
MapSet map = General.Map.Map; MapSet map = General.Map.Map;
base.OnDisengage();
Cursor.Current = Cursors.AppStarting; Cursor.Current = Cursors.AppStarting;
General.Settings.FindDefaultDrawSettings(); General.Settings.FindDefaultDrawSettings();
// When not cancelled and points have been drawn // When points have been drawn
if(!cancelled && (points.Count > 0)) if(points.Count > 0)
{ {
// Make undo for the draw // Make undo for the draw
General.Map.UndoRedo.CreateUndo("line draw", UndoGroup.None, 0); General.Map.UndoRedo.CreateUndo("line draw", UndoGroup.None, 0);
@ -523,6 +520,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Done // Done
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
// Return to original mode
Type t = basemode.GetType();
basemode = (EditMode)Activator.CreateInstance(t);
General.Map.ChangeMode(basemode);
} }
// This checks if the view offset/zoom changed and updates the check // This checks if the view offset/zoom changed and updates the check
@ -781,8 +783,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("finishdraw")] [BeginAction("finishdraw")]
public void FinishDraw() public void FinishDraw()
{ {
// Just return to base mode, Disengage will be called automatically. // Accept the changes
General.Map.ChangeMode(basemode); General.Map.AcceptMode();
} }
// When a key is released // When a key is released

View file

@ -54,6 +54,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Highlighted item // Highlighted item
private Linedef highlighted; private Linedef highlighted;
// Interface
private bool editpressed;
#endregion #endregion
#region ================== Properties #region ================== Properties
@ -256,6 +259,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Item highlighted? // Item highlighted?
if((highlighted != null) && !highlighted.IsDisposed) if((highlighted != null) && !highlighted.IsDisposed)
{ {
// Edit pressed in this mode
editpressed = true;
// Highlighted item not selected? // Highlighted item not selected?
if(!highlighted.Selected) if(!highlighted.Selected)
{ {
@ -282,6 +288,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Done editing // Done editing
protected override void OnEndEdit() protected override void OnEndEdit()
{
// Edit pressed in this mode?
if(editpressed)
{ {
// Anything selected? // Anything selected?
ICollection<Linedef> selected = General.Map.Map.GetSelectedLinedefs(true); ICollection<Linedef> selected = General.Map.Map.GetSelectedLinedefs(true);
@ -296,7 +305,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Update entire display // Update entire display
General.Interface.RedrawDisplay(); General.Interface.RedrawDisplay();
} }
}
editpressed = false;
base.OnEndEdit(); base.OnEndEdit();
} }

View file

@ -53,6 +53,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Highlighted item // Highlighted item
private Sector highlighted; private Sector highlighted;
// Interface
private bool editpressed;
// The methods GetSelected* and MarkSelected* on the MapSet do not // The methods GetSelected* and MarkSelected* on the MapSet do not
// retain the order in which items were selected. // retain the order in which items were selected.
// This list keeps in order while sectors are selected/deselected. // This list keeps in order while sectors are selected/deselected.
@ -319,6 +322,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Item highlighted? // Item highlighted?
if((highlighted != null) && !highlighted.IsDisposed) if((highlighted != null) && !highlighted.IsDisposed)
{ {
// Edit pressed in this mode
editpressed = true;
// Highlighted item not selected? // Highlighted item not selected?
if(!highlighted.Selected) if(!highlighted.Selected)
{ {
@ -344,6 +350,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Done editing // Done editing
protected override void OnEndEdit() protected override void OnEndEdit()
{
// Edit pressed in this mode?
if(editpressed)
{ {
// Anything selected? // Anything selected?
ICollection<Sector> selected = General.Map.Map.GetSelectedSectors(true); ICollection<Sector> selected = General.Map.Map.GetSelectedSectors(true);
@ -362,7 +371,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Update entire display // Update entire display
General.Interface.RedrawDisplay(); General.Interface.RedrawDisplay();
} }
}
editpressed = false;
base.OnEndEdit(); base.OnEndEdit();
} }

View file

@ -53,6 +53,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Highlighted item // Highlighted item
private Thing highlighted; private Thing highlighted;
// Interface
private bool editpressed;
#endregion #endregion
#region ================== Properties #region ================== Properties
@ -227,6 +230,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Item highlighted? // Item highlighted?
if((highlighted != null) && !highlighted.IsDisposed) if((highlighted != null) && !highlighted.IsDisposed)
{ {
// Edit pressed in this mode
editpressed = true;
// Highlighted item not selected? // Highlighted item not selected?
if(!highlighted.Selected) if(!highlighted.Selected)
{ {
@ -251,6 +257,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Done editing // Done editing
protected override void OnEndEdit() protected override void OnEndEdit()
{
// Edit pressed in this mode?
if(editpressed)
{ {
// Anything selected? // Anything selected?
ICollection<Thing> selected = General.Map.Map.GetSelectedThings(true); ICollection<Thing> selected = General.Map.Map.GetSelectedThings(true);
@ -265,7 +274,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Update entire display // Update entire display
General.Interface.RedrawDisplay(); General.Interface.RedrawDisplay();
} }
}
editpressed = false;
base.OnEndEdit(); base.OnEndEdit();
} }

View file

@ -53,6 +53,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Highlighted item // Highlighted item
protected Vertex highlighted; protected Vertex highlighted;
// Interface
private bool editpressed;
#endregion #endregion
#region ================== Properties #region ================== Properties
@ -238,12 +241,16 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Start editing // Start editing
protected override void OnEdit() protected override void OnEdit()
{ {
// Edit pressed in this mode
editpressed = true;
base.OnEdit(); base.OnEdit();
} }
// Done editing // Done editing
protected override void OnEndEdit() protected override void OnEndEdit()
{ {
editpressed = false;
base.OnEndEdit(); base.OnEndEdit();
} }

View file

@ -40,8 +40,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
{ {
#region ================== Variables #region ================== Variables
private CurveLinedefsMode mode;
#endregion #endregion
#region ================== Properties #region ================== Properties
@ -80,11 +78,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
} }
// This shows the window // This shows the window
public void Show(Form owner, CurveLinedefsMode mode) public void Show(Form owner)
{ {
// Keep reference to mode
this.mode = mode;
// First time showing? // First time showing?
//if((this.Location.X == 0) && (this.Location.Y == 0)) //if((this.Location.X == 0) && (this.Location.Y == 0))
{ {
@ -183,7 +178,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
private void apply_Click(object sender, EventArgs e) private void apply_Click(object sender, EventArgs e)
{ {
// Apply now // Apply now
mode.Apply(); General.Map.AcceptMode();
} }
#endregion #endregion

View file

@ -163,6 +163,8 @@ namespace CodeImp.DoomBuilder.Editing
// This forces the mode to cancel and return to the "parent" mode // This forces the mode to cancel and return to the "parent" mode
public virtual void OnCancel() { } public virtual void OnCancel() { }
public virtual void OnAccept() { }
// Interface events // Interface events
public virtual void OnMouseClick(MouseEventArgs e) { } public virtual void OnMouseClick(MouseEventArgs e) { }
public virtual void OnMouseDoubleClick(MouseEventArgs e) { } public virtual void OnMouseDoubleClick(MouseEventArgs e) { }

View file

@ -833,6 +833,16 @@ namespace CodeImp.DoomBuilder
mode.OnCancel(); mode.OnCancel();
} }
/// <summary>
/// This accepts the changes in the current mode.
/// </summary>
[BeginAction("acceptmode")]
public void AcceptMode()
{
// Let the mode know
mode.OnAccept();
}
// //
// This changes the editing mode. // This changes the editing mode.
// Order in which events occur for the old and new modes: // Order in which events occur for the old and new modes:

View file

@ -126,6 +126,15 @@ cancelmode
allowscroll = true; allowscroll = true;
} }
acceptmode
{
title = "Edit: Accept Action";
description = "Accepts the changes in the current action and switches back to normal editing mode.";
allowkeys = true;
allowmouse = true;
allowscroll = true;
}
classicselect classicselect
{ {
title = "2D: Select"; title = "2D: Select";