public void ClearSelection()
        {
            //m_Logger.Log("AudioPaneView.ClearSelection", Category.Debug, Priority.Medium);

            m_TimeSelectionLeftX = -1;
            WaveFormTimeSelectionRect.Visibility = Visibility.Hidden;
            WaveFormTimeSelectionRect.Width      = 0;
            WaveFormTimeSelectionRect.SetValue(Canvas.LeftProperty, m_TimeSelectionLeftX);
        }
        public void SetSelectionBytes(long begin, long end)
        {
            //m_Logger.Log("AudioPaneView.SetSelectionBytes", Category.Debug, Priority.Medium);

            m_TimeSelectionLeftX = begin / BytesPerPixel;
            WaveFormTimeSelectionRect.Visibility = Visibility.Visible;
            WaveFormTimeSelectionRect.Width      = end / BytesPerPixel - m_TimeSelectionLeftX;
            WaveFormTimeSelectionRect.SetValue(Canvas.LeftProperty, m_TimeSelectionLeftX);
        }
        public void SelectAll()
        {
            m_Logger.Log("AudioPaneView.SelectAll", Category.Debug, Priority.Medium);

            m_TimeSelectionLeftX = 0;
            WaveFormTimeSelectionRect.Visibility = Visibility.Visible;

            double width = MillisecondsPerPixelToPixelWidthConverter.calc(ZoomSlider.Value, m_ViewModel);

#if DEBUG
            double widthReal = getWaveFormWidth();
            DebugFix.Assert((long)Math.Round(width * 100) == (long)Math.Round(widthReal * 100));
#endif //DEBUG

            WaveFormTimeSelectionRect.Width = width;
            WaveFormTimeSelectionRect.SetValue(Canvas.LeftProperty, m_TimeSelectionLeftX);
        }
        private void restoreSelection()
        {
            m_TimeSelectionLeftX = m_SelectionBackup_X;
            WaveFormTimeSelectionRect.Visibility = Visibility.Visible;
            WaveFormTimeSelectionRect.Width      = m_SelectionBackup_Width;
            WaveFormTimeSelectionRect.SetValue(Canvas.LeftProperty, m_TimeSelectionLeftX);

            if (m_TimeSelectionLeftX < 0)
            {
                m_ViewModel.State.Selection.ClearSelection();
            }
            else if (m_ViewModel.State.Audio.HasContent)
            {
                m_ViewModel.State.Selection.SetSelectionBytes(
                    m_ViewModel.State.Audio.GetCurrentPcmFormat().Data.AdjustByteToBlockAlignFrameSize(
                        (long)Math.Round(m_TimeSelectionLeftX * BytesPerPixel)),
                    m_ViewModel.State.Audio.GetCurrentPcmFormat().Data.AdjustByteToBlockAlignFrameSize(
                        (long)Math.Round((m_TimeSelectionLeftX + WaveFormTimeSelectionRect.Width) * BytesPerPixel)));
            }
        }
        private void selectionFinished(double x)
        {
            WaveFormTimeSelectionRectBackup.Visibility = Visibility.Hidden;

            if (x == m_TimeSelectionLeftX)
            {
                ClearSelection();

                m_ViewModel.CommandClearSelection.Execute();
                //m_ViewModel.State.Selection.ClearSelection();

                if (!m_ViewModel.State.Audio.HasContent)
                {
                    return;
                }

                long bytes = m_ViewModel.State.Audio.GetCurrentPcmFormat().Data.AdjustByteToBlockAlignFrameSize((long)Math.Round(x * BytesPerPixel));
                m_ViewModel.PlayBytePosition = bytes;

                return;
            }

            if (Math.Abs(m_TimeSelectionLeftX - x) <= MIN_SELECTION_PIXELS)
            {
                ClearSelection();
                m_TimeSelectionLeftX = x;
            }

            if (x == m_TimeSelectionLeftX)
            {
                restoreSelection();

                if (!m_ViewModel.State.Audio.HasContent)
                {
                    return;
                }

                long bytes = m_ViewModel.State.Audio.GetCurrentPcmFormat().Data.AdjustByteToBlockAlignFrameSize((long)Math.Round(x * BytesPerPixel));
                m_ViewModel.PlayBytePosition = bytes;

                return;
            }

            double right = x;

            if (x < m_TimeSelectionLeftX)
            {
                right = m_TimeSelectionLeftX;
                m_TimeSelectionLeftX = x;
            }

            WaveFormTimeSelectionRect.Visibility = Visibility.Visible;
            WaveFormTimeSelectionRect.Width      = right - m_TimeSelectionLeftX;
            WaveFormTimeSelectionRect.SetValue(Canvas.LeftProperty, m_TimeSelectionLeftX);

            if (!m_ViewModel.State.Audio.HasContent)
            {
                return;
            }

            m_ViewModel.State.Selection.SetSelectionBytes(
                m_ViewModel.State.Audio.GetCurrentPcmFormat().Data.AdjustByteToBlockAlignFrameSize(
                    (long)Math.Round(m_TimeSelectionLeftX * BytesPerPixel)),
                m_ViewModel.State.Audio.GetCurrentPcmFormat().Data.AdjustByteToBlockAlignFrameSize(
                    (long)Math.Round((m_TimeSelectionLeftX + WaveFormTimeSelectionRect.Width) * BytesPerPixel)));
        }