1*f6dc9357SAndroid Build Coastguard Worker // MemDialog.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 <CommCtrl.h>
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard Worker #include "MemDialog.h"
8*f6dc9357SAndroid Build Coastguard Worker
9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringToInt.h"
10*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/System.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/ErrorMsg.h"
12*f6dc9357SAndroid Build Coastguard Worker
13*f6dc9357SAndroid Build Coastguard Worker #include "../Explorer/MyMessages.h"
14*f6dc9357SAndroid Build Coastguard Worker #include "../GUI/ExtractRes.h"
15*f6dc9357SAndroid Build Coastguard Worker
16*f6dc9357SAndroid Build Coastguard Worker #include "resourceGui.h"
17*f6dc9357SAndroid Build Coastguard Worker
18*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
19*f6dc9357SAndroid Build Coastguard Worker #include "LangUtils.h"
20*f6dc9357SAndroid Build Coastguard Worker #endif
21*f6dc9357SAndroid Build Coastguard Worker
22*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
23*f6dc9357SAndroid Build Coastguard Worker static const UInt32 kLangIDs[] =
24*f6dc9357SAndroid Build Coastguard Worker {
25*f6dc9357SAndroid Build Coastguard Worker IDX_MEM_SAVE_LIMIT,
26*f6dc9357SAndroid Build Coastguard Worker IDX_MEM_REMEMBER,
27*f6dc9357SAndroid Build Coastguard Worker IDG_MEM_ACTION,
28*f6dc9357SAndroid Build Coastguard Worker IDR_MEM_ACTION_ALLOW,
29*f6dc9357SAndroid Build Coastguard Worker IDR_MEM_ACTION_SKIP_ARC
30*f6dc9357SAndroid Build Coastguard Worker // , IDR_MEM_SKIP_FILE
31*f6dc9357SAndroid Build Coastguard Worker };
32*f6dc9357SAndroid Build Coastguard Worker #endif
33*f6dc9357SAndroid Build Coastguard Worker
34*f6dc9357SAndroid Build Coastguard Worker static const unsigned k_Action_Buttons[] =
35*f6dc9357SAndroid Build Coastguard Worker {
36*f6dc9357SAndroid Build Coastguard Worker IDR_MEM_ACTION_ALLOW,
37*f6dc9357SAndroid Build Coastguard Worker IDR_MEM_ACTION_SKIP_ARC
38*f6dc9357SAndroid Build Coastguard Worker // , IDR_MEM_SKIP_FILE
39*f6dc9357SAndroid Build Coastguard Worker };
40*f6dc9357SAndroid Build Coastguard Worker
41*f6dc9357SAndroid Build Coastguard Worker
EnableSpin(bool enable)42*f6dc9357SAndroid Build Coastguard Worker void CMemDialog::EnableSpin(bool enable)
43*f6dc9357SAndroid Build Coastguard Worker {
44*f6dc9357SAndroid Build Coastguard Worker EnableItem(IDC_MEM_SPIN, enable);
45*f6dc9357SAndroid Build Coastguard Worker EnableItem(IDE_MEM_SPIN_EDIT, enable);
46*f6dc9357SAndroid Build Coastguard Worker }
47*f6dc9357SAndroid Build Coastguard Worker
48*f6dc9357SAndroid Build Coastguard Worker
AddSize_GB(UString & s,UInt32 size_GB,UInt32 id)49*f6dc9357SAndroid Build Coastguard Worker static void AddSize_GB(UString &s, UInt32 size_GB, UInt32 id)
50*f6dc9357SAndroid Build Coastguard Worker {
51*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
52*f6dc9357SAndroid Build Coastguard Worker s += " ";
53*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(size_GB);
54*f6dc9357SAndroid Build Coastguard Worker s += " GB : ";
55*f6dc9357SAndroid Build Coastguard Worker AddLangString(s, id);
56*f6dc9357SAndroid Build Coastguard Worker }
57*f6dc9357SAndroid Build Coastguard Worker
AddInfoMessage_To_String(UString & s,const UInt32 * ramSize_GB)58*f6dc9357SAndroid Build Coastguard Worker void CMemDialog::AddInfoMessage_To_String(UString &s, const UInt32 *ramSize_GB)
59*f6dc9357SAndroid Build Coastguard Worker {
60*f6dc9357SAndroid Build Coastguard Worker AddLangString(s, IDS_MEM_REQUIRES_BIG_MEM);
61*f6dc9357SAndroid Build Coastguard Worker AddSize_GB(s, Required_GB, IDS_MEM_REQUIRED_MEM_SIZE);
62*f6dc9357SAndroid Build Coastguard Worker AddSize_GB(s, Limit_GB, IDS_MEM_CURRENT_MEM_LIMIT);
63*f6dc9357SAndroid Build Coastguard Worker if (ramSize_GB)
64*f6dc9357SAndroid Build Coastguard Worker AddSize_GB(s, *ramSize_GB, IDS_MEM_RAM_SIZE);
65*f6dc9357SAndroid Build Coastguard Worker if (!FilePath.IsEmpty())
66*f6dc9357SAndroid Build Coastguard Worker {
67*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
68*f6dc9357SAndroid Build Coastguard Worker s += "File: ";
69*f6dc9357SAndroid Build Coastguard Worker s += FilePath;
70*f6dc9357SAndroid Build Coastguard Worker }
71*f6dc9357SAndroid Build Coastguard Worker }
72*f6dc9357SAndroid Build Coastguard Worker
73*f6dc9357SAndroid Build Coastguard Worker /*
74*f6dc9357SAndroid Build Coastguard Worker int CMemDialog::AddAction(UINT id)
75*f6dc9357SAndroid Build Coastguard Worker {
76*f6dc9357SAndroid Build Coastguard Worker const int index = (int)m_Action.AddString(LangString(id));
77*f6dc9357SAndroid Build Coastguard Worker m_Action.SetItemData(index, (LPARAM)id);
78*f6dc9357SAndroid Build Coastguard Worker return index;
79*f6dc9357SAndroid Build Coastguard Worker }
80*f6dc9357SAndroid Build Coastguard Worker */
81*f6dc9357SAndroid Build Coastguard Worker
OnInit()82*f6dc9357SAndroid Build Coastguard Worker bool CMemDialog::OnInit()
83*f6dc9357SAndroid Build Coastguard Worker {
84*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
85*f6dc9357SAndroid Build Coastguard Worker LangSetWindowText(*this, IDD_MEM);
86*f6dc9357SAndroid Build Coastguard Worker LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
87*f6dc9357SAndroid Build Coastguard Worker #endif
88*f6dc9357SAndroid Build Coastguard Worker
89*f6dc9357SAndroid Build Coastguard Worker // m_Action.Attach(GetItem(IDC_MEM_ACTION));
90*f6dc9357SAndroid Build Coastguard Worker
91*f6dc9357SAndroid Build Coastguard Worker size_t ramSize = (size_t)sizeof(size_t) << 29;
92*f6dc9357SAndroid Build Coastguard Worker const bool ramSize_defined = NWindows::NSystem::GetRamSize(ramSize);
93*f6dc9357SAndroid Build Coastguard Worker // ramSize *= 10; // for debug
94*f6dc9357SAndroid Build Coastguard Worker
95*f6dc9357SAndroid Build Coastguard Worker UInt32 ramSize_GB = (UInt32)(((UInt64)ramSize + (1u << 29)) >> 30);
96*f6dc9357SAndroid Build Coastguard Worker if (ramSize_GB == 0)
97*f6dc9357SAndroid Build Coastguard Worker ramSize_GB = 1;
98*f6dc9357SAndroid Build Coastguard Worker
99*f6dc9357SAndroid Build Coastguard Worker const bool is_Allowed = (!ramSize_defined || ramSize > ((UInt64)Required_GB << 30));
100*f6dc9357SAndroid Build Coastguard Worker {
101*f6dc9357SAndroid Build Coastguard Worker UString s;
102*f6dc9357SAndroid Build Coastguard Worker if (!is_Allowed)
103*f6dc9357SAndroid Build Coastguard Worker {
104*f6dc9357SAndroid Build Coastguard Worker AddLangString(s, IDS_MEM_ERROR);
105*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
106*f6dc9357SAndroid Build Coastguard Worker }
107*f6dc9357SAndroid Build Coastguard Worker AddInfoMessage_To_String(s, is_Allowed ? NULL : &ramSize_GB);
108*f6dc9357SAndroid Build Coastguard Worker if (!ArcPath.IsEmpty())
109*f6dc9357SAndroid Build Coastguard Worker // for (int i = 0; i < 10; i++)
110*f6dc9357SAndroid Build Coastguard Worker {
111*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
112*f6dc9357SAndroid Build Coastguard Worker AddLangString(s, TestMode ?
113*f6dc9357SAndroid Build Coastguard Worker IDS_PROGRESS_TESTING :
114*f6dc9357SAndroid Build Coastguard Worker IDS_PROGRESS_EXTRACTING);
115*f6dc9357SAndroid Build Coastguard Worker s += ": ";
116*f6dc9357SAndroid Build Coastguard Worker s += ArcPath;
117*f6dc9357SAndroid Build Coastguard Worker }
118*f6dc9357SAndroid Build Coastguard Worker SetItemText(IDT_MEM_MESSAGE, s);
119*f6dc9357SAndroid Build Coastguard Worker
120*f6dc9357SAndroid Build Coastguard Worker s = "GB";
121*f6dc9357SAndroid Build Coastguard Worker if (ramSize_defined)
122*f6dc9357SAndroid Build Coastguard Worker {
123*f6dc9357SAndroid Build Coastguard Worker s += " / ";
124*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(ramSize_GB);
125*f6dc9357SAndroid Build Coastguard Worker s += " GB (RAM)";
126*f6dc9357SAndroid Build Coastguard Worker }
127*f6dc9357SAndroid Build Coastguard Worker SetItemText(IDT_MEM_GB, s);
128*f6dc9357SAndroid Build Coastguard Worker }
129*f6dc9357SAndroid Build Coastguard Worker const UINT valMin = 1;
130*f6dc9357SAndroid Build Coastguard Worker UINT valMax = 64; // 64GB for RAR7
131*f6dc9357SAndroid Build Coastguard Worker if (ramSize_defined /* && ramSize_GB > valMax */)
132*f6dc9357SAndroid Build Coastguard Worker {
133*f6dc9357SAndroid Build Coastguard Worker const UINT k_max_val = 1u << 14;
134*f6dc9357SAndroid Build Coastguard Worker if (ramSize_GB >= k_max_val)
135*f6dc9357SAndroid Build Coastguard Worker valMax = k_max_val;
136*f6dc9357SAndroid Build Coastguard Worker else if (ramSize_GB > 1)
137*f6dc9357SAndroid Build Coastguard Worker valMax = (UINT)ramSize_GB - 1;
138*f6dc9357SAndroid Build Coastguard Worker else
139*f6dc9357SAndroid Build Coastguard Worker valMax = 1;
140*f6dc9357SAndroid Build Coastguard Worker }
141*f6dc9357SAndroid Build Coastguard Worker
142*f6dc9357SAndroid Build Coastguard Worker SendItemMessage(IDC_MEM_SPIN, UDM_SETRANGE, 0, MAKELPARAM(valMax, valMin)); // Sets the controls direction
143*f6dc9357SAndroid Build Coastguard Worker // UDM_SETPOS doesn't set value larger than max value (valMax) of range:
144*f6dc9357SAndroid Build Coastguard Worker SendItemMessage(IDC_MEM_SPIN, UDM_SETPOS, 0, Required_GB);
145*f6dc9357SAndroid Build Coastguard Worker {
146*f6dc9357SAndroid Build Coastguard Worker UString s;
147*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(Required_GB);
148*f6dc9357SAndroid Build Coastguard Worker SetItemText(IDE_MEM_SPIN_EDIT, s);
149*f6dc9357SAndroid Build Coastguard Worker }
150*f6dc9357SAndroid Build Coastguard Worker
151*f6dc9357SAndroid Build Coastguard Worker EnableSpin(false);
152*f6dc9357SAndroid Build Coastguard Worker
153*f6dc9357SAndroid Build Coastguard Worker /*
154*f6dc9357SAndroid Build Coastguard Worker AddAction(IDB_ALLOW_OPERATION);
155*f6dc9357SAndroid Build Coastguard Worker m_Action.SetCurSel(0);
156*f6dc9357SAndroid Build Coastguard Worker AddAction(IDB_MEM_SKIP_ARC);
157*f6dc9357SAndroid Build Coastguard Worker AddAction(IDB_MEM_SKIP_FILE);
158*f6dc9357SAndroid Build Coastguard Worker */
159*f6dc9357SAndroid Build Coastguard Worker
160*f6dc9357SAndroid Build Coastguard Worker const UINT buttonId = is_Allowed ?
161*f6dc9357SAndroid Build Coastguard Worker IDR_MEM_ACTION_ALLOW :
162*f6dc9357SAndroid Build Coastguard Worker IDR_MEM_ACTION_SKIP_ARC;
163*f6dc9357SAndroid Build Coastguard Worker
164*f6dc9357SAndroid Build Coastguard Worker CheckRadioButton(
165*f6dc9357SAndroid Build Coastguard Worker k_Action_Buttons[0],
166*f6dc9357SAndroid Build Coastguard Worker k_Action_Buttons[Z7_ARRAY_SIZE(k_Action_Buttons) - 1],
167*f6dc9357SAndroid Build Coastguard Worker buttonId);
168*f6dc9357SAndroid Build Coastguard Worker /*
169*f6dc9357SAndroid Build Coastguard Worker if (!ShowSkipFile)
170*f6dc9357SAndroid Build Coastguard Worker HideItem(IDR_MEM_SKIP_FILE);
171*f6dc9357SAndroid Build Coastguard Worker */
172*f6dc9357SAndroid Build Coastguard Worker if (!ShowRemember)
173*f6dc9357SAndroid Build Coastguard Worker HideItem(IDX_MEM_REMEMBER);
174*f6dc9357SAndroid Build Coastguard Worker return CModalDialog::OnInit();
175*f6dc9357SAndroid Build Coastguard Worker }
176*f6dc9357SAndroid Build Coastguard Worker
177*f6dc9357SAndroid Build Coastguard Worker
OnButtonClicked(unsigned buttonID,HWND buttonHWND)178*f6dc9357SAndroid Build Coastguard Worker bool CMemDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
179*f6dc9357SAndroid Build Coastguard Worker {
180*f6dc9357SAndroid Build Coastguard Worker if (buttonID == IDX_MEM_SAVE_LIMIT)
181*f6dc9357SAndroid Build Coastguard Worker {
182*f6dc9357SAndroid Build Coastguard Worker EnableSpin(IsButtonCheckedBool(IDX_MEM_SAVE_LIMIT));
183*f6dc9357SAndroid Build Coastguard Worker return true;
184*f6dc9357SAndroid Build Coastguard Worker }
185*f6dc9357SAndroid Build Coastguard Worker return CDialog::OnButtonClicked(buttonID, buttonHWND);
186*f6dc9357SAndroid Build Coastguard Worker }
187*f6dc9357SAndroid Build Coastguard Worker
188*f6dc9357SAndroid Build Coastguard Worker
OnContinue()189*f6dc9357SAndroid Build Coastguard Worker void CMemDialog::OnContinue()
190*f6dc9357SAndroid Build Coastguard Worker {
191*f6dc9357SAndroid Build Coastguard Worker Remember = IsButtonCheckedBool(IDX_MEM_REMEMBER);
192*f6dc9357SAndroid Build Coastguard Worker NeedSave = IsButtonCheckedBool(IDX_MEM_SAVE_LIMIT);
193*f6dc9357SAndroid Build Coastguard Worker SkipArc = IsButtonCheckedBool(IDR_MEM_ACTION_SKIP_ARC);
194*f6dc9357SAndroid Build Coastguard Worker if (NeedSave)
195*f6dc9357SAndroid Build Coastguard Worker {
196*f6dc9357SAndroid Build Coastguard Worker #if 0
197*f6dc9357SAndroid Build Coastguard Worker // UDM_GETPOS doesn't support value outside of range that was set:
198*f6dc9357SAndroid Build Coastguard Worker LRESULT lresult = SendItemMessage(IDC_MEM_SPIN, UDM_GETPOS, 0, 0);
199*f6dc9357SAndroid Build Coastguard Worker const UInt32 val = LOWORD(lresult);
200*f6dc9357SAndroid Build Coastguard Worker if (HIWORD(lresult) != 0) // the value outside of allowed range
201*f6dc9357SAndroid Build Coastguard Worker #else
202*f6dc9357SAndroid Build Coastguard Worker UString s;
203*f6dc9357SAndroid Build Coastguard Worker GetItemText(IDE_MEM_SPIN_EDIT, s);
204*f6dc9357SAndroid Build Coastguard Worker const wchar_t *end;
205*f6dc9357SAndroid Build Coastguard Worker const UInt32 val = ConvertStringToUInt32(s.Ptr(), &end);
206*f6dc9357SAndroid Build Coastguard Worker if (s.IsEmpty() || *end != 0 || val > (1u << 30))
207*f6dc9357SAndroid Build Coastguard Worker #endif
208*f6dc9357SAndroid Build Coastguard Worker {
209*f6dc9357SAndroid Build Coastguard Worker ShowErrorMessage(*this,
210*f6dc9357SAndroid Build Coastguard Worker NWindows::NError::MyFormatMessage(E_INVALIDARG)
211*f6dc9357SAndroid Build Coastguard Worker // L"Incorrect value"
212*f6dc9357SAndroid Build Coastguard Worker );
213*f6dc9357SAndroid Build Coastguard Worker return;
214*f6dc9357SAndroid Build Coastguard Worker }
215*f6dc9357SAndroid Build Coastguard Worker Limit_GB = val;
216*f6dc9357SAndroid Build Coastguard Worker }
217*f6dc9357SAndroid Build Coastguard Worker CModalDialog::OnContinue();
218*f6dc9357SAndroid Build Coastguard Worker }
219