新增跳转到媒体库中当前歌曲艺术家和唱片集的功能

This commit is contained in:
Zhong Yang
2020-12-29 20:11:51 +08:00
parent 9988b0977b
commit 8703cccd9b
12 changed files with 121 additions and 19 deletions
+15
View File
@@ -21,6 +21,21 @@ CMediaLibDlg::~CMediaLibDlg()
SaveConfig();
}
void CMediaLibDlg::SetCurTab(int tab)
{
m_tab_ctrl.SetCurTab(tab);
}
bool CMediaLibDlg::NavigateToItem(const wstring& item)
{
CMediaClassifyDlg* pCurTab = dynamic_cast<CMediaClassifyDlg*>(m_tab_ctrl.GetCurrentTab());
if (pCurTab != nullptr)
{
return pCurTab->SetLeftListSel(item);
}
return false;
}
void CMediaLibDlg::SaveConfig() const
{
CIniHelper ini{ theApp.m_config_path };
+3
View File
@@ -33,6 +33,9 @@ public:
CAllMediaDlg m_recent_media_dlg{ CAllMediaDlg::DT_RECENT_MEDIA };
CFolderExploreDlg m_folder_explore_dlg;
void SetCurTab(int tab);
bool NavigateToItem(const wstring& item); //跳转到对应项目,例如当前显示的是艺术家标签,则跳转到对应艺术家
protected:
void SaveConfig() const;
void LoadConfig();
+17
View File
@@ -96,6 +96,23 @@ void CMediaClassifyDlg::RefreshData()
}
}
bool CMediaClassifyDlg::SetLeftListSel(const wstring & item)
{
int list_size = static_cast<int>(m_list_data_left.size());
for (int i = 0; i < list_size; i++)
{
wstring name = m_list_data_left[i][0];
if (CCommon::StringCompareNoCase(name, item))
{
m_classify_list_ctrl.SetCurSel(i);
ClassifyListClicked(i);
return true;
}
}
return false;
}
void CMediaClassifyDlg::RefreshSongList()
{
ShowSongList();
+1
View File
@@ -23,6 +23,7 @@ public:
public:
virtual void GetSongsSelected(std::vector<wstring>& song_list) const override;
void RefreshData();
bool SetLeftListSel(const wstring& item);
protected:
enum SongColumeIndex
+2
View File
@@ -631,6 +631,8 @@ void CMusicPlayerApp::InitMenuResourse()
CMenuIcon::AddIconToMenuItem(m_menu_set.m_main_popup_menu.GetSubMenu(0)->GetSafeHmenu(), 2, TRUE, m_icon_set.add.GetIcon(true));
CMenuIcon::AddIconToMenuItem(m_menu_set.m_main_popup_menu.GetSafeHmenu(), ID_ADD_TO_NEW_PLAYLIST, FALSE, m_icon_set.add.GetIcon(true));
CMenuIcon::AddIconToMenuItem(m_menu_set.m_main_popup_menu.GetSafeHmenu(), ID_ADD_TO_MY_FAVOURITE, FALSE, m_icon_set.favourite.GetIcon(true));
CMenuIcon::AddIconToMenuItem(m_menu_set.m_main_popup_menu.GetSafeHmenu(), ID_VIEW_ARTIST, FALSE, m_icon_set.artist.GetIcon(true));
CMenuIcon::AddIconToMenuItem(m_menu_set.m_main_popup_menu.GetSafeHmenu(), ID_VIEW_ALBUM, FALSE, m_icon_set.album.GetIcon(true));
CMenuIcon::AddIconToMenuItem(m_menu_set.m_main_popup_menu.GetSafeHmenu(), ID_SET_PATH, FALSE, m_icon_set.media_lib.GetIcon(true));
CMenuIcon::AddIconToMenuItem(m_menu_set.m_main_popup_menu.GetSafeHmenu(), ID_FIND, FALSE, m_icon_set.find_songs.GetIcon(true));
CMenuIcon::AddIconToMenuItem(m_menu_set.m_main_popup_menu.GetSafeHmenu(), ID_EXPLORE_PATH, FALSE, m_icon_set.folder_explore.GetIcon(true));
Binary file not shown.
+25
View File
@@ -535,6 +535,31 @@ bool CMusicPlayerCmdHelper::Rename(SongInfo & song, const wstring & new_name)
return true;
}
void CMusicPlayerCmdHelper::ShowMediaLib(int cur_tab /*= -1*/)
{
CMusicPlayerDlg* pPlayerDlg = dynamic_cast<CMusicPlayerDlg*>(theApp.m_pMainWnd);
if (pPlayerDlg == nullptr)
return;
if (pPlayerDlg->m_pMediaLibDlg != nullptr && IsWindow(pPlayerDlg->m_pMediaLibDlg->m_hWnd)) //如果媒体库对话框已经存在,则将其激活
{
pPlayerDlg->m_pMediaLibDlg->ShowWindow(SW_SHOWNORMAL);
pPlayerDlg->m_pMediaLibDlg->SetForegroundWindow();
if (cur_tab >= 0)
pPlayerDlg->m_pMediaLibDlg->SetCurTab(cur_tab);
}
else
{
CCommon::DeleteModelessDialog(pPlayerDlg->m_pMediaLibDlg);
int tab_index = cur_tab;
if (tab_index < 0)
tab_index = CPlayer::GetInstance().IsPlaylistMode() ? 1 : 0;
pPlayerDlg->m_pMediaLibDlg = new CMediaLibDlg(tab_index);
pPlayerDlg->m_pMediaLibDlg->Create(IDD_MEDIA_LIB_DIALOG/*, GetDesktopWindow()*/);
pPlayerDlg->m_pMediaLibDlg->ShowWindow(SW_SHOW);
}
}
bool CMusicPlayerCmdHelper::AddToPlaylist(const std::vector<SongInfo>& songs, const std::wstring& playlist_path)
{
if (CPlayer::GetInstance().IsPlaylistMode() && playlist_path == CPlayer::GetInstance().GetPlaylistPath())
+12
View File
@@ -38,6 +38,18 @@ public:
static bool Rename(SongInfo& song, const wstring& new_name);
enum eMediaLibTab
{
ML_FOLDER = 0,
ML_PLAYLIST = 1,
ML_ARTIST = 2,
ML_ALBUM = 3
};
//显示媒体库对话框
//cur_tab:打开对话框后要切换的标签
void ShowMediaLib(int cur_tab = -1);
protected:
bool AddToPlaylist(const std::vector<SongInfo>& songs, const std::wstring& playlist_path);
+30 -14
View File
@@ -272,6 +272,8 @@ BEGIN_MESSAGE_MAP(CMusicPlayerDlg, CMainDialogBase)
ON_COMMAND(ID_SWITCH_UI_2, &CMusicPlayerDlg::OnSwitchUi2)
ON_COMMAND(ID_SWITCH_UI_LYRICS_FULL_SCREEN, &CMusicPlayerDlg::OnSwitchUiLyricsFullScreen)
ON_COMMAND(ID_SHOW_LYRIC_TRANSLATE, &CMusicPlayerDlg::OnShowLyricTranslate)
ON_COMMAND(ID_VIEW_ARTIST, &CMusicPlayerDlg::OnViewArtist)
ON_COMMAND(ID_VIEW_ALBUM, &CMusicPlayerDlg::OnViewAlbum)
END_MESSAGE_MAP()
@@ -2215,20 +2217,8 @@ void CMusicPlayerDlg::OnSetPath()
// //IniPlaylistPopupMenu();
//}
if (m_pMediaLibDlg != nullptr && IsWindow(m_pMediaLibDlg->m_hWnd)) //如果媒体库对话框已经存在,则将其激活
{
m_pMediaLibDlg->ShowWindow(SW_SHOWNORMAL);
m_pMediaLibDlg->SetForegroundWindow();
}
else
{
CCommon::DeleteModelessDialog(m_pMediaLibDlg);
int cur_tab{ CPlayer::GetInstance().IsPlaylistMode() ? 1 : 0 };
m_pMediaLibDlg = new CMediaLibDlg(cur_tab);
m_pMediaLibDlg->Create(IDD_MEDIA_LIB_DIALOG/*, GetDesktopWindow()*/);
m_pMediaLibDlg->ShowWindow(SW_SHOW);
}
CMusicPlayerCmdHelper helper;
helper.ShowMediaLib();
}
@@ -5383,3 +5373,29 @@ void CMusicPlayerDlg::OnShowLyricTranslate()
// TODO: 在此添加命令处理程序代码
theApp.m_ui_data.show_translate = !theApp.m_ui_data.show_translate;
}
void CMusicPlayerDlg::OnViewArtist()
{
// TODO: 在此添加命令处理程序代码
CMusicPlayerCmdHelper helper;
wstring artist = CPlayer::GetInstance().GetCurrentSongInfo().GetArtist();
helper.ShowMediaLib(CMusicPlayerCmdHelper::ML_ARTIST);
if (!m_pMediaLibDlg->NavigateToItem(artist))
{
MessageBox(CCommon::LoadTextFormat(IDS_CONNOT_FIND_ARTIST_WARNING, { artist }), NULL, MB_OK | MB_ICONWARNING);
}
}
void CMusicPlayerDlg::OnViewAlbum()
{
// TODO: 在此添加命令处理程序代码
CMusicPlayerCmdHelper helper;
wstring album = CPlayer::GetInstance().GetCurrentSongInfo().GetAlbum();
helper.ShowMediaLib(CMusicPlayerCmdHelper::ML_ALBUM);
if (!m_pMediaLibDlg->NavigateToItem(album))
{
MessageBox(CCommon::LoadTextFormat(IDS_CONNOT_FIND_ALBUM_WARNING, { album }), NULL, MB_OK | MB_ICONWARNING);
}
}
+2
View File
@@ -463,4 +463,6 @@ public:
afx_msg void OnSwitchUi2();
afx_msg void OnSwitchUiLyricsFullScreen();
afx_msg void OnShowLyricTranslate();
afx_msg void OnViewArtist();
afx_msg void OnViewAlbum();
};
+8 -4
View File
@@ -95,19 +95,22 @@ BOOL CPropertyDlg::OnInitDialog()
//创建子对话框
m_property_dlg.Create(IDD_PROPERTY_DIALOG);
m_album_cover_dlg.Create(IDD_PROPERTY_ALBUM_COVER_DIALOG);
m_advanced_dlg.Create(IDD_PROPERTY_ADVANCED_DIALOG);
if (!m_batch_edit) //批量编辑时不添加“高级标签信息”标签
m_advanced_dlg.Create(IDD_PROPERTY_ADVANCED_DIALOG);
//添加对话框
m_tab_ctrl.AddWindow(&m_property_dlg, CCommon::LoadText(IDS_FILE_PROPERTY));
m_tab_ctrl.AddWindow(&m_album_cover_dlg, CCommon::LoadText(IDS_ALBUM_COVER));
m_tab_ctrl.AddWindow(&m_advanced_dlg, CCommon::LoadText(IDS_ADVANCED_PROPERTY));
if (!m_batch_edit)
m_tab_ctrl.AddWindow(&m_advanced_dlg, CCommon::LoadText(IDS_ADVANCED_PROPERTY));
//为每个标签添加图标
CImageList ImageList;
ImageList.Create(theApp.DPI(16), theApp.DPI(16), ILC_COLOR32 | ILC_MASK, 2, 2);
ImageList.Add(theApp.m_icon_set.file_relate);
ImageList.Add(theApp.m_icon_set.album_cover);
ImageList.Add(theApp.m_icon_set.tag);
if (!m_batch_edit)
ImageList.Add(theApp.m_icon_set.tag);
m_tab_ctrl.SetImageList(&ImageList);
ImageList.Detach();
@@ -115,7 +118,8 @@ BOOL CPropertyDlg::OnInitDialog()
m_tab_ctrl.AdjustTabWindowSize();
m_album_cover_dlg.AdjustColumnWidth();
m_advanced_dlg.AdjustColumnWidth();
if (!m_batch_edit)
m_advanced_dlg.AdjustColumnWidth();
m_tab_ctrl.SetCurTab(m_tab_index);
+6 -1
View File
@@ -645,6 +645,8 @@
#define IDS_RENAME_INFO 520
#define IDS_PLAY_TRACK 521
#define IDS_ADVANCED_PROPERTY 522
#define IDS_CONNOT_FIND_ARTIST_WARNING 523
#define IDS_CONNOT_FIND_ALBUM_WARNING 524
#define IDC_STATIC_PATH 1001
#define IDC_LIST1 1002
#define IDC_PATH_LIST 1002
@@ -1406,13 +1408,16 @@
#define ID_1_33216 33216
#define ID_1_33217 33217
#define ID_COPY_ALL_TEXT 33218
#define ID_VIEW_ARTIST 33219
#define ID_33220 33220
#define ID_VIEW_ALBUM 33221
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 505
#define _APS_NEXT_COMMAND_VALUE 33219
#define _APS_NEXT_COMMAND_VALUE 33222
#define _APS_NEXT_CONTROL_VALUE 1185
#define _APS_NEXT_SYMED_VALUE 101
#endif