public void Execute(object parameter)
        {
            if (Clipboard.ContainsData("Article"))
            {
                var data = Clipboard.GetData("Article");
                if (data is string text)
                {
                    var serializer = new JsonSerializer();
                    using (var reader = new StringReader(text))
                    {
                        JObject     obj = JObject.Load(new JsonTextReader(reader));
                        Article     article;
                        ArticleType type = (ArticleType)obj.Value <int>("Article");
                        switch (type)
                        {
                        case ArticleType.Terrain:
                            article = new Terrain();
                            break;

                        case ArticleType.Zone:
                            article = new Zone();
                            break;

                        case ArticleType.Target:
                            article = new Target();
                            break;

                        default:
                            article = new Article();
                            break;
                        }
                        serializer.Populate(obj.CreateReader(), article);
                        article.X += 1;
                        article.Y += 1;
                        var sb = new StringBuilder();
                        using (var writer = new StringWriter(sb))
                        {
                            serializer.Serialize(writer, article);
                            Clipboard.SetData("Article", sb.ToString());
                        }
                        var op = new CreateArticleOperation(ApplicationSettings.Instance.ActiveProject, article);
                        ApplicationSettings.Instance.ActiveProject.ExecuteOp(op);
                    }
                }
            }
        }
        private void OkButton_Click(object sender, RoutedEventArgs e)
        {
            var     type = (ArticleType)(articleType.SelectedItem as ComboBoxItem).Tag;
            Article obj  = null;

            switch (type)
            {
            case ArticleType.Terrain:
                obj = new Terrain();
                break;

            case ArticleType.Zone:
                obj = new Zone();
                break;

            case ArticleType.Target:
                obj = new Target();
                (obj as Target).MoveVel.Add(0);
                break;
            }
            if (obj == null)
            {
                return;
            }
            obj.ArticleNum = type;
            var point = RoomEditor.Instance.GetTransform().Transform(new Point(RoomEditor.Instance.ActualWidth / 2, RoomEditor.Instance.ActualHeight / 2));

            // Round to nearest 1/16
            obj.X    = (int)point.X / (float)ROAAM_CONST.GRID_SIZE;
            obj.Y    = (int)point.Y / (float)ROAAM_CONST.GRID_SIZE;
            obj.Name = obj.ArticleNum.ToString();

            var op = new CreateArticleOperation(ApplicationSettings.Instance.ActiveProject, obj);

            ApplicationSettings.Instance.ActiveProject.ExecuteOp(op);
            Close();
        }