xref: /MusicPlayer2/MusicPlayer2/DataSettingsDlg.cpp (revision 47cdddcc076af4869ff0138140f620e73e47e8f1)
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