private void MenuCopyLayoutToClipboardClick(object sender, RoutedEventArgs e)
        {
            try
            {
                using (var ms = new MemoryStream())
                {
                    annoCanvas.Normalize(1);
                    _layoutLoader.SaveLayout(annoCanvas.PlacedObjects, ms);

                    var jsonString = Encoding.UTF8.GetString(ms.ToArray());

                    Clipboard.SetText(jsonString, TextDataFormat.UnicodeText);

                    string language = Localization.Localization.GetLanguageCodeFromName(SelectedLanguage);

                    MessageBox.Show(Localization.Localization.Translations[language]["ClipboardContainsLayoutAsJson"],
                                    Localization.Localization.Translations[language]["Successful"],
                                    MessageBoxButton.OK,
                                    MessageBoxImage.Information,
                                    MessageBoxResult.OK);
                }
            }
            catch (Exception ex)
            {
                App.WriteToErrorLog("Error saving layout to JSON", ex.Message, ex.StackTrace);
                MessageBox.Show(ex.Message, "Something went wrong while saving the layout.");
            }
        }
 public void Copy(IEnumerable <AnnoObject> objects)
 {
     if (objects is not null && objects.Any())
     {
         using var memoryStream = new MemoryStream();
         _layoutLoader.SaveLayout(new LayoutFile(objects), memoryStream);
         memoryStream.Seek(0, SeekOrigin.Begin);
         _clipboard.Clear();
         _clipboard.SetData(CoreConstants.AnnoDesignerClipboardFormat, memoryStream);
         _clipboard.Flush();
     }
 }
        public void Paste_Data_ClipboardHasKnownDataType_ShouldReturnLayoutObjects()
        {
            // Arrange
            var data = GetListOfObjects();

            using var memoryStream = new System.IO.MemoryStream();
            _mockedLayoutLoader.SaveLayout(new LayoutFile(data), memoryStream);
            memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
            _mockedClipboard.SetData(CoreConstants.AnnoDesignerClipboardFormat, memoryStream);

            var service = GetService();

            // Act
            var result = service.Paste();

            // Assert
            Assert.Equal(data.Count, result.Count);
            Assert.All(data, x =>
            {
                //Assert.Contains(x, result); //not useable because of missing cutom comparer for AnnoObject
                Assert.Contains(result, y => y.Identifier.Equals(x.Identifier, StringComparison.OrdinalIgnoreCase));
            });
        }