xref: /MusicPlayer2/MusicPlayer2/FindListDlg.h (revision c1fa382b6dc582665d7ede9b222314265bb88c8f)
1 #pragma once
2 #include "afxdialogex.h"
3 #include "TabDlg.h"
4 #include "ListCtrlEx.h"
5 #include "SearchEditCtrl.h"
6 #include "ListCache.h"
7 
8 // CFindListDlg 对话框
9 
10 class CFindListDlg : public CTabDlg
11 {
12 	DECLARE_DYNAMIC(CFindListDlg)
13 
14 public:
15 	CFindListDlg(CWnd* pParent = nullptr);   // 标准构造函数
16 	virtual ~CFindListDlg();
17 
18 // 对话框数据
19 #ifdef AFX_DESIGN_TIME
20 	enum { IDD = IDD_FIND_LIST_DIALOG };
21 #endif
22 
23 private:
24 	enum COLUMN
25 	{
26 		COL_NAME,
27 		COL_TRACK_NUM,
28 		COL_MAX
29 	};
30 
31 	CSearchEditCtrl m_search_edit;
32 	std::vector<ListItem> m_all_list_items;
33 	CListCtrlEx m_list_ctrl;
34 	CListCtrlEx::ListData m_list_data;              // 列表数据
35 	CListCtrlEx::ListData m_list_data_searched;     // 搜索后的列表数据
36 	vector<int> m_search_result;		//保存搜索后的索引
37 
38 	bool m_searched{ false };           // 是否处于搜索状态
39 	bool m_initialized{ false };
40 
41 private:
42 	void InitListData();
43 	virtual void OnTabEntered() override;
44 
45 	void AddListCacheData(const CListCache& list_cache);	//向m_all_list_items中添加一个CListCache中的所有项目
46 	void AddMediaLibItem(CMediaClassifier::ClassificationType type);	//向m_all_list_items中添加媒体库中指定类型的所有项目
47 	void AddAllFolders();	//向m_all_list_items中添加媒体库中所有文件夹
48 
49 	void ShowList();
50 	void QuickSearch(const wstring& key_word);      //根据关键字执行快速查找,将结果保存在m_list_data_searched中
51 
52 	//向父窗口发送消息以更新“播放选中”按钮的状态
53 	void SetPlaySelectedEnable(bool enable);
54 
55 protected:
56 	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
57 
58 	DECLARE_MESSAGE_MAP()
59 public:
60 	virtual BOOL OnInitDialog();
61 	virtual void OnOK();
62 protected:
63 	afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam);
64 public:
65 	afx_msg void OnEnChangeSearchEdit();
66 	afx_msg void OnNMClickSongList(NMHDR* pNMHDR, LRESULT* pResult);
67 	afx_msg void OnSize(UINT nType, int cx, int cy);
68 };
69