public void Snapshot()
        {
            string model = TextSerializer.Serialize(this.Elements);

            undoStack.Push(model);

            redoStack.Clear();
        }
        protected override void OnStop()
        {
            base.OnStop();

            // store diagram model
            _currentDiagram.Model = TextSerializer.Serialize(_canvasView.Model.Elements);
            _currentDiagram.Id    = _repository.Save(_currentDiagram);

            //_drawingView.Dispose();

            Console.WriteLine("DiagramEditor OnStop");
        }
        public void Redo()
        {
            if (redoStack.Count <= 0)
            {
                return;
            }

            string model;

            if (redoStack.TryPop(out model))
            {
                string current = TextSerializer.Serialize(this.Elements);
                undoStack.Push(current);

                Clear();
                TextSerializer.Deserialize(model, this.Elements);
                UpdateNextId();

                RedrawCanvas();
            }
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            //RequestWindowFeature(WindowFeatures.NoTitle);
            base.OnCreate(savedInstanceState);

            _repository = new Repository(
                System.IO.Path.Combine(
                    System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
                    "diagrams.db"));

            // create drawing canvas
            _canvasView = new CanvasView(this);

            RegisterForContextMenu(_canvasView);

            // get diagram from repository
            int diagramId = Intent.GetIntExtra("DiagramId", 0);

            if (diagramId > 0)
            {
                _currentDiagram = _repository.Get(diagramId);
            }
            else
            {
                _currentDiagram = new Diagram();
            }

            // create diagram
            TextSerializer.Deserialize(_currentDiagram.Model, _canvasView.Model.Elements);
            _canvasView.Model.UpdateNextId();
            _canvasView.Model.CurrentModel = TextSerializer.Serialize(_canvasView.Model.Elements);

            // set content view to drawing canvas
            SetContentView(_canvasView);

            //ActivityCompat.InvalidateOptionsMenu (this);

            Console.WriteLine("DiagramEditor OnCreate");
        }