void LoadFileMenu(HMENU hMenu, int startPos, bool /* forFileMode */, bool programMenu) { { CMenu srcMenu; srcMenu.Attach(::GetSubMenu(::GetMenu(g_HWND), 0)); if ((HMENU)g_FileMenu == 0) { g_FileMenu.CreatePopup(); CopyMenu(srcMenu, g_FileMenu); } } CMenu destMenu; destMenu.Attach(hMenu); for (int i = 0; i < g_FileMenu.GetItemCount(); i++) { CMenuItem item; item.fMask = MIIM_STATE | MIIM_ID | Get_fMaskForFTypeAndString(); item.fType = MFT_STRING; if (g_FileMenu.GetItem(i, true, item)) { if (!programMenu) if (item.wID == IDCLOSE) continue; /* bool createItem = (item.wID == IDM_CREATE_FOLDER || item.wID == IDM_CREATE_FILE); if (forFileMode) { if (createItem) continue; } else { if (!createItem) continue; } */ if (destMenu.InsertItem(startPos, true, item)) startPos++; } } while (destMenu.GetItemCount() > 0) { CMenuItem item; item.fMask = MIIM_TYPE; item.fType = 0; // item.dwTypeData = 0; int lastIndex = destMenu.GetItemCount() - 1; if (!destMenu.GetItem(lastIndex, true, item)) break; if(item.fType != MFT_SEPARATOR) break; if (!destMenu.RemoveItem(lastIndex, MF_BYPOSITION)) break; } }
static void MyChangeMenu(HMENU menuLoc, int level, int menuIndex) { CMenu menu; menu.Attach(menuLoc); for (int i = 0;; i++) { CMenuItem item; item.fMask = Get_fMask_for_String() | MIIM_SUBMENU | MIIM_ID; item.fType = MFT_STRING; if (!menu.GetItem(i, true, item)) break; { UString newString; if (item.hSubMenu) { UInt32 langID = 0; if (level == 1 && menuIndex == kMenuIndex_Bookmarks) langID = kAddToFavoritesLangID; else { MyChangeMenu(item.hSubMenu, level + 1, i); if (level == 1 && menuIndex == kMenuIndex_View) langID = kToolbarsLangID; else if (level == 0 && i < ARRAY_SIZE(kTopMenuLangIDs)) langID = kTopMenuLangIDs[i]; else continue; } LangString_OnlyFromLangFile(langID, newString); if (newString.IsEmpty()) continue; } else { if (item.IsSeparator()) continue; int langPos = FindLangItem(item.wID); // we don't need lang change for CRC items!!! LangString_OnlyFromLangFile(langPos >= 0 ? kIDLangPairs[langPos].LangID : item.wID, newString); if (newString.IsEmpty()) continue; int tabPos = item.StringValue.ReverseFind(L'\t'); if (tabPos >= 0) newString += item.StringValue.Ptr(tabPos); } { item.StringValue = newString; item.fMask = Get_fMask_for_String(); item.fType = MFT_STRING; menu.SetItem(i, true, item); } } } }
static void MyChangeMenu(HMENU menuLoc, int level, int menuIndex) { CMenu menu; menu.Attach(menuLoc); for (int i = 0;; i++) { CMenuItem item; item.fMask = Get_fMaskForString() | MIIM_SUBMENU | MIIM_ID; item.fType = MFT_STRING; if (!menu.GetItem(i, true, item)) break; { UString newString; if (item.hSubMenu) { UInt32 langID = 0; if (level == 1 && menuIndex == kMenuIndex_Bookmarks) langID = kAddToFavoritesLangID; else { MyChangeMenu(item.hSubMenu, level + 1, i); if (level == 1 && menuIndex == kMenuIndex_View) langID = kToolbarsLangID; else if (level == 0 && i < sizeof(kTopMenuLangIDs) / sizeof(kTopMenuLangIDs[0])) langID = kTopMenuLangIDs[i]; else continue; } newString = LangString(langID); if (newString.IsEmpty()) continue; } else { int langPos = FindLangItem(item.wID); if (langPos < 0) continue; newString = LangString(kIDLangPairs[langPos].LangID); if (newString.IsEmpty()) continue; UString shorcutString = item.StringValue; int tabPos = shorcutString.ReverseFind(wchar_t('\t')); if (tabPos >= 0) newString += shorcutString.Mid(tabPos); } { item.StringValue = newString; item.fMask = Get_fMaskForString(); item.fType = MFT_STRING; menu.SetItem(i, true, item); } } } }
static void CopyMenu(HMENU srcMenuSpec, HMENU destMenuSpec) { CMenu srcMenu; srcMenu.Attach(srcMenuSpec); CMenu destMenu; destMenu.Attach(destMenuSpec); int startPos = 0; for (int i = 0; i < srcMenu.GetItemCount(); i++) { CMenuItem item; item.fMask = MIIM_STATE | MIIM_ID | Get_fMaskForFTypeAndString(); item.fType = MFT_STRING; if (srcMenu.GetItem(i, true, item)) if (destMenu.InsertItem(startPos, true, item)) startPos++; } }
void LoadFileMenu(HMENU hMenu, int startPos, bool programMenu, bool isFsFolder, int numItems, bool allAreFiles) { CMenu destMenu; destMenu.Attach(hMenu); UString diffPath; ReadRegDiff(diffPath); int numRealItems = startPos; for (int i = 0;; i++) { CMenuItem item; item.fMask = MIIM_STATE | MIIM_ID | Get_fMaskForFTypeAndString(); item.fType = MFT_STRING; if (!g_FileMenu.GetItem(i, true, item)) break; { if (!programMenu && item.wID == IDCLOSE) continue; if (item.wID == IDM_FILE_DIFF && diffPath.IsEmpty()) continue; bool isOneFsFile = (isFsFolder && numItems == 1 && allAreFiles); bool disable = ((item.wID == IDM_FILE_SPLIT || item.wID == IDM_FILE_COMBINE) && !isOneFsFile); bool isBigScreen = NControl::IsDialogSizeOK(40, 200); if (!isBigScreen && (disable || item.IsSeparator())) continue; if (destMenu.InsertItem(startPos, true, item)) startPos++; if (disable) destMenu.EnableItem(startPos - 1, MF_BYPOSITION | MF_GRAYED); if (!item.IsSeparator()) numRealItems = startPos; } } destMenu.RemoveAllItemsFrom(numRealItems); }
static void CopyMenu(HMENU srcMenuSpec, HMENU destMenuSpec) { CMenu srcMenu; srcMenu.Attach(srcMenuSpec); CMenu destMenu; destMenu.Attach(destMenuSpec); int startPos = 0; for (int i = 0;; i++) { CMenuItem item; item.fMask = MIIM_SUBMENU | MIIM_STATE | MIIM_ID | Get_fMask_for_FType_and_String(); item.fType = MFT_STRING; if (!srcMenu.GetItem(i, true, item)) break; CopyPopMenu_IfRequired(item); if (destMenu.InsertItem(startPos, true, item)) startPos++; } }
void CFileMenu::Load(HMENU hMenu, unsigned startPos) { CMenu destMenu; destMenu.Attach(hMenu); UString diffPath; ReadRegDiff(diffPath); unsigned numRealItems = startPos; for (unsigned i = 0;; i++) { CMenuItem item; item.fMask = MIIM_SUBMENU | MIIM_STATE | MIIM_ID | Get_fMask_for_FType_and_String(); item.fType = MFT_STRING; if (!g_FileMenu.GetItem(i, true, item)) break; { if (!programMenu && item.wID == IDCLOSE) continue; if (item.wID == IDM_DIFF && diffPath.IsEmpty()) continue; bool isOneFsFile = (isFsFolder && numItems == 1 && allAreFiles); bool disable = (!isOneFsFile && (item.wID == IDM_SPLIT || item.wID == IDM_COMBINE)); if (readOnly) { switch (item.wID) { case IDM_RENAME: case IDM_MOVE_TO: case IDM_DELETE: case IDM_COMMENT: case IDM_CREATE_FOLDER: case IDM_CREATE_FILE: disable = true; } } if (item.wID == IDM_LINK && numItems != 1) disable = true; if (item.wID == IDM_ALT_STREAMS) disable = !isAltStreamsSupported; bool isBigScreen = NControl::IsDialogSizeOK(40, 200); if (!isBigScreen && (disable || item.IsSeparator())) continue; CopyPopMenu_IfRequired(item); if (destMenu.InsertItem(startPos, true, item)) { if (disable) destMenu.EnableItem(startPos, MF_BYPOSITION | MF_GRAYED); startPos++; } if (!item.IsSeparator()) numRealItems = startPos; } } destMenu.RemoveAllItemsFrom(numRealItems); }