private void AddNewScriptBrickAction(ModelBase model)
        {
            lock (_actionsCollection)
            {
                if (model is EmptyDummyBrick)
                    return;

                if (model == null || _isAdding)
                    return;

                _isAdding = true;

                if (model is Brick)
                    _selectedBrick = (model as Brick).Clone();
                else if (model is Script)
                    _selectedBrick = (model as Script).Clone();


                List<Type> multiBrickBricks = new List<Type> {typeof(ForeverBrick), typeof(RepeatBrick), typeof(IfBrick)};

                if (!multiBrickBricks.Contains(_selectedBrick.GetType()) && _selectedBrick is Brick)
                {
                    (_selectedBrick as Brick).IsNewAdded = true;
                }

                _actionsCollection.AddScriptBrick(_selectedBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex);

                var foreverBrick = _selectedBrick as ForeverBrick;
                if (foreverBrick != null)
                {
                    var endBrick = new EndForeverBrick
                    {
                        Begin = (ForeverBrick) _selectedBrick
                    };

                    foreverBrick.End = endBrick;
                    _actionsCollection.AddScriptBrick(endBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex + 1);
                }

                var repeatBrick = _selectedBrick as RepeatBrick;
                if (repeatBrick != null)
                {
                    var endBrick = new EndRepeatBrick
                    {
                        Begin = (RepeatBrick)_selectedBrick
                    };

                    repeatBrick.End = endBrick;
                    _actionsCollection.AddScriptBrick(endBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex + 1);
                }

                var ifBrick = _selectedBrick as IfBrick;
                if (ifBrick != null)
                {
                    var elseBrick = new ElseBrick();
                    var endBrick = new EndIfBrick();

                    elseBrick.Begin = ifBrick;
                    elseBrick.End = endBrick;

                    endBrick.Begin = ifBrick;
                    endBrick.Else = elseBrick;

                    ifBrick.Else = elseBrick;
                    ifBrick.End = endBrick;

                    _actionsCollection.AddScriptBrick(elseBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex + 1);
                    _actionsCollection.AddScriptBrick(endBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex + 2);
                }

                var message = new GenericMessage<ModelBase>(_selectedBrick);
                Messenger.Default.Send(message, ViewModelMessagingToken.SelectedBrickListener);


                ServiceLocator.NavigationService.RemoveBackEntry();
                base.GoBackAction();

                _isAdding = false;
            }
        }
        private void AddNewScriptBrickAction(ModelBase model)
        {
            lock (_actionsCollection)
            {
                if (model is EmptyDummyBrick)
                {
                    return;
                }

                if (model == null || _isAdding)
                {
                    return;
                }

                _isAdding = true;

                if (model is Brick)
                {
                    _selectedBrick = (model as Brick).Clone();
                }
                else if (model is Script)
                {
                    _selectedBrick = (model as Script).Clone();
                }


                List <Type> multiBrickBricks = new List <Type> {
                    typeof(ForeverBrick), typeof(RepeatBrick), typeof(IfBrick)
                };

                if (!multiBrickBricks.Contains(_selectedBrick.GetType()) && _selectedBrick is Brick)
                {
                    (_selectedBrick as Brick).IsNewAdded = true;
                }

                _actionsCollection.AddScriptBrick(_selectedBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex);

                var foreverBrick = _selectedBrick as ForeverBrick;
                if (foreverBrick != null)
                {
                    var endBrick = new EndForeverBrick
                    {
                        Begin = (ForeverBrick)_selectedBrick
                    };

                    foreverBrick.End = endBrick;
                    _actionsCollection.AddScriptBrick(endBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex + 1);
                }

                var repeatBrick = _selectedBrick as RepeatBrick;
                if (repeatBrick != null)
                {
                    var endBrick = new EndRepeatBrick
                    {
                        Begin = (RepeatBrick)_selectedBrick
                    };

                    repeatBrick.End = endBrick;
                    _actionsCollection.AddScriptBrick(endBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex + 1);
                }

                var ifBrick = _selectedBrick as IfBrick;
                if (ifBrick != null)
                {
                    var elseBrick = new ElseBrick();
                    var endBrick  = new EndIfBrick();

                    elseBrick.Begin = ifBrick;
                    elseBrick.End   = endBrick;

                    endBrick.Begin = ifBrick;
                    endBrick.Else  = elseBrick;

                    ifBrick.Else = elseBrick;
                    ifBrick.End  = endBrick;

                    _actionsCollection.AddScriptBrick(elseBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex + 1);
                    _actionsCollection.AddScriptBrick(endBrick, _firstVisibleScriptBrickIndex, _lastVisibleScriptBrickIndex + 2);
                }

                var message = new GenericMessage <ModelBase>(_selectedBrick);
                Messenger.Default.Send(message, ViewModelMessagingToken.SelectedBrickListener);


                ServiceLocator.NavigationService.RemoveBackEntry();
                base.GoBackAction();

                _isAdding = false;
            }
        }