xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/FoldersPage.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // FoldersPage.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 "FoldersPageRes.h"
6*f6dc9357SAndroid Build Coastguard Worker #include "FoldersPage.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/BrowseDialog.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/HelpUtils.h"
10*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/LangUtils.h"
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
15*f6dc9357SAndroid Build Coastguard Worker static const UInt32 kLangIDs[] =
16*f6dc9357SAndroid Build Coastguard Worker {
17*f6dc9357SAndroid Build Coastguard Worker   IDT_FOLDERS_WORKING_FOLDER,
18*f6dc9357SAndroid Build Coastguard Worker   IDR_FOLDERS_WORK_SYSTEM,
19*f6dc9357SAndroid Build Coastguard Worker   IDR_FOLDERS_WORK_CURRENT,
20*f6dc9357SAndroid Build Coastguard Worker   IDR_FOLDERS_WORK_SPECIFIED,
21*f6dc9357SAndroid Build Coastguard Worker   IDX_FOLDERS_WORK_FOR_REMOVABLE
22*f6dc9357SAndroid Build Coastguard Worker };
23*f6dc9357SAndroid Build Coastguard Worker #endif
24*f6dc9357SAndroid Build Coastguard Worker 
25*f6dc9357SAndroid Build Coastguard Worker static const unsigned kWorkModeButtons[] =
26*f6dc9357SAndroid Build Coastguard Worker {
27*f6dc9357SAndroid Build Coastguard Worker   IDR_FOLDERS_WORK_SYSTEM,
28*f6dc9357SAndroid Build Coastguard Worker   IDR_FOLDERS_WORK_CURRENT,
29*f6dc9357SAndroid Build Coastguard Worker   IDR_FOLDERS_WORK_SPECIFIED
30*f6dc9357SAndroid Build Coastguard Worker };
31*f6dc9357SAndroid Build Coastguard Worker 
32*f6dc9357SAndroid Build Coastguard Worker #define kFoldersTopic "fm/options.htm#folders"
33*f6dc9357SAndroid Build Coastguard Worker 
34*f6dc9357SAndroid Build Coastguard Worker static const unsigned kNumWorkModeButtons = Z7_ARRAY_SIZE(kWorkModeButtons);
35*f6dc9357SAndroid Build Coastguard Worker 
OnInit()36*f6dc9357SAndroid Build Coastguard Worker bool CFoldersPage::OnInit()
37*f6dc9357SAndroid Build Coastguard Worker {
38*f6dc9357SAndroid Build Coastguard Worker   _initMode = true;
39*f6dc9357SAndroid Build Coastguard Worker   _needSave = false;
40*f6dc9357SAndroid Build Coastguard Worker 
41*f6dc9357SAndroid Build Coastguard Worker   #ifdef Z7_LANG
42*f6dc9357SAndroid Build Coastguard Worker   LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
43*f6dc9357SAndroid Build Coastguard Worker   #endif
44*f6dc9357SAndroid Build Coastguard Worker   m_WorkDirInfo.Load();
45*f6dc9357SAndroid Build Coastguard Worker 
46*f6dc9357SAndroid Build Coastguard Worker   CheckButton(IDX_FOLDERS_WORK_FOR_REMOVABLE, m_WorkDirInfo.ForRemovableOnly);
47*f6dc9357SAndroid Build Coastguard Worker 
48*f6dc9357SAndroid Build Coastguard Worker   CheckRadioButton(
49*f6dc9357SAndroid Build Coastguard Worker       kWorkModeButtons[0],
50*f6dc9357SAndroid Build Coastguard Worker       kWorkModeButtons[kNumWorkModeButtons - 1],
51*f6dc9357SAndroid Build Coastguard Worker       kWorkModeButtons[m_WorkDirInfo.Mode]);
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker   m_WorkPath.Init(*this, IDE_FOLDERS_WORK_PATH);
54*f6dc9357SAndroid Build Coastguard Worker 
55*f6dc9357SAndroid Build Coastguard Worker   m_WorkPath.SetText(fs2us(m_WorkDirInfo.Path));
56*f6dc9357SAndroid Build Coastguard Worker 
57*f6dc9357SAndroid Build Coastguard Worker   MyEnableControls();
58*f6dc9357SAndroid Build Coastguard Worker 
59*f6dc9357SAndroid Build Coastguard Worker   _initMode = false;
60*f6dc9357SAndroid Build Coastguard Worker   return CPropertyPage::OnInit();
61*f6dc9357SAndroid Build Coastguard Worker }
62*f6dc9357SAndroid Build Coastguard Worker 
GetWorkMode() const63*f6dc9357SAndroid Build Coastguard Worker int CFoldersPage::GetWorkMode() const
64*f6dc9357SAndroid Build Coastguard Worker {
65*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < kNumWorkModeButtons; i++)
66*f6dc9357SAndroid Build Coastguard Worker     if (IsButtonCheckedBool(kWorkModeButtons[i]))
67*f6dc9357SAndroid Build Coastguard Worker       return (int)i;
68*f6dc9357SAndroid Build Coastguard Worker   throw 0;
69*f6dc9357SAndroid Build Coastguard Worker }
70*f6dc9357SAndroid Build Coastguard Worker 
MyEnableControls()71*f6dc9357SAndroid Build Coastguard Worker void CFoldersPage::MyEnableControls()
72*f6dc9357SAndroid Build Coastguard Worker {
73*f6dc9357SAndroid Build Coastguard Worker   bool enablePath = (GetWorkMode() == NWorkDir::NMode::kSpecified);
74*f6dc9357SAndroid Build Coastguard Worker   m_WorkPath.Enable(enablePath);
75*f6dc9357SAndroid Build Coastguard Worker   EnableItem(IDB_FOLDERS_WORK_PATH, enablePath);
76*f6dc9357SAndroid Build Coastguard Worker }
77*f6dc9357SAndroid Build Coastguard Worker 
GetWorkDir(NWorkDir::CInfo & workDirInfo)78*f6dc9357SAndroid Build Coastguard Worker void CFoldersPage::GetWorkDir(NWorkDir::CInfo &workDirInfo)
79*f6dc9357SAndroid Build Coastguard Worker {
80*f6dc9357SAndroid Build Coastguard Worker   UString s;
81*f6dc9357SAndroid Build Coastguard Worker   m_WorkPath.GetText(s);
82*f6dc9357SAndroid Build Coastguard Worker   workDirInfo.Path = us2fs(s);
83*f6dc9357SAndroid Build Coastguard Worker   workDirInfo.ForRemovableOnly = IsButtonCheckedBool(IDX_FOLDERS_WORK_FOR_REMOVABLE);
84*f6dc9357SAndroid Build Coastguard Worker   workDirInfo.Mode = NWorkDir::NMode::EEnum(GetWorkMode());
85*f6dc9357SAndroid Build Coastguard Worker }
86*f6dc9357SAndroid Build Coastguard Worker 
87*f6dc9357SAndroid Build Coastguard Worker /*
88*f6dc9357SAndroid Build Coastguard Worker bool CFoldersPage::WasChanged()
89*f6dc9357SAndroid Build Coastguard Worker {
90*f6dc9357SAndroid Build Coastguard Worker   NWorkDir::CInfo workDirInfo;
91*f6dc9357SAndroid Build Coastguard Worker   GetWorkDir(workDirInfo);
92*f6dc9357SAndroid Build Coastguard Worker   return (workDirInfo.Mode != m_WorkDirInfo.Mode ||
93*f6dc9357SAndroid Build Coastguard Worker       workDirInfo.ForRemovableOnly != m_WorkDirInfo.ForRemovableOnly ||
94*f6dc9357SAndroid Build Coastguard Worker       workDirInfo.Path.Compare(m_WorkDirInfo.Path) != 0);
95*f6dc9357SAndroid Build Coastguard Worker }
96*f6dc9357SAndroid Build Coastguard Worker */
97*f6dc9357SAndroid Build Coastguard Worker 
ModifiedEvent()98*f6dc9357SAndroid Build Coastguard Worker void CFoldersPage::ModifiedEvent()
99*f6dc9357SAndroid Build Coastguard Worker {
100*f6dc9357SAndroid Build Coastguard Worker   if (!_initMode)
101*f6dc9357SAndroid Build Coastguard Worker   {
102*f6dc9357SAndroid Build Coastguard Worker     _needSave = true;
103*f6dc9357SAndroid Build Coastguard Worker     Changed();
104*f6dc9357SAndroid Build Coastguard Worker   }
105*f6dc9357SAndroid Build Coastguard Worker   /*
106*f6dc9357SAndroid Build Coastguard Worker   if (WasChanged())
107*f6dc9357SAndroid Build Coastguard Worker     Changed();
108*f6dc9357SAndroid Build Coastguard Worker   else
109*f6dc9357SAndroid Build Coastguard Worker     UnChanged();
110*f6dc9357SAndroid Build Coastguard Worker   */
111*f6dc9357SAndroid Build Coastguard Worker }
112*f6dc9357SAndroid Build Coastguard Worker 
OnButtonClicked(unsigned buttonID,HWND buttonHWND)113*f6dc9357SAndroid Build Coastguard Worker bool CFoldersPage::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
114*f6dc9357SAndroid Build Coastguard Worker {
115*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < kNumWorkModeButtons; i++)
116*f6dc9357SAndroid Build Coastguard Worker     if (buttonID == kWorkModeButtons[i])
117*f6dc9357SAndroid Build Coastguard Worker     {
118*f6dc9357SAndroid Build Coastguard Worker       MyEnableControls();
119*f6dc9357SAndroid Build Coastguard Worker       ModifiedEvent();
120*f6dc9357SAndroid Build Coastguard Worker       return true;
121*f6dc9357SAndroid Build Coastguard Worker     }
122*f6dc9357SAndroid Build Coastguard Worker 
123*f6dc9357SAndroid Build Coastguard Worker   switch (buttonID)
124*f6dc9357SAndroid Build Coastguard Worker   {
125*f6dc9357SAndroid Build Coastguard Worker     case IDB_FOLDERS_WORK_PATH:
126*f6dc9357SAndroid Build Coastguard Worker       OnFoldersWorkButtonPath();
127*f6dc9357SAndroid Build Coastguard Worker       return true;
128*f6dc9357SAndroid Build Coastguard Worker     case IDX_FOLDERS_WORK_FOR_REMOVABLE:
129*f6dc9357SAndroid Build Coastguard Worker       break;
130*f6dc9357SAndroid Build Coastguard Worker     default:
131*f6dc9357SAndroid Build Coastguard Worker       return CPropertyPage::OnButtonClicked(buttonID, buttonHWND);
132*f6dc9357SAndroid Build Coastguard Worker   }
133*f6dc9357SAndroid Build Coastguard Worker 
134*f6dc9357SAndroid Build Coastguard Worker   ModifiedEvent();
135*f6dc9357SAndroid Build Coastguard Worker   return true;
136*f6dc9357SAndroid Build Coastguard Worker }
137*f6dc9357SAndroid Build Coastguard Worker 
OnCommand(unsigned code,unsigned itemID,LPARAM lParam)138*f6dc9357SAndroid Build Coastguard Worker bool CFoldersPage::OnCommand(unsigned code, unsigned itemID, LPARAM lParam)
139*f6dc9357SAndroid Build Coastguard Worker {
140*f6dc9357SAndroid Build Coastguard Worker   if (code == EN_CHANGE && itemID == IDE_FOLDERS_WORK_PATH)
141*f6dc9357SAndroid Build Coastguard Worker   {
142*f6dc9357SAndroid Build Coastguard Worker     ModifiedEvent();
143*f6dc9357SAndroid Build Coastguard Worker     return true;
144*f6dc9357SAndroid Build Coastguard Worker   }
145*f6dc9357SAndroid Build Coastguard Worker   return CPropertyPage::OnCommand(code, itemID, lParam);
146*f6dc9357SAndroid Build Coastguard Worker }
147*f6dc9357SAndroid Build Coastguard Worker 
OnFoldersWorkButtonPath()148*f6dc9357SAndroid Build Coastguard Worker void CFoldersPage::OnFoldersWorkButtonPath()
149*f6dc9357SAndroid Build Coastguard Worker {
150*f6dc9357SAndroid Build Coastguard Worker   UString currentPath;
151*f6dc9357SAndroid Build Coastguard Worker   m_WorkPath.GetText(currentPath);
152*f6dc9357SAndroid Build Coastguard Worker   UString title = LangString(IDS_FOLDERS_SET_WORK_PATH_TITLE);
153*f6dc9357SAndroid Build Coastguard Worker   UString resultPath;
154*f6dc9357SAndroid Build Coastguard Worker   if (MyBrowseForFolder(*this, title, currentPath, resultPath))
155*f6dc9357SAndroid Build Coastguard Worker     m_WorkPath.SetText(resultPath);
156*f6dc9357SAndroid Build Coastguard Worker }
157*f6dc9357SAndroid Build Coastguard Worker 
OnApply()158*f6dc9357SAndroid Build Coastguard Worker LONG CFoldersPage::OnApply()
159*f6dc9357SAndroid Build Coastguard Worker {
160*f6dc9357SAndroid Build Coastguard Worker   if (_needSave)
161*f6dc9357SAndroid Build Coastguard Worker   {
162*f6dc9357SAndroid Build Coastguard Worker     GetWorkDir(m_WorkDirInfo);
163*f6dc9357SAndroid Build Coastguard Worker     m_WorkDirInfo.Save();
164*f6dc9357SAndroid Build Coastguard Worker     _needSave = false;
165*f6dc9357SAndroid Build Coastguard Worker   }
166*f6dc9357SAndroid Build Coastguard Worker   return PSNRET_NOERROR;
167*f6dc9357SAndroid Build Coastguard Worker }
168*f6dc9357SAndroid Build Coastguard Worker 
OnNotifyHelp()169*f6dc9357SAndroid Build Coastguard Worker void CFoldersPage::OnNotifyHelp()
170*f6dc9357SAndroid Build Coastguard Worker {
171*f6dc9357SAndroid Build Coastguard Worker   ShowHelpWindow(kFoldersTopic);
172*f6dc9357SAndroid Build Coastguard Worker }
173