011b661b0a0fefc463bad557ab6bb9858f35f18c
[reactos.git] / subsys / system / explorer / shell / entries.h
1 /*
2  * Copyright 2003 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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_WINDOWS,
31 #ifdef __linux__
32         ET_UNIX,
33 #endif
34         ET_SHELL
35 };
36
37 enum SORT_ORDER {
38         SORT_NAME,
39         SORT_EXT,
40         SORT_SIZE,
41         SORT_DATE
42 };
43
44 struct Entry
45 {
46 protected:
47         Entry(ENTRY_TYPE etype);
48         Entry(Entry* parent);
49
50 public:
51         virtual ~Entry();
52
53         Entry*          _next;
54         Entry*          _down;
55         Entry*          _up;
56
57         bool            _expanded;
58         bool            _scanned;
59         int             _level;
60
61         WIN32_FIND_DATA _data;
62
63         SFGAOF          _shell_attribs;
64
65         ENTRY_TYPE      _etype;
66         HICON           _hIcon;
67
68         BY_HANDLE_FILE_INFORMATION _bhfi;
69         bool            _bhfi_valid;
70
71         void    free_subentries();
72
73         void    read_directory(SORT_ORDER sortOrder);
74         Entry*  read_tree(const void* path, SORT_ORDER sortOrder);
75         void    sort_directory(SORT_ORDER sortOrder);
76         void    smart_scan();
77
78         virtual void read_directory() {}
79         virtual const void* get_next_path_component(const void*) {return NULL;}
80         virtual Entry* find_entry(const void*) {return NULL;}
81         virtual void get_path(PTSTR path) const = 0;
82         virtual BOOL launch_entry(HWND hwnd, UINT nCmdShow=SW_SHOWNORMAL);
83 };
84
85 struct Directory {
86 protected:
87         Directory() : _path(NULL) {}
88         virtual ~Directory() {}
89
90         void*   _path;
91 };
92
93
94 struct Root {
95         Root();
96         ~Root();
97
98         Entry*  _entry;
99         TCHAR   _path[MAX_PATH];
100         TCHAR   _volname[_MAX_FNAME];
101         TCHAR   _fs[_MAX_DIR];
102         DWORD   _drive_type;
103         DWORD   _fs_flags;
104 };