1 // TagEditDlg.cpp: 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "MusicPlayer2.h"
6 #include "TagEditDlg.h"
7 #include "AudioCommon.h"
8
9
10 // CTagEditDlg 对话框
11
IMPLEMENT_DYNAMIC(CTagEditDlg,CBaseDialog)12 IMPLEMENT_DYNAMIC(CTagEditDlg, CBaseDialog)
13
14 CTagEditDlg::CTagEditDlg(vector<SongInfo>& file_list, int index, CWnd* pParent /*=nullptr*/)
15 : CBaseDialog(IDD_TAG_EDIT_DIALOG, pParent), m_file_list{ file_list }, m_index{ index }
16 {
17
18 }
19
~CTagEditDlg()20 CTagEditDlg::~CTagEditDlg()
21 {
22 }
23
DoDataExchange(CDataExchange * pDX)24 void CTagEditDlg::DoDataExchange(CDataExchange* pDX)
25 {
26 CBaseDialog::DoDataExchange(pDX);
27 DDX_Control(pDX, IDC_GENRE_COMBO, m_genre_combo);
28 }
29
ShowInfo()30 void CTagEditDlg::ShowInfo()
31 {
32 if (m_index < 0 || m_index >= static_cast<int>(m_file_list.size()))
33 return;
34 const SongInfo& item{ m_file_list[m_index] };
35 SetDlgItemTextW(IDC_PATH_EDIT, item.file_path.c_str());
36 SetDlgItemTextW(IDC_TITEL_EDIT, item.title.c_str());
37 SetDlgItemTextW(IDC_ARTIST_EDIT, item.artist.c_str());
38 SetDlgItemTextW(IDC_ALBUM_EDIT, item.album.c_str());
39 SetDlgItemTextW(IDC_TRACK_EDIT, CAudioCommon::TrackToString(item.track));
40 SetDlgItemTextW(IDC_YEAR_EDIT, item.get_year().c_str());
41 SetDlgItemTextW(IDC_GENRE_COMBO, item.genre.c_str());
42 SetDlgItemTextW(IDC_COMMENT_EDIT, item.comment.c_str());
43 CString info_str;
44 info_str.Format(_T("%d/%d"), m_index + 1, m_file_list.size());
45 SetDlgItemTextW(IDC_ITEM_STATIC, info_str);
46 }
47
GetDialogName() const48 CString CTagEditDlg::GetDialogName() const
49 {
50 return L"EditAudioTagDlg";
51 }
52
InitializeControls()53 bool CTagEditDlg::InitializeControls()
54 {
55 // 这里部分使用 IDD_PROPERTY_DIALOG / IDD_PROPERTY_PARENT_DIALOG 的字符串
56 wstring temp;
57 temp = theApp.m_str_table.LoadText(L"TITLE_TAG_EDIT");
58 SetWindowTextW(temp.c_str());
59 temp = theApp.m_str_table.LoadText(L"TXT_TAG_EDIT_PATH");
60 SetDlgItemTextW(IDC_TXT_TAG_EDIT_PATH_STATIC, temp.c_str());
61 // IDC_PATH_EDIT
62 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_DLG_TAG_TITLE");
63 SetDlgItemTextW(IDC_TXT_PROPERTY_DLG_TAG_TITLE_STATIC, temp.c_str());
64 // IDC_TITEL_EDIT
65 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_DLG_TAG_ARTIST");
66 SetDlgItemTextW(IDC_TXT_PROPERTY_DLG_TAG_ARTIST_STATIC, temp.c_str());
67 // IDC_ARTIST_EDIT
68 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_DLG_TAG_ALBUM");
69 SetDlgItemTextW(IDC_TXT_PROPERTY_DLG_TAG_ALBUM_STATIC, temp.c_str());
70 // IDC_ALBUM_EDIT
71 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_DLG_TAG_TRACK");
72 SetDlgItemTextW(IDC_TXT_PROPERTY_DLG_TAG_TRACK_STATIC, temp.c_str());
73 // IDC_TRACK_EDIT
74 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_DLG_TAG_YEAR");
75 SetDlgItemTextW(IDC_TXT_PROPERTY_DLG_TAG_YEAR_STATIC, temp.c_str());
76 // IDC_YEAR_EDIT
77 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_DLG_TAG_GENRE");
78 SetDlgItemTextW(IDC_TXT_PROPERTY_DLG_TAG_GENRE_STATIC, temp.c_str());
79 // IDC_GENRE_COMBO
80 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_DLG_TAG_COMMENT");
81 SetDlgItemTextW(IDC_TXT_PROPERTY_DLG_TAG_COMMENT_STATIC, temp.c_str());
82 // IDC_COMMENT_EDIT
83 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_PARENT_PREVIOUS");
84 SetDlgItemTextW(IDC_PREVIOUS_BUTTON, temp.c_str());
85 temp = theApp.m_str_table.LoadText(L"TXT_PROPERTY_PARENT_NEXT");
86 SetDlgItemTextW(IDC_NEXT_BUTTON, temp.c_str());
87 temp = L"0/0";
88 SetDlgItemTextW(IDC_ITEM_STATIC, temp.c_str());
89 temp = theApp.m_str_table.LoadText(L"TXT_TAG_EDIT_SAVE");
90 SetDlgItemTextW(IDC_SAVE_BUTTON, temp.c_str());
91 temp = theApp.m_str_table.LoadText(L"TXT_CLOSE");
92 SetDlgItemTextW(IDCANCEL, temp.c_str());
93
94 RepositionTextBasedControls({
95 { CtrlTextInfo::L1, IDC_TXT_TAG_EDIT_PATH_STATIC },
96 { CtrlTextInfo::C0, IDC_PATH_EDIT },
97 { CtrlTextInfo::L1, IDC_TXT_PROPERTY_DLG_TAG_TITLE_STATIC },
98 { CtrlTextInfo::C0, IDC_TITEL_EDIT },
99 { CtrlTextInfo::L1, IDC_TXT_PROPERTY_DLG_TAG_ARTIST_STATIC },
100 { CtrlTextInfo::C0, IDC_ARTIST_EDIT },
101 { CtrlTextInfo::L1, IDC_TXT_PROPERTY_DLG_TAG_ALBUM_STATIC },
102 { CtrlTextInfo::C0, IDC_ALBUM_EDIT },
103 { CtrlTextInfo::L1, IDC_TXT_PROPERTY_DLG_TAG_TRACK_STATIC },
104 { CtrlTextInfo::C0, IDC_TRACK_EDIT },
105 { CtrlTextInfo::L1, IDC_TXT_PROPERTY_DLG_TAG_GENRE_STATIC },
106 { CtrlTextInfo::C0, IDC_GENRE_COMBO },
107 { CtrlTextInfo::L1, IDC_TXT_PROPERTY_DLG_TAG_COMMENT_STATIC },
108 { CtrlTextInfo::C0, IDC_COMMENT_EDIT }
109 }, CtrlTextInfo::W32);
110 RepositionTextBasedControls({
111 { CtrlTextInfo::L1, IDC_TXT_PROPERTY_DLG_TAG_YEAR_STATIC },
112 { CtrlTextInfo::C0, IDC_YEAR_EDIT }
113 }, CtrlTextInfo::W40);
114 RepositionTextBasedControls({
115 { CtrlTextInfo::L2, IDC_PREVIOUS_BUTTON, CtrlTextInfo::W32 },
116 { CtrlTextInfo::L1, IDC_NEXT_BUTTON, CtrlTextInfo::W32 },
117 { CtrlTextInfo::C0, IDC_ITEM_STATIC },
118 { CtrlTextInfo::R1, IDC_SAVE_BUTTON, CtrlTextInfo::W32 },
119 { CtrlTextInfo::R2, IDCANCEL, CtrlTextInfo::W32 }
120 });
121 return true;
122 }
123
124
BEGIN_MESSAGE_MAP(CTagEditDlg,CBaseDialog)125 BEGIN_MESSAGE_MAP(CTagEditDlg, CBaseDialog)
126 ON_BN_CLICKED(IDC_PREVIOUS_BUTTON, &CTagEditDlg::OnBnClickedPreviousButton)
127 ON_BN_CLICKED(IDC_NEXT_BUTTON, &CTagEditDlg::OnBnClickedNextButton)
128 ON_BN_CLICKED(IDC_SAVE_BUTTON, &CTagEditDlg::OnBnClickedSaveButton)
129 END_MESSAGE_MAP()
130
131
132 // CTagEditDlg 消息处理程序
133
134
135 BOOL CTagEditDlg::OnInitDialog()
136 {
137 CBaseDialog::OnInitDialog();
138
139 // TODO: 在此添加额外的初始化
140 SetIcon(IconMgr::IconType::IT_Edit, FALSE);
141 SetButtonIcon(IDC_PREVIOUS_BUTTON, IconMgr::IconType::IT_Triangle_Left);
142 SetButtonIcon(IDC_NEXT_BUTTON, IconMgr::IconType::IT_Triangle_Right);
143 SetButtonIcon(IDC_SAVE_BUTTON, IconMgr::IconType::IT_Save);
144
145 //初始化流派列表
146 CAudioCommon::EmulateGenre([&](const wstring& genre_str)
147 {
148 m_genre_combo.AddString(genre_str.c_str());
149 }, true);
150 CRect rect;
151 m_genre_combo.SetMinVisibleItems(15); //设置下拉列表的高度
152
153 ShowInfo();
154
155 return TRUE; // return TRUE unless you set the focus to a control
156 // 异常: OCX 属性页应返回 FALSE
157 }
158
159
OnBnClickedPreviousButton()160 void CTagEditDlg::OnBnClickedPreviousButton()
161 {
162 // TODO: 在此添加控件通知处理程序代码
163 if (m_file_list.size() <= 1)
164 return;
165 m_index--;
166 if (m_index < 0) m_index = m_file_list.size() - 1;
167 if (m_index < 0) m_index = 0;
168 ShowInfo();
169 }
170
171
OnBnClickedNextButton()172 void CTagEditDlg::OnBnClickedNextButton()
173 {
174 // TODO: 在此添加控件通知处理程序代码
175 if (m_file_list.size() <= 1)
176 return;
177 m_index++;
178 if (m_index >= static_cast<int>(m_file_list.size())) m_index = 0;
179 ShowInfo();
180 }
181
182
OnBnClickedSaveButton()183 void CTagEditDlg::OnBnClickedSaveButton()
184 {
185 // TODO: 在此添加控件通知处理程序代码
186 if (m_index < 0 || m_index >= static_cast<int>(m_file_list.size()))
187 return;
188 SongInfo& item{ m_file_list[m_index] };
189 CString temp;
190 GetDlgItemTextW(IDC_TITEL_EDIT, temp);
191 item.title = temp;
192 GetDlgItemTextW(IDC_ARTIST_EDIT, temp);
193 item.artist = temp;
194 GetDlgItemTextW(IDC_ALBUM_EDIT, temp);
195 item.album = temp;
196 GetDlgItemTextW(IDC_TRACK_EDIT, temp);
197 item.track = _ttoi(temp);
198 GetDlgItemTextW(IDC_YEAR_EDIT, temp);
199 item.SetYear(temp);
200 GetDlgItemTextW(IDC_GENRE_COMBO, temp);
201 item.genre = temp;
202 GetDlgItemTextW(IDC_COMMENT_EDIT, temp);
203 item.comment = temp;
204 }
205