public ProjectKeyframeOverview(FileTreeObject fileTreeObject, ProjectManager projectManager,
                                       FFmpegManager ffmpegManager, DefaultCodecHeaderManager defaultCodecHeaderManager,
                                       FullFileScanner fullFileScanner, Creator <SelectingKeyframe> selectingKeyframeCreator)
        {
            if (_activeInstance != null)
            {
                throw new Exception("It's not allowed to create multiple ProjectKeyframeOverview windows.");
            }

            _activeInstance            = this;
            _fileTreeObject            = fileTreeObject;
            _projectManager            = projectManager;
            _ffmpegManager             = ffmpegManager;
            _defaultCodecHeaderManager = defaultCodecHeaderManager;
            _fullFileScanner           = fullFileScanner;
            _selectingKeyframeCreator  = selectingKeyframeCreator;

            InitializeComponent();
            ReportProgressComplete();

            _resultRows            = new List <ProjectKeyframeOverviewRow>();
            resultsTree.DataSource = _resultRows;

            projectManager.ProjectChanged += new EventHandler <ProjectChangedEventArgs>(projectManager_ProjectChanged);
            defaultCodecHeaderManager.CodecHeaderChanged += new DefaultCodecHeaderManager.DefaultCodecHeaderChangeHandler(defaultCodecHeaderManager_CodecHeaderChanged);

            fullFileScanner.ScanNextCodecStreamOnInvalidation = true;
            fullFileScanner.ScanMoreThanOneFragment           = false;
            fullFileScanner.ScanProgressChanged += new ProgressChangedEventHandler(fullFileScanner_ScanProgressChanged);
            fullFileScanner.ResultDetected      += new FullFileScanner.ResultDetectedHandler(fullFileScanner_ResultDetected);
            fullFileScanner.ScanCompleted       += new FullFileScanner.ScanCompleteHandler(fullFileScanner_ScanCompleted);
            fullFileScanner.ScanNumCodecStreams  = 1;            // Limit to only 1 codecstream, otherwise the scan will take to long
        }
        protected override void OnClosing(CancelEventArgs e)
        {
            base.OnClosing(e);

            if (NumKeyframeRows > 0 && !AskSureCloseProjectKeyframeOverview())
            {
                e.Cancel = true;
                return;
            }
            StopKeyframeScan();
            _activeInstance = null;
        }