diff --git a/MusicPlayer2/CMediaLibDlg.cpp b/MusicPlayer2/CMediaLibDlg.cpp index f2119b42..fd21efff 100644 --- a/MusicPlayer2/CMediaLibDlg.cpp +++ b/MusicPlayer2/CMediaLibDlg.cpp @@ -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(m_tab_ctrl.GetCurrentTab()); + if (pCurTab != nullptr) + { + return pCurTab->SetLeftListSel(item); + } + return false; +} + void CMediaLibDlg::SaveConfig() const { CIniHelper ini{ theApp.m_config_path }; diff --git a/MusicPlayer2/CMediaLibDlg.h b/MusicPlayer2/CMediaLibDlg.h index 7f010472..a07c9617 100644 --- a/MusicPlayer2/CMediaLibDlg.h +++ b/MusicPlayer2/CMediaLibDlg.h @@ -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(); diff --git a/MusicPlayer2/MediaClassifyDlg.cpp b/MusicPlayer2/MediaClassifyDlg.cpp index 171ad538..dad37c95 100644 --- a/MusicPlayer2/MediaClassifyDlg.cpp +++ b/MusicPlayer2/MediaClassifyDlg.cpp @@ -96,6 +96,23 @@ void CMediaClassifyDlg::RefreshData() } } +bool CMediaClassifyDlg::SetLeftListSel(const wstring & item) +{ + int list_size = static_cast(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(); diff --git a/MusicPlayer2/MediaClassifyDlg.h b/MusicPlayer2/MediaClassifyDlg.h index f79e8021..27fe0703 100644 --- a/MusicPlayer2/MediaClassifyDlg.h +++ b/MusicPlayer2/MediaClassifyDlg.h @@ -23,6 +23,7 @@ public: public: virtual void GetSongsSelected(std::vector& song_list) const override; void RefreshData(); + bool SetLeftListSel(const wstring& item); protected: enum SongColumeIndex diff --git a/MusicPlayer2/MusicPlayer2.cpp b/MusicPlayer2/MusicPlayer2.cpp index 36c08a85..5bdb4e0d 100644 --- a/MusicPlayer2/MusicPlayer2.cpp +++ b/MusicPlayer2/MusicPlayer2.cpp @@ -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)); diff --git a/MusicPlayer2/MusicPlayer2.rc b/MusicPlayer2/MusicPlayer2.rc index 2a83c539..dce6b414 100644 Binary files a/MusicPlayer2/MusicPlayer2.rc and b/MusicPlayer2/MusicPlayer2.rc differ diff --git a/MusicPlayer2/MusicPlayerCmdHelper.cpp b/MusicPlayer2/MusicPlayerCmdHelper.cpp index 25d1f952..88cf3199 100644 --- a/MusicPlayer2/MusicPlayerCmdHelper.cpp +++ b/MusicPlayer2/MusicPlayerCmdHelper.cpp @@ -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(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& songs, const std::wstring& playlist_path) { if (CPlayer::GetInstance().IsPlaylistMode() && playlist_path == CPlayer::GetInstance().GetPlaylistPath()) diff --git a/MusicPlayer2/MusicPlayerCmdHelper.h b/MusicPlayer2/MusicPlayerCmdHelper.h index 6bbaebcf..7d0724e9 100644 --- a/MusicPlayer2/MusicPlayerCmdHelper.h +++ b/MusicPlayer2/MusicPlayerCmdHelper.h @@ -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& songs, const std::wstring& playlist_path); diff --git a/MusicPlayer2/MusicPlayerDlg.cpp b/MusicPlayer2/MusicPlayerDlg.cpp index 48609bdb..beb67d58 100644 --- a/MusicPlayer2/MusicPlayerDlg.cpp +++ b/MusicPlayer2/MusicPlayerDlg.cpp @@ -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); + } +} diff --git a/MusicPlayer2/MusicPlayerDlg.h b/MusicPlayer2/MusicPlayerDlg.h index db37d80b..d7639e6a 100644 --- a/MusicPlayer2/MusicPlayerDlg.h +++ b/MusicPlayer2/MusicPlayerDlg.h @@ -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(); }; diff --git a/MusicPlayer2/PropertyDlg.cpp b/MusicPlayer2/PropertyDlg.cpp index d8f639e4..a2f39d14 100644 --- a/MusicPlayer2/PropertyDlg.cpp +++ b/MusicPlayer2/PropertyDlg.cpp @@ -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); diff --git a/MusicPlayer2/resource.h b/MusicPlayer2/resource.h index 1668476d..a213a6f7 100644 --- a/MusicPlayer2/resource.h +++ b/MusicPlayer2/resource.h @@ -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