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); }
void OnMenuActivating(HWND /* hWnd */, HMENU hMenu, int position) { HMENU mainMenu = #ifdef UNDER_CE g_App._commandBar.GetMenu(0); #else ::GetMenu(g_HWND) #endif ; if (::GetSubMenu(mainMenu, position) != hMenu) return; if (position == kMenuIndex_File) { CMenu menu; menu.Attach(hMenu); menu.RemoveAllItems(); g_App.GetFocusedPanel().CreateFileMenu(hMenu); } else if (position == kMenuIndex_Edit) { /* CMenu menu; menu.Attach(hMenu); menu.EnableItem(IDM_EDIT_CUT, MF_ENABLED); menu.EnableItem(IDM_EDIT_COPY, MF_ENABLED); menu.EnableItem(IDM_EDIT_PASTE, IsClipboardFormatAvailableHDROP() ? MF_ENABLED : MF_GRAYED); */ } else if (position == kMenuIndex_View) { // View; CMenu menu; menu.Attach(hMenu); menu.CheckRadioItem(IDM_VIEW_LARGE_ICONS, IDM_VIEW_DETAILS, IDM_VIEW_LARGE_ICONS + g_App.GetListViewMode(), MF_BYCOMMAND); menu.CheckRadioItem(IDM_VIEW_ARANGE_BY_NAME, IDM_VIEW_ARANGE_NO_SORT, GetSortControlID(g_App.GetSortID()), MF_BYCOMMAND); menu.CheckItemByID(IDM_VIEW_TWO_PANELS, g_App.NumPanels == 2); menu.CheckItemByID(IDM_VIEW_FLAT_VIEW, g_App.GetFlatMode()); menu.CheckItemByID(IDM_VIEW_ARCHIVE_TOOLBAR, g_App.ShowArchiveToolbar); menu.CheckItemByID(IDM_VIEW_STANDARD_TOOLBAR, g_App.ShowStandardToolbar); menu.CheckItemByID(IDM_VIEW_TOOLBARS_LARGE_BUTTONS, g_App.LargeButtons); menu.CheckItemByID(IDM_VIEW_TOOLBARS_SHOW_BUTTONS_TEXT, g_App.ShowButtonsLables); } else if (position == kMenuIndex_Bookmarks) { CMenu menu; menu.Attach(hMenu); CMenu subMenu; subMenu.Attach(menu.GetSubMenu(0)); subMenu.RemoveAllItems(); int i; for (i = 0; i < 10; i++) { UString s = LangString(IDS_BOOKMARK, 0x03000720); s += L" "; wchar_t c = (wchar_t)(L'0' + i); s += c; s += L"\tAlt+Shift+"; s += c; subMenu.AppendItem(MF_STRING, kSetBookmarkMenuID + i, s); } menu.RemoveAllItemsFrom(2); for (i = 0; i < 10; i++) { UString path = g_App.AppState.FastFolders.GetString(i); const int kMaxSize = 100; const int kFirstPartSize = kMaxSize / 2; if (path.Length() > kMaxSize) { path = path.Left(kFirstPartSize) + UString(L" ... ") + path.Right(kMaxSize - kFirstPartSize); } UString s = path; if (s.IsEmpty()) s = L"-"; s += L"\tAlt+"; s += (wchar_t)(L'0' + i); menu.AppendItem(MF_STRING, kOpenBookmarkMenuID + i, s); } } }
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); }