[EXPLORER][EXPLORER_NEW]
[reactos.git] / base / shell / explorer / shell / entries.h
1 /*
2 * Copyright 2003, 2004 Martin Fuchs
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19
20 //
21 // Explorer clone
22 //
23 // entries.h
24 //
25 // Martin Fuchs, 23.07.2003
26 //
27
28
29 enum ENTRY_TYPE {
30 ET_UNKNOWN,
31 #ifndef _NO_WIN_FS
32 ET_WINDOWS,
33 #endif
34 #ifdef __WINE__
35 ET_UNIX,
36 #endif
37 ET_SHELL,
38 ET_NTOBJS,
39 ET_REGISTRY,
40 ET_FAT,
41 ET_WEB
42 };
43
44 enum SORT_ORDER {
45 SORT_NONE,
46 SORT_NAME,
47 SORT_EXT,
48 SORT_SIZE,
49 SORT_DATE
50 };
51
52 enum SCAN_FLAGS {
53 SCAN_DONT_EXTRACT_ICONS = 1,
54 SCAN_DONT_ACCESS = 2,
55 SCAN_NO_FILESYSTEM = 4
56 };
57
58 #ifndef ATTRIBUTE_SYMBOLIC_LINK
59 #define ATTRIBUTE_LONGNAME 0x08000000
60 #define ATTRIBUTE_VOLNAME 0x10000000
61 #define ATTRIBUTE_ERASED 0x20000000
62 #define ATTRIBUTE_SYMBOLIC_LINK 0x40000000
63 #define ATTRIBUTE_EXECUTABLE 0x80000000
64 #endif
65
66 enum ICONCACHE_FLAGS {
67 ICF_NORMAL = 0,
68 ICF_MIDDLE = 1,
69 ICF_LARGE = 2,
70 ICF_OPEN = 4,
71 ICF_OVERLAYS = 8,
72 ICF_HICON = 16,
73 ICF_SYSCACHE = 32
74 };
75
76 #ifndef SHGFI_ADDOVERLAYS // missing in MinGW (as of 28.12.2005)
77 #define SHGFI_ADDOVERLAYS 0x000000020
78 #endif
79
80
81 /// base of all file and directory entries
82 struct Entry
83 {
84 protected:
85 Entry(ENTRY_TYPE etype);
86 Entry(Entry* parent, ENTRY_TYPE etype);
87 Entry(const Entry&);
88
89 public:
90 virtual ~Entry();
91
92 Entry* _next;
93 Entry* _down;
94 Entry* _up;
95
96 bool _expanded;
97 bool _scanned;
98 int _level;
99
100 WIN32_FIND_DATA _data;
101
102 SFGAOF _shell_attribs;
103 LPTSTR _display_name;
104 LPTSTR _type_name;
105 LPTSTR _content;
106
107 ENTRY_TYPE _etype;
108 int /*ICON_ID*/ _icon_id;
109
110 BY_HANDLE_FILE_INFORMATION _bhfi;
111 bool _bhfi_valid;
112
113 void free_subentries();
114
115 void read_directory_base(SORT_ORDER sortOrder=SORT_NAME, int scan_flags=0);
116 Entry* read_tree(const void* path, SORT_ORDER sortOrder=SORT_NAME, int scan_flags=0);
117 void sort_directory(SORT_ORDER sortOrder);
118 void smart_scan(SORT_ORDER sortOrder=SORT_NAME, int scan_flags=0);
119 int extract_icon(ICONCACHE_FLAGS flags=ICF_NORMAL);
120 int safe_extract_icon(ICONCACHE_FLAGS flags=ICF_NORMAL);
121
122 virtual void read_directory(int scan_flags=0) {}
123 virtual const void* get_next_path_component(const void*) const {return NULL;}
124 virtual Entry* find_entry(const void*) {return NULL;}
125 virtual bool get_path(PTSTR path, size_t path_count) const = 0;
126 virtual ShellPath create_absolute_pidl() const {return (LPCITEMIDLIST)NULL;}
127 virtual HRESULT GetUIObjectOf(HWND hWnd, REFIID riid, LPVOID* ppvOut);
128 virtual ShellFolder get_shell_folder() const;
129 virtual BOOL launch_entry(HWND hwnd, UINT nCmdShow=SW_SHOWNORMAL);
130 virtual HRESULT do_context_menu(HWND hwnd, const POINT& pos, CtxMenuInterfaces& cm_ifs);
131
132 protected:
133 bool get_path_base(PTSTR path, size_t path_count, ENTRY_TYPE etype) const;
134 };
135
136
137 /// base for all directory entries
138 struct Directory {
139 protected:
140 Directory() : _path(NULL) {}
141 virtual ~Directory() {}
142
143 void* _path;
144 };
145
146
147 /// root entry for file system trees
148 struct Root {
149 Root();
150 ~Root();
151
152 Entry* _entry;
153 TCHAR _path[MAX_PATH];
154 TCHAR _volname[_MAX_FNAME];
155 TCHAR _fs[_MAX_DIR];
156 DWORD _drive_type;
157 DWORD _fs_flags;
158 SORT_ORDER _sort_order;
159
160 Entry* read_tree(LPCTSTR path, int scan_flags=0);
161 Entry* read_tree(LPCITEMIDLIST pidl, int scan_flags=0);
162 };