1 #pragma once 2 #include "MediaLibHelper.h" 3 #include "ListCtrlEx.h" 4 #include "SearchEditCtrl.h" 5 #include "MediaLibTabDlg.h" 6 #include "HorizontalSplitter.h" 7 8 9 // CMediaClassifyDlg 对话框 10 11 class CMediaClassifyDlg : public CMediaLibTabDlg 12 { 13 DECLARE_DYNAMIC(CMediaClassifyDlg) 14 15 public: 16 CMediaClassifyDlg(CMediaClassifier::ClassificationType type, CWnd* pParent = nullptr); // 标准构造函数 17 virtual ~CMediaClassifyDlg(); 18 19 // 对话框数据 20 #ifdef AFX_DESIGN_TIME 21 enum { IDD = IDD_MEDIA_CLASSIFY_DIALOG }; 22 #endif 23 24 public: 25 void RefreshData(); 26 bool SetLeftListSel(wstring item); 27 28 protected: 29 enum SongColumeIndex 30 { 31 COL_TITLE = 0, 32 COL_ARTIST, 33 COL_ALBUM, 34 COL_TRACK, 35 COL_GENRE, 36 COL_BITRATE, 37 COL_PATH, 38 }; 39 40 protected: 41 CListCtrlEx m_classify_list_ctrl; 42 CListCtrlEx m_song_list_ctrl; 43 CSearchEditCtrl m_search_edit; 44 45 CMediaClassifier::ClassificationType m_type; 46 CMediaClassifier m_classifer; 47 wstring m_classify_selected; // 左侧列表选中项的文本 48 wstring m_default_str; // “艺术家”或“唱片集”为空的字符串 49 bool m_searched{ false }; // 是否处于搜索状态 50 CMediaClassifier::MediaList m_search_result; // 保存搜索结果 51 CListCtrlEx::ListData m_list_data_left; // 左侧列表数据 52 CListCtrlEx::ListData m_list_data_right; // 右侧列表数据 53 vector<SongInfo> m_right_items; // 右侧列表歌曲数据 54 55 int last_selected_index{ -2 }; 56 std::vector<int> m_left_selected_items; // 左侧列表选中的项目的序号 57 std::vector<int> m_right_selected_items; // 右侧列表多选选中的项目的序号 58 int m_right_selected_item{ -1 }; // 右侧列表选中的项目的序号 59 wstring m_selected_string; 60 bool m_left_selected{}; // 最后一次选中的是左侧还是右侧 61 62 bool m_initialized{ false }; 63 CHorizontalSplitter m_splitter_ctrl; 64 65 protected: 66 void ShowClassifyList(); 67 void ShowSongList(); 68 CString GetClassifyListSelectedString(int index) const; 69 void ClassifyListClicked(int index); 70 void SongListClicked(int index); 71 bool IsItemMatchKeyWord(const SongInfo& song, const wstring& key_word); 72 bool IsItemMatchKeyWord(const wstring& str, const wstring& key_word); 73 void QuickSearch(const wstring& key_word); //根据关键字执行快速查找,将结果保存在m_search_result中 74 void SetButtonsEnable(); 75 void SetButtonsEnable(bool enable); 76 77 void CalculateClassifyListColumeWidth(std::vector<int>& width); 78 79 virtual void OnTabEntered() override; 80 81 virtual void GetSongsSelected(std::vector<SongInfo>& song_list) const override; 82 virtual const vector<SongInfo>& GetSongList() const override; 83 virtual int GetItemSelected() const override; 84 virtual const vector<int>& GetItemsSelected() const override; 85 virtual void RefreshSongList() override; 86 virtual void AfterDeleteFromDisk(const std::vector<SongInfo>& files) override; 87 virtual wstring GetSelectedString() const override; 88 virtual wstring GetNewPlaylistName() const override; 89 virtual CMediaClassifier::ClassificationType GetClassificationType() const override; 90 virtual std::wstring GetClassificationItemName() const override; 91 92 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 93 94 DECLARE_MESSAGE_MAP() 95 public: 96 virtual BOOL OnInitDialog(); 97 afx_msg void OnNMClickClassifyList(NMHDR *pNMHDR, LRESULT *pResult); 98 afx_msg void OnNMRClickClassifyList(NMHDR *pNMHDR, LRESULT *pResult); 99 afx_msg void OnEnChangeMfceditbrowse1(); 100 protected: 101 afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam); 102 public: 103 afx_msg void OnNMClickSongList(NMHDR *pNMHDR, LRESULT *pResult); 104 afx_msg void OnNMRClickSongList(NMHDR *pNMHDR, LRESULT *pResult); 105 afx_msg void OnNMDblclkClassifyList(NMHDR *pNMHDR, LRESULT *pResult); 106 afx_msg void OnNMDblclkSongList(NMHDR *pNMHDR, LRESULT *pResult); 107 afx_msg void OnHdnItemclickSongList(NMHDR *pNMHDR, LRESULT *pResult); 108 afx_msg void OnSize(UINT nType, int cx, int cy); 109 afx_msg void OnDestroy(); 110 afx_msg void OnInitMenu(CMenu* pMenu); 111 }; 112