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; } }
void OnMenuActivating(HWND /* hWnd */, HMENU hMenu, int position) { if (::GetSubMenu(::GetMenu(g_HWND), position) != hMenu) return; if (position == kFileMenuIndex) { if ((HMENU)g_FileMenu == 0) { g_FileMenu.CreatePopup(); CopyMenu(hMenu, g_FileMenu); } CMenu menu; menu.Attach(hMenu); while (menu.GetItemCount() > 0) { if (!menu.RemoveItem(0, MF_BYPOSITION)) break; } // CopyMenu(g_FileMenu, hMenu); g_App.GetFocusedPanel().CreateFileMenu(hMenu); } else if (position == kEditMenuIndex) { /* 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 == kViewMenuIndex) { // 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.CheckItem(IDM_VIEW_TWO_PANELS, MF_BYCOMMAND | ((g_App.NumPanels == 2) ? MF_CHECKED : MF_UNCHECKED)); menu.CheckItem(IDM_VIEW_FLAT_VIEW, MF_BYCOMMAND | ((g_App.GetFlatMode()) ? MF_CHECKED : MF_UNCHECKED)); menu.CheckItem(IDM_VIEW_ARCHIVE_TOOLBAR, MF_BYCOMMAND | (g_App.ShowArchiveToolbar ? MF_CHECKED : MF_UNCHECKED)); menu.CheckItem(IDM_VIEW_STANDARD_TOOLBAR, MF_BYCOMMAND | (g_App.ShowStandardToolbar ? MF_CHECKED : MF_UNCHECKED)); menu.CheckItem(IDM_VIEW_TOOLBARS_LARGE_BUTTONS, MF_BYCOMMAND | (g_App.LargeButtons ? MF_CHECKED : MF_UNCHECKED)); menu.CheckItem(IDM_VIEW_TOOLBARS_SHOW_BUTTONS_TEXT, MF_BYCOMMAND | (g_App.ShowButtonsLables ? MF_CHECKED : MF_UNCHECKED)); } else if (position == kBookmarksMenuIndex) { CMenu menu; menu.Attach(hMenu); CMenu subMenu; subMenu.Attach(menu.GetSubMenu(0)); while (subMenu.GetItemCount() > 0) subMenu.RemoveItem(subMenu.GetItemCount() - 1, MF_BYPOSITION); 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); } while (menu.GetItemCount() > 2) menu.RemoveItem(menu.GetItemCount() - 1, MF_BYPOSITION); 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); } } }