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