void RedoCloneSelected(List <uint> selection)
        {
            Trace.WriteLine("redoCloneSelected:");

            Manipulated            = itemsController;
            items.CurrentSelection = selection;
            Manipulated.CloneSelected();

            undo.PrepareUndo("Clone",
                             Invocation.Create(selection, UndoCloneSelected));

            itemsController.UpdateSelection();
            OnEachViewDo(view => view.Invalidate());
        }
        private void cloneToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Trace.WriteLine("cloneSelected:");
            if (Manipulated.SelectedCount <= 0)
            {
                return;
            }

            bool startManipulation = false;

            if (!manipulationFinished)
            {
                startManipulation = true;
                ManipulationEnded(null);
            }

            if (Manipulated == itemsController)
            {
                var selection = items.CurrentSelection;
                undo.PrepareUndo("Clone",
                                 Invocation.Create(selection, UndoCloneSelected));

                Manipulated.CloneSelected();
            }
            else
            {
                FullMeshAction("Clone", () => Manipulated.CloneSelected());
            }

            OnEachViewDo(view => view.Invalidate());

            if (startManipulation)
            {
                ManipulationStarted(null);
            }
        }