void CPanel::CreateFileMenu(HMENU menuSpec, CMyComPtr<IContextMenu> &sevenZipContextMenu, CMyComPtr<IContextMenu> &systemContextMenu, bool programMenu) { sevenZipContextMenu.Release(); systemContextMenu.Release(); CRecordVector<UInt32> operatedIndices; GetOperatedItemIndices(operatedIndices); CMenu menu; menu.Attach(menuSpec); CreateSevenZipMenu(menu, operatedIndices, sevenZipContextMenu); if (g_App.ShowSystemMenu) CreateSystemMenu(menu, operatedIndices, systemContextMenu); if (menu.GetItemCount() > 0) menu.AppendItem(MF_SEPARATOR, 0, (LPCTSTR)0); int i; for (i = 0; i < operatedIndices.Size(); i++) if (IsItemFolder(operatedIndices[i])) break; bool allAreFiles = (i == operatedIndices.Size()); LoadFileMenu(menu, menu.GetItemCount(), programMenu, IsFSFolder(), operatedIndices.Size(), allAreFiles); }
void CPanel::ShowColumnsContextMenu(int x, int y) { CMenu menu; CMenuDestroyer menuDestroyer(menu); menu.CreatePopup(); const int kCommandStart = 100; for (int i = 0; i < _properties.Size(); i++) { const CItemProperty &prop = _properties[i]; UINT flags = MF_STRING; if (prop.IsVisible) flags |= MF_CHECKED; if (i == 0) flags |= MF_GRAYED; menu.AppendItem(flags, kCommandStart + i, prop.Name); } int menuResult = menu.Track(TPM_LEFTALIGN | TPM_RETURNCMD | TPM_NONOTIFY, x, y, _listView); if (menuResult >= kCommandStart && menuResult <= kCommandStart + _properties.Size()) { int index = menuResult - kCommandStart; CItemProperty &prop = _properties[index]; prop.IsVisible = !prop.IsVisible; if (prop.IsVisible) { int prevVisibleSize = _visibleProperties.Size(); prop.Order = prevVisibleSize; _visibleProperties.Add(prop); InsertColumn(prevVisibleSize); } else { int visibleIndex = _visibleProperties.FindItemWithID(prop.ID); _visibleProperties.Delete(visibleIndex); /* if (_sortIndex == index) { _sortIndex = 0; _ascending = true; } */ if (_sortID == prop.ID) { _sortID = kpidName; _ascending = true; } _listView.DeleteColumn(visibleIndex); } } }
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); } } }
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); } } }