xref: /MusicPlayer2/MusicPlayer2/MediaClassifyDlg.h (revision c5d6b157b9196dff7e4ef1a651ab17c1ffa094d7)
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