/// <summary>
 /// Defines the method to be called when the action is invoked.
 /// </summary>
 /// <param name="parameter">Data used by the action. If the action does not require data to be passed, this object can be set to null.</param>
 public override void Execute(object parameter)
 {
     if (CanExecute(parameter))
     {
         Excel view = parameter as Excel;
         try
         {
             view.SuspendFloatingObjectsInvalidate();
             SaveState();
             List <SpreadChart>    list  = new List <SpreadChart>();
             List <Picture>        list2 = new List <Picture>();
             List <FloatingObject> list3 = new List <FloatingObject>();
             foreach (string str in _movingExtent.Names)
             {
                 SpreadChart    chart        = _worksheet.FindChart(str);
                 Picture        picture      = _worksheet.FindPicture(str);
                 FloatingObject obj2         = _worksheet.FindFloatingObject(str);
                 FloatingObject pastedObject = null;
                 if (chart != null)
                 {
                     SpreadChart item = chart.Clone() as SpreadChart;
                     pastedObject     = item;
                     item.Location    = new Point(chart.Location.X + _movingExtent.OffsetX, chart.Location.Y + _movingExtent.OffsetY);
                     item.Size        = chart.Size;
                     item.Name        = Dt.Cells.UndoRedo.GenerateNameHelper.GenerateChartName(_worksheet);
                     chart.IsSelected = false;
                     item.IsSelected  = true;
                     list.Add(item);
                     view.ActiveSheet.Charts.Add(item);
                 }
                 if (picture != null)
                 {
                     Picture picture2 = picture.Clone() as Picture;
                     pastedObject        = picture2;
                     picture2.Location   = new Point(picture.Location.X + _movingExtent.OffsetX, picture.Location.Y + _movingExtent.OffsetY);
                     picture2.Size       = picture.Size;
                     picture2.Name       = Dt.Cells.UndoRedo.GenerateNameHelper.GeneratePictureName(_worksheet);
                     picture.IsSelected  = false;
                     picture2.IsSelected = true;
                     list2.Add(picture2);
                     view.ActiveSheet.Pictures.Add(picture2);
                 }
                 if (obj2 != null)
                 {
                     FloatingObject obj4 = obj2.Clone() as FloatingObject;
                     pastedObject    = obj4;
                     obj4.Location   = new Point(obj2.Location.X + _movingExtent.OffsetX, obj2.Location.Y + _movingExtent.OffsetY);
                     obj4.Size       = obj2.Size;
                     obj4.Name       = Dt.Cells.UndoRedo.GenerateNameHelper.GenerateFloatingObjectName(_worksheet);
                     obj2.IsSelected = false;
                     obj4.IsSelected = true;
                     list3.Add(obj4);
                     view.ActiveSheet.FloatingObjects.Add(obj4);
                 }
                 if (pastedObject != null)
                 {
                     view.RaiseFloatingObjectPasted(_worksheet, pastedObject);
                 }
             }
             if (list.Count > 0)
             {
                 _savedCharts = list.ToArray();
             }
             if (list2.Count > 0)
             {
                 _savedPictures = list2.ToArray();
             }
             if (list3.Count > 0)
             {
                 _savedObjects = list3.ToArray();
             }
         }
         finally
         {
             view.ResumeFloatingObjectsInvalidate();
         }
         view.InvalidateFloatingObjectLayout();
     }
 }