refactor: Change control structures in SOP.StoreUndoState() to reduce nesting.

0.7.4-extended
Justin Clark-Casey (justincc) 2012-09-26 23:25:50 +01:00
parent a4a0396850
commit 371df42d3f
1 changed files with 50 additions and 52 deletions

View File

@ -3150,64 +3150,62 @@ namespace OpenSim.Region.Framework.Scenes
public void StoreUndoState(bool forGroup)
{
if (!Undoing)
if (Undoing)
{
if (!IgnoreUndoUpdate)
{
if (ParentGroup != null)
{
lock (m_undo)
{
if (m_undo.Count > 0)
{
UndoState last = m_undo[m_undo.Count - 1];
if (last != null)
{
// TODO: May need to fix for group comparison
if (last.Compare(this))
{
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Not storing undo for {0} {1} since current state is same as last undo state, initial stack size {2}",
// Name, LocalId, m_undo.Count);
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Ignoring undo store for {0} {1} since already undoing", Name, LocalId);
return;
}
return;
}
}
}
if (IgnoreUndoUpdate)
{
// m_log.DebugFormat("[SCENE OBJECT PART]: Ignoring undo store for {0} {1}", Name, LocalId);
return;
}
if (ParentGroup == null)
return;
lock (m_undo)
{
if (m_undo.Count > 0)
{
UndoState last = m_undo[m_undo.Count - 1];
if (last != null)
{
// TODO: May need to fix for group comparison
if (last.Compare(this))
{
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Not storing undo for {0} {1} since current state is same as last undo state, initial stack size {2}",
// Name, LocalId, m_undo.Count);
return;
}
}
}
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}",
// Name, LocalId, forGroup, m_undo.Count);
if (ParentGroup.GetSceneMaxUndo() > 0)
{
UndoState nUndo = new UndoState(this, forGroup);
if (ParentGroup.GetSceneMaxUndo() > 0)
{
UndoState nUndo = new UndoState(this, forGroup);
m_undo.Add(nUndo);
m_undo.Add(nUndo);
if (m_undo.Count > ParentGroup.GetSceneMaxUndo())
m_undo.RemoveAt(0);
if (m_undo.Count > ParentGroup.GetSceneMaxUndo())
m_undo.RemoveAt(0);
if (m_redo.Count > 0)
m_redo.Clear();
if (m_redo.Count > 0)
m_redo.Clear();
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}",
// Name, LocalId, forGroup, m_undo.Count);
}
}
}
}
// else
// {
// m_log.DebugFormat("[SCENE OBJECT PART]: Ignoring undo store for {0} {1}", Name, LocalId);
// }
}
// else
// {
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Ignoring undo store for {0} {1} since already undoing", Name, LocalId);
// }
}
/// <summary>