/** * @brief Update changed item's compare status * @param [in] paths Paths for files we update * @param [in] nDiffs Total amount of differences * @param [in] nTrivialDiffs Amount of ignored differences * @param [in] bIdentical TRUE if files became identical, FALSE otherwise. */ void CDirDoc::UpdateChangedItem(PathContext &paths, UINT nDiffs, UINT nTrivialDiffs, BOOL bIdentical) { UINT_PTR pos = FindItemFromPaths(paths.GetLeft().c_str(), paths.GetRight().c_str()); // If we failed files could have been swapped so lets try again if (!pos) pos = FindItemFromPaths(paths.GetRight().c_str(), paths.GetLeft().c_str()); // Update status if paths were found for items. // Fail means we had unique items compared as 'renamed' items // so there really is not status to update. if (pos > 0) { int ind = m_pDirView->GetItemIndex(pos); // Figure out new status code UINT diffcode = (bIdentical ? DIFFCODE::SAME : DIFFCODE::DIFF); // Update both views and diff context memory SetDiffCompare(diffcode, ind); if (nDiffs != -1 && nTrivialDiffs != -1) SetDiffCounts(nDiffs, nTrivialDiffs, ind); ReloadItemStatus(ind, TRUE, TRUE); } }
/** * @brief Set root-paths of current compare so we can add them to report. */ void DirCmpReport::SetRootPaths(const PathContext &paths) { m_rootPaths.SetLeft(paths.GetLeft().c_str()); m_rootPaths.SetRight(paths.GetRight().c_str()); LangFormatString2(m_sTitle, IDS_DIRECTORY_REPORT_TITLE, m_rootPaths.GetLeft().c_str(), m_rootPaths.GetRight().c_str()); }
/** * @brief Initialise directory compare for given paths. * * Initialises directory compare with paths given and recursive choice. * Previous compare context is first free'd. * @param [in] paths Paths to compare * @param [in] bRecursive If TRUE subdirectories are included to compare. */ void CDirDoc::InitCompare(const PathContext & paths, BOOL bRecursive, CTempPathContext *pTempPathContext) { m_pDirView->DeleteAllDisplayItems(); // Anything that can go wrong here will yield an exception. // Default implementation of operator new() never returns NULL. delete m_pCtxt; if (m_pCompareStats == NULL) m_pCompareStats = new CompareStats(); m_pCtxt = new CDiffContext(paths.GetLeft().c_str(), paths.GetRight().c_str(), GetOptionsMgr()->GetInt(OPT_CMP_METHOD)); m_pCtxt->m_bRecursive = !!bRecursive; if (pTempPathContext) { ApplyLeftDisplayRoot(pTempPathContext->m_strLeftDisplayRoot); ApplyRightDisplayRoot(pTempPathContext->m_strRightDisplayRoot); pTempPathContext->m_pParent = m_pTempPathContext; m_pTempPathContext = pTempPathContext; m_pTempPathContext->m_strLeftRoot = m_pCtxt->GetNormalizedLeft(); m_pTempPathContext->m_strRightRoot = m_pCtxt->GetNormalizedRight(); } m_bRecursive = bRecursive; // All plugin management is done by our plugin manager m_pCtxt->m_piPluginInfos = &m_pluginman; }