1*f6dc9357SAndroid Build Coastguard Worker // MyLoadMenu.cpp
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileDir.h"
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Menu.h"
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/TimeUtils.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/Dialog.h"
9*f6dc9357SAndroid Build Coastguard Worker
10*f6dc9357SAndroid Build Coastguard Worker #include "../../PropID.h"
11*f6dc9357SAndroid Build Coastguard Worker
12*f6dc9357SAndroid Build Coastguard Worker #include "../Common/CompressCall.h"
13*f6dc9357SAndroid Build Coastguard Worker
14*f6dc9357SAndroid Build Coastguard Worker #include "AboutDialog.h"
15*f6dc9357SAndroid Build Coastguard Worker #include "App.h"
16*f6dc9357SAndroid Build Coastguard Worker #include "BrowseDialog2.h"
17*f6dc9357SAndroid Build Coastguard Worker #include "HelpUtils.h"
18*f6dc9357SAndroid Build Coastguard Worker #include "LangUtils.h"
19*f6dc9357SAndroid Build Coastguard Worker #include "MyLoadMenu.h"
20*f6dc9357SAndroid Build Coastguard Worker #include "RegistryUtils.h"
21*f6dc9357SAndroid Build Coastguard Worker
22*f6dc9357SAndroid Build Coastguard Worker #include "PropertyNameRes.h"
23*f6dc9357SAndroid Build Coastguard Worker #include "resource.h"
24*f6dc9357SAndroid Build Coastguard Worker
25*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
26*f6dc9357SAndroid Build Coastguard Worker
27*f6dc9357SAndroid Build Coastguard Worker static const UINT k_MenuID_OpenBookmark = 830;
28*f6dc9357SAndroid Build Coastguard Worker static const UINT k_MenuID_SetBookmark = 810;
29*f6dc9357SAndroid Build Coastguard Worker static const UINT k_MenuID_TimePopup = IDM_VIEW_TIME_POPUP;
30*f6dc9357SAndroid Build Coastguard Worker static const UINT k_MenuID_Time = IDM_VIEW_TIME;
31*f6dc9357SAndroid Build Coastguard Worker
32*f6dc9357SAndroid Build Coastguard Worker #if 0
33*f6dc9357SAndroid Build Coastguard Worker // static const UINT k_MenuID_Bookmark_Temp = 850;
34*f6dc9357SAndroid Build Coastguard Worker #endif
35*f6dc9357SAndroid Build Coastguard Worker
36*f6dc9357SAndroid Build Coastguard Worker extern HINSTANCE g_hInstance;
37*f6dc9357SAndroid Build Coastguard Worker
38*f6dc9357SAndroid Build Coastguard Worker #define kFMHelpTopic "FM/index.htm"
39*f6dc9357SAndroid Build Coastguard Worker
40*f6dc9357SAndroid Build Coastguard Worker extern void OptionsDialog(HWND hwndOwner, HINSTANCE hInstance);
41*f6dc9357SAndroid Build Coastguard Worker
42*f6dc9357SAndroid Build Coastguard Worker enum
43*f6dc9357SAndroid Build Coastguard Worker {
44*f6dc9357SAndroid Build Coastguard Worker k_MenuIndex_File = 0,
45*f6dc9357SAndroid Build Coastguard Worker k_MenuIndex_Edit,
46*f6dc9357SAndroid Build Coastguard Worker k_MenuIndex_View,
47*f6dc9357SAndroid Build Coastguard Worker k_MenuIndex_Bookmarks
48*f6dc9357SAndroid Build Coastguard Worker };
49*f6dc9357SAndroid Build Coastguard Worker
50*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
51*f6dc9357SAndroid Build Coastguard Worker static const UInt32 k_LangID_TopMenuItems[] =
52*f6dc9357SAndroid Build Coastguard Worker {
53*f6dc9357SAndroid Build Coastguard Worker IDM_FILE,
54*f6dc9357SAndroid Build Coastguard Worker IDM_EDIT,
55*f6dc9357SAndroid Build Coastguard Worker IDM_VIEW,
56*f6dc9357SAndroid Build Coastguard Worker IDM_FAVORITES,
57*f6dc9357SAndroid Build Coastguard Worker IDM_TOOLS,
58*f6dc9357SAndroid Build Coastguard Worker IDM_HELP
59*f6dc9357SAndroid Build Coastguard Worker };
60*f6dc9357SAndroid Build Coastguard Worker
61*f6dc9357SAndroid Build Coastguard Worker static const UInt32 k_LangID_Toolbars = IDM_VIEW_TOOLBARS;
62*f6dc9357SAndroid Build Coastguard Worker static const UInt32 k_LangID_AddToFavorites = IDM_ADD_TO_FAVORITES;
63*f6dc9357SAndroid Build Coastguard Worker
64*f6dc9357SAndroid Build Coastguard Worker static const CIDLangPair kIDLangPairs[] =
65*f6dc9357SAndroid Build Coastguard Worker {
66*f6dc9357SAndroid Build Coastguard Worker { IDCLOSE, 557 }, // IDM_EXIT
67*f6dc9357SAndroid Build Coastguard Worker { IDM_VIEW_ARANGE_BY_NAME, IDS_PROP_NAME },
68*f6dc9357SAndroid Build Coastguard Worker { IDM_VIEW_ARANGE_BY_TYPE, IDS_PROP_FILE_TYPE },
69*f6dc9357SAndroid Build Coastguard Worker { IDM_VIEW_ARANGE_BY_DATE, IDS_PROP_MTIME },
70*f6dc9357SAndroid Build Coastguard Worker { IDM_VIEW_ARANGE_BY_SIZE, IDS_PROP_SIZE }
71*f6dc9357SAndroid Build Coastguard Worker };
72*f6dc9357SAndroid Build Coastguard Worker
FindLangItem(unsigned controlID)73*f6dc9357SAndroid Build Coastguard Worker static int FindLangItem(unsigned controlID)
74*f6dc9357SAndroid Build Coastguard Worker {
75*f6dc9357SAndroid Build Coastguard Worker for (unsigned i = 0; i < Z7_ARRAY_SIZE(kIDLangPairs); i++)
76*f6dc9357SAndroid Build Coastguard Worker if (kIDLangPairs[i].ControlID == controlID)
77*f6dc9357SAndroid Build Coastguard Worker return (int)i;
78*f6dc9357SAndroid Build Coastguard Worker return -1;
79*f6dc9357SAndroid Build Coastguard Worker }
80*f6dc9357SAndroid Build Coastguard Worker #endif
81*f6dc9357SAndroid Build Coastguard Worker
GetSortControlID(PROPID propID)82*f6dc9357SAndroid Build Coastguard Worker static unsigned GetSortControlID(PROPID propID)
83*f6dc9357SAndroid Build Coastguard Worker {
84*f6dc9357SAndroid Build Coastguard Worker switch (propID)
85*f6dc9357SAndroid Build Coastguard Worker {
86*f6dc9357SAndroid Build Coastguard Worker case kpidName: return IDM_VIEW_ARANGE_BY_NAME;
87*f6dc9357SAndroid Build Coastguard Worker case kpidExtension: return IDM_VIEW_ARANGE_BY_TYPE;
88*f6dc9357SAndroid Build Coastguard Worker case kpidMTime: return IDM_VIEW_ARANGE_BY_DATE;
89*f6dc9357SAndroid Build Coastguard Worker case kpidSize: return IDM_VIEW_ARANGE_BY_SIZE;
90*f6dc9357SAndroid Build Coastguard Worker case kpidNoProperty: return IDM_VIEW_ARANGE_NO_SORT;
91*f6dc9357SAndroid Build Coastguard Worker }
92*f6dc9357SAndroid Build Coastguard Worker return IDM_VIEW_ARANGE_BY_NAME;
93*f6dc9357SAndroid Build Coastguard Worker // IDM_VIEW_ARANGE_NO_SORT;
94*f6dc9357SAndroid Build Coastguard Worker // return -1;
95*f6dc9357SAndroid Build Coastguard Worker }
96*f6dc9357SAndroid Build Coastguard Worker
97*f6dc9357SAndroid Build Coastguard Worker /*
98*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER > 1400
99*f6dc9357SAndroid Build Coastguard Worker // GetVersion was declared deprecated
100*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4996)
101*f6dc9357SAndroid Build Coastguard Worker #endif
102*f6dc9357SAndroid Build Coastguard Worker
103*f6dc9357SAndroid Build Coastguard Worker static bool g_IsNew_fMask = false;
104*f6dc9357SAndroid Build Coastguard Worker static class CInit_fMask
105*f6dc9357SAndroid Build Coastguard Worker {
106*f6dc9357SAndroid Build Coastguard Worker public:
107*f6dc9357SAndroid Build Coastguard Worker CInit_fMask()
108*f6dc9357SAndroid Build Coastguard Worker {
109*f6dc9357SAndroid Build Coastguard Worker DWORD v = GetVersion();
110*f6dc9357SAndroid Build Coastguard Worker v = ((v & 0xff) << 8) | ((v >> 8) & 0xFF);
111*f6dc9357SAndroid Build Coastguard Worker g_IsNew_fMask = (v > 0x400); // (win98/win2000) or newer
112*f6dc9357SAndroid Build Coastguard Worker }
113*f6dc9357SAndroid Build Coastguard Worker } g_Init_fMask;
114*f6dc9357SAndroid Build Coastguard Worker static UINT Get_fMask_for_String()
115*f6dc9357SAndroid Build Coastguard Worker { return g_IsNew_fMask ? MIIM_STRING : MIIM_TYPE; }
116*f6dc9357SAndroid Build Coastguard Worker static UINT Get_fMask_for_FType_and_String()
117*f6dc9357SAndroid Build Coastguard Worker { return g_IsNew_fMask ? (MIIM_STRING | MIIM_FTYPE) : MIIM_TYPE; }
118*f6dc9357SAndroid Build Coastguard Worker */
119*f6dc9357SAndroid Build Coastguard Worker
120*f6dc9357SAndroid Build Coastguard Worker /*
121*f6dc9357SAndroid Build Coastguard Worker We can use new MIIM_STRING / MIIM_FTYPE flags in the following conditions:
122*f6dc9357SAndroid Build Coastguard Worker 1) we run at new Windows (win98/win2000) or newer
123*f6dc9357SAndroid Build Coastguard Worker 2) also we probably must set MENUITEMINFO::cbSize as sizeof of full
124*f6dc9357SAndroid Build Coastguard Worker (MENUITEMINFO) that was compiled with (WINVER >= 0x0500)
125*f6dc9357SAndroid Build Coastguard Worker But it's simpler to use old MIIM_TYPE without these complex checks.
126*f6dc9357SAndroid Build Coastguard Worker */
127*f6dc9357SAndroid Build Coastguard Worker
128*f6dc9357SAndroid Build Coastguard Worker // /*
Get_fMask_for_String()129*f6dc9357SAndroid Build Coastguard Worker static inline UINT Get_fMask_for_String() { return MIIM_TYPE; }
Get_fMask_for_FType_and_String()130*f6dc9357SAndroid Build Coastguard Worker static inline UINT Get_fMask_for_FType_and_String() { return MIIM_TYPE; }
131*f6dc9357SAndroid Build Coastguard Worker // */
132*f6dc9357SAndroid Build Coastguard Worker
Is_MenuItem_TimePopup(const CMenuItem & item)133*f6dc9357SAndroid Build Coastguard Worker static bool Is_MenuItem_TimePopup(const CMenuItem &item)
134*f6dc9357SAndroid Build Coastguard Worker {
135*f6dc9357SAndroid Build Coastguard Worker return item.wID == k_MenuID_TimePopup ||
136*f6dc9357SAndroid Build Coastguard Worker item.StringValue.IsPrefixedBy_Ascii_NoCase("20");
137*f6dc9357SAndroid Build Coastguard Worker }
138*f6dc9357SAndroid Build Coastguard Worker
139*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
MyChangeMenu(HMENU menuLoc,unsigned menuID,unsigned level,unsigned menuIndex)140*f6dc9357SAndroid Build Coastguard Worker static void MyChangeMenu(HMENU menuLoc, unsigned menuID, unsigned level, unsigned menuIndex)
141*f6dc9357SAndroid Build Coastguard Worker {
142*f6dc9357SAndroid Build Coastguard Worker CMenu menu;
143*f6dc9357SAndroid Build Coastguard Worker menu.Attach(menuLoc);
144*f6dc9357SAndroid Build Coastguard Worker
145*f6dc9357SAndroid Build Coastguard Worker for (unsigned i = 0;; i++)
146*f6dc9357SAndroid Build Coastguard Worker {
147*f6dc9357SAndroid Build Coastguard Worker CMenuItem item;
148*f6dc9357SAndroid Build Coastguard Worker /* here we can use
149*f6dc9357SAndroid Build Coastguard Worker Get_fMask_for_String() or
150*f6dc9357SAndroid Build Coastguard Worker Get_fMask_for_FType_and_String()
151*f6dc9357SAndroid Build Coastguard Worker We want to change only String of menu item.
152*f6dc9357SAndroid Build Coastguard Worker It's not required to change (fType) of menu item.
153*f6dc9357SAndroid Build Coastguard Worker We can look (fType) to check for SEPARATOR item.
154*f6dc9357SAndroid Build Coastguard Worker But String of separator is empty and (wID == 0).
155*f6dc9357SAndroid Build Coastguard Worker So we can check for SEPARATOR without (fType) requesting.
156*f6dc9357SAndroid Build Coastguard Worker So it's enough to use Get_fMask_for_String() here */
157*f6dc9357SAndroid Build Coastguard Worker item.fMask =
158*f6dc9357SAndroid Build Coastguard Worker Get_fMask_for_String()
159*f6dc9357SAndroid Build Coastguard Worker // Get_fMask_for_FType_and_String()
160*f6dc9357SAndroid Build Coastguard Worker | MIIM_SUBMENU | MIIM_ID;
161*f6dc9357SAndroid Build Coastguard Worker if (!menu.GetItem(i, true, item))
162*f6dc9357SAndroid Build Coastguard Worker break;
163*f6dc9357SAndroid Build Coastguard Worker {
164*f6dc9357SAndroid Build Coastguard Worker UString newString;
165*f6dc9357SAndroid Build Coastguard Worker if (item.hSubMenu)
166*f6dc9357SAndroid Build Coastguard Worker {
167*f6dc9357SAndroid Build Coastguard Worker /* in win10:
168*f6dc9357SAndroid Build Coastguard Worker MENU+POPUP:
169*f6dc9357SAndroid Build Coastguard Worker (wID == item.hSubMenu)
170*f6dc9357SAndroid Build Coastguard Worker MENUEX+POPUP where ID is not set:
171*f6dc9357SAndroid Build Coastguard Worker (wID == 0)
172*f6dc9357SAndroid Build Coastguard Worker MENU+SEPARATOR
173*f6dc9357SAndroid Build Coastguard Worker (wID == 0)
174*f6dc9357SAndroid Build Coastguard Worker */
175*f6dc9357SAndroid Build Coastguard Worker UInt32 langID = item.wID;
176*f6dc9357SAndroid Build Coastguard Worker if (langID >= (1 << 16))
177*f6dc9357SAndroid Build Coastguard Worker {
178*f6dc9357SAndroid Build Coastguard Worker // here we try to exclude the case (wID == item.hSubMenu) if (MENU+POPUP)
179*f6dc9357SAndroid Build Coastguard Worker continue;
180*f6dc9357SAndroid Build Coastguard Worker }
181*f6dc9357SAndroid Build Coastguard Worker if (langID == 0)
182*f6dc9357SAndroid Build Coastguard Worker {
183*f6dc9357SAndroid Build Coastguard Worker if (level == 0)
184*f6dc9357SAndroid Build Coastguard Worker {
185*f6dc9357SAndroid Build Coastguard Worker if (i < Z7_ARRAY_SIZE(k_LangID_TopMenuItems))
186*f6dc9357SAndroid Build Coastguard Worker langID = k_LangID_TopMenuItems[i];
187*f6dc9357SAndroid Build Coastguard Worker }
188*f6dc9357SAndroid Build Coastguard Worker else if (level == 1)
189*f6dc9357SAndroid Build Coastguard Worker {
190*f6dc9357SAndroid Build Coastguard Worker if (menuID == IDM_FAVORITES || (menuID == 0 && menuIndex == k_MenuIndex_Bookmarks))
191*f6dc9357SAndroid Build Coastguard Worker langID = k_LangID_AddToFavorites;
192*f6dc9357SAndroid Build Coastguard Worker else if (menuID == IDM_VIEW || (menuID == 0 && menuIndex == k_MenuIndex_View))
193*f6dc9357SAndroid Build Coastguard Worker {
194*f6dc9357SAndroid Build Coastguard Worker if (Is_MenuItem_TimePopup(item))
195*f6dc9357SAndroid Build Coastguard Worker langID = k_MenuID_TimePopup;
196*f6dc9357SAndroid Build Coastguard Worker else
197*f6dc9357SAndroid Build Coastguard Worker langID = k_LangID_Toolbars;
198*f6dc9357SAndroid Build Coastguard Worker }
199*f6dc9357SAndroid Build Coastguard Worker }
200*f6dc9357SAndroid Build Coastguard Worker }
201*f6dc9357SAndroid Build Coastguard Worker if (langID == k_MenuID_TimePopup)
202*f6dc9357SAndroid Build Coastguard Worker continue;
203*f6dc9357SAndroid Build Coastguard Worker if (langID != k_LangID_AddToFavorites)
204*f6dc9357SAndroid Build Coastguard Worker MyChangeMenu(item.hSubMenu, langID, level + 1, i);
205*f6dc9357SAndroid Build Coastguard Worker if (langID == 0)
206*f6dc9357SAndroid Build Coastguard Worker continue;
207*f6dc9357SAndroid Build Coastguard Worker LangString_OnlyFromLangFile(langID, newString);
208*f6dc9357SAndroid Build Coastguard Worker if (newString.IsEmpty())
209*f6dc9357SAndroid Build Coastguard Worker continue;
210*f6dc9357SAndroid Build Coastguard Worker }
211*f6dc9357SAndroid Build Coastguard Worker else
212*f6dc9357SAndroid Build Coastguard Worker {
213*f6dc9357SAndroid Build Coastguard Worker if (item.fMask & (MIIM_TYPE | MIIM_FTYPE))
214*f6dc9357SAndroid Build Coastguard Worker if (item.IsSeparator())
215*f6dc9357SAndroid Build Coastguard Worker continue;
216*f6dc9357SAndroid Build Coastguard Worker if (item.StringValue.IsEmpty())
217*f6dc9357SAndroid Build Coastguard Worker continue;
218*f6dc9357SAndroid Build Coastguard Worker const int langPos = FindLangItem(item.wID);
219*f6dc9357SAndroid Build Coastguard Worker // we don't need lang change for CRC items!!!
220*f6dc9357SAndroid Build Coastguard Worker const UInt32 langID = langPos >= 0 ? kIDLangPairs[langPos].LangID : item.wID;
221*f6dc9357SAndroid Build Coastguard Worker if (langID == 0)
222*f6dc9357SAndroid Build Coastguard Worker continue;
223*f6dc9357SAndroid Build Coastguard Worker
224*f6dc9357SAndroid Build Coastguard Worker if (langID == IDM_OPEN_INSIDE_ONE ||
225*f6dc9357SAndroid Build Coastguard Worker langID == IDM_OPEN_INSIDE_PARSER)
226*f6dc9357SAndroid Build Coastguard Worker {
227*f6dc9357SAndroid Build Coastguard Worker LangString_OnlyFromLangFile(IDM_OPEN_INSIDE, newString);
228*f6dc9357SAndroid Build Coastguard Worker if (newString.IsEmpty())
229*f6dc9357SAndroid Build Coastguard Worker continue;
230*f6dc9357SAndroid Build Coastguard Worker newString.Replace(L"&", L"");
231*f6dc9357SAndroid Build Coastguard Worker const int tabPos = newString.Find(L"\t");
232*f6dc9357SAndroid Build Coastguard Worker if (tabPos >= 0)
233*f6dc9357SAndroid Build Coastguard Worker newString.DeleteFrom(tabPos);
234*f6dc9357SAndroid Build Coastguard Worker newString += (langID == IDM_OPEN_INSIDE_ONE ? " *" : " #");
235*f6dc9357SAndroid Build Coastguard Worker }
236*f6dc9357SAndroid Build Coastguard Worker else if (langID == IDM_BENCHMARK2)
237*f6dc9357SAndroid Build Coastguard Worker {
238*f6dc9357SAndroid Build Coastguard Worker LangString_OnlyFromLangFile(IDM_BENCHMARK, newString);
239*f6dc9357SAndroid Build Coastguard Worker if (newString.IsEmpty())
240*f6dc9357SAndroid Build Coastguard Worker continue;
241*f6dc9357SAndroid Build Coastguard Worker newString.Replace(L"&", L"");
242*f6dc9357SAndroid Build Coastguard Worker const int tabPos = newString.Find(L"\t");
243*f6dc9357SAndroid Build Coastguard Worker if (tabPos >= 0)
244*f6dc9357SAndroid Build Coastguard Worker newString.DeleteFrom(tabPos);
245*f6dc9357SAndroid Build Coastguard Worker newString += " 2";
246*f6dc9357SAndroid Build Coastguard Worker }
247*f6dc9357SAndroid Build Coastguard Worker else
248*f6dc9357SAndroid Build Coastguard Worker {
249*f6dc9357SAndroid Build Coastguard Worker LangString_OnlyFromLangFile(langID, newString);
250*f6dc9357SAndroid Build Coastguard Worker }
251*f6dc9357SAndroid Build Coastguard Worker
252*f6dc9357SAndroid Build Coastguard Worker if (newString.IsEmpty())
253*f6dc9357SAndroid Build Coastguard Worker continue;
254*f6dc9357SAndroid Build Coastguard Worker
255*f6dc9357SAndroid Build Coastguard Worker const int tabPos = item.StringValue.ReverseFind(L'\t');
256*f6dc9357SAndroid Build Coastguard Worker if (tabPos >= 0)
257*f6dc9357SAndroid Build Coastguard Worker newString += item.StringValue.Ptr(tabPos);
258*f6dc9357SAndroid Build Coastguard Worker }
259*f6dc9357SAndroid Build Coastguard Worker
260*f6dc9357SAndroid Build Coastguard Worker {
261*f6dc9357SAndroid Build Coastguard Worker item.StringValue = newString;
262*f6dc9357SAndroid Build Coastguard Worker // we want to change only String
263*f6dc9357SAndroid Build Coastguard Worker item.fMask = Get_fMask_for_String();
264*f6dc9357SAndroid Build Coastguard Worker menu.SetItem(i, true, item);
265*f6dc9357SAndroid Build Coastguard Worker }
266*f6dc9357SAndroid Build Coastguard Worker }
267*f6dc9357SAndroid Build Coastguard Worker }
268*f6dc9357SAndroid Build Coastguard Worker }
269*f6dc9357SAndroid Build Coastguard Worker #endif
270*f6dc9357SAndroid Build Coastguard Worker
271*f6dc9357SAndroid Build Coastguard Worker static CMenu g_FileMenu;
272*f6dc9357SAndroid Build Coastguard Worker
273*f6dc9357SAndroid Build Coastguard Worker static struct CFileMenuDestroyer
274*f6dc9357SAndroid Build Coastguard Worker {
~CFileMenuDestroyerCFileMenuDestroyer275*f6dc9357SAndroid Build Coastguard Worker ~CFileMenuDestroyer() { if ((HMENU)g_FileMenu) g_FileMenu.Destroy(); }
276*f6dc9357SAndroid Build Coastguard Worker } g_FileMenuDestroyer;
277*f6dc9357SAndroid Build Coastguard Worker
278*f6dc9357SAndroid Build Coastguard Worker
279*f6dc9357SAndroid Build Coastguard Worker static void CopyMenu(HMENU srcMenuSpec, HMENU destMenuSpec);
280*f6dc9357SAndroid Build Coastguard Worker
CopyPopMenu_IfRequired(CMenuItem & item)281*f6dc9357SAndroid Build Coastguard Worker static void CopyPopMenu_IfRequired(CMenuItem &item)
282*f6dc9357SAndroid Build Coastguard Worker {
283*f6dc9357SAndroid Build Coastguard Worker /* if (item.hSubMenu) is defined
284*f6dc9357SAndroid Build Coastguard Worker {
285*f6dc9357SAndroid Build Coastguard Worker - it creates new (popup) menu
286*f6dc9357SAndroid Build Coastguard Worker - it copies menu items from old item.hSubMenu menu to new (popup) menu
287*f6dc9357SAndroid Build Coastguard Worker - it sets item.hSubMenu to handle of created (popup) menu
288*f6dc9357SAndroid Build Coastguard Worker } */
289*f6dc9357SAndroid Build Coastguard Worker if (item.hSubMenu)
290*f6dc9357SAndroid Build Coastguard Worker {
291*f6dc9357SAndroid Build Coastguard Worker CMenu popup;
292*f6dc9357SAndroid Build Coastguard Worker popup.CreatePopup();
293*f6dc9357SAndroid Build Coastguard Worker CopyMenu(item.hSubMenu, popup);
294*f6dc9357SAndroid Build Coastguard Worker item.hSubMenu = popup;
295*f6dc9357SAndroid Build Coastguard Worker }
296*f6dc9357SAndroid Build Coastguard Worker }
297*f6dc9357SAndroid Build Coastguard Worker
298*f6dc9357SAndroid Build Coastguard Worker /* destMenuSpec must be non-NULL handle to created empty popup menu */
CopyMenu(HMENU srcMenuSpec,HMENU destMenuSpec)299*f6dc9357SAndroid Build Coastguard Worker static void CopyMenu(HMENU srcMenuSpec, HMENU destMenuSpec)
300*f6dc9357SAndroid Build Coastguard Worker {
301*f6dc9357SAndroid Build Coastguard Worker CMenu srcMenu;
302*f6dc9357SAndroid Build Coastguard Worker srcMenu.Attach(srcMenuSpec);
303*f6dc9357SAndroid Build Coastguard Worker CMenu destMenu;
304*f6dc9357SAndroid Build Coastguard Worker destMenu.Attach(destMenuSpec);
305*f6dc9357SAndroid Build Coastguard Worker unsigned startPos = 0;
306*f6dc9357SAndroid Build Coastguard Worker for (unsigned i = 0;; i++)
307*f6dc9357SAndroid Build Coastguard Worker {
308*f6dc9357SAndroid Build Coastguard Worker CMenuItem item;
309*f6dc9357SAndroid Build Coastguard Worker item.fMask = MIIM_SUBMENU | MIIM_STATE | MIIM_ID | Get_fMask_for_FType_and_String();
310*f6dc9357SAndroid Build Coastguard Worker if (!srcMenu.GetItem(i, true, item))
311*f6dc9357SAndroid Build Coastguard Worker break;
312*f6dc9357SAndroid Build Coastguard Worker CopyPopMenu_IfRequired(item);
313*f6dc9357SAndroid Build Coastguard Worker if (destMenu.InsertItem(startPos, true, item))
314*f6dc9357SAndroid Build Coastguard Worker startPos++;
315*f6dc9357SAndroid Build Coastguard Worker }
316*f6dc9357SAndroid Build Coastguard Worker }
317*f6dc9357SAndroid Build Coastguard Worker
318*f6dc9357SAndroid Build Coastguard Worker
319*f6dc9357SAndroid Build Coastguard Worker /* use for (needResetMenu):
320*f6dc9357SAndroid Build Coastguard Worker false : for call from program window creation code
321*f6dc9357SAndroid Build Coastguard Worker true : for another calls : (from Options language change)
322*f6dc9357SAndroid Build Coastguard Worker */
MyLoadMenu(bool needResetMenu)323*f6dc9357SAndroid Build Coastguard Worker void MyLoadMenu(bool needResetMenu)
324*f6dc9357SAndroid Build Coastguard Worker {
325*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
326*f6dc9357SAndroid Build Coastguard Worker
327*f6dc9357SAndroid Build Coastguard Worker const HMENU oldMenu = g_App._commandBar.GetMenu(0);
328*f6dc9357SAndroid Build Coastguard Worker if (oldMenu)
329*f6dc9357SAndroid Build Coastguard Worker ::DestroyMenu(oldMenu);
330*f6dc9357SAndroid Build Coastguard Worker /* BOOL b = */ g_App._commandBar.InsertMenubar(g_hInstance, IDM_MENU, 0);
331*f6dc9357SAndroid Build Coastguard Worker const HMENU baseMenu = g_App._commandBar.GetMenu(0);
332*f6dc9357SAndroid Build Coastguard Worker // if (startInit)
333*f6dc9357SAndroid Build Coastguard Worker // SetIdsForSubMenus(baseMenu, 0, 0);
334*f6dc9357SAndroid Build Coastguard Worker if (!g_LangID.IsEmpty())
335*f6dc9357SAndroid Build Coastguard Worker MyChangeMenu(baseMenu, 0, 0);
336*f6dc9357SAndroid Build Coastguard Worker g_App._commandBar.DrawMenuBar(0);
337*f6dc9357SAndroid Build Coastguard Worker
338*f6dc9357SAndroid Build Coastguard Worker #else // UNDER_CE
339*f6dc9357SAndroid Build Coastguard Worker
340*f6dc9357SAndroid Build Coastguard Worker const HWND hWnd = g_HWND;
341*f6dc9357SAndroid Build Coastguard Worker bool menuWasChanged = false;
342*f6dc9357SAndroid Build Coastguard Worker /*
343*f6dc9357SAndroid Build Coastguard Worker We must reload to english default menu for at least two cases:
344*f6dc9357SAndroid Build Coastguard Worker - if some submenu was changed (File or another submenu can be changed after menu activating).
345*f6dc9357SAndroid Build Coastguard Worker - for change from non-english lang to another partial non-english lang,
346*f6dc9357SAndroid Build Coastguard Worker where we still need some english strings.
347*f6dc9357SAndroid Build Coastguard Worker But we reload menu to default menu everytime except of program starting stage.
348*f6dc9357SAndroid Build Coastguard Worker That scheme is simpler than complex checks for exact conditions for menu reload.
349*f6dc9357SAndroid Build Coastguard Worker */
350*f6dc9357SAndroid Build Coastguard Worker if (needResetMenu)
351*f6dc9357SAndroid Build Coastguard Worker {
352*f6dc9357SAndroid Build Coastguard Worker const HMENU oldMenu = ::GetMenu(hWnd);
353*f6dc9357SAndroid Build Coastguard Worker const HMENU newMenu = ::LoadMenu(g_hInstance, MAKEINTRESOURCE(IDM_MENU));
354*f6dc9357SAndroid Build Coastguard Worker // docs for SetMenu(): the window is redrawn to reflect the menu change.
355*f6dc9357SAndroid Build Coastguard Worker if (newMenu && ::SetMenu(hWnd, newMenu))
356*f6dc9357SAndroid Build Coastguard Worker ::DestroyMenu(oldMenu);
357*f6dc9357SAndroid Build Coastguard Worker menuWasChanged = true;
358*f6dc9357SAndroid Build Coastguard Worker }
359*f6dc9357SAndroid Build Coastguard Worker const HMENU baseMenu = ::GetMenu(hWnd);
360*f6dc9357SAndroid Build Coastguard Worker // if (startInit)
361*f6dc9357SAndroid Build Coastguard Worker // SetIdsForSubMenus(baseMenu, 0, 0);
362*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
363*f6dc9357SAndroid Build Coastguard Worker if (!g_Lang.IsEmpty()) // !g_LangID.IsEmpty() &&
364*f6dc9357SAndroid Build Coastguard Worker {
365*f6dc9357SAndroid Build Coastguard Worker MyChangeMenu(baseMenu, 0, 0, 0);
366*f6dc9357SAndroid Build Coastguard Worker menuWasChanged = true;
367*f6dc9357SAndroid Build Coastguard Worker }
368*f6dc9357SAndroid Build Coastguard Worker #endif
369*f6dc9357SAndroid Build Coastguard Worker
370*f6dc9357SAndroid Build Coastguard Worker if (menuWasChanged)
371*f6dc9357SAndroid Build Coastguard Worker ::DrawMenuBar(hWnd);
372*f6dc9357SAndroid Build Coastguard Worker
373*f6dc9357SAndroid Build Coastguard Worker #endif // UNDER_CE
374*f6dc9357SAndroid Build Coastguard Worker
375*f6dc9357SAndroid Build Coastguard Worker // menuWasChanged = false; // for debug
376*f6dc9357SAndroid Build Coastguard Worker if (menuWasChanged || !(HMENU)g_FileMenu)
377*f6dc9357SAndroid Build Coastguard Worker {
378*f6dc9357SAndroid Build Coastguard Worker if ((HMENU)g_FileMenu)
379*f6dc9357SAndroid Build Coastguard Worker g_FileMenu.Destroy();
380*f6dc9357SAndroid Build Coastguard Worker g_FileMenu.CreatePopup();
381*f6dc9357SAndroid Build Coastguard Worker CopyMenu(::GetSubMenu(baseMenu, k_MenuIndex_File), g_FileMenu);
382*f6dc9357SAndroid Build Coastguard Worker }
383*f6dc9357SAndroid Build Coastguard Worker }
384*f6dc9357SAndroid Build Coastguard Worker
OnMenuActivating(HWND,HMENU hMenu,int position)385*f6dc9357SAndroid Build Coastguard Worker void OnMenuActivating(HWND /* hWnd */, HMENU hMenu, int position)
386*f6dc9357SAndroid Build Coastguard Worker {
387*f6dc9357SAndroid Build Coastguard Worker HMENU mainMenu =
388*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
389*f6dc9357SAndroid Build Coastguard Worker g_App._commandBar.GetMenu(0);
390*f6dc9357SAndroid Build Coastguard Worker #else
391*f6dc9357SAndroid Build Coastguard Worker ::GetMenu(g_HWND)
392*f6dc9357SAndroid Build Coastguard Worker #endif
393*f6dc9357SAndroid Build Coastguard Worker ;
394*f6dc9357SAndroid Build Coastguard Worker
395*f6dc9357SAndroid Build Coastguard Worker if (::GetSubMenu(mainMenu, position) != hMenu)
396*f6dc9357SAndroid Build Coastguard Worker return;
397*f6dc9357SAndroid Build Coastguard Worker
398*f6dc9357SAndroid Build Coastguard Worker if (position == k_MenuIndex_File)
399*f6dc9357SAndroid Build Coastguard Worker {
400*f6dc9357SAndroid Build Coastguard Worker CMenu menu;
401*f6dc9357SAndroid Build Coastguard Worker menu.Attach(hMenu);
402*f6dc9357SAndroid Build Coastguard Worker menu.RemoveAllItems();
403*f6dc9357SAndroid Build Coastguard Worker g_App.GetFocusedPanel().CreateFileMenu(hMenu);
404*f6dc9357SAndroid Build Coastguard Worker }
405*f6dc9357SAndroid Build Coastguard Worker else if (position == k_MenuIndex_Edit)
406*f6dc9357SAndroid Build Coastguard Worker {
407*f6dc9357SAndroid Build Coastguard Worker /*
408*f6dc9357SAndroid Build Coastguard Worker CMenu menu;
409*f6dc9357SAndroid Build Coastguard Worker menu.Attach(hMenu);
410*f6dc9357SAndroid Build Coastguard Worker menu.EnableItem(IDM_EDIT_CUT, MF_ENABLED);
411*f6dc9357SAndroid Build Coastguard Worker menu.EnableItem(IDM_EDIT_COPY, MF_ENABLED);
412*f6dc9357SAndroid Build Coastguard Worker menu.EnableItem(IDM_EDIT_PASTE, IsClipboardFormatAvailableHDROP() ? MF_ENABLED : MF_GRAYED);
413*f6dc9357SAndroid Build Coastguard Worker */
414*f6dc9357SAndroid Build Coastguard Worker }
415*f6dc9357SAndroid Build Coastguard Worker else if (position == k_MenuIndex_View)
416*f6dc9357SAndroid Build Coastguard Worker {
417*f6dc9357SAndroid Build Coastguard Worker // View;
418*f6dc9357SAndroid Build Coastguard Worker CMenu menu;
419*f6dc9357SAndroid Build Coastguard Worker menu.Attach(hMenu);
420*f6dc9357SAndroid Build Coastguard Worker menu.CheckRadioItem(
421*f6dc9357SAndroid Build Coastguard Worker IDM_VIEW_LARGE_ICONS, IDM_VIEW_DETAILS,
422*f6dc9357SAndroid Build Coastguard Worker IDM_VIEW_LARGE_ICONS + g_App.GetListViewMode(), MF_BYCOMMAND);
423*f6dc9357SAndroid Build Coastguard Worker
424*f6dc9357SAndroid Build Coastguard Worker menu.CheckRadioItem(
425*f6dc9357SAndroid Build Coastguard Worker IDM_VIEW_ARANGE_BY_NAME,
426*f6dc9357SAndroid Build Coastguard Worker IDM_VIEW_ARANGE_NO_SORT,
427*f6dc9357SAndroid Build Coastguard Worker GetSortControlID(g_App.GetSortID()),
428*f6dc9357SAndroid Build Coastguard Worker MF_BYCOMMAND);
429*f6dc9357SAndroid Build Coastguard Worker
430*f6dc9357SAndroid Build Coastguard Worker menu.CheckItemByID(IDM_VIEW_TWO_PANELS, g_App.NumPanels == 2);
431*f6dc9357SAndroid Build Coastguard Worker menu.CheckItemByID(IDM_VIEW_FLAT_VIEW, g_App.GetFlatMode());
432*f6dc9357SAndroid Build Coastguard Worker menu.CheckItemByID(IDM_VIEW_ARCHIVE_TOOLBAR, g_App.ShowArchiveToolbar);
433*f6dc9357SAndroid Build Coastguard Worker menu.CheckItemByID(IDM_VIEW_STANDARD_TOOLBAR, g_App.ShowStandardToolbar);
434*f6dc9357SAndroid Build Coastguard Worker menu.CheckItemByID(IDM_VIEW_TOOLBARS_LARGE_BUTTONS, g_App.LargeButtons);
435*f6dc9357SAndroid Build Coastguard Worker menu.CheckItemByID(IDM_VIEW_TOOLBARS_SHOW_BUTTONS_TEXT, g_App.ShowButtonsLables);
436*f6dc9357SAndroid Build Coastguard Worker menu.CheckItemByID(IDM_VIEW_AUTO_REFRESH, g_App.Get_AutoRefresh_Mode());
437*f6dc9357SAndroid Build Coastguard Worker // menu.CheckItemByID(IDM_VIEW_SHOW_STREAMS, g_App.Get_ShowNtfsStrems_Mode());
438*f6dc9357SAndroid Build Coastguard Worker // menu.CheckItemByID(IDM_VIEW_SHOW_DELETED, g_App.ShowDeletedFiles);
439*f6dc9357SAndroid Build Coastguard Worker
440*f6dc9357SAndroid Build Coastguard Worker for (unsigned i = 0;; i++)
441*f6dc9357SAndroid Build Coastguard Worker {
442*f6dc9357SAndroid Build Coastguard Worker CMenuItem item;
443*f6dc9357SAndroid Build Coastguard Worker item.fMask = Get_fMask_for_String() | MIIM_SUBMENU | MIIM_ID;
444*f6dc9357SAndroid Build Coastguard Worker item.fType = MFT_STRING;
445*f6dc9357SAndroid Build Coastguard Worker if (!menu.GetItem(i, true, item))
446*f6dc9357SAndroid Build Coastguard Worker break;
447*f6dc9357SAndroid Build Coastguard Worker if (item.hSubMenu && Is_MenuItem_TimePopup(item))
448*f6dc9357SAndroid Build Coastguard Worker {
449*f6dc9357SAndroid Build Coastguard Worker FILETIME ft;
450*f6dc9357SAndroid Build Coastguard Worker NTime::GetCurUtcFileTime(ft);
451*f6dc9357SAndroid Build Coastguard Worker
452*f6dc9357SAndroid Build Coastguard Worker {
453*f6dc9357SAndroid Build Coastguard Worker wchar_t s[64];
454*f6dc9357SAndroid Build Coastguard Worker s[0] = 0;
455*f6dc9357SAndroid Build Coastguard Worker if (ConvertUtcFileTimeToString(ft, s, kTimestampPrintLevel_DAY))
456*f6dc9357SAndroid Build Coastguard Worker item.StringValue = s;
457*f6dc9357SAndroid Build Coastguard Worker }
458*f6dc9357SAndroid Build Coastguard Worker
459*f6dc9357SAndroid Build Coastguard Worker item.fMask = Get_fMask_for_String() | MIIM_ID;
460*f6dc9357SAndroid Build Coastguard Worker item.fType = MFT_STRING;
461*f6dc9357SAndroid Build Coastguard Worker item.wID = k_MenuID_TimePopup;
462*f6dc9357SAndroid Build Coastguard Worker menu.SetItem(i, true, item);
463*f6dc9357SAndroid Build Coastguard Worker
464*f6dc9357SAndroid Build Coastguard Worker CMenu subMenu;
465*f6dc9357SAndroid Build Coastguard Worker subMenu.Attach(menu.GetSubMenu((int)i));
466*f6dc9357SAndroid Build Coastguard Worker subMenu.RemoveAllItems();
467*f6dc9357SAndroid Build Coastguard Worker
468*f6dc9357SAndroid Build Coastguard Worker const int k_TimeLevels[] =
469*f6dc9357SAndroid Build Coastguard Worker {
470*f6dc9357SAndroid Build Coastguard Worker kTimestampPrintLevel_DAY,
471*f6dc9357SAndroid Build Coastguard Worker kTimestampPrintLevel_MIN,
472*f6dc9357SAndroid Build Coastguard Worker kTimestampPrintLevel_SEC,
473*f6dc9357SAndroid Build Coastguard Worker // 1,2,3,4,5,6,
474*f6dc9357SAndroid Build Coastguard Worker kTimestampPrintLevel_NTFS,
475*f6dc9357SAndroid Build Coastguard Worker kTimestampPrintLevel_NS
476*f6dc9357SAndroid Build Coastguard Worker };
477*f6dc9357SAndroid Build Coastguard Worker
478*f6dc9357SAndroid Build Coastguard Worker unsigned last = k_MenuID_Time;
479*f6dc9357SAndroid Build Coastguard Worker unsigned selectedCommand = 0;
480*f6dc9357SAndroid Build Coastguard Worker g_App._timestampLevels.Clear();
481*f6dc9357SAndroid Build Coastguard Worker unsigned id = k_MenuID_Time;
482*f6dc9357SAndroid Build Coastguard Worker
483*f6dc9357SAndroid Build Coastguard Worker for (unsigned k = 0; k < Z7_ARRAY_SIZE(k_TimeLevels); k++)
484*f6dc9357SAndroid Build Coastguard Worker {
485*f6dc9357SAndroid Build Coastguard Worker wchar_t s[64];
486*f6dc9357SAndroid Build Coastguard Worker s[0] = 0;
487*f6dc9357SAndroid Build Coastguard Worker const int timestampLevel = k_TimeLevels[k];
488*f6dc9357SAndroid Build Coastguard Worker if (ConvertUtcFileTimeToString(ft, s, timestampLevel))
489*f6dc9357SAndroid Build Coastguard Worker {
490*f6dc9357SAndroid Build Coastguard Worker if (subMenu.AppendItem(MF_STRING, id, s))
491*f6dc9357SAndroid Build Coastguard Worker {
492*f6dc9357SAndroid Build Coastguard Worker last = id;
493*f6dc9357SAndroid Build Coastguard Worker g_App._timestampLevels.Add(timestampLevel);
494*f6dc9357SAndroid Build Coastguard Worker if (g_App.GetTimestampLevel() == timestampLevel)
495*f6dc9357SAndroid Build Coastguard Worker selectedCommand = id;
496*f6dc9357SAndroid Build Coastguard Worker id++;
497*f6dc9357SAndroid Build Coastguard Worker }
498*f6dc9357SAndroid Build Coastguard Worker }
499*f6dc9357SAndroid Build Coastguard Worker }
500*f6dc9357SAndroid Build Coastguard Worker if (selectedCommand != 0)
501*f6dc9357SAndroid Build Coastguard Worker menu.CheckRadioItem(k_MenuID_Time, last, selectedCommand, MF_BYCOMMAND);
502*f6dc9357SAndroid Build Coastguard Worker
503*f6dc9357SAndroid Build Coastguard Worker if (subMenu.AppendItem(MF_STRING, IDM_VIEW_TIME_UTC, L"UTC"))
504*f6dc9357SAndroid Build Coastguard Worker subMenu.CheckItemByID(IDM_VIEW_TIME_UTC, g_Timestamp_Show_UTC);
505*f6dc9357SAndroid Build Coastguard Worker }
506*f6dc9357SAndroid Build Coastguard Worker }
507*f6dc9357SAndroid Build Coastguard Worker }
508*f6dc9357SAndroid Build Coastguard Worker else if (position == k_MenuIndex_Bookmarks)
509*f6dc9357SAndroid Build Coastguard Worker {
510*f6dc9357SAndroid Build Coastguard Worker CMenu menu;
511*f6dc9357SAndroid Build Coastguard Worker menu.Attach(hMenu);
512*f6dc9357SAndroid Build Coastguard Worker
513*f6dc9357SAndroid Build Coastguard Worker CMenu subMenu;
514*f6dc9357SAndroid Build Coastguard Worker subMenu.Attach(menu.GetSubMenu(0));
515*f6dc9357SAndroid Build Coastguard Worker subMenu.RemoveAllItems();
516*f6dc9357SAndroid Build Coastguard Worker unsigned i;
517*f6dc9357SAndroid Build Coastguard Worker
518*f6dc9357SAndroid Build Coastguard Worker for (i = 0; i < 10; i++)
519*f6dc9357SAndroid Build Coastguard Worker {
520*f6dc9357SAndroid Build Coastguard Worker UString s = LangString(IDS_BOOKMARK);
521*f6dc9357SAndroid Build Coastguard Worker s.Add_Space();
522*f6dc9357SAndroid Build Coastguard Worker const char c = (char)(L'0' + i);
523*f6dc9357SAndroid Build Coastguard Worker s.Add_Char(c);
524*f6dc9357SAndroid Build Coastguard Worker s += "\tAlt+Shift+";
525*f6dc9357SAndroid Build Coastguard Worker s.Add_Char(c);
526*f6dc9357SAndroid Build Coastguard Worker subMenu.AppendItem(MF_STRING, k_MenuID_SetBookmark + i, s);
527*f6dc9357SAndroid Build Coastguard Worker }
528*f6dc9357SAndroid Build Coastguard Worker
529*f6dc9357SAndroid Build Coastguard Worker menu.RemoveAllItemsFrom(2);
530*f6dc9357SAndroid Build Coastguard Worker
531*f6dc9357SAndroid Build Coastguard Worker for (i = 0; i < 10; i++)
532*f6dc9357SAndroid Build Coastguard Worker {
533*f6dc9357SAndroid Build Coastguard Worker UString s = g_App.AppState.FastFolders.GetString(i);
534*f6dc9357SAndroid Build Coastguard Worker const int kMaxSize = 100;
535*f6dc9357SAndroid Build Coastguard Worker const int kFirstPartSize = kMaxSize / 2;
536*f6dc9357SAndroid Build Coastguard Worker if (s.Len() > kMaxSize)
537*f6dc9357SAndroid Build Coastguard Worker {
538*f6dc9357SAndroid Build Coastguard Worker s.Delete(kFirstPartSize, s.Len() - kMaxSize);
539*f6dc9357SAndroid Build Coastguard Worker s.Insert(kFirstPartSize, L" ... ");
540*f6dc9357SAndroid Build Coastguard Worker }
541*f6dc9357SAndroid Build Coastguard Worker if (s.IsEmpty())
542*f6dc9357SAndroid Build Coastguard Worker s = '-';
543*f6dc9357SAndroid Build Coastguard Worker s += "\tAlt+";
544*f6dc9357SAndroid Build Coastguard Worker s.Add_Char((char)('0' + i));
545*f6dc9357SAndroid Build Coastguard Worker menu.AppendItem(MF_STRING, k_MenuID_OpenBookmark + i, s);
546*f6dc9357SAndroid Build Coastguard Worker }
547*f6dc9357SAndroid Build Coastguard Worker #if 0
548*f6dc9357SAndroid Build Coastguard Worker {
549*f6dc9357SAndroid Build Coastguard Worker FString tempPathF;
550*f6dc9357SAndroid Build Coastguard Worker if (NFile::NDir::MyGetTempPath(tempPathF))
551*f6dc9357SAndroid Build Coastguard Worker {
552*f6dc9357SAndroid Build Coastguard Worker menu.AppendItem(MF_SEPARATOR, 0, (LPCTSTR)NULL);
553*f6dc9357SAndroid Build Coastguard Worker UString s;
554*f6dc9357SAndroid Build Coastguard Worker s = "Temp : ";
555*f6dc9357SAndroid Build Coastguard Worker s += fs2us(tempPathF);
556*f6dc9357SAndroid Build Coastguard Worker menu.AppendItem(MF_STRING, k_MenuID_Bookmark_Temp, s);
557*f6dc9357SAndroid Build Coastguard Worker }
558*f6dc9357SAndroid Build Coastguard Worker }
559*f6dc9357SAndroid Build Coastguard Worker #endif
560*f6dc9357SAndroid Build Coastguard Worker }
561*f6dc9357SAndroid Build Coastguard Worker }
562*f6dc9357SAndroid Build Coastguard Worker
563*f6dc9357SAndroid Build Coastguard Worker /*
564*f6dc9357SAndroid Build Coastguard Worker It doesn't help
565*f6dc9357SAndroid Build Coastguard Worker void OnMenuUnActivating(HWND hWnd, HMENU hMenu, int id)
566*f6dc9357SAndroid Build Coastguard Worker {
567*f6dc9357SAndroid Build Coastguard Worker if (::GetSubMenu(::GetMenu(g_HWND), 0) != hMenu)
568*f6dc9357SAndroid Build Coastguard Worker return;
569*f6dc9357SAndroid Build Coastguard Worker }
570*f6dc9357SAndroid Build Coastguard Worker */
571*f6dc9357SAndroid Build Coastguard Worker
572*f6dc9357SAndroid Build Coastguard Worker static const unsigned g_Zvc_IDs[] =
573*f6dc9357SAndroid Build Coastguard Worker {
574*f6dc9357SAndroid Build Coastguard Worker IDM_VER_EDIT,
575*f6dc9357SAndroid Build Coastguard Worker IDM_VER_COMMIT,
576*f6dc9357SAndroid Build Coastguard Worker IDM_VER_REVERT,
577*f6dc9357SAndroid Build Coastguard Worker IDM_VER_DIFF
578*f6dc9357SAndroid Build Coastguard Worker };
579*f6dc9357SAndroid Build Coastguard Worker
580*f6dc9357SAndroid Build Coastguard Worker static const char * const g_Zvc_Strings[] =
581*f6dc9357SAndroid Build Coastguard Worker {
582*f6dc9357SAndroid Build Coastguard Worker "Ver Edit (&1)"
583*f6dc9357SAndroid Build Coastguard Worker , "Ver Commit"
584*f6dc9357SAndroid Build Coastguard Worker , "Ver Revert"
585*f6dc9357SAndroid Build Coastguard Worker , "Ver Diff (&0)"
586*f6dc9357SAndroid Build Coastguard Worker };
587*f6dc9357SAndroid Build Coastguard Worker
Load(HMENU hMenu,unsigned startPos)588*f6dc9357SAndroid Build Coastguard Worker void CFileMenu::Load(HMENU hMenu, unsigned startPos)
589*f6dc9357SAndroid Build Coastguard Worker {
590*f6dc9357SAndroid Build Coastguard Worker CMenu destMenu;
591*f6dc9357SAndroid Build Coastguard Worker destMenu.Attach(hMenu);
592*f6dc9357SAndroid Build Coastguard Worker
593*f6dc9357SAndroid Build Coastguard Worker UString diffPath;
594*f6dc9357SAndroid Build Coastguard Worker ReadRegDiff(diffPath);
595*f6dc9357SAndroid Build Coastguard Worker
596*f6dc9357SAndroid Build Coastguard Worker unsigned numRealItems = startPos;
597*f6dc9357SAndroid Build Coastguard Worker
598*f6dc9357SAndroid Build Coastguard Worker const bool isBigScreen = NControl::IsDialogSizeOK(40, 200, g_HWND);
599*f6dc9357SAndroid Build Coastguard Worker
600*f6dc9357SAndroid Build Coastguard Worker for (unsigned i = 0;; i++)
601*f6dc9357SAndroid Build Coastguard Worker {
602*f6dc9357SAndroid Build Coastguard Worker CMenuItem item;
603*f6dc9357SAndroid Build Coastguard Worker
604*f6dc9357SAndroid Build Coastguard Worker item.fMask = MIIM_SUBMENU | MIIM_STATE | MIIM_ID | Get_fMask_for_FType_and_String();
605*f6dc9357SAndroid Build Coastguard Worker item.fType = MFT_STRING;
606*f6dc9357SAndroid Build Coastguard Worker
607*f6dc9357SAndroid Build Coastguard Worker if (!g_FileMenu.GetItem(i, true, item))
608*f6dc9357SAndroid Build Coastguard Worker break;
609*f6dc9357SAndroid Build Coastguard Worker
610*f6dc9357SAndroid Build Coastguard Worker {
611*f6dc9357SAndroid Build Coastguard Worker if (!programMenu && item.wID == IDCLOSE)
612*f6dc9357SAndroid Build Coastguard Worker continue;
613*f6dc9357SAndroid Build Coastguard Worker
614*f6dc9357SAndroid Build Coastguard Worker if (item.wID == IDM_DIFF && diffPath.IsEmpty())
615*f6dc9357SAndroid Build Coastguard Worker continue;
616*f6dc9357SAndroid Build Coastguard Worker
617*f6dc9357SAndroid Build Coastguard Worker if (item.wID == IDM_OPEN_INSIDE_ONE || item.wID == IDM_OPEN_INSIDE_PARSER)
618*f6dc9357SAndroid Build Coastguard Worker {
619*f6dc9357SAndroid Build Coastguard Worker // We use diff as "super mode" marker for additional commands.
620*f6dc9357SAndroid Build Coastguard Worker /*
621*f6dc9357SAndroid Build Coastguard Worker if (diffPath.IsEmpty())
622*f6dc9357SAndroid Build Coastguard Worker continue;
623*f6dc9357SAndroid Build Coastguard Worker */
624*f6dc9357SAndroid Build Coastguard Worker }
625*f6dc9357SAndroid Build Coastguard Worker
626*f6dc9357SAndroid Build Coastguard Worker if (item.wID == IDM_BENCHMARK2)
627*f6dc9357SAndroid Build Coastguard Worker {
628*f6dc9357SAndroid Build Coastguard Worker // We use diff as "super mode" marker for additional commands.
629*f6dc9357SAndroid Build Coastguard Worker if (diffPath.IsEmpty())
630*f6dc9357SAndroid Build Coastguard Worker continue;
631*f6dc9357SAndroid Build Coastguard Worker }
632*f6dc9357SAndroid Build Coastguard Worker
633*f6dc9357SAndroid Build Coastguard Worker bool isOneFsFile = (isFsFolder && numItems == 1 && allAreFiles);
634*f6dc9357SAndroid Build Coastguard Worker bool disable = (!isOneFsFile && (item.wID == IDM_SPLIT || item.wID == IDM_COMBINE));
635*f6dc9357SAndroid Build Coastguard Worker
636*f6dc9357SAndroid Build Coastguard Worker if (readOnly)
637*f6dc9357SAndroid Build Coastguard Worker {
638*f6dc9357SAndroid Build Coastguard Worker switch (item.wID)
639*f6dc9357SAndroid Build Coastguard Worker {
640*f6dc9357SAndroid Build Coastguard Worker case IDM_RENAME:
641*f6dc9357SAndroid Build Coastguard Worker case IDM_MOVE_TO:
642*f6dc9357SAndroid Build Coastguard Worker case IDM_DELETE:
643*f6dc9357SAndroid Build Coastguard Worker case IDM_COMMENT:
644*f6dc9357SAndroid Build Coastguard Worker case IDM_CREATE_FOLDER:
645*f6dc9357SAndroid Build Coastguard Worker case IDM_CREATE_FILE:
646*f6dc9357SAndroid Build Coastguard Worker disable = true;
647*f6dc9357SAndroid Build Coastguard Worker }
648*f6dc9357SAndroid Build Coastguard Worker }
649*f6dc9357SAndroid Build Coastguard Worker
650*f6dc9357SAndroid Build Coastguard Worker if (isHashFolder)
651*f6dc9357SAndroid Build Coastguard Worker {
652*f6dc9357SAndroid Build Coastguard Worker switch (item.wID)
653*f6dc9357SAndroid Build Coastguard Worker {
654*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN:
655*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_INSIDE:
656*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_INSIDE_ONE:
657*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_INSIDE_PARSER:
658*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_OUTSIDE:
659*f6dc9357SAndroid Build Coastguard Worker case IDM_FILE_VIEW:
660*f6dc9357SAndroid Build Coastguard Worker case IDM_FILE_EDIT:
661*f6dc9357SAndroid Build Coastguard Worker // case IDM_RENAME:
662*f6dc9357SAndroid Build Coastguard Worker case IDM_COPY_TO:
663*f6dc9357SAndroid Build Coastguard Worker case IDM_MOVE_TO:
664*f6dc9357SAndroid Build Coastguard Worker // case IDM_DELETE:
665*f6dc9357SAndroid Build Coastguard Worker case IDM_COMMENT:
666*f6dc9357SAndroid Build Coastguard Worker case IDM_CREATE_FOLDER:
667*f6dc9357SAndroid Build Coastguard Worker case IDM_CREATE_FILE:
668*f6dc9357SAndroid Build Coastguard Worker case IDM_LINK:
669*f6dc9357SAndroid Build Coastguard Worker case IDM_DIFF:
670*f6dc9357SAndroid Build Coastguard Worker disable = true;
671*f6dc9357SAndroid Build Coastguard Worker }
672*f6dc9357SAndroid Build Coastguard Worker }
673*f6dc9357SAndroid Build Coastguard Worker
674*f6dc9357SAndroid Build Coastguard Worker
675*f6dc9357SAndroid Build Coastguard Worker if (item.wID == IDM_LINK && numItems != 1)
676*f6dc9357SAndroid Build Coastguard Worker disable = true;
677*f6dc9357SAndroid Build Coastguard Worker
678*f6dc9357SAndroid Build Coastguard Worker if (item.wID == IDM_ALT_STREAMS)
679*f6dc9357SAndroid Build Coastguard Worker disable = !isAltStreamsSupported;
680*f6dc9357SAndroid Build Coastguard Worker
681*f6dc9357SAndroid Build Coastguard Worker if (!isBigScreen && (disable || item.IsSeparator()))
682*f6dc9357SAndroid Build Coastguard Worker continue;
683*f6dc9357SAndroid Build Coastguard Worker
684*f6dc9357SAndroid Build Coastguard Worker CopyPopMenu_IfRequired(item);
685*f6dc9357SAndroid Build Coastguard Worker if (destMenu.InsertItem(startPos, true, item))
686*f6dc9357SAndroid Build Coastguard Worker {
687*f6dc9357SAndroid Build Coastguard Worker if (disable)
688*f6dc9357SAndroid Build Coastguard Worker destMenu.EnableItem(startPos, MF_BYPOSITION | MF_GRAYED);
689*f6dc9357SAndroid Build Coastguard Worker startPos++;
690*f6dc9357SAndroid Build Coastguard Worker }
691*f6dc9357SAndroid Build Coastguard Worker
692*f6dc9357SAndroid Build Coastguard Worker if (!item.IsSeparator())
693*f6dc9357SAndroid Build Coastguard Worker numRealItems = startPos;
694*f6dc9357SAndroid Build Coastguard Worker }
695*f6dc9357SAndroid Build Coastguard Worker }
696*f6dc9357SAndroid Build Coastguard Worker
697*f6dc9357SAndroid Build Coastguard Worker UString vercPath;
698*f6dc9357SAndroid Build Coastguard Worker if (!diffPath.IsEmpty() && isFsFolder && allAreFiles && numItems == 1)
699*f6dc9357SAndroid Build Coastguard Worker ReadReg_VerCtrlPath(vercPath);
700*f6dc9357SAndroid Build Coastguard Worker
701*f6dc9357SAndroid Build Coastguard Worker if (!vercPath.IsEmpty())
702*f6dc9357SAndroid Build Coastguard Worker {
703*f6dc9357SAndroid Build Coastguard Worker NFile::NFind::CFileInfo fi;
704*f6dc9357SAndroid Build Coastguard Worker if (fi.Find(FilePath) && fi.Size < ((UInt32)1 << 31) && !fi.IsDir())
705*f6dc9357SAndroid Build Coastguard Worker {
706*f6dc9357SAndroid Build Coastguard Worker for (unsigned k = 0; k < Z7_ARRAY_SIZE(g_Zvc_IDs); k++)
707*f6dc9357SAndroid Build Coastguard Worker {
708*f6dc9357SAndroid Build Coastguard Worker const unsigned id = g_Zvc_IDs[k];
709*f6dc9357SAndroid Build Coastguard Worker if (fi.IsReadOnly())
710*f6dc9357SAndroid Build Coastguard Worker {
711*f6dc9357SAndroid Build Coastguard Worker if (id == IDM_VER_COMMIT ||
712*f6dc9357SAndroid Build Coastguard Worker id == IDM_VER_REVERT ||
713*f6dc9357SAndroid Build Coastguard Worker id == IDM_VER_DIFF)
714*f6dc9357SAndroid Build Coastguard Worker continue;
715*f6dc9357SAndroid Build Coastguard Worker }
716*f6dc9357SAndroid Build Coastguard Worker else
717*f6dc9357SAndroid Build Coastguard Worker {
718*f6dc9357SAndroid Build Coastguard Worker if (id == IDM_VER_EDIT)
719*f6dc9357SAndroid Build Coastguard Worker continue;
720*f6dc9357SAndroid Build Coastguard Worker }
721*f6dc9357SAndroid Build Coastguard Worker
722*f6dc9357SAndroid Build Coastguard Worker CMenuItem item;
723*f6dc9357SAndroid Build Coastguard Worker UString s (g_Zvc_Strings[k]);
724*f6dc9357SAndroid Build Coastguard Worker if (destMenu.AppendItem(MF_STRING, id, s))
725*f6dc9357SAndroid Build Coastguard Worker {
726*f6dc9357SAndroid Build Coastguard Worker startPos++;
727*f6dc9357SAndroid Build Coastguard Worker numRealItems = startPos;
728*f6dc9357SAndroid Build Coastguard Worker }
729*f6dc9357SAndroid Build Coastguard Worker }
730*f6dc9357SAndroid Build Coastguard Worker }
731*f6dc9357SAndroid Build Coastguard Worker }
732*f6dc9357SAndroid Build Coastguard Worker
733*f6dc9357SAndroid Build Coastguard Worker destMenu.RemoveAllItemsFrom(numRealItems);
734*f6dc9357SAndroid Build Coastguard Worker }
735*f6dc9357SAndroid Build Coastguard Worker
ExecuteFileCommand(unsigned id)736*f6dc9357SAndroid Build Coastguard Worker bool ExecuteFileCommand(unsigned id)
737*f6dc9357SAndroid Build Coastguard Worker {
738*f6dc9357SAndroid Build Coastguard Worker if (id >= kMenuCmdID_Plugin_Start)
739*f6dc9357SAndroid Build Coastguard Worker {
740*f6dc9357SAndroid Build Coastguard Worker g_App.GetFocusedPanel().InvokePluginCommand(id);
741*f6dc9357SAndroid Build Coastguard Worker g_App.GetFocusedPanel()._sevenZipContextMenu.Release();
742*f6dc9357SAndroid Build Coastguard Worker g_App.GetFocusedPanel()._systemContextMenu.Release();
743*f6dc9357SAndroid Build Coastguard Worker return true;
744*f6dc9357SAndroid Build Coastguard Worker }
745*f6dc9357SAndroid Build Coastguard Worker
746*f6dc9357SAndroid Build Coastguard Worker switch (id)
747*f6dc9357SAndroid Build Coastguard Worker {
748*f6dc9357SAndroid Build Coastguard Worker // File
749*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN: g_App.OpenItem(); break;
750*f6dc9357SAndroid Build Coastguard Worker
751*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_INSIDE: g_App.OpenItemInside(NULL); break;
752*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_INSIDE_ONE: g_App.OpenItemInside(L"*"); break;
753*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_INSIDE_PARSER: g_App.OpenItemInside(L"#"); break;
754*f6dc9357SAndroid Build Coastguard Worker
755*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_OUTSIDE: g_App.OpenItemOutside(); break;
756*f6dc9357SAndroid Build Coastguard Worker case IDM_FILE_VIEW: g_App.EditItem(false); break;
757*f6dc9357SAndroid Build Coastguard Worker case IDM_FILE_EDIT: g_App.EditItem(true); break;
758*f6dc9357SAndroid Build Coastguard Worker case IDM_RENAME: g_App.Rename(); break;
759*f6dc9357SAndroid Build Coastguard Worker case IDM_COPY_TO: g_App.CopyTo(); break;
760*f6dc9357SAndroid Build Coastguard Worker case IDM_MOVE_TO: g_App.MoveTo(); break;
761*f6dc9357SAndroid Build Coastguard Worker case IDM_DELETE: g_App.Delete(!IsKeyDown(VK_SHIFT)); break;
762*f6dc9357SAndroid Build Coastguard Worker
763*f6dc9357SAndroid Build Coastguard Worker case IDM_HASH_ALL: g_App.CalculateCrc("*"); break;
764*f6dc9357SAndroid Build Coastguard Worker case IDM_CRC32: g_App.CalculateCrc("CRC32"); break;
765*f6dc9357SAndroid Build Coastguard Worker case IDM_CRC64: g_App.CalculateCrc("CRC64"); break;
766*f6dc9357SAndroid Build Coastguard Worker case IDM_XXH64: g_App.CalculateCrc("XXH64"); break;
767*f6dc9357SAndroid Build Coastguard Worker case IDM_MD5: g_App.CalculateCrc("MD5"); break;
768*f6dc9357SAndroid Build Coastguard Worker case IDM_SHA1: g_App.CalculateCrc("SHA1"); break;
769*f6dc9357SAndroid Build Coastguard Worker case IDM_SHA256: g_App.CalculateCrc("SHA256"); break;
770*f6dc9357SAndroid Build Coastguard Worker case IDM_SHA384: g_App.CalculateCrc("SHA384"); break;
771*f6dc9357SAndroid Build Coastguard Worker case IDM_SHA512: g_App.CalculateCrc("SHA512"); break;
772*f6dc9357SAndroid Build Coastguard Worker case IDM_SHA3_256: g_App.CalculateCrc("SHA3-256"); break;
773*f6dc9357SAndroid Build Coastguard Worker case IDM_BLAKE2SP: g_App.CalculateCrc("BLAKE2sp"); break;
774*f6dc9357SAndroid Build Coastguard Worker
775*f6dc9357SAndroid Build Coastguard Worker case IDM_DIFF: g_App.DiffFiles(); break;
776*f6dc9357SAndroid Build Coastguard Worker
777*f6dc9357SAndroid Build Coastguard Worker case IDM_VER_EDIT:
778*f6dc9357SAndroid Build Coastguard Worker case IDM_VER_COMMIT:
779*f6dc9357SAndroid Build Coastguard Worker case IDM_VER_REVERT:
780*f6dc9357SAndroid Build Coastguard Worker case IDM_VER_DIFF:
781*f6dc9357SAndroid Build Coastguard Worker g_App.VerCtrl(id); break;
782*f6dc9357SAndroid Build Coastguard Worker
783*f6dc9357SAndroid Build Coastguard Worker case IDM_SPLIT: g_App.Split(); break;
784*f6dc9357SAndroid Build Coastguard Worker case IDM_COMBINE: g_App.Combine(); break;
785*f6dc9357SAndroid Build Coastguard Worker case IDM_PROPERTIES: g_App.Properties(); break;
786*f6dc9357SAndroid Build Coastguard Worker case IDM_COMMENT: g_App.Comment(); break;
787*f6dc9357SAndroid Build Coastguard Worker case IDM_CREATE_FOLDER: g_App.CreateFolder(); break;
788*f6dc9357SAndroid Build Coastguard Worker case IDM_CREATE_FILE: g_App.CreateFile(); break;
789*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
790*f6dc9357SAndroid Build Coastguard Worker case IDM_LINK: g_App.Link(); break;
791*f6dc9357SAndroid Build Coastguard Worker case IDM_ALT_STREAMS: g_App.OpenAltStreams(); break;
792*f6dc9357SAndroid Build Coastguard Worker #endif
793*f6dc9357SAndroid Build Coastguard Worker default: return false;
794*f6dc9357SAndroid Build Coastguard Worker }
795*f6dc9357SAndroid Build Coastguard Worker return true;
796*f6dc9357SAndroid Build Coastguard Worker }
797*f6dc9357SAndroid Build Coastguard Worker
MyBenchmark(bool totalMode)798*f6dc9357SAndroid Build Coastguard Worker static void MyBenchmark(bool totalMode)
799*f6dc9357SAndroid Build Coastguard Worker {
800*f6dc9357SAndroid Build Coastguard Worker CPanel::CDisableTimerProcessing disableTimerProcessing1(g_App.Panels[0]);
801*f6dc9357SAndroid Build Coastguard Worker CPanel::CDisableTimerProcessing disableTimerProcessing2(g_App.Panels[1]);
802*f6dc9357SAndroid Build Coastguard Worker Benchmark(totalMode);
803*f6dc9357SAndroid Build Coastguard Worker }
804*f6dc9357SAndroid Build Coastguard Worker
OnMenuCommand(HWND hWnd,unsigned id)805*f6dc9357SAndroid Build Coastguard Worker bool OnMenuCommand(HWND hWnd, unsigned id)
806*f6dc9357SAndroid Build Coastguard Worker {
807*f6dc9357SAndroid Build Coastguard Worker if (ExecuteFileCommand(id))
808*f6dc9357SAndroid Build Coastguard Worker return true;
809*f6dc9357SAndroid Build Coastguard Worker
810*f6dc9357SAndroid Build Coastguard Worker switch (id)
811*f6dc9357SAndroid Build Coastguard Worker {
812*f6dc9357SAndroid Build Coastguard Worker // File
813*f6dc9357SAndroid Build Coastguard Worker case IDCLOSE:
814*f6dc9357SAndroid Build Coastguard Worker // SendMessage(hWnd, WM_ACTIVATE, MAKEWPARAM(WA_INACTIVE, 0), (LPARAM)hWnd);
815*f6dc9357SAndroid Build Coastguard Worker // g_ExitEventLauncher.Exit(false);
816*f6dc9357SAndroid Build Coastguard Worker SendMessage(hWnd, WM_CLOSE, 0, 0);
817*f6dc9357SAndroid Build Coastguard Worker break;
818*f6dc9357SAndroid Build Coastguard Worker
819*f6dc9357SAndroid Build Coastguard Worker // Edit
820*f6dc9357SAndroid Build Coastguard Worker /*
821*f6dc9357SAndroid Build Coastguard Worker case IDM_EDIT_CUT:
822*f6dc9357SAndroid Build Coastguard Worker g_App.EditCut();
823*f6dc9357SAndroid Build Coastguard Worker break;
824*f6dc9357SAndroid Build Coastguard Worker case IDM_EDIT_COPY:
825*f6dc9357SAndroid Build Coastguard Worker g_App.EditCopy();
826*f6dc9357SAndroid Build Coastguard Worker break;
827*f6dc9357SAndroid Build Coastguard Worker case IDM_EDIT_PASTE:
828*f6dc9357SAndroid Build Coastguard Worker g_App.EditPaste();
829*f6dc9357SAndroid Build Coastguard Worker break;
830*f6dc9357SAndroid Build Coastguard Worker */
831*f6dc9357SAndroid Build Coastguard Worker case IDM_SELECT_ALL:
832*f6dc9357SAndroid Build Coastguard Worker g_App.SelectAll(true);
833*f6dc9357SAndroid Build Coastguard Worker g_App.Refresh_StatusBar();
834*f6dc9357SAndroid Build Coastguard Worker break;
835*f6dc9357SAndroid Build Coastguard Worker case IDM_DESELECT_ALL:
836*f6dc9357SAndroid Build Coastguard Worker g_App.SelectAll(false);
837*f6dc9357SAndroid Build Coastguard Worker g_App.Refresh_StatusBar();
838*f6dc9357SAndroid Build Coastguard Worker break;
839*f6dc9357SAndroid Build Coastguard Worker case IDM_INVERT_SELECTION:
840*f6dc9357SAndroid Build Coastguard Worker g_App.InvertSelection();
841*f6dc9357SAndroid Build Coastguard Worker g_App.Refresh_StatusBar();
842*f6dc9357SAndroid Build Coastguard Worker break;
843*f6dc9357SAndroid Build Coastguard Worker case IDM_SELECT:
844*f6dc9357SAndroid Build Coastguard Worker g_App.SelectSpec(true);
845*f6dc9357SAndroid Build Coastguard Worker g_App.Refresh_StatusBar();
846*f6dc9357SAndroid Build Coastguard Worker break;
847*f6dc9357SAndroid Build Coastguard Worker case IDM_DESELECT:
848*f6dc9357SAndroid Build Coastguard Worker g_App.SelectSpec(false);
849*f6dc9357SAndroid Build Coastguard Worker g_App.Refresh_StatusBar();
850*f6dc9357SAndroid Build Coastguard Worker break;
851*f6dc9357SAndroid Build Coastguard Worker case IDM_SELECT_BY_TYPE:
852*f6dc9357SAndroid Build Coastguard Worker g_App.SelectByType(true);
853*f6dc9357SAndroid Build Coastguard Worker g_App.Refresh_StatusBar();
854*f6dc9357SAndroid Build Coastguard Worker break;
855*f6dc9357SAndroid Build Coastguard Worker case IDM_DESELECT_BY_TYPE:
856*f6dc9357SAndroid Build Coastguard Worker g_App.SelectByType(false);
857*f6dc9357SAndroid Build Coastguard Worker g_App.Refresh_StatusBar();
858*f6dc9357SAndroid Build Coastguard Worker break;
859*f6dc9357SAndroid Build Coastguard Worker
860*f6dc9357SAndroid Build Coastguard Worker //View
861*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_LARGE_ICONS:
862*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_SMALL_ICONS:
863*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_LIST:
864*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_DETAILS:
865*f6dc9357SAndroid Build Coastguard Worker {
866*f6dc9357SAndroid Build Coastguard Worker UINT index = id - IDM_VIEW_LARGE_ICONS;
867*f6dc9357SAndroid Build Coastguard Worker if (index < 4)
868*f6dc9357SAndroid Build Coastguard Worker {
869*f6dc9357SAndroid Build Coastguard Worker g_App.SetListViewMode(index);
870*f6dc9357SAndroid Build Coastguard Worker /*
871*f6dc9357SAndroid Build Coastguard Worker CMenu menu;
872*f6dc9357SAndroid Build Coastguard Worker menu.Attach(::GetSubMenu(::GetMenu(hWnd), k_MenuIndex_View));
873*f6dc9357SAndroid Build Coastguard Worker menu.CheckRadioItem(IDM_VIEW_LARGE_ICONS, IDM_VIEW_DETAILS,
874*f6dc9357SAndroid Build Coastguard Worker id, MF_BYCOMMAND);
875*f6dc9357SAndroid Build Coastguard Worker */
876*f6dc9357SAndroid Build Coastguard Worker }
877*f6dc9357SAndroid Build Coastguard Worker break;
878*f6dc9357SAndroid Build Coastguard Worker }
879*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_ARANGE_BY_NAME: g_App.SortItemsWithPropID(kpidName); break;
880*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_ARANGE_BY_TYPE: g_App.SortItemsWithPropID(kpidExtension); break;
881*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_ARANGE_BY_DATE: g_App.SortItemsWithPropID(kpidMTime); break;
882*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_ARANGE_BY_SIZE: g_App.SortItemsWithPropID(kpidSize); break;
883*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_ARANGE_NO_SORT: g_App.SortItemsWithPropID(kpidNoProperty); break;
884*f6dc9357SAndroid Build Coastguard Worker
885*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_ROOT_FOLDER: g_App.OpenRootFolder(); break;
886*f6dc9357SAndroid Build Coastguard Worker case IDM_OPEN_PARENT_FOLDER: g_App.OpenParentFolder(); break;
887*f6dc9357SAndroid Build Coastguard Worker case IDM_FOLDERS_HISTORY: g_App.FoldersHistory(); break;
888*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_FLAT_VIEW: g_App.ChangeFlatMode(); break;
889*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_REFRESH: g_App.RefreshView(); break;
890*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_AUTO_REFRESH: g_App.Change_AutoRefresh_Mode(); break;
891*f6dc9357SAndroid Build Coastguard Worker
892*f6dc9357SAndroid Build Coastguard Worker // case IDM_VIEW_SHOW_STREAMS: g_App.Change_ShowNtfsStrems_Mode(); break;
893*f6dc9357SAndroid Build Coastguard Worker /*
894*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_SHOW_DELETED:
895*f6dc9357SAndroid Build Coastguard Worker {
896*f6dc9357SAndroid Build Coastguard Worker g_App.Change_ShowDeleted();
897*f6dc9357SAndroid Build Coastguard Worker bool isChecked = g_App.ShowDeletedFiles;
898*f6dc9357SAndroid Build Coastguard Worker Save_ShowDeleted(isChecked);
899*f6dc9357SAndroid Build Coastguard Worker }
900*f6dc9357SAndroid Build Coastguard Worker */
901*f6dc9357SAndroid Build Coastguard Worker
902*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_TWO_PANELS: g_App.SwitchOnOffOnePanel(); break;
903*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_STANDARD_TOOLBAR: g_App.SwitchStandardToolbar(); break;
904*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_ARCHIVE_TOOLBAR: g_App.SwitchArchiveToolbar(); break;
905*f6dc9357SAndroid Build Coastguard Worker
906*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_TOOLBARS_SHOW_BUTTONS_TEXT: g_App.SwitchButtonsLables(); break;
907*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_TOOLBARS_LARGE_BUTTONS: g_App.SwitchLargeButtons(); break;
908*f6dc9357SAndroid Build Coastguard Worker
909*f6dc9357SAndroid Build Coastguard Worker case IDM_VIEW_TIME_UTC:
910*f6dc9357SAndroid Build Coastguard Worker g_Timestamp_Show_UTC = !g_Timestamp_Show_UTC;
911*f6dc9357SAndroid Build Coastguard Worker g_App.RedrawListItems_InPanels();
912*f6dc9357SAndroid Build Coastguard Worker break;
913*f6dc9357SAndroid Build Coastguard Worker
914*f6dc9357SAndroid Build Coastguard Worker // Tools
915*f6dc9357SAndroid Build Coastguard Worker case IDM_OPTIONS: OptionsDialog(hWnd, g_hInstance); break;
916*f6dc9357SAndroid Build Coastguard Worker
917*f6dc9357SAndroid Build Coastguard Worker case IDM_BENCHMARK: MyBenchmark(false); break;
918*f6dc9357SAndroid Build Coastguard Worker case IDM_BENCHMARK2: MyBenchmark(true); break;
919*f6dc9357SAndroid Build Coastguard Worker
920*f6dc9357SAndroid Build Coastguard Worker // Help
921*f6dc9357SAndroid Build Coastguard Worker case IDM_HELP_CONTENTS:
922*f6dc9357SAndroid Build Coastguard Worker ShowHelpWindow(kFMHelpTopic);
923*f6dc9357SAndroid Build Coastguard Worker break;
924*f6dc9357SAndroid Build Coastguard Worker case IDM_ABOUT:
925*f6dc9357SAndroid Build Coastguard Worker {
926*f6dc9357SAndroid Build Coastguard Worker CAboutDialog dialog;
927*f6dc9357SAndroid Build Coastguard Worker dialog.Create(hWnd);
928*f6dc9357SAndroid Build Coastguard Worker break;
929*f6dc9357SAndroid Build Coastguard Worker }
930*f6dc9357SAndroid Build Coastguard Worker
931*f6dc9357SAndroid Build Coastguard Worker case IDM_TEMP_DIR:
932*f6dc9357SAndroid Build Coastguard Worker {
933*f6dc9357SAndroid Build Coastguard Worker /*
934*f6dc9357SAndroid Build Coastguard Worker CPanel &panel = g_App.GetFocusedPanel();
935*f6dc9357SAndroid Build Coastguard Worker FString tempPathF;
936*f6dc9357SAndroid Build Coastguard Worker if (NFile::NDir::MyGetTempPath(tempPathF))
937*f6dc9357SAndroid Build Coastguard Worker panel.BindToPathAndRefresh(tempPathF);
938*f6dc9357SAndroid Build Coastguard Worker */
939*f6dc9357SAndroid Build Coastguard Worker MyBrowseForTempFolder(g_HWND);
940*f6dc9357SAndroid Build Coastguard Worker break;
941*f6dc9357SAndroid Build Coastguard Worker }
942*f6dc9357SAndroid Build Coastguard Worker
943*f6dc9357SAndroid Build Coastguard Worker default:
944*f6dc9357SAndroid Build Coastguard Worker {
945*f6dc9357SAndroid Build Coastguard Worker if (id >= k_MenuID_OpenBookmark && id <= k_MenuID_OpenBookmark + 9)
946*f6dc9357SAndroid Build Coastguard Worker {
947*f6dc9357SAndroid Build Coastguard Worker g_App.OpenBookmark(id - k_MenuID_OpenBookmark);
948*f6dc9357SAndroid Build Coastguard Worker return true;
949*f6dc9357SAndroid Build Coastguard Worker }
950*f6dc9357SAndroid Build Coastguard Worker else if (id >= k_MenuID_SetBookmark && id <= k_MenuID_SetBookmark + 9)
951*f6dc9357SAndroid Build Coastguard Worker {
952*f6dc9357SAndroid Build Coastguard Worker g_App.SetBookmark(id - k_MenuID_SetBookmark);
953*f6dc9357SAndroid Build Coastguard Worker return true;
954*f6dc9357SAndroid Build Coastguard Worker }
955*f6dc9357SAndroid Build Coastguard Worker else if (id >= k_MenuID_Time && (unsigned)id < k_MenuID_Time + g_App._timestampLevels.Size())
956*f6dc9357SAndroid Build Coastguard Worker {
957*f6dc9357SAndroid Build Coastguard Worker g_App.SetTimestampLevel(g_App._timestampLevels[id - k_MenuID_Time]);
958*f6dc9357SAndroid Build Coastguard Worker return true;
959*f6dc9357SAndroid Build Coastguard Worker }
960*f6dc9357SAndroid Build Coastguard Worker return false;
961*f6dc9357SAndroid Build Coastguard Worker }
962*f6dc9357SAndroid Build Coastguard Worker }
963*f6dc9357SAndroid Build Coastguard Worker return true;
964*f6dc9357SAndroid Build Coastguard Worker }
965