private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            e.Handled = true;
            if (_holdingStart || _holdingEnd || _moving)
            {
                return;
            }

            if (e.ClickCount == 2)
            {
                this.Cursor = _moving ? Cursors.Hand : Cursors.Arrow;
                _holdingStart = _holdingEnd = _moving = false;
                Mouse.Capture(null);
                e.Handled = true;

                var edit = new TimeslotEdit(Model);
                //TODO consume suggestion service

                edit.CaseSuggestions.Add("test case 1");
                edit.CaseSuggestions.Add("test case 2");
                edit.CaseSuggestions.Add("test second case 1");
                edit.CaseSuggestions.Add("test second case 2");
                edit.CaseSuggestions = edit.CaseSuggestions;

                edit.OrderSuggestions.Add("test order 1");
                edit.OrderSuggestions.Add("test order 2");
                edit.OrderSuggestions.Add("test second order 1");
                edit.OrderSuggestions.Add("second test order 2");
                edit.OrderSuggestions = edit.OrderSuggestions;

                edit.DescriptionSuggestions.Add("test desc 1");
                edit.DescriptionSuggestions.Add("test desc 2");
                edit.DescriptionSuggestions.Add("second test desc 1");
                edit.DescriptionSuggestions.Add("second test desc 2");
                edit.DescriptionSuggestions = edit.DescriptionSuggestions;

                edit.Left = PointToScreen(e.GetPosition(this)).X - (edit.Width / 2);
                edit.Top = PointToScreen(e.GetPosition(this)).Y - (edit.Height / 2);
                edit.ShowDialog();
                return;
            }

            var pos = e.GetPosition(this);
            var ancestor = this.FindParent<TimelineControl>();
            var outerPos = ancestor == null ? e.GetPosition(Application.Current.MainWindow) : e.GetPosition(ancestor);
            if (pos.X < EDGE_WIDTH)
            {
                _holdingStart = true;
                _tickSize = this.ActualWidth / Model.Duration.TotalMinutes;
                _origin = outerPos.X;
                _previousAdjustment = 0;
                Mouse.Capture(this);
            }
            else if (pos.X > this.ActualWidth - EDGE_WIDTH)
            {
                _holdingEnd = true;
                _tickSize = this.ActualWidth / Model.Duration.TotalMinutes;
                _origin = outerPos.X;
                _previousAdjustment = 0;
                Mouse.Capture(this);
            }
            else
            {
                _moving = true;
                _tickSize = this.ActualWidth / Model.Duration.TotalMinutes;
                _origin = outerPos.X;
                _previousAdjustment = 0;
                Mouse.Capture(this);
                if (!Model.Selected)
                {
                    OnSelected(true);
                }
            }
        }
        private void UserControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Mouse.Capture(null);
            Mouse.OverrideCursor = null;
            if (_recordAdding != null)
            {
                var edit = new TimeslotEdit(_recordAdding);
                //TODO consume suggestion service

                edit.CaseSuggestions.Add("test case 1");
                edit.CaseSuggestions.Add("test case 2");
                edit.CaseSuggestions.Add("test second case 1");
                edit.CaseSuggestions.Add("test second case 2");
                edit.CaseSuggestions = edit.CaseSuggestions;

                edit.OrderSuggestions.Add("test order 1");
                edit.OrderSuggestions.Add("test order 2");
                edit.OrderSuggestions.Add("test second order 1");
                edit.OrderSuggestions.Add("second test order 2");
                edit.OrderSuggestions = edit.OrderSuggestions;

                edit.DescriptionSuggestions.Add("test desc 1");
                edit.DescriptionSuggestions.Add("test desc 2");
                edit.DescriptionSuggestions.Add("second test desc 1");
                edit.DescriptionSuggestions.Add("second test desc 2");
                edit.DescriptionSuggestions = edit.DescriptionSuggestions;

                edit.Left = PointToScreen(e.GetPosition(this)).X - (edit.Width / 2);
                edit.Top = PointToScreen(e.GetPosition(this)).Y - (edit.Height / 2);
                edit.ShowDialog();
                if (edit.ShouldSave)
                {
                    //TODO persist via service
                }
                else
                {
                    Model.Records.Remove(_recordAdding);
                }
            }
            _recordAdding = null;
        }