xref: /haiku/src/apps/text_search/InitialIterator.h (revision 13581b3d2a71545960b98fefebc5225b5bf29072)
1 /*
2  * Copyright (c) 2008 Stephan Aßmus <superstippi@gmx.de>
3  * Copyright (c) 1998-2007 Matthijs Hollemans
4  * All rights reserved. Distributed under the terms of the MIT License.
5  */
6 #ifndef INITIAL_ITERATOR_H
7 #define INITIAL_ITERATOR_H
8 
9 #include <List.h>
10 #include <Message.h>
11 
12 #include "FileIterator.h"
13 
14 class BEntry;
15 class BDirectory;
16 class Model;
17 
18 // TODO: split into Folder and MessageFileIterator (_GetTopEntry)
19 // This code either has an original folder to start iterating from,
20 // or it uses the refs in the message that contains the selected poses
21 // from the Tracker window that invoked us. But I think if folders are
22 // among those poses, it will then use the same code for examining sub
23 // folders.
24 
25 // Provides an interface to retrieve the next file that should be grepped
26 // for the search string.
27 class InitialIterator : public FileIterator {
28 public:
29 								InitialIterator(const Model* model);
30 	virtual						~InitialIterator();
31 
32 	virtual	bool				IsValid() const;
33 	virtual	bool				GetNextName(char* buffer);
34 	virtual	bool				NotifyNegatives() const;
35 
36 	// Looks for the next entry in the top-level dir.
37 			bool				GetTopEntry(BEntry& entry);
38 
39 	// Should this subfolder be followed?
40 			bool				FollowSubdir(BEntry& entry) const;
41 
42 private:
43 	// Looks for the next entry.
44 			bool				_GetNextEntry(BEntry& entry);
45 
46 	// Looks for the next entry in a subdir.
47 			bool				_GetSubEntry(BEntry& entry);
48 
49 	// Determines whether we can add a subdir.
50 			void				_ExamineSubdir(BEntry& entry);
51 
52 private:
53 	// Contains pointers to BDirectory objects.
54 			BList				fDirectories;
55 
56 	// The directory we are currently looking at.
57 			BDirectory*			fCurrentDir;
58 
59 	// The ref number we are currently looking at.
60 			int32				fCurrentRef;
61 
62 	// The current settings
63 			BMessage			fSelectedFiles;
64 
65 			bool				fRecurseDirs : 1;
66 			bool				fRecurseLinks : 1;
67 			bool				fSkipDotDirs : 1;
68 			bool				fTextOnly : 1;
69 };
70 
71 #endif // INITIAL_ITERATOR_H
72