xref: /MusicPlayer2/MusicPlayer2/TagEditDlg.cpp (revision 8d8c86c149103c958310b7ca9338953412bf24ef)
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