1 // DataSettingsDlg.cpp : 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "MusicPlayer2.h"
6 #include "DataSettingsDlg.h"
7 #include "UpdateHelper.h"
8
9
10 // CDataSettingsDlg 对话框
11
IMPLEMENT_DYNAMIC(CDataSettingsDlg,CTabDlg)12 IMPLEMENT_DYNAMIC(CDataSettingsDlg, CTabDlg)
13
14 CDataSettingsDlg::CDataSettingsDlg(CWnd* pParent /*=NULL*/)
15 : CTabDlg(IDD_DATA_SETTINGS_DIALOG, pParent)
16 {
17
18 }
19
~CDataSettingsDlg()20 CDataSettingsDlg::~CDataSettingsDlg()
21 {
22 }
23
IsAutoRunModified() const24 bool CDataSettingsDlg::IsAutoRunModified() const
25 {
26 return m_auto_run_modified;
27 }
28
InitializeControls()29 bool CDataSettingsDlg::InitializeControls()
30 {
31 wstring temp;
32 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_APP_SETTING");
33 SetDlgItemTextW(IDC_TXT_OPT_DATA_APP_SETTING_STATIC, temp.c_str());
34 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_UPDATE_AUTO_CHECK");
35 SetDlgItemTextW(IDC_CHECK_UPDATE_CHECK, temp.c_str());
36 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_UPDATE_SOURCE_SEL");
37 SetDlgItemTextW(IDC_TXT_OPT_DATA_UPDATE_SOURCE_SEL_STATIC, temp.c_str());
38 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_UPDATE_SOURCE_GITHUB");
39 SetDlgItemTextW(IDC_GITHUB_RADIO, temp.c_str());
40 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_UPDATE_SOURCE_GITEE");
41 SetDlgItemTextW(IDC_GITEE_RADIO, temp.c_str());
42 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_RUN");
43 SetDlgItemTextW(IDC_AUTO_RUN_CHECK, temp.c_str());
44 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_LANGUAGE_SEL");
45 SetDlgItemTextW(IDC_TXT_OPT_DATA_LANGUAGE_SEL_STATIC, temp.c_str());
46 // IDC_COMBO1
47 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_DATA_FILE_CFG");
48 SetDlgItemTextW(IDC_TXT_OPT_DATA_DATA_FILE_CFG_STATIC, temp.c_str());
49 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_DATA_FILE_SAVE_DIR_APPDATA");
50 SetDlgItemTextW(IDC_SAVE_TO_APPDATA_RADIO, temp.c_str());
51 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_DATA_FILE_SAVE_DIR_PROGRAM");
52 SetDlgItemTextW(IDC_SAVE_TO_PROGRAM_DIR_RADIO, temp.c_str());
53 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_DATA_FILE_DIR_OPEN");
54 SetDlgItemTextW(IDC_OPEN_CONFIG_PATH_BUTTON, temp.c_str());
55 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_CLOSE_MAIN_WINDOW");
56 SetDlgItemTextW(IDC_TXT_OPT_DATA_CLOSE_MAIN_WINDOW_STATIC, temp.c_str());
57 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_CLOSE_MAIN_WINDOW_MINIMIZE_NOTIFY_AREA");
58 SetDlgItemTextW(IDC_MINIMIZE_TO_NOTIFY_RADIO, temp.c_str());
59 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_CLOSE_MAIN_WINDOW_EXIT");
60 SetDlgItemTextW(IDC_EXIT_PROGRAM_RADIO, temp.c_str());
61 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_DL_SETTING");
62 SetDlgItemTextW(IDC_TXT_OPT_DATA_DL_SETTING_STATIC, temp.c_str());
63 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_LYRIC");
64 SetDlgItemTextW(IDC_LYRIC_AUTO_DOWNLOAD_CHECK, temp.c_str());
65 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_LYRIC_SAVE_SEL");
66 SetDlgItemTextW(IDC_TXT_OPT_DATA_AUTO_DL_LYRIC_SAVE_SEL_STATIC, temp.c_str());
67 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_LYRIC_SAVE_SONG_DIR");
68 SetDlgItemTextW(IDC_SAVE_TO_SONG_FOLDER, temp.c_str());
69 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_LYRIC_SAVE_LYRIC_DIR");
70 SetDlgItemTextW(IDC_SAVE_TO_LYRIC_FOLDER, temp.c_str());
71
72 SetDlgControlText(IDC_DOWN_LOAD_LYRIC_TRANSLATION_FORMAT_STATIC, L"TXT_OPT_DATA_DL_LYRIC_TRANSLATION_FORMAT_SEL");
73 SetDlgControlText(IDC_LYRIC_AND_TRANSLATION_IN_SAME_LINE_RADIO, L"TXT_OPT_DATA_DL_LYRIC_TRANSLATION_FORMAT_SAME_LINE");
74 SetDlgControlText(IDC_LYRIC_AND_TRANSLATION_IN_DIFFERENT_LINE_RADIO, L"TXT_OPT_DATA_DL_LYRIC_TRANSLATION_FORMAT_DIFFERENT_LINE");
75
76 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_COVER");
77 SetDlgItemTextW(IDC_COVER_AUTO_DOWNLOAD_CHECK, temp.c_str());
78 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_COVER_SAVE_SEL");
79 SetDlgItemTextW(IDC_TXT_OPT_DATA_AUTO_DL_COVER_SAVE_SEL_STATIC, temp.c_str());
80 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_COVER_SAVE_SONG_DIR");
81 SetDlgItemTextW(IDC_SAVE_TO_SONG_FOLDER3, temp.c_str());
82 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_COVER_SAVE_COVER_DIR");
83 SetDlgItemTextW(IDC_SAVE_TO_ALBUM_FOLDER3, temp.c_str());
84 temp = theApp.m_str_table.LoadText(L"TXT_OPT_DATA_AUTO_DL_ONLY_WHEN_TAG_FULL");
85 SetDlgItemTextW(IDC_DOWNLOAD_WHEN_TAG_FULL_CHECK, temp.c_str());
86
87 SetDlgControlText(IDC_TXT_OPERATION_SETTINGS_STATIC, L"TXT_OPT_DATA_OPERATION_SETTINGS");
88 SetDlgControlText(IDC_GLOBAL_MOUSE_WHEEL_VOLUME_ADJUSTMENT_CHECK, L"TXT_OPT_DATA_GLOBAL_MOUSE_WHEEL_VOLUME_ADJUSTMENT");
89
90 return false;
91 }
92
DoDataExchange(CDataExchange * pDX)93 void CDataSettingsDlg::DoDataExchange(CDataExchange* pDX)
94 {
95 CTabDlg::DoDataExchange(pDX);
96 DDX_Control(pDX, IDC_COMBO1, m_language_combo);
97 }
98
GetDataFromUi()99 void CDataSettingsDlg::GetDataFromUi()
100 {
101 m_data.minimize_to_notify_icon = (((CButton*)GetDlgItem(IDC_MINIMIZE_TO_NOTIFY_RADIO))->GetCheck() != 0);
102 m_data.save_lyric_to_song_folder = (((CButton*)GetDlgItem(IDC_SAVE_TO_SONG_FOLDER))->GetCheck() != 0);
103 m_data.save_album_to_song_folder = (((CButton*)GetDlgItem(IDC_SAVE_TO_SONG_FOLDER3))->GetCheck() != 0);
104 m_data.download_lyric_text_and_translation_in_same_line = (IsDlgButtonChecked(IDC_LYRIC_AND_TRANSLATION_IN_SAME_LINE_RADIO) != 0);
105
106 //获取语言的设置
107 int sel_language = m_language_combo.GetCurSel();
108 if (sel_language == 0)
109 m_data.language_.clear();
110 else
111 {
112 sel_language -= 1;
113 const auto& language_list = theApp.m_str_table.GetLanguageList();
114 if (sel_language >= 0 && sel_language < static_cast<int>(language_list.size()))
115 m_data.language_ = language_list[sel_language].bcp_47;
116 }
117 if (m_data.language_ != theApp.m_general_setting_data.language_)
118 {
119 const wstring& info = theApp.m_str_table.LoadText(L"MSG_OPT_DATA_LANGUAGE_CHANGE_INFO");
120 MessageBox(info.c_str(), NULL, MB_ICONINFORMATION | MB_OK);
121 }
122
123 //获取数据文件保存位置的设置
124 m_data.portable_mode = (IsDlgButtonChecked(IDC_SAVE_TO_PROGRAM_DIR_RADIO) != 0);
125 if (m_data.portable_mode != theApp.m_general_setting_data.portable_mode)
126 {
127 const wstring& info = theApp.m_str_table.LoadText(L"MSG_OPT_DATA_CFG_DIR_CHANGED_INFO");
128 MessageBox(info.c_str(), NULL, MB_ICONINFORMATION | MB_OK);
129 }
130
131 m_data.global_mouse_wheel_volume_adjustment = (IsDlgButtonChecked(IDC_GLOBAL_MOUSE_WHEEL_VOLUME_ADJUSTMENT_CHECK) != 0);
132 }
133
ApplyDataToUi()134 void CDataSettingsDlg::ApplyDataToUi()
135 {
136 EnableControl();
137 }
138
139
BEGIN_MESSAGE_MAP(CDataSettingsDlg,CTabDlg)140 BEGIN_MESSAGE_MAP(CDataSettingsDlg, CTabDlg)
141 ON_BN_CLICKED(IDC_COVER_AUTO_DOWNLOAD_CHECK, &CDataSettingsDlg::OnBnClickedCoverAutoDownloadCheck)
142 ON_BN_CLICKED(IDC_LYRIC_AUTO_DOWNLOAD_CHECK, &CDataSettingsDlg::OnBnClickedLyricAutoDownloadCheck)
143 ON_BN_CLICKED(IDC_CHECK_UPDATE_CHECK, &CDataSettingsDlg::OnBnClickedCheckUpdateCheck)
144 ON_BN_CLICKED(IDC_DOWNLOAD_WHEN_TAG_FULL_CHECK, &CDataSettingsDlg::OnBnClickedDownloadWhenTagFullCheck)
145 ON_BN_CLICKED(IDC_AUTO_RUN_CHECK, &CDataSettingsDlg::OnBnClickedAutoRunCheck)
146 ON_BN_CLICKED(IDC_GITHUB_RADIO, &CDataSettingsDlg::OnBnClickedGithubRadio)
147 ON_BN_CLICKED(IDC_GITEE_RADIO, &CDataSettingsDlg::OnBnClickedGiteeRadio)
148 ON_BN_CLICKED(IDC_OPEN_CONFIG_PATH_BUTTON, &CDataSettingsDlg::OnBnClickedOpenConfigPathButton)
149 END_MESSAGE_MAP()
150
151
152 // CDataSettingsDlg 消息处理程序
153
154
155 BOOL CDataSettingsDlg::OnInitDialog()
156 {
157 CTabDlg::OnInitDialog();
158
159 // TODO: 在此添加额外的初始化
160
161 m_language_combo.AddString(theApp.m_str_table.LoadText(L"TXT_OPT_DATA_LANGUAGE_FOLLOWING_SYSTEM").c_str());
162 const auto& language_list = theApp.m_str_table.GetLanguageList();
163 int language_sel{};
164 for (size_t i{}; i < language_list.size(); ++i)
165 {
166 m_language_combo.AddString(language_list[i].display_name.c_str());
167 if (language_list[i].bcp_47 == m_data.language_)
168 language_sel = i + 1;
169 }
170 ASSERT(language_sel != 0 || m_data.language_.empty()); // 仅当设置为“跟随系统(空)”时索引才可能为0
171 m_language_combo.SetCurSel(language_sel);
172
173 m_auto_run = theApp.GetAutoRun();
174 CheckDlgButton(IDC_AUTO_RUN_CHECK, m_auto_run);
175 if (m_data.update_source == static_cast<int>(CUpdateHelper::UpdateSource::GitHubSource))
176 CheckDlgButton(IDC_GITHUB_RADIO, TRUE);
177 else
178 CheckDlgButton(IDC_GITEE_RADIO, TRUE);
179
180 CheckDlgButton(IDC_SAVE_TO_APPDATA_RADIO, !m_data.portable_mode);
181 CheckDlgButton(IDC_SAVE_TO_PROGRAM_DIR_RADIO, m_data.portable_mode);
182 EnableDlgCtrl(IDC_SAVE_TO_PROGRAM_DIR_RADIO, theApp.m_module_dir_writable);
183
184 ((CButton*)GetDlgItem(IDC_COVER_AUTO_DOWNLOAD_CHECK))->SetCheck(m_data.auto_download_album_cover);
185 ((CButton*)GetDlgItem(IDC_LYRIC_AUTO_DOWNLOAD_CHECK))->SetCheck(m_data.auto_download_lyric);
186 ((CButton*)GetDlgItem(IDC_DOWNLOAD_WHEN_TAG_FULL_CHECK))->SetCheck(m_data.auto_download_only_tag_full);
187 ((CButton*)GetDlgItem(IDC_CHECK_UPDATE_CHECK))->SetCheck(m_data.check_update_when_start);
188
189 CheckDlgButton(IDC_LYRIC_AND_TRANSLATION_IN_SAME_LINE_RADIO, m_data.download_lyric_text_and_translation_in_same_line);
190 CheckDlgButton(IDC_LYRIC_AND_TRANSLATION_IN_DIFFERENT_LINE_RADIO, !m_data.download_lyric_text_and_translation_in_same_line);
191
192 if (m_data.minimize_to_notify_icon)
193 ((CButton*)GetDlgItem(IDC_MINIMIZE_TO_NOTIFY_RADIO))->SetCheck(TRUE);
194 else
195 ((CButton*)GetDlgItem(IDC_EXIT_PROGRAM_RADIO))->SetCheck(TRUE);
196
197 if (m_data.save_lyric_to_song_folder)
198 ((CButton*)GetDlgItem(IDC_SAVE_TO_SONG_FOLDER))->SetCheck(TRUE);
199 else
200 ((CButton*)GetDlgItem(IDC_SAVE_TO_LYRIC_FOLDER))->SetCheck(TRUE);
201
202 //判断歌词文件夹是否存在
203 bool lyric_path_exist = CCommon::FolderExist(theApp.m_lyric_setting_data.lyric_path);
204 if (!lyric_path_exist) //如果歌词文件不存在,则禁用“保存到歌词文件夹”单选按钮,并强制选中“保存到歌曲所在目录”
205 {
206 ((CButton*)GetDlgItem(IDC_SAVE_TO_LYRIC_FOLDER))->EnableWindow(FALSE);
207 ((CButton*)GetDlgItem(IDC_SAVE_TO_LYRIC_FOLDER))->SetCheck(FALSE);
208 ((CButton*)GetDlgItem(IDC_SAVE_TO_SONG_FOLDER))->SetCheck(TRUE);
209 m_data.save_lyric_to_song_folder = true;
210 }
211
212 // 设置封面存储位置选项
213 if (m_data.save_lyric_to_song_folder)
214 ((CButton*)GetDlgItem(IDC_SAVE_TO_SONG_FOLDER3))->SetCheck(TRUE);
215 else
216 ((CButton*)GetDlgItem(IDC_SAVE_TO_ALBUM_FOLDER3))->SetCheck(TRUE);
217
218 // 判断封面文件夹是否存在
219 bool album_path_exist = CCommon::FolderExist(theApp.m_app_setting_data.album_cover_path);
220 if (!album_path_exist) // 如果封面文件夹不存在,则禁用“保存到歌词文件夹”单选按钮,并强制选中“保存到歌曲所在目录”
221 {
222 ((CButton*)GetDlgItem(IDC_SAVE_TO_ALBUM_FOLDER3))->EnableWindow(FALSE);
223 ((CButton*)GetDlgItem(IDC_SAVE_TO_ALBUM_FOLDER3))->SetCheck(FALSE);
224 ((CButton*)GetDlgItem(IDC_SAVE_TO_SONG_FOLDER3))->SetCheck(TRUE);
225 m_data.save_album_to_song_folder = true;
226 }
227
228 CheckDlgButton(IDC_GLOBAL_MOUSE_WHEEL_VOLUME_ADJUSTMENT_CHECK, m_data.global_mouse_wheel_volume_adjustment);
229
230 m_toolTip.Create(this);
231 m_toolTip.SetMaxTipWidth(theApp.DPI(300));
232 m_toolTip.AddTool(GetDlgItem(IDC_DOWNLOAD_WHEN_TAG_FULL_CHECK), theApp.m_str_table.LoadText(L"TIP_OPT_DATA_AUTO_DL_ONLY_WHEN_TAG_FULL").c_str());
233 m_toolTip.AddTool(GetDlgItem(IDC_SAVE_TO_APPDATA_RADIO), theApp.m_appdata_dir.c_str());
234 m_toolTip.AddTool(GetDlgItem(IDC_SAVE_TO_PROGRAM_DIR_RADIO), theApp.m_module_dir.c_str());
235 m_toolTip.AddTool(GetDlgItem(IDC_GLOBAL_MOUSE_WHEEL_VOLUME_ADJUSTMENT_CHECK), theApp.m_str_table.LoadText(L"TXT_OPT_DATA_GLOBAL_MOUSE_WHEEL_VOLUME_ADJUSTMENT_TIP").c_str());
236
237 m_toolTip.SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
238
239 EnableControl();
240
241 //设置控件不响应鼠标滚轮消息
242 m_language_combo.SetMouseWheelEnable(false);
243
244 return TRUE; // return TRUE unless you set the focus to a control
245 // 异常: OCX 属性页应返回 FALSE
246 }
247
248
EnableControl()249 void CDataSettingsDlg::EnableControl()
250 {
251 // bool enable = CPlayer::GetInstance().IsBassCore();
252 bool enable = !theApp.m_play_setting_data.use_ffmpeg && !theApp.m_play_setting_data.use_mci;
253 CWnd* pWnd = GetDlgItem(IDC_BROWSE_BUTTON);
254 if (pWnd != nullptr)
255 pWnd->EnableWindow(enable && theApp.m_format_convert_dialog_exit);
256
257 ((CButton*)GetDlgItem(IDC_SAVE_TO_SONG_FOLDER))->EnableWindow(m_data.auto_download_lyric);
258 ((CButton*)GetDlgItem(IDC_SAVE_TO_LYRIC_FOLDER))->EnableWindow(m_data.auto_download_lyric && CCommon::FolderExist(theApp.m_lyric_setting_data.lyric_path));
259
260 ((CButton*)GetDlgItem(IDC_SAVE_TO_SONG_FOLDER3))->EnableWindow(m_data.auto_download_album_cover);
261 ((CButton*)GetDlgItem(IDC_SAVE_TO_ALBUM_FOLDER3))->EnableWindow(m_data.auto_download_album_cover && CCommon::FolderExist(theApp.m_app_setting_data.album_cover_path));
262 }
263
264
OnBnClickedCoverAutoDownloadCheck()265 void CDataSettingsDlg::OnBnClickedCoverAutoDownloadCheck()
266 {
267 // TODO: 在此添加控件通知处理程序代码
268 m_data.auto_download_album_cover = (((CButton*)GetDlgItem(IDC_COVER_AUTO_DOWNLOAD_CHECK))->GetCheck() != 0);
269 EnableControl();
270 }
271
272
OnBnClickedLyricAutoDownloadCheck()273 void CDataSettingsDlg::OnBnClickedLyricAutoDownloadCheck()
274 {
275 // TODO: 在此添加控件通知处理程序代码
276 m_data.auto_download_lyric = (((CButton*)GetDlgItem(IDC_LYRIC_AUTO_DOWNLOAD_CHECK))->GetCheck() != 0);
277 EnableControl();
278 }
279
280
OnBnClickedCheckUpdateCheck()281 void CDataSettingsDlg::OnBnClickedCheckUpdateCheck()
282 {
283 // TODO: 在此添加控件通知处理程序代码
284 m_data.check_update_when_start = (((CButton*)GetDlgItem(IDC_CHECK_UPDATE_CHECK))->GetCheck() != 0);
285 }
286
287
PreTranslateMessage(MSG * pMsg)288 BOOL CDataSettingsDlg::PreTranslateMessage(MSG* pMsg)
289 {
290 // TODO: 在此添加专用代码和/或调用基类
291 if (pMsg->message == WM_MOUSEMOVE)
292 m_toolTip.RelayEvent(pMsg);
293
294 return CTabDlg::PreTranslateMessage(pMsg);
295 }
296
297
OnBnClickedDownloadWhenTagFullCheck()298 void CDataSettingsDlg::OnBnClickedDownloadWhenTagFullCheck()
299 {
300 // TODO: 在此添加控件通知处理程序代码
301 m_data.auto_download_only_tag_full = (((CButton*)GetDlgItem(IDC_DOWNLOAD_WHEN_TAG_FULL_CHECK))->GetCheck() != 0);
302 }
303
304
OnOK()305 void CDataSettingsDlg::OnOK()
306 {
307 // TODO: 在此添加专用代码和/或调用基类
308
309
310 CTabDlg::OnOK();
311 }
312
313
OnBnClickedAutoRunCheck()314 void CDataSettingsDlg::OnBnClickedAutoRunCheck()
315 {
316 // TODO: 在此添加控件通知处理程序代码
317 m_auto_run = (IsDlgButtonChecked(IDC_AUTO_RUN_CHECK) != 0);
318 m_auto_run_modified = true;
319 }
320
321
OnBnClickedGithubRadio()322 void CDataSettingsDlg::OnBnClickedGithubRadio()
323 {
324 // TODO: 在此添加控件通知处理程序代码
325 m_data.update_source = static_cast<int>(CUpdateHelper::UpdateSource::GitHubSource);
326 }
327
328
OnBnClickedGiteeRadio()329 void CDataSettingsDlg::OnBnClickedGiteeRadio()
330 {
331 // TODO: 在此添加控件通知处理程序代码
332 m_data.update_source = static_cast<int>(CUpdateHelper::UpdateSource::GiteeSource);
333 }
334
335
OnBnClickedOpenConfigPathButton()336 void CDataSettingsDlg::OnBnClickedOpenConfigPathButton()
337 {
338 // TODO: 在此添加控件通知处理程序代码
339 ShellExecute(NULL, _T("explore"), theApp.m_config_dir.c_str(), NULL, NULL, SW_SHOWNORMAL);
340 }
341