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) public void StoreUndoState(bool forGroup)
{ {
if (!Undoing) if (Undoing)
{ {
if (!IgnoreUndoUpdate) // m_log.DebugFormat(
{ // "[SCENE OBJECT PART]: Ignoring undo store for {0} {1} since already undoing", Name, LocalId);
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; 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( // m_log.DebugFormat(
// "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}", // "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}",
// Name, LocalId, forGroup, m_undo.Count); // Name, LocalId, forGroup, m_undo.Count);
if (ParentGroup.GetSceneMaxUndo() > 0) if (ParentGroup.GetSceneMaxUndo() > 0)
{ {
UndoState nUndo = new UndoState(this, forGroup); UndoState nUndo = new UndoState(this, forGroup);
m_undo.Add(nUndo); m_undo.Add(nUndo);
if (m_undo.Count > ParentGroup.GetSceneMaxUndo()) if (m_undo.Count > ParentGroup.GetSceneMaxUndo())
m_undo.RemoveAt(0); m_undo.RemoveAt(0);
if (m_redo.Count > 0) if (m_redo.Count > 0)
m_redo.Clear(); m_redo.Clear();
// m_log.DebugFormat( // m_log.DebugFormat(
// "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}", // "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}",
// Name, LocalId, forGroup, m_undo.Count); // 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> /// <summary>