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