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

Method ShowPropMenu

Src/FileFilterHelperMenu.cpp:139–212  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

137}
138
139std::optional<String> CFileFilterHelperMenu::ShowPropMenu(int command, const String& masks, CWnd* pParentWnd)
140{
141 std::optional<String> result;
142 CMenu menu;
143 PropertySystem ps({ m_propName });
144 VARTYPE vt;
145 int id = 0;
146 ps.GetPropertyType(0, vt);
147 if (command == ID_FILTERMENU_ADDITIONAL_PROPS)
148 {
149 if (vt == VT_FILETIME)
150 id = IDR_POPUP_FILTERMENU_DATE;
151 else if (vt == VT_UI8 && m_propName.rfind(_T("Size")) == m_propName.length() - 4)
152 id = IDR_POPUP_FILTERMENU_SIZE;
153 }
154 else
155 {
156 if (vt == VT_FILETIME)
157 id = IDR_POPUP_FILTERMENU_DIFF_DATE;
158 else if (vt == VT_UI8 && m_propName.rfind(_T("Size")) == m_propName.length() - 4)
159 id = IDR_POPUP_FILTERMENU_DIFF_SIZE;
160 else
161 id = IDR_POPUP_FILTERMENU_DIFF_PROP;
162 }
163 if (id != 0)
164 {
165 menu.LoadMenu(id);
166 I18n::TranslateMenu(menu.m_hMenu);
167 CMenu* pPopup = menu.GetSubMenu(0);
168 if (pPopup)
169 {
170 if (m_targetDiffSide == 3)
171 {
172 RemoveMenuItemsInRangeRecursive(pPopup, ID_FILTERMENU_DIFF_SIZE_LESS, ID_FILTERMENU_DIFF_SIZE_RANGE);
173 RemoveMenuItemsInRangeRecursive(pPopup, ID_FILTERMENU_DIFF_DATE_LESS, ID_FILTERMENU_DIFF_DATE_RANGE);
174 RemoveMenuItemsInRangeRecursive(pPopup, ID_FILTERMENU_DIFF_PROP_LESS, ID_FILTERMENU_DIFF_PROP_GREATER_EQUAL);
175 }
176
177 CPoint pt;
178 GetCursorPos(&pt);
179 const int command2 = pPopup->TrackPopupMenu(
180 TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, pParentWnd);
181 if (command2 != 0)
182 {
183 result = OnCommand(masks, command2, pParentWnd);
184 }
185 }
186 }
187 else
188 {
189 if (command == ID_FILTERMENU_ADDITIONAL_PROPS)
190 {
191 if (vt == VT_I4 || vt == VT_UI4 || vt == VT_I8 || vt == VT_UI8 ||
192 vt == VT_R4 || vt == VT_R8 || vt == VT_LPWSTR || vt == (VT_VECTOR|VT_LPWSTR))
193 {
194 CFilterConditionDlg dlg(false, m_targetSide, _T(""), m_propName, _("%1 = %2"), _T("%1"));
195 if (dlg.DoModal() == IDOK)
196 result = (masks.empty() ? masks : masks + _T("|")) + _T("fe:") + dlg.m_sExpression;

Callers

nothing calls this directly

Calls 9

TranslateMenuFunction · 0.85
GetCursorPosFunction · 0.85
GetPropertyTypeMethod · 0.80
lengthMethod · 0.45
LoadMenuMethod · 0.45
DoModalMethod · 0.45
emptyMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected