{\r
m_nIndex = -1;\r
m_curFolderPrefix = m_rgFolderPrefix.begin();\r
- m_index = (m_nFlags & Right) != 0 ? 1 : 0;\r
+ if (m_pView->GetDocument()->m_nDirs < 3)\r
+ m_index = (m_nFlags & Right) != 0 ? 1 : 0;\r
+ else\r
+ m_index = ((m_nFlags & Right) != 0) ? 2 : ((m_nFlags & Middle) != 0 ? 1 : 0);\r
size_t nrgFolderPrefix = m_rgFolderPrefix.size();\r
if (nrgFolderPrefix)\r
{\r
enum
{
Left = 0x00,
- Right = 0x10,
- Original = 0x20,
- Altered = 0x40,
- DiffsOnly = 0x80,
- BalanceFolders = 0x100
+ Middle = 0x10,
+ Right = 0x20,
+ Original = 0x40,
+ Altered = 0x80,
+ DiffsOnly = 0x100,
+ BalanceFolders = 0x200
};
DirItemEnumerator(CDirView *, int);
virtual UINT Open();
bUpdateSrc = true;
bUpdateDest = true;
di.diffcode.setSideFlag(act.UIDestination);
- if (act.dirflag)
+ if (act.dirflag || ctxt.GetCompareDirs() > 2)
SetDiffCompare(di, DIFFCODE::NOCMP);
else
SetDiffCompare(di, DIFFCODE::SAME);
// left/right filters
if (di.diffcode.isSideFirstOnly() && !filter.show_unique_left)
return false;
- if (di.diffcode.isSideSecondOnly() && !filter.show_unique_right)
- return false;
+ if (ctxt.GetCompareDirs() < 3)
+ {
+ if (di.diffcode.isSideSecondOnly() && !filter.show_unique_right)
+ return false;
+ }
+ else
+ {
+ if (di.diffcode.isSideSecondOnly() && !filter.show_unique_middle)
+ return false;
+ if (di.diffcode.isSideThirdOnly() && !filter.show_unique_right)
+ return false;
+ }
// result filters
if (di.diffcode.isResultError() && FALSE/* !GetMainFrame()->m_bShowErrors FIXME:*/)
// left/right filters
if (di.diffcode.isSideFirstOnly() && !filter.show_unique_left)
return false;
- if (di.diffcode.isSideSecondOnly() && !filter.show_unique_right)
- return false;
+ if (ctxt.GetCompareDirs() < 3)
+ {
+ if (di.diffcode.isSideSecondOnly() && !filter.show_unique_right)
+ return false;
+ }
+ else
+ {
+ if (di.diffcode.isSideSecondOnly() && !filter.show_unique_middle)
+ return false;
+ if (di.diffcode.isSideThirdOnly() && !filter.show_unique_right)
+ return false;
+ }
// ONLY filter folders by result (identical/different) for tree-view.
// In the tree-view we show subfolders with identical/different
else if (src == SIDE_LEFT && dst == SIDE_MIDDLE)
{
fmt1 = _("Left to Middle (%1)");
- fmt2 = _("Left to middle (%1 of %2)");
+ fmt2 = _("Left to Middle (%1 of %2)");
}
else if (src == SIDE_MIDDLE && dst == SIDE_LEFT)
{
return FormatMenuItemString(fmt1, fmt2, count, total);
}
-String FormatMenuItemStringBoth(int count, int total)
+String FormatMenuItemStringAll(int nDirs, int count, int total)
{
- return FormatMenuItemString(_("Both (%1)"), _("Both (%1 of %2)"), count, total);
+ if (nDirs < 3)
+ return FormatMenuItemString(_("Both (%1)"), _("Both (%1 of %2)"), count, total);
+ else
+ return FormatMenuItemString(_("All (%1)"), _("All (%1 of %2)"), count, total);
}
String FormatMenuItemStringTo(SIDE_TYPE src, int count, int total)
return FormatMenuItemString(fmt1, fmt2, count, total);
}
+String FormatMenuItemStringAllTo(int nDirs, int count, int total)
+{
+ if (nDirs < 3)
+ return FormatMenuItemString(_("Both to... (%1)"), _("Both to... (%1 of %2)"), count, total);
+ else
+ return FormatMenuItemString(_("All to... (%1)"), _("All to... (%1 of %2)"), count, total);
+}
+
+String FormatMenuItemStringDifferencesTo(int count, int total)
+{
+ return FormatMenuItemString(_("Differences to... (%1)"), _("Differences to... (%1 of %2)"), count, total);
+}
+
/**
* @brief Rename a file without moving it to different directory.
*
{
show_skipped = getoptbool(OPT_SHOW_SKIPPED);
show_unique_left = getoptbool(OPT_SHOW_UNIQUE_LEFT);
+ show_unique_middle = getoptbool(OPT_SHOW_UNIQUE_MIDDLE);
show_unique_right = getoptbool(OPT_SHOW_UNIQUE_RIGHT);
show_binaries = getoptbool(OPT_SHOW_BINARIES);
show_identical = getoptbool(OPT_SHOW_IDENTICAL);
};
bool show_skipped;
bool show_unique_left;
+ bool show_unique_middle;
bool show_unique_right;
bool show_binaries;
bool show_identical;
String FormatFilesAffectedString(int nFilesAffected, int nFilesTotal);
String FormatMenuItemString(SIDE_TYPE src, int count, int total);
String FormatMenuItemString(SIDE_TYPE src, SIDE_TYPE dst, int count, int total);
-String FormatMenuItemStringBoth(int count, int total);
+String FormatMenuItemStringAll(int nDirs, int count, int total);
String FormatMenuItemString(const String& fmt1, const String& fmt2, int count, int total);
String FormatMenuItemStringTo(SIDE_TYPE src, int count, int total);
+String FormatMenuItemStringAllTo(int nDirs, int count, int total);
+String FormatMenuItemStringDifferencesTo(int count, int total);
void ConfirmActionList(const CDiffContext& ctxt, const FileActionScript & actionList);
UPDATEITEM_TYPE UpdateDiffAfterOperation(const FileActionItem & act, CDiffContext& ctxt, DIFFITEM &di);
return (di.diffcode.diffcode != 0 && ::IsItemCopyableToOn(di, SideToIndex(m_ctxt, src)));
}
+ bool IsItemCopyableBothToOn(const DIFFITEM& di) const
+ {
+ if (di.diffcode.diffcode != 0)
+ {
+ int i;
+ for (i = 0; i < m_ctxt.GetCompareDirs(); ++i)
+ {
+ if (!::IsItemCopyableToOn(di, i))
+ break;
+ }
+ return (i == m_ctxt.GetCompareDirs());
+ }
+ return false;
+ }
+
template <SIDE_TYPE src>
bool IsItemMovableToOn(const DIFFITEM& di) const
{
const int idx = SideToIndex(m_ctxt, src);
return (di.diffcode.diffcode != 0 && !m_RO[idx] && IsItemDeletable(di, idx));
}
+
bool IsItemDeletableOnBoth(const DIFFITEM& di) const
{
if (di.diffcode.diffcode != 0)
}
template <SIDE_TYPE src>
- bool IsItemOpenanbleOn(const DIFFITEM& di) const
+ bool IsItemOpenableOn(const DIFFITEM& di) const
{
- return (di.diffcode.diffcode != 0 && IsItemOpenableOn(di, SideToIndex(m_ctxt, src)));
+ return (di.diffcode.diffcode != 0 && ::IsItemOpenableOn(di, SideToIndex(m_ctxt, src)));
}
template <SIDE_TYPE src>
- bool IsItemOpenanbleOnWith(const DIFFITEM& di) const
+ bool IsItemOpenableOnWith(const DIFFITEM& di) const
{
- return (di.diffcode.diffcode != 0 && IsItemOpenableOnWith(di, SideToIndex(m_ctxt, src)));
+ return (di.diffcode.diffcode != 0 && ::IsItemOpenableOnWith(di, SideToIndex(m_ctxt, src)));
}
bool IsItemFile(const DIFFITEM& di) const
return Counts(count, total);
}
-struct ContextMenuCounts {
- int nTotal; // total #items (includes files & directories, either side)
- int nCopyable[3];
- int nDeletable[3];
- int nDeletableOnBoth;
- int nOpenable[3];
- int nOpenableOnBoth;
- int nOpenableOnWith[3];
- int nDiffItems;
-};
-
-template<class InputIterator>
-ContextMenuCounts CountForContextMenu(const InputIterator& begin, const InputIterator& end, const CDiffContext& ctxt)
-{
- ContextMenuCounts counts = {0};
- int nDirs = ctxt.GetCompareDirs();
- for (InputIterator it = begin; it != end; ++it)
- {
- const DIFFITEM& di = *it;
- if (di.diffcode.diffcode == 0) // Invalid value, this must be special item
- continue;
- int nOpenablePerItem = 0;
- for (int j = 0; j < nDirs; ++j)
- {
- if (IsItemCopyable(di, j))
- ++counts.nCopyable[j];
- if (IsItemDeletable(di, j))
- ++counts.nDeletable[j];
- if (IsItemOpenableOn(di, j))
- {
- ++nOpenablePerItem;
- ++counts.nOpenable[j];
- }
- if (IsItemOpenableOnWith(di, j))
- ++counts.nOpenableOnWith[j];
- }
- if (IsItemDeletableOnBoth(ctxt, di))
- ++counts.nDeletableOnBoth;
-
- if (IsItemNavigableDiff(ctxt, di))
- ++counts.nDiffItems;
-
- if (nOpenablePerItem == nDirs)
- ++counts.nOpenableOnBoth;
-
- ++counts.nTotal;
- }
- return counts;
-}
-
-
/**
* @brief Rename selected item on both left and right sides.
*
{
m_sel = it.m_sel;
m_pList = it.m_pList;
+ m_pdi = it.m_pdi;
return *this;
}
ON_UPDATE_COMMAND_UI(ID_L2R, (OnUpdateDirCopy<SIDE_LEFT, SIDE_RIGHT>))
ON_COMMAND(ID_DIR_COPY_LEFT_TO_RIGHT, (OnCtxtDirCopy<SIDE_LEFT, SIDE_RIGHT>))
ON_UPDATE_COMMAND_UI(ID_DIR_COPY_LEFT_TO_RIGHT, (OnUpdateCtxtDirCopy<SIDE_LEFT, SIDE_RIGHT>))
+ ON_COMMAND(ID_DIR_COPY_LEFT_TO_MIDDLE, (OnCtxtDirCopy<SIDE_LEFT, SIDE_MIDDLE>))
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_LEFT_TO_MIDDLE, (OnUpdateCtxtDirCopy<SIDE_LEFT, SIDE_MIDDLE>))
ON_COMMAND(ID_R2L, (OnDirCopy<SIDE_RIGHT, SIDE_LEFT>))
ON_UPDATE_COMMAND_UI(ID_R2L, (OnUpdateDirCopy<SIDE_RIGHT, SIDE_LEFT>))
ON_COMMAND(ID_DIR_COPY_RIGHT_TO_LEFT, (OnCtxtDirCopy<SIDE_RIGHT, SIDE_LEFT>))
ON_UPDATE_COMMAND_UI(ID_DIR_COPY_RIGHT_TO_LEFT, (OnUpdateCtxtDirCopy<SIDE_RIGHT, SIDE_LEFT>))
+ ON_COMMAND(ID_DIR_COPY_RIGHT_TO_MIDDLE, (OnCtxtDirCopy<SIDE_RIGHT, SIDE_MIDDLE>))
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_RIGHT_TO_MIDDLE, (OnUpdateCtxtDirCopy<SIDE_RIGHT, SIDE_MIDDLE>))
+ ON_COMMAND(ID_DIR_COPY_MIDDLE_TO_LEFT, (OnCtxtDirCopy<SIDE_MIDDLE, SIDE_LEFT>))
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_MIDDLE_TO_LEFT, (OnUpdateCtxtDirCopy<SIDE_MIDDLE, SIDE_LEFT>))
+ ON_COMMAND(ID_DIR_COPY_MIDDLE_TO_RIGHT, (OnCtxtDirCopy<SIDE_MIDDLE, SIDE_RIGHT>))
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_MIDDLE_TO_RIGHT, (OnUpdateCtxtDirCopy<SIDE_MIDDLE, SIDE_RIGHT>))
ON_COMMAND(ID_DIR_DEL_LEFT, OnCtxtDirDel<SIDE_LEFT>)
ON_UPDATE_COMMAND_UI(ID_DIR_DEL_LEFT, OnUpdateCtxtDirDel<SIDE_LEFT>)
ON_COMMAND(ID_DIR_DEL_RIGHT, OnCtxtDirDel<SIDE_RIGHT>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_DEL_MIDDLE, OnUpdateCtxtDirDel<SIDE_MIDDLE>)
+ ON_COMMAND(ID_DIR_DEL_MIDDLE, OnCtxtDirDel<SIDE_MIDDLE>)
ON_UPDATE_COMMAND_UI(ID_DIR_DEL_RIGHT, OnUpdateCtxtDirDel<SIDE_RIGHT>)
ON_COMMAND(ID_DIR_DEL_BOTH, OnCtxtDirDelBoth)
ON_UPDATE_COMMAND_UI(ID_DIR_DEL_BOTH, OnUpdateCtxtDirDelBoth)
+ ON_COMMAND(ID_DIR_DEL_ALL, OnCtxtDirDelBoth)
+ ON_UPDATE_COMMAND_UI(ID_DIR_DEL_ALL, OnUpdateCtxtDirDelBoth)
ON_COMMAND(ID_DIR_OPEN_LEFT, OnCtxtDirOpen<SIDE_LEFT>)
ON_UPDATE_COMMAND_UI(ID_DIR_OPEN_LEFT, OnUpdateCtxtDirOpen<SIDE_LEFT>)
ON_COMMAND(ID_DIR_OPEN_LEFT_WITH, OnCtxtDirOpenWith<SIDE_LEFT>)
ON_UPDATE_COMMAND_UI(ID_DIR_OPEN_LEFT_WITH, OnUpdateCtxtDirOpenWith<SIDE_LEFT>)
+ ON_COMMAND(ID_DIR_OPEN_MIDDLE, OnCtxtDirOpen<SIDE_MIDDLE>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_OPEN_MIDDLE, OnUpdateCtxtDirOpen<SIDE_MIDDLE>)
+ ON_COMMAND(ID_DIR_OPEN_MIDDLE_WITH, OnCtxtDirOpenWith<SIDE_MIDDLE>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_OPEN_MIDDLE_WITH, OnUpdateCtxtDirOpenWith<SIDE_MIDDLE>)
ON_COMMAND(ID_DIR_OPEN_RIGHT, OnCtxtDirOpen<SIDE_RIGHT>)
ON_UPDATE_COMMAND_UI(ID_DIR_OPEN_RIGHT, OnUpdateCtxtDirOpen<SIDE_RIGHT>)
ON_COMMAND(ID_DIR_OPEN_RIGHT_WITH, OnCtxtDirOpenWith<SIDE_RIGHT>)
ON_UPDATE_COMMAND_UI(ID_POPUP_OPEN_WITH_UNPACKER, OnUpdateCtxtOpenWithUnpacker)
ON_COMMAND(ID_DIR_OPEN_LEFT_WITHEDITOR, OnCtxtDirOpenWithEditor<SIDE_LEFT>)
ON_UPDATE_COMMAND_UI(ID_DIR_OPEN_LEFT_WITHEDITOR, OnUpdateCtxtDirOpenWithEditor<SIDE_LEFT>)
+ ON_COMMAND(ID_DIR_OPEN_MIDDLE_WITHEDITOR, OnCtxtDirOpenWithEditor<SIDE_MIDDLE>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_OPEN_MIDDLE_WITHEDITOR, OnUpdateCtxtDirOpenWithEditor<SIDE_MIDDLE>)
ON_COMMAND(ID_DIR_OPEN_RIGHT_WITHEDITOR, OnCtxtDirOpenWithEditor<SIDE_RIGHT>)
ON_UPDATE_COMMAND_UI(ID_DIR_OPEN_RIGHT_WITHEDITOR, OnUpdateCtxtDirOpenWithEditor<SIDE_RIGHT>)
ON_COMMAND(ID_DIR_COPY_LEFT_TO_BROWSE, OnCtxtDirCopyTo<SIDE_LEFT>)
+ ON_COMMAND(ID_DIR_COPY_MIDDLE_TO_BROWSE, OnCtxtDirCopyTo<SIDE_MIDDLE>)
ON_COMMAND(ID_DIR_COPY_RIGHT_TO_BROWSE, OnCtxtDirCopyTo<SIDE_RIGHT>)
ON_UPDATE_COMMAND_UI(ID_DIR_COPY_LEFT_TO_BROWSE, OnUpdateCtxtDirCopyTo<SIDE_LEFT>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_MIDDLE_TO_BROWSE, OnUpdateCtxtDirCopyTo<SIDE_MIDDLE>)
ON_UPDATE_COMMAND_UI(ID_DIR_COPY_RIGHT_TO_BROWSE, OnUpdateCtxtDirCopyTo<SIDE_RIGHT>)
ON_WM_DESTROY()
ON_WM_CHAR()
ON_UPDATE_COMMAND_UI(ID_FILE_RIGHT_READONLY, OnUpdateReadOnly<SIDE_RIGHT>)
ON_COMMAND(ID_TOOLS_CUSTOMIZECOLUMNS, OnCustomizeColumns)
ON_COMMAND(ID_TOOLS_GENERATEREPORT, OnToolsGenerateReport)
- ON_COMMAND(ID_DIR_ZIP_LEFT, OnCtxtDirZipLeft)
- ON_COMMAND(ID_DIR_ZIP_RIGHT, OnCtxtDirZipRight)
- ON_COMMAND(ID_DIR_ZIP_BOTH, OnCtxtDirZipBoth)
- ON_COMMAND(ID_DIR_ZIP_BOTH_DIFFS_ONLY, OnCtxtDirZipBothDiffsOnly)
+ ON_COMMAND(ID_DIR_ZIP_LEFT, OnCtxtDirZip<DirItemEnumerator::Left>)
+ ON_COMMAND(ID_DIR_ZIP_MIDDLE, OnCtxtDirZip<DirItemEnumerator::Middle>)
+ ON_COMMAND(ID_DIR_ZIP_RIGHT, OnCtxtDirZip<DirItemEnumerator::Right>)
+ ON_COMMAND(ID_DIR_ZIP_BOTH, OnCtxtDirZip<DirItemEnumerator::Original | DirItemEnumerator::Altered | DirItemEnumerator::BalanceFolders>)
+ ON_COMMAND(ID_DIR_ZIP_ALL, OnCtxtDirZip<DirItemEnumerator::Original | DirItemEnumerator::Altered | DirItemEnumerator::BalanceFolders>)
+ ON_COMMAND(ID_DIR_ZIP_BOTH_DIFFS_ONLY, OnCtxtDirZip<DirItemEnumerator::Original | DirItemEnumerator::Altered | DirItemEnumerator::BalanceFolders | DirItemEnumerator::DiffsOnly>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_ZIP_LEFT, OnUpdateCtxtDirCopyTo<SIDE_LEFT>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_ZIP_MIDDLE, OnUpdateCtxtDirCopyTo<SIDE_MIDDLE>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_ZIP_RIGHT, OnUpdateCtxtDirCopyTo<SIDE_RIGHT>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_ZIP_BOTH, OnUpdateCtxtDirCopyBothTo)
+ ON_UPDATE_COMMAND_UI(ID_DIR_ZIP_ALL, OnUpdateCtxtDirCopyBothTo)
+ ON_UPDATE_COMMAND_UI(ID_DIR_ZIP_BOTH_DIFFS_ONLY, OnUpdateCtxtDirCopyBothDiffsOnlyTo)
ON_COMMAND(ID_DIR_SHELL_CONTEXT_MENU_LEFT, OnCtxtDirShellContextMenu<SIDE_LEFT>)
ON_COMMAND(ID_DIR_SHELL_CONTEXT_MENU_MIDDLE, OnCtxtDirShellContextMenu<SIDE_MIDDLE>)
ON_COMMAND(ID_DIR_SHELL_CONTEXT_MENU_RIGHT, OnCtxtDirShellContextMenu<SIDE_RIGHT>)
ON_COMMAND_RANGE(ID_PREDIFF_MANUAL, ID_PREDIFF_AUTO, OnPluginPredifferMode)
ON_UPDATE_COMMAND_UI_RANGE(ID_PREDIFF_MANUAL, ID_PREDIFF_AUTO, OnUpdatePluginPredifferMode)
ON_COMMAND(ID_DIR_COPY_PATHNAMES_LEFT, OnCopyPathnames<SIDE_LEFT>)
+ ON_COMMAND(ID_DIR_COPY_PATHNAMES_MIDDLE, OnCopyPathnames<SIDE_MIDDLE>)
ON_COMMAND(ID_DIR_COPY_PATHNAMES_RIGHT, OnCopyPathnames<SIDE_RIGHT>)
ON_COMMAND(ID_DIR_COPY_PATHNAMES_BOTH, OnCopyBothPathnames)
+ ON_COMMAND(ID_DIR_COPY_PATHNAMES_ALL, OnCopyBothPathnames)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_PATHNAMES_LEFT, OnUpdateCtxtDirCopyTo<SIDE_LEFT>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_PATHNAMES_MIDDLE, OnUpdateCtxtDirCopyTo<SIDE_MIDDLE>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_PATHNAMES_RIGHT, OnUpdateCtxtDirCopyTo<SIDE_RIGHT>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_PATHNAMES_BOTH, OnUpdateCtxtDirCopyBothTo)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_PATHNAMES_ALL, OnUpdateCtxtDirCopyBothTo)
ON_COMMAND(ID_DIR_COPY_FILENAMES, OnCopyFilenames)
ON_UPDATE_COMMAND_UI(ID_DIR_COPY_FILENAMES, OnUpdateCopyFilenames)
ON_COMMAND(ID_DIR_COPY_LEFT_TO_CLIPBOARD, OnCopyToClipboard<SIDE_LEFT>)
+ ON_COMMAND(ID_DIR_COPY_MIDDLE_TO_CLIPBOARD, OnCopyToClipboard<SIDE_MIDDLE>)
ON_COMMAND(ID_DIR_COPY_RIGHT_TO_CLIPBOARD, OnCopyToClipboard<SIDE_RIGHT>)
ON_COMMAND(ID_DIR_COPY_BOTH_TO_CLIPBOARD, OnCopyBothToClipboard)
+ ON_COMMAND(ID_DIR_COPY_ALL_TO_CLIPBOARD, OnCopyBothToClipboard)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_LEFT_TO_CLIPBOARD, OnUpdateCtxtDirCopyTo<SIDE_LEFT>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_MIDDLE_TO_CLIPBOARD, OnUpdateCtxtDirCopyTo<SIDE_MIDDLE>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_RIGHT_TO_CLIPBOARD, OnUpdateCtxtDirCopyTo<SIDE_RIGHT>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_BOTH_TO_CLIPBOARD, OnUpdateCtxtDirCopyBothTo)
+ ON_UPDATE_COMMAND_UI(ID_DIR_COPY_ALL_TO_CLIPBOARD, OnUpdateCtxtDirCopyBothTo)
ON_COMMAND(ID_DIR_ITEM_RENAME, OnItemRename)
ON_UPDATE_COMMAND_UI(ID_DIR_ITEM_RENAME, OnUpdateItemRename)
ON_COMMAND(ID_DIR_HIDE_FILENAMES, OnHideFilenames)
ON_COMMAND(ID_DIR_MOVE_LEFT_TO_BROWSE, OnCtxtDirMoveTo<SIDE_LEFT>)
ON_UPDATE_COMMAND_UI(ID_DIR_MOVE_LEFT_TO_BROWSE, OnUpdateCtxtDirMoveTo<SIDE_LEFT>)
+ ON_COMMAND(ID_DIR_MOVE_MIDDLE_TO_BROWSE, OnCtxtDirMoveTo<SIDE_MIDDLE>)
+ ON_UPDATE_COMMAND_UI(ID_DIR_MOVE_MIDDLE_TO_BROWSE, OnUpdateCtxtDirMoveTo<SIDE_MIDDLE>)
ON_COMMAND(ID_DIR_MOVE_RIGHT_TO_BROWSE, OnCtxtDirMoveTo<SIDE_RIGHT>)
ON_UPDATE_COMMAND_UI(ID_DIR_MOVE_RIGHT_TO_BROWSE, OnUpdateCtxtDirMoveTo<SIDE_RIGHT>)
ON_UPDATE_COMMAND_UI(ID_DIR_HIDE_FILENAMES, OnUpdateHideFilenames)
ON_COMMAND(ID_OPTIONS_SHOWDIFFERENT, OnOptionsShowDifferent)
ON_COMMAND(ID_OPTIONS_SHOWIDENTICAL, OnOptionsShowIdentical)
ON_COMMAND(ID_OPTIONS_SHOWUNIQUELEFT, OnOptionsShowUniqueLeft)
+ ON_COMMAND(ID_OPTIONS_SHOWUNIQUEMIDDLE, OnOptionsShowUniqueMiddle)
ON_COMMAND(ID_OPTIONS_SHOWUNIQUERIGHT, OnOptionsShowUniqueRight)
ON_COMMAND(ID_OPTIONS_SHOWBINARIES, OnOptionsShowBinaries)
ON_COMMAND(ID_OPTIONS_SHOWSKIPPED, OnOptionsShowSkipped)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWDIFFERENT, OnUpdateOptionsShowdifferent)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWIDENTICAL, OnUpdateOptionsShowidentical)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWUNIQUELEFT, OnUpdateOptionsShowuniqueleft)
+ ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWUNIQUEMIDDLE, OnUpdateOptionsShowuniquemiddle)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWUNIQUERIGHT, OnUpdateOptionsShowuniqueright)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWBINARIES, OnUpdateOptionsShowBinaries)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWSKIPPED, OnUpdateOptionsShowSkipped)
ASSERT(pPopup != NULL);
if (pDoc->m_nDirs < 3)
+ {
+ pPopup->RemoveMenu(ID_DIR_COPY_LEFT_TO_MIDDLE, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_MIDDLE_TO_LEFT, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_MIDDLE_TO_RIGHT, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_MIDDLE_TO_BROWSE, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_RIGHT_TO_MIDDLE, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_MOVE_MIDDLE_TO_BROWSE, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_DEL_MIDDLE, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_DEL_ALL, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_OPEN_MIDDLE, MF_BYCOMMAND);
+
+ for (int i = 0; i < pPopup->GetMenuItemCount(); ++i)
+ {
+ if (pPopup->GetMenuItemID(i) == ID_DIR_HIDE_FILENAMES)
+ pPopup->RemoveMenu(i + 3, MF_BYPOSITION);
+ }
+
+ pPopup->RemoveMenu(ID_DIR_OPEN_MIDDLE_WITHEDITOR, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_OPEN_MIDDLE_WITH, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_PATHNAMES_MIDDLE, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_PATHNAMES_ALL, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_MIDDLE_TO_CLIPBOARD, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_ALL_TO_CLIPBOARD, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_ZIP_MIDDLE, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_ZIP_ALL, MF_BYCOMMAND);
pPopup->RemoveMenu(ID_DIR_SHELL_CONTEXT_MENU_MIDDLE, MF_BYCOMMAND);
+ }
+ else
+ {
+ pPopup->RemoveMenu(ID_DIR_COPY_PATHNAMES_BOTH, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_COPY_BOTH_TO_CLIPBOARD, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_ZIP_BOTH, MF_BYCOMMAND);
+ pPopup->RemoveMenu(ID_DIR_DEL_BOTH, MF_BYCOMMAND);
+ }
+
CMenu menuPluginsHolder;
menuPluginsHolder.LoadMenu(IDR_POPUP_PLUGINS_SETTINGS);
theApp.TranslateMenu(menuPluginsHolder.m_hMenu);
pPopup->AppendMenu(MF_SEPARATOR);
pPopup->AppendMenu(MF_POPUP, (int)menuPluginsHolder.m_hMenu, s.c_str());
-
- // TODO: It would be more efficient to set
- // all the popup items now with one traverse over selected items
- // instead of using updates, in which we make a traverse for every item
- // Perry, 2002-12-04
-
- //2003/12/17 Jochen:
- //- Archive related menu items follow the above suggestion.
- //- For disabling to work properly, the tracking frame's m_bAutoMenuEnable
- // member has to temporarily be turned off.
- ContextMenuCounts counts = CountForContextMenu(SelBegin(), SelEnd(), GetDiffContext());
-
- FormatContextMenu(pPopup, ID_DIR_COPY_PATHNAMES_LEFT, counts.nOpenable[0], counts.nTotal);
- FormatContextMenu(pPopup, ID_DIR_COPY_PATHNAMES_RIGHT, counts.nOpenable[GetDocument()->m_nDirs - 1], counts.nTotal);
- FormatContextMenu(pPopup, ID_DIR_COPY_PATHNAMES_BOTH, counts.nOpenableOnBoth, counts.nTotal);
-
- FormatContextMenu(pPopup, ID_DIR_COPY_LEFT_TO_CLIPBOARD, counts.nOpenable[0], counts.nTotal);
- FormatContextMenu(pPopup, ID_DIR_COPY_RIGHT_TO_CLIPBOARD, counts.nOpenable[GetDocument()->m_nDirs - 1], counts.nTotal);
- FormatContextMenu(pPopup, ID_DIR_COPY_BOTH_TO_CLIPBOARD, counts.nOpenableOnBoth, counts.nTotal);
-
- FormatContextMenu(pPopup, ID_DIR_ZIP_LEFT, counts.nOpenable[0], counts.nTotal);
- FormatContextMenu(pPopup, ID_DIR_ZIP_RIGHT, counts.nOpenable[GetDocument()->m_nDirs - 1], counts.nTotal);
- FormatContextMenu(pPopup, ID_DIR_ZIP_BOTH, counts.nOpenableOnBoth, counts.nTotal);
- FormatContextMenu(pPopup, ID_DIR_ZIP_BOTH_DIFFS_ONLY, counts.nDiffItems, counts.nTotal);
-
CFrameWnd *pFrame = GetTopLevelFrame();
ASSERT(pFrame != NULL);
pFrame->m_bAutoMenuEnable = FALSE;
{
Counts counts = Count(&DirActions::IsItemDeletableOnBoth);
pCmdUI->Enable(counts.count > 0);
- pCmdUI->SetText(FormatMenuItemStringBoth(counts.count, counts.total).c_str());
+ pCmdUI->SetText(FormatMenuItemStringAll(GetDocument()->m_nDirs, counts.count, counts.total).c_str());
}
/**
pCmdUI->SetText(FormatMenuItemStringTo(stype, counts.count, counts.total).c_str());
}
+void CDirView::OnUpdateCtxtDirCopyBothTo(CCmdUI* pCmdUI)
+{
+ Counts counts = Count(&DirActions::IsItemCopyableBothToOn);
+ pCmdUI->Enable(counts.count > 0);
+ pCmdUI->SetText(FormatMenuItemStringAllTo(GetDocument()->m_nDirs, counts.count, counts.total).c_str());
+}
+
+void CDirView::OnUpdateCtxtDirCopyBothDiffsOnlyTo(CCmdUI* pCmdUI)
+{
+ Counts counts = Count(&DirActions::IsItemNavigableDiff);
+ pCmdUI->Enable(counts.count > 0);
+ pCmdUI->SetText(FormatMenuItemStringDifferencesTo(counts.count, counts.total).c_str());
+}
+
/**
* @brief Get keydata associated with item in given index.
* @param [in] idx Item's index to list in UI.
template<SIDE_TYPE stype>
void CDirView::OnUpdateCtxtDirOpenWithEditor(CCmdUI* pCmdUI)
{
- Counts counts = Count(&DirActions::IsItemOpenanbleOnWith<stype>);
+ Counts counts = Count(&DirActions::IsItemOpenableOnWith<stype>);
pCmdUI->Enable(counts.count > 0 && counts.total == 1);
}
template<SIDE_TYPE stype>
void CDirView::OnUpdateCtxtDirOpen(CCmdUI* pCmdUI)
{
- Counts counts = Count(&DirActions::IsItemOpenanbleOn<stype>);
+ Counts counts = Count(&DirActions::IsItemOpenableOn<stype>);
pCmdUI->Enable(counts.count > 0 && counts.total == 1);
}
template<SIDE_TYPE stype>
void CDirView::OnUpdateCtxtDirOpenWith(CCmdUI* pCmdUI)
{
- Counts counts = Count(&DirActions::IsItemOpenanbleOnWith<stype>);
+ Counts counts = Count(&DirActions::IsItemOpenableOnWith<stype>);
pCmdUI->Enable(counts.count > 0 && counts.total == 1);
}
AddNewItem(0, SPECIAL_ITEM_POS, bEnable ? DIFFIMG_DIRUP : DIFFIMG_DIRUP_DISABLE, 0);
}
-/**
- * @brief Zip selected files from left side.
- */
-void CDirView::OnCtxtDirZipLeft()
-{
- if (!HasZipSupport())
- {
- LangMessageBox(IDS_NO_ZIP_SUPPORT, MB_ICONINFORMATION);
- return;
- }
-
- DirItemEnumerator
- (
- this, LVNI_SELECTED
- | DirItemEnumerator::Left
- ).CompressArchive();
-}
-
-/**
- * @brief Zip selected files from right side.
- */
-void CDirView::OnCtxtDirZipRight()
-{
- if (!HasZipSupport())
- {
- LangMessageBox(IDS_NO_ZIP_SUPPORT, MB_ICONINFORMATION);
- return;
- }
-
- DirItemEnumerator
- (
- this, LVNI_SELECTED
- | DirItemEnumerator::Right
- ).CompressArchive();
-}
-
-/**
- * @brief Zip selected files from both sides, using original/altered format.
- */
-void CDirView::OnCtxtDirZipBoth()
-{
- if (!HasZipSupport())
- {
- LangMessageBox(IDS_NO_ZIP_SUPPORT, MB_ICONINFORMATION);
- return;
- }
-
- DirItemEnumerator
- (
- this, LVNI_SELECTED
- | DirItemEnumerator::Original
- | DirItemEnumerator::Altered
- | DirItemEnumerator::BalanceFolders
- ).CompressArchive();
-}
-
-/**
- * @brief Zip selected diffs from both sides, using original/altered format.
- */
-void CDirView::OnCtxtDirZipBothDiffsOnly()
+template <int flag>
+void CDirView::OnCtxtDirZip()
{
if (!HasZipSupport())
{
DirItemEnumerator
(
- this, LVNI_SELECTED
- | DirItemEnumerator::Original
- | DirItemEnumerator::Altered
- | DirItemEnumerator::BalanceFolders
- | DirItemEnumerator::DiffsOnly
+ this, LVNI_SELECTED | flag
).CompressArchive();
}
}
/**
+ * @brief Show/Hide middle-only files/directories
+ */
+void CDirView::OnOptionsShowUniqueMiddle()
+{
+ m_dirfilter.show_unique_middle = !m_dirfilter.show_unique_middle;
+ GetOptionsMgr()->SaveOption(OPT_SHOW_UNIQUE_MIDDLE, m_dirfilter.show_unique_middle);
+ Redisplay();
+}
+
+/**
* @brief Show/Hide right-only files/directories
*/
void CDirView::OnOptionsShowUniqueRight()
pCmdUI->SetCheck(m_dirfilter.show_unique_left);
}
+void CDirView::OnUpdateOptionsShowuniquemiddle(CCmdUI* pCmdUI)
+{
+ pCmdUI->Enable(GetDocument()->m_nDirs > 2);
+ pCmdUI->SetCheck(m_dirfilter.show_unique_middle);
+}
+
void CDirView::OnUpdateOptionsShowuniqueright(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_dirfilter.show_unique_right);
afx_msg void OnCtxtDirCopyTo();
template<SIDE_TYPE stype>
afx_msg void OnUpdateCtxtDirCopyTo(CCmdUI* pCmdUI);
+ afx_msg void OnUpdateCtxtDirCopyBothTo(CCmdUI* pCmdUI);
+ afx_msg void OnUpdateCtxtDirCopyBothDiffsOnlyTo(CCmdUI* pCmdUI);
afx_msg void OnDestroy();
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnCtxtOpenWithUnpacker();
afx_msg void OnUpdateCtxtOpenWithUnpacker(CCmdUI* pCmdUI);
afx_msg void OnToolsGenerateReport();
- afx_msg void OnCtxtDirZipLeft();
- afx_msg void OnCtxtDirZipRight();
- afx_msg void OnCtxtDirZipBoth();
- afx_msg void OnCtxtDirZipBothDiffsOnly();
+ template<int flag>
+ afx_msg void OnCtxtDirZip();
template<SIDE_TYPE stype>
afx_msg void OnCtxtDirShellContextMenu();
afx_msg void OnUpdateCtxtDir(CCmdUI* pCmdUI);
afx_msg void OnOptionsShowDifferent();
afx_msg void OnOptionsShowIdentical();
afx_msg void OnOptionsShowUniqueLeft();
+ afx_msg void OnOptionsShowUniqueMiddle();
afx_msg void OnOptionsShowUniqueRight();
afx_msg void OnOptionsShowBinaries();
afx_msg void OnOptionsShowSkipped();
afx_msg void OnUpdateOptionsShowdifferent(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionsShowidentical(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionsShowuniqueleft(CCmdUI* pCmdUI);
+ afx_msg void OnUpdateOptionsShowuniquemiddle(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionsShowuniqueright(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionsShowBinaries(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionsShowSkipped(CCmdUI* pCmdUI);
{ ID_MERGE_DELETE, IDB_MERGE_DELETE, CMainFrame::MENU_FOLDERCMP },
{ ID_TOOLS_GENERATEREPORT, IDB_TOOLS_GENERATEREPORT, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_LEFT_TO_RIGHT, IDB_LEFT_TO_RIGHT, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_LEFT_TO_MIDDLE, IDB_LEFT_TO_MIDDLE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_RIGHT_TO_LEFT, IDB_RIGHT_TO_LEFT, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_RIGHT_TO_MIDDLE, IDB_RIGHT_TO_MIDDLE, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_MIDDLE_TO_LEFT, IDB_MIDDLE_TO_LEFT, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_MIDDLE_TO_RIGHT, IDB_MIDDLE_TO_RIGHT, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_LEFT_TO_BROWSE, IDB_LEFT_TO_BROWSE, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_MIDDLE_TO_BROWSE, IDB_MIDDLE_TO_BROWSE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_RIGHT_TO_BROWSE, IDB_RIGHT_TO_BROWSE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_MOVE_LEFT_TO_BROWSE, IDB_MOVE_LEFT_TO_BROWSE, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_MOVE_MIDDLE_TO_BROWSE, IDB_MOVE_MIDDLE_TO_BROWSE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_MOVE_RIGHT_TO_BROWSE, IDB_MOVE_RIGHT_TO_BROWSE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_DEL_LEFT, IDB_LEFT, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_DEL_MIDDLE, IDB_MIDDLE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_DEL_RIGHT, IDB_RIGHT, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_DEL_BOTH, IDB_BOTH, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_DEL_ALL, IDB_ALL, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_PATHNAMES_LEFT, IDB_LEFT, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_PATHNAMES_MIDDLE, IDB_MIDDLE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_PATHNAMES_RIGHT, IDB_RIGHT, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_PATHNAMES_BOTH, IDB_BOTH, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_PATHNAMES_ALL, IDB_ALL, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_LEFT_TO_CLIPBOARD, IDB_LEFT, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_MIDDLE_TO_CLIPBOARD, IDB_MIDDLE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_RIGHT_TO_CLIPBOARD, IDB_RIGHT, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_COPY_BOTH_TO_CLIPBOARD, IDB_BOTH, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_COPY_ALL_TO_CLIPBOARD, IDB_ALL, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_ZIP_LEFT, IDB_LEFT, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_ZIP_MIDDLE, IDB_MIDDLE, CMainFrame::MENU_FOLDERCMP },
{ ID_DIR_ZIP_RIGHT, IDB_RIGHT, CMainFrame::MENU_FOLDERCMP },
- { ID_DIR_ZIP_BOTH, IDB_BOTH, CMainFrame::MENU_FOLDERCMP }
+ { ID_DIR_ZIP_BOTH, IDB_BOTH, CMainFrame::MENU_FOLDERCMP },
+ { ID_DIR_ZIP_ALL, IDB_ALL, CMainFrame::MENU_FOLDERCMP }
};
MENUITEM "Show &Identical Items", ID_OPTIONS_SHOWIDENTICAL
MENUITEM "Show &Different Items", ID_OPTIONS_SHOWDIFFERENT
MENUITEM "Show L&eft Unique Items", ID_OPTIONS_SHOWUNIQUELEFT
+ MENUITEM "Show Midd&le Unique Items", ID_OPTIONS_SHOWUNIQUEMIDDLE
MENUITEM "Show Ri&ght Unique Items", ID_OPTIONS_SHOWUNIQUERIGHT
MENUITEM "Show S&kipped Items", ID_OPTIONS_SHOWSKIPPED
MENUITEM "S&how Binary Files", ID_OPTIONS_SHOWBINARIES
MENUITEM SEPARATOR
POPUP "&Copy"
BEGIN
- MENUITEM "&Left to Right", ID_DIR_COPY_LEFT_TO_RIGHT
- MENUITEM "L&eft to...", ID_DIR_COPY_LEFT_TO_BROWSE
- MENUITEM "&Right to Left", ID_DIR_COPY_RIGHT_TO_LEFT
- MENUITEM "R&ight to...", ID_DIR_COPY_RIGHT_TO_BROWSE
+ MENUITEM "Left to Middle (%1 of %2)", ID_DIR_COPY_LEFT_TO_MIDDLE
+ MENUITEM "Left to Right (%1 of %2)", ID_DIR_COPY_LEFT_TO_RIGHT
+ MENUITEM "Left to... (%1 of %2)", ID_DIR_COPY_LEFT_TO_BROWSE
+ MENUITEM "Middle to Left (%1 of %2)", ID_DIR_COPY_MIDDLE_TO_LEFT
+ MENUITEM "Middle to Right (%1 of %2)", ID_DIR_COPY_MIDDLE_TO_RIGHT
+ MENUITEM "Middle to... (%1 of %2)", ID_DIR_COPY_MIDDLE_TO_BROWSE
+ MENUITEM "Right to Middle (%1 of %2)", ID_DIR_COPY_RIGHT_TO_MIDDLE
+ MENUITEM "Right to Left (%1 of %2)", ID_DIR_COPY_RIGHT_TO_LEFT
+ MENUITEM "Right to... (%1 of %2)", ID_DIR_COPY_RIGHT_TO_BROWSE
END
POPUP "&Move"
BEGIN
- MENUITEM "&Left to...", ID_DIR_MOVE_LEFT_TO_BROWSE
- MENUITEM "&Right to...", ID_DIR_MOVE_RIGHT_TO_BROWSE
+ MENUITEM "Left to... (%1 of %2)", ID_DIR_MOVE_LEFT_TO_BROWSE
+ MENUITEM "Middle to... (%1 of %2)", ID_DIR_MOVE_MIDDLE_TO_BROWSE
+ MENUITEM "Right to... (%1 of %2)", ID_DIR_MOVE_RIGHT_TO_BROWSE
END
POPUP "&Delete"
BEGIN
MENUITEM "&Left", ID_DIR_DEL_LEFT
+ MENUITEM "&Middle", ID_DIR_DEL_MIDDLE
MENUITEM "&Right", ID_DIR_DEL_RIGHT
MENUITEM "&Both", ID_DIR_DEL_BOTH
+ MENUITEM "&All", ID_DIR_DEL_ALL
END
MENUITEM "Re&name", ID_DIR_ITEM_RENAME
MENUITEM "&Hide Items", ID_DIR_HIDE_FILENAMES
MENUITEM "with &External Editor", ID_DIR_OPEN_LEFT_WITHEDITOR
MENUITEM "&with...", ID_DIR_OPEN_LEFT_WITH
END
+ POPUP "Open Midd&le"
+ BEGIN
+ MENUITEM "with &Registered Application", ID_DIR_OPEN_MIDDLE
+ MENUITEM "with &External Editor", ID_DIR_OPEN_MIDDLE_WITHEDITOR
+ MENUITEM "&with...", ID_DIR_OPEN_MIDDLE_WITH
+ END
POPUP "O&pen Right"
BEGIN
MENUITEM "with &Registered Application", ID_DIR_OPEN_RIGHT
MENUITEM SEPARATOR
POPUP "Cop&y Pathnames"
BEGIN
- MENUITEM "&Left (%1 of %2)", ID_DIR_COPY_PATHNAMES_LEFT
- MENUITEM "&Right (%1 of %2)", ID_DIR_COPY_PATHNAMES_RIGHT
- MENUITEM "&Both (%1 of %2)", ID_DIR_COPY_PATHNAMES_BOTH
+ MENUITEM "Left (%1 of %2)", ID_DIR_COPY_PATHNAMES_LEFT
+ MENUITEM "Middle (%1 of %2)", ID_DIR_COPY_PATHNAMES_MIDDLE
+ MENUITEM "Right (%1 of %2)", ID_DIR_COPY_PATHNAMES_RIGHT
+ MENUITEM "Both (%1 of %2)", ID_DIR_COPY_PATHNAMES_BOTH
+ MENUITEM "All (%1 of %2)", ID_DIR_COPY_PATHNAMES_ALL
END
MENUITEM "Copy &Filenames", ID_DIR_COPY_FILENAMES
POPUP "Copy Items To Clip&board"
BEGIN
- MENUITEM "&Left (%1 of %2)", ID_DIR_COPY_LEFT_TO_CLIPBOARD
- MENUITEM "&Right (%1 of %2)", ID_DIR_COPY_RIGHT_TO_CLIPBOARD
- MENUITEM "&Both (%1 of %2)", ID_DIR_COPY_BOTH_TO_CLIPBOARD
+ MENUITEM "Left (%1 of %2)", ID_DIR_COPY_LEFT_TO_CLIPBOARD
+ MENUITEM "Middle (%1 of %2)", ID_DIR_COPY_MIDDLE_TO_CLIPBOARD
+ MENUITEM "Right (%1 of %2)", ID_DIR_COPY_RIGHT_TO_CLIPBOARD
+ MENUITEM "Both (%1 of %2)", ID_DIR_COPY_BOTH_TO_CLIPBOARD
+ MENUITEM "All (%1 of %2)", ID_DIR_COPY_ALL_TO_CLIPBOARD
END
MENUITEM SEPARATOR
POPUP "&Zip"
BEGIN
- MENUITEM "&Left... (%1 of %2)", ID_DIR_ZIP_LEFT
- MENUITEM "&Right... (%1 of %2)", ID_DIR_ZIP_RIGHT
- MENUITEM "&Both... (%1 of %2)", ID_DIR_ZIP_BOTH
- MENUITEM "&Differences... (%1 of %2)", ID_DIR_ZIP_BOTH_DIFFS_ONLY
+ MENUITEM "Left to... (%1 of %2)", ID_DIR_ZIP_LEFT
+ MENUITEM "Middle to... (%1 of %2)", ID_DIR_ZIP_MIDDLE
+ MENUITEM "Right to... (%1 of %2)", ID_DIR_ZIP_RIGHT
+ MENUITEM "Both to... (%1 of %2)", ID_DIR_ZIP_BOTH
+ MENUITEM "All to... (%1 of %2)", ID_DIR_ZIP_ALL
+ MENUITEM "Differences to... (%1 of %2)", ID_DIR_ZIP_BOTH_DIFFS_ONLY
END
MENUITEM SEPARATOR
MENUITEM "&Refresh", ID_RESCAN
// DIRECTORY DIFFING : FILE COPY/DELETE (WITHOUT/WITH NUMBER MARK)
STRINGTABLE
BEGIN
- IDS_COPY_TO_LEFT "Right to Left (%1)"
- IDS_COPY_TO_RIGHT "Left to Right (%1)"
- IDS_COPY_TO_LEFT2 "Right to Left (%1 of %2)"
- IDS_COPY_TO_RIGHT2 "Left to Right (%1 of %2)"
+ IDS_COPY_RIGHT_TO_LEFT "Right to Left (%1)"
+ IDS_COPY_RIGHT_TO_MIDDLE "Right to Middle (%1)"
+ IDS_COPY_MIDDLE_TO_LEFT "Middle to Left (%1)"
+ IDS_COPY_MIDDLE_TO_RIGHT "Middle to Right (%1)"
+ IDS_COPY_LEFT_TO_RIGHT "Left to Right (%1)"
+ IDS_COPY_LEFT_TO_MIDDLE "Left to Middle (%1)"
+ IDS_COPY_RIGHT_TO_LEFT2 "Right to Left (%1 of %2)"
+ IDS_COPY_RIGHT_TO_MIDDLE2 "Right to Middle (%1 of %2)"
+ IDS_COPY_MIDDLE_TO_LEFT2 "Middle to Left (%1 of %2)"
+ IDS_COPY_MIDDLE_TO_RIGHT2 "Middle to Right (%1 of %2)"
+ IDS_COPY_LEFT_TO_RIGHT2 "Left to Right (%1 of %2)"
+ IDS_COPY_LEFT_TO_MIDDLE2 "Left to Middle (%1 of %2)"
IDS_COPY_LEFT_TO "Left to... (%1)"
+ IDS_COPY_MIDDLE_TO "Middle to... (%1)"
IDS_COPY_RIGHT_TO "Right to... (%1)"
+ IDS_COPY_BOTH_TO "Both to... (%1)"
+ IDS_COPY_ALL_TO "All to... (%1)"
+ IDS_COPY_DIFFERENCES_TO "Differences to... (%1)"
IDS_COPY_LEFT_TO2 "Left to... (%1 of %2)"
+ IDS_COPY_MIDDLE_TO2 "Middle to... (%1 of %2)"
IDS_COPY_RIGHT_TO2 "Right to... (%1 of %2)"
+ IDS_COPY_BOTH_TO2 "Both to... (%1 of %2)"
+ IDS_COPY_ALL_TO2 "All to... (%1 of %2)"
+ IDS_COPY_DIFFERENCES_TO2 "Differences to... (%1 of %2)"
END
// DIRECTORY DIFFING : FILE COPY/DELETE (WITHOUT/WITH NUMBER MARK) (2)
STRINGTABLE
BEGIN
IDS_DEL_LEFT_FMT "Left (%1)"
+ IDS_DEL_MIDDLE_FMT "Middle (%1)"
IDS_DEL_RIGHT_FMT "Right (%1)"
IDS_DEL_BOTH_FMT "Both (%1)"
+ IDS_DEL_ALL_FMT "All (%1)"
IDS_DEL_LEFT_FMT2 "Left (%1 of %2)"
+ IDS_DEL_MIDDLE_FMT2 "Middle (%1 of %2)"
IDS_DEL_RIGHT_FMT2 "Right (%1 of %2)"
IDS_DEL_BOTH_FMT2 "Both (%1 of %2)"
+ IDS_DEL_ALL_FMT2 "All (%1 of %2)"
IDS_MOVE_LEFT_TO "Left to... (%1)"
+ IDS_MOVE_MIDDLE_TO "Middle to... (%1)"
IDS_MOVE_RIGHT_TO "Right to... (%1)"
IDS_MOVE_LEFT_TO2 "Left to... (%1 of %2)"
+ IDS_MOVE_MIDDLE_TO2 "Middle to... (%1 of %2)"
IDS_MOVE_RIGHT_TO2 "Right to... (%1 of %2)"
IDS_SELECT_DEST_LEFT "Left side - select destination folder:"
+ IDS_SELECT_DEST_MIDDLE "Middle side - select destination folder:"
IDS_SELECT_DEST_RIGHT "Right side - select destination folder:"
IDS_FILES_AFFECTED_FMT "(%1 Files Affected)"
IDS_FILES_AFFECTED_FMT2 "(%1 of %2 Files Affected)"
IDB_EDIT_GOTO_PREV_BOOKMARK BITMAP "res\\prev_bookmark.bmp"
IDB_EDIT_CLEAR_ALL_BOOKMARKS BITMAP "res\\clear_bookmarks.bmp"
IDB_LEFT BITMAP "res\\left.bmp"
+IDB_MIDDLE BITMAP "res\\middle.bmp"
IDB_RIGHT BITMAP "res\\right.bmp"
IDB_BOTH BITMAP "res\\both.bmp"
+IDB_ALL BITMAP "res\\all.bmp"
IDB_LEFT_TO_RIGHT BITMAP "res\\left_to_right.bmp"
+IDB_LEFT_TO_MIDDLE BITMAP "res\\left_to_middle.bmp"
IDB_RIGHT_TO_LEFT BITMAP "res\\right_to_left.bmp"
+IDB_RIGHT_TO_MIDDLE BITMAP "res\\right_to_middle.bmp"
+IDB_MIDDLE_TO_LEFT BITMAP "res\\middle_to_left.bmp"
+IDB_MIDDLE_TO_RIGHT BITMAP "res\\middle_to_right.bmp"
IDB_COPY_FROM_LEFT BITMAP "res\\from_left.bmp"
IDB_COPY_FROM_RIGHT BITMAP "res\\from_right.bmp"
IDB_LEFT_TO_BROWSE BITMAP "res\\left_to_browse.bmp"
+IDB_MIDDLE_TO_BROWSE BITMAP "res\\middle_to_browse.bmp"
IDB_RIGHT_TO_BROWSE BITMAP "res\\right_to_browse.bmp"
IDB_MOVE_LEFT_TO_BROWSE BITMAP "res\\move_left_to_browse.bmp"
+IDB_MOVE_MIDDLE_TO_BROWSE BITMAP "res\\move_middle_to_browse.bmp"
IDB_MOVE_RIGHT_TO_BROWSE BITMAP "res\\move_right_to_browse.bmp"
IDB_TOOLBAR_DISABLED32 BITMAP "res\\ToolbarDisabled32.bmp"
IDB_TOOLBAR_ENABLED32 BITMAP "res\\ToolbarEnabled32.bmp"
// View-menu
extern const String OPT_SHOW_UNIQUE_LEFT OP("Settings/ShowUniqueLeft");
+extern const String OPT_SHOW_UNIQUE_MIDDLE OP("Settings/ShowUniqueMiddle");
extern const String OPT_SHOW_UNIQUE_RIGHT OP("Settings/ShowUniqueRight");
extern const String OPT_SHOW_DIFFERENT OP("Settings/ShowDifferent");
extern const String OPT_SHOW_IDENTICAL OP("Settings/ShowIdentical");
// Initialise options (name, default value)
pOptions->InitOption(OPT_SHOW_UNIQUE_LEFT, true);
+ pOptions->InitOption(OPT_SHOW_UNIQUE_MIDDLE, true);
pOptions->InitOption(OPT_SHOW_UNIQUE_RIGHT, true);
pOptions->InitOption(OPT_SHOW_DIFFERENT, true);
pOptions->InitOption(OPT_SHOW_IDENTICAL, true);
#define IDB_EDIT_CLEAR_ALL_BOOKMARKS 345
#define IDB_TOOLBAR_DISABLED 346
#define IDB_LEFT 347
+#define IDB_MIDDLE 747
#define IDB_RIGHT 348
#define IDB_BOTH 349
+#define IDB_ALL 749
#define IDB_LEFT_TO_RIGHT 350
+#define IDB_LEFT_TO_MIDDLE 750
#define IDB_RIGHT_TO_LEFT 351
+#define IDB_RIGHT_TO_MIDDLE 751
+#define IDB_MIDDLE_TO_LEFT 851
+#define IDB_MIDDLE_TO_RIGHT 951
#define IDB_LEFT_TO_BROWSE 352
+#define IDB_MIDDLE_TO_BROWSE 752
#define IDB_RIGHT_TO_BROWSE 353
#define IDB_MOVE_LEFT_TO_BROWSE 354
+#define IDB_MOVE_MIDDLE_TO_BROWSE 754
#define IDB_MOVE_RIGHT_TO_BROWSE 355
#define IDB_TOOLBAR_DISABLED32 356
#define IDB_TOOLBAR_ENABLED32 357
#define IDS_VSS_UNCOERROR 17272
#define IDS_VIEWS_OUTOFSYNC 17300
#define ID_DIR_COPY_LEFT_TO_RIGHT 17600
+#define ID_DIR_COPY_LEFT_TO_MIDDLE 27600
#define ID_DIR_COPY_LEFT_TO_BROWSE 17601
+#define ID_DIR_COPY_MIDDLE_TO_LEFT 27601
+#define ID_DIR_COPY_MIDDLE_TO_RIGHT 37601
+#define ID_DIR_COPY_MIDDLE_TO_BROWSE 47601
#define ID_DIR_COPY_RIGHT_TO_LEFT 17602
+#define ID_DIR_COPY_RIGHT_TO_MIDDLE 27602
#define ID_DIR_COPY_RIGHT_TO_BROWSE 17603
-#define ID_DIR_COPY_LEFT_TO_CLIPBOARD 27602
-#define ID_DIR_COPY_RIGHT_TO_CLIPBOARD 27603
-#define ID_DIR_COPY_BOTH_TO_CLIPBOARD 27604
+#define ID_DIR_COPY_LEFT_TO_CLIPBOARD 37602
+#define ID_DIR_COPY_MIDDLE_TO_CLIPBOARD 27603
+#define ID_DIR_COPY_RIGHT_TO_CLIPBOARD 37603
+#define ID_DIR_COPY_BOTH_TO_CLIPBOARD 47603
+#define ID_DIR_COPY_ALL_TO_CLIPBOARD 48603
#define ID_DIR_DEL_LEFT 17604
+#define ID_DIR_DEL_MIDDLE 27604
#define ID_DIR_DEL_RIGHT 17605
#define ID_DIR_DEL_BOTH 17606
-#define IDS_COPY_TO_LEFT 17607
-#define IDS_COPY_TO_RIGHT 17608
-#define IDS_COPY_TO_LEFT2 17609
-#define IDS_COPY_TO_RIGHT2 17610
+#define ID_DIR_DEL_ALL 18606
+#define IDS_COPY_RIGHT_TO_LEFT 17607
+#define IDS_COPY_RIGHT_TO_MIDDLE 27607
+#define IDS_COPY_MIDDLE_TO_LEFT 17608
+#define IDS_COPY_MIDDLE_TO_RIGHT 27608
+#define IDS_COPY_LEFT_TO_RIGHT 17609
+#define IDS_COPY_LEFT_TO_MIDDLE 27609
+#define IDS_COPY_RIGHT_TO_LEFT2 17610
+#define IDS_COPY_RIGHT_TO_MIDDLE2 28610
+#define IDS_COPY_MIDDLE_TO_LEFT2 37610
+#define IDS_COPY_MIDDLE_TO_RIGHT2 38610
+#define IDS_COPY_LEFT_TO_RIGHT2 47610
+#define IDS_COPY_LEFT_TO_MIDDLE2 48610
#define IDS_COPY_LEFT_TO 17611
+#define IDS_COPY_MIDDLE_TO 27611
#define IDS_COPY_RIGHT_TO 17612
+#define IDS_COPY_BOTH_TO 27612
+#define IDS_COPY_ALL_TO 28612
+#define IDS_COPY_DIFFERENCES_TO 38612
#define IDS_COPY_LEFT_TO2 17613
+#define IDS_COPY_MIDDLE_TO2 27613
#define IDS_COPY_RIGHT_TO2 17614
+#define IDS_COPY_BOTH_TO2 27614
+#define IDS_COPY_ALL_TO2 28614
+#define IDS_COPY_DIFFERENCES_TO2 38614
#define IDS_DEL_LEFT_FMT 17615
+#define IDS_DEL_MIDDLE_FMT 27615
#define IDS_DEL_RIGHT_FMT 17616
#define IDS_DEL_BOTH_FMT 17617
+#define IDS_DEL_ALL_FMT 27617
#define IDS_DEL_LEFT_FMT2 17618
+#define IDS_DEL_MIDDLE_FMT2 27618
#define IDS_DEL_RIGHT_FMT2 17619
#define IDS_DEL_BOTH_FMT2 17620
+#define IDS_DEL_ALL_FMT2 27620
#define IDS_MOVE_LEFT_TO 17622
+#define IDS_MOVE_MIDDLE_TO 27622
#define IDS_MOVE_RIGHT_TO 17623
#define IDS_MOVE_LEFT_TO2 17624
+#define IDS_MOVE_MIDDLE_TO2 27624
#define IDS_MOVE_RIGHT_TO2 17625
#define IDS_SELECT_DEST_LEFT 17626
+#define IDS_SELECT_DEST_MIDDLE 27626
#define IDS_SELECT_DEST_RIGHT 17627
#define IDS_CONFIRM_DELETE_SINGLE 17638
#define IDS_CONFIRM_SINGLE_COPY 17639
#define ID_DIR_OPEN_LEFT 17648
#define ID_DIR_OPEN_LEFT_WITHEDITOR 17649
#define ID_DIR_OPEN_LEFT_WITH 17650
+#define ID_DIR_OPEN_MIDDLE 27651
+#define ID_DIR_OPEN_MIDDLE_WITHEDITOR 27652
+#define ID_DIR_OPEN_MIDDLE_WITH 27653
#define ID_DIR_OPEN_RIGHT 17651
#define ID_DIR_OPEN_RIGHT_WITHEDITOR 17652
#define ID_DIR_OPEN_RIGHT_WITH 17653
#define ID_DIR_COPY_FILENAMES 17655
#define ID_DIR_COPY_PATHNAMES_LEFT 17656
+#define ID_DIR_COPY_PATHNAMES_MIDDLE 27656
#define ID_DIR_COPY_PATHNAMES_RIGHT 17657
#define ID_DIR_COPY_PATHNAMES_BOTH 17658
+#define ID_DIR_COPY_PATHNAMES_ALL 27658
#define IDS_ERROR_EXECUTE_FILE 17659
#define IDS_UNKNOWN_ARCHIVE_FORMAT 17664
#define IDS_COLHDR_FILENAME 17696
#define ID_OPTIONS_SHOWIDENTICAL 32800
#define ID_OPTIONS_SHOWDIFFERENT 32801
#define ID_OPTIONS_SHOWUNIQUELEFT 32802
+#define ID_OPTIONS_SHOWUNIQUEMIDDLE 42802
#define ID_OPTIONS_SHOWUNIQUERIGHT 32803
#define ID_OPTIONS_SHOWBINARIES 32804
#define ID_OPTIONS_SHOWSKIPPED 32805
#define ID_STATUS_FILTER 32970
#define ID_STATUS_PLUGIN 32971
#define ID_DIR_ZIP_LEFT 32976
+#define ID_DIR_ZIP_MIDDLE 42976
#define ID_DIR_ZIP_RIGHT 32977
#define ID_DIR_ZIP_BOTH 32978
+#define ID_DIR_ZIP_ALL 42978
#define ID_DIR_ZIP_BOTH_DIFFS_ONLY 32979
#define ID_DIR_MOVE_LEFT_TO_BROWSE 32980
+#define ID_DIR_MOVE_MIDDLE_TO_BROWSE 42980
#define ID_DIR_MOVE_RIGHT_TO_BROWSE 32981
#define ID_DIR_HIDE_FILENAMES 32982
#define ID_DIR_ITEM_RENAME 32983