MCPcopy Create free account
hub / github.com/WinMerge/winmerge / ShowMenu

Method ShowMenu

Src/FileFilterHelperMenu.cpp:77–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

75}
76
77std::optional<String> CFileFilterHelperMenu::ShowMenu(const String& masks, int x, int y, CWnd* pParentWnd)
78{
79 std::optional<String> result;
80 VERIFY(LoadMenu(IDR_POPUP_FILTERMENU));
81 I18n::TranslateMenu(m_hMenu);
82 for (;;)
83 {
84 CMenu* pPopup = GetSubMenu(0);
85 if (pPopup)
86 {
87#ifndef _WIN64
88 DisableMenuItemRecursive(pPopup, ID_FILTERMENU_ADDITIONAL_PROPS);
89 DisableMenuItemRecursive(pPopup, ID_FILTERMENU_DIFF_ADDITIONAL_PROPS);
90#endif
91 for (int i = ID_FILTERMENU_CONDITION_ANY; i <= ID_FILTERMENU_CONDITION_RIGHT; i++)
92 pPopup->CheckMenuItem(i,
93 MF_BYCOMMAND | ((ID_FILTERMENU_CONDITION_ANY + m_targetSide) == i ? MF_CHECKED : 0));
94 for (int i = ID_FILTERMENU_FILE_CONDITION_DIFF_LEFT_RIGHT; i <= ID_FILTERMENU_FILE_CONDITION_DIFF_ALL; i++)
95 pPopup->CheckMenuItem(i,
96 MF_BYCOMMAND | ((ID_FILTERMENU_FILE_CONDITION_DIFF_LEFT_RIGHT + m_targetDiffSide) == i ? MF_CHECKED : 0));
97 CheckMenuItemRecursive(pPopup, ID_FILTERMENU_FOLDER_STATS_RECURSIVE, m_recursive);
98
99 if (m_targetDiffSide == 3)
100 {
101 RemoveMenuItemsInRangeRecursive(pPopup, ID_FILTERMENU_DIFF_SIZE_LESS, ID_FILTERMENU_DIFF_SIZE_RANGE);
102 RemoveMenuItemsInRangeRecursive(pPopup, ID_FILTERMENU_DIFF_DATE_LESS, ID_FILTERMENU_DIFF_DATE_RANGE);
103 RemoveTrailingSeparator(pPopup);
104 }
105
106 const int command = pPopup->TrackPopupMenu(
107 TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, x, y, pParentWnd);
108 if (command == 0)
109 {
110 // User cancelled the menu
111 }
112 else if (command >= ID_FILTERMENU_CONDITION_ANY && command <= ID_FILTERMENU_CONDITION_RIGHT)
113 {
114 m_targetSide = command - ID_FILTERMENU_CONDITION_ANY;
115 continue;
116 }
117 else if (command >= ID_FILTERMENU_FILE_CONDITION_DIFF_LEFT_RIGHT && command <= ID_FILTERMENU_FILE_CONDITION_DIFF_ALL)
118 {
119 m_targetDiffSide = command - ID_FILTERMENU_FILE_CONDITION_DIFF_LEFT_RIGHT;
120 continue;
121 }
122 else if (command == ID_FILTERMENU_FOLDER_STATS_RECURSIVE)
123 {
124 m_recursive = !m_recursive;
125 continue;
126 }
127 else
128 {
129 result = OnCommand(masks, command, pParentWnd);
130 }
131 }
132 break;
133 }
134 DestroyMenu();

Callers 1

OnCommandMethod · 0.45

Calls 5

TranslateMenuFunction · 0.85
DisableMenuItemRecursiveFunction · 0.85
CheckMenuItemRecursiveFunction · 0.85
RemoveTrailingSeparatorFunction · 0.85

Tested by

no test coverage detected