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);
                }
            }
        }
        public ExampleOperationViewModel CreateDefaultExampleOperationViewModel(Pt position)
        {
            var visModel = OperationViewModelFactory.CreateDefaultExampleOperationViewModel(MainModel.SchemaModel, position);

            visModel.Position = position;
            addAttachmentViews(visModel);
            OperationViewModels.Add(visModel);
            return(visModel);
        }
        public HistogramOperationViewModel CreateDefaultHistogramOperationViewModel(AttributeModel attributeModel, Pt position)
        {
            var visModel = OperationViewModelFactory.CreateDefaultHistogramOperationViewModel(MainModel.SchemaModel, attributeModel, position);

            visModel.Position = position;
            addAttachmentViews(visModel);
            OperationViewModels.Add(visModel);
            return(visModel);
        }
        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);
        }
        public void UpdateJobStatus()
        {
            foreach (var current in OperationViewModels.ToArray())
            {
                // check if we need to halt or resume the job
                var tg = InkableScene.TransformToVisual(MainPage);
                var tt = tg.TransformBounds(current.Bounds);

                if (!MainPage.GetBounds().IntersectsWith(tt) && MainModel.QueryExecuter.IsJobRunning(current.OperationModel))
                {
                    MainModel.QueryExecuter.HaltJob(current.OperationModel);
                }
                else if (MainPage.GetBounds().IntersectsWith(tt) &&
                         !MainModel.QueryExecuter.IsJobRunning(current.OperationModel))
                {
                    MainModel.QueryExecuter.ResumeJob(current.OperationModel);
                }
            }
        }