xref: /MusicPlayer2/MusicPlayer2/FindListDlg.h (revision 3e4e0e65f4b4150a7f66296f5d6f76e666ef02d7)
19cffa0dfSzhongyang219 #pragma once
29cffa0dfSzhongyang219 #include "afxdialogex.h"
39cffa0dfSzhongyang219 #include "TabDlg.h"
49cffa0dfSzhongyang219 #include "ListCtrlEx.h"
59cffa0dfSzhongyang219 #include "SearchEditCtrl.h"
69cffa0dfSzhongyang219 #include "ListCache.h"
79cffa0dfSzhongyang219 
89cffa0dfSzhongyang219 // CFindListDlg 对话框
99cffa0dfSzhongyang219 
109cffa0dfSzhongyang219 class CFindListDlg : public CTabDlg
119cffa0dfSzhongyang219 {
129cffa0dfSzhongyang219     DECLARE_DYNAMIC(CFindListDlg)
139cffa0dfSzhongyang219 
149cffa0dfSzhongyang219 public:
159cffa0dfSzhongyang219     CFindListDlg(CWnd* pParent = nullptr);   // 标准构造函数
169cffa0dfSzhongyang219     virtual ~CFindListDlg();
179cffa0dfSzhongyang219 
189cffa0dfSzhongyang219 // 对话框数据
199cffa0dfSzhongyang219 #ifdef AFX_DESIGN_TIME
209cffa0dfSzhongyang219     enum { IDD = IDD_FIND_LIST_DIALOG };
219cffa0dfSzhongyang219 #endif
229cffa0dfSzhongyang219 
239cffa0dfSzhongyang219 private:
249cffa0dfSzhongyang219     enum COLUMN
259cffa0dfSzhongyang219     {
269cffa0dfSzhongyang219         COL_NAME,
279cffa0dfSzhongyang219         COL_TRACK_NUM,
289cffa0dfSzhongyang219         COL_MAX
299cffa0dfSzhongyang219     };
309cffa0dfSzhongyang219 
319cffa0dfSzhongyang219     CSearchEditCtrl m_search_edit;
32*800a68caSzhongyang219 
33*800a68caSzhongyang219     //列表的来源
34*800a68caSzhongyang219     enum class ItemFrom
35*800a68caSzhongyang219     {
36*800a68caSzhongyang219         UNKNOWN,
37*800a68caSzhongyang219         RECENT_PLAYED,	//最近播放
38*800a68caSzhongyang219         MEDIALIB_ITEM,	//未播放过的媒体库项目
39*800a68caSzhongyang219         FOLDER_EXPLORE	//“文件夹浏览”中未播放过的文件夹
40*800a68caSzhongyang219     };
41*800a68caSzhongyang219     struct FindListItem
42*800a68caSzhongyang219     {
43*800a68caSzhongyang219         ListItem list_data;
44*800a68caSzhongyang219         ItemFrom item_from;
45*800a68caSzhongyang219         bool operator==(const ListItem& another_list_data) const
46*800a68caSzhongyang219         {
47*800a68caSzhongyang219             return list_data == another_list_data;
48*800a68caSzhongyang219         }
49*800a68caSzhongyang219     };
50*800a68caSzhongyang219     std::vector<FindListItem> m_all_list_items;
519cffa0dfSzhongyang219     CListCtrlEx m_list_ctrl;
529cffa0dfSzhongyang219     CListCtrlEx::ListData m_list_data;              // 列表数据
539cffa0dfSzhongyang219     CListCtrlEx::ListData m_list_data_searched;     // 搜索后的列表数据
549cffa0dfSzhongyang219     vector<int> m_search_result;		//保存搜索后的索引
559cffa0dfSzhongyang219 
569cffa0dfSzhongyang219     bool m_searched{ false };           // 是否处于搜索状态
579cffa0dfSzhongyang219     bool m_initialized{ false };
589cffa0dfSzhongyang219 
599cffa0dfSzhongyang219 private:
609cffa0dfSzhongyang219     void InitListData();
619cffa0dfSzhongyang219     virtual void OnTabEntered() override;
629cffa0dfSzhongyang219 
639cffa0dfSzhongyang219     void AddListCacheData(const CListCache& list_cache);	//向m_all_list_items中添加一个CListCache中的所有项目
649cffa0dfSzhongyang219     void AddMediaLibItem(CMediaClassifier::ClassificationType type);	//向m_all_list_items中添加媒体库中指定类型的所有项目
65c1fa382bSzhongyang219     void AddAllFolders();	//向m_all_list_items中添加媒体库中所有文件夹
669cffa0dfSzhongyang219 
679cffa0dfSzhongyang219     void ShowList();
689cffa0dfSzhongyang219     void QuickSearch(const wstring& key_word);      //根据关键字执行快速查找,将结果保存在m_list_data_searched中
699cffa0dfSzhongyang219 
709cffa0dfSzhongyang219     //向父窗口发送消息以更新“播放选中”按钮的状态
719cffa0dfSzhongyang219     void SetPlaySelectedEnable(bool enable);
729cffa0dfSzhongyang219 
73*800a68caSzhongyang219     FindListItem GetSelectedItem() const;
74*800a68caSzhongyang219 
759cffa0dfSzhongyang219 protected:
769cffa0dfSzhongyang219     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
779cffa0dfSzhongyang219 
789cffa0dfSzhongyang219     DECLARE_MESSAGE_MAP()
799cffa0dfSzhongyang219 public:
809cffa0dfSzhongyang219     virtual BOOL OnInitDialog();
819cffa0dfSzhongyang219     virtual void OnOK();
829cffa0dfSzhongyang219 protected:
839cffa0dfSzhongyang219     afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam);
849cffa0dfSzhongyang219 public:
859cffa0dfSzhongyang219     afx_msg void OnEnChangeSearchEdit();
869cffa0dfSzhongyang219     afx_msg void OnNMClickSongList(NMHDR* pNMHDR, LRESULT* pResult);
8705b6c2f7Szhongyang219     afx_msg void OnSize(UINT nType, int cx, int cy);
88*800a68caSzhongyang219     afx_msg void OnNMDblclkSongList(NMHDR* pNMHDR, LRESULT* pResult);
89*800a68caSzhongyang219     afx_msg void OnNMRClickSongList(NMHDR* pNMHDR, LRESULT* pResult);
90*800a68caSzhongyang219     afx_msg void OnPlayItem();
91*800a68caSzhongyang219     afx_msg void OnCopyText();
92*800a68caSzhongyang219     afx_msg void OnViewInMediaLib();
93*800a68caSzhongyang219     afx_msg void OnLibRecentPlayedItemProperties();
94*800a68caSzhongyang219     afx_msg void OnInitMenu(CMenu* pMenu);
959cffa0dfSzhongyang219 };
96