xref: /MusicPlayer2/MusicPlayer2/AllMediaDlg.h (revision c5d6b157b9196dff7e4ef1a651ab17c1ffa094d7)
1 #pragma once
2 #include "ListCtrlEx.h"
3 #include "SearchEditCtrl.h"
4 #include "MediaLibTabDlg.h"
5 
6 
7 // CAllMediaDlg 对话框
8 
9 class CAllMediaDlg : public CMediaLibTabDlg
10 {
11     DECLARE_DYNAMIC(CAllMediaDlg)
12 
13 public:
14     enum DialogType
15     {
16         DT_ALL_MEDIA,           //所有曲目
17         DT_RECENT_MEDIA         //最近播放的曲目
18     };
19 
20 public:
21     CAllMediaDlg(CAllMediaDlg::DialogType type, CWnd* pParent = nullptr);   // 标准构造函数
22     virtual ~CAllMediaDlg();
23 
24 // 对话框数据
25 #ifdef AFX_DESIGN_TIME
26     enum { IDD = IDD_ALL_MEDIA_DIALOG };
27 #endif
28 
29 public:
30     void RefreshData();
31 
32 protected:
33     enum SongColumeIndex
34     {
35         COL_INDEX = 0,
36         COL_TITLE,
37         COL_ARTIST,
38         COL_ALBUM,
39         COL_TRACK,
40         COL_GENRE,
41         COL_BITRATE,
42         COL_YEAR,
43         COL_PATH,
44         COL_LAST_PLAYED_TIME,
45         COL_MAX,
46     };
47 
48 protected:
49     CListCtrlEx m_song_list_ctrl;
50     CSearchEditCtrl m_search_edit;
51 
52     CListCtrlEx::ListData m_list_data;              // 列表数据
53     CListCtrlEx::ListData m_list_data_searched;     // 搜索后的列表数据
54     vector<SongInfo> m_list_songs;                  // 与列表数据同步
55     vector<SongInfo> m_list_songs_searched;         // 与搜索后的列表数据同步
56 
57     bool m_initialized{ false };
58     bool m_searched{ false };           // 是否处于搜索状态
59     std::vector<int> m_selected_items;  // 列表选中的项目的序号
60     int m_selected_item{ -1 };
61     wstring m_selected_string;
62 
63     DialogType m_type{};
64 
65 protected:
66     void InitListData();
67     void SetRowData(CListCtrlEx::RowData& row_data, const SongInfo& song);
68     void UpdateListIndex();
69     void ShowSongList();
70     void QuickSearch(const wstring& key_word);      //根据关键字执行快速查找,将结果保存在m_list_data_searched中
71     void SongListClicked(int index);
72     void SetButtonsEnable(bool enable);
73     void SetPlayButtonText(bool selected_valid);    //设置父窗口中“播放”按钮的文本
74 
75     virtual void OnTabEntered() override;
76     virtual void OnTabExited() override;
77 
78     virtual const vector<SongInfo>& GetSongList() const override;
79     virtual int GetItemSelected() const override;
80     virtual const vector<int>& GetItemsSelected() const override;
81     virtual void RefreshSongList() override;        //刷新选中行的信息
82     virtual void AfterDeleteFromDisk(const std::vector<SongInfo>& files) override;
83     virtual wstring GetSelectedString() const override;
84 
85     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
86 
87     DECLARE_MESSAGE_MAP()
88 public:
89     virtual BOOL OnInitDialog();
90     virtual void OnOK();
91     afx_msg void OnHdnItemclickSongList(NMHDR *pNMHDR, LRESULT *pResult);
92     afx_msg void OnEnChangeSearchEdit();
93     afx_msg void OnNMClickSongList(NMHDR *pNMHDR, LRESULT *pResult);
94     afx_msg void OnNMRClickSongList(NMHDR *pNMHDR, LRESULT *pResult);
95     afx_msg void OnNMDblclkSongList(NMHDR *pNMHDR, LRESULT *pResult);
96 protected:
97     afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam);
98 public:
99     afx_msg void OnInitMenu(CMenu* pMenu);
100 };
101