/// <summary>
        /// Class constructor
        /// </summary>
        /// <param name="conflicts">The list of file conflicts.</param>
        public ReplacingFilesForm(FileConflictCollection conflicts)
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            // Ignore events while initializing the form.
            ignoreEvents = true;

            pictureBox.Image = SystemIcons.Exclamation.ToBitmap();

            // There appears to be a bug in the 1.0 version of the framework.  On my
            // 3.2ghz machine, if listBox.Items.Add(conflict) is placed in the
            // foreach array it hangs, unless you slow it down somehow.  Moving
            // the add outside the loop and changing it to an AddRange() to add all
            // of the conflicts in one shot makes it work correctly, thus the change
            // to the code.

            // Add all of the conflicts to the list box.
            FileConflict[] conflictArray = new FileConflict[conflicts.Count];
            for (int i = 0; i < conflicts.Count; i++)
                conflictArray[i] = conflicts[i];
            listBox.Items.AddRange(conflictArray);

            // Loop through all of the conflicts setting their check state as appropriate.
            foreach (FileConflict conflict in conflicts)
            {
                int index = listBox.Items.IndexOf(conflict);
                listBox.SetItemChecked(index, conflict.ReplaceFile);
            }

            ignoreEvents = false;
        }
        /// <summary>
        /// This method creates a conflict collection from the module.
        /// </summary>
        /// <param name="module"></param>
        /// <returns></returns>
        private FileConflictCollection CreateConflictCollection(Erf module)
        {
            FileConflictCollection conflicts = new FileConflictCollection();
            StringCollection replacedFiles = module.ReplacedFiles;
            foreach (string file in replacedFiles)
            {
                // Generate the full path of the module file, which has the same name
                // but is decompressed to the current temp directory.
                string moduleFile = Path.Combine(currentTempDir, Path.GetFileName(file));

                // Create the conflict object and add it to the collection.
                FileConflict conflict = new FileConflict(moduleFile, file);
                conflicts.Add(conflict);
            }
            return conflicts;
        }
 /// <summary>
 /// This methods should ask the user for confirmation of replacing
 /// the listed files in the module with files from sources in the
 /// hif files, as this operation may break the module.
 /// </summary>
 /// <param name="replacedFiles">The list of replaced files</param>
 /// <returns>true if the files should be replaced, false if adding
 /// the hak(s) to the module should be aborted</returns>
 bool IHakInstallProgress.ShouldReplaceFiles(FileConflictCollection conflicts)
 {
     return true;
 }
 /// <summary>
 /// Generates a copy of the FileConflictCollection
 /// </summary>
 /// <returns></returns>
 public FileConflictCollection Clone()
 {
     FileConflictCollection copy = new FileConflictCollection();
     foreach (object o in InnerList)
         copy.InnerList.Add(o);
     return copy;
 }
 /// <summary>
 /// This methods should ask the user for confirmation of replacing
 /// the listed files in the module with files from sources in the
 /// hif files, as this operation may break the module.
 /// </summary>
 /// <param name="conflicts">The list of file conflicts</param>
 /// <returns>true if the files should be replaced, false if adding
 /// the hak(s) to the module should be aborted</returns>
 bool IHakInstallProgress.ShouldReplaceFiles(FileConflictCollection conflicts)
 {
     // Confirm the file replace operation with the user.
     ReplacingFilesForm form = new ReplacingFilesForm(conflicts);
     return DialogResult.OK == form.ShowDialog((Form) this);
 }