public void RemoveOperationViewModel(OperationContainerView operationContainerView)
        {
            var operationViewModel = (OperationViewModel)operationContainerView.DataContext;

            MainModel.QueryExecuter.RemoveJob(operationViewModel.OperationModel);
            OperationViewModels.Remove(operationViewModel);
            Instance.InkableScene.Remove(operationContainerView);

            operationContainerView.Dispose();
            foreach (var attachmentView in Instance.InkableScene.Elements.Where(e => e is AttachmentView).ToList())
            {
                if (((AttachmentViewModel)attachmentView.DataContext).OperationViewModel == operationViewModel)
                {
                    ((AttachmentView)attachmentView).Dispose();
                    Instance.InkableScene.Remove(attachmentView);
                }
            }
            if (operationViewModel.OperationModel is IFilterConsumerOperationModel)
            {
                foreach (var model in ((IFilterConsumerOperationModel)operationViewModel.OperationModel).LinkModels.ToArray())
                {
                    ((IFilterConsumerOperationModel)model.FromOperationModel).LinkModels.Remove(model);
                    model.ToOperationModel.LinkModels.Remove(model);
                }
            }
        }
        private void OperationTypeModelDropped(object sender, OperationTypeModelEventArgs e)
        {
            var width    = OperationViewModel.WIDTH;
            var height   = OperationViewModel.HEIGHT;
            var size     = new Vec(width, height);
            var position = (Pt) new Vec(e.Bounds.Center.X, e.Bounds.Center.Y) - size / 2.0;

            var operationTypeModel = sender as OperationTypeModel;

            OperationViewModel operationViewModel = null;

            if (operationTypeModel.OperationType == OperationType.Histogram)
            {
                operationViewModel = CreateDefaultHistogramOperationViewModel(null, position);
            }
            else if (operationTypeModel.OperationType == OperationType.Example)
            {
                operationViewModel = CreateDefaultExampleOperationViewModel(position);
            }

            if (operationViewModel != null)
            {
                var operationContainerView = new OperationContainerView();
                operationViewModel.Size            = size;
                operationContainerView.DataContext = operationViewModel;
                InkableScene.Add(operationContainerView);
            }
        }
        public OperationContainerView CopyOperationViewModel(OperationViewModel operationViewModel, Pt?centerPoint)
        {
            var newOperationContainerView = new OperationContainerView();
            var newOperationViewModel     = OperationViewModelFactory.CopyOperationViewModel(operationViewModel);

            addAttachmentViews(newOperationViewModel);
            OperationViewModels.Add(newOperationViewModel);

            if (centerPoint.HasValue)
            {
                newOperationViewModel.Position = (Pt)centerPoint - operationViewModel.Size / 2.0;
            }

            newOperationContainerView.DataContext = newOperationViewModel;
            InkableScene.Add(newOperationContainerView);
            return(newOperationContainerView);
        }
        private void AttributeTransformationViewModelDropped(object sender, AttributeTransformationViewModelEventArgs e)
        {
            IGeometry mainPageBounds = e.Bounds.GetPolygon();
            var       hits           = new List <AttributeTransformationViewModelEventHandler>();

            foreach (var element in InkableScene.GetDescendants().OfType <AttributeTransformationViewModelEventHandler>())
            {
                var geom = element.BoundsGeometry;
                if ((geom != null) && mainPageBounds.Intersects(geom))
                {
                    hits.Add(element);
                }
            }

            var width    = OperationViewModel.WIDTH;
            var height   = OperationViewModel.HEIGHT;
            var size     = new Vec(width, height);
            var position = (Pt) new Vec(e.Bounds.Center.X, e.Bounds.Center.Y) - size / 2.0;

            var orderderHits = hits.OrderBy(fe => (fe.BoundsGeometry.Centroid.GetVec() - e.Bounds.Center.GetVec()).LengthSquared).ToList();

            foreach (var element in InkableScene.GetDescendants().OfType <AttributeTransformationViewModelEventHandler>())
            {
                element.AttributeTransformationViewModelDropped(
                    sender as AttributeTransformationViewModel, e,
                    (hits.Count() > 0) && (orderderHits[0] == element));
            }

            if (!hits.Any())
            {
                var operationContainerView      = new OperationContainerView();
                var histogramOperationViewModel = CreateDefaultHistogramOperationViewModel(e.AttributeTransformationModel.AttributeModel, position);
                histogramOperationViewModel.Size   = size;
                operationContainerView.DataContext = histogramOperationViewModel;
                InkableScene.Add(operationContainerView);
            }
        }