//-----------------------------------------------------------------------------
        // Constructor
        //-----------------------------------------------------------------------------

        public MainWindow()
        {
            supressEvents = true;
            InitializeComponent();

            forceCloseVideo = false;
            desiredSpeed    = 1.0;

            PGControl.Initialize(this);

            // Subscribe to these events after PGControl does
            media.MediaOpened += OnMediaOpened;
            media.MediaClosed += OnMediaClosed;
            media.MediaEnded  += OnMediaEnded;

            timer = new DispatcherTimer(
                TimeSpan.FromSeconds(0.02),
                DispatcherPriority.ApplicationIdle,
                delegate {
                if (forceCloseVideo)
                {
                    forceCloseVideo = false;
                    PGControl.CloseVideo();
                }
                UpdateMediaButtons();
                UpdateInformation();
                RenderAudio();
            }, Dispatcher);

            UpdateControls();

            // Allow stealing focus from toolbar textboxes
            FocusManager.SetIsFocusScope(sectionToolBar, false);
        }
 private void OnFileDrop(object sender, DragEventArgs e)
 {
     if (IsValidDropFile(e))
     {
         string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
         PGControl.OpenVideo(files[0]);
     }
     labelFileDrop.Visibility = Visibility.Collapsed;
 }
        //-----------------------------------------------------------------------------
        // Event Handlers
        //-----------------------------------------------------------------------------

        private void OnWindowLoaded(object sender, RoutedEventArgs e)
        {
            supressEvents = false;
            CalculateSizes();
            string[] args = Environment.GetCommandLineArgs();
            if (args.Length > 1)
            {
                PGControl.OpenVideo(args[1]);
            }
        }
 private void OnBookmarkSelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     if (supressEvents)
     {
         return;
     }
     if (listViewBookmarks.SelectedIndex == -1)
     {
         return;
     }
     PGControl.SelectBookmark(listViewBookmarks.SelectedIndex);
 }
        private void OnBookmarkItemPreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (supressEvents || e.ChangedButton != MouseButton.Left)
            {
                return;
            }

            // Allow reselecting the same index
            int index = listViewBookmarks.Items.IndexOf(sender);

            if (index == listViewBookmarks.SelectedIndex)
            {
                PGControl.SelectBookmark(index);
            }
        }