/// <summary>
        /// Remove a row from the FileListView
        /// </summary>
        /// <param name="ListTag"></param>
        /// <returns></returns>
        private void RemoveRowFromFileListView(FileProcessingDetails FileDetails)
        {
            string TagToFind = GenerateTag(FileDetails);

            for (int i = 0; i < FileListView.Items.Count; ++i)
            {
                if (FileListView.Items[i].Tag.Equals(TagToFind))
                {
                    FileListView.Items.RemoveAt(i);
                    break;
                }
            }
        }
 /// <summary>
 /// Generate an unique tag which will allow searching the FileListView
 /// </summary>
 /// <param name="FileDetails"></param>
 /// <returns></returns>
 private string GenerateTag(FileProcessingDetails FileDetails)
 {
     return FileDetails.ChangeList.ToString() + FileDetails.ClientFile;
 }
        private FileProcessingDetails GetMovedToLocation(FileProcessingDetails MovedFromFileDetails)
        {
            //Find the moved to location of moved from files, need to examine the changelist, do this in languages as it is quite slow so should only process those moves which we need to.
            var ListOfFilesInMovedFromChangeList =
                P4Repository.GetChangelist(MovedFromFileDetails.ChangeList).Files;

            //For the files that are MoveAdd
            foreach (var FileDetails in ListOfFilesInMovedFromChangeList)
            {
                if (FileDetails.Action == FileAction.MoveAdd)
                {
                    //This could be the file we are looking for.  Check the file history of this file.
                    FileSpec[] CurrentClientFile = new FileSpec[1];
                    CurrentClientFile[0] = new FileSpec(new DepotPath(FileDetails.DepotPath.ToString()), null);
                    IList<FileHistory> FileHistory = P4Repository.GetFileHistory(CurrentClientFile, null);

                    foreach (var SliceOfHistory in FileHistory)
                    {
                        if (SliceOfHistory.ChangelistId == MovedFromFileDetails.ChangeList)
                        {
                            foreach (var IntegrationSummary in SliceOfHistory.IntegrationSummaries)
                            {
                                if (IntegrationSummary.FromFile.DepotPath.ToString() == MovedFromFileDetails.DepotFile)
                                {
                                    //Does anyone else have this checked out?
                                    bool IsCheckedOutByOtherUser = FileDetails.OtherUsers == null ? false : true;

                                    //Found where it moves to initially, what if it moved again?
                                    //Would like to determine the last moved to location.
                                    if (FileHistory[0].Action == FileAction.MoveDelete)
                                    {
                                        return
                                            GetMovedToLocation(new FileProcessingDetails(
                                                                   FileDetails.DepotPath.ToString(),
                                                                   "",
                                                                   FileHistory[0].ChangelistId,
                                                                   FileProcessingDetails.State.MoveTo,
                                                                   IsCheckedOutByOtherUser,
                                                                   _connectionDetails));
                                    }
                                    else
                                    {
                                        //Need the client path of this file to be able to rename the language file on move correctly.
                                        string ClientPath = "";

                                        FileProcessingDetails ClientFileDetails;

                                        //Last task on the file could be the MoveAdd, it could also be an update, or delete, find the ClientPath
                                        if (
                                            INTMovedFileToProcessingDictionary.TryGetValue(
                                                ParseINTFileName.Match(FileDetails.DepotPath.ToString()).Groups[
                                                    "FileName"].Value.ToUpper(), out ClientFileDetails))
                                        {
                                            ClientPath = ClientFileDetails.ClientFile;
                                        }
                                        else if (
                                            INTDeletedFileProcessingDictionary.TryGetValue(
                                                ParseINTFileName.Match(FileDetails.DepotPath.ToString()).Groups[
                                                    "FileName"].Value.ToUpper(), out ClientFileDetails))
                                        {
                                            ClientPath = ClientFileDetails.ClientFile;
                                        }
                                        else if (
                                            INTFileProcessingDictionary.TryGetValue(
                                                ParseINTFileName.Match(FileDetails.DepotPath.ToString()).Groups[
                                                    "FileName"].Value.ToUpper(), out ClientFileDetails))
                                        {
                                            ClientPath = ClientFileDetails.ClientFile;
                                        }

                                        return
                                            (new FileProcessingDetails(FileDetails.DepotPath.ToString(),
                                                                       ClientPath,
                                                                       MovedFromFileDetails.ChangeList,
                                                                       FileProcessingDetails.State.MoveTo,
                                                                       IsCheckedOutByOtherUser,
                                                                       _connectionDetails));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            //Should not really get here unless P4 is corrupt.
            return (new FileProcessingDetails());
        }