xref: /MusicPlayer2/MusicPlayer2/SetPathDlg.h (revision 965ce478a79b0d21e8a6e2ade0490efa175855dd)
1 #pragma once
2 #include "Common.h"
3 #include "ListCtrlEx.h"
4 #include "TabDlg.h"
5 #include "SearchEditCtrl.h"
6 #include "ListCache.h"
7 
8 // CSetPathDlg 对话框
9 // #define WM_PATH_SELECTED (WM_USER+107) 不再使用
10 
11 class CSetPathDlg : public CTabDlg
12 {
13     DECLARE_DYNAMIC(CSetPathDlg)
14 
15 public:
16     CSetPathDlg(CWnd* pParent = NULL);   // 标准构造函数
17     virtual ~CSetPathDlg();
18 
19 // 对话框数据
20 #ifdef AFX_DESIGN_TIME
21     enum { IDD = IDD_SET_PATH_DIALOG };
22 #endif
23 
24 public:
25     void QuickSearch(const wstring& key_words);     //根据关键字执行快速查找(更新m_search_result)
26     void AdjustColumnWidth();                       //自动调整列表宽度
27     void RefreshTabData();                          //刷新标签页数据
28     bool SetCurSel(const wstring& folder_path);
29 
30 protected:
31     bool m_searched{ false };           // 是否处于搜索状态
32     wstring m_searched_str;
33     vector<size_t> m_search_result;     // 储存快速搜索结果的歌曲序号
34 
35     CListCache m_list_cache;            // 缓存此窗口使用的所有ListItem
36     CListCtrlEx m_path_list;            // 列表对象,数据加载自m_list_cache,搜索状态下经过m_search_result筛选
37     int m_list_selected{};              // 选中的列表数据索引(搜索状态下不是m_list_cache的索引)
38 
39     CEdit m_path_name;
40     CSearchEditCtrl m_search_edit;
41 
42     // 判断选择是否有效
43     bool SelectValid() const;
44     // 获取选择的项目
45     const ListItem& GetSelPath() const;
46     // 返回当前选中GetSelPath()是否能够播放
47     bool SelectedCanPlay() const;
48     // 判断并设置“播放选中”按钮状态
49     void SetButtonsEnable();
50     // 更新m_path_list_info和m_path_list,搜索状态下请确保m_search_result不越界
51     void ShowPathList();
52     // 计算列宽
53     void CalculateColumeWidth(vector<int>& width);
54     void SetListRowData(int index, const ListItem& list_item);
55 
56     virtual void OnTabEntered() override;
57     virtual bool InitializeControls() override;
58     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
59 
60     DECLARE_MESSAGE_MAP()
61 public:
62     virtual BOOL OnInitDialog();
63     //afx_msg void OnBnClickedDeletePathButton();
64     //virtual BOOL OnUiCommand(WPARAM wParam, LPARAM lParam);
65     afx_msg void OnNMClickPathList(NMHDR *pNMHDR, LRESULT *pResult);
66     afx_msg void OnNMRClickPathList(NMHDR *pNMHDR, LRESULT *pResult);
67     afx_msg void OnNMDblclkPathList(NMHDR *pNMHDR, LRESULT *pResult);
68     afx_msg void OnSize(UINT nType, int cx, int cy);
69     virtual void OnOK();
70     afx_msg void OnBnClickedOpenFolder();
71     afx_msg void OnPlayPath();
72     afx_msg void OnDeletePath();
73     afx_msg void OnBrowsePath();
74     afx_msg void OnClearInvalidPath();
75     afx_msg void OnInitMenu(CMenu* pMenu);
76     afx_msg void OnEnChangeSearchEdit();
77     //afx_msg void OnBnClickedClearButton();
78     virtual BOOL PreTranslateMessage(MSG* pMsg);
79 protected:
80     afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam);
81 public:
82     afx_msg void OnContainSubFolder();
83     afx_msg void OnBnClickedSortButton();
84     afx_msg void OnLibFolderSortRecentPlayed();
85     afx_msg void OnLibFolderSortRecentAdded();
86     afx_msg void OnLibFolderSortPath();
87     afx_msg void OnLibFolderProperties();
88     afx_msg void OnFileOpenFolder();
89     virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
90     afx_msg void OnAddToNewPlaylist();
91 };
92