xref: /MusicPlayer2/MusicPlayer2/FindListDlg.h (revision 3e4e0e65f4b4150a7f66296f5d6f76e666ef02d7)
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 
33     //列表的来源
34     enum class ItemFrom
35     {
36         UNKNOWN,
37         RECENT_PLAYED,	//最近播放
38         MEDIALIB_ITEM,	//未播放过的媒体库项目
39         FOLDER_EXPLORE	//“文件夹浏览”中未播放过的文件夹
40     };
41     struct FindListItem
42     {
43         ListItem list_data;
44         ItemFrom item_from;
45         bool operator==(const ListItem& another_list_data) const
46         {
47             return list_data == another_list_data;
48         }
49     };
50     std::vector<FindListItem> m_all_list_items;
51     CListCtrlEx m_list_ctrl;
52     CListCtrlEx::ListData m_list_data;              // 列表数据
53     CListCtrlEx::ListData m_list_data_searched;     // 搜索后的列表数据
54     vector<int> m_search_result;		//保存搜索后的索引
55 
56     bool m_searched{ false };           // 是否处于搜索状态
57     bool m_initialized{ false };
58 
59 private:
60     void InitListData();
61     virtual void OnTabEntered() override;
62 
63     void AddListCacheData(const CListCache& list_cache);	//向m_all_list_items中添加一个CListCache中的所有项目
64     void AddMediaLibItem(CMediaClassifier::ClassificationType type);	//向m_all_list_items中添加媒体库中指定类型的所有项目
65     void AddAllFolders();	//向m_all_list_items中添加媒体库中所有文件夹
66 
67     void ShowList();
68     void QuickSearch(const wstring& key_word);      //根据关键字执行快速查找,将结果保存在m_list_data_searched中
69 
70     //向父窗口发送消息以更新“播放选中”按钮的状态
71     void SetPlaySelectedEnable(bool enable);
72 
73     FindListItem GetSelectedItem() const;
74 
75 protected:
76     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
77 
78     DECLARE_MESSAGE_MAP()
79 public:
80     virtual BOOL OnInitDialog();
81     virtual void OnOK();
82 protected:
83     afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam);
84 public:
85     afx_msg void OnEnChangeSearchEdit();
86     afx_msg void OnNMClickSongList(NMHDR* pNMHDR, LRESULT* pResult);
87     afx_msg void OnSize(UINT nType, int cx, int cy);
88     afx_msg void OnNMDblclkSongList(NMHDR* pNMHDR, LRESULT* pResult);
89     afx_msg void OnNMRClickSongList(NMHDR* pNMHDR, LRESULT* pResult);
90     afx_msg void OnPlayItem();
91     afx_msg void OnCopyText();
92     afx_msg void OnViewInMediaLib();
93     afx_msg void OnLibRecentPlayedItemProperties();
94     afx_msg void OnInitMenu(CMenu* pMenu);
95 };
96