1 // FileRelateDlg.cpp: 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "MusicPlayer2.h"
6 #include "FileRelateDlg.h"
7 #include "AudioCommon.h"
8 #include "RegFileRelate.h"
9 #include "Playlist.h"
10
11
12 // CFileRelateDlg 对话框
13
IMPLEMENT_DYNAMIC(CFileRelateDlg,CBaseDialog)14 IMPLEMENT_DYNAMIC(CFileRelateDlg, CBaseDialog)
15
16 CFileRelateDlg::CFileRelateDlg(CWnd* pParent /*=nullptr*/)
17 : CBaseDialog(IDD_FILE_RELATE_DIALOG, pParent)
18 {
19
20 }
21
~CFileRelateDlg()22 CFileRelateDlg::~CFileRelateDlg()
23 {
24 }
25
GetDialogName() const26 CString CFileRelateDlg::GetDialogName() const
27 {
28 return _T("FileRelateDlg");
29 }
30
InitializeControls()31 bool CFileRelateDlg::InitializeControls()
32 {
33 wstring temp;
34 temp = theApp.m_str_table.LoadText(L"TITLE_FILE_RELATE");
35 SetWindowTextW(temp.c_str());
36 temp = theApp.m_str_table.LoadText(L"TXT_FILE_RELATE_SEL_DEFAULT");
37 SetDlgItemTextW(IDC_DEFAULT_BUTTON, temp.c_str());
38 temp = theApp.m_str_table.LoadText(L"TXT_FILE_RELATE_SEL_ALL");
39 SetDlgItemTextW(IDC_SELECT_ALL_CHECK, temp.c_str());
40
41 RepositionTextBasedControls({
42 { CtrlTextInfo::L2, IDC_DEFAULT_BUTTON, CtrlTextInfo::W32 },
43 { CtrlTextInfo::L1, IDC_SELECT_ALL_CHECK, CtrlTextInfo::W16 },
44 { CtrlTextInfo::R1, IDOK, CtrlTextInfo::W32 },
45 { CtrlTextInfo::R2, IDCANCEL, CtrlTextInfo::W32 }
46 });
47 return true;
48 }
49
DoDataExchange(CDataExchange * pDX)50 void CFileRelateDlg::DoDataExchange(CDataExchange* pDX)
51 {
52 CBaseDialog::DoDataExchange(pDX);
53 DDX_Control(pDX, IDC_LIST1, m_list_ctrl);
54 }
55
56
RefreshList()57 void CFileRelateDlg::RefreshList()
58 {
59 m_list_ctrl.DeleteAllItems();
60 int index = 0;
61 bool checked{ false }, unchecked{ false };
62 CRegFileRelate reg_file;
63 std::set<wstring> extensions;
64 for (const auto& item : CAudioCommon::m_all_surpported_extensions)
65 extensions.insert(item);
66 std::vector<wstring> related_extensions;
67 reg_file.GetAllRelatedExtensions(related_extensions);
68 for (auto item : related_extensions)
69 {
70 if (!item.empty() && item[0] == L'.')
71 item = item.substr(1);
72 extensions.insert(item);
73 }
74 for (auto item : CPlaylistFile::m_surpported_playlist)
75 {
76 if (!item.empty() && item[0] == L'.')
77 item = item.substr(1);
78 extensions.insert(item);
79 }
80
81 for (const auto& item : extensions)
82 {
83 //if(item == L"cue")
84 // continue;
85 m_list_ctrl.InsertItem(index, item.c_str());
86 wstring description = CAudioCommon::GetAudioDescriptionByExtension(item);
87 m_list_ctrl.SetItemText(index, 1, description.c_str());
88 bool related = reg_file.IsFileTypeRelated(item.c_str());
89 m_list_ctrl.SetCheck(index, related);
90 if (related)
91 checked = true;
92 else
93 unchecked = true;
94
95 index++;
96 }
97
98 CButton* pBtn = (CButton*)GetDlgItem(IDC_SELECT_ALL_CHECK);
99 if (pBtn != nullptr)
100 {
101 if (checked && !unchecked)
102 pBtn->SetCheck(BST_CHECKED);
103 else if (checked && unchecked)
104 pBtn->SetCheck(BST_INDETERMINATE);
105 else
106 pBtn->SetCheck(BST_UNCHECKED);
107 }
108 }
109
BEGIN_MESSAGE_MAP(CFileRelateDlg,CBaseDialog)110 BEGIN_MESSAGE_MAP(CFileRelateDlg, CBaseDialog)
111 ON_BN_CLICKED(IDC_SELECT_ALL_CHECK, &CFileRelateDlg::OnBnClickedSelectAllCheck)
112 ON_BN_CLICKED(IDC_DEFAULT_BUTTON, &CFileRelateDlg::OnBnClickedDefaultButton)
113 END_MESSAGE_MAP()
114
115
116 // CFileRelateDlg 消息处理程序
117
118
119 BOOL CFileRelateDlg::OnInitDialog()
120 {
121 CBaseDialog::OnInitDialog();
122
123 // TODO: 在此添加额外的初始化
124 SetIcon(IconMgr::IconType::IT_File_Relate, FALSE);
125
126 CRect rect;
127 m_list_ctrl.GetWindowRect(rect);
128
129 m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
130 int width0 = theApp.DPI(120);
131 int width1 = rect.Width() - width0 - theApp.DPI(20) - 1;
132 m_list_ctrl.InsertColumn(0, theApp.m_str_table.LoadText(L"TXT_FILE_RELATE_FORMAT").c_str(), LVCFMT_LEFT, width0);
133 m_list_ctrl.InsertColumn(1, theApp.m_str_table.LoadText(L"TXT_FILE_RELATE_DESCRIPTION").c_str(), LVCFMT_LEFT, width1);
134
135 RefreshList();
136
137 m_list_ctrl.SetRowHeight(theApp.DPI(22));
138 m_list_ctrl.FillLeftSpaceAfterPaint(false);
139
140 return TRUE; // return TRUE unless you set the focus to a control
141 // 异常: OCX 属性页应返回 FALSE
142 }
143
144
OnOK()145 void CFileRelateDlg::OnOK()
146 {
147 // TODO: 在此添加专用代码和/或调用基类
148 int list_count = m_list_ctrl.GetItemCount();
149 for (int i = 0; i < list_count; i++)
150 {
151 bool checked = m_list_ctrl.GetCheck(i) != FALSE;
152 CRegFileRelate reg_file;
153 if (checked)
154 {
155 CString file_ext = m_list_ctrl.GetItemText(i, 0);
156 wstring description = CAudioCommon::GetAudioDescriptionByExtension(wstring(file_ext));
157
158 if (CPlaylistFile::IsPlaylistExt(wstring(file_ext)) || CAudioCommon::GetAudioTypeByFileExtension(wstring(file_ext)) == AU_CUE)
159 reg_file.AddFileTypeRelate(file_ext, 66, false, description.c_str());
160 else
161 reg_file.AddFileTypeRelate(file_ext, 46, false, description.c_str());
162 }
163 else
164 {
165 reg_file.DeleteFileTypeRelate(m_list_ctrl.GetItemText(i, 0));
166 }
167 }
168
169 CBaseDialog::OnOK();
170 }
171
172
OnBnClickedSelectAllCheck()173 void CFileRelateDlg::OnBnClickedSelectAllCheck()
174 {
175 // TODO: 在此添加控件通知处理程序代码
176 CButton* pBtn = (CButton*)GetDlgItem(IDC_SELECT_ALL_CHECK);
177 if (pBtn == nullptr)
178 return;
179 BOOL checked{ pBtn->GetCheck() };
180 int list_count{ m_list_ctrl.GetItemCount() };
181 for (int i = 0; i < list_count; i++)
182 m_list_ctrl.SetCheck(i, checked);
183 }
184
185
OnBnClickedDefaultButton()186 void CFileRelateDlg::OnBnClickedDefaultButton()
187 {
188 //默认选中常见音频格式
189 std::set<wstring> default_selected{ L"aac", L"ac3", L"aif", L"aiff", L"amr", L"ape", L"asf", L"cda", L"cue", L"fla", L"flac", L"m4a", L"mac", L"mp+", L"mp3", L"mpc", L"mpp", L"oga", L"ogg", L"opus", L"spx", L"tta", L"wav", L"wma", L"wv"};
190 int list_count{ m_list_ctrl.GetItemCount() };
191 for (int i = 0; i < list_count; i++)
192 {
193 wstring item_str = m_list_ctrl.GetItemText(i, 0).GetString();
194 auto iter = default_selected.find(item_str);
195 if (iter != default_selected.end())
196 m_list_ctrl.SetCheck(i, TRUE);
197 else
198 m_list_ctrl.SetCheck(i, FALSE);
199 }
200 }
201