public void RemoveAt(int index) { Script scriptToRemove = null; Brick brickToRemove = null; int count = 0; foreach (Script script in scripts) { if (count == index) { scriptToRemove = script; break; } count++; foreach (Brick brick in script.Bricks.Bricks) { if (count == index) { scriptToRemove = script; brickToRemove = brick; lastDeletedBrick = brick; lastDeletedIndex = index; break; } count++; } if (brickToRemove != null) break; } if (brickToRemove == null) { scripts.Remove(scriptToRemove); OnScriptRemoved(scriptToRemove, index); } else { if (scriptToRemove != null) { scriptToRemove.Bricks.Bricks.Remove(brickToRemove); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, brickToRemove, index)); } } }
public void Insert(int index, object value) { if (PreventIsertOfNext != null && PreventIsertOfNext == value) { PreventIsertOfNext = null; return; } int count = 0; if (value is Script) // TODO: test me { int scriptIndex = 0; foreach (Script script in scripts) { if (count > index) break; count += script.Bricks.Bricks.Count + 1; scriptIndex++; } scripts.Insert(scriptIndex, (Script)value); OnScriptAdded((Script)value, count + 1); } if (value is Brick) { int brickCount = 0; lastInsertedBrick = (Brick)value; lastInsertedIndex = index; if (index == 0) // Cannot insert brick before first sprite index = 1; foreach (Script script in scripts) { count++; foreach (Brick brick in script.Bricks.Bricks) { if (count == index) { script.Bricks.Bricks.Insert(brickCount, (Brick)value); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, value, index)); return; } count++; brickCount++; } if (count == index) { script.Bricks.Bricks.Insert(brickCount, (Brick)value); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, value, index)); return; } brickCount = 0; } } }